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