【scikit-learn】accuracy_score实战指南:从二分类到多分类的准确率计算

1. accuracy_score基础概念与核心原理

准确率(Accuracy)是机器学习分类任务中最直观的评估指标之一,它直接反映了模型预测正确的样本比例。想象一下考试评分场景:如果全班100人中有80人答对了题目,那么准确率就是80%。在scikit-learn中,accuracy_score函数正是基于这个简单却强大的概念设计的。

准确率的数学表达式非常简洁:

Accuracy = (TP + TN) / (TP + TN + FP + FN)

其中TP(True Positive)表示正确预测的正样本,TN(True Negative)是正确预测的负样本,FP(False Positive)是误报,FN(False Negative)是漏报。这个公式适用于二分类场景,而多分类场景下则简化为所有正确预测的样本数与总样本数的比值。

在实际项目中,我经常遇到初学者混淆准确率与精确率(Precision)。举个实际案例:假设我们开发了一个垃圾邮件过滤器,在100封邮件中:

  • 正确识别垃圾邮件(TP)30封
  • 正确识别正常邮件(TN)60封
  • 误判正常邮件为垃圾邮件(FP)5封
  • 漏判垃圾邮件(FN)5封

这时的准确率就是(30+60)/100=90%。看起来不错对吧?但如果我们有990封正常邮件和10封垃圾邮件,模型即使全部预测为正常邮件,准确率也有99%!这就是准确率在类别不平衡时的陷阱,后面我们会深入讨论解决方案。

2. 二分类场景下的准确率计算实战

让我们从一个完整的代码示例开始,展示如何在二分类任务中使用accuracy_score。假设我们正在构建一个乳腺癌诊断模型,标签0表示良性,1表示恶性:

from sklearn.metrics import accuracy_score
import numpy as np

# 模拟真实场景中的预测结果
y_true = np.array([0, 1, 1, 0, 1, 0, 1, 1, 0, 0])  # 医生诊断结果
y_pred = np.array([0, 1, 0, 0, 1, 0, 1, 1, 1, 0])  # 模型预测结果

# 基础用法
basic_acc = accuracy_score(y_true, y_pred)
print(f"标准准确率: {basic_acc:.2f}")  # 输出: 0.80

# 返回正确样本数而非比例
count_acc = accuracy_score(y_true, y_pred, normalize=False)
print(f"正确预测样本数: {count_acc}")  # 输出: 8

# 带样本权重的计算
weights = np.array([1, 2, 1, 1, 2, 1, 1, 1, 1, 1])  # 第2和第5样本权重更高
weighted_acc = accuracy_score(y_true, y_pred, sample_weight=weights)
print(f"加权准确率: {weighted_acc:.2f}")  # 输出: 0.82

在这个例子中,normalize参数给了我们两种输出选择:当normalize=True(默认)时返回准确率比例,False时返回正确预测的绝对数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值