机器学习 | 评价指标

1 背景

做完一个模型之后,无论是回归还是分类,均需要去评判这个模型的优劣!如何去判断呢?在统计上有很多指标去进行衡量,而且不同的场景下应用的指标也会有一些差异!下面就和小编的视角来一探究竟吧!

2 评价指标有哪些?

分类问题评价指标:

  • 准确率(Accuracy)

斜对角线元素之和除以总数。

  • 精确率(Precision)

竖着除!即预测为某一类中实际为该类的概率!以用户流失与否的场景为例,精确率应用的场景是尽可能不打扰用户,希望精确率尽可能高即预测流失的用户都尽可能预测对了!这样对流失用户做一些行为干扰都是ok的!也不会打扰本来就不会流失的用户!

  • 召回率(Recall)

横着除!即实际为某一类的用户中被预测为该类的概率值!以警方抓逃犯的场景为例,我们总是希望尽可能多的实际逃犯被预测对,然后被抓住!也即实际为罪犯的被预测也为罪犯!即为召回率!能捞回来的人!

  • F1

F1值是精确率和召回率的调和值,更接近于两个数较小的那个,所以精确率和召回率接近时,F1值最大。很多推荐系统的评测指标就是用F1值的。

2/F1 = 1/P + 1/R

  • AUC

AUC(Area Under Curve)被定义为ROC曲线下的面积(ROC的积分),通常大于0.5小于1。随机挑选一个正样本以及一个负样本,分类器判定正样本的值高于负样本的概率就是 AUC 值。AUC值(面积)越大的分类器,性能越好

  • ROC曲线
  • K-S(一般用于信贷场景)
  • PR 曲线
  • 。。。。。。

上述几种:AUC ROC K-S PR曲线 后续再单独开博客继续补充!因为知识点较多~

回归问题评价指标:

  • 残差平方和 mse

3 Python如何实现?

3.1 classification_report 如何解读?

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
lr = LogisticRegression()
lr.fit(X_train, y_train)
pre = lr.predict(X_test)
print(classification_report(y_test, pre))

结果如下:
机器学习 | 评价指标

3.2 混淆矩阵

混淆矩阵如下:

print(metrics.confusion_matrix(y_test, pre))

机器学习 | 评价指标
结果解读:一开始看到上面这个report返回结果有点懵逼,不知道该咋看,后来查了相关资料才弄懂,故记录一下。

  • 精确率,召回率,F1都是会分类计算,即不同类别都会有一个结果。所以report上部分就好解释了。
  • 在实际为横,预测为纵轴时,符合下述规律:精确率→竖着除;召回率→横着除;
  • 比如 0类精确率0.82 = 1424/(1424+320) ;1类召回率0.01=4/(4+320) ;0类F1 0.9 = 20.821 / (0.82+1)

关键来了,下面三行代表啥呢?

  • 第一行好理解,代表精确率,也即Accuracy, 0.81 = (1424+4)/ (1430+324)
  • 第二行代表最上面代表的几个指标的均值,无权重,直接平均。
  • 第三行代表最上面代表的几个指标的加权平均,权重等于各自类别的占比,比如0类权重就是1430/(1430+324)

3.3 计算AUC的两种方法

  • 方法1 自己定义函数
def CalAuc(model, X_test, y_test):
    # 看测试集AUC为多少
    from sklearn import metrics
    pred = model.predict_proba(X_test)[:,1]
    fpr, tpr, thresholds = metrics.roc_curve(y_test, pred)
    auc = metrics.auc(fpr, tpr)
    print('模型在测试集上的AUC值为: %.4f' %(auc))

机器学习 | 评价指标

  • 方法2 : sklearn自带

from sklearn import metrics print(metrics.roc_auc_score(pre, y_test))
机器学习 | 评价指标
疑问:两种方法计算出来的AUC结果不一样?这是为什么呢?有待进一步的思考!

4 参考