1.這里介紹由?sklearn.metrics.ConfusionMatrixDisplay?所給出的關(guān)于混淆矩陣的一個小例子,來進(jìn)行理解混淆矩陣及如何應(yīng)用混淆矩陣來對數(shù)據(jù)進(jìn)行分析
2.先了解混淆矩陣的一些基本信息,這里規(guī)定正類為1,負(fù)類為0
TP(True Positives): 預(yù)測為1,而真實(shí)的也為1 (即正類判斷為正類,1判斷為1)
TN(True Negatives): 預(yù)測為0,真實(shí)的也為0? ?(即負(fù)類判斷為負(fù)類,0判斷為0)
FP(False Positives): 預(yù)測為1,真實(shí)的為0? ? ? ?(即負(fù)類判斷為正類,將0判斷為了1)
FN(False Negatives): 預(yù)測為0,真實(shí)為1? ? ? ? (即正類判斷為負(fù)類,將1判斷為了0)?
樣本總數(shù)=25? | 預(yù)測為:0 | 預(yù)測為:1 | |
真實(shí)為:0 | TN = 12 | FP = 1 | 真實(shí)的0總數(shù):13 |
真實(shí)為:1 | FN = 2 | TP = 10 | 真實(shí)的1總數(shù):12 |
預(yù)測的0總數(shù):14 | 預(yù)測的1總數(shù):11 |
上方表格中,說明一下FN = 2 ,即表示預(yù)測為0的樣本總的有14個,但是其中有2個樣本咱預(yù)測成了0不過其真實(shí)的情況是為1,所以得到了FN = 2,即將本來是1的預(yù)測成了0(正類預(yù)測成了負(fù)類)。
為了便于理解,還可以將1理解成患病的情況,0是沒病的情況,那么上面FN=2,則可理解成,將本來是患病的2個人預(yù)測成了沒病,所以自然預(yù)測出問題了,他倆本來有病,但計(jì)算機(jī)預(yù)測他倆沒病。
這個預(yù)測的數(shù)據(jù),并非人為的憑空捏造,而是通過相關(guān)模型的建立及訓(xùn)練后,傳入相關(guān)測試數(shù)據(jù)后,得到的預(yù)測數(shù)據(jù)。
而我們會想如果預(yù)測的數(shù)據(jù)和真實(shí)的數(shù)據(jù)情況一樣的情況呢,即假設(shè)咱建立的模型很牛掰,預(yù)測的很準(zhǔn)達(dá)到了100%正確,那么TN、FP、FN、TP的取值又該如何呢?即如下表情況:我們規(guī)定其真實(shí)的0的個數(shù)和上表一樣還是13個,真實(shí)的1的個數(shù)仍舊為12,然后預(yù)測情況如下:
樣本總數(shù)=25? | 預(yù)測為:0 | 預(yù)測為:1 | |
真實(shí)為:0 | 13 | 0 | 真實(shí)的0總數(shù):13 |
真實(shí)為:1 | 0 | 12 | 真實(shí)的1總數(shù):12 |
預(yù)測的0總數(shù):13 | 預(yù)測的1總數(shù):12 |
可以看到預(yù)測情況和真實(shí)的情況一樣,即這種情況毫無疑問,預(yù)測準(zhǔn)確率達(dá)到了100%,當(dāng)然一般情況下,預(yù)測能力可達(dá)不到100%正確。
除上述外還需了解召回率(recall score)的相關(guān)信息,可從sklearn.metrics.recall_score 中進(jìn)行了解,即使用TN、FP、FN、TP的相關(guān)值來計(jì)算的一個分?jǐn)?shù),進(jìn)而評估該預(yù)測效果
3.接下來了解通過代碼及運(yùn)行結(jié)果來進(jìn)行相關(guān)信息的理解及應(yīng)用
3.1? 基于SVC的方式來進(jìn)行訓(xùn)練及預(yù)測
# 混淆矩陣 confusion matrix
import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import make_classification
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics._classification import recall_score
X, y = make_classification(random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y,random_state=0)
print("真實(shí)的 Y值:",y_test)
# SVC 方式
clf = SVC(random_state=0)
clf.fit(X_train, y_train)
predictions = clf.predict(X_test)
print("預(yù)測的 Y值:",predictions)
# SVC
#Y: [1 1 1 0 0 1 1 0 1 1 1 0 0 0 0 1 0 0 1 1 0 0 1 0 0]
#p: [1 0 1 0 0 1 1 0 0 1 1 0 0 0 0 1 0 0 1 1 1 0 1 0 0]
# x x x
cm = confusion_matrix(y_test, predictions)
disp = ConfusionMatrixDisplay(confusion_matrix=cm)
r = recall_score(y_test,predictions,average='macro')
print("\n","recall score:" , r)
disp.plot()
plt.show()
控制臺輸出:recall score =?0.8782051282051282
?混淆矩陣圖像:
為了方便理解,不妨將混淆矩陣的各個模塊添加上坐標(biāo),所以可以看到下圖的各個模塊坐標(biāo),坐標(biāo)為(0,0)的模塊樣本數(shù)量有12個,(0,1)的有1個,(1,0)的有2個,(1,1)的有10個
首先通過對控制臺輸出的真實(shí)的 Y 值及預(yù)測的Y值進(jìn)行分析,可以看到下圖中打上紅叉的地方,預(yù)測的Y值與真實(shí)值并不一樣,所以可以看到混淆矩陣圖上(1,0)的地方有2個,其代表的意思就是預(yù)測為0但實(shí)際為1的樣本數(shù)量有2個,即 FN = 2;
又有(0,1)的模塊有1個樣本,即 FP = 1,表示為預(yù)測為 1但實(shí)際上是 0(將負(fù)類預(yù)測成了正類,0預(yù)測成了1);
又有(0,0)的模塊為12個,即 TN = 12,表示為預(yù)測為0,真實(shí)的也為0的有12個樣本(負(fù)類預(yù)測成負(fù)類,0預(yù)測成了0);
之后有(1,1)的模塊為10個,即?TP = 10,表示為預(yù)測成1,真實(shí)的也為1的有10個樣本(正類預(yù)測成正類,1預(yù)測成了1)。
3.2 基于邏輯回歸的方式訓(xùn)練及預(yù)測
# 添加如下代碼,且將SVC方式注釋掉使用邏輯回歸方式即可
from sklearn.linear_model import LogisticRegression
# SVC 方式
# clf = SVC(random_state=0)
# 邏輯回歸方式
clf = LogisticRegression(random_state=0)
?可以發(fā)現(xiàn)recall score 分?jǐn)?shù)較SVC的提高了些
?可以發(fā)現(xiàn)對比之前的混淆矩陣,邏輯回歸方式,(1,1)即 TP = 11,從TP = 10 提高到了 11,略有上升。
3.3 線性回歸的方式訓(xùn)練及預(yù)測
# 添加線性回歸的庫,即調(diào)用線性回歸的代碼
from sklearn.linear_model import LinearRegression
# SVC 方式
# clf = SVC(random_state=0)
# 邏輯回歸方式
# clf = LogisticRegression(random_state=0)
# 采用線性回歸
clf = LinearRegression()
clf.fit(X_train, y_train)
predictions = clf.predict(X_test)
predictions = predictions.astype(int) # 將預(yù)測數(shù)據(jù)轉(zhuǎn)為int類型
可以看到線性回歸方式進(jìn)行預(yù)測效果有些不太理想,recall score 降低了很多
?
?從混淆矩陣來看,預(yù)測的效果,在預(yù)測為1且實(shí)際為1時的情況即TP的值下降了許多,該方式進(jìn)行預(yù)測有點(diǎn)不太理想。文章來源:http://www.zghlxwxcb.cn/news/detail-413025.html
4.以上便為混淆矩陣的一些簡單理解,總體來說,混淆矩陣表示相關(guān)數(shù)據(jù)情況,還是比較直觀的。文章來源地址http://www.zghlxwxcb.cn/news/detail-413025.html
到了這里,關(guān)于機(jī)器學(xué)習(xí)之混淆矩陣 confusion_matrix的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!