(机器学习)如何评价机器学习分类算法的性能?
在完成了机器学习中的分类算法以后,其中一个很重要的问题就是如何去评价这些算法的性能。
一般来说,有如下几种方法。我们分别对这些方法进行介绍。
1. 准确率
这种方法顾名思义就是计算,在机器学习中正确分类的数目占总数目的比。思想简单,直接。但是其中有硬伤。比如非常不适合处理类别不平衡的问题。
举一个例子。我们要设计一种机器学习算法,可以通过给定的血液检测结果判断某个人是否患了艾滋病。而目前中国只有85万艾滋病患者(相比13亿人口)。那么自然患有艾滋病的比例是人群中很小的一部分。假定一个算法完全不加任何分析直接输出“没有艾滋病,”其准确率也是13亿-85万/13亿。接近99%。但很显然这样的算法是毫无任何意义的。
2. 敏感性和特异性
那么既然有这样的问题,我们应该如何去处理呢?答案很简单,那便是使用敏感性与特异性分析。
假设有一个二分类问题(如果是机器学习里的多分类问题,应该采用的是混淆矩阵,confusion matrix,可以认为是敏感性和特异性的一个引申)。比如,同样是刚才那个利用血液样本诊断一个人是否是艾滋病患者的问题。我们可以将实际情况分为四种。
正确的正例(健康,检测为健康),TP
正确的错例(不健康,检测为不健康),TN
错误的正例(健康,检测为不健康),FP
错误的反例(不健康,检测为健康),FN
那么我们自然可以分别去定义敏感性:
Se=TP/(TP+FN)
以及特异性:
Sp=TN/(TN+FP)
请注意这两个参数在有些教材上也被称为准确率(不是1中的那个准确率),召唤率。请注意区分。
那么自然,我们可以“放大”我们感兴趣的区域。这样的方法相比于单纯的准确率指标,毫无疑问要准确很多。
3.ROC曲线以及求算AUC面积
ROC(Receiver Operating Characteristic,受试者工作特征)曲线本来是用来分析雷达的。我们也把他拿来进行机器学习的业务。这也体现于现代的机器学习算法是基于许许多多不同学科的。比如数学,统计学,物理学,电子电气工程学等等。
在一个平面内。我们采用Se以及1-Sp,分别作为Y轴以及X轴的数值。以此作图。
这就是一个ROC曲线的图的案例。而我们把曲线下方的面积称为AUC(Area under curve)。这个值越接近于1,也就是这个曲线越靠近左上角,那么作为分类器他的性能也就越好。而一个随机分类器,其ROC曲线则是一条从(0,0)到(1,1)的直线。
思考题:为什么一个随机分类器,其ROC曲线则是一条从(0,0)到(1,1)的直线?
3.混淆矩阵
混淆矩阵推广了传统的只能做二分类的评价指标。而是将问题拓宽到一个矩阵上。
一个混淆矩阵就是一个n行n列的矩阵。我们知道,在一个分类问题里,比如手写数字识别。某一个数字,比如9,有可能会被误作0-9的任何一个数字。那么在这个矩阵里,我们分别记录数据。被误作0的次数是多少。被误作1的次数是多少。。。被误作8的次数是多少,被准确归类为9的次数是多少。以此类推。
这种算法的好处是我们可以在分类问题里捕捉不容易被分类对的项目。比如8被认为是9的概率是很低的。但是手写数字7和9可能就不是那么容易区分了。