第7章 模型评估

7.1 分类模型评估

1、二分类

第7章 模型评估

  混淆矩阵中对角线的元素代表正确分类的数量;

  非对角线元素代表错误分类的数量。

所以最为理想的模型(拿测试集来看),应该是一个对角阵。若无法得到对角阵,对角线上的数字之和如果占统治地位也是可以的。

第7章 模型评估第7章 模型评估

片面的追求查准率可能会降低召回率

 

 2、多分类

第7章 模型评估

第7章 模型评估

 recall参数中的average()的取值:

  binary表示二分类

  micro表示多元混淆矩阵中的第一种方法

  macro表示的是一种不加权的平均

  weighted表示加权的平均

3、 反应分类效果的图及ROC曲线阈值的选取

(1)ROC、AUC

第7章 模型评估第7章 模型评估

 

 选取标准:让TPR尽可能的大,FPR尽可能的小,所以选取其拐点

AUC表示的是ROC曲线下的面积,可以直接反应ROC曲线像左上方靠近的程度。

 

如何做ROC曲线?

 第7章 模型评估

https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_curve.html#sklearn.metrics.roc_curve

xy_lst = [(X_train, Y_train), (X_validation, Y_validation), (X_test, Y_test)]

import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve,auc,roc_auc_score
f = plt.figure()

for i in range(len(xy_lst)):
    X_part = xy_lst[i][0]
    Y_part = xy_lst[i][1]
    Y_pred = mdl.predict(X_part)
    # Y_pred = mdl.predict_classes(X_part)#用predict()时输出的是连续值,使用predict_classes()时输出的是分类标注
    # print(i)
    print(Y_pred)
    Y_pred = np.array(Y_pred[:,1]).reshape((1,-1))[0]
    # from sklearn.metrics import accuracy_score, recall_score, f1_score
    # print(i, '---:', 'Nural Network', '准确率:', accuracy_score(Y_part, Y_pred),
    #       '召回率:', recall_score(Y_part, Y_pred),
    #       'F1分数:', f1_score(Y_part, Y_pred))
    f.add_subplot(1,3,i+1)
    fpr,tpr,thresholds = roc_curve(Y_part,Y_pred)
    plt.plot(fpr,tpr)
    plt.shaow()
    #这两个函数功能一样
    print('Nural Network','AUC',auc(fpr,tpr))
    print('Nural Network','AUC Score',roc_auc_score(Y_part,Y_pred))
    '''
    Nural Network AUC 0.9610879734019506
    Nural Network AUC Score 0.9610879734019506
    Nural Network AUC 0.961721658936862
    Nural Network AUC Score 0.961721658936862
    Nural Network AUC 0.9637020039792525
    Nural Network AUC Score 0.9637020039792525
    '''

(2)增益图与KS图

第7章 模型评估

其中KS图中关注的是,TPR曲线与FPR曲线的差距,这个差距反映了对正类样本的区分度。

 

 

 

 

 

 

上一篇:R语言中回归和分类模型选择的性能指标


下一篇:[题解] AGC038E