在计算机科学特别是机器学习领域中,对模型的评估至关重要。只有选择与问题相匹配的评估方法,才能快速地发现模型选择或训练过程中出现的问题,迭代地对模型进行优化。
1、评估指标的局限性
在模型评估过程中,分类问题、排序问题、回归问题往往需要使用不同的指标进行评估。在诸多的评估指标中,大部分指标只能片面地反映模型的一部分性能。 如果不能合理地运用评估指标 ,不仅不能发现模型本身的问题,而且会得出错误的结论。
1.1、准确率这一指标有何局限性?
- 我的回答:
准确率又称为精度,是我们解决分类问题时最常用来衡量结果好坏所用的指标。其定义如下:
准确率的局限性在于不能很好地处理不平衡样本(Unbalanced Sample)的情况,比如我们的训练样本中99%都是正例,只有1%是负例,那么即使我们的分类器将所有样本类别预测为正,也有99%的准确率,但很显然,这个模型并不好,尤其是我们特别关注的是1%的负例的时候(比如安检时的恐怖分子筛查、对一些症状不明朗的病人进行确诊等等)。
- 参考答案:
通过实例阐述了我的回答。
1.2、为什么要权衡精确率与召回率?如何权衡?
- 我的回答:
1、关于精确率与召回率,我昨天刚看了一篇博客,讲解得很清晰了,博客中举了登机前恐怖分子筛查的例子。每年100万的乘客中,有18名恐怖分子,这是典型的样本不平衡的情况,若采用准确率进行衡量,那么直接判定所有乘客均不是恐怖分子的模型将会获得接近1的准确率,但很明显这样的模型是无用的。
召回率(recall)定义如下:
在本例中对应的是18名恐怖分子中被筛查出来的比例。这一指标看似完美,但一个将所有乘客标为恐怖分子的模型的召回率为1,但显然,这样的模型也是没有意义的。这时我们需要另一个指标来制衡。
精确率(precision)定义如下:
在本例中对应的是所有被模型标为恐怖分子的人中有多少比例真的是恐怖分子。在保证召回率较高的同时使得精确率也较高就可以避免上述问题。
综上我们希望权衡精确率与召回率,使得两者都比较高。两个指标谁更重要视具体问题而定。
2、权衡精确率与召回率的方法有很多,包括曲线、曲线等,也可以使用指标:
也就是和两者的调和平均。
之所以使用调和平均而不是算术平均,是因为调和平均会惩罚极端值。比如下面两种情况:
为0.5,为0.5
为0,为1
若使用算术平均值两者一样好,但实际上第二种情况是我们应该避免的。调和平均可以帮我们避免这种情况的出现。
- 参考答案:
和我的回答差不多,额外补充了曲线的画法,这部分放在后面和曲线一起说。
1.3、无论采用哪种回归模型得到的RMSE指标都非常高。然而事实是模型在95%的时间内预测误差都小于1%,取得了相当不错的预测结果。造成RMSE指标居高不下的最可能的原因是什么?如何解决呢?
- 我的回答:
1、有少数噪声点和离群点使得RMSE指标非常高。
2、解决方案就是在清洗数据的时候把这些离群点过滤出去或者选用对离群点更稳健的指标。
- 参考答案:
1、一般情况下, RMSE能够很好地反映回归模型预测值与真实值的偏离程度。但在实际问题中,如果存在个别偏离程度非常大的离群点(Outlier)时,即使离群点数量非常少也会让RMSE指标变得很差。
2、解决方案如下:
1)如果我们认定这些离群点是“噪声点”的话,就需要在数据预处理的阶段把这些噪声点过滤掉 。
2)如果不认为这些离群点是“噪声点”的话,就需要进一步提高模型的预测能力, 将离群点产生的机制建模进去。
3)可以找一个更合适的指标采评估该模型。关于评估指标,存在比RMSE的鲁棒性更好的指标,比如平均绝对百分比误差(MAPE),其定义为:
相比RMSE,MAPE相当于把每个点的误差进行了归一化,降低了个别离群点带来的绝对误差的影响。
2、ROC曲线
二值分类器(BinaryClassifier )是机器学习领域中最常见也是应用最广泛的分类器。ROC曲线则经常作为评估二值分类器最重要的指标之一。
2.1、什么是ROC曲线?
- 我的回答:
ROC曲线是Receiver Operating Characteristic Curve的简称,中文名为“受试者工作特征由线”。
ROC曲线的横纵轴分别是什么记不清了……不过曲线下面积(AUC)越大说明模型效果越好。
- 参考答案:
ROC曲线的横坐标为假正率(False Positive Rate, FPR),纵坐标为真正率(True Positive Rate, TPR)。和的计算方法分别为:
更深入的理解来自这里:
结合西瓜书中关于ROC曲线的画法更容易理解上图ROC的形状:
2.2、如何绘制ROC曲线?
- 我的回答:
上图已经给出了详细的画法。
- 参考答案:
首先,根据样本标签统计出正负样本数量 ,假设正样本数量为,负样本数量为;接下来,把横轴的刻度间隔设置为,纵轴的刻度间隔设置为;再根据模型输出的预测概率对样本进行排序(从高到低);依次遍历样本,同时从零点开始绘制ROC曲线,每遇到一个正样本就沿纵轴方向绘制一个刻度间隔的曲线,每遇到一个负样本就沿横轴方向绘制一个刻度间隔的曲线,直到遍历完所有样本,由线最终停在这个点,整个ROC曲线绘制完成。
2.3、如何计算AUC?
- 我的回答:
所谓AUC就是曲线下面积(Area Under Curve),以上图为例,由于实际的ROC曲线是由折线构成的,因此直接计算各矩形面积累加即可。
- 参考答案:
计算AUC值只需要沿着ROC横轴做积分就可以了。由于ROC曲线一般都处于这条直线的上方(如果不是的话,只要把模型预测的概率反转成就可以得到一个更好的分类器),所以AUC的取值一般在之间。AUC越大 , 说明分类器越可能把真正的正样本排在前面,分类性能越好。
2.4、ROC曲线相比P-R曲线有什么特点?
- 我的回答:
ROC曲线的横轴是假正率,纵轴是真正率。
P-R曲线的横轴是精确率,纵轴是召回率(等于真正率)。
也就是说,两者的纵轴其实是相同的指标,不同的地方在于横轴。
至于由此导致的不同我就不太清楚了……
- 参考答案:
相比P-R曲线,ROC曲线有一个特点,当正负样本的分布发生变化时,ROC曲线的形状能够基本保持不变,而P-R曲线的形状一般会发生较剧烈的变化。
这个特点让 ROC 曲线能够尽量降低不同测试集带来的干扰,更加客观地衡量模型本身的性能。
3、余弦距离的应用
在机器学习问题中,通常将特征表示为向量的形式,所以在分析两个特征向量之间的相似性时常使用余弦相似度来表示。余弦相似度的取值范围是,相同的两个向量之间的相似度为1。如果希望得到类似于距离的表示,1减去余弦相似度即为余弦距离。因此余弦距离的取值范围为,相同的两个向量余弦距离为0。
3.1、为什么在一些场景中要使用余弦距离而不是欧氏距离?
- 我的回答:
因为欧氏距离易受量纲和取值范围影响,而余弦距离可以解决这个问题。
比如我们想寻找电影品味相近的观众,假设现在有两个观众及其对电影的评分,两人电影评分的排序完全相同,但观众打分区间在而观众打分区间在,这将导致两个观众的欧氏距离很大,从而得出两人观影品味并不相似的结果。
- 参考答案:
总体来说,欧氏距离体现数值上的绝对差异,而余弦距离体现方向上的相对差异。
例如,统计两部剧的用户观看行为,用户的观看向量为,用户为,此时二者的余弦距离很大, 而欧氏距离很小。我们分析两个用户对于不同视频的偏好更关注相对差异,显然应当使用余弦距离。 而当我们分析用户活跃度,以登陆次数和平均观看时长作为特征时,余弦距离会认为两个用户距离很近,但显然这两个用户活跃度是有着极大差异的,此时我们更关注数值绝对差异,应当使用欧氏距离 。
3.2、余弦距离是否是一个严格定义的距离?
- 我的回答:
一个严格定义的距离应当满足非负性、对称性和三角不等式。
显然余弦距离满足非负性和三角不等式,但其不满足三角不等式。因此不是一个严格定义的距离。
- 参考答案:
如上所述,三角不等式性质并不成立,因此余弦距离不是一个严格定义的距离。下面给出一个反例。设,则:
因此:
在机器学习领域被称为距离,却不满足三条距离公理的不仅仅有余弦距离,还有KL距离(Kullback-Leibler Divergence),也叫作相对熵,常用于计算两个分布之间的差异,它不满足对称性和三角不等式。
4、A/B测试的陷阱
在互联网公司中, A/B测试是验证新模块、新功能、新产品是否高效,新算法、新模型的效果是否有提升,新设计是否受到用户欢迎,新更改是否影响用户体验的主要测试方法。在机器学习领域中,A/B测试是验证模型最终效果的主要手段。
这部分内容我完全没有接触过,所以就不班门弄斧了,直接整理参考答案。
4.1、在对模型避行过充分的离线评估之后,为什么还要进行在线A/B测试?
- 参考答案:
需要进行在线A/B测试的原因如下:
1)离线评估无法完全消除模型过拟合的影响,因此得出的离线评估结果无法完全替代线上评估结果。
2)离线评估无法完全还原线上的工程环境。 一般来讲,离线评估往往不会考虑线上环境的延迟 、数据丢失、标签数据缺失等情况。因此,离线评估的结果是理想工程环境下的结果。
3)线上系统的某些商业指标在离线评估中无法计算。离线评估一般是针对模型本身进行评估,而与模型相关的其他指标,特别是商业指标,往往无法直接获得。比如,上线了新的推荐算法,离线评估往往关注的是ROC曲线、P-R曲线等的改进,而线上评估可以全面了解该推荐算法带来的用户点击率、留存时长、PV等的变化。
4.2、如何进行线上的A/B测试?
- 参考答案:
进行A/B测试的主要手段是进行用户分桶,即将用户分成实验组和对照组,对实验组的用户施以新模型,对对照组的用户施以旧模型。
在分桶的过程中要注意样本的独立性和采样方式的无偏性,确保同一个用户每次只能分到同一个桶中,在分桶过程中所选取的user_id需要是一个随机数,这样才能保证桶中的样本是无偏的。
5、模型评估的方法
在机器学习中,我们通常把样本分为训练集和测试集,训练集用于训练模型,测试集用于评估模型。
5.1、在模型评估中,有哪些主要的验证方法,它们的优缺点是什么?
- 我的回答:
1、数据集较小时,可以使用交叉验证法,或-折验证法。即将数据集分为份,然后每次留出其中一份用作验证集,剩下份用作训练集,最后将次检验误差做平均得到最终结果。
2、数据集足够大时,可以直接将数据集按照60%、20%、20%的比例划分为训练集、验证集和测试集。
- 参考答案:
1、Holdout检验
Holdout检验是最简单也是最直接的验证方法,它将原始的样本集随机划分成训练集和验证集两部分。比方说,对于一个点击率预测模型,我们把样本按照70%和30%的比例分成两部分,70%的样本用于模型训练; 30% 的样本用 于模型验证,包括绘制ROC曲线、计算精确率和召回率等指标来评估模型性能。
Holdout检验的缺点很明显,即在验证集上计算出来的最后评估指标与原始分组有很大关系。为了消除随机性,研究者们引入了“交叉检验”的思想。
2、交叉检验
-交叉验证:首先将全部样本划分成个大小中目等的样本子集,依次遍历这个子集,每次把当前子集作为验证集,其余子集作为训练集,进行模型的训练和评估;最后把次评估指标的平均值作为最终的评估指标。在实际实验中,经常取10。
3、自助法
不管是Holdout检验还是交叉检验,都是基于划分训练集和测试集的方法进行模型评估的。然而,当样本规模比较小时,将样本集进行划分会让训练集进一步减小,这可能会影响模型训练效果。有没有能维持训练集样本规模的验证方法呢?自助法可以比较好地解决这个问题。
自助法是基于自助采样法的检验方法。对于总数为的样本集合进行次有放回的随机抽样,得到大小为的训练集。次采样过程中有的样本会被重复采样,有的样本则没被抽出过,将这些没被抽出的样本作为验证集,进行模型验证,这就是自助法的验证过程。
5.2、在自助法的采样过程中,对个样本进行次自助抽样,当趋于无穷大时,最终有多少数据从未被选择过?
- 我的回答:
由于是有放回采样,故每次采样过程中每个样本未被选择的概率均为,从而一个样本次采样均未被选择到的概率为:
故最终大约有的数据从未被选择过。
- 参考答案:
同上。
6、超参数调优
6.1、超参数有哪些调优方法?
- 我的回答:
1、可以手动给各个超参数设定一些候选值,然后采用网格搜索的方法找出在验证集上表现最好的模型对应的一组超参数。
2、若没有设定超参数候选值的相关经验,可以采用随机搜索的方法。
3、还可以采用启发式的算法,让超参数也可以向误差减小的方向移动。
- 参考答案:
1、网格搜索
网格搜索可能是最简单、应用最广泛的超参数搜索算法,它通过查找搜索范围内的所有的点来确定最优值。如果采用较大的搜索范围以及较小的步长,网格搜索很大概率可以找到全局最优值。然而,这种搜索方案十分消耗计算资源和时间,特别是需要调优的超参数比较多的时候。因此在实际应用中,网格搜索法一般会先使用较广的搜索范围和较大的步长,来寻找全局最优值可能的位置;然后会逐渐缩小搜索范围和步长,来寻找更精确的最优值。这种操作方案可以降低所需的时间和计算量, 但由于目标函数一般是非凸的,所以很可能会错过全局最优值。
2、随机搜索
随机搜索的思想与网格搜索比较相似,只是不再测试上界和下界之间的所有值,而是在搜索范围中随机选取样本点。它的理论依据是,如果样本点集足够大,那么通过随机采样也能大概率地找到全局最优值,或其近似值。随机搜索一般会比网格搜索要快一些,但是和网格搜索的快速版一样,它的结果也是没法保证的。
3、贝叶斯优化算法
贝叶斯优化算法在寻找最优最值参数时,采用了与网格搜索、随机搜索完全不同的方法。网格搜索和随机搜索在测试一个新点时,会忽略前一个点的信息,而贝叶斯优化算法则充分利用了之前的信息。贝叶斯优化算法通过对目标函数形状进行学习,找到使目标函数向全局最优值提升的参数。具体来说,它学习目标函数形状的方法是,先根据先验分布,假设一个搜集函数,然后,每一次使用新的采样点来测试目标函数时,利用这个信息来更新目标函数的先验分布;最后,算法测试由后验分布给出的全局最优值最可能出现的位置的点。
7、过拟合欠拟合
在模型评估与调整的过程中,我们往往会遇到“过拟合”或“欠拟合”的情况 。 如何有效地识别过拟合和欠拟合现象,并有针对性地进行模型调整,是不断改进机器学习模型的关键。
7.1、在模型评估过程中,过拟合和欠拟合具体是指什么现象?
- 我的回答:
1、过拟合表现在模型评估中即模型在训练集上性能良好而在测试集上性能较差。这意味着模型学到了一些训练集具有而测试集不具有的特征,而我们关注的是数据总体都具有的普适性特征,因此称模型产生了过拟合。
2、欠拟合表现在模型评估中即模型在训练集上性能较差而在测试集上性能也较差。这意味着模型连训练集的数据都没有学好,导致模型未捕捉到足够的数据中的有效特征。
- 参考答案:
过拟合是指模型对于训练数据拟合呈过当的情况,反映到评估指标上,就是模型在训练集上的表现很好,但在测试集和新数据上的表现较差。欠拟合指的是模型在训练和预测时表现都不好的情况。
7.2、能否说出几种降低过拟合和欠拟合风险的方法?
- 我的回答:
1、针对过拟合:
1)正则化方法。约束模型的复杂度,避免过强的模型学到训练集中不重要的特征。
2)增加训练集数据量。模型过拟合是因为学到了训练数据中的噪声或不重要的特征,数据量变多可以降低过拟合的风险。
2、针对欠拟合:
采用更复杂的模型。欠拟合通常是由模型表达能力不足导致的,因此发生欠拟合时应考虑使用表达能力更强的模型来进行学习。
- 参考答案:
1、降低“过拟合”风险的方法:
1)从数据入手,获得更多的训练数据。使用更多的训练数据是解决过拟合问题最高效的手段,因为更多的样本能够让模型学习到更多更高效的特征,减小噪声的影响。
2)降低模型复杂度。 在数据较少时模型过于复杂是产生过拟合的主要因素,适当降低模型复杂度可以避免模型拟合过多的采样噪声。例如,在神经网络模型中减少网络层数、神经元个数等;在决策树模型中降低树的深度 、进行剪枝等。
3)正则化方法。 给模型的参数加上一定的正则约束,比如将权值的大小加入到损失函数中 。
4)集成学习方法。集成学习是把多个模型集成在一起,来降低单一模型的过拟合风险,如 Bagging方法。
2、降低“欠拟合”风险的方法:
1)添加新特征。当特征不足或者现有特征与样本标签的相关性不强时,模型容易出现欠拟合。通过挖掘“上下文特征”、“ ID 类特征”、“组合特征”等新的特征,往往能够取得更好的效果。在深度学习潮流中,有很多模型可以帮助完成特征工程,如因子分解机、梯度提升决策树、Deep-crossing等都可以成为丰富特征的方法。
2)增加模型复杂度。简单模型的学习能力较差,通过增加模型的复杂度可以便模型拥高更强的拟合能力。例如,在线性模型中添加高次项,在神经网络模型中增加网络层数或神经元个数等。
3)减小正则化系数。正则化是用来防止过拟合的,但当模型出现欠拟合现象时,则需要高针对性地减小正则化系数。