AI目录:sheng的学习笔记-AI目录-CSDN博客
分类准确度问题
假设有一个癌症预测系统,输入体检信息,可以判断是否有癌症。如果癌症产生的概率只有0.1%,那么系统预测所有人都是健康,即可达到99.9%的准确率。
但显然这样的机器学习系统是失败的,因为对于极度偏斜(Skewed Data)的数据,只使用分类准确度是远远不够的。
针对这样的问题,我们需要引入其他指标来评估机器学习分类结果的好坏。
混淆矩阵
对于二分类问题,混淆矩阵是2x2,分别是0和1,其中每一行代表真实值,每一列代表预测值
- TP:True Positive。预测为1,实际为1,预测正确。
- FP:False Positive。预测为1,实际为0,预测错误。
- FN:False Negative。预测为0,实际为1,预测错误。
- TN:True Negative。预测为0,实际为0,预测正确。
指标
取值范围
这几个指标的取值都在0-1之间,数值越接近于1,效果越好
精度
预测数据中预测正确的数量就是精准率,检索出来的条目有多少是正确的
召回率
真实发生数据预测正确的数量就是召回率,所有正确的条目有多少被检索出来
F1Score
F1Score指标就是综合精准率和召回率两个指标,只有当召回率和精度都很高时,分类器才能得到较高的F1分数
ROC曲线
首先引入两个指标,误报率(FPR)和召回率(TPR)。
其中FPR = ,它是指是被错误地预测为正类的样本占所有实际为负类的样本的比例。TPR = ,它是指被正确地预测为正类的样本占所有实际为正类的样本的比例。
举例:
某池塘有1400条鲤鱼,300只虾,300只鳖。现在以捕鲤鱼为目的,撒一大网,逮着了700条鲤鱼,200只虾,100只鳖,那么这些指标如下:
①.正确率:700/(700+200+100)=70%
②.召回率:700/1400=50%
③.F值:2*((70*50)/(70+50))=58.3%
代码
sklearn的精准和找回代码
>>> from sklearn.metrics import precision_score, recall_score
>>> precision_score(y_train_5, y_train_pred) # == 4096 / (4096 + 1522)
0.7290850836596654
>>> recall_score(y_train_5, y_train_pred) # == 4096 / (4096 + 1325)
0.7555801512636044
f1的代码
>>> from sklearn.metrics import f1_score
>>> f1_score(y_train_5, y_train_pred)
0.7420962043663375
指标对比分析
F1分数对那些具有相近的精度和召回率的分类器更为有利。
这不一定能一直符合你的期望:在某些情况下,你更关心的是精度,而另一些情况下,你可能真正关心的是召回率。
例如,假设你训练一个分类器来检测儿童可以放心观看的视频,那么你可能更青睐那种拦截了很多好视频(低召回率),但是保留下来的视频都是安全(高精度)的分类器,而不是召回率虽高,但是在产品中可能会出现一些非常糟糕的视频的分类器(这种情况下,你甚至可能会添加一个人工流水线来检查分类器选出来的视频)。
反过来说,如果你训练一个分类器通过图像监控来检测小偷:你大概可以接受精度只有30%,但召回率能达到99%(当然,安保人员会收到一些错误的警报,但是几乎所有的窃贼都在劫难逃)。遗憾的是,鱼和熊掌不可兼得,你不能同时增加精度又减少召回率,反之亦然。这称为精度/召回率权衡。
由于ROC曲线与精度/召回率(PR)曲线非常相似,因此你可能会问如何决定使用哪种曲线。有一个经验法则是,当正类非常少见或者你更关注假正类而不是假负类时,应该选择PR曲线,反之则是ROC曲线。
参考文章:
机器学习评估分类结果——精准率、召回率、F1Score_f1 score-CSDN博客
第三章.逻辑回归—正确率/召回率/F1指标,非线性逻辑回归代码_正确率 召回率-CSDN博客
蜥蜴书:机器学习实战