递归特征消除(RFE)与随机森林回归模型的 MATLAB 实现
创作时间:
作者:
@小白创作中心
递归特征消除(RFE)与随机森林回归模型的 MATLAB 实现
引用
CSDN
1.
https://m.blog.csdn.net/subject625Ruben/article/details/142748377
在机器学习中,特征选择是提高模型性能的重要步骤。本文将详细探讨使用递归特征消除(RFE)结合随机森林回归模型的实现,以研究对股票收盘价影响的特征。我们将逐步分析代码并介绍相关的数学原理。
数据准备
首先,我们清空工作区并加载数据,假设最后一列是股票的收盘价,前面的列是特征变量。
clear; close all; clc;
df = readtable('Chabuhou.csv');
X = df(:, 1:end-1); % 特征
y = df{:, end}; % 收盘价
在这段代码中,我们将特征变量 X 定义为数据表的所有列,除了最后一列。同时,目标变量 y 定义为最后一列。这里的数学表示为:
数据划分
接下来,我们将数据划分为训练集和测试集。使用 80% 的数据进行训练,20% 的数据用于测试。
cv = cvpartition(size(X, 1), 'HoldOut', 0.2);
X_train = X(training(cv), :);
y_train = y(training(cv));
X_test = X(test(cv), :);
y_test = y(test(cv));
这里,cvpartition 函数帮助我们创建了一个不分层的划分,以适应回归问题。
随机森林回归模型初始化
接下来,我们初始化随机森林回归模型。
template = templateTree('MaxNumSplits', 20);
numLearningCycles = 100;
随机森林模型通过多个决策树的集成来提高预测准确性。每棵树的最大分裂数设置为 20,总共生成 100 棵树。
递归特征消除(RFE)
我们使用 RFE 方法来选择特征。该过程如下:
- 初始化所有特征为“被选中”状态。
- 使用 K 折交叉验证评估模型的性能。
- 计算每个特征的重要性,并移除贡献最小的特征。
numFeatures = size(X_train, 2);
selectedFeatures = true(1, numFeatures); % 初始化所有特征被选中
kFold = 5; % 5 折交叉验证
cvp = cvpartition(y_train, 'KFold', kFold); % K 折交叉验证
fold_scores = zeros(kFold, numFeatures);
optimalRMSE = inf(numFeatures, 1); % 初始化 RMSE 为无穷大
for i = 1:numFeatures
if any(selectedFeatures)
model = fitrensemble(X_train(:, selectedFeatures), y_train, 'Method', 'Bag', ...
'Learners', template, 'NumLearningCycles', numLearningCycles);
cvModel = crossval(model, 'CVPartition', cvp);
fold_rmse = kfoldLoss(cvModel, 'LossFun', 'mse', 'Mode', 'individual') .^ 0.5;
fold_scores(:, i) = fold_rmse;
avgRMSE = mean(fold_rmse);
optimalRMSE(i) = avgRMSE;
if i < numFeatures
featureImportance = predictorImportance(model);
[~, leastImportantIdx] = min(featureImportance);
selectedFeatures(leastImportantIdx) = false;
end
end
end
找到最佳特征数
最后,我们找到最佳特征数,即对应于最小 RMSE 的特征数量。
[~, optimalIndex] = min(optimalRMSE);
optimalNumFeatures = sum(selectedFeatures); % 计算选中的特征数
fprintf('最佳特征数: %d\n', optimalNumFeatures);
可视化结果
最后,我们可视化递归特征消除过程中的交叉验证得分。
figure('Position', [100 100 1200 800], 'Color', 'w');
title('Recursive Feature Elimination with Cross-Validation (RFCV)', ...
'FontSize', 16, 'FontWeight', 'bold', 'Interpreter', 'none');
xlabel('Number of features selected', 'FontSize', 14);
ylabel('Cross-validation score (RMSE)', 'FontSize', 14);
hold on;
for i = 1:kFold
plot(1:numFeatures, fold_scores(i, :), 'o-', 'Color', [0.5 0.5 0.5], ...
'LineWidth', 0.8, 'MarkerSize', 5, 'MarkerFaceColor', [0.5 0.5 0.5]);
end
plot(1:numFeatures, optimalRMSE, 'o-', 'Color', '#696969', 'LineWidth', 3, ...
'DisplayName', 'Mean CV RMSE');
xline(optimalIndex, '--', 'Color', '#E76F51', ...
'LineWidth', 2, 'Label', sprintf('Optimal = %d', optimalNumFeatures));
legend('Location', 'Best');
grid on;
hold off;
此部分通过绘制每一折的 RMSE 和平均 RMSE,帮助我们直观了解特征选择过程的效果。最终结果的可视化不仅提高了分析的直观性,还为后续的模型优化提供了数据支持。
结论
通过使用递归特征消除结合随机森林回归模型,我们能够有效选择对股票收盘价影响显著的特征。这种方法不仅提高了模型的准确性,还为特征的重要性提供了定量的评估。希望本文能够为您理解特征选择在机器学习中的重要性提供帮助。
热门推荐
常规公交与轨道交通之间换乘衔接的原则与方式
关于烧伤的分类与处理,如何正确应对?
义乌美食排行榜前十名
辞退无固定期限合同员工的赔偿流程是什么
醋渍小章鱼
身体好不好看舌苔就知道?出现这3种颜色要注意,自查→
BMJ:笑能救干眼症!中山团队试验表明,笑声锻炼改善干眼症效果比人工泪液还好
清朝雍正皇帝:一位改革者的功绩与评价
重视身体发出的这 6 个信号
PPT形状完全指南:12种基础形状的使用场景与技巧
如何分析市场的探底现象?这种探底分析有哪些依据?
急救医生谈心肺复苏
你以为的闪了腰,也有可能是骨折!
可供预约车位470个!闵行区内10家中大型医院全部开通线上停车预约服务
研究显示,女方收入越高,夫妻离婚概率就越大
如何识别心脏骤停的前兆?医生告诫:6个症状出现一个都要警惕
解码家庭关系的阴阳之道:《易经》智慧在现代生活中的应用
如何识别和选择显卡型号以提升使用体验的详细指南
怎样判断小孩有鼻炎和鼻炎
POD设计秘籍:打造热销T恤的10大技巧
金牛之命的命运解析:从性格特征到人生轨迹的全面解读
印度百万人涌入恒河沐浴,水质变差与环境保护的挑战
睡觉时总是腿抽筋,不一定缺钙,可能是这几个病在报警
A股公司密集披露2024年年报:934家公司营收过百亿,分红总额超9000亿
哈尔滨冬季游玩攻略:冰雪世界与欧式风情的完美结合
如何选择合适的汇款方式及其流程和注意事项?
烤鱼烹饪指南:从挑选食材到美味呈盘,尽享美食之旅
手机内存优化攻略:高效管理内存技巧全解析
饭后一个小动作,健康又燃脂!好处被很多人都低估了!
综合格斗实战怎么样