機器學(xué)習(xí)系列(二十九)——精準(zhǔn)率precision和召回率recall

本篇主要內(nèi)容:混淆矩陣(Confusion Matrix) 炫狱、精準(zhǔn)率(Precision)闻书、召回率(Recall )

準(zhǔn)確率的陷阱

在之前我們都是用分類準(zhǔn)確度來評價分類算法的好壞,但其實用準(zhǔn)確率來評價分類算法的好壞是存在很大問題的爽茴。
準(zhǔn)確率的問題
現(xiàn)在有一個癌癥預(yù)測系統(tǒng)卒稳,輸入你的體檢信息突琳,來判斷是否有癌癥,這個系統(tǒng)能達(dá)到99.9%的預(yù)測準(zhǔn)確率澡匪,那這是一個好系統(tǒng)嗎熔任?不少人會覺得99.9%的準(zhǔn)確率當(dāng)然是一個好系統(tǒng),實際真的是這樣嗎唁情?想象一種情況疑苔,如果這種癌癥本身的發(fā)病率只有0.01%,那這就意味著甸鸟,根本不需要任何機器學(xué)習(xí)算法夯巷,無論是什么樣的體檢信息,都預(yù)測他是健康的不會患癌癥哀墓,這樣肯定有99.99%的準(zhǔn)確率趁餐,而現(xiàn)在的系統(tǒng)只有99.9%的準(zhǔn)確率還不如沒有機器學(xué)習(xí)的準(zhǔn)確率高,說明這個系統(tǒng)是失敗的篮绰。
這就是用分類準(zhǔn)確度來衡量一個分類系統(tǒng)性能好壞的問題所在后雷。這樣的問題發(fā)生在數(shù)據(jù)是極度偏斜(Skewed Data)的情況下,即不同類別的數(shù)量差異巨大,這樣的情況下臀突,只使用分類準(zhǔn)確度是遠(yuǎn)遠(yuǎn)不夠的勉抓。于是有了混淆矩陣,在混淆矩陣上我們可以得到比分類準(zhǔn)確度還要好的分類性能評價指標(biāo)候学。


混淆矩陣Confusion Matrix

什么是混淆矩陣呢藕筋?以二分類問題為例,對于二分類問題梳码,混淆矩陣是一個2×2的矩陣:

真實\預(yù)測 0 1
0 預(yù)測negative正確
TN
預(yù)測positive錯誤
FP
1 預(yù)測negative錯誤
FN
預(yù)測positive正確
TP

混淆矩陣中行代表真實值隐圾,列代表預(yù)測值,0-Negative掰茶,1-Positive暇藏,1往往是我們比較關(guān)注的類別。
比如現(xiàn)在有10000個人濒蒋,預(yù)測患癌癥的情況盐碱,1代表患癌癥,0代表未患癌癥沪伙,相應(yīng)的混淆矩陣:

真實\預(yù)測 0 1
0 9978 12
1 2 8

該矩陣表示有9978個人實際沒有患癌癥預(yù)測結(jié)果也是沒有患癌癥瓮顽,有12個人實際沒有患癌癥但預(yù)測結(jié)果是患癌癥;有2個人患了癌癥預(yù)測結(jié)果是沒患围橡,有8個人患了癌癥預(yù)測結(jié)果也是患癌癥趣倾。

精準(zhǔn)率與召回率

基于混淆矩陣,我們有兩個新的衡量分類算法性能的指標(biāo)——精準(zhǔn)率和召回率某饰。精準(zhǔn)率precision的計算公式為:
precision=\frac{TP}{TP+FP}

精準(zhǔn)率是我們預(yù)測我們關(guān)注的事件儒恋,它相應(yīng)的有多準(zhǔn)確。對于上面癌癥預(yù)測的例子黔漂,相應(yīng)的精準(zhǔn)率計算為:\frac{8}{8+12}=40\%它表示預(yù)測結(jié)果為1中預(yù)測正確(實際也為1)的概率诫尽,在有偏數(shù)據(jù)中,1通常是我們比較關(guān)注的對象炬守,因此叫精準(zhǔn)率牧嫉,比如癌癥預(yù)測中,癌癥是我們真正關(guān)注的對象减途。本例精準(zhǔn)率的含義是我們每做出100次患病的預(yù)測酣藻,有40次是準(zhǔn)確的。
和精準(zhǔn)率相對應(yīng)的召回率recall的計算公式為:
recall=\frac{TP}{FN+TP}

召回率是我們關(guān)注的事件真實的發(fā)生了鳍置,在真實發(fā)生的我們關(guān)注的事件中辽剧,我們成功預(yù)測了多少
對于癌癥預(yù)測的例子税产,相應(yīng)的召回率計算為:\frac{8}{8+2}=80\%含義是每有100個癌癥患者怕轿,通過現(xiàn)在的機器學(xué)習(xí)算法偷崩,我們能成功的找出其中的80個患者。
為什么說精準(zhǔn)率和召回率是比準(zhǔn)確率要優(yōu)秀的評價指標(biāo)呢撞羽,仍然考慮最初的例子阐斜,有10000個人,癌癥病發(fā)率為0.01%诀紊,現(xiàn)在有一個算法谒出,不管怎樣都預(yù)測他是健康的,這樣的準(zhǔn)確率是99.99%邻奠,但是盡管準(zhǔn)確率高笤喳,實際是一點幫助都沒有的。相應(yīng)的精準(zhǔn)率精準(zhǔn)率和召回率呢惕澎?首先給出此時的混淆矩陣:

真實\預(yù)測 0 1
0 9999 0
1 1 0

