主要内容

使用不平衡数据进行分类

这个例子展示了当一个类比另一个类有更多的观察结果时,如何执行分类。您使用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 =培训(部分);拟合的%数据坚持=测试(部分);质量评估的%数据Tabulate(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

对新数据的预测精度可能不同,因为整体精度可能有偏差。产生偏差的原因是用于评估总体的相同数据被用于减小总体的大小。为了获得所需集合大小的无偏估计,您应该使用交叉验证。然而,这个过程很耗时。

参考

[1]布莱克德,J. A.和D. J.迪恩。“人工神经网络和判别分析在从地图变量预测森林覆盖类型方面的比较精度”。农业计算机与电子1999年第3期第24卷,第131-151页。

另请参阅

||||||||||

相关话题