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时返回正确预测的绝对数


1771

被折叠的 条评论
为什么被折叠?



