gpt4 book ai didi

python - sklearn 的metrics.accuracy_score 的结果似乎是错误的

转载 作者:行者123 更新时间:2023-11-30 09:46:39 28 4
gpt4 key购买 nike

代码如下:

xtrain, xtest, ytrain, ytest = train_test_split(xx, yy, test_size=0.50)

clf = MultinomialNB(alpha=1.0)
clf.fit(xtrain, ytrain)

predictions = clf.predict(xtest)
print 'score:', metrics.accuracy_score(ytest, predictions)

标准的东西,但问题就在这里。正如您在下面看到的,分数高得令人难以置信。实际结果(没有显示代码,但只是关于预测与 Y 列的基本报告)是预测有 3621 行属于该类。其中,只有 299 个确实是(真正的阳性)。没有什么比 99% 的准确率更好的了。

score: 0.9942950664902702

num rows: 644004
Y == 1: 651
picked: 3621 | true positives: 299 | false positives: 3322

我不想将其标记为与 MultinomialNB 相关,因为我发现 RandomForestClassifier 给出了相同的结果。这个问题(或者我的问题)似乎与评分函数本身有关。

最佳答案

这听起来像是一个教科书示例,说明了为什么准确性对于严重不平衡的数据集没有意义

从您提供的汇总统计数据中可以清楚地看出,您的(测试)数据集严重不平衡:在 644004 个样本中,只有 651 个属于正类,或者只有 0.1%(我打赌您的训练集的组成是相似的)。

在这种情况下,很容易证明你得到的准确度确实是现实的(只是没有意义);从准确度的定义来看:

acc = (correctly classified samples)/(total samples)

= (total samples - FP - FN)/(total samples)

忽略您未提供任何信息的漏报 (FN),我们得到:

(644004 - 3322)/644004
# 0.9948416469462923

正如预期的那样,仅略高于您报告的准确度(因为我没有考虑到您也肯定会得到的假阴性 -FN-),但仍在 99% 的范围内。底线是您的准确性是正确的,但无用(即不会告诉您有关模型的任何有用信息)。

<小时/>

您应该开始搜索“类别不平衡”,这是一个单独的(且巨大的)子主题,有其自身的特点。直观地说,准确性在这里毫无意义,因为正如您自己的数据所清楚证明的那样,根据数据训练的分类器可以报告其中正类别(通常是感兴趣的类别)仅占所有样本的 0.1%通过简单地将每个样本分类为属于负类,准确率达到 99.9%(这并不完全是这里发生的情况,但希望您能明白这一点)。特殊方法和不同的指标(精度、召回率、F1 分数等)适用于不平衡的数据集......

关于python - sklearn 的metrics.accuracy_score 的结果似乎是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51659383/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com