关于分类算法我们之前也讨论过了KNN、决策树、naivebayes、SVM、ANN、logistic回归。关于这么多的分类算法,我们自然需要考虑谁的表现更加的优秀。
既然要对分类算法进行评价,那么我们自然得有评价依据。到目前为止,我们讨论分类的有效性都是基于分类成功率来说的,但是这个指标科学吗?我们不妨考虑这么一个事实:一个样本集合里有95个正例,5个反例,分类器C1利用似然的思想将所有的实例均分成正例,分类成功率为95%;分类器C2成功分出了80个正例,3个反例,分类成功率仅83%。我们可以说分类器C2不如C1吗?这就充分表明了,分类成功率掩盖了样本是如何被分错的事实。
那么我们怎么来充分反映分类的好坏呢?一个普遍使用的办法就是报告分类矩阵(又称混淆矩阵),他可以帮助我们更好地理解分类情况,许多的分类评价指标都是基于分类矩阵发展起来的。
一、考察数据与考察方法
当然,分类器在一个数据集上的好坏说明不了任何问题。以一个数据集的表现来评价分类器性能对分类器而言是极端不公正的也是极端不科学的。但是我们这里因为篇幅限制,也只能通过一个数据集来看看分类的好坏。
我们使用一个在信用评分领域里大名鼎鼎的免费数据集,German Credit Dataset,你可以在UCI Machine LearningRepository找到(下载;数据描述)。我们把这个数据分为两部分,训练数据train和测试数据test,我们感兴趣的二分变量是good_bad,取值为{good, bad}。
信用评分指帮助贷款机构发放消费信贷的一整套决策模型及其支持技术。一般地,信用评分技术将客户分为好客户与坏客户两类,比如说,好客户(good)能够按期还本付息(履约),违约的就是坏客户(bad)。具体做法是根据历史上每个类别(履约、违约)的若干样本,从已知的数据中考察借款人的哪些特征对其拖欠或违约行为有影响,从而测量借款人的违约风险,为信贷决策提供依据。
二、分类矩阵
一个完美的分类模型就是,如果一个客户实际上(Actual)属于类别good,也预测成(Predicted)good,处于类别bad,也就预测成bad。但从上面我们看到,一些实际上是good的客户,根据我们的模型,却预测他为bad,对一些原本是bad的客户,却预测他为good。我们需要知道,这个模型到底预测对了多少,预测错了多少,分类矩阵就把所有这些信息,都归到一个表里:
|
真实结果 |
||
+1 |
-1 |
||
预测结果 |
+1 |
真正例(TP) |
伪正例(FP) |
-1 |
伪反例(FN) |
真反例(TN) |
FP和FN就是我们常说的第一类错误与第二类错误,以这四个基本指标可以衍生出多个分类器评价指标。
我们来看看KNN、决策树、naivebayes、SVM、ANN、logistic回归这6种基分类器的分类矩阵。
好了,分类矩阵全部算出来了,现在我们需要考虑的便是应该定义怎样的评价指标了。
三、具体的静态分类指标
常见的分类指标大致有如下几个:
|
真实结果 |
||
+1 |
-1 |
||
预测结果 |
+1 |
真正例(TP) |
伪正例(FP) |
-1 |
伪反例(FN) |
真反例(TN) |
使用这些评价标准可以对分类器进行评估,尤其是其中的准确度或错误率,是比较常用的分类器性能评价标准。(在某些如推荐或信息获取领域还会组合使用precision-recall作为评价指标)但是,所有这些性能评价标准都只在一个操作点有效,这个操作点即是选择使得错误概率最小的点(我们这里选择的是R中默认的分类,与最优阈值下的分类还是有很大差别的)。而且,其中大部分评价标准都有一个共同的弱点,即它们对于类别分布的改变显得不够稳健。当测试集中正例和反例的比例改变时,它们可能不再具有良好的性能,有时甚至不能被接受。
构造一个高正确率(precision)或者高召回率(recall)的分类器不难,但是要保证两者同时成立却是很难的。显然如果任何样本都判为正例,那么召回率很高但是正确率很难保证。构造一个同时使正确率和召回率最大的分类器也是具有挑战性的。
我们来看看各种方法的各个指标情况:(上面是训练集下面是测试集的数据)
method |
FP rate |
specificity |
recall |
precision |
accuracy |
F-score |
logistic |
35.10% |
64.90% |
76.87% |
83.71% |
73.29% |
64.35% |
Test |
36.36% |
63.64% |
76.55% |
84.73% |
73.00% |
64.86% |
ANN |
50.61% |
49.39% |
87.93% |
79.74% |
76.13% |
70.11% |
Test |
58.18% |
41.82% |
86.21% |
79.62% |
74.00% |
68.64% |
SVM |
57.96% |
42.04% |
77.12% |
75.09% |
66.38% |
57.91% |
Test |
58.18% |
41.82% |
80.00% |