主要内容

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

在许多应用程序中,您可能更愿意不对称地处理数据中的类。例如,数据可能具有比任何其他类别的更多观察结果。或错误分类的一类的观察比错误分类的观察发生了更严重的后果。在这种情况下,您可以使用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”“脾”...“蜘蛛”腹水的“静脉曲张”胆红素的'烷磷酸盐''sgot'...白蛋白的'议会'组织学的};

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

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

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

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

检查数据中是否有缺失的值。

figure barh(sum(isnan(X),1)/size(X,1)) h = gca;h: ytick = 1:numel(VarNames) - 1;h.YTickLabel = VarNames(2:结束);ylabel (“预测”)包含(“缺失值的比例”

大多数预测器具有缺失的值,一个有近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”“指数”)包含('树的数量') ylabel (“旨在指数损失”

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

[yFit, sFit] = kfoldPredict(套装);yFit confusionchart (Y)

在活着的123名患者中,该团队正确地预测出112人会活下来。但对于32名死于肝炎的患者来说,该研究仅正确预测了大约一半的人将死于肝炎。

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

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

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

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

成本。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.

另请参阅

||||

相关的话题