首页 > 代码库 > 分类模型评估与选择总结

分类模型评估与选择总结

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为假负例的个数。

    这些词汇总在  混淆矩阵 中:                           

实际的类\预测的类yesno合计
yesTPFNP
noFPTNN
合计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的类预测。

 

分类模型评估与选择总结