計算得到精準(zhǔn)率為\frac{0}{0+0}是沒有意義的莉测,對于沒有意義的精準(zhǔn)率直接定義為它可能的最小值也就是0颜骤。召回率\frac{0}{10+0}=0唧喉,可以看到對于我們都知道的沒有意義的算法,準(zhǔn)確率能達(dá)到99%以上忍抽,而精準(zhǔn)率和召回率卻都是最低值八孝,這就是精準(zhǔn)率和召回率的意義。

實現(xiàn)精準(zhǔn)率與召回率

在手寫數(shù)字?jǐn)?shù)據(jù)集上進(jìn)行測試鸠项,不過由于手寫數(shù)字本身是10個類別且每個類別數(shù)量是差不多的干跛,這里我們?nèi)斯⑵渥優(yōu)閮蓚€類別(標(biāo)簽等于9為類1,標(biāo)簽不等于9的為類0)以達(dá)到skewed data的效果:

import numpy as np
from sklearn import datasets
digits = datasets.load_digits()
X = digits.data
y = digits.target.copy()

'''人工加入偏斜'''
y[digits.target==9]=1
y[digits.target!=9]=0
'''10分類變?yōu)?分類祟绊,用Logistic分類'''
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=666)
from sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression()
log_reg.fit(X_train,y_train)
log_reg.score(X_test,y_test)
Logistic回歸準(zhǔn)確率

在Logistic回歸下準(zhǔn)確率為97.5%楼入,不過這并不能說明什么,因為不等于9的本身就在全部數(shù)據(jù)中占有90%的比例牧抽,就算不用機器學(xué)習(xí)算法全部預(yù)測為類1嘉熊,準(zhǔn)確率也有90%,于是考慮精準(zhǔn)率和召回率扬舒,定義混淆矩陣計算函數(shù):

'''計算混淆矩陣各項'''
def TN(y_true, y_predict):
    assert len(y_true)==len(y_predict)
    return np.sum((y_true==0)&(y_predict==0))
def FP(y_true,y_predict):
    assert len(y_true)==len(y_predict)
    return np.sum((y_true==0)&(y_predict==1))
def FN(y_true,y_predict):
    assert len(y_true)==len(y_predict)
    return np.sum((y_true==1)&(y_predict==0))
def TP(y_true,y_predict):
    assert len(y_true)==len(y_predict)
    return np.sum((y_true==1)&(y_predict==1))
'''混淆矩陣'''
def confusion_matrix(y_true,y_predict):
    return np.array([
        [TN(y_true,y_predict),FP(y_true,y_predict)],
        [FN(y_true,y_predict),TP(y_true,y_predict)]
    ])
'''Logistic分類的混淆矩陣'''
confusion_matrix(y_test,y_log_predict)

相應(yīng)的混淆矩陣:

混淆矩陣

有了混淆矩陣阐肤,再定義精準(zhǔn)率和召回率計算函數(shù):

'''精準(zhǔn)率'''
def precision_score(y_true,y_predict):
    tp = TP(y_true,y_predict)
    fp = FP(y_true,y_predict)
    '''分母為0'''
    try:
        return tp/(tp+fp)
    except:
        return 0.0
'''召回率'''
def recall_score(y_true,y_predict):
    tp = TP(y_true,y_predict)
    fn = FN(y_true,y_predict)
    '''分母為0'''
    try:
        return tp/(tp+fn)
    except:
        return 0.0

調(diào)用計算函數(shù),得到精準(zhǔn)率和召回率為:

precision_and_recall

精準(zhǔn)率和召回率看起來還是不錯的讲坎,在實際中它們有時精準(zhǔn)率小有時召回率小孕惜,具體如何平衡它們,以及它們?nèi)绾卧u價模型將在下篇介紹晨炕。
同樣衫画,對于這些操作,我們寫的是模擬sklearn的邏輯的瓮栗,sklearn中也封裝好了相應(yīng)的模塊碧磅,接下來使用sklearn中的混淆矩陣和準(zhǔn)確率召回率計算:

混淆矩陣碘箍、準(zhǔn)確率和召回率

得到了同樣的結(jié)果。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鲸郊,一起剝皮案震驚了整個濱河市丰榴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌秆撮,老刑警劉巖四濒,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異职辨,居然都是意外死亡盗蟆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門舒裤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喳资,“玉大人,你說我怎么就攤上這事腾供∑偷耍” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵伴鳖,是天一觀的道長节值。 經(jīng)常有香客問我,道長榜聂,這世上最難降的妖魔是什么搞疗? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮须肆,結(jié)果婚禮上匿乃,老公的妹妹穿的比我還像新娘。我一直安慰自己豌汇,他們只是感情好幢炸,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瘤礁,像睡著了一般阳懂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上柜思,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天岩调,我揣著相機與錄音,去河邊找鬼赡盘。 笑死号枕,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的陨享。 我是一名探鬼主播葱淳,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼钝腺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了赞厕?” 一聲冷哼從身側(cè)響起艳狐,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎皿桑,沒想到半個月后毫目,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡诲侮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年镀虐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沟绪。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡刮便,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绽慈,到底是詐尸還是另有隱情恨旱,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布久信,位于F島的核電站窖杀,受9級特大地震影響漓摩,放射性物質(zhì)發(fā)生泄漏裙士。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一管毙、第九天 我趴在偏房一處隱蔽的房頂上張望腿椎。 院中可真熱鬧,春花似錦夭咬、人聲如沸啃炸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽南用。三九已至,卻和暖如春掏湾,著一層夾襖步出監(jiān)牢的瞬間裹虫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工融击, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留筑公,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓尊浪,卻偏偏與公主長得像匣屡,于是被迫代替她去往敵國和親封救。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容