对模型的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量(performance measure),回归任务最常用的性能度量是"均方误差" (mean squared error)。下面主要介绍分类模型的评估以及在sklearn库中的实现方法。
一、错误率与精度(accuracy)
错误率和精度是分类任务中最常用的两种性能度量,既适用于二分类任务,也适用于多分类任务。错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例。
from sklearn import metrics
print('模型精度:',metrics.accuracy_score(y_test,y_predict))
二、查准率(precision)、查全率(recall)与F1-score
错误率和精度虽常用,但并不能满足所有任务需求。以西瓜问题为例,假定瓜农拉来一车西瓜,我们用训练好的模型对这些西瓜进行判别,显然,错误率衡量了有多少比例的瓜被判别错误。但是若我们关心的是“挑出的西瓜中有多少比例是好瓜”,或者“所有好瓜中有多少比列被挑了出来”,显然错误率就不能用了,需要使用其他的性能度量。查准率(precision)和查全率(recall)是更为适用于此类需求的性能度量。
对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为真正例(true positive) 、假正例(false positive) 、真反例(true negative) 、假反例(false negative) 四种情形,令TP 、FP 、TN 、FN 分别表示其对应的样例数,则显然有TP+FP+TN+FN=样例总数.
TP: 如果一个实例是正类并且也被预测成正类,即为真正类(True Positive)
FP: 如果一个实例是负类而被预测成正类,即为假正类(False Positive)
TN: 如果一个实例是负类并且也被预测成负类,即为真负类(True Negative)
FN: 如果一个实例是正类而被预测成负类,即为假负类(False Negative)
分类结果的"混淆矩阵" (confusion matrix) 如下表所示:
查准率 P与查全率 R 分别定义为
查准率和查全率是一对矛盾的度量.一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。
F1-score,是统计学中用来衡量二分类模型精确度的一种指标。它同时兼顾了分类模型的准确率和召回率。F1分数可以看作是模型准确率和召回率的一种加权平均,它的最大值是1,最小值是0。
随着阈值的变化,就像假设检验的两类错误一样,如下图所示召回率和精确率不能同时提高,因此我们就需要一个指标来调和这两个指标,于是人们就常用F1-score来进行表示:
print('查准率:',metrics.precision(y_test,y_predict))
print('查全率:',metrics.recall_score(y_test,y_predict))
print('F1-score:',metrics.precision_score(y_test,y_predict))
三、ROC曲线、AUC
ROC(Receiver Operating Characteristic) 受试者工作特征曲线的纵轴是"真正例率" (True Positive Rate,简称TPR) ,也称灵敏度,横轴是"假正例率" (False Positive Rate,简称FPR) ,也称1-特异度,两者分别定义为
下面给出ROC曲线示意图:
现实任务中通常是利用有限个测试样例来绘制ROC 图,此时仅能获得有限个(真正例率,假正例率)坐标对,无法产生图 (a) 中的光滑ROC 曲线, 只能绘制出如图 (b) 所示的近似ROC 曲线。
AUC的全称是(Area Under then Curve Of ROC), 十分直白就是ROC曲线下方的面积,AUC的值越大越好,其取值范围为(0.5,1)。
print('AUC:',metrics.roc_auc_score(y_test,y_pred))
四、log-loss
很多机器学习的算法通常会用logloss作为模型评价的指标,对数损失(Log loss)亦被称为逻辑回归损失(Logistic regression loss)或交叉熵损失(Cross-entropy loss),简单来说就是逻辑回归的损失函数。Logloss的公式如下:
其中y为预测值,N为样本数,p为预测概率。
y_pred=LR.(predict_proba(X))[:,1]预测类别为1的概率
print('log-loss:',metrics.log_loss(y_test,y_pred))