treebagger
统计和机器学习工具箱™提供了两个支持的对象,支持自引导聚合(袋装)分类树:万博1manbetxtreebagger
通过使用创建treebagger
和ClassificationBaggedensemble.
通过使用创建fitcensemble.
。看TreeBagger和Bagged Senembles的比较有关差异treebagger
和ClassificationBaggedensemble.
。
此示例显示使用该功能进行分类的工作流程treebagger
只要。
使用351个观察和34个真实预测因子的电离层数据。响应变量与两个级别分类:
'G'
代表良好的雷达回报。
'B'
代表坏雷达返回。
目标是使用一组34个测量来预测良好或糟糕的回报。
修复初始随机种子,生长50棵树,检查集合误差如何随着树的累积而变化,并估计特征重要性。对于分类,最好将最小的叶子尺寸设置为1,然后选择随机分割每个决定的每个决定的总功能的平方根。这些设置默认为treebagger
用于分类。
加载电离层RNG(1945年,'twister')b = treebagger(50,x,y,'Oobpredictorimportance'那'在');图绘图(OobError(b))xlabel('成长树数')ylabel('袋袋分类错误')
该方法用少量树木培训了所有树木的观察结果。对于这样的观察,不可能计算真正的袋子预测,并且是不可能的treebagger
返回最可能的分类类,并将样本意味着回归。您可以使用返回的返回内部观测的默认值更改defaultyfit.
财产。如果将默认值设置为用于分类的空字符向量,则该方法将从禁止异误误差的计算排除了内部观察。在这种情况下,当树的数量小时,曲线是更变化的,因为某些观察永远不会从袋子(并且被排除)或者因为它们的预测基于少量树木。
b.defaultyfit ='';图绘图(OobError(b))xlabel('成长树数')ylabel('不包括袋子的袋子错误错误')
这Oobindices.
财产treebagger
追踪哪些观察到树木的袋子。使用此属性,您可以监控所有树木的培训数据中的观测分数。曲线从大约2/3开始,这是一个自举复制品选择的独特观测的分数,并且在大约10棵树上下降到0。
finbag = zeros(1,b.numtrees);为了t = 1:b.ntree finbag(t)= sum(全部(〜b.oobindices(:,1:t),2));结尾Finbag = Finbag /尺寸(x,1);图绘图(finbag)xlabel('成长树数')ylabel(“袋内观测的分数”)
估计特征重要性。
图酒吧(B.oobpermutedPredictordordeltaError)Xlabel('特征索引')ylabel('禁止特征重要性')
选择产生大于0.75的重要性的功能。任意选择该阈值。
IDXVAR =查找(B.OobperMutedPredictordOrtArror> 0.75)
Idxvar =.1×53 5 7 8 27
选择了最重要的功能,在减少的功能集上生长一个更大的合奏。保存时间不依赖于袋袋观察,以获得对减少功能集的特征重要性的新估计(集Oobvarimp.
到'离开'
)。您仍然有兴趣获取分类错误的禁止率估计(集Oobpred.
到'在'
)。
b5v = treebagger(100,x(:,idxvar),y,'Oobpredictorimportance'那'离开'那'Oobprediction'那'在');图绘图(OobError(B5V))XLabel('成长树数')ylabel('袋袋分类错误')
对于分类集合,除了分类错误(错误分类观测的分数)之外,您还可以监控平均分类保证金。对于每个观察,利润被定义为真实类的分数与此树预测的其他类的最大分数之间的差异。累积分类利润使用所有树木平均的分数,平均累积分类边缘是在所有观察中平均的累积边缘。这Oobmeanmargin.
方法与'模式'
参数设置为'累积'
(默认)显示了均值的累积边缘更改的变化:返回的数组中的每个新元素都表示通过集合中的一棵新树获得的累积边缘。如果培训成功,您希望看到平均分类保证金的逐步增加。
该方法用少量树木培训了所有树木的观察结果。对于这样的观察,不可能计算真正的袋子预测,并且是不可能的treebagger
返回最可能的分类类,并将样本意味着回归。
对于决策树,分类评分是在该树叶中观察该类的实例的概率。例如,如果长大决策树的叶子有五个'好的'
和三'坏的'
在它的培训观察中,这一决定树返回的任何观察到这片叶子的分数为5/8'好的'
班级和3/8的'坏的'
班级。这些概率被称为'分数'
对于与其他分类器的一致性,可能对返回预测的数值可能没有明显的解释。
图绘图(OobmeAnmargin(B5V));Xlabel('成长树数')ylabel('袋子外平均分类边缘')
计算近距离的矩阵并检查异常值措施的分布。与回归不同,分类集合集合的异常措施分别计算在每个类中。
B5V = Fillproximities(B5V);图直方图(b5v.outliermeasure)xlabel('异常衡量')ylabel('观察数')
找到极端异常值的课程。
ExplimeOutliers = B5V.Y(B5V.OutlierMeasure> 40)
Expleteoutliers =6x1细胞{'g'} {'g'} {'g'} {'g'} {'g'} {'g'} {'g'} {'g'}
百分表= 100 * SUM(StrcMP(ExpligeOutliers,'G'))/ numel(极端输出商)
百分比= 100.
所有极端异常值都标有标有'好的'
。
至于回归,您可以使用“颜色”名称值对参数绘制缩放坐标,以不同颜色显示两个类mdsprox.
。此参数采用字符向量,其中每个字符表示颜色。该软件不会排名类名。因此,最好的做法是确定类中的位置Classnames.
合奏的财产。
gposition = find(strcmp('G',b5v.classnames)))
gposition = 2
这'坏的'
班级是第一个和'好的'
班级是第二个。显示使用红色的缩放坐标'坏的'
班和蓝色的'好的'
课程观察。
图[s,e] = mdsprox(b5v,'颜色'那'rb');Xlabel('第一次缩放坐标')ylabel('第二次缩放坐标')
绘制通过缩放获得的前20个特征值。第一个特征值明显占主导地位,第一个缩放坐标是最重要的。
图栏(E(1:20))Xlabel('缩放坐标索引')ylabel('特征值')
另一种探索分类集合的性能的方法是绘制其接收器操作特征(ROC)曲线或适合当前问题的其他性能曲线。获得袋袋外观察的预测。对于一个分类集合,Oobpredict.
方法返回分类标签的单元格数组作为第一个输出参数和分数的数字数组,作为第二个输出参数。返回的分数数组有两列,每个类是一个。在这种情况下,第一列是为了'坏的'
类和第二列是为了'好的'
班级。分数矩阵中的一个列是冗余的,因为分数表示树叶中的类概率,并且按定义添加最多1。
[YFIT,SFIT] = OOBPREDICT(B5V);
用灌注
计算性能曲线。默认情况下,灌注
返回标准ROC曲线,这是真正的阳性率与误频率。灌注
需要真正的类标签,分数和输入的正类标签。在这种情况下,选择'好的'
班级积极。
[FPR,TPR] = Perfcurve(B5V.Y,SFIT(:,GPosition),'G');图绘图(FPR,TPR)XLabel('虚假阳性率')ylabel('真正的阳性率')
代替标准的ROC曲线,您可能想要绘制,例如,集合精度与阈值相比'好的'
班级。这ycrit.
输入论点灌注
允许您指定标准y
- 轴和第三个输出论证灌注
返回正类分数的阈值数组。准确性是正确分类的观察的分数,或等效,1减少分类误差。
[FPR,ACCU,THRE] = perfcurve(B5V.Y,SFIT(:,GPosition),'G'那'ycrit'那'accu');图(20)绘图(Thre,Accu)Xlabel(''好'返回的门槛)ylabel('分类准确性')
曲线示出了一个平坦区域,其表示从0.2至0.6的任何阈值是合理的选择。默认情况下,灌注
使用0.5分配分类标签作为两个类之间的边界。您可以确切地找到对应于的准确性。
ACCU(ABS(THRE-0.5)
ans = 0.9316.
最大精度比默认精度高一点。
[maxaccu,iaccu] = max(accu)
maxaccu = 0.9345.
IACCU = 99.
因此,最佳阈值是。
Thre(IACCU)
ans = 0.5278.
袖珍的
|fitcensemble.
|mdsprox.
|ooberror.
|Oobmeanmargin.
|Oobpredict.
|灌注
|treebagger