基础机器学习指标(多数用于二分类)
准确率、精确率、召回率
在了解基础机器学习指标中的准确率、精确率、召回率、AUC曲线等指标之前,我们首先要了解以下几个概念:
P(Positive):正例数
N(Negative):负例数
例如这一组预测集[0,1,1,1,0,1,0,0,1,1]其中标1的为正例,正例数为6个;标0的为负例,负例数为4。
TP(True Positive 真正例):将正类预测为正类的个数
FN(False Negative 假负例):将正类预测为负类的个数
FP(False Positive假正例):将负类预测为正类的个数
TN(True Negative 真负例):将负类预测为负类的个数
如上图所示,所有的正例就是TP+FN,所有的负例就是FP+TN。
清楚了以上概念之后,我们来看几个公式:
准确率(Accuracy)即被正确预测的正负例(真正例TP+真负例TN)在整个预测集中所占的比例。在很多情况下,只看模型的准确率是不够的,假如总共有1000个样本,999个都是负例,只有1个是正例,则模型只需要将所有的输出都为False,这时它的准确率就高达99.9%了。即便将某几个负例预测为正例,也无法改变准确率在99%左右徘徊。所以针对这种情况,需要用到精确率。
精确率(Precision)也叫查准率,即被正确预测为正例(真正例TP)在所有被预测为正例中所占的比例,如下表,精确率(Precision)=TP/(TP+FP)=5/(5+1)=83.3%,其中 TP可以认为就是用户真实喜欢的物品,而FP是用户不喜欢的物品被模型预测成喜欢并推荐给了用户,所以精确率其实是最能离线模拟在线点击率的一个指标。上述1000个样本的这种情况,如果一个正例都没预测对,则分子就是0了,所以精确率会直接成0,而不会出现 99%这种值。即使分对了几个,分母的基础TP仅仅是10,而万一将几个负例也分成正例,那么分母还得加上几个FP,这种情况下精确率也不会高的离谱。所以在推荐系统中精确率远比准确率有参考价值。
数据 | ||||||||||
物品ID | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
是否喜欢 | T | T | T | F | T | F | T | T | F | T |
预测结果 | F | T | T | F | F | F | T | T | T | T |
召回率(Recall)又叫查全率,即被预测正确的正例(真正例TP)在所有正例中所占的比例。召回率(Recall)=TP/(TP+FN)=5/(5+1)=83.3%。分母的 TP+FN 其实就是所有的正例,所以召回率评测的是有没有将用户所有喜欢的物品充分挖掘出来并且匹配给到用户。这也是为什么推荐系统的召回层中文名叫召回层,而不叫匹配层的原因(召回层的英文名叫 MatchingLayer)。因为推荐系统最好在召回层使用一些召回率高且快速的模型,尽可能的将用户喜欢的物品挖掘出来。然后再交由排序层排序,排序层的模型重点追求的是点击率也就是精确率。
F1指标
F-Measure是精确度与召回率的调和平均数,如果对调和平均数不甚了解,大家可直接认为F1分数就是综合考虑精确度与召回率的一个评价指标即可。
其中,P 为准确率,R 为召回率,当参数α=1 时,就是最常见的 F1,也即
补充知识:
调和数列:如果一个数列各项取倒数后成等差数列,则原数列就称为调和数列,即和谐的一列数。例如:1/2,1/3,1/4各项取倒数后得2,3,4显然是等差数列。所以原数列是调和数列。
调和平均数:调和数列取倒数后算术平均数的倒数,其计算公式如下:
精确率与召回率都是0到1之间的数字,调和平均数更能体现其综合期望信息。
均方误差(MSE)
其中A代表所有样本组,rui代表用户u与物品i的真实交互评分。r^ui代表用户u与物品i的预测交互评分。实际上就是平方差损失函数,每个样本组的平方差损失函数累加起来。
均方根误差(RMSE)
就是均方误差开平方,取值较前者更加平滑,应用得较多。
平均绝对误差(MAE)
综合来说MSE、RMSE、MAE都是平方差损失函数的变形,属于将损失函数作为评价。
Log Loss
交叉熵损失函数:
其中N是样本数,M为类别数。yi 是第i个样本为第j个类别的真实标注,如果第i个样本是类别j则yij
为1否则为0。pi
是预测第i个样本是否为第j个类别的概率。这是多分类的Log Loss损失函数,下边这个公式是二分类的Log Loss损失函数,也就是只有两个类别,当M=2的时候:
ROC曲线
ROC曲线是以曲线的形式来评价二分类模型的好坏,组成该曲线的点横纵坐标分别是不同阈值下的FPR与TPR。
FPR(False Positive Rate )是负类样本中分类错误的样本比例,计算公式如下:
TPR(True Positive Rate)是正类样本中分类正确的样本比例(也就是召回率),计算公式如下:
那么,何为阈值呢?所谓不同的阈值,指的是切分预测分数中的正负例,例如预测值>0.6的算作正例,反之算作负例,则阈值就为0.6。之前一直简单的将0.5作为阈值去切分预测分数,而ROC的评估方式是综合考虑了所有阈值的情况,可以避免因阈值切分不均衡而造成的评估不准确问题。
接下来的问题,如何通过ROC曲线来判断模型的性能好坏呢?首先,TPR这个参数就是召回率,越高越好;FPR这个参数负类样本中分类错误的样本的比例,越低越好。所以一个好的模型的ROC曲线,其横坐标FPR应该更靠近于0,其纵坐标TPR应该更靠近1
下边是一个ROC曲线图,Diagonal是参考对角线,这条ROC曲线集中在参考对角线的左上方,所以它相对应的模型的性能较好
这个ROC曲线集中在了参考对角线附近,由于是二分类,所以这个模型几乎就是随机预测,像抛硬币一样预测正确的概率接近50%。
而这个ROC曲线集中在参考对角线的下半部分,说明它对应的模型还不如随即预测,毫无用处,但将这个模型的正负例调换一下,再去训练,得到的曲线就会集中在参考对角线的上方,所以在实际情况中,遇到这种模型还是要比遇到上边那种随机预测的模型要好的。
思考一下,我们要绘制ROC曲线,就必须在我们的数据中去不断调节阈值,不断求解混淆矩阵,然后不断获得我们的横坐标和纵坐标,最后才能够将曲线绘制出来。所以ROC曲线是以(0,0)为起点(1,1)为终点的曲线,因为阈值为1时,这个点一定在(0,0),
因为只有预测分数高于1的才能被预测为正例,故没有应该被预测为正例,FPR和TPR就都为0;反之,阈值为0时,FPR与TPR都为1,这个点就在(1,1)。
AUC
AUC就是ROC曲线与坐标轴围成的面积,由上述可知,ROC曲线越靠近左上方越好,故可得ROC曲线与坐标轴围成的面积越大越好。因为横纵坐标的取值范围都在0到1内,故AUC的取值也在0到1内(越大越好),这个特点就可以很直观地表现出这个模型的好坏。
AUC的计算公式其实就是ROC曲线的积分公式:
也可以理解成n块矩形面积的和:
这些只是一些基础的机器学习指标,后续还会发布TOP K指标,以及一些常见的其它推荐系统指标,欢迎各位大佬指出错误。