机器学习解决问题的通用流程:问题建模----特征工程----模型选择----模型融合
其中问题建模主要包括:设定评估指标,选择样本,交叉验证。
解决一个机器学习问题都是从问题建模开始,首先需要收集问题的资料,深入理解问题,然后将问题抽象成机器可预测的问题。在一个过程中要明确业务指标和模型预测目标,根据预测目标选择适当指标用于模型评估。接着从原始数据中选择最相关的样本子集用于模型训练,并对样本子集划分训练集和测试集,应用交叉验证的方法对模型进行选择和评估。
评估指标
评估指标用于反应模型效果,在预测问题中,要评估模型的效果,就需要将模型预测结果f(x)和真实标注Y进行比较,评估指标定义为f(x)和Y的函数。
分类指标
1.精确率、召回率、准确率、错误率和F函数
1.1精确率和召回率
精确率和召回率主要用来二分类问题(从其公式推导也可看出),结合混淆矩阵有:
精确率P和召回率R的定义为:
上述计算公式中的Positive和Negative是预测标签,True与False代表预测正误;要注意,精确率和召回率是二分类指标,不适用多分类,由此得到P-R曲线以及ROC曲线均是二分类评估指标(因为其横纵轴指标均为二分类混淆矩阵计算得到),而准确率适用于多分类评估。(可以将多分类问题转换为二分类问题进行求解,将关注的类化为一类,其他所有类化为一类)
理想情况下,精确率和召回率两者越高越好。然而事实上这两者在某些情况下是矛盾的,精确率高时,召回率低;精确率低时,召回率高;关于这个性质通过观察PR曲线不难观察出来。比如在搜索网页时,如果只返回最相关的一个网页,那精确率就是100%,而召回率就很低;如果返回全部网页,那召回率为100%,精确率就很低。因此在不同场合需要根据实际需求判断哪个指标更重要。
recall是相对真实的答案而言: true positive/golden set。假设测试集里面有100个正例,你的模型能预测覆盖到多少,如果你的模型预测到了40个正例,那么你的recall就是40%。
precision是相对于你自己的模型预测而言:true positive / retrieved set。假设你的模型一共预测了100个正例,而其中80个是对的正例,那么你的precision就是80%。我们可以把precision理解为,当你的模型作出一个新的预测时,他的confidence score是多少,或者它做的这个预测是对的可能性是多少。
一般来说,鱼与熊掌不可兼得。如果你的模型很贪婪,想要覆盖更多的sample,那么它就更有可能犯错。在这种情况下,你就会有很高的recall,但是较低的precision。如果你的模型很保守,只对它很确定的sample作出预测,那么你的precision会很高,但是recall会相对低。
我们可以选择只看我们感兴趣的类,就是minority class的precision,recall来评价模型的好坏。
1.2 准确率和错误率
准确率和错误率既可用于二分类也可用于多分类:
上述公式是准确率、错误率针对二分类情况时候的计算公式
精确率和准确率是比较容易混淆的两个评估指标,两者是有区别的。精确率是一个二分类指标,而准确率能应用于多分类,其计算公式为:
1.3 F1函数
F1函数是一个常用指标,F1值是精确率和召回率的调和平均值,即,F值可泛化为对精确率和召回率赋不同权值进行加权调和:.
下面是两个场景:
(1)地震的预测:我们希望的是Recall非常高,也就是说每次地震我们都希望预测出来。这个时候我们可以牺牲Precision。宁愿发出1000次警报,把10次地震都预测正确率;也不要预测100次对了8次漏了两次。
(2)嫌疑人定罪基于不错怪一个好人的原则,对于嫌疑人的定罪我们希望是非常准确的。即使有时候放了一些罪犯(Recall低),但也是值得的。对于分类器来说,本质上是给一个概率,此时,我们再选择一个cutoff点(阈值),高于这个点的判正,低于判负。那么这个点的选择就需要结合你的具体场景去选择。反过来,场景会决定训练模型时的标准,比如第一个场景中,我们就只看RECALL=99.9999%(地震全中)时的PRECISION,其他指标就变得没有了意义。
2. ROC曲线、PR曲线
2.1 PR曲线
我们以召回率R为横轴、以精确率P为纵轴,能够画出P-R曲线,如下图:
从上图不难发现,Precision与Recall的折中(trade off),曲线越靠近右上角性能越好,曲线下的面积叫做AP分数,能在一定程度上反应模型的精确率和召回率都很好的比例。但这个值不方便计算,综合考虑精度与召回率一般使用F1函数或者AUC值(因为ROC曲线很容易画,ROC曲线下的面积也比较容易计算)。
先看平不平滑,再看谁上谁下(同一测试集上),一般来说,上面的比下面的好(红线比黑线好);
F1当P和R接近也就越大,一般会画连接(0,0)和(1,1)的线,线和PRC重合的地方的F1是这条线最大的F1(光滑情况下),此时的F1对于P-R曲线就好像AUC对于ROC一样。一个数字比一条线更方便调模型。
注意:既然Precision与Recall都是二分类指标,则PR曲线也必然是二分类指标,虽然可以将precision、Recall及PR曲线应用到多分类,但是这种情况相当于是多分类转换为二分类情况分析(将关注的类视为一类,将其他所有类化为一类)。
2.2 ROC曲线
在众多的机器学习模型中,很多模型输出的是预测概率,而使用精确率、召回率这类指标进行模型评估时,还需要对预测概率设分类阈值,比如预测概率大于阈值为正例,反之为负例。这使得模型多了一个超参数,并且这个超参数会影响模型的泛化能力。
接受者操作特征(Receiver Operating Characteristic, ROC)曲线不需要设定这样的阈值,ROC曲线纵坐标是真正率,横坐标是假正率,如下图,去对应的计算公式:
同时,TPR与FPR又有其他名称,如下:
sensitivity = recall = true positive rate
specificity = 1- false positive rate
假设我们的minority class, 也就是正例,是1。反例,为0.
看出来没有,sensitivity和specificity是条件与真实label Y的概率。我们讲这个叫条件概率,那么意思就是说,无论Y的真实概率是多少,都不会影响sensitivity和specificity。也就是说,这两个metric是不会受imbalanced data影响的,那么就很客观。而precision就会随着你的测试集里面的正反比例而变化。
另外值得注意的是,AUC的计算方法同时考虑了学习器对于正例和负例的分类能力,在样本不平衡的情况下,依然能够对分类器作出合理的评价。AUC对样本类别是否均衡并不敏感,这也是不均衡样本通常用AUC评价学习器性能的一个原因。
例如在癌症预测的场景中,假设没有患癌症的样本为正例,患癌症样本为负例,负例占比很大(大概0.1%),如果使用准确率评估,把所有的样本预测为正例变可以获得99.9%的准确率。但是如果使用AUC,把所有样本预测为正例,TPR为1,FPR为1。这种情况下学习器的AUC值将等于1,成功规避了样本不均衡带来的问题。
例如在癌症预测的场景中,假设没有患癌症的样本为正例,患癌症样本为负例,负例占比很少(大概0.1%),如果使用准确率评估,把所有的样本预测为正例便可以获得99.9%的准确率。但是如果使用AUC,把所有样本预测为正例,TPR为1,FPR为1。这种情况下学习器的AUC值将等于0.5,成功规避了样本不均衡带来的问题。
这个曲线就是以true positive rate 和false positive rate为轴,取不同的threshold点画的。每个分类器作出的预测,都是基于一个probability score的。一般默认的threshold都是0.5,如果probability > 0.5,那么这个sample被模型分成正例,反正则是反例。
真正率(True Positive Rate)就是召回率Recall
ROC曲线和P-R曲线有些类似,ROC曲线越靠近左上角性能越好。左上角坐标为(0,1),即FPR=0,TPR=1,根据FPR和TPR公式可以得知,此时FN=0,FP=0,模型对所有样本分类正确,绘制ROC曲线很简单,首先对所有样本按预测概率排序,以每条样本的预测概率为阈值,计算相应的FPR和TPR,然后线段连接。
当数据量少时,绘制ROC曲线不平滑;当数据量大时,绘制的ROC曲线会趋于平滑。
ROC曲线可以很好的回答什么问题呢---不论class的基本概率怎么样,我的模型泛化能力能表现得多好?
一般来说,最优的threshold就是橙色曲线离蓝色虚线(基准线)最远的一点,或者橙色曲线上离左上角最近的一点,再或者根据用户自己定义的cost function来的。如果ROC是光滑的,那么基本可以判断没有太大的overfitting(比如图中0.2到0.4可能就有问题,但是样本太少了),这个时候调模型可以只看AUC,面积越大一般认为模型越好。
(1)主要作用
1)ROC曲线很容易的查出任意阈值对学习器的泛化性能影响。
2)有助于选择最佳的阈值。ROC曲线越靠近左上角,模型的查全率就越高。最靠近左上角的ROC曲线上的点是分类最少的最好的阈值,其假正例和假反例总数最少。
3)可以对不同的学习器比较性能。将各个学习器的ROC曲线绘制到同一坐标中,直观地鉴别优劣,靠近左上角的ROC曲线所代表的学习器准确性最高。
(2)优点
1)该方法简单、直观、通过图示可观察分析方法的准确性,并可用肉眼作出判断。ROC曲线将真正例率和假正例率以图示方法结合在一起,可准确反映某种学习器真正例率的关系,是检测准确性的综合代表。
2)在生物信息学上的优点:ROC曲线不固定阈值,允许中间状态的存在,利于使用者结合专业知识,权衡漏诊与误诊的影响,选择一个更加的阈值作为诊断参考值。
3.AUC
3.1 什么是AUC?
AUC是一个模型评价指标,只能用于二分类模型的评价,对于二分类模型,还有很多其他评价指标,比如logloss,accuracy,precision。如果你经常关注数据挖掘比赛,比如kaggle,那你会发现AUC和logloss基本是最常见的模型评价指标。为什么AUC和logloss比accuracy更常用呢?因为很多机器学习的模型对分类问题的预测结果都是概率,如果要计算accuracy,需要先把概率转换成类别,这就需要手动设置一个阈值,如果对一个样本的预测概率高于这个预测,就把这个样本放进一个类别里面,低于这个阈值,放进另一个类别里面。所以这个阈值很大程度上影响了accuracy的计算。使用AUC或者logloss可以避免把预测概率转换成类别。
AUC是Area under curve的首字母缩写。AUC就是ROC曲线下的面积,衡量学习器优劣的一种性能指标。从定义可知,AUC可通过对ROC曲线下各部分的面积求和而得。假定ROC曲线是由坐标为的点按序连接而形成,则AUC可估算为:
3.2 AUC的意义
通过AUC的定义我们知道了AUC是什么,怎么计算,但是还不清楚他的意义。如果从定义来理解AUC的含义,比较困难,实际上AUC和Mann-Whitney U test有密切的联系。
从Mann–Whitney U statistic的角度来解释,AUC就是从所有1样本中随机选取一个样本, 从所有0样本中随机选取一个样本,然后根据你的分类器对两个随机样本进行预测,把1样本预测为1的概率为p1,把0样本预测为1的概率为p0,p1>p0的概率就等于AUC。
即AUC是指随机给定一个正样本和一个负样本,分类器输出该正样本为正的那个概率值比分类器输出该负样本为正的那个概率值要大的可能性。
所以AUC反应的是分类器对样本的排序能力。根据这个解释,如果我们完全随机的对样本分类,那么AUC应该接近0.5.(所以一般训练出的模型,AUC>0.5,如果AUC=0.5,这个分类器等于没有效果,效果与完全随机一样,如果AUC<0.5,则可能是标签标注错误等情况造成)
另外值得注意的是,AUC的计算方法同时考虑了学习器对于正例和负例的分类能力,在样本不平衡的情况下,依然能够对分类器作出合理的评价。AUC对样本分类是否均衡并不敏感,这也是不均衡样本通常用AUC评价学习器性能的一个原因。
这个指标尤其适用在某些场景下(如CTR预估),每次要范湖的是最有可能点击的若干个广告(根据CTR排序,选择排在前面的若干个),实际上便是在考验模型的排序能力。除此之外,CTR中存在着样本不均衡的问题,正负样本比例通常会大于1:100,如果采用PR曲线,则会导致AUC发生剧变,无法较好反应模型效果。
然而ROC曲线不会随着类别分布的改变而改变的优点在一定程度上也是其缺点。因为ROC曲线这种不变性其实影响着的是AUC值,或者说是评估分类器的整体性能。但是在某些场景下,我们会更关注正样本,这时候就要用到PR曲线了。
比如信用卡欺诈检测,我们会更关注precision和recall,比如说如果要求预测出为欺诈的人尽可能准确,那么就是要提高 precision;而如果要尽可能多地预测出潜在的欺诈人群,那么就是要提高 recall。一般来说,提高二分类的 threshold 就能提高 precision,降低 threshold 就能提高 recall,这时便可观察 PR 曲线,得到最优的 threshold。
AUC还和基尼(Gini)系数有联系,满足
AUC计算主要与排序有关,所以它对排序敏感,而对预测分数没那么敏感。
4.对数损失
对数损失(logistic loss,logloss)是对预测概率的似然估计,其标准形式为:
对数损失最小化本质上是利用样本中的已知分布,求解导致这种分布的最佳模型参数,是这种分布出现概率最大。
logloss衡量的是预测概率分布和真实概率分布的差异性,取值越小越好。与AUC不同,logloss对预测概率敏感。