Q:怎样评估一个学习算法训练出来的学习器的效果好坏?
评估学习器的基本要求是:
学习器误差越小越好。对于分类任务,分类错误的样本数占总样本数的比率越小越好。对于回归预测,预测值与真实值的差越小越好。
学习器泛化能力越强越好。也就是说学习能力不仅在训练样本上要表现好,在新的样本上的表现也要好。不能像书呆子一样在学校表现很好,但一进入社会就一塌糊涂。
因此,评估一个学习器,我们通常首先要衡量它的泛化误差,也就是一个训练好的学习器在新样本上的误差表现。
Q:当只有一个数据集,并且既要训练,又要测试的时候,怎么办?
可以想象人类学生的做法。当人类学生准备高考、或者考研、或者其他考试的时候,刷题总是必不可少的学习过程。当我们只有一套试卷的时候,我们总是用一部分试卷来学习(也就是一边做题,一边翻书,通过做题来梳理知识和查缺补漏),然后另外一部分试卷用来真正地测试自己的能力(全程做题,做完再对答案)。机器学习的做法也一样。
留出法:当只有一个数据集的时候,用一部分来训练,一部分来测试。而且训练数据和测试数据没有交集。通常会用60%到80%的数据作为训练集,剩下的作为测试集。需要注意的是,在选择训练集(或者测试集)的时候要采用分层抽样的方法。就像刷题一样,训练集和测试集都要有相近比例的题型,不能训练集全是选择题,测试集全是论述题,应该训练集和测试集都包含选择题和测试题,而且比例要一致,都是八成选择题,两成论述题。
一次的训练-测试结果可能不够科学,最好划分不同的训练集和测试集,做多次训练-测试,将测试结果(错误率、查准率之类的)取平均。
交叉检验法:这是在“留出法”的基础上改进的方法。先将数据集分为k个大小相似的互斥子集(当然,每个子集的产生都要用分层抽样进行)。每次用k-1个子集作为训练集,剩下的一个作为测试集。这样就可以进行k次训练-测试。k的测试结果的平均值就是最终的测试结果。
自助法:上述两种方法都是在原本作为训练集的数据中抽出一部分作为测试集,因此训练集的规模不可避免地减少了,训练效果也就受到了影响。自助法则是一种比较好的缓解方法。假设有一个包含m个样本的数据集D。对这个数据集进行m次有放回的抽样,则得到了一个含有m个样本的数据集D'。D'相对于原数据集D,规模没有减少,只是D'中有部分样本是重复出现的。所以在抽样中没有抽到的样本就作为测试集,D'就作为训练集。按照概率论推导可知,一般来说抽样中国会有三分之一的样本没有被抽到,也就是说测试集大小为数据集D大小的三分之一。
虽然自助法能弥补留出法和交叉检验法的不足,但是也有自己的缺陷,那就是改变了原来的训练样本的分布,这也会对训练效果造成影响。因此在数据集比较大时多采用留出法和交叉检验法,当数据集比较小时采用自助法。
Q:在测试一个学习器时,有哪些测试指标可以使用?
错误率(error):最常用的测试指标就是错误率。对于一次分类任务,如果分类错误的样本数为a,总样本数为m,则错误率E=a/m.(精度为1-a/m)。比如为100个西瓜分类,有10个分错了,错误率就是10%。
均方误差(mean squared error):“错误率”一般针对分类任务,回归预测则用均方误差,即各次,预测值与真实值,的差,的平方,的和:可以认为是各次预测的误差的累加。
查准率(precision):也就是检索出来的结果中准确的结果所占的比例。比如找出100个西瓜中的好瓜,找出50个,但这50个中只有40个是真正的好瓜,则查准率为80%。
查全率(recall):也就是希望检索的结果中被检索出来的比例。比如找出100个西瓜中的好瓜,找出40个,但真正的好瓜有50个,则查全率为80%。
ROC曲线:很多二分类学习器的分类方法是计算出每一个样本作为正例的概率,然后按照概率大小对样本排序,最后确定一个临界概率(阈值),大于临界概率的认定为正例,其余为反例。以西瓜分类为例。有些西瓜是好瓜的概率高,有些西瓜是好瓜的概率低。把这些西瓜按照概率排序,然后取50%作为临界概率。概率大于50%的认为是好瓜,否则为坏瓜。因此这个排序的质量很重要。
使用这种方法就会产生两个指标:真正例率(“选出的好瓜”中真正的好瓜占所有的好瓜的比例,也就是好瓜的查准率),和假正例率(“选出的好瓜”中坏瓜占所有坏瓜的比例)。对于每一个临界概率,都有一个对应的真正例率和假正例率。把各个临界概率对应的真正例率和假正例率绘成图就是ROC图。
AUC:Area Under Curve 就是ROC曲线中右下方区域的面积。AUC判断一个分类用的排序队列的好坏,AUC越大越好。
Q:知道了两个学习器的某个指标,比如错误率,A学习器的错误率低于B学习器的错误率,能否认为A学习器质量比B学习器好?
不能。
首先一次的测试结果可能有误差,需要多次测试然后取平均。所以应该比较平均错误率。其次一个学习器的平均错误率比另一个的低,这个是否显著?若某一次评估中A学习器的平均错误率是2%,B学习器的平均错误率是2.001%,能否就能说明A的性能比B好?
若要比较两个学习器的某项指标,要用到统计学的假设检验,才能得到有显著性的,尽可能排除偶然性的结论。比如用t检验比较两个学习器的平均错误率,用方差分析和多重比较来比较多个学习器的某项性能。
本作品首发于简书 和 博客园平台,采用知识共享署名 4.0 国际许可协议进行许可。