不平衡数据分类
这个例子展示了当一个类的观察值比另一个多得多时如何执行分类。您使用RUSBoost
首先是算法,因为它被设计用来处理这种情况。处理不平衡数据的另一种方法是使用名称-值对参数“之前”
或“成本”
.有关详细信息,请参见在分类集合中处理不平衡数据或不等错误分类代价.
此示例使用UCI机器学习归档中的“覆盖类型”数据,在https://archive.ics.uci.edu/ml/datasets/Covertype.这些数据根据海拔、土壤类型和与水的距离等预测因素对森林类型(地面覆盖)进行了分类。数据有超过500,000个观察值和超过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 20110 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”)
除二类外,所有类别的分类准确率均超过90%。但第2类数据占了近一半,所以总体精度没有那么高。
紧凑的合奏
乐团规模很大。方法删除数据紧凑的
方法。
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
新数据的预测精度可能不同,因为集合精度可能有偏差。产生偏差是因为用于评估集合的相同数据被用于减少集合的大小。为了获得所需集合大小的无偏估计,您应该使用交叉验证。然而,这个过程很耗时。
参考文献
[1]布莱克亚德,J. A.和D. J.迪安。“从制图变量预测森林覆盖类型的人工神经网络和判别分析的比较准确性”。农业中的计算机和电子1999年第24卷第3期,第131-151页。
另请参阅
fitcensemble
|汇总
|cvpartition
|培训
|测验
|templateTree
|损失
|预测
|紧凑的
|removeLearners
|confusionchart