在机器学习模型搭建好之后,需要对模型进行评估,针对不同的算法模型有不同的评估方法,比如:分类算法、回归算法、聚类算法等,本文主要是针对分类算法的模型评估方法进行总结整理,便于自己对评估方法的进一步理解和随时查阅。
在介绍分类评估方法之前,首先介绍一个比较重要的概念:混淆矩阵,后续的评估方法都是在此基础之上定义的,对于分类模型而言(这里仅以最简单的二分类为例,假设只有0和1两类),其结果主要有以下四种:
F1分数(F1 Score),是统计学中用来衡量二分类模型精确度的一种指标。它同时兼顾了分类模型的准确率和召回率。F1分数可以看作是模型准确率和召回率的一种加权平均,它的最大值是1,最小值是0,其公式为:
ROC曲线的绘制主要我们根据多个阈值来计算出多组FPR和TPR(比如在逻辑回归中我们可以调整阈值如0.25、0.5、0.75等,这样我们就可以绘制出多组值绘制出ROC曲线,如下图所示:
AUC是一个模型评价指标,只能用于二分类模型的评价,对于AUC我们记住,其就是ROC曲线下面的面积,AUC=1.0时表示模型最好,随机猜测的为0.5,其值越高,模型性能越好。
from sklearn import metrics
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
# Matplotlib中设置字体-黑体,解决Matplotlib中文乱码问题
plt.rcParams['axes.unicode_minus'] = False
# 解决Matplotlib坐标轴负号'-'显示为方块的问题
y_true=[1,1,0,1,1]
y_pred=[0,0,0,1,0]
# 混淆矩阵
C = metrics.confusion_matrix(y_true, y_pred)
print("混淆矩阵为:n",C)
# 计算准确率(accuracy)
accuracy = metrics.accuracy_score(y_true,y_pred)
print("准确度为:n",accuracy)
# 计算精确率(precision)
precision = metrics.precision_score(y_true,y_pred)
print("精确率为:n",precision)
# 计算召回率(recall)
recall = metrics.recall_score(y_true,y_pred)
print("召回率为:n",recall)
# 计算F1-score(F1-score)
F1_score = metrics.f1_score(y_true,y_pred)
print("精确率为:n",F1_score)
# 绘制PR曲线
y_pred = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1]
y_true = [0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0]
precision,recall,thresholds = metrics.precision_recall_curve(y_true, y_pred)
plt.plot(precision, recall)
plt.title("PR曲线")
plt.xlabel("recall")
plt.ylabel("precision")
plt.show()
# 绘制ROC曲线
y_pred = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1]
y_true = [0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0]
FPR,TPR,thresholds = metrics.roc_curve(y_true,y_pred)
plt.plot(FPR, TPR)
plt.title("ROC曲线")
plt.xlabel("recall")
plt.ylabel("precision")
plt.plot([0,1],[0,1],'r--')
plt.show()
# 计算AUC值
y_true = [0, 0, 1, 1, 0]
y_scores = [0.1, 0.4, 0.35, 0.8, 0.2]
print('AUC socre:',metrics.roc_auc_score(y_true, y_scores))
# 计算ks值
y_pred = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1]
y_true = [0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0]
FPR,TPR,thresholds = metrics.roc_curve(y_true,y_pred)
# 绘制KS曲线
plt.plot(thresholds, FPR)
plt.plot(thresholds, TPR)
plt.show()
KS=abs(FPR-TPR).max()
print('KS值:',KS)
本文主要总结了分类模型的常用评估方法,需要了解各个名词的含义及对应的计算公式,同时需要了解各个评估方法适合的应用场景,在第三部分介绍了sklearn库中对于评估方法的实现,只需要记住metrics,各个计算函数与其名字对应,在jupyter中可以使用tab键和shift+table键的使用,你会发现更多.......