在Python中計算分類報告和混淆矩陣
介紹
在機器學習中,分類問題是最常見的難題之一,其中構建機器學習模型是為了對目標變數的多個類別進行分類。但是,為了評估模型的效能並檢查模型在哪裡出錯,需要用到分類報告和混淆矩陣。
在本文中,我們將討論分類報告和混淆矩陣,它們是什麼,我們如何使用它們,以及它們的解釋,方法是在Python中計算相同的程式碼示例。本文將幫助讀者瞭解這些模型評估方法,並幫助讀者在處理分類模型時使用相同的評估方法。
在我們直接進入程式碼和解釋之前,讓我們先討論一下分類報告和混淆矩陣以及它們背後的基本直覺。
什麼是混淆矩陣?
在分類中,混淆矩陣是一種表格或矩陣,它根據目標變數的預測類別和實際類別包含多個值。
它主要包括真陽性、真陰性、假陽性、假陰性。
讓我們逐一討論這些類別。
**真陽性 (True Positive)**:真陽性基本上意味著模型的預測是正確的,並且預測值為正。基本上,這是模型沒有犯任何錯誤並正確預測正值的情況。
**真陰性 (True Negative)**:真陰性意味著模型對負值的預測是正確的。這是模型沒有犯任何錯誤並且實際上對負例預測為負值的情況。
**假陽性 (False Positive)**:這是模型出錯的情況。當實際值為負而模型預測為正時,這種情況稱為假陽性值。這些錯誤也稱為第一類錯誤。
**假陰性 (False Negative)**:這是實際值為正而模型錯誤地預測值為負的情況。這些錯誤也稱為第二類錯誤。
這些值是通常以不同方式表示模型效能的值之一,其基礎是模型預測的內容以及實際觀察結果。使用這些值,可以進行各種度量,這可以幫助我們以不同方式確定模型的效能。
主要使用這些值計算準確率、精確率、召回率和F1分數。讓我們逐一討論它們。
準確率
它是模型正確預測相對於模型所做的所有預測的度量。它是透過將模型的正確預測與模型所做的總預測之比來計算的。
準確率 = (TP + TN) / (TP + TN + FP + FN)
精確率
精確率是對所有預測為正的值中正確預測的正值的度量。
精確率 = TP / (TP + FP)
召回率
召回率是對實際正值中正確預測的正值的度量。它也稱為真陽性率。
召回率 = TP / (TP + FN)
F1分數
F1分數是精確率和召回率的某種比例的度量。在這裡,精確率和召回率之間保持平衡,並使用 beta 引數為精確率或召回率賦予更大的權重。
F1分數 = (1 + beta²) * (精確率 * 召回率) / (beta² * 精確率 + 召回率)
什麼是分類報告?
顧名思義,分類報告是一種報告,其中包含模型的各種引數,這些引數基本上是目標變數每個類別的評估指標。
分類報告通常包括四個引數:精確率、召回率、F1分數和支援度。
如上所述,精確率和召回率是模型對所有預測為正的值中正確預測的正值的比率,而召回率是模型對所有實際正值中正確預測的正值的度量。
F1分數是F-beta分數,其中 beta 取值為 1。在這裡,beta 取值為 1;將對精確率和召回率給予相同的權重。
支援度是指示目標變數中每個類別例項的引數。簡單來說,它是目標變數中特定類別出現次數或觀測值的度量。
計算分類報告和混淆矩陣的示例
現在讓我們嘗試使用 Python 透過獲取資料集並在其上訓練模型來計算混淆矩陣和分類報告。
在這裡,我們將生成一個包含 200 個觀測值的人工資料集,其中將包含一個具有 0 和 1 類的目標變數,這基本上是一個分類問題。
示例
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, confusion_matrix
# Generating a random dataset with 200 rows
np.random.seed(0)
X = np.random.rand(200, 5)
y = np.random.randint(2, size=200)
# Split the dataset into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,
random_state=42)
# Train the model
model = LogisticRegression()
model.fit(X_train, y_train)
# Make predictions on the test set
y_pred = model.predict(X_test)
from sklearn.metrics import accuracy_score
# Calculating the accuracy
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
# Calculating the classification report
c_report = classification_report(y_test, y_pred)
print("Classification Report:\n", c_report)
# Calculating the confusion matrix
con_m = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:\n", con_m)
輸出
Accuracy: 0.6
Classification Report:
precision recall f1-score support
0 0.62 0.73 0.67 33
1 0.57 0.44 0.50 27
accuracy 0.60 60
macro avg 0.59 0.59 0.58 60
weighted avg 0.60 0.60 0.59 60
Confusion Matrix:
[[24 9]
[15 12]]
上述程式碼返回三個結果:模型的準確率、混淆矩陣和分類報告。
可以使用準確率、精確率、召回率和 F1 分數以及分類報告中包含的微平均和宏平均來很好地評估模型,這是目標變數不同類別精確率、召回率和 F1 分數平均值的度量。
結論
在本文中,我們討論了分類報告和混淆矩陣,它們是什麼,如何使用它們以及它們的重要性,並討論了與它們相關的術語以及計算相同的程式碼示例。本文將幫助讀者更好地理解這些指標並在需要時使用它們。
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP