1. 程式人生 > >轉:模型評估:評價指標-附sklearn API

轉:模型評估:評價指標-附sklearn API

模型評估

有三種不同的方法來評估一個模型的預測質量:

  • estimator的score方法:sklearn中的estimator都具有一個score方法,它提供了一個預設的評估法則來解決問題。
  • Scoring引數:使用cross-validation的模型評估工具,依賴於內部的scoring策略。見下。
  • 通過測試集上評估預測誤差:sklearn Metric函式用來評估預測誤差。

評價指標(Evaluation metrics)

評價指標針對不同的機器學習任務有不同的指標,同一任務也有不同側重點的評價指標。

主要有分類(classification)、迴歸(regression)、排序(ranking)、聚類(clustering)、熱門主題模型(topic modeling)、推薦(recommendation)等。

1 分類評價指標

分類有二分類和多分類,二分類主要“是”和“不是”的問題,可以擴充套件到多分類,如邏輯迴歸->SoftMax。

1.1 準確率

分類中,使用模型對測試集進行分類,分類正確的樣本個數佔總樣本的比例: 

accuracy=ncorrectNtotal
問題:
  1. 不同類別樣本無區分:各個類平等對待,而實際中會針對不同類有所區分,例如醫療上側重正例的召回(假陰性:不要漏診疾病),垃圾郵件側重垃圾郵件的精度(假陽性:正常郵件不被誤分)。
  2. 資料不平衡:對於資料分佈不平衡情況下,個別類別樣本過多,其他類別樣本少,大類別主導了準確率的計算。(平均準確率解決此問題)

SKlearn API

from sklearn.metrics import accuracy_score
# y_pred是預測標籤
y_pred, y_true=[1,2,3,4], [2,2,3,4]
accuracy_score(y_true=y_true, y_pred=y_pred)
  • 1
  • 2
  • 3
  • 4

1.2 平均準確率

針對不平衡資料,對n個類,計算每個類別i的準確率,然後求平均: 

average_accuracy=accuracyin
缺點:某些類別樣本數很少,測試集中該類別的準確率方差會很大(統計變數偏離程度:高)。
from sklearn.metrics import
average_precision_score # y_pred是預測標籤 y_pred, y_true =[1,0,1,0], [0,0,1,0] average_precision_score(y_true=y_true, y_score=y_pred)
  • 1
  • 2
  • 3
  • 4

1.3 對數損失(Log-loss)

針對分類輸出不是類別,而是類別的概率,使用對數損失函式進行評價。這也是邏輯迴歸的分類函式,下面是二分類的損失函式。 

Log_loss=1Ni=1Nyilogpi+(1yi)log(1pi)
yi表示第i個樣本類別0或1。pi表示其輸入類別1的概率。其實就是真實值域預測值得交叉熵,包含了真實分佈的熵加上假設與真實分佈不同的分佈的不確定性,最小化交叉熵,便是最大化分類器的準確率。
from sklearn.metrics import log_loss
y_true, y_pred = [0,0,1,1], [[0.9,0.1],[0.8,0.2],[0.3,0.7],[0.01,0.99]]
print(log_loss(y_true,y_pred))
  • 1
  • 2
  • 3

1.4 基於混淆矩陣的評估度量

1.4.1 混淆矩陣

混淆矩陣通過計算各種分類度量,指導模型的評估。

Predicted: 0 Predicted: 1
Actual: 0 TN
Actual: 1 FN
  • 真陽性(True Positive,TP):指被分類器正確分類的正例資料
  • 真陰性(True Negative,TN):指被分類器正確分類的負例資料
  • 假陽性(False Positive,FP):被錯誤地標記為正例資料的負例資料
  • 假陰性(False Negative,FN):被錯誤地標記為負例資料的正例資料
from sklearn.metrics import confusion_matrix
# y_pred是預測標籤
y_pred, y_true =[1,0,1,0], [0,0,1,0]
confusion_matrix(y_true=y_true, y_pred=y_pred)
  • 1
  • 2
  • 3
  • 4

1.4.2 精確率(Precision)

所有分正確的正樣本/所有預測為正類的樣本數。 

Precision=TP/(TP+FP)

1.4.3 召回率(Recall)

所有分正確的正樣本/所有的正樣本數: 

Recall=T