这个例子展示了如何选择合适的分割预测选择技术,您的数据集,当越来越多的随机森林回归树。这个示例还展示了如何决定哪些是最重要的预测因子包括训练数据。
加载carbig
数据集。考虑一个模型,预测汽车的燃油经济性鉴于其气缸数,发动机排量,马力,体重,加速度,模型,和原产地。考虑气缸
,Model_Year
,起源
作为分类变量。
负载carbig气缸=分类(缸);Model_Year =分类(Model_Year);起源=分类(cellstr(起源));X =表(汽缸、排量、马力、重量、加速度,Model_Year,起源);
标准CART算法往往将预测与许多惟一值(水平),例如,连续变量,在那些拥有更少的水平,例如,分类变量。如果您的数据是异构的,或者你的预测变量的水平相差很大,那么考虑使用曲率或交互测试split-predictor选择而不是标准的车。
对于每一个预测,确定水平的数据的数量。一种方法是定义一个匿名函数:
将所有变量转换为分类数据类型使用分类
确定所有独特的类别而忽略缺失值使用类别
计算分类使用元素个数
然后,应用函数每个变量使用varfun
。
countLevels = @ (x)元素个数(类别(类别(x)));numLevels = varfun (countLevels X,“OutputFormat”,“统一”);
比较的数量水平的预测变量。
图酒吧(numLevels)标题(水平预测的数量)包含(预测变量的)ylabel (的层数甘氨胆酸)h =;h。XTickLabel = X.Properties.VariableNames (1: end-1);h。XTickLabelRotation = 45;h。TickLabelInterpreter =“没有”;
连续变量多水平比分类变量。因为预测之间的层数不同,使用标准的车选择分割预测在树的每个节点随机森林里可以产生不准确的预测估计的重要性。在这种情况下,使用曲率测试或交互测试。通过使用指定的算法“PredictorSelection”
名称-值对的论点。更多细节,请参阅选择分割预测选择技术。
火车的袋装合奏200棵回归估计预测重要性值。定义一个树学习者使用这些名称-值对参数:
“NumVariablesToSample”、“所有”
- - -使用所有树为了确保每个预测变量在每个节点使用所有预测变量。
“PredictorSelection”、“interaction-curvature”
——指定使用的交互测试选择分割预测。
“代孕”,“上”
——指定使用代理将增加精度,因为数据集包含缺失值。
t = templateTree (“NumVariablesToSample”,“所有”,…“PredictorSelection”,“interaction-curvature”,“代孕”,“上”);rng (1);%的再现性Mdl = fitrensemble (X,英里/加仑,“方法”,“包”,“NumLearningCycles”,200,…“学习者”t);
Mdl
是一个RegressionBaggedEnsemble
模型。
估计模型 使用out-of-bag预测。
yHat = oobPredict (Mdl);(R2 = corr Mdl.Y yHat) ^ 2
R2 = 0.8744
Mdl
意思可以解释87%的变异。
估计预测价值重要性的排列out-of-bag观察在树林里。
impOOB = oobPermutedPredictorImportance (Mdl);
impOOB
是一个1-by-7向量预测重要性估计相应的预测Mdl.PredictorNames
。估计不偏向预测包含很多层面。
比较预测重要性估计。
图酒吧(impOOB)标题(“估计无偏预测重要性”)包含(预测变量的)ylabel (“重要性”甘氨胆酸)h =;h。XTickLabel = Mdl.PredictorNames;h。XTickLabelRotation = 45;h。TickLabelInterpreter =“没有”;
更加重要的估计表明更重要的预测因子。条形图显示Model_Year
是最重要的因素,其次是吗气缸
和重量
。的Model_Year
和气缸
变量只有13个和5个不同的水平,分别,而重量
变量有超过300年的水平。
比较预测估计重要性排列out-of-bag观察和总结获得的那些估计在均方误差对每个预测由于分裂。同时,通过代理将获得预测协会措施估计。
[impGain, predAssociation] = predictorImportance (Mdl);图的阴谋(1:元素个数(Mdl.PredictorNames), [impOOB ' impGain '])标题(预测评估重要性比较的)包含(预测变量的)ylabel (“重要性”甘氨胆酸)h =;h。XTickLabel = Mdl.PredictorNames;h。XTickLabelRotation = 45;h。TickLabelInterpreter =“没有”;传奇(“OOB排列的,“MSE改进”网格)在
根据的值impGain
,变量位移
,马力
,重量
似乎同样重要。
predAssociation
是一个7-by-7矩阵预测协会的措施。行和列对应的预测因子Mdl.PredictorNames
。的预测的协会是一个值,表明决策规则之间的相似性分割观测。最好的代理决定分裂收益率的最大协会预测指标。你可以推断出的强度对预测使用的元素之间的关系predAssociation
。大值表明更高度相关对预测。
图显示亮度图像(predAssociation)标题(“预测协会估计”甘氨胆酸)colorbar h =;h。XTickLabel = Mdl.PredictorNames;h。XTickLabelRotation = 45;h。TickLabelInterpreter =“没有”;h。YTickLabel = Mdl.PredictorNames;
predAssociation (1、2)
ans = 0.6871
最大的协会之间气缸
和位移
,但价值不高足以表明一个强大的两个预测因子之间的关系。
因为预测时间增加的数量在随机森林预测,一个良好的实践是创建一个使用尽可能少的预测模型。
长200年随机森林回归树上只使用最好的两个预测因子。默认的“NumVariablesToSample”
的价值templateTree
是回归的预测数量的三分之一,所以呢fitrensemble
使用随机森林算法。
t = templateTree (“PredictorSelection”,“interaction-curvature”,“代孕”,“上”,…“复制”,真正的);%的再现性随机预测的选择MdlReduced = fitrensemble (X (: {“Model_Year”“重量”}),英里/加仑,“方法”,“包”,…“NumLearningCycles”,200,“学习者”t);
计算 的简化模型。
yHatReduced = oobPredict (MdlReduced);r2Reduced = corr (Mdl.Y yHatReduced) ^ 2
r2Reduced = 0.8653
的 为减少模型是接近 完整的模型。这一结果表明,预测模型是充分的。
templateTree
|fitrensemble
|oobPredict
|oobPermutedPredictorImportance
|predictorImportance
|相关系数