使用回归树的自举聚合(Bagging)TreeBagger
统计和机器学习工具箱™提供了两个对象,支持回归树的引导聚合(bagging):金宝appTreeBagger
通过使用TreeBagger
而且RegressionBaggedEnsemble
通过使用fitrensemble
.看到树木装袋和装袋套装的比较来区分TreeBagger
而且RegressionBaggedEnsemble
.
中的特性展示了回归的工作流程TreeBagger
只有。
使用1985年汽车进口的数据库,其中包含205个观察值、25个预测因子和1个响应,即保险风险评级或“符号化”。前15个变量是数字变量,后10个变量是分类变量。符号索引接受从-3到3的整数值。
加载数据集并将其分割为预测器和响应数组。
负载进口- 85Y = x (:,1);X = X(:,2:end);isCategorical = [0 (15,1);(大小(X, 2) -15年,1)];类别变量标志
因为套袋使用随机数据图,它的确切结果取决于最初的随机种子。要在本例中重现结果,请使用随机流设置。
rng (1945“旋风”)
寻找最佳叶片大小
对于回归,一般的规则是将叶子大小设置为5,并随机选择三分之一的输入特征进行决策分割。在接下来的步骤中,通过比较回归得到的各种叶片尺寸的均方误差来验证最佳叶片尺寸。oobError
计算MSE与已生长树木的数量。你必须设置OOBPred
来“上”
以便以后获得袋外预测。
Leaf = [5 10 20 50 100];坳=“rbcmy”;图保存在为i=1:长度(叶子)b = TreeBagger(50,X,Y,“方法”,“回归”,...“OOBPrediction”,“上”,...“CategoricalPredictors”,find(isCategorical == 1),...“MinLeafSize”、叶(i));情节(oobError (b),坳(我))结束包含(“已生长树木的数目”) ylabel (“均方误差”)({传奇“5”“十”“20”“50”“100”},“位置”,“东北”)举行从
红色曲线(叶片大小为5)的MSE值最低。
评估特征重要性
在实际应用中,通常需要种植数百棵树。例如,前面的代码块使用50棵树来加快处理速度。现在您已经估计了最佳的叶子大小,生长一个包含100棵树的更大的集合,并使用它来估计特征的重要性。
b = TreeBagger(100,X,Y,“方法”,“回归”,...“OOBPredictorImportance”,“上”,...“CategoricalPredictors”,find(isCategorical == 1),...“MinLeafSize”5);
再次检查误差曲线,确保训练过程中没有出错。
图(oobError(b)) xlabel(“已生长树木的数目”) ylabel (“Out-of-Bag均方误差”)
预测能力应该更多地依赖于重要的特征而不是不重要的特征。您可以使用这个想法来衡量功能的重要性。
对于每个特征,将该特征的值在数据集中的每个观测值之间进行排列,并测量排列后MSE变得有多糟糕。您可以为每个特性重复此操作。
绘制MSE的增加,这是由于对每个输入变量的袋外观测进行了排列。的OOBPermutedPredictorDeltaError
数组存储集合中所有树的平均MSE的增加,并除以对每个变量的树的标准偏差。这个值越大,变量就越重要。设定一个任意的临界值0.7,您可以选择四个最重要的特性。
figure bar(b.OOBPermutedPredictorDeltaError)的数字特征) ylabel (“Out-of-Bag功能重要性”)
idxvar = find(b.o bpermutedpredictordeltaerror >0.7)
idxvar =1×41 2 16 19
idxCategorical = find(isCategorical(idxvar)==1);
的OOBIndices
的属性TreeBagger
追踪哪些观察是针对哪些树木的。使用此属性,您可以监视所有树的训练数据中观测值的百分比。曲线从大约2/3开始,这是一个自举副本选择的唯一观测值的分数,并在大约10棵树处下降到0。
finbag = 0 (1,b.NTrees);为t = 1: b。NTrees finbag (t) =(所有的总和(~ b.OOBIndices (:, 1: t), 2));结束finbag = finbag/size(X,1);图(finbag) xlabel(“已生长树木的数目”) ylabel (“袋内观察的部分”)
在减少的特征集上种植树木
仅使用四个最强大的特征,确定是否有可能获得类似的预测能力。首先,只在这些特征上种100棵树。所选的四个特征中的前两个是数字特征,后两个是分类特征。
b5v = TreeBagger(100,X(:,idxvar),Y,...“方法”,“回归”,“OOBPredictorImportance”,“上”,...“CategoricalPredictors”idxCategorical,“MinLeafSize”5);图(oobError(b5v))“已生长树木的数目”) ylabel (“Out-of-Bag均方误差”)
figure bar(b5v.OOBPermutedPredictorDeltaError)“功能指数”) ylabel (“Out-of-Bag功能重要性”)
这四个最强大的特征给出了与完整集相同的MSE,在约简集上训练的集合对这些特征进行了相似的排序。如果你从约简集中移除特征1和2,那么算法的预测能力可能不会显著下降。
发现异常值
为了找到训练数据中的异常值,使用计算接近矩阵fillProximities
.
b5v = fillProximities(b5v);
该方法通过减去整个样本的平均离群值测量来规范化该测量。然后,它取这个差异的大小,并将结果除以整个样本的中位数绝对偏差。
图直方图(b5v.OutlierMeasure)离群值测量的) ylabel (“观察次数”)
在数据中发现集群
通过对计算出的近似矩阵应用多维缩放,您可以检查输入数据的结构,并寻找可能的观察簇。的mdsProx
方法返回计算的接近矩阵的按比例缩放的坐标和特征值。如果你用颜色
参数,则此方法创建两个缩放坐标的散点图。
figure [~,e] = mdsProx(b5v,“颜色”,“K”);包含(“第一缩放坐标”) ylabel (“二次缩放坐标”)
通过绘制前20个特征值来评估缩放轴的相对重要性。
图栏(e(1:20)) xlabel(“缩放坐标索引”) ylabel (“特征值”)
保存集成配置以备将来使用
若要使用经过训练的集成来预测对未见数据的响应,请将集成存储到磁盘中,并在以后检索它。如果您不想计算out-of-bag数据的预测或以任何其他方式重用训练数据,则不需要存储集成对象本身。在这种情况下,保存集成的紧凑版本就足够了。从集合中提取紧凑对象。
C = compact(b5v)
c = CompactTreeBagger集成100袋决策树:方法:回归NumPredictors: 4属性,方法
您可以保存结果CompactTreeBagger
中的模型*
.mat
文件。
另请参阅
TreeBagger
|紧凑的
|oobError
|mdsprox
|fillprox
|fitrensemble