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

摘要:精确率和召回率是评估分类模型性能的关键指标,特别适用于不平衡数据集。精确率反映预测为正类的准确性(TP/(TP+FP)),召回率衡量对实际正类的识别能力(TP/(TP+FN))。以垃圾邮件检测为例,高精确率表示较少误判合法邮件,高召回率意味着能捕捉更多垃圾邮件。通过scikit-learn的precision_score()和recall_score()函数可计算这两个指标,示例代码展示了在乳腺癌数据集上训练逻辑回归模型并评估其性能(精确率94.6%,召回率98.6%)。这两个指标共同帮助优化模型在不同场景下的表现。

目录

[机器学习 - 精确率与召回率](#机器学习 - 精确率与召回率)

[Python 实现](#Python 实现)

示例代码

代码说明

输出结果


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

精确率(Precision)和召回率(Recall)是机器学习中评估分类模型性能的两个重要指标,在不平衡数据集(即某一类别的样本数量显著少于另一类别)的评估中尤为实用。

精确率衡量分类器做出的正类预测中,实际为正确预测的比例,其定义为真阳性(TP)与所有正类预测结果(TP + 假阳性 FP)的比值,即精确率 = 真阳性 /(真阳性 + 假阳性),反映了所有被预测为正类的样本中真正正类的占比。

召回率则衡量所有实际为正类的样本中,被分类器正确识别的比例,定义为真阳性(TP)与所有实际正类样本(TP + 假阴性 FN)的比值,即召回率 = 真阳性 /(真阳性 + 假阴性),体现了分类器对实际正类样本的捕捉能力。

以垃圾邮件检测问题为例可更好理解二者:分类器会将邮件标记为垃圾邮件(正类预测)或非垃圾邮件(负类预测),邮件实际标签也分为垃圾邮件和非垃圾邮件。实际为垃圾邮件且被正确标记为垃圾邮件的是真阳性;实际非垃圾邮件却被误标为垃圾邮件的是假阳性;实际为垃圾邮件但被误标为非垃圾邮件的是假阴性;实际非垃圾邮件且被正确标记的是真阴性。在此场景中,精确率反映分类器正确识别的垃圾邮件占所有被标记为垃圾邮件的比例,高精确率意味着分类器能准确识别多数垃圾邮件,且很少将合法邮件误判为垃圾邮件;召回率反映分类器正确识别的垃圾邮件占所有实际垃圾邮件的比例,高召回率意味着分类器能捕捉到多数垃圾邮件,即便可能将部分合法邮件误判为垃圾邮件。

Python 实现

在 scikit-learn 库中,可分别使用 precision_score () 函数和 recall_score () 函数计算精确率和召回率。这两个函数接收真实标签和预测标签作为输入,返回对应的精确率得分和召回率得分。

以下代码示例使用 scikit-learn 中的乳腺癌数据集训练逻辑回归分类器,并评估其精确率和召回率:

示例代码

python 复制代码
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

# 加载乳腺癌数据集
data = load_breast_cancer()

# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=42)

# 训练逻辑回归分类器
clf = LogisticRegression(random_state=42)
clf.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = clf.predict(X_test)

# 计算精确率和召回率
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)

print("精确率:", precision)
print("召回率:", recall)

代码说明

  1. 首先加载乳腺癌数据集,并按 8:2 的比例将数据划分为训练集和测试集(test_size=0.2),设置 random_state=42 保证结果可复现;
  2. 初始化逻辑回归分类器,使用训练集数据训练模型;
  3. 调用 predict () 方法在测试集上生成预测结果;
  4. 利用 precision_score () 和 recall_score () 函数分别计算模型的精确率和召回率,并打印输出。

输出结果

运行上述代码后,将得到以下输出:精确率: 0.9459459459459459召回率: 0.9859154929577465

相关推荐
2301_8039346123 分钟前
Go语言如何做网络爬虫_Go语言爬虫开发教程【指南】
jvm·数据库·python
WL_Aurora24 分钟前
Python爬虫实战(六):新发地蔬菜价格数据采集.
爬虫·python
盲敲代码的阿豪27 分钟前
Python 入门基础教程(爬虫前置版)
开发语言·爬虫·python
研华科技Advantech34 分钟前
如何用一套实训设备,打通工业AI预测性维护技术全流程?
人工智能
Lab_AI34 分钟前
AI for Science: MaXFlow AI Agent+ 报告体验双升级,让AI智能体更高效易用!
人工智能·ai for science·ai agent·ai智能体
李坤1 小时前
让 Codex 和 Claude 互相 Review:告别手动复制
人工智能·openai·claude
南屹川1 小时前
【API设计】GraphQL实战:从REST到GraphQL的演进
人工智能
KJ_BioMed1 小时前
当计算生物学遇上生成式AI:从头设计生物分子的“新范式”初探
人工智能·从头设计·生命科学·生物医药·科研干货·科晶生物
明月醉窗台1 小时前
深度学习(17)YOLO训练中的超参数详解
人工智能·深度学习·yolo
weixin199701080161 小时前
[特殊字符] 智能数据采集:数字化转型的“数据石油勘探队”(附Python实战源码)
开发语言·python