TreeBagger
Statistics and Machine Learning Toolbox™提供了两个支持分类树引导聚合(bagging)的对万博1manbetx象:TreeBagger
由使用TreeBagger
和ClassificationBaggedEnsemble
由使用fitcensemble
.看到套袋式和套袋式的比较之间的差异TreeBagger
和ClassificationBaggedEnsemble
.
这个示例显示了使用中的特性进行分类的工作流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开始,这是一个bootstrap副本选择的唯一观察值的比例,在大约10棵树时下降到0。
b.NumTrees finbag = 0 (1);为t = 1: b。NTrees finbag (t) =(所有的总和(~ b.OOBIndices (:, 1: t), 2));结束finbag = finbag /尺寸(X,1);图绘制(finbag)包含(“已长成的树的数量”) ylabel (“袋装观察的部分”)
估计特征的重要性。
图酒吧(b.OOBPermutedPredictorDeltaError)包含(“功能指数”) ylabel (“Out-of-Bag特性重要性”)
选择重要性度量大于0.75的特性。这个阈值是任意选择的。
idxvar =找到(b.OOBPermutedPredictorDeltaError > 0.75)
idxvar =1×53 5 7 8 27
选择最重要的特性后,在减少的特性集上发展更大的集成。节省时间,不打乱包外的观察,以获得新的估计特征的重要性,为简化的特征集(集OOBVarImp
来“关闭”
).您仍然有兴趣获得分类误差的包外估计(集OOBPred
来“上”
).
b5v = TreeBagger (100 X (:, idxvar), Y,“OOBPredictorImportance”,“关闭”,“OOBPrediction”,“上”);图绘制(oobError (b5v))包含(“已长成的树的数量”) ylabel (“Out-of-Bag分类错误”)
对于分类集合,除了分类误差(错误分类观察的部分),您还可以监控平均分类裕度。对于每一个观察,保证金定义为真实类的得分与该树预测的其他类的最大得分之间的差值。累积分类边际使用的是所有树的平均分,而平均累积分类边际是所有观测值的平均分。的oobMeanMargin
方法与“模式”
参数设置为“累积”
(默认值)显示了平均累积边距如何随着集成的增长而变化:返回数组中的每个新元素表示通过在集成中包含新树而获得的累积边距。如果训练成功,你会看到平均分类边缘逐渐增加。
该方法训练集合与少数树木的观察是袋装的所有树木。对于这样的观测,是不可能计算出真正的外包预测的TreeBagger
返回最可能的类进行分类,并返回样本均值进行回归。
对于决策树,分类分数是在这个树叶中观察到该类实例的概率。例如,如果一个成熟的决策树的叶子有5个‘好’
和三个“坏”
在它里面的训练观察,这个决策树返回的分数对于任何落在这个叶子上的观察是5/8‘好’
班和3/8“坏”
类。这些概率被称为“分数”
与可能对返回的预测的数值没有明显解释的其他分类器保持一致。
图绘制(oobMeanMargin (b5v));包含(“已长成的树的数量”) ylabel (“包外平均分类裕度”)
计算近似矩阵并检查离群测度的分布。与回归不同,分类集合的离群值测量是在每个类中分别计算的。
b5v = fillProximities (b5v);图直方图(b5v.OutlierMeasure)包含(离群值测量的) ylabel (“数量的观察”)
找出极端异常值的类别。
extremeOutliers = b5v.Y (b5v.OutlierMeasure > 40)
extremeOutliers =6 x1细胞{'g'} {'g'} {'g'}
percentGood = 100 *总和(strcmp (extremeOutliers,‘g’)) /元素个数(extremeOutliers)
percentGood = 100
所有的极端异常值都有标注‘好’
.
至于回归,您可以绘制缩放的坐标,使用的“colors”名称-值对参数以不同的颜色显示这两个类mdsProx
.这个参数接受一个字符向量,其中每个字符代表一种颜色。该软件不会对类名进行排序。因此,最好的做法是确定类在一会
集合的性质。
gPosition =找到(strcmp (‘g’, b5v.ClassNames))
gPosition = 2
的“坏”
班是第一和第二‘好’
类是第二。显示缩放坐标使用红色“坏”
班级和蓝色为‘好’
课堂观察。
图[s,e] = mdsProx(b5v,“颜色”,rb的);包含(“第一比例协调”) ylabel (“第二个比例协调”)
绘制通过缩放得到的前20个特征值。第一个特征值明显占主导地位,第一个比例坐标是最重要的。
图酒吧(e(1:20))包含(“按比例缩小的协调指数”) ylabel (“特征值”)
探索分类集成性能的另一种方法是绘制其Receiver Operating Characteristic (ROC)曲线或另一种适合当前问题的性能曲线。获得袋子外观察的预测。对于分类集成oobPredict
方法返回分类标签的单元格数组作为第一个输出参数,并返回分数的数字数组作为第二个输出参数。返回的分数数组有两列,每列对应一个类。在本例中,第一列是“坏”
类,第二列是‘好’
类。分数矩阵中的一列是多余的,因为分数代表了树叶中的类概率,并且根据定义加起来等于1。
[Yfit, Sfit] = oobPredict (b5v);
使用perfcurve
计算性能曲线。默认情况下,perfcurve
返回标准ROC曲线,这是真实阳性率与假阳性率的对比。perfcurve
需要真正的类标签、分数和输入的正类标签。在本例中,选择‘好’
类都是积极正面的。
(玻璃钢,tpr) = perfcurve (b5v.Y Sfit (:, gPosition),‘g’);图绘制(玻璃钢,tpr)包含(的假阳性率) ylabel (“真阳性率”)
例如,您可能想要绘制的不是标准的ROC曲线,而是集成准确度与阈值的评分‘好’
类。的ycrit
输入参数的perfcurve
让您指定的标准y
的第三个输出参数perfcurve
返回阳性类得分的阈值数组。准确度是正确分类的观察结果的分数,或等价地,1减去分类误差。
(玻璃钢,所以,3)= perfcurve (b5v.Y, Sfit (:, gPosition),‘g’,“YCrit”,“所以”);图(20)情节(大意:accu)包含(“良好”回报的门槛”) ylabel (的分类精度)
曲线显示了一个平坦的区域,表明从0.2到0.6的任何阈值都是合理的选择。默认情况下,perfcurve
使用0.5作为两个类之间的边界来分配分类标签。你可以精确地找到它对应的精确度。
所以他们(abs (3 - 0.5) < eps)
ans = 0.9316
最大的精度略高于默认值。
[maxaccu, iaccu] = max(所以)
maxaccu = 0.9345
iaccu = 99
因此,最佳阈值是。
3个(iaccu)
ans = 0.5278
TreeBagger
|紧凑的
|oobError
|mdsprox
|oobMeanMargin
|oobPredict
|perfcurve
|fitcensemble