瞎聊機器學習 多分類的精確率和召回率

2021-10-01 16:39:35 字數 1352 閱讀 9101

我們常用的精確率和召回率通常都用於二分類的問題上,那麼在多分類上應該怎樣去使用這些評價指標呢?

既然精確率和召回率的概念以及計算公式都指向二分類問題,那麼我們不妨將多分類問題轉換為二分類問題來做。

先來看一下精確率和召回率的概念:

根據概念我們知道,在轉換為二分類的過程中,我們重點在意的就是怎樣去做正樣本,其實我們可以把每個類別單獨視為「正」,所有的其他型別視為「負」。

在進行例子之前,我們先來了解乙個概念叫做——混淆矩陣。

對於上面這個**,我們就可以把它叫做是乙個混淆矩陣,在混淆矩陣中,每一行之和表示該類別的真實樣本數量,每一列之和表示被**為該類別的樣本數量。

那麼對於這個混淆矩陣我們就可以計算它每乙個類別的精確率和召回率:

分類正確的正樣本=43

分類器判定為正樣本=50

p=43/50

分類正確的正樣本=43

真實正樣本=45

r=43/45

分類正確的正樣本=45

分類器判定為正樣本=50

p=45/50

分類正確的正樣本=45

真實正樣本=51

r=45/51

分類正確的正樣本=49

分類器判定為正樣本=50

p=4950

分類正確的正樣本=49

真實正樣本=54

r=49/54

得到了每個分類對應的p和r值他們的f1 score就可以用下面的式子算得:

用**實現一下該計算方式:

m = [

[14371, 6500, 9, 0, 0, 2, 316],

[5700, 22205, 454, 20, 0, 11, 23],

[0, 445, 3115, 71, 0, 11, 0],

[0, 0, 160, 112, 0, 0, 0],

[0, 888, 39, 2, 0, 0, 0],

[0, 486, 1196, 30, 0, 74, 0],

[1139, 35, 0, 0, 0, 0, 865]

]n = len(m)

for i in range(n):

rowsum, colsum = sum(m[i]), sum(m[r][i] for r in range(n))

try:

print ('precision: %s' % (m[i][i]/float(colsum)), 'recall: %s' % (m[i][i]/float(rowsum)))

except zerodivisionerror:

print ('precision: %s' % 0, 'recall: %s' %0)

有監督學習演算法的評價指標 精確率 準確率和召回率

首先明白四個概念 正樣本是指屬於某一類別的樣本,反樣本是指不屬於某一類別的樣本 比如說在做字母a的影象識別,字母a的樣本就屬於正樣本,不是字母a的樣本就屬於負樣本 由這四個概念,我們可以定義如下所示指標 1 精確率 precision 即 所有正樣本中有多少被正確 p t ptp fp p frac...

機器學習基礎知識 精確率和召回率

判定乙個模型是好是壞,應該從多個角度去評判 一般最常使用的是準確率,即 結果正確的百分比 正確個數 總個數 api為 estimator.score 其他標準 首先介紹混淆矩陣 混淆矩陣引出其他指標 精確率 查得準 結果為正例樣本中,真實結果為正例的比例 tp tp fp 召回率 查得全 真實結果為...

機器學習演算法之SVM的多分類

一 svm可以直接進行多分類嗎 svm本身是對付二分類問題的,所以在處理多分類的時候需要進行必要的改造。同樣是二分類的情況,logistic回歸可以直接拓展為softmax多分類。但是svm如果直接在目標函式上進行修改的話,就是將多個分類面的引數求解合併到乙個最優化問題上,顯然難度太大,目前也沒有任...