以二分类为例,由于模型预测存在误差,真实值和预测值之间存在差异,于是有以下四种情况:
将这四个指标一起呈现在表格中,得到的矩阵,称它为混淆矩阵(Confusion Matrix):
要保证一个模型的效果好,也就是希望混淆矩阵第二、四象限对应的位置的数值越多越好。
基于混淆矩阵,引出以下三种评价指标
名称 | 公式 | 意义 |
---|---|---|
准确率 | Accurancy = T P + T N T P + T N + F P + F N \frac{TP+TN}{TP+TN+FP+FN} TP+TN+FP+FNTP+TN | 模型所有的正确预测结果占总数的比例 |
精确率 | precision= T P T P + F P \frac{TP}{TP+FP} TP+FPTP | 精确率是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。精确率低说明存在大量的假正例(FP)。 |
召回率 | Recall= T P T P + F N \frac{TP}{TP+FN} TP+FNTP | 召回率是针对我们原来的样本而言的,表示的是样本中的正例有多少被预测正确了。 |
基于精确率和召回率,又引入了F1 Score,在样本不平衡时,宜采用该评价指标。
F 1 S c o r e = 2 P R P + R F1 \quad Score = \frac{2PR}{P+R} F1Score=P+R2PR
其中,P代表Precision,R代表Recall。
F1-Score指标综合了Precision与Recall的产出的结果。F1-Score的取值范围从0到1的,1代表模型的输出最好,0代表模型的输出结果最差。
举例子分析,在sklearn中可以使用classification_report生成评价指标报告:
from sklearn.metrics import classification_report
print(classification_report(pred_y,y))
从上述结果看出:
正例样本的精确率为0.83,说明预测为正例的样本中只要83%是正真的正例,说明预测结果存在17%假正例(将0误分类为1)。
召回率0.97,说明训练样本数据中的正例有97%被预测对了。只有3%的正样本被预测为负类。
基于以上,我们应该思考为什么模型会将0误分类为1。
AUC(Area Under Curve),这里的Curve指的就是ROC曲线,AUC就是ROC曲线下面的面积,只适用于二分类。
在上述的混淆矩阵,引入两个概念:
True Positive Rate(TPR,真阳率),所有真实类别为1的样本中,预测类别为1的比例,计算公式如下:
T P R = T P T P + F N TPR = \frac{TP}{TP+FN} TPR=TP+FNTP
False Positive Rate(FPR, 伪阳率),所有真实类别为0的样本中,预测类别为1的比例,计算公式如下:
F P R = F P T P + T N FPR = \frac{FP}{TP+TN} FPR=TP+TNFP
接下来通过例子说明如何计算AUC。数据来源:机器学习基础:AUC
(1)对于二分类问题,对于预测结果(概率)进行从大到小排序:
(2)分别以从小到大的预测概率作为阈值,进行分类,如以0.2作为阈值,则21,18号样本为负例,其余样本均为正例。取不同的阈值得到不同的混淆矩阵。得到不同的(TPR,FPR)。
(3)将这些(TPR,FPR)在坐标中画出来。
将这些点平滑的画出,得到ROC曲线。AUC就是ROC曲线下面的面积。
最后说说AUC的优势,AUC的计算方法同时考虑了分类器对于正例和负例的分类能力,在样本不平衡的情况下,依然能够对分类器作出合理的评价。
sklearn相关函数
import numpy as np
from sklearn import metrics
y = np.array([1, 1, 2, 2])
scores = np.array([0.1, 0.4, 0.35, 0.8])
fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
print(fpr,'\n',tpr,'\n',thresholds)
print(metrics.auc(fpr,tpr))
在这里插入图片描述
所有样本的样本误差的平方的均值
M S E = 1 m ∑ ( y i − y ^ i ) 2 MSE = \frac{1}{m} \sum(y_i -\hat y_i)^2 MSE=m1∑(yi−y^i)2
sklearn 相关函数:
from sklearn.metrics import mean_squared_error
所有样本的样本误差的绝对值的均值
M A E = 1 m ∑ ∣ y i − y ^ i ∣ MAE = \frac{1}{m} \sum|y_i - \hat y_i| MAE=m1∑∣yi−y^i∣
sklearn 相关函数:
from sklearn.metrics import mean_absolute_error
所有样本的样本误差的绝对值占实际值的比例,mape越接近0,模型越准确。
M A P E = 100 % n ∑ ∣ y i − y ^ i y i ∣ MAPE = \frac{100 \%}{n} \sum |\frac{y_i - \hat y_i}{y_i}| MAPE=n100%∑∣yiyi−y^i∣
因变量的方差能被自变量解释的程度,R方越接近1,则代表自变量对因变量的解释度越高。
R 2 = 1 − M S E ( y , y ^ ) V a r ( y ) R^2 = 1- \frac{MSE(y,\hat y)}{Var(y)} R2=1−Var(y)MSE(y,y^)
sklearn 相关函数:
from sklearn.metrics import r2_score