机器学习 | MATLAB实现RF(随机森林)TreeBagger变量重要度衡量

目录

  • ​​机器学习 | MATLAB实现RF(随机森林)TreeBagger变量重要度衡量​​
  • ​​基本介绍​​
  • ​​模型描述​​
  • ​​程序设计​​
  • ​​学习总结​​
  • ​​参考资料​​

基本介绍

MATLAB实现RF(随机森林)的函数有TreeBagger和fitrensemble/
fitcensemble。本篇介绍TreeBagger变量重要度衡量。

模型描述

  • TreeBagger 将一组决策树打包用于分类或回归。 Bagging 代表引导聚合。集成中的每棵树都是在输入数据的独立绘制的引导副本上生长的。未包含的观察结果对于这棵树来说是“无用的”。
  • TreeBagger 依赖于 ClassificationTree 和 RegressionTree 功能来生长单个树。特别是,ClassificationTree 和 RegressionTree 接受为每个决策拆分随机选择的特征数量作为可选输入参数。也就是说,TreeBagger 实现了随机森林算法 。
  • 对于回归问题,TreeBagger 支持均值回归和分位数回归(即分位数回归森林 )。
  • 要预测平均响应或估计给定数据的均方误差,分别传递 TreeBagger 模型和要预测或错误的数据。要对袋外观察执行类似操作,使用 oobPredict 或 oobError。
  • 要估计响应分布的分位数或给定数据的分位数误差,将 TreeBagger 模型和数据分别传递给 quantilePredict 或 quantileError。要对袋外观察执行类似操作,使用 oobQuantilePredict 或 oobQuantileError。

程序设计

  • 加载 carsmall 数据集。
  • 考虑一个模型,该模型根据汽车的加速度、气缸数、发动机排量、马力、制造商、车型年份和重量来预测汽车的平均燃油经济性。
  • 将 Cylinders、Mfg 和 Model_Year 视为分类变量。
  • 因为只有 Cylinders 和 Model_Year 中只有 3 个类别,所以标准 CART 预测器拆分算法更喜欢将连续预测器拆分为这两个变量。
  • 使用整个数据集训练一个包含 200 棵回归树的随机森林。 要生成无偏树,请指定使用曲率测试来分割预测变量。 由于数据中存在缺失值,请指定使用代理拆分。 存储用于预测器重要性估计的袋外信息。
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
load carsmall
Cylinders = categorical(Cylinders);
Mfg = categorical(cellstr(Mfg));
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Model_Year = categorical(Model_Year);
X = table(Acceleration,Cylinders,Displacement,Horsepower,Mfg,...
Model_Year,Weight,MPG);
rng('default'); % For reproducibility
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
% 显示类别变量中表示的类别数。
numCylinders = numel(categories(Cylinders))
numMfg = numel(categories(Mfg))
numModelYear = numel(categories(Model_Year))
Mdl = TreeBagger(200,X,'MPG','Method','regression','Surrogate','on',...
%----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 'PredictorSelection','curvature','OOBPredictorImportance','on');
imp = Mdl.OOBPermutedPredictorDeltaError;
% TreeBagger 将预测器重要性估计值存储在属性 OOBPermutedPredictorDeltaError 中。 使用条形图比较估计值。
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
figure;
bar(imp);
title('Curvature Test');
ylabel('Predictor importance estimates');
xlabel('Predictors');
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
h = gca;
h.XTickLabel = Mdl.PredictorNames;
h.XTickLabelRotation = 45;
h.TickLabelInterpreter = 'none';
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

机器学习 | MATLAB实现RF(随机森林)TreeBagger变量重要度衡量_数据

  • 在这种情况下,Model_Year 是最重要的预测变量,其次是 Weight。
  • 将 imp 与使用标准 CART 种植树木的随机森林计算的预测器重要性估计值进行比较。
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
MdlCART = TreeBagger(200,X,'MPG','Method','regression','Surrogate','on',...
'OOBPredictorImportance','on');
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
impCART = MdlCART.OOBPermutedPredictorDeltaError;
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
figure;
bar(impCART);
title('Standard CART');
ylabel('Predictor importance estimates');
xlabel('Predictors');
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
h = gca;
h.XTickLabel = Mdl.PredictorNames;
h.XTickLabelRotation = 45;
h.TickLabelInterpreter = 'none';
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

机器学习 | MATLAB实现RF(随机森林)TreeBagger变量重要度衡量_回归_02

  • 在这种情况下,权重,一个连续的预测器,是最重要的。 接下来的两个最重要的预测器是 Model_Year,紧随其后的是 Horsepower,它是一个连续的预测器。

学习总结

  • 模式描述

单个决策树倾向于过度拟合。 Bootstrap-aggregated (bagged) 决策树结合了许多决策树的结果,从而减少了过度拟合的影响并提高了泛化性。 TreeBagger 使用数据的引导样本在集成中增长决策树。 此外,TreeBagger 会选择一个随机的预测变量子集,以在每个决策拆分中使用,就像在随机森林算法中一样。默认情况下,TreeBagger 会打包分类树。 要改为袋回归树,请指定“方法”、“回归”。

  • 用法点拨
  • ​Mdl = TreeBagger(NumTrees,Tbl,ResponseVarName)​
  • ​Mdl = TreeBagger(NumTrees,Tbl,formula)​
  • ​Mdl = TreeBagger(NumTrees,Tbl,Y)​
  • ​B = TreeBagger(NumTrees,X,Y)​
  • ​B = TreeBagger(NumTrees,X,Y)​
  • ​B = TreeBagger(NumTrees,X,Y,Name,Value)​