记录F1分数和召回率
內容
參考博文:
F1分數以及micro、macro區別
對于上面說的矩陣是不是挺懵的,它的真名叫混下矩陣,看下面
混淆矩陣
所有正確的預測結果都在對角線上,所以從混淆矩陣中可以很方便直觀的看出哪里有錯誤,因為他們呈現在對角線外面。
它允許我們做出更多的分析,而不僅僅是局限在正確率。準確率對于分類器的性能分析來說,并不是一個很好地衡量指標,因為如果數據集不平衡(每一類的數據樣本數量相差太大),很可能會出現誤導性的結果。例如,如果在一個數據集中有95只貓,但是只有5條狗,那么某些分類器很可能偏向于將所有的樣本預測成貓。整體準確率為95%,但是實際上該分類器對貓的識別率是100%,而對狗的識別率是0%。
怎么求F1分數呢? 代碼實現?
在Sklearn庫中有現成的代碼:
輸入: 必須是1-array的預測和GT
輸出: 得到相應的結果
sklearn.metrics.f1_score 使用方法
sklearn.metrics.f1_score中micro、macro、samples理解
適用什么場景?
也就是后者會注重所有分類效果都得好! 平均效果!
而micro則是會帶有權重的思想
代碼
我的實現:
def evaluation_metric(pred, label):'''pred: Prediction results with whatever sizelabel: Label with whatever sizereturn: [Evaluation Metric]'''# average=None, get the P, R, and F1 value of a single classpred = numpy.asarray(pred)label = numpy.asarray(label)Precision = precision_score(y_true=label, y_pred=pred, average="macro")Recall = recall_score(y_true=label, y_pred=pred, average="macro")F1_score = f1_score(y_true=label, y_pred=pred, average="macro")F1_score_micro = f1_score(y_true=label, y_pred=pred, average="micro")return Precision, F1_score, Recall, F1_score_micro其中average參數有下面的幾個選項
y_true:1d數組,或標簽指示符數組/稀疏矩陣基本事實(正確)目標值。y_pred:1d數組,或標簽指示符數組/稀疏矩陣分類器返回的估計目標。labels:list,optional包括when的標簽集,以及if的順序。可以排除數據中存在的標簽,例如,以忽略多數否定類別的方式計算多類平均值,而數據中不存在的標簽將導致宏平均值中的0成分。對于多標簽目標,標簽是列索引。默認情況下,和 中的所有標簽均按排序順序使用。average != 'binary'average is Noney_truey_predpos_label:str或int,默認值為1要報告是否average='binary'以及數據是否為二進制的類。如果數據是多類或多標簽的,則將被忽略;設置,labels=[pos_label]并且只會報告該標簽的得分。average != 'binary'average:string, [None, ‘binary’ (default), ‘micro’, ‘macro’, ‘samples’, ‘weighted’]對于多類/多標簽目標,此參數是必需的。如果為None,則返回每個班級的分數。否則,這將確定對數據執行的平均類型:'binary':僅報告由指定的類的結果pos_label。僅在目標(y_{true,pred})為二進制時適用。'micro':通過計算正確,錯誤和否定的總數來全局計算指標。'macro':計算每個標簽的指標,并找到其未加權平均值。這沒有考慮數據數量的不平衡。而是平等地對待每一類'weighted':計算每個標簽的指標,并找到其平均權重(受支持)(每個標簽的真實實例數)。這改變了“宏觀”以解決標簽的不平衡。這可能導致F得分不在精確度和召回率之間。'samples':計算每個實例的指標,并找到其平均值(僅對不同于的多標簽分類有意義 accuracy_score)。sample_weight:array-like of shape (n_samples,), default=None樣品重量。zero_division:“warn”, 0 or 1, default=”warn”設置除法為零(即所有預測和標簽均為負)時返回的值。如果設置為“ warn”,則該值為0,但也會發出警告。返回值:
f1_score:float or array of float, shape = [n_unique_labels]二進制分類中的陽性類別的F1分數,或者對于多類別任務,每個類別的F1分數的加權平均值。例子:
Examples-------->>> from sklearn.metrics import precision_score>>> y_true = [0, 1, 2, 0, 1, 2]>>> y_pred = [0, 2, 1, 0, 0, 1]>>> precision_score(y_true, y_pred, average='macro')0.22...>>> precision_score(y_true, y_pred, average='micro')0.33...>>> precision_score(y_true, y_pred, average='weighted')0.22...>>> precision_score(y_true, y_pred, average=None)array([0.66..., 0. , 0. ])>>> y_pred = [0, 0, 0, 0, 0, 0]>>> precision_score(y_true, y_pred, average=None)array([0.33..., 0. , 0. ])>>> precision_score(y_true, y_pred, average=None, zero_division=1)array([0.33..., 1. , 1. ])"""其中micro是求的全部的準確率! 沒有考慮數據的平衡性!
average = “micro” = average=NULL
precision_score
recall_score
f1_score
總結
以上是生活随笔為你收集整理的记录F1分数和召回率的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java trim 不好使_Java S
- 下一篇: 域用户频繁被锁定怎么解决_Oracle1