百面机器学习(2)——模型评估
目录
模型评估的方法(Holdout检验,交叉验证,自助法,微积分)
评估指标的局限性(准确率,精确率,召回率,均方根误差)
在模型评估过程中,分类问题、排序问题、回归问题往往需要使用不同的指标进行评估。在诸多的评估指标中,大部分指标只能片面地反映模型的一部分性能。 如果不能合理地运用评估指标,不仅不能发现模型本身的问题,而且会得出错误的结论。
1. 准确率的局限性(1)
准确率是指分类正确的样本占总样本的比例。
当正负样本不均衡的时候,如负样本占99%,正样本占1%,模型全部把数据分成了负样本,这样准确率是99%,这时候明显只用准确率来评估模型是不可行的。——这时候可以用平均准确率来评估,即使用每一类样本的准确率的算数平均。
2. 精确率与召回率的权衡(1)
精确率是指分类正确的正样本个数占分类器判断是正样本的样本个数的比例。
召回率是指分类正确的正样本个数占真正的正样本个数的比例。
在排序问题中,通常没有一个确定的阈值把得到的结果直接判定为正样本或负样本,而是采用 Top N 返回结果的 Precision 值和 Recall 值采衡量排序模型的性能,即认为模型返回的 Top N 的结果就是模型判定的正样本,然后计算前 N个位置上的准确率 [email protected] 和前 N个位置上的召回率 [email protected]。
只用准确率合召回率不能很好反应模型的性能,可以结合P-R曲线的整体表现来对模型进行评估。除此之外,F1 score和ROC曲线也能综合地反映一个排序模型的性能。F1 score是精确率和召回率的调和平均值,定义为:
3. 平方根误差的“意外”(1)
做预测回归问题,使用平方根误差(Root Mean Square Error, RMSE)总是居高不下,然而该模型在95%区间的预测误差都小于1%。
一般情况下, RMSE 能够很好地反映回归模型预测值与真实值的偏离程度。然而在实际问题中,如果存在个别偏离程度非常大的离群点( Outlier )时,即使离群点数量非常少,也会让 RMSE 指标变得很差。所以可以从三个角度来思考:
1)如果我们认定这些离群点是“噪声点”的话,就需要在数据预处理的阶段把这些噪声点过滤掉。
2)如果不认为这些离群点是“噪声点”的话,就需要进一步提高模型的预测能力,将离群点产生的机制建模进去。
3)找到一个更适合的指标来评估该模型。如平均绝对百分比误差(Mean Absolute Percent Error, MAPE),它定义如下,相比RMSE, MAPE相当于把每个点的误差进行了归一化,降低了个别离去点带来的绝对误差的影响。
ROC曲线(曲线下的面积AUC,P-R曲线)
1. 什么是ROC曲线(1)
ROC 曲线是 Receiver Operating Characteristic Curve 的简称,中文名为“受试者工作特征由线“。
ROC 曲线的横坐标为假阳性率( False Positive Rate, FPR ),纵坐标为真阳性率( True Positive Rate, TPR )。FPR 和 TPR 的计算方法分别为:
FPR=FP/N
TPR=TP/P
其中P是真实的正样本数量,N是真实的负样本数量,TP是P个正样本数量中被分类器预测为正样本的个数,FP是N个负样本中被分类器预测为正样本的个数。
2. 如何绘制ROC曲线?(2)
ROC 曲线是通过不断移动分类器的“截断点”来生成曲线上的一组关键点的。所谓“截断点“可以理解为一系列阈值:预测概率大于该阈值的样本被判为正例,小于该阈值的样本判为负例。
在二值分类问题中,模型的输出一般都是预测样本为正例的概率。假设测试集中有20个样本,下表是模型的输出结果。样本按照预测概率从高到低排序。在输出最终的正例、负例之前,我们需要指定一个阈值,预测概率大于该阈值的样本会被判为正例,小于该阈值的样本则会被判为负例。 比如,指定阈值为 0.9,那么只有第一个样本会被预测为正例,其他全部都是负例。 上面所说的 “截断点”指的就是区分正负预测结果的阈值。通过动态地调整截断点,从最高的得分开始(实际上是从正无穷开始,对应着 ROC 曲线的零点),逐渐调整到最低得分,每一个截断点都会对应一个 FPR和 TPR,在 ROC 图上绘制出每个截断点对应的位置,再连接所有点就得到最终的 ROC 曲线。
就本例来说,当截断点选择为正无穷时,模型把全部样本预测为负例,那么 FP 和 TP 必然都为 0, FPR 和 TPR 也都为 0 ,因此曲线的第一个点的坐标就是( 0,0 )。当把截断点调整为 0.9 时,模型预测1号样本为正样本,并且该样本确实是正样本,因此,TP=1, 20 个样本中,所有正例数量为 P=10 ,故 TPR=TP/P=1/10;这里没有预测错的正样本,即 FP=0 ,负样本总数 N=10 ,故 FPR=FP/N=0/10=0 ,对应 ROC 曲线上的点( 0,0.1 )。依次调整截断点,直到画出全部的关键点,再连接关键点即得到最终的 ROC曲线。如下图。
3. 如何计算AUC?(2)
AUC指的是ROC曲线下面积大小该值能够量化地反映ROC曲线衡量出的模型性能。计算AUC值只需要沿着ROC横轴做积分就可以了。由于 ROC 曲线一般都处于y=x 这条直线
的上方(如果不是的话,只要把模型预测的概率反转成 1-p 就可以得到一个更好的分类器),所以 AUC 的取值一般在 0.5 ~ l 之间。 AUC越大,说明分类器越可能把真正的正样本排在前面,分类性能越好。
4. ROC曲线相比P-R曲线有什么特点?(3)
相比 P-R 曲线,ROC 曲线奇一个特点,当正负样本的分布发生变化时,ROC 曲线的形状能够基本保持不变,而 P-R 曲线的形状一般会发生较剧烈的变化。如下图(a)和(c)是ROC曲线,(b)和(d)是P-R曲线,其中(c)和(d)是将测试集中负样本数量增加10倍后的曲线图。
所以使用ROC曲线能够尽量降低不同测试集带来的干扰,更加客观地衡量模型本身的性能。ROC曲线被广泛应用于排序、推荐、广告等领域。如果想看到模型在特定数据集上的表现,P-R曲线能够更直观地反映其性能。
余弦距离的应用(余弦相似度,余弦距离,欧式距离)
在模型训练过程中,我们也在不断地评估着样本间的距离,如何评估样本距离也是定义优化目标和训练方法的基础。
在机器学习问题中,通常将特征表示为向量的形式,所以在分析两个特征向量之间的相似性时,常使用余弦相似度来表示。余弦相似度的取值范围是[-1,1],相同的两个向量之间的相似度为1。 如果希望得到类似于距离的表示,将1减去余弦相似度即为余弦距离。因此, 余弦距离的取值范围为[0,2],相同的两个向量余弦距离为 0。
1. 结合你的学习和研究经历,探讨为什么在一些场景中要使用余弦度而不是欧式距离?(2)
对两个向量A和B,其余弦相似度定义如下,即两个向量夹角的余弦,关注的是向量之间的角度关系,并不关系它们的绝对大小,取值范围是[-1,1]。
总体来讲,欧式距离体现数值上的绝对差异,而余弦距离体现在方向上的差异。
当在文本、图像、视频等领域,研究对象的特征维度往往很高,此时使用余弦相似度在高维情况下依然保持“相同时为1,正交时为0,相反时为-1“的性质,而欧式距离的数值则受到维度的影响,范围不固定,并且含义也比较模糊。
在一些特定场景,如Word2Vec中,其向量的模长是经过归一化的,此时欧氏距离与余弦距离有着单调的关系,使用两者距离结果相同。
统计两部剧的用户观看行为,用户A的观看向量为(0,1),用户B的观看向量为(1,0),此时用余弦距离;
当分析用户活跃度,以登录次数和平均观看时长作为特征时,余弦距离会认为(1,10),(10,100)两个用户很近;但是显然这两个用户活跃度有着极大差异的,所以此时选择欧式距离。
2. 余弦距离是否时一个严格定义的距离?(3)
距离的定义:在一个集合中,如果每一对元素均可唯一确定一个实数,使得三条距离公理(正定性,对称性, 三角不等式)成立,则该实数可称为这对元素之间的距离。
余弦距离满足正定性和对称性,但是不满足三角不等式(简单理解是三角形两边和大于第三边。如A,B,C三个点dist(A,B)+dist(B,C)<dist(A,C),则说其不符合三角不等式定理),因此不是严格意义的距离。
在机器学习领域,KL距离(Kullback-Leibler Divergence),也叫做相对熵,常用于计算两个分布之间的差异,但是不满足对称性和三角不等式。
A/B测试的陷阱(实验组,对照组)
在机器学习领域,A/B测试是验证模型最终效果的主要手段。
1. 在对模型进行过充分的离线评估后,为什么还要进行在线A/B测试?
需要进行在结 A/B 测试的原因如下 。
1)离结评估无法完全消除模型过拟台的影响,因此,得出的离线评估结果无法完全替代线上评估结果。
2)离线评估无法完全还原线上的工程环境。一般来讲,离线评估往往不会考虑线上环境的延迟、数据丢失、标签数据缺失等情况。 因此,离线评估的结果是理想工程环境下的结果。
3)线上系统的某些商业指标在离结评估中无法计算。离线评估一般是针对模型本身进行评估,而与模型相关的其它指标,特别是商业指标,往往无法直接获得。 比如,上线了新的推荐算法,离线评估往往关注的是 ROC 由线、 P-R 曲线等的改进,而线上评估可以全面了解该推荐算法带来的用户点击率、留存时长、 PV 访问量等的变化。这些都要由 A/B 测试来进行全面的评估。
2. 如何进行线上A/B测试?(1)
进行 A/B 测试的主要手段是进行用户分桶,即将用户分成实验组和对照组,对实验组的用户施以新模型,对对照组的用户施以旧模型。在分桶的过程中,要注意样本的独立性和采样方式的无偏性,确保同一个用户每次只能分到同一个桶中,在分桶过程中所选取的 user id 需要是一个随机数,这样才能保证桶中的样本是无偏的。
3. 如何划分实验组和对照组?(2)
确定实验对象,以用户ID 为依据进行平均划分,如ID个位数为奇数和为偶数。确保实验组和对照组要无偏,不要多加入无关数据稀释实验结果。
模型评估的方法(Holdout检验,交叉验证,自助法,微积分)
1. 在模型评估过程中,有哪些主要的验证方法,它们的优缺点是什么?
Holdout检验:提前将原始样本集随机分成训练集和验证集两部分,如常见的7:3。
交叉验证:首先将全部样本划分成k个大小的样本子集一次遍历这k个子集,每次把当前子集作为验证集,其余子集作为训练集,进行模型的训练和评估;最后把k次评估的平均值作为最终的评估指标。实际实验中,k经常取10。
自助法:当样本规模比较小时,将样本集进行划分会让训练集进一步减小,这可能会影响模型训练效果。自助法是基于自主采样法的验证方法。对于总数为n的样本集合,进行n次有放回的随机抽样,得到大小为n的训练集。n 次采样过程中,有的样本会被重复采样,有的样本没有被抽出过,将这些没有被抽出的样本作为验证集,进行模型验证,这就是自助法的验证过程。
2. 在自助法的采样过程中,对n个样本进行n次自助抽样,当n趋于无穷大时,最终有多少数据从未被选择过?(3)
一个样本在一次抽样过程中未被抽中的概率为(1-1/n),n次抽样均未被抽中的概率为(1-1/n)n。当n趋于无穷大时,根据下面极限定理,所以n次均未被抽中的概率时1/e≈0.368。
因此当样本数很大时候,大约有36.8%的样本从未被选择过,可作为验证集。
关于自助法有点疑问:这样大约36.8%未被抽中的作为验证集进行模型训练,和我们一开始就随机分为63.2%:36.8%的比例分训练集和验证集有什么区别?
超参数调优
1. 超参数有哪些调优方法?(3)
在具体介绍算法之前,需要明确超参数搜索算法一般包括哪几个要素。
- 目标函数,即算法需要最大化/最小化的目标
- 搜索范围,一般通过上限和下限来确定
- 算法的其它参数, 如搜索步长。
网格搜索:有很大概率找到全局最优,但是十分消耗计算资源和时间。一般先使用较大的搜索范围和步长,找到全局最优值可能的位置,然后逐渐缩小搜索范围寻找更精确的最优值。这种操作方案可以降低所需时间和计算量,但是由于目标函数一般是非凸的,所以很可能会错过全局最优值。
随机搜索:比网格搜索更快,但是结果也是没法保证的
贝叶斯优化算法:,首先根据先验分布,假设一个搜集函数,然后,每一次使用新的采样点来测试目标函数时,利用这个信息来更新目标函数的先验分布;最后,算法测试由后验分布给出的全局最值最可能出现的位置的点。对于贝叶斯优化算法,有一个需要注意的地方,一旦找到了一个局部最优值,就会在该区域不断采样,所以很容易陷入局部最优值。为了弥补这个缺陷,贝叶斯优化算法会在探索和利用之间找到一个平衡点,“探索”就是在还未取样的区域获取采样点;而“利用”则是根据后验分布在最可能出现全局最值的区域进行采样。
过拟合与欠拟合
1. 在模型评估过程中,过拟合和欠拟合具体是指什么现象?(1)
过拟合:模型在训练集表现好,在测试集和新数据上表现差
欠拟合:模型在训练集合预测时表现都不好。
2. 能否说出几种降低过拟合和欠拟合风险的方法?(2)
降低“过拟合“的方法
- 扩增数据集
- 降低模型复杂度
- 正则化方法
- 集成学习的方法
降低“欠拟合“风险的方法
- 添加新特征
- 增加模型复杂度
- 减小正则化系数