機器學習 - 精確率和召回率



精確率和召回率是機器學習中用於評估分類模型效能的兩個重要指標。它們對於不平衡資料集特別有用,在不平衡資料集中,一類例項的數量明顯少於其他類。

精確率衡量的是分類器做出的所有正預測中,有多少是正確的。它定義為真陽性 (TP) 與正預測總數 (TP + FP) 的比率。換句話說,精確率衡量的是所有正預測中真陽性的比例。

$$精確率=TP/\left ( TP+FP \right )$$

另一方面,召回率衡量的是分類器正確識別了多少實際正例項。它定義為真陽性 (TP) 與實際正例項總數 (TP + FN) 的比率。換句話說,召回率衡量的是所有實際正例項中真陽性的比例。

$$召回率=TP/\left ( TP+FN \right )$$

要理解精確率和召回率,請考慮檢測垃圾郵件的問題。分類器可能會將電子郵件標記為垃圾郵件(正預測)或非垃圾郵件(負預測)。電子郵件的實際標籤可以是垃圾郵件或非垃圾郵件。如果電子郵件實際上是垃圾郵件,並且分類器將其正確標記為垃圾郵件,則它是真陽性。如果電子郵件不是垃圾郵件,但分類器錯誤地將其標記為垃圾郵件,則它是假陽性。如果電子郵件實際上是垃圾郵件,但分類器錯誤地將其標記為非垃圾郵件,則它是假陰性。最後,如果電子郵件不是垃圾郵件,並且分類器將其正確標記為非垃圾郵件,則它是真陰性。

在這種情況下,精確率衡量的是分類器正確識別為垃圾郵件的垃圾郵件比例。高精確率表明分類器正在正確識別大多數垃圾郵件,並且沒有將許多合法電子郵件標記為垃圾郵件。另一方面,召回率衡量的是分類器正確識別出的所有垃圾郵件的比例。高召回率表明分類器正在正確識別大多數垃圾郵件,即使它將某些合法電子郵件標記為垃圾郵件。

在 Python 中實現

在 scikit-learn 中,可以使用 precision_score() 和 recall_score() 函式分別計算精確率和召回率。這些函式將例項的真標籤和預測標籤作為輸入,並返回相應的精確率和召回率得分。

例如,以下程式碼片段使用 scikit-learn 中的乳腺癌資料集來訓練邏輯迴歸分類器並評估其精確率和召回率得分 -

示例

from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import precision_score, recall_score

# Load the breast cancer dataset
data = load_breast_cancer()

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=42)

# Train a logistic regression classifier
clf = LogisticRegression(random_state=42)
clf.fit(X_train, y_train)

# Make predictions on the testing set
y_pred = clf.predict(X_test)

# Calculate precision and recall scores
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
print("Precision:", precision)
print("Recall:", recall)

在上面的示例中,我們首先載入乳腺癌資料集並將其拆分為訓練集和測試集。然後,我們在訓練集上訓練邏輯迴歸分類器,並使用 predict() 方法對測試集進行預測。最後,我們使用 precision_score() 和 recall_score() 函式計算精確率和召回率得分。

輸出

執行此程式碼時,它將產生以下輸出 -

Precision: 0.9459459459459459
Recall: 0.9859154929577465
廣告