且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

使用 scikit-learn 玩转机器学习——模型评价(上)

更新时间:2022-04-19 04:25:50

对于分类模型来说,我们一般会用模型的准确率来进行模型的评价,模型的准确率是用预测正确的样本数除以模型的总数。如果一个模型的准确率达到了95%,那么在我们的印象中,是不是这个模型表现的还挺不错的,那如果达到了99%呢,岂不是更好?


但是,在样本类别不平衡的情况下,仅仅使用模型的准确率并不能体现出模型的优劣。


就拿微博抽奖来举个栗子,IG 夺冠时王思聪发微博称:点赞、转发本条庆祝 IG 夺冠的微博可以参与获奖者每人一万的抽奖。假设10000人参与了该活动,共抽取了10名幸运者。现在问题来了,这次抽奖也成功的吸引了你女票的注意,她也知道你在机器学习领域浸淫多年,于是就命令你去建一个机器学习模型来预测她拿奖的准确率,通过研究中奖用户的特征来以此保证她下次一定抽中奖,不然就跟你分手。你一听慌了,一宿没睡狂撸代码,第二天一大早就拿着自己的劳动成果去邀功请赏,宣称你的模型准确率能到达99%,你女友一听脸色顿时铁青......于是你成了单身狗,可怜的是你居然还不知道到底出了什么问题。


好了,段子讲完了,言归正传。你想想,10000 个人抽10个人,中奖率都 0.1%,那么最朴素的一个模型就是无论是谁,我都宣称他的中奖率为0.1%,就这,这样的模型的准确率都能达到99.9%,那么准确率为99%的模型简直不要太垃圾好吧!你说你不单身谁单身。这同时也说明了,单一的使用准确率来评价分类模型的好坏是不严谨的,那么接下来就进入我们今天的正题。


混淆矩阵

使用 scikit-learn 玩转机器学习——模型评价(上)

我们拿二分类问题来举个栗子,上图中行代表真实值,列代表预测值,0、1分别代表我们研究的2个种类。预测正确为 True,用 T 表示,预测错误为 False,用 F 表示,预测为0类,我们称其呈阴性,用 N 表示,预测为1类被称为阳性,用 P 表示。在上表中合起来就是 TN、TP、FN、FP这四个值。下表就是上述提到的微博抽奖的混淆矩阵的其中一种情况。

使用 scikit-learn 玩转机器学习——模型评价(上)


在上表中,实际上没中奖同时也预测正确的人数,即TN值为9978,实际上中奖了也预测正确人数,即TP值为8,没中奖且预测错误的人数,即FP值为12,中了奖但预测错误的人数,即FN值为2.