机器学习 - 精确率和召回率



精确率和召回率是机器学习中用于评估分类模型性能的两个重要指标。它们对于不平衡数据集特别有用,在不平衡数据集中,一类实例的数量明显少于其他类。

精确率衡量的是分类器做出的所有正预测中,有多少是正确的。它定义为真阳性 (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
广告