sklearn.metrics中的評估方法介紹(accuracy_score, recall_score, roc_curve, roc_auc_score, confusion_matrix)


1 accuracy_score:分類准確率分數是指所有分類正確的百分比。分類准確率這一衡量分類器的標准比較容易理解,但是它不能告訴你響應值的潛在分布,並且它也不能告訴你分類器犯錯的類型。常常誤導初學者:呵呵。

sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)

normalize:默認值為True,返回正確分類的比例;如果為False,返回正確分類的樣本數


import numpy as np
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     輸出結果

 

2 recall_score :召回率 =提取出的正確信息條數 /樣本中的信息條數。通俗地說,就是所有准確的條目有多少被檢索出來了

klearn.metrics.recall_score(y_true, y_pred, labels=None, pos_label=1,average='binary', sample_weight=None)

將一個二分類matrics拓展到多分類或多標簽問題時,我們可以將數據看成多個二分類問題的集合,每個類都是一個二分類。接着,我們可以通過跨多個分類計算每個二分類metrics得分的均值,這在一些情況下很有用。你可以使用average參數來指定。

參數average : string, [None, ‘micro’, ‘macro’(default), ‘samples’, ‘weighted’]

將一個二分類matrics拓展到多分類或多標簽問題時,我們可以將數據看成多個二分類問題的集合,每個類都是一個二分類。接着,我們可以通過跨多個分類計算每個二分類metrics得分的均值,這在一些情況下很有用。你可以使用average參數來指定。

macro:計算二分類metrics的均值,為每個類給出相同權重的分值。當小類很重要時會出問題,因為該macro-averging方法是對性能的平均。另一方面,該方法假設所有分類都是一樣重要的,因此macro-averaging方法會對小類的性能影響很大。

weighted:對於不均衡數量的類來說,計算二分類metrics的平均,通過在每個類的score上進行加權實現。

micro:給出了每個樣本類以及它對整個metrics的貢獻的pair(sample-weight),而非對整個類的metrics求和,它會每個類的metrics上的權重及因子進行求和,來計算整個份額。Micro-averaging方法在多標簽(multilabel)問題中設置,包含多分類,此時,大類將被忽略。

samples:應用在multilabel問題上。它不會計算每個類,相反,它會在評估數據中,通過計算真實類和預測類的差異的metrics,來求平均(sample_weight-weighted)

average:average=None將返回一個數組,它包含了每個類的得分

 

3   roc_curve  

ROC曲線指受試者工作特征曲線/接收器操作特性(receiver operating characteristic,ROC)曲線,是反映靈敏性和特效性連續變量的綜合指標,是用構圖法揭示敏感性和特異性的相互關系,它通過將連續變量設定出多個不同的臨界值,從而計算出一系列敏感性和特異性。ROC曲線是根據一系列不同的二分類方式(分界值或決定閾),以真正例率(也就是靈敏度)(True Positive Rate,TPR)為縱坐標,假正例率(1-特效性)(False Positive Rate,FPR)為橫坐標繪制的曲線。

ROC觀察模型正確地識別正例的比例與模型錯誤地把負例數據識別成正例的比例之間的權衡。TPR的增加以FPR的增加為代價。ROC曲線下的面積是模型准確率的度量,AUC(Area under roccurve)。

縱坐標:真正率(True Positive Rate , TPR)或靈敏度(sensitivity)

TPR = TP /(TP + FN)  (正樣本預測結果數 / 正樣本實際數)

橫坐標:假正率(False Positive Rate , FPR)

FPR = FP /(FP + TN) (被預測為正的負樣本結果數 /負樣本實際數)

 

 


>>>import numpy as np
>>>from sklearn import metrics
>>>y = np.array([1, 1, 2, 2])
>>>scores = np.array([0.1, 0.4, 0.35, 0.8])
>>>fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
>>>fpr
array([0. , 0.5, 0.5, 1. ])
>>>tpr
array([0.5, 0.5, 1. , 1. ])
>>>thresholds
array([0.8 , 0.4 , 0.35, 0.1 ])
>>>from sklearn.metrics import auc
>>>metrics.auc(fpr, tpr)
0.75

 

4  Auc :計算AUC值,其中x,y分別為數組形式,根據(xi,yi)在坐標上的點,生成的曲線,然后計算AUC值;

                 sklearn.metrics.auc(x, y, reorder=False)

5  roc_auc_score : 

直接根據真實值(必須是二值)、預測值(可以是0/1,也可以是proba值)計算出auc值,中間過程的roc計算省略。

形式:
sklearn.metrics.roc_auc_score(y_true, y_score, average='macro', sample_weight=None)

average : string, [None, ‘micro’, ‘macro’(default), ‘samples’, ‘weighted’]


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

0.75

 

6  confusion_matrix

   假設有一個用來對貓(cats)、狗(dogs)、兔子(rabbits)進行分類的系統,混淆矩陣就是為了進一步分析性能而對該算法測試結果做出的總結。假設總共有 27 只動物:8只貓, 6條狗, 13只兔子。結果

的混淆

矩陣

 

 

sklearn.metrics.confusion_matrix(y_true, y_pred, labels=None, sample_weight=None)

返回一個混淆矩陣;

labels:混淆矩陣的索引(如上面貓狗兔的示例),如果沒有賦值,則按照y_true, y_pred中出現過的值排序。

>>>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]])

>>>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]])

 


其實翻譯一下就是,給你一群人,比如100個,你用模型挑出來20個認為這20個可能患前列腺癌症,但是,過了幾天,經過專業醫生診斷,確診,你這20個病人里面只有18個是真正預測對了,那你的准確率就是18/20=90%,但是發現你還漏了5個,你的召回率就是18/(18+5)=78%,而你的目的肯定是漏掉的越少越好,所以你要關注召回率,提高78%,越高越好,同時你的准確率也要看,比如你把100個人都預測為前列腺癌症,召回率肯定是23/23=100%,但是你的准確率就是23/100=23%,

 


免責聲明!

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



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