简 介:下面是我在学习时候的记录并加上自己的理解。本文意在记录自己近期学习过程中的所学所得,如有错误,欢迎大家指正。
关键词:Python、机器学习
1.什么是混淆矩阵
在机器学习中,我们经常遇到分类的问题,比如银行预测违规用户,那么就会有两个分类,分别是正常用户和违规用户,可以用数学表示就是-1,1,-1代表负类,1代表正类。那么什么是正类和负类呢?正类就是在我们业务需求中我们我们要的、注重的分类,对于银行用户来说,正常用户就是正类,非正常就是负类,但这也不是绝对的,正类和负类就是一个对立的概念,不一定就是说谁是正类、谁是负类,看我们的实际需求。
那么说回来,我们的预测模型不是完全精确的,肯定是会有预测失误的时候,比如将正类预测为负类,负类预测为正类,举个例子,有10个人,其中有4个好人和6个坏人,我们的模型对这10个人的判定结果为4个好人中,有3个被正确识别为好人,但是有1个被误判为坏人,对应6个坏人,模型判定4个为坏人,将另外两个误认为好人,这是模型就会有误差,10个人中,有3个识别错误,另外7个是正确的。由于这是典型的二分类问题,我们就很容易的采用矩阵的方式进行描述,这也就引出了混淆矩阵。
从上面的矩阵中很容易看出:
4个好人有3个被预测为好人,有1个别误认为坏人
6个坏人中有2个被预测为好人,有4个被正确认为是坏人
2.相关名词解释
从上面的图中我们可以清晰地看出每个数据被预测的所属类别,那么我们如何评估模型的好坏呢?这是就引入了几个数学名词:
- 真正性(True Positive,TP):样本的真实类别是正例,并且模型预测的结果也是正例
- 真负性(True Negative,TN):样本的真实类别是负例,并且模型将其预测成为负例
- 假正性(False Positive,FP):样本的真实类别是负例,但是模型将其预测成为正例
- 假负性(False Negative,FN):样本的真实类别是正例,但是模型将其预测成为负例
上面的3就是真正性,1就是假负性,2就是假正性,4就是真负性
从字面很好理解,第一个字真假就是代表这个类别的预测结果是否正确,第二个字正负就代表最终预测为正类还是负类
通常情况下,我们评估模型好坏的指标就是模型的准确率怎么样,也就是(TP+TN)/ ALL,但是这样有时侯不一定真正代表模型的效果就很好,你比如说现在我们有100个人,其中好人有99个,坏人只有1个,此时如果模型不做任何事,只需要把任何人都辨识为好人,我们的模型的准确率就有99%,但是这样显然不科学,因为这样的模型没有把坏人认出来,因为在显示生活我们很多时候注重的是模型对负类的识别,宁错杀100也不放过任何1个怀疑的对象,所以这种情况下准确率这种评估指标显然是不行的,我们需要的指标是识别坏人的准确性的指标。
下面的指标仍然针对上述表进行计算:
- 准确率(accuracy):(TP+TN)/ ALL =(3+4)/ 10 准确率是所有预测为正确的样本除以总样本数,用以衡量模型对正负样本的识别能力。
- 错误率(error rate):(FP+FN)/ ALL =(1+2)/ 10 错误率就是识别错误的样本除以总样本数。
- 假正率(fpr):FP / (FP+TN) = 2 / (2+4)假正率就是真实负类中被预测为正类的样本数除以所有真实负类样本数。
- 真正率(tpr):TP / (TP+FN)= 3 / (3+1)真正率就是真实正类中被预测为正类的样本数除以所有真实正类样本数。
- 精度(precision):TP / (TP+FP)= 3 / (3+2)精确度是真实分类被预测为正类的样本数除以所有被预测为正样本的个数
- 召回率(recall):TP / (TP+FN)= 3 / (3+1)召回率和灵敏度、假正率是一回事,就是不同的称呼名称
- 灵敏度(sensitive):TP / (TP+FN)= 3 / (3+1)灵敏度是预测为正类的样本数除以所有真实正类样本数,用于衡量模型对正类样本的识别能力。
- 特效度(specificity):TN / (TN+FP) = 4 / (2+4)特效度是预测为负类的样本数除以所有真实负类样本数,用于衡量模型对负类样本的识别能力。
根据我们不同的业务需求,我们需要使用不同的评估指标进行衡量模型的效果,不一定是准确率越高,模型的效果越好,要根据实际需求,综合多个模型评估指标。