算法模型建立后需要进行评估,以判断模型的优劣。一般使用训练集 (training set) 建立模型,使用测试集 (test set) 来评估模型。
1、分类模型
1.1 评估指标
对于分类算法评估指标有分类准确度、召回率、虚警率和精确度等。而这些指标都是基于混淆矩阵 (confusion matrix) 进行计算的。
混淆矩阵用来评价监督式学习模型的精确性,矩阵的每一列代表一个类的实例预测,而每一行表示一个实际的类的实例。以二分类问题为例,如下表所示:
其中 :
P (Positive Sample):正例的样本数量。
N (Negative Sample):负例的样本数量。
TP (True Positive):正确预测到的正例的数量。
FP (False Positive):把负例预测成正例的数量。
FN (False Negative):把正例预测成负例的数量。
TN (True Negative):正确预测到的负例的数量。
根据混淆矩阵可以得到评价分类模型的指标有以下几种。
1)分类准确度,就是正负样本分别被正确分类的概率,计算公式为:
2)召回率,就是正样本被识别出的概率,计算公式为:
3)虚警率,就是负样本被错误分为正样本的概率,计算公式为:
4)精确度,就是分类结果为正样本的情况真实性程度,计算公式为:
1.2 精确率、召回率、F1 值、ROC、AUC 各自的优缺点是什么
详见:https://www.zhihu.com/question/30643044
1)ROC曲线(Receiver operating characteristic curve),ROC曲线其实是多个混淆矩阵的结果组合,如果在上述模型中我们没有定好阈值,而是将模型预测结果从高到低排序,将每个概率值依次作为阈值,那么就有多个混淆矩阵。
对于每个混淆矩阵,我们计算两个指标TPR(True positive rate)和FPR(False positive rate)
TPR=Recall=TP/(TP+FN))=TP/actual positives
FPR=FP/(FP+TN)=FP/actual negatives
先说ROC,ROC(receiver operating characteristic curve)是曲线。也就是下图中的曲线。同时我们也看里面也上了AUC也就是是面积。一般来说,如果ROC是光滑的,那么基本可以判断没有太大的overfitting(比如图中0.2到0.4可能就有问题,但是样本太少了),这个时候调模型可以只看AUC,面积越大一般认为模型越好。
2)再说PRC, precision recall curve。和ROC一样,先看平滑不平滑(蓝线明显好些),在看谁上谁下(同一测试集上),一般来说,上面的比下面的好(绿线比红线好)。F1(计算公式略)当P和R接近就也越大,一般会画连接(0,0)和(1,1)的线,线和PRC重合的地方的F1是这条线最大的F1(光滑的情况下),此时的F1对于PRC就好象AUC对于ROC一样。一个数字比一条线更方便调模型。
以上两个指标用来判断模型好坏,图有些不恰当。。。但是有时候模型没有单纯的谁比谁好(比如图二的蓝线和青线),那么选择模型还是要结合具体的使用场景。
下面是两个场景:
1. 地震的预测
对于地震的预测,我们希望的是RECALL非常高,也就是说每次地震我们都希望预测出来。这个时候我们可以牺牲PRECISION。情愿发出1000次警报,把10次地震都预测正确了;也不要预测100次对了8次漏了两次。
2. 嫌疑人定罪
基于不错怪一个好人的原则,对于嫌疑人的定罪我们希望是非常准确的。及时有时候放过了一些罪犯(recall低),但也是值得的。
对于分类器来说,本质上是给一个概率,此时,我们再选择一个CUTOFF点(阀值),高于这个点的判正,低于的判负。那么这个点的选择就需要结合你的具体场景去选择。反过来,场景会决定训练模型时的标准,比如第一个场景中,我们就只看RECALL=99.9999%(地震全中)时的PRECISION,其他指标就变得没有了意义。
如果只能选一个指标的话,肯定是选PRC了。可以把一个模型看的一清二楚。
注:关于PR曲线及其对应AUC-PR和ROC曲线及其对应AUC-ROC的对比可以参考以下这篇论文,文章认为在非平衡数据集上PR系列表现略优,反之ROC略优。
(Sahiner B, Chen W, Petrick N. Comparison of two classifiers when the data sets are imbalanced: the power of the area under the precision-recall curve as the figure of merit versus the area under the ROC curve[C]// Spie Medical Imaging. International Society for Optics and Photonics, 2017:101360G.)
注:ROC曲线对非平衡数据不敏感,但是不敏感你反而不能看出模型的实际情况是什么样子啊,而PRC对非平衡数据很敏感,会出现强烈的波动。如果你只在乎某一类的预测正确的概率的话,那就看ROC吧,但是你想看你的分类器对于整体分类情况的好坏,那最好还是看PR吧
3)也有人会用Gini系数来评价模型,其实Gini系数与AUC所表示的意义相同,只是计算方式不同。Gini系数指ROC曲线与中线(下图红线)围成的面积和中线(下图红线)之上的面积(0.5)的比例,两者之间换算公式为Gini=2*AUC-1。
4)F1值是精确率和召回率的调和均值,即F1=2PR/(P+R),相当于精确率和召回率的综合评价指标。
另外还有Fα值,为F1值的变体, ,利用α给P和R赋予不同的权重,若α=1则为F1值。
2、回归模型的评价指标
1、均方差(mean-squared-error)
假定是第i个样本的预测响应,
是期望响应,总共有
个样本,则
#mean_squared_error
from sklearn.metrics import mean_squared_error
y_true=[3,-0.5,2,7]
y_pred=[2.5,0.0,2,8]
print(mean_squared_error(y_true,y_pred))
y_true=[[0.5,1],[-1,1],[7,-6]]
y_pred=[[0,2],[-1,2],[8,-5]]
print(mean_squared_error(y_true,y_pred))
#结果
#0.375
#0.708333333333
2、平均绝对值误差(mean_absolute_error)
假定是第i个样本的预测响应,
是期望响应,总共有
个样本,则
3、解释方差得分(explained_variance_score)
假定是预测的目标响应,
是期望的(正确的)目标响应,Var是方差,则
解释方差的最大值是1.0,代表预测的目标响应是最好的;越小就代表预测结果越差。
4、中值绝对误差(Median absolute error)
假定是第i个样本的预测响应,
是期望响应,总共有
个样本,则
此种方法非常适应含有离群点的数据集
5、R2 决定系数(拟合优度)
假定是第i个样本的预测响应,
是期望响应,总共有
个样本,则
3、 评估方法
评估方法有保留法、随机二次抽样、交叉验证和自助法等。
1) 保留法 (holdout) 是评估分类模型性能的最基本的一种方法。将被标记的原始数据集分成训练集和检验集两份,训练集用于训练分类模型,检验集用于评估分类模型性能。但此方法不适用样本较小的情况,模型可能高度依赖训练集和检验集的构成。
2) 随机二次抽样 (random subsampling) 是指多次重复使用保留方法来改进分类器评估方法。同样此方法也不适用训练集数量不足的情况,而且也可能造成有些数据未被用于训练集。
3)交叉验证 (cross-validation) 是指把数据分成数量相同的 k 份,每次使用数据进行分类时,选择其中一份作为检验集,剩下的 k-1 份为训练集,重复 k 次,正好使得每一份数据都被用于一次检验集 k-1 次训练集。该方法的优点是尽可能多的数据作为训练集数据,每一次训练集数据和检验集数据都是相互独立的,并且完全覆盖了整个数据集。也存在一个缺点,就是分类模型运行了 K 次,计算开销较大。
4)自助法 (bootstrap) 是指在其方法中,训练集数据采用的是有放回的抽样,即已经选取为训练集的数据又被放回原来的数据集中,使得该数据有机会能被再一次抽取。用于样本数不多的情况下,效果很好。