目录
1、描述评价指标
- 符号解释
TP、FN、TN、FP的各自含义(其中T代表True,F代表False,P代表Positives,N代表Negatives) - 假设结果
2、分类评价指标
- 正确率(Accuracy)
正确率又称准确率,预测为真正例(TP)与真负例(TN)占总样例的比例
计算公式:
上表可知:TP+TN=70,S=100,则正确率A=70/100=0.7
结论:正确率越高模型训练越好 - 精确率(Precision)
精确率又称查准率,预测为真正例(TP)占真正例与伪真例(TP+FP)的百分比。
计算公式: - 召回率(Recall)
召回率又称为查全率,预测为真正例(TP)占真正例与伪负例(TP+FN)的百分比
计算公式: - F1 Score
精确率(Precision)和召回率(Recall)的调和平均数,最大为1,最小为0 - P-R曲线(Precision-Recall Curve)
P-R曲线又称为精确率(Precision)和召回率(Recall)变化的曲线
如果取多个不同的阈值,就可以得到多组(R,P)。将这些坐标点(R,P)绘制在坐标上,然后将各坐标点用曲线连起来,即可得到PR曲线。 - ROC曲线
真正率(TPR): 识别对了的正例(TP)占实际总正例的比例,实际计算值跟召回率相同。
计算公式:TPR =TP/(TP+ FN)
假正率(FPR): 识别错了的正例(FP)占实际总负例的比例。也可以说,误判的负例(实际是负例,没有判对)占实际总负例的比例。
计算式如下:FPR =FP/(FP+ TN)
以FPR为横轴,TPR为纵轴,绘制得到的曲线就是ROC曲线,一般来说,ROC曲线越靠近左上方越好
结论:ROC曲线越光滑,过拟合程度越小。绿线分类模型的整体性能要优于红线分类模型。 - AUC面积
被定义为 ROC曲线 下与坐标轴围成的面积,显然这个面积的数值不会大于1 - KS(Kolmogorov-Smirnov)
KS统计量计算公式:KS = abs(FPR - TPR).max()
3、回归评价指标
- 平均绝对误差(MAE)
- 均方误差(MSE)
- 均方根误差
- R2拟合优度
说明:R²最大值为1。R²的值越接近1,说明回归直线对观测值的拟合程度越好;反之,R²的值越小,说明回归直线对观测值的拟合程度越差。
4、聚类评价指标
误差平方和越小,聚类越准确
5、代码样例
## 混淆矩阵
from sklearn.metrics import confusion_matrix
y_pred = [0, 1, 0, 1]
y_true = [0, 1, 1, 0]
print('混淆矩阵:', confusion_matrix(y_true, y_pred))
# 准确率(Accuracy)
from sklearn.metrics import accuracy_score
y_pred = [0, 1, 0, 1]
y_true = [0, 1, 1, 0]
print('ACC:', accuracy_score(y_true, y_pred))
# 精确率(Precision)
# 召回率(Recall)
# F1-score
from sklearn import metrics
y_pred = [0, 1, 0, 1]
y_true = [0, 1, 1, 0]
print('Precision', metrics.precision_score(y_true, y_pred))
print('Recall', metrics.recall_score(y_true, y_pred))
print('F1-score:', metrics.f1_score(y_true, y_pred))
# P-R曲线
import matplotlib.pyplot as plt
from sklearn.metrics import precision_recall_curve
y_pred = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1]
y_true = [0, 1, 1, 0, 1, 0, 1, 1, 0, 1]
precision, recall, thresholds = precision_recall_curve(y_true, y_pred)
plt.plot(precision, recall)
# ROC曲线
from sklearn.metrics import roc_curve
y_pred = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1]
y_true = [0, 1, 1, 0, 1, 0, 1, 1, 0, 1]
FPR, TPR, thresholds = roc_curve(y_true, y_pred)
plt.title('ROC')
plt.plot(FPR, TPR, 'b')
plt.plot([0, 1], [0, 1], 'r--')
plt.ylabel('TPR')
plt.xlabel('FPR')
# AUC
import numpy as np
from sklearn.metrics import roc_auc_score
y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])
print('AUC socre:', roc_auc_score(y_true, y_scores))
# KS值 在实际操作时往往使用ROC曲线配合求出KS值
from sklearn.metrics import roc_curve
y_pred = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1]
y_true = [0, 1, 1, 0, 1, 0, 1, 1, 1, 1]
FPR, TPR, thresholds = roc_curve(y_true, y_pred)
KS = abs(FPR - TPR).max()
print('KS值:', KS)