主要内容

在分类系统中处理不平衡的数据或不相等的误分类成本

在许多应用程序中,您可能更愿意不对称地处理数据中的类。例如,数据可能具有比任何其他类别的更多观察结果。或错误分类的一类的观察比错误分类的观察发生了更严重的后果。在这种情况下,您可以使用Rusboost算法(指定“方法”作为'rusboost')或使用名称值对参数'事先的'或者“成本”fitcensemble

如果某些课程在培训集中持续或超过过持续,请使用'事先的'名称-值对参数或RUSBoost算法。例如,假设您通过模拟获得训练数据。因为模拟类一个比模拟类更贵B,则选择生成较少的类观察一个和更多的课程观察B.然而,期望是那个课程一个和班级B在真实(非模拟)情况下以不同的比例混合。在这种情况下,使用'事先的'为类设置概率一个B近似于你期望在真实情况下观察到的值。的fitcensemble函数对先验概率进行归一化,使它们相加为1.将所有的先验概率乘以相同的积极因素并不影响分类的结果。处理不平衡数据的另一种方法是使用rusboost.算法(“方法”,'rusboost')。您无需在使用此算法时调整先前概率。有关详细信息,请参阅随机缺乏采样增强使用不平衡数据进行分类

如果类在训练数据中有充分的表示,但您希望不对称地对待它们,则使用“成本”名称值对参数。假设您想在癌症患者中分类良性和恶性肿瘤。未能鉴定恶性肿瘤(假阴性)的严重后果比恶性良性良好(假阳性)更严重的后果。您应该为恶性和低成本分配高成本,以良性和低成本到恶意良性为恶性。

你必须将误分类代价传递为带有非负元素的方阵。元素C (i, j)矩阵的值是将观察结果分类的代价j如果真实的课程是.对角线元素C(我)成本矩阵必须是0.对于前面的示例,您可以选择恶性肿瘤为1级,良性肿瘤为2级。然后你可以设置代价矩阵为

0 c 1 0

在哪里c> 1是将恶性肿瘤置于良性的成本。成本相对乘以相同的正面因素的所有成本不影响分类的结果。

如果你只有两个类,fitcensemble使用先前的概率使用 P C j P 上课= 1, 2jP是先前的概率要么传递给fitcensemble或者根据训练数据中的类频率计算 P 调整先前的概率。然后fitcensemble使用默认成本矩阵

0 1 1 0

这些调整后的概率培训其弱势学习者。因此,操纵成本矩阵等同于操纵现有概率。

如果你有三个或更多课程,fitcensemble还可以将投入成本转换为调整后的先验概率。这种转换更为复杂。首先,fitcensemble试图解决周和刘所描述的矩阵方程[1].如果它未能找到解决方案,fitcensemble采用Breiman等人所描述的“平均成本”调整。[2].有关更多信息,请参阅Zadrozny,Langford和Abe[3]

分类成本不等的列车组合

这个例子展示了如何训练分类树的集合具有不等的分类代价。本例使用了肝炎患者的数据,以了解他们是否因这种疾病而生存或死亡。数据集描述在UCI机器学习数据存储库

从UCI存储库中读取肝炎数据作为字符数组。然后使用的Cell字符向量阵列将结果转换为使用textscan..指定包含变量名的字符向量单元格数组。

