2017年11月10日 星期五

機器學習_ML_模型指標_recall_score

機器學習_ML_模型指標_recall_score

原文連結
適用性:Classification metrics

各種的數值計算都跟上面這張圖有關。(取自(維基百科))
TP/(TP+FN)
TP/P
找到真真的的能力
召回率同意於真陽率
用意在於評估模型真的去預測到我們想要的那個部份有多好。
對於類別數據差異量很大的數據集,accuracy想必會非常漂亮,
這時候如果沒有特別的注意,會誤以為模型效能非常好。
這時候透過recall(召回)與precision(精確)來結合判斷產生f1,會是一個不錯的評估。

IMPORT

from sklearn.metrics import recall_score

範例

from sklearn.metrics import recall_score
from sklearn.metrics import confusion_matrix
y_true = [1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0 ,1]
y_pred = [0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1 ,1]
confusion_matrix(y_true=y_true, y_pred=y_pred)
recall_score(y_true, y_pred)
結果
5/(5+3)
TN FP
FN TP
array([[3, 2],
       [3, 5]], dtype=int64)
0.625
多標籤的話,就需要使用average參數
from sklearn.metrics import recall_score
y_true = [1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0 ,1]
y_pred = [0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1 ,1]
recall_score(y_true, y_pred, average='binary')  #  default 用於標籤數為2
recall_score(y_true, y_pred, average='macro')
recall_score(y_true, y_pred, average='micro')
recall_score(y_true, y_pred, average='weighted')
recall_score(y_true, y_pred, average='samples')
recall_score(y_true, y_pred, average=None)

結果
binary:0.625
macro:0.61250000000000004
micro:0.61538461538461542 
weighted:0.61538461538461542
samples:
None:[0.6, 0.625]  #  為None的時候會回傳所有LABEL的機率
micro average,微觀平均來說是取所有lable的加總計算,怎麼說,就是0與1的機率加總。
以0為主的話是3/(2+3)
以1為主的話是5/(5+3)
micro averave = (3+5)/(5+8) = 0.6153846xxxx
macro average,宏觀平均來說,就是label平均,怎麼說,當我們的average為None的時候已經幫我們算出來了,(0.6+0.625)/2,即為macro average
所以微觀來說,我們得到的數字意義在於總結對真假的真正預測性為何。
而宏觀來說即是平均性。

沒有留言:

張貼留言