使用分类树的Bootstrap聚合(Bagging)TreeBagger

统计和机器学习工具箱™提供了两个对象分类树的支持引导聚集(套袋):万博1manbetxTreeBagger由使用TreeBaggerClassificationBaggedEnsemble由使用fitcensemble。看到TreeBagger和Bagged集成包的比较之间的差异TreeBaggerClassificationBaggedEnsemble

此示例示出了使用中的特征进行分类工作流TreeBagger只有。

使用带有351个观察和34实值预测电离层数据。响应变量是分类与两个级别:

  • 'G'代表良好的雷达回报。

  • “b”代表坏的雷达回波。

目标是使用一组34种测量方法来预测好的或坏的回报。

修正初始随机种子,种植50棵树,检查合奏错误的树木堆积,估计功能重要性如何变化。对于分类,最好是最小叶片大小设置为1,然后选择的特征为在随机决定各分割总数的平方根。这些设置是默认值TreeBagger用于分类。

负载电离层rng (1945“旋风”) b = TreeBagger(50,X,Y,'OOBPredictorImportance',“上”);图绘制(oobError (b))包含(“树生长的数量”)ylabel(“Out-of-Bag分类错误”)

该方法的训练是在袋子所有的树木观察树木稀少合奏。对于这样的观察,很不可能计算出的袋的真正预测和TreeBagger返回用于分类的最可能的类和用于回归的样本均值。您可以更改在袋使用观测返回的默认值DefaultYfit属性。如果分类的默认值设置为空字符串向量的方法排除袋内意见来自离袋的错误计算。在这种情况下,曲线更变量时树木的数量少,要么是因为有些意见是从来没有球袋的(因此被排除在外),或者因为他们的预测是基于几棵树。

b.DefaultYfit =;图绘制(oobError (b))包含(“树生长的数量”)ylabel(“袋外错误排除袋内观察”)

OOBIndices的属性TreeBagger跟踪哪些意见是包出来什么树。使用这个属性,你可以监控是在袋子所有的树木训练数据观察的部分。曲线开始于约2/3,这是通过一个自举复制品中选择独特观测的分数,并降低到0在约10棵。

finbag =零(1,b.NumTrees);t = 1: b。NTrees finbag (t) =(所有的总和(~ b.OOBIndices (:, 1: t), 2));结束finbag = finbag /尺寸(X,1);图图(finbag)xlabel(“树生长的数量”)ylabel(“袋中观察到的部分”)

估计功能的重要性。

图酒吧(b.OOBPermutedPredictorDeltaError)包含(“功能指数”)ylabel(“Out-of-Bag特性重要性”)

选择产生的重要指标大于0.75的特征。该阈值是任意选择的。

idxvar =查找(b.OOBPermutedPredictorDeltaError> 0.75)
idxvar =1×63 5 6 7 8 27

在选择了最重要的特征之后,在简化的特征集上增加一个更大的集合OOBVarImp“关”)。您仍然有兴趣获得袋外估计分类错误(设置OOBPred“上”)。

B5V = TreeBagger(100,X(:,idxvar)中,Y,'OOBPredictorImportance',“关”,“OOBPrediction”,“上”);图绘制(oobError (b5v))包含(“树生长的数量”)ylabel(“Out-of-Bag分类错误”)

对于分类总体,除了分类错误(错误分类的观察的分数)之外,还可以监视平均分类裕度。对于每个观测值保证金定义为真实类的得分与此树预测的其他类的最大得分之间的差值。累积分类边界使用所有树的平均分数,而平均累积分类边界是所有观察值的平均累积边界。的oobMeanMargin方法与'模式'参数设置为“累积”(默认)示出了平均累积裕度的变化为合奏如何生长:返回的数组中的每个新的元素表示通过在合奏一个新的树获得的累积裕度。如果训练成功,你希望看到在均值分类极限逐渐增加。

该方法的训练是在袋子所有的树木观察树木稀少合奏。对于这样的观察,很不可能计算出的袋的真正预测和TreeBagger返回用于分类的最可能的类和用于回归的样本均值。

