Python?sklearn預(yù)測(cè)評(píng)估指標(biāo)混淆矩陣計(jì)算示例詳解
前言
很多時(shí)候需要對(duì)自己模型進(jìn)行性能評(píng)估,對(duì)于一些理論上面的知識(shí)我想基本不用說(shuō)明太多,關(guān)于校驗(yàn)?zāi)P蜏?zhǔn)確度的指標(biāo)主要有混淆矩陣、準(zhǔn)確率、精確率、召回率、F1 score。另外還有P-R曲線以及AUC/ROC,這些我都有寫(xiě)過(guò)相應(yīng)的理論和具體理論過(guò)程:
機(jī)器學(xué)習(xí):性能度量篇-Python利用鳶尾花數(shù)據(jù)繪制ROC和AUC曲線
機(jī)器學(xué)習(xí):性能度量篇-Python利用鳶尾花數(shù)據(jù)繪制P-R曲線
這里我們主要進(jìn)行實(shí)踐利用sklearn快速實(shí)現(xiàn)模型數(shù)據(jù)校驗(yàn),完成基礎(chǔ)指標(biāo)計(jì)算。
混淆矩陣
查準(zhǔn)率(precision)與查全率(recall)是對(duì)于需求在信息檢索、Web搜索等應(yīng)用評(píng)估性能度量適應(yīng)度高的檢測(cè)數(shù)值。對(duì)于二分類問(wèn)題,可將真實(shí)類別與算法預(yù)測(cè)類別的組合劃分為真正例(ture positive)、假證例(false positive)、真反例(true negative)、假反例(false negative)四種情形。顯然TP+FP+TN+FN=樣例總數(shù)。分類結(jié)果為混淆矩陣:
以分類模型中最簡(jiǎn)單的二分類為例,對(duì)于這種問(wèn)題,我們的模型最終需要判斷樣本的結(jié)果是0還是1,或者說(shuō)是positive還是negative。 因此,我們就能得到這樣四個(gè)基礎(chǔ)指標(biāo),我稱他們是一級(jí)指標(biāo)(最底層的):
- 真實(shí)值是positive,模型認(rèn)為是positive的數(shù)量(True Positive=TP)
- 真實(shí)值是positive,模型認(rèn)為是negative的數(shù)量(False Negative=FN):這就是統(tǒng)計(jì)學(xué)上的第二類錯(cuò)誤(Type II Error)
- 真實(shí)值是negative,模型認(rèn)為是positive的數(shù)量(False Positive=FP):這就是統(tǒng)計(jì)學(xué)上的第一類錯(cuò)誤(Type I Error)
- 真實(shí)值是negative,模型認(rèn)為是negative的數(shù)量(True Negative=TN)
預(yù)測(cè)性分類模型,肯定是希望越準(zhǔn)越好。那么,對(duì)應(yīng)到混淆矩陣中,那肯定是希望TP與TN的數(shù)量大,而FP與FN的數(shù)量小。所以當(dāng)我們得到了模型的混淆矩陣后,就需要去看有多少觀測(cè)值在第二、四象限對(duì)應(yīng)的位置,這里的數(shù)值越多越好;反之,在第一、三象限對(duì)應(yīng)位置出現(xiàn)的觀測(cè)值肯定是越少越好。
python代碼
混淆矩陣一般來(lái)說(shuō)可以有三種實(shí)現(xiàn)展示方法,需要前置計(jì)算出混淆矩陣數(shù)據(jù),這一點(diǎn)使用sklearn就可以實(shí)現(xiàn):
from sklearn.metrics import confusion_matrix y_true =df_evaluation.state_y y_pred =df_evaluation.state_x cm= confusion_matrix(y_true, y_pred,labels=[2,3,4,5])
其中cm就是計(jì)算出來(lái)的混淆矩陣:
利用sklearn的confusion_matrix函數(shù)就可以實(shí)現(xiàn),這里將該函數(shù)的參數(shù)鋪開(kāi)一下:
sklearn.metrics.confusion_matrix(y_true, y_pred, *, labels=None, sample_weight=None, normalize=None)
參數(shù)說(shuō)明:
- y_true:對(duì)比真值
- y_pred: 預(yù)測(cè)值
- labels:索引矩陣的標(biāo)簽列表。這可用于重新排序或選擇標(biāo)簽的子集。如果給定“無(wú)”,則按排序順序使用在y_true或y_pred中至少出現(xiàn)一次的值。
- sample_weight:樣本權(quán)重
- normalize:在真(行)、預(yù)測(cè)(列)條件或所有總體上規(guī)范化混淆矩陣。如果“無(wú)”,則混淆矩陣將不會(huì)被歸一化。
得到了混淆矩陣接下來(lái)進(jìn)行數(shù)據(jù)可視化就好了,這里有三種實(shí)現(xiàn)形式,其中matplotlib和seaborn實(shí)現(xiàn)方法是一樣的,都是熱力圖實(shí)現(xiàn),另外sklearn自帶一個(gè)ConfusionMatrixDisplay也可以直接實(shí)現(xiàn)熱力。 第一種matplotlib/seaborn:
import seaborn as sns import matplotlib.pyplot as plt labels=[2,3,4,5] sns.heatmap(cm,annot=True ,fmt="d",xticklabels=labels,yticklabels=labels) plt.title('confusion matrix') # 標(biāo)題 plt.xlabel('Predict lable') # x軸 plt.ylabel('True lable') # y軸 plt.show()
第二種ConfusionMatrixDisplay:
disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=labels) disp.plot( include_values=True, cmap="viridis", ax=None, xticks_rotation="horizontal", values_format="d" ) plt.show()
這里我主要將一下ConfusionMatrixDisplay.plot()的可選參數(shù):
plot(*, include_values=True, cmap='viridis', xticks_rotation='horizontal', values_format=None, ax=None, colorbar=True, im_kw=None, text_kw=None)
參數(shù)說(shuō)明:
- include_values:bool,default=True。包括混淆矩陣中的值。
- cmap:str or matplotlib Colormap, default=’viridis’。matplotlib識(shí)別的顏色映射。
- xticks_rotation: {‘vertical’, ‘horizontal’} or float, default=’horizontal’。旋轉(zhuǎn)xtick標(biāo)簽。
- values_format:str, default=None。混淆矩陣中值的格式規(guī)范。如果無(wú),則格式規(guī)范為“d”或“.2g”,以較短者為準(zhǔn)。
- ax: matplotlib axes, default=None。要繪制的軸對(duì)象。如果為“無(wú)”,則創(chuàng)建新的圖形和軸。
- colorbar:bool, default=True。是否向繪圖添加色條。
- im_kw:dict, default=None。使用傳遞給matplotlib.pyplot.imshow調(diào)用的關(guān)鍵字進(jìn)行讀寫(xiě)。
- text_kw:dict, default=None。使用傳遞給matplotlib.pyplot.text調(diào)用的關(guān)鍵字進(jìn)行讀寫(xiě)。
以上就是Python sklearn預(yù)測(cè)評(píng)估指標(biāo)混淆矩陣計(jì)算示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Python sklearn預(yù)測(cè)評(píng)估混淆矩陣的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python讀取配置文件(config.ini)以及寫(xiě)入配置文件
這篇文章主要介紹了Python讀取配置文件(config.ini)以及寫(xiě)入配置文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04Python的10道簡(jiǎn)單測(cè)試題(含答案)
這篇文章主要介紹了Python的10道簡(jiǎn)單測(cè)試題(含答案),學(xué)習(xí)了一段時(shí)間python的小伙伴來(lái)做幾道測(cè)試題檢驗(yàn)一下自己的學(xué)習(xí)成果吧2023-04-04Python OpenCV 圖像矯正的原理實(shí)現(xiàn)
這篇文章主要介紹了Python OpenCV 圖像矯正的原理實(shí)現(xiàn),檢測(cè)邊緣點(diǎn);以邊緣點(diǎn)作為輸入,采用Hough直線檢測(cè),檢測(cè)出最多點(diǎn)共線的四條直線,更多相關(guān)內(nèi)容需要的朋友可以參考一下2022-07-07Python3中最常用的5種線程鎖實(shí)例總結(jié)
python3線程中鎖機(jī)制還是很重要的知識(shí)點(diǎn),如果大家不清楚鎖機(jī)制的話,那就一定要好好看下這篇文章,這篇文章主要給大家總結(jié)介紹了光宇Python3中最常用的5種線程鎖,需要的朋友可以參考下2021-07-07Python調(diào)用GPT3.5接口的最新方法實(shí)例詳解
這篇文章主要介紹了Python調(diào)用GPT3.5接口的最新方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03python利用PyQt5設(shè)計(jì)鼠標(biāo)顯示形狀
不知道大家有沒(méi)有發(fā)現(xiàn),我們?cè)诰W(wǎng)頁(yè)移動(dòng)鼠標(biāo)時(shí),不同的網(wǎng)頁(yè)會(huì)有不同的鼠標(biāo)移動(dòng)特效,通過(guò)移動(dòng)鼠標(biāo),會(huì)形成類似蜘蛛網(wǎng)等等的特效,本文將用PyQt5實(shí)現(xiàn)這一特效,需要的可以參考一下2024-07-07TensorFlow打印tensor值的實(shí)現(xiàn)方法
今天小編就為大家分享一篇TensorFlow打印tensor值的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07TensorFlow中關(guān)于tf.app.flags命令行參數(shù)解析模塊
這篇文章主要介紹了TensorFlow中關(guān)于tf.app.flags命令行參數(shù)解析模塊,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11