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