主要内容

使用不平衡数据进行分类

这个例子展示了当一个类比另一个类有更多的观察值时,如何执行分类。您使用RUSBoost算法首先,因为它旨在处理这种情况。处理不平衡数据的另一种方法是使用名称值对参数'事先的'或者“成本”.有关详细信息,请参阅在分类系统中处理不平衡的数据或不相等的误分类成本

此示例使用UCI机器学习档案中的“封面类型”数据,描述于https://archive.ics.uci.edu/ml/datasets/Covertype.数据基于诸如升高,土壤类型和与水距离的预测因子来分类森林类型(地面封面)。数据有超过500,000个观察结果和超过50个预测因子,因此训练和使用分类器是耗时的。

Blackard和Dean.[1]描述这个数据的神经网络分类。他们引用了70.6%的分类准确率。RUSBoost获得超过81%的分类准确性。

获取数据

将数据导入到工作区。将最后一个数据列提取到一个名为Y

gunzip (“https://archive.ics.uci.edu/ml/machine-learning-databases/covtype/covtype.data.gz”) 加载covtype.data.Y = 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是训练样本中的观察数。放LearnRate0.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秒。

检查分类误差

将分类误差与集合中成员的数量进行对比。

数字;tic plot(亏损(rustred,covtype(Istest,:),Y(Istest),'模式''累积'));toc
经过时间为164.470086秒。
网格;包含(树木的数量);ylabel (“测试分类错误”);

该集合可以使用116或更多棵树实现20%以下的分类误差。对于500或更多的树木,分类误差以较慢的速率降低。

检查每个类别的混淆矩阵作为真实类别的百分比。

tic yfit =预测(rustred,covtype(Istest,:));toc
运行时间为132.353489秒。
Yfit confusionchart (Y(是),“归一化”'行标准化'“RowSummary”'行标准化'

除第2类外,所有类的分类准确率均在90%以上。但是第二类数据占了近一半,所以总体的准确性不是那么高。

紧凑的合奏

这群人很大。方法删除数据袖珍的方法。

cmpctrus = compact(rustred);SZ(1)= WHOS(“rusTree”);深圳(2)=谁(“cmpctRus”);[sz(1).bytes sz(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页。

另请参阅

||||||||||

相关话题