混淆矩阵
混淆矩阵是对有监督学习分类算法准确率进行评估的工具。通过将模型预测的数据与测试数据进行对比,使用准确率,覆盖率和命中率等指标对模型的分类效果进行度量。
在这里,Positive表示为1的值,在测试集中的表示已购买。Negative则表示未购买。
- True Positive简称TP,表示测试集中是Positive,模型预测结果是Positive的数据条目。
- False Positive简称FP,表示测试集中是Negative,模型预测结果是Positive的数据条目。
- False Negative简称FN,表示测试集中是Positive,模型预测结果是Negative的数据条目。
- True Negative简称TN,表示测试集中是Negative,模型预测结果是Negative的数据条目。
正确率(accuracy)
预测正确的样本(TN+TP)占样本(TN+TP+FN+FP)的比例。即正确预测结果占样本的比例。
正确率 = (TN+TP)/ (TN+TP+FN+FP)
精确率(precision)
在所有预测的1类的样本(TP+FP)中,预测正确的样本(TP)所占有的比例。即真实购买了并预测为已购买的人数在所有预测出已购买人数中的占比
精确率 =TP /(TP+FP)
召回率(recall)
即真实购买了并预测为已购买的人数在真实数据中已购买的总人数中的占比
召回率 =TP /(TP+FN)
精准率和召回率有什么用?
在倾斜比较厉害的数据样本中,高的准确率已经不足以来判断一个模型的性能好坏。这个时候,我们就要用到精准率和召回率了。
什么是倾斜比较厉害的数据呢?就是对于分类问题来说,有些分类样本在总样本中数量远远大于其他分类样本。 比如10000个样本里面,有9900都是0类,只有100个是1类的数据样本 。
举个例子。
假设10000个人中患癌的人占比为0.1%,那么健康的人占比为99%,在这种情况下,有极大的可能出现分类准确度为99.9%,但是实际上一个患癌的人都没有预测出来。
现在来看看分类准确度、精准率和召回率分别是多少:
- 分类准确度:9990 / 10000 = 99.9%
- 精准率:0 / (0+0),无意义,既为0
- 召回率:0 / (10 +0) = 0
可以很清晰的看出分类准确度存在的缺陷和混淆矩阵对分类评价的重要性。
F1 Score(调和平均值)
我们看多个数的综合情况时,一般情况都会求这些数的平均值,称为算数平均值。但是在机器学习中,算数平均值是有缺陷的,因为它们是求和然后取平均,如果大多数数很大,个别几个数很小的话,平均值并不会被拉下来,但作为机器学习模型的评测标准,可能只要有一个指标不好,那么整个模型就不是一个好的模型。所以我们得使用调和平均值:
调和平均值的最大特点就是,精准率和召回率只要有一个比较小的话,整个F1 Score也会被拉下来,既避免了算数平均值在评估机器学习算法分类模型时的缺陷。
from sklearn.metrics import f1_score
f1_score(y_test, y_predict)
ROC曲线、AUC值
ROC全称是“受试者工作特征”(Receiver Operating Characteristic)。ROC曲线的面积就是AUC(Area Under the Curve)。AUC用于衡量“二分类问题”机器学习算法性能(泛化能力)。
TPR(True Positive Rate)
样本中的真实正例类别总数即TP+FN。
TPR = TP/(TP+FN)
FPR(False Positive Rate)
同理,样本中的真实反例类别总数为FP+TN。
FPR=FP/(TN+FP)
截断点
机器学习算法对test样本进行预测后,可以输出各test样本对某个类别的相似度概率。比如t1是P类别的概率为0.3,一般我们认为概率低于0.5,t1就属于类别N。这里的0.5,就是”截断点”。
截断点
取不同的值,TPR
和FPR
的计算结果也不同。将截断点
不同取值下对应的TPR
和FPR
结果画于二维坐标系中得到的曲线,就是ROC曲线。横轴用FPR表示。