这个例子展示了当一个类比另一个类有更多的观察值时,如何执行分类。您使用RUSBoost
首先是算法,因为它是设计来处理这种情况的。处理不平衡数据的另一种方法是使用名称-值对参数“之前”
或“成本”
.有关详细信息,请参见在分类系统中处理不平衡的数据或不相等的误分类成本.
这个例子使用了UCI机器学习存档中的“Cover类型”数据,见https://archive.ics.uci.edu/ml/datasets/Covertype.这些数据根据海拔、土壤类型和与水的距离等预测因素对森林(地表覆盖)类型进行分类。该数据有50多万次观察和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 =培训(部分);%拟合数据坚持=测试(部分);%质量评估数据汇总(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 = templateTree (“MaxNumSplits”N);tic rusTree = fitcensemble(covtype(istrain,:),Y(istrain)),“方法”,“RUSBoost”,...“NumLearningCycles”, 1000,“学习者”t“LearnRate”, 0.1,“nprint”, 100);
培训RUSBoost……成长薄弱学习者:100成长薄弱学习者:200成长薄弱学习者:300成长薄弱学习者:400成长薄弱学习者:500成长薄弱学习者:600成长薄弱学习者:700成长薄弱学习者:800成长薄弱学习者:900成长薄弱学习者:1000
toc
运行时间为242.836734秒。
将分类误差与集合中成员的数量进行对比。
图;抽搐的阴谋(损失(rusTree covtype(是:),Y(是),“模式”,“累积”));toc
运行时间为164.470086秒。
网格在;包含(树木的数量);ylabel (“测试分类错误”);
使用116棵或更多的树,该集合的分类误差小于20%。对于500棵或更多的树,分类错误降低的速度较慢。
检查每个类别的混淆矩阵作为真实类别的百分比。
tic Yfit = predict(rusTree,covtype(istest,:));toc
运行时间为132.353489秒。
Yfit confusionchart (Y(是),“归一化”,“row-normalized”,“RowSummary”,“row-normalized”)
除第2类外,所有类的分类准确率均在90%以上。但是第二类数据占了近一半,所以总体的准确性不是那么高。
这群人很大。方法删除数据紧凑的
方法。
cmpctRus =紧凑(rusTree);深圳(1)=谁(“rusTree”);深圳(2)=谁(“cmpctRus”);(深圳(1)。字节深圳(2).bytes]
ans =1×2109×1.6579 - 0.9423
压缩后的整体大约是原来的一半大小。
砍掉一半的树cmpctRus
.这一操作对预测性能的影响可能很小,根据观察,1000棵树中有500棵提供了几乎最优的准确性。
cmpctRus = removeLearners (cmpctRus [500:1000]);深圳(3)=谁(“cmpctRus”);深圳(3).bytes
ans = 452868660
简化后的紧凑集成大约占用整个集成的四分之一内存。总体损失率低于19%:
L =损失(cmpctRus covtype(是:),Y(坚持))
L = 0.1833
对新数据的预测精度可能不同,因为总体精度可能存在偏差。产生偏差的原因是用于评估集成的相同数据被用于减少集成大小。为了获得对所需集成大小的无偏估计,您应该使用交叉验证。然而,这个过程很耗时。
布莱克沃德,J. A.和D. J.迪恩。“人工神经网络和判别分析在从地图变量预测森林覆盖类型中的比较精度”。农业中的计算机与电子学1999年第24卷第3期131-151页。
fitcensemble
|汇总
|cvpartition
|培训
|测试
|templateTree
|损失
|预测
|紧凑的
|removeLearners
|confusionchart