选择= weboptions (“ContentType”'文本');肝炎= TextScan(WebradrieD(['http://archive.ics.uci.edu/ml/'...“machine-learning-databases /肝炎/ hepatitis.data”),选择),...“% % % f % f % % % f % f % % % f % f % % % f % f % % % f % f '“分隔符”','...“EndOfLine”'\ n''trysasempty'“?”);大小(肝炎)
ans =.1×21 20
varnames = {“dieOrLive”'年龄''性别''类固醇''抗病毒人'“疲劳”...'不适''厌食''leverbig'“liverFirm”'脾'...“蜘蛛”腹水的'varices'胆红素的'烷磷酸盐''sgot'...白蛋白的'议会''组织学'};

肝炎是一个1-20个字符向量的单元阵列。细胞对应于响应(Liveordie.)和19个异质性预测因子。

指定包含预测器和包含包含的单元格向量的数字矩阵“死”“生活”,这是响应类别。响应包含两个值:1说明有个病人死了2表明病人还活着使用响应类别为响应指定字符向量单元格数组。第一个变量肝炎包含响应。

X = Cell2MAT(肝炎(2:结束));ClassNames = {“死”“生活”};Y =一会(肝炎{:1});

X是包含19个预测器的数字矩阵。Y是包含响应的特征矢量的单元阵列。

检查数据以获取缺失值。

图BarH(SUM(ISNAN(x),1)/尺寸(x,1))h = gca;H.YTICK = 1:NUMER(varnames) -  1;h.yticklabel = varnames(2:结束);ylabel(“预测”)Xlabel(“缺失值的比例”

大多数预测器具有缺失的值,一个有近45%的缺失值。因此,使用具有代理分裂的决策树以获得更好的准确性。因为数据集很小,所以使用替代分裂的训练时间应该是可容忍的。

创建使用代理分割的分类树模板。

rng (0,“旋风”重复性的%t = templatetree(“代孕”'全部');

检查数据的数据或数据以查看哪些预测器是分类的。

: X (1:5)
ans =.5×19.30.0000 2.0000 1.0000 2.0000 2.0000 2.0000 2.0000 1.0000 2.0000 2.0000 2.0000 2.0000 2.0000 1.0000 85.0000 18.0000 4.0000的NaN 1.0000 50.0000 1.0000 1.0000 2.0000 1.0000 2.0000 2.0000 1.0000 2.0000 2.0000 2.0000 2.0000 2.0000 0.9000 135.0000 42.0000 3.5000的NaN 1.0000 78.0000 1.0000 2.0000 2.0000 1.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.00002.0000 0.7000 96.0000 32.0000 4.0000 1.0000的NaN 1.0000 31.0000 1.0000的NaN 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 0.7000 46.0000 52.0000 4.0000 80.0000 1.0000 34.0000 1.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 1.0000 200.0000的NaN 4.0000 1.0000的NaN

看起来预测器2到13是分类的,以及预测器19。您可以使用数据集描述确认此推断UCI机器学习数据存储库

列出分类变量。

catIdx =(13、19);

使用150学习者创建交叉验证的集合GentleBoost算法。

合奏= fitcensemble(x,y,“方法”'温船'...“NumLearningCycles”,150,“学习者”,t,'predictornames',varnames(2:结束),...“LearnRate”,0.1,“CategoricalPredictors”,catidx,“KFold”5);图绘制(kfoldLoss(合奏,“模式”'累积'“LossFun”“指数”))xlabel('树的数量')ylabel(“旨在指数损失”

检查混淆矩阵以查看合奏预测哪些患者。

[YFIT,SFIT] = KFOLDPREDICT(合奏);ConfusionChart(Y,Yfit)

在居住的123名患者中,该集合可以正确预测112将居住。但对于死于肝炎的32名患者,集合只能正确预测,大约一半将死于肝炎。

Ensemble预测中有两种类型的错误:

  • 预测病人还活着,但病人却死了

  • 预测患者死亡,但患者生命

假设你认为第一个错误比第二个错误严重五倍。创建一个新的分类成本矩阵,以反映这一信念。

cost.classnames = ClassNames;cost.classificationcosts = [0 5;1 0];

使用新交叉验证的合奏使用成本作为错误分类成本,并检查所产生的混乱矩阵。

EnsembleCost = fitcensemble (X, Y,“方法”'温船'...“NumLearningCycles”,150,“学习者”,t,'predictornames',varnames(2:结束),...“LearnRate”,0.1,“CategoricalPredictors”,catidx,“KFold”,5,“成本”、成本);[yFitCost, sFitCost] = kfoldPredict (EnsembleCost);yFitCost confusionchart (Y)

正如预期的那样,新的系统在对死亡病人进行分类方面做得更好。有些令人惊讶的是,新的集成系统在对活下来的病人进行分类方面也做得更好,尽管结果在统计上并没有显著改善。交叉验证的结果是随机的,所以这个结果只是一个统计波动。这一结果似乎表明,生活病人的分类对费用不是很敏感。

参考

[1]周,Z.-h.和x.-y.刘。“关于多级成本敏感学习。”计算智能。卷。26,第3号,2010年,第232-257 CiteSeerx。

布雷曼,J. H. Friedman, R. A. Olshen, C. J. Stone。分类和回归树。佛罗里达州博卡拉顿:查普曼和霍尔,1984年。

[3] Zadrozny,B.,J. Langford和N. Abe。“通过成本比例的示例加权成本敏感学习。”第三届IEEE数据挖掘国际会议, 435 - 442。2003.

另请参阅

||||

相关话题