这个例子说明如何进行分类,当一个类有许多比其他更多的观察。您可以使用RUSBoost
首先是算法,因为它是为处理这种情况而设计的。处理不平衡数据的另一种方法是使用名称-值对参数“先前的”
或'成本'
。有关详情,请参阅在处理合奏分类不平衡数据或不等误分类损失。
本例使用UCI机器学习档案中的“封面类型”数据,如中所述https://archive.ics.uci.edu/ml/datasets/Covertype。该数据根据海拔、土壤类型和距水距离等预测值对森林(地面覆盖)类型进行分类。该数据有超过500000个观测值和50个预测值,因此训练和使用分类器非常耗时。
布莱克德和迪恩[1]描述这些数据的神经网络分类。他们报出70.6%的分类精度。RUSBoost
获得81%以上的分类准确率。
将数据导入到您的工作空间。提取的最后一个数据列到一个命名变量y
。
gunzip解('https://archive.ics.uci.edu/ml/machine-learning-databases/covtype/covtype.data.gz')装载covtype.dataY = covtype(:,端);covtype(:,端)= [];
表格(Y)
值计数百分比1 211840 36.46%2 283301 48.76%3 35754 6.15%4 2747 0.47%5 9493 1.63%6 17367 2.99%7 20510 3.53%
有几十万个数据点。第4类的数据点不到总数的0.5%。这种不平衡表明RUSBoost
是一个合适的算法。
使用一半的数据,以适应分类,半检查所得分类的质量。
RNG(10,“扭腰”)%为了再现性部= cvpartition(Y,'坚持',0.5);istrain =训练(部分);%拟合数据istest =试验(部分);%质量评估数据平板状(Y(istrain))
值计数百分比1 105919 36.46%2 141651 48.76%3 17877 6.15%4 1374 0.47%5 4747 1.63%6 8684 2.99%7 10254 3.53%
能够实现更高的精度合奏很深的树。要做到这一点,设置树有决定拆分的最大数量N
, 在哪里N
是训练样本中的观察数。集合LearnRate
到0.1
为了获得更高的精度,数据量很大,而且由于树很深,创建集合非常耗时。
N =总和(istrain);训练样本中的观察数量%t=模板树(“MaxNumSplits”,N);抽动rusTree = fitcensemble(covtype(istrain,:),Y(istrain),'方法'那'RUSBoost'那......'NumLearningCycles',1000,“学习者”,T,'LearnRate',0.1%,'NPRINT',100);
训练增强。。。成长弱势学习者:100名成长弱势学习者:200名成长弱势学习者:300名成长弱势学习者:400名成长弱势学习者:500名成长弱势学习者:600名成长弱势学习者:700名成长弱势学习者:800名成长弱势学习者:900名成长弱势学习者:1000名
TOC
经过时间是242.836734秒。
剧情分类误差针对集合成员的数量。
图;tic图(损失(锈树型、covtype(istest,:)、Y(istest),“模式”那“累积”));TOC
运行时间为164.470086秒。
网格在…上;xlabel(“株数”);ylabel(“测试分类错误”);
使用116棵或更多的树,集成的分类误差小于20%。对于500棵或更多的树,分类误差以较慢的速度减小。
检查每个类作为真实类的百分比混淆矩阵。
tic Yfit=预测(锈树型、共价型(istest,:);总有机碳
经过时间是132.353489秒。
confusionchart(Y(istest),Yfit,'正常化'那“行规范化”那'RowSummary'那“行规范化”)
除2类的类都超过90%,分类精度。但是,2级占接近一半的数据,因此整体精度不高。
该合唱团是大的。删除使用数据契约
方法
cmpctRus=紧凑型(锈树);sz(1)=whos('rusTree');SZ(2)=卫生组织('cmpctRus');[sz(1).字节sz(2).字节]
ans =.1×210.9.×1.6579 0.9423
压缩的整体大约是原始的一半大小。
把一半的树从树上移开cmpctRus
。这个动作很可能对预测性能的影响最小,基于观察的是500出的1000棵给予接近最佳精度。
cmpctRus = removeLearners(cmpctRus,[500:1000]);SZ(3)=卫生组织('cmpctRus');SZ(3).bytes
ANS = 452868660
降低的紧凑合奏大约需要全面集成的内存的四分之一。其总体损失率低于19%:
L =损失(cmpctRus,covtype(istest,:),Y(istest))
L = 0.1833
新数据的预测准确度可能会有所不同,因为整体精度可能有偏差。偏压产生是因为用于评估集合相同的数据被用于降低集合大小。为了获得必要的集成规模的无偏估计,你应该使用交叉验证。然而,该过程是费时。
[1] Blackard,J.A.和D. J.迪安。“人工神经网络和判别分析的精度比较在从制图变量预测森林覆盖类型”。计算机与电子农业卷。24,第3期,1999年,第131-151。
fitcensemble
|制表
|cvpartition
|训练
|测试
|templateTree
|损失
|预测
|契约
|脱贫工人
|confusionchart