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

摘要:精确率和召回率是评估分类模型性能的关键指标,特别适用于不平衡数据集。精确率反映预测为正类的准确性(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

相关推荐
3A Cloud几秒前
使用 iThinkAir 将“摄影级人像生图”Skill 开发成应用
图像处理·人工智能
AI英德西牛仔2 分钟前
手机文心怎么导出文档?AI 导出鸭一键解决格式崩塌与批量归档难题
人工智能·智能手机·excel·deepseek·ai导出鸭
invicinble2 分钟前
设计b端系统实际思路
人工智能
p***76983 分钟前
Open Minis – 免费开源本地运行 AI Agent 智能助手|实现手机电脑运行的开源 AI Agent 平台
人工智能·智能手机·开源
品牌测评3 分钟前
AI算力平台推荐分享:2026年算力消费透明化观察
人工智能
lifallen8 分钟前
edit-article:AI 味来自跳级
人工智能·学习·ai·ai编程·ai写作
陈童学哦9 分钟前
AI编码大战升级:Meta Muse Code入局,Trae、Claude Code压力拉满
人工智能
Seven9711 分钟前
AI杂谈:面试AI Coding,我只看你是不是驾驶员
人工智能
IT_陈寒16 分钟前
Python的GIL让我深夜加班,这破锁到底怎么折腾的
前端·人工智能·后端