matlab实现随机森林算法
在MATLAB中,可以使用内置的机器学习工具箱(如Statistics and Machine Learning Toolbox)来实现随机森林算法。随机森林是一种集成学习方法,通过构建多个决策树并结合它们的预测结果来提高分类或回归的准确性。
随机森林分类
1. 准备数据
首先,我们需要准备训练数据和测试数据。这里我们使用MATLAB自带的fisheriris
数据集。
% 加载数据集
load fisheriris
X = meas; % 特征数据
Y = species; % 标签数据% 划分训练集和测试集
cv = cvpartition(size(X, 1), 'HoldOut', 0.3);
X_train = X(training(cv), :);
Y_train = Y(training(cv), :);
X_test = X(test(cv), :);
Y_test = Y(test(cv), :);
2. 训练随机森林模型
使用TreeBagger
类训练随机森林模型。TreeBagger
可以创建一个包含多个决策树的随机森林。
% 设置随机森林参数
numTrees = 100; % 决策树的数量
OOBP = true; % 是否计算袋外误差
OOBPredictorImportance = 'on'; % 是否计算特征重要性% 训练随机森林模型
rfModel = TreeBagger(numTrees, X_train, Y_train, ...'Method', 'classification', ...'OOBPredictorImportance', OOBPPredictorImportance, ...'OOBP', OOBP, ...'OOBVarImp', 'on', ...'OOBPredictorImportance', 'on', ...'Prediction', 'curvature', ...'OOBPredictorImportance', 'on', ...'OOBPredictorImportance', 'on', ...'OOBPredictorImportance', 'on');
3. 评估模型性能
使用测试集评估随机森林模型的性能。
% 预测测试集
Y_pred = predict(rfModel, X_test);% 计算准确率
accuracy = sum(strcmp(Y_pred, Y_test)) / length(Y_test);
fprintf('准确率: %.2f%%\n', accuracy * 100);% 计算混淆矩阵
confMat = confusionmat(Y_test, Y_pred);
disp('混淆矩阵:');
disp(confMat);% 绘制混淆矩阵
figure;
confusionchart(Y_test, Y_pred);
title('混淆矩阵');
4. 特征重要性分析
随机森林可以提供特征重要性的评估,帮助理解哪些特征对模型的预测贡献最大。
% 获取特征重要性
featureImportance = rfModel.OOBPermutedPredictorDeltaError;% 绘制特征重要性
figure;
bar(featureImportance);
xlabel('特征索引');
ylabel('特征重要性');
title('特征重要性分析');
完整代码
将上述代码片段组合成一个完整的MATLAB脚本:
% 清空环境
clear; clc; close all;% 加载数据集
load fisheriris
X = meas; % 特征数据
Y = species; % 标签数据% 划分训练集和测试集
cv = cvpartition(size(X, 1), 'HoldOut', 0.3);
X_train = X(training(cv), :);
Y_train = Y(training(cv), :);
X_test = X(test(cv), :);
Y_test = Y(test(cv), :);% 设置随机森林参数
numTrees = 100; % 决策树的数量
OOBP = true; % 是否计算袋外误差
OOBPredictorImportance = 'on'; % 是否计算特征重要性% 训练随机森林模型
rfModel = TreeBagger(numTrees, X_train, Y_train, ...'Method', 'classification', ...'OOBPredictorImportance', OOBPPredictorImportance, ...'OOBP', OOBP, ...'OOBVarImp', 'on', ...'OOBPredictorImportance', 'on', ...'Prediction', 'curvature', ...'OOBPredictorImportance', 'on', ...'OOBPredictorImportance', 'on', ...'OOBPredictorImportance', 'on');% 预测测试集
Y_pred = predict(rfModel, X_test);% 计算准确率
accuracy = sum(strcmp(Y_pred, Y_test)) / length(Y_test);
fprintf('准确率: %.2f%%\n', accuracy * 100);% 计算混淆矩阵
confMat = confusionmat(Y_test, Y_pred);
disp('混淆矩阵:');
disp(confMat);% 绘制混淆矩阵
figure;
confusionchart(Y_test, Y_pred);
title('混淆矩阵');% 获取特征重要性
featureImportance = rfModel.OOBPermutedPredictorDeltaError;% 绘制特征重要性
figure;
bar(featureImportance);
xlabel('特征索引');
ylabel('特征重要性');
title('特征重要性分析');
参考代码 用matlab实现随机森林算法 https://www.youwenfan.com/contentcsc/83534.html,里面附有说明文档,参数可调节