首页 > 代码库 > 分类模型评估与选择总结
分类模型评估与选择总结
1.评估分类器性能的度量
当建立好一个分类模型之后,就会考虑这个模型的性能或准确率如何,这里介绍几种分类器评估度量如下表:
假设在有标号的元组组成的训练集上使用分类器。P是正元组数,N是负元组数。
度量 | 公式 |
准确率、识别率 | (TP+TN)/(P+N) |
错误率、误分类率 | (FP+FN)/(P+N) |
敏感度、真正例率、召回率 | TP/P |
特效型、真负例率 | TN/N |
精度 | TP/(TP+FP) |
F、F1、F分数 精度和召回率的调和均值 | 2*precision*recall/(precision+recall) |
Fb、其中b是非负实数 | (1+b^2)*precision*recall/(b^2*precision+recall) |
注意:某些度量有多个名称。TP,TN,FP,FN,P,N分别表示真正例,真负例,假正例,假负例,正和负样本数。
还有四个需要知道的术语。这些术语是用于计算许多评估度量的“构件”,理解它们有助于领会各种度量的含义。
真正例/真阳性(True Positive,TP):是指被分类器正确分类的正元组。令TP为真正例的个数。
真负例/真阴性(True Negative,TN):是指被分类器正确分类的负元组。令TN为真负例的个数。
假正例/假阳性(False Positive, FP):是被错误地标记为正元组的负元组。令FP为假正例的个数。
假负例/假阴性(False Negative,FN):是被错误地标记为负元组的正元组。令FN为假负例的个数。
这些词汇总在 混淆矩阵 中:
实际的类\预测的类 | yes | no | 合计 |
yes | TP | FN | P |
no | FP | TN | N |
合计 | P‘ | N‘ | P+N |
除了基于准确率的度量外,还可以根据其他方面比较分类器:
速度:这涉及产生和使用分类器的计算开销。
鲁棒性:这是假的数据有噪声或有缺失值时分类器做出正确预测的能力。通常,鲁棒性用噪声和缺失值渐增的一系列合成数据集评估。
可伸缩性:这涉及给定大量数据,有效的构造分类器的能力。通常,可伸缩性用规模渐增的一系列数据集评估。
可解释性:这涉及分类器或预测其提供的理解和洞察水平。可解释性是主观的,因而很难评估。决策树和分类规则可能容易解释,但随着它们变得更复杂,它们的可解释性也随着消失。
概扩的说:当数据类比较均衡地分布时,准确率效果最好。其他度量,如灵敏度、特效型、精度、F和Fb更适合类不平衡问题,那里主要感兴趣的类是稀少的。
2.如何获得可靠的分类器准确率估计
a.保持方法和随机二次抽样
保持:给定数据随机地划分成两个独立的集合:训练集和检验集。使用训练集导出模型,其准确率用检验集估计。估计是悲观的,因为只有一部分初始数据用于导出模型。
随机二次抽样:将保持方法重复k次,总准确率估计取每次迭代准确率的平均值。
b.交叉验证
在k-折交叉验证(k-fold cross-validation)中,初始数据随机地划分成k个互不相交的子集或“折”D1,D2,...,Dk,每个折的大小大致相等。训练和检验进行k次。在第i次迭代,分区Di用做检验集,其余的分区一起用做训练模型。对于分类,准确率估计是k次迭代正确分类的元组总数除以初始数据中的元组总数。 一般建议使用10-折交叉验证估计准确率,因为它具有相对较低的偏倚和方差。
c.自助法
自助法从给定训练元组中有放回的均匀抽样。
常用的一种是.632自助法,其方法如下:假设给定的数据集包含d个元组。该数据集有放回地抽样d次,产生d个样本的自助样本集或训练集。原数据元组中的某些元组很可能在该样本集中出现多次。没有进入该训练集的数据元组最终形成检验集。假设进行这样的抽样多次。其结果是,在平均情况下,63.2%原数据元组将出现在自助样本中,而其余38.8%的元组将形成检验集。
可以重复抽样过程k次,其中在每次迭代中,使用当前的检验集得到从当前自助样本得到的模型的准确率估计。模型的总体准确率则用下式估计Acc(M)=Σ{0.632*Acc(Mi)_test_set+0.368*Acc(Mi)_train_set} ;其中,Acc(Mi)_test_set是自助样本i得到的模型用于检验集j的准确率。Acc(Mi)_train_set是自助样本i得到的模型用于原数据元组集的准确率。对于小数据集,自助法效果很好。
d.其他方法
还有使用统计显著性检验选择模型,基于成本效益和ROC曲线比较分类器 等等方法。
3.提高分类准确率的技术
a.组合分类方法简介
组合分类把k个学习得到的模型(或基分类器)M1,M2,...,Mk组合在一起,旨在创建一个改进的复合分类模型M*。使用给定的数据集D创建k个训练集D1,D2,...,Dk,其中Di用于创建分类器Mi。给定一个待分类的新数据元组,每个基分类器通过返回类预测投票。组合分类器基于集分类器的投票返回类预测。常见的有装袋,adaBoost提升,随机森林。
b.装袋
算法:装袋。装袋算法——为学习方案创建组合分类模型,其中每个模型给出等权重预测。
输入:
D:d个训练元组的集合;
k:组合分类器中的模型数;
一种学习方案(例如,决策树算法,向后传播等)
输出:组合分类器——复合模型M*
方法:
for i=1 to k do //创建k个模型
通过对D有放回抽样,创建自助样本Di ;
使用Di和学习方法导出模型Mi ;
end for
使用组合分类器对元组X分类:
让k个模型都对k分类并返回多数表决;
c.提升和AdaBoost
算法:AdaBoost.一种提升算法——创建分类器的组合。每个给出一个加权投票。
输入:
D:类标记的训练元组集。
k:轮数(每轮产生一个分类器)
一种分类学习方案。
输出:一个复合模型
方法:
将D中每个元组的权重初始化为1/d;
for i=1 to k do
(3) 根据元组的权重从D中有放回抽样,得到Di;
使用训练集Di导出模型Mi;
计算Mi的错误率error(Mi) : error(Mi)=Σ wi * err(Xj) ; j=1,2,...,d
if error(Mi)>0.5 then
转步骤(3)重试;
end if
for Di的每个被正确分类的元组 do
元组的权重乘以error(Mi)/(1-error(Mi)) ; //更新权重
规范化每个元组的权重
end for
使用组合分类器对元组X分类:
将每个类的权重初始化为0;
for i=1 to k do //对每个分类器
wi=log{(1-error(Mi))/error(Mi)} //分类器的投票权重
c=Mi(x); //从Mi得到X的类预测
将wi加到类c的权重;
end for
返回具有最大权重的类;
为了计算模型Mi的错误率,求Mi误分类Di中的每个元组的加权和。即, error(Mi)=Σ wi * err(Xj)
其中,err(Xj)是元组Xj的误分类误差:如果Xj被误分类,则err(Xj)为1;否则,它为0。如果分类器Mi的性能太差,错误率超过0.5,则丢弃它,并重新产生新的训练集Di,由它导出新的Mi。
Mi的错误率影响训练元组权重的更新。如果一个元组在第i轮正确分类,则其权重乘以error(Mi)/(1-error(Mi))。一旦所有正确分类元组的权重都被更新,就对所有元组的权重(包括误分类的元组)规范化,使得它们的和以前一样。为了规范化权重,将它乘以旧权重之和,除以新权重之和。结果,正如上面介绍的一样,误分类元组的权重增加,而正确分类元组的权重减少。
一旦提升完成,提升根据分裂器 的分类情况,对每个分类的表决权赋予一个权重。分类器的错误率越低,它的准确率就越高,因此他的表决权重就应当越高。分类器Mi的表决权重为 log{(1-error(Mi))/error(Mi)},对于每个类c,对每个将类c指派给X的分类器的权重求和。具有最大权重和的类是“赢家”,并返回作为元组X的类预测。
分类模型评估与选择总结