基於sklearn的metrics庫的常用有監督模型評估指標學習


一、分類評估指標

  1. 准確率(最直白的指標)
    缺點:受采樣影響極大,比如100個樣本中有99個為正例,所以即使模型很無腦地預測全部樣本為正例,依然有99%的正確率
    適用范圍:二分類(准確率);二分類、多分類(平均准確率)
    from sklearn.metrics import accuracy_score
    y_pred = [0, 2, 1, 3]
    y_true = [0, 1, 2, 3]
    accuracy_score(y_true, y_pred)
    0.5
    accuracy_score(y_true, y_pred, normalize=False)
    2
    from sklearn.metrics import balanced_accuracy_score
    y_true = [0, 1, 0, 0, 1, 0]
    y_pred = [0, 1, 0, 0, 0, 1]
    balanced_accuracy_score(y_true, y_pred)
    0.625

     

  2. 混淆矩陣
    適用范圍:所有分類模型,包括二分類、多分類
    介紹:實質是一張交叉表,縱軸為真實值,橫軸為預測值
    API介紹:

    Example1:多分類任務,類別已經轉換為整數類型,分別為0,1,2三個類別
    from sklearn.metrics import confusion_matrix
    y_true = [2, 0, 2, 2, 0, 1]
    y_pred = [0, 0, 2, 2, 0, 2]
    confusion_matrix(y_true, y_pred)
    array([[2, 0, 0],
           [0, 0, 1],
           [1, 0, 2]])

    可以推導出混淆矩陣如下所示


    Example2:多分類任務,類別沒有轉換為整型數值,而是作為字符串直接傳入

    from sklearn.metrics import confusion_matrix
    y_true
    = ["cat", "ant", "cat", "cat", "ant", "bird"] y_pred = ["ant", "ant", "cat", "cat", "ant", "cat"] confusion_matrix(y_true, y_pred, labels=["ant", "bird", "cat"]) array([[2, 0, 0], [0, 0, 1], [1, 0, 2]])

    證明該API可以直接傳入類別型字符串,混淆矩陣如下所示


    Example3:二分類任務

    from sklearn.metrics import confusion_matrix
    
    confusion_matrix([0, 1, 0, 1], [1, 1, 1, 0])
    array([[0, 2],
           [1, 1]], dtype=int64)
    
    tn, fp, fn, tp = confusion_matrix([0, 1, 0, 1], [1, 1, 1, 0]).ravel()
    (tn, fp, fn, tp)
    (0, 2, 1, 1)


    此處“1”為正例,“0”為反例


  3.  Roc曲線及auc值
    適用范圍:二分類
    介紹:roc曲線為二維平面的一條曲線,橫坐標為fpr,縱坐標為tpr,auc(area under the curve)顧名思義,即為曲線與橫軸圍成的曲線下的面積
    API:
    sklearn中有三個關於roc計算相關的接口,分別為

    1 metrics.roc_auc_score()
    2 metrics.roc_curve()
    3 metrics.auc()

    1)直接計算auc的值

    from sklearn import metrics
    import numpy as np
    y_true
    = np.array([0, 0, 1, 1]) y_scores = np.array([0.1, 0.4, 0.35, 0.8]) metrics.roc_auc_score(y_true, y_scores) 0.75

    2)先計算fpr,tpr以及threshold(閾值),再通過fpr和tpr求auc

    from sklearn import metrics
    import numpy as np
    
    y_true = np.array([0, 0, 1, 1])
    y_scores = np.array([0.1, 0.4, 0.35, 0.8])
    fpr, tpr, threshold = metrics.roc_curve(y_true, y_scores)
    (fpr, tpr, threshold)
    (array([0. , 0.5, 0.5, 1. ]),
     array([0.5, 0.5, 1. , 1. ]),
     array([0.8 , 0.4 , 0.35, 0.1 ]))
    metrics.auc(fpr, tpr)
    0.75

    注意接口接收的參數為類別的真實標簽以及模型輸出的概率(得分)值,而非模型預測的標簽(標簽需要通過概率+閾值來得到)

  4. PR曲線及F1-score
    PR曲線為二維平面曲線,橫軸為Recall(召回率),縱軸為Precision(精確率),F1-score為recall和precision的調和平均數
    適用范圍:二分類
    API:
    sklearn中有五個常用的與PR相關的接口
    1 metrics.precision_recall_curve()
    2 metrics.precision_recall_fscore_support()
    3 metrics.precision_score()
    4 metrics.recall_score()
    5 metrics.fbeta_score()

    1)計算pr曲線
    接口接收兩個參數,其一為樣本的真實值,另一個為樣本的預測概率(得分),示例如下:

    import numpy as np
    from sklearn.metrics import precision_recall_curve
    
    y_true = np.array([0, 0, 1, 1])
    y_scores = np.array([0.1, 0.4, 0.35, 0.8])
    precision, recall, thresholds = precision_recall_curve(y_true, y_scores)
    precision, recall, thresholds
    (array([0.66666667, 0.5       , 1.        , 1.        ]),
     array([1. , 0.5, 0.5, 0. ]),
     array([0.35, 0.4 , 0.8 ]))

    2)計算當預測值已經通過閾值轉化為類別后的具體某一閾值下的PR及F-score值

    from sklearn import metrics
    
    #該函數可直接求出precision、recall和f-score
    precision,recall,fbeta_score,support = metrics.precision_recall_fscore_support()
    #以下三個函數可分別求出precision、recall和f-score 
    precision = metrics.precision_score() 
    recall = metrics.recall_score() 
    f-score = metrics.fbeta_score()
  5. ks曲線及ks值
    適用范圍:二分類
    ks曲線的橫坐標為閾值的分位數,縱坐標分別為tpr,fpr,ks值(tpr-fpr),所以可用2中與ROC相關的接口計算得出

  6. kappa系數、漢明損失、鉸鏈損失、傑卡德相關系數
    適用范圍:多分類
    1 metrics.cohen_kappa_score()
    2 metrics.hamming_loss()
    3 metrics.hinge_loss()
    4 metrics.jaccard_score()
    5 metrics.log_loss()

     

  7. 馬修斯相關系數(MCC)
    適用范圍:二分類
    from sklearn.metrics import matthews_corrcoef
    
    y_true = [+1, +1, +1, -1]
    y_pred = [+1, -1, +1, +1]
    matthews_corrcoef(y_true, y_pred)
    -0.33333333

     

二、回歸評估指標

  1. R2
  2. MSE
  3. MAE
    睡了。。。明天再修改


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM