5.8 繪制混淆矩陣

1.混淆矩陣

接受者操作特征(Receiver Operating Characteristic Curve主届,ROC)曲線是顯示分類器真正率和假正率之間折中
的?種圖形化?法君丁,也是最常?的評估分類模型好壞的可視化圖形绘闷,在介紹ROC曲線之前,先了解下混淆矩陣丑勤。

1.1 原理

混淆矩陣是用來總結(jié)一個分類器結(jié)果的矩陣法竞。對于k元分類强挫,其實它就是一個k x k的表格俯渤,用來記錄分類器的預(yù)測結(jié)果稠诲。 對于最常見的二元分類來說臀叙,它的混淆矩陣是2乘2的。
假設(shè)有一批test樣本渊涝,這些樣本只有兩種類別:正例和反例跨释。機器學(xué)習(xí)算法預(yù)測類別如下圖(左半部分預(yù)測類別為正例鳖谈,右半部分預(yù)測類別為反例)阔涉,而樣本中真實的正例類別在上半部分瑰排,下半部分為真實的反例椭住。 如下圖:
預(yù)測值為正例,記為P(Positive)
預(yù)測值為反例葫掉,記為N(Negative)
預(yù)測值與真實值相同,記為T(True)
預(yù)測值與真實值相反兽肤,記為F(False)

image.png
image.png
image.png

注: F1 score 來源:
1/ ((1/精準(zhǔn)率)+ (1/召回率))
由于精準(zhǔn)率,召回率最大1绪抛,此值最大0.5资铡,會乘2,使其在0-1區(qū)間幢码。

2. ROC曲線

image.png
image.png

橫坐標(biāo):1-負(fù)樣本的召回率 假正率:負(fù)樣本中預(yù)測成正樣本的概率
縱坐標(biāo):正樣本的召回率 真正率:正樣本中預(yù)測為正樣本的概率

3. 繪制ROC曲線

3.1 導(dǎo)入波士頓房價笤休,獲取X,y

將大于均價的房價映射為1症副,低于映射為0,構(gòu)成分類問題贞铣,并初步用邏輯斯蒂預(yù)測和評分闹啦。

import numpy as np
import pandas as pd
from pandas import Series, DataFrame

import matplotlib.pyplot as plt
%matplotlib inline

from sklearn.datasets import load_boston # 獲取波士頓房價數(shù)據(jù)
X, y = load_boston(return_X_y=True) # 獲取特征向量集X和目標(biāo)房價 y

展示y
import seaborn as sns
sns.set()
sns.distplot(y)

image.png

根據(jù)均值將y映射為0和1
threshold = np.median(y)
target = Series(y).map(lambda x: (x>threshold)*1)
target.value_counts().plot(kind='bar')


image.png

邏輯斯蒂建模
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split # 獲取拆分函數(shù)

X_train, X_test, y_train, y_test = train_test_split(X, target, test_size=0.2, random_state=1) # 拆分樣本集,拆分比例0.8:0.2辕坝,并做隨機種子窍奋,下次拆分如果還用隨機種子1,可以得到一樣的隨機結(jié)果酱畅。

預(yù)測并評分
lr = LogisticRegression()
lr.fit(X_train, y_train)
y_ = lr.predict(X_test)
y_

image.png

image.png

from sklearn.metrics import accuracy_score
accuracy_score(y_, y_test) # 0.8725490196078431
準(zhǔn)確率評分琳袄,即預(yù)測正確的占總數(shù)的比例。如果樣本比例不均纺酸,此評分高看不出來對兩種預(yù)測樣本的準(zhǔn)確度窖逗。
比如:99個男生,1個女生餐蔬,預(yù)測為100個男生滑负,準(zhǔn)確率99%,但對女生的預(yù)測率為0用含,所以需要引入其他評分指標(biāo)矮慕。

3.2 繪制混淆矩陣

(1)導(dǎo)包,準(zhǔn)備數(shù)據(jù)
from sklearn.metrics import confusion_matrix # 導(dǎo)入混淆矩陣的包
y_.size # 102
cm = confusion_matrix(y_test, y_)
cm # array([[44, 3], [10, 45]], dtype=int64)

tn, fp, fn, tp = confusion_matrix(y_test, y_).ravel()
(tn, fp, fn, tp) # (44, 3, 10, 45)

(2)繪圖展示
sns.set_style('white') # 設(shè)置全局的圖的背景為白色
def show_cm(y_true, y_test):
tn, fp, fn, tp = confusion_matrix(y_test, y_true).ravel()
plt.imshow(cm, cmap=plt.cm.Blues)
plt.xticks([0,1])
plt.yticks([0,1])
plt.xlabel("Predict")
plt.ylabel("True")

plt.text(x=0-0.1, y=0, s="TP:"+str(tp), color='black') # 設(shè)置文本啄骇,位置由x,y確定痴鳄,x,y為相對位置。0-1
plt.text(x=1-0.1, y=0, s="FN:"+str(fn), color='black')
plt.text(x=0-0.1, y=1, s="FP:"+str(fp), color='black')
plt.text(x=1-0.1, y=1, s="TN:"+str(tn), >color='black')

查準(zhǔn)率 = tp/(tp + fp)
召回率 = tp/(tp + tn)
print("查準(zhǔn)率:",查準(zhǔn)率)
print("召回率:",召回率)
plt.show()

繪圖
show_cm(y_test, y_)


image.png

(3)對預(yù)測閥值進行修改并展示混淆矩陣
原理缸夹,邏輯斯蒂回歸痪寻,根據(jù)概率判斷正負(fù)樣本螺句,閥值0.5,0的概率大于1時橡类,預(yù)測為0.

image.png

對正樣本的預(yù)測閾值進行修改蛇尚,查看變換
y1_ = (lr.predict_proba(X_test)[:,1] > 0.7)*1 #通過predict_proba獲取每個預(yù)測值的概率,如果第2列的概率大于0.7顾画,則為1取劫,小于為0. 即增大正樣本的概率判斷的閾值。

image.png
image.png

3.3 f1_score評分

image.png

3.4 繪制 ROC曲線

3.4.1計算評分

image.png
image.png

繪制曲線
from sklearn import metrics

def show_roc(y_test, scores, pos_label):
fpr, tpr, thresholds = metrics.roc_curve(y_test, scores, pos_label=pos_label)
plt.plot(fpr, tpr, color='green')
plt.plot(np.linspace(0,1,10), np.linspace(0,1,10), color='red', ls='--')
plt.xlabel("FPR")
plt.ylabel("TPR")
plt.title("LR ROC ")
plt.show()

繪制ROC曲線

image.png

繪制不同情況下的ROC曲線
參數(shù)c更小

image.png

高斯分布樸素貝葉斯預(yù)測

from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
gnb.fit(X_train, y_train)
scores3 = gnb.predict_proba(X_test)[:,1]
show_roc(y_test, scores3, 1)

image.png

3.5 繪制ROC曲線

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, tpr, thresholds # 列方向看研侣,當(dāng)閾值為1,8時谱邪,預(yù)測FPR和TPR的值都為0,當(dāng)閾值為0.8時庶诡,F(xiàn)PR為0惦银,TPR為0.5.

(array([0. , 0. , 0.5, 0.5, 1. ]),
array([0. , 0.5, 0.5, 1. , 1. ]),
array([1.8 , 0.8 , 0.4 , 0.35, 0.1 ]))

import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(fpr, tpr, color='blue', lw=3)
plt.xlabel('FPR')
plt.ylabel('TPR')

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市末誓,隨后出現(xiàn)的幾起案子扯俱,更是在濱河造成了極大的恐慌,老刑警劉巖喇澡,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蘸吓,死亡現(xiàn)場離奇詭異,居然都是意外死亡撩幽,警方通過查閱死者的電腦和手機库继,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窜醉,“玉大人宪萄,你說我怎么就攤上這事≌ザ瑁” “怎么了拜英?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長琅催。 經(jīng)常有香客問我居凶,道長,這世上最難降的妖魔是什么藤抡? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任侠碧,我火速辦了婚禮,結(jié)果婚禮上缠黍,老公的妹妹穿的比我還像新娘弄兜。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布替饿。 她就那樣靜靜地躺著语泽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪视卢。 梳的紋絲不亂的頭發(fā)上踱卵,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音据过,去河邊找鬼惋砂。 笑死,一個胖子當(dāng)著我的面吹牛蝶俱,可吹牛的內(nèi)容都是我干的班利。 我是一名探鬼主播饥漫,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼榨呆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了庸队?” 一聲冷哼從身側(cè)響起积蜻,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎彻消,沒想到半個月后竿拆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡宾尚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年丙笋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片煌贴。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡御板,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出牛郑,到底是詐尸還是另有隱情怠肋,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布淹朋,位于F島的核電站笙各,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏础芍。R本人自食惡果不足惜杈抢,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望仑性。 院中可真熱鬧春感,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至窥岩,卻和暖如春甲献,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背颂翼。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工晃洒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人朦乏。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓球及,卻偏偏與公主長得像,于是被迫代替她去往敵國和親呻疹。 傳聞我的和親對象是個殘疾皇子吃引,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

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