对于决策树,分类评分是在这个树的叶子观察这个类的一个实例的概率。例如,如果一个成年人的决定树的叶子有五个'好''坏'在它的训练观察中,这个决策树返回的任何落在这片叶子上的观察的分数是5/8'好'类和3/8的'坏'类。这些概率叫做“分数”与其他可能对返回预测的数值没有明显解释的分类器保持一致。

图图(oobMeanMargin(B5V));包含(“树生长的数量”)ylabel(“Out-of-Bag平均分类差额”)

计算邻近区域的矩阵和检查的异常措施的分布。不像回归,分类合奏离群措施每一类内分别计算。

b5v = fillProximities (b5v);图直方图(b5v.OutlierMeasure)包含(“离群措施”)ylabel(“数量的观察”)

查找类的极端值的。

extremeOutliers = b5v.Y (b5v.OutlierMeasure > 40)
extremeOutliers =3X1细胞{ 'G'} { 'G'} { 'G'}
percentGood = 100 *总和(的strcmp(extremeOutliers,'G'))/ numel(extremeOutliers)
percentGood = 100

所有极端值的标记'好'

至于回归,您可以按比例绘制坐标,使用的“颜色”的名称 - 值对的参数以不同的颜色显示两班mdsProx。此参数采用在其中的每个字符表示的颜色的字符向量。该软件排名并不靠前的类名。因此,以确定类的位置最佳实践一会系综的性质。

gPosition =找到(strcmp ('G',b5v.ClassNames))
gPosition = 2

'坏'类是第一和'好'类是第二。控件使用红色显示缩放坐标'坏'类和蓝色的'好'课堂观察。

图[S,E] = mdsProx(B5V,“颜色”,rb的);包含(“第一比例协调”)ylabel(“第二缩放坐标”)

绘制通过缩放获得的第一20个特征值。第一特征值明显主导和第一缩放的协调是最重要的。

图酒吧(e(1:20))包含(“缩放坐标指数”)ylabel(“特征值”)

探索分类合奏的性能的另一种方法是绘制其接受者操作特征(ROC)曲线或适合于当前的问题的另一性能曲线。获得了球袋观察预测。对于分类集成,该oobPredict方法将分类标签的单元数组作为第一个输出参数,将分数的数字数组作为第二个输出参数。返回的分数数组有两个列,每个类一个。在本例中,第一列是'坏'类,第二列是'好'类。在得分矩阵一列是多余的,因为分数代表类的概率在树叶和定义加起来为1。

[Yfit, Sfit] = oobPredict (b5v);

采用perfcurve计算性能曲线。默认情况下,perfcurve返回标准ROC曲线,这是真阳性率与假阳性率。perfcurve输入需要真正的类标签、分数和积极的类标签。在本例中,选择'好'类都是积极正面的。

[FPR,TPR] = perfcurve(b5v.Y,SFIT(:,gPosition),'G');图绘制(玻璃钢,tpr)包含(“误报率”)ylabel(“真阳性率”)

而不是标准的ROC曲线,你可能想绘制,例如,合奏精度与门槛上比分为'好'类。的ycrit的输入参数perfcurve让您指定y的第三个输出参数perfcurve返回正类得分的阈值数组。准确度是正确分类的观测值的分数,或者等于,1减去分类误差。

(玻璃钢,所以,3)= perfcurve (b5v.Y, Sfit (:, gPosition),'G','YCrit',“所以”);图(20)情节(THRE,ACCU)xlabel(“门槛为'好””返回)ylabel(“分类精度”)

该曲线显示了一个平坦的区域,表明从0.2到0.6的任何阈值都是合理的选择。默认情况下,perfcurve使用0.5作为两个类之间的边界受让人分类标签。您可以准确地找到准确此相对应的。

所以他们(abs (3 - 0.5) < eps)
ans = 0x1空双列向量

最大精度比默认的高一点。

[maxaccu, iaccu] = max(所以)
maxaccu = 0.9459
iaccu = 105

因此最优阈值是。

3个(iaccu)
ANS = 0.4503

另请参阅

|||||||

相关话题