模型评估
1、准确率的局限性
准确率 A c c u r a c y = n c o r r e c t / n t o t a l Accuracy=n_{correct}/n_{total} Accuracy=ncorrect/ntotal,指分类正确的样本占总样本个数的比例
缺点:当负样本占99%时,把所有样本都预测为负样本也可以获得99%的准确率。
当不同类别的样本比例非常不均衡时,占比大的类别往往成为影响准确率的最主要因素。
改进:平均准确率(每个类别下的样本准确率的算术平均)
其它问题:评估指标的选择、过拟合或欠拟合、测试集和训练集划分不合理、线下评估和线上测试的样本分布存在差异等问题
2、准确率与召回率的权衡
- 精确率Precision:分类正确的正样本个数占分类器判定为正样本的样本个数的比例
- 召回率recall:分类正确的正样本个数占真正的正样本个数的比例
- 在排序问题中,通常采用TopN返回结果的Precision和recall值来衡量排序模型的性能,即认为模型返回的TopN的结果就是模型判定的正样本,然后计算前N个位置上的准确率和召回率
- PR曲线的横轴是召回率,纵轴是精确率
- F 1 = 2 ∗ p r e c i s i o n ∗ r e c a l l / ( p r e c i s i o n + r e c a l l ) F1 =2*precision*recall/(precision+recall) F1=2∗precision∗recall/(precision+recall) ,精确率和召回率的调和平均值
- ROC曲线
3、平方根误差RMSE
R M S E = ∑ i = 1 n ( y i − y ^ i ) 2 / n RMSE=\sqrt{\sum_{i=1}^n (y_i-\hat y_i)^2/n} RMSE=∑i=1n(yi−y^i)2/n
一般地,RMSE能够很好地反映回归模型预测值与真实值的偏离程度
实际中,如存在个别偏离程度非常大的离群点,即使离群点数量非常少,也会让RMSE指标变得很差
解决方案:
(1)如果认定这些离群点是“噪声点”,需要在数据预处理时过滤掉这些噪声点
(2)如果不认为这些离群点是“噪声点”,需要进一步提高模型预测能力,将离群点产生的机制建模进去
(3)可以找一个更合适的指标来评估该模型,比如MAPE(平均绝对百分比误差):
M A P E = ∑ i = 1 n ∣ ( y i − y ^ i ) / y i ∣ ∗ 100 / n MAPE=\sum_{i=1}^n|(y_i-\hat y_i)/y_i|*100/n MAPE=i=1∑n∣(yi−y^i)/yi∣∗100/n
相当于把每个点的误差进行了归一化,降低了个别离群点带来的绝对误差的影响
3、ROC曲线是什么?
- Receiver Operating Characteristic Curve,受试者工作特征曲线
- 横坐标:假阳性率FPR;纵坐标:真阳性率:TPR
- F P R = F P / N FPR=FP/N FPR=FP/N,负样本中被预测为正样本的频率(1-特异性)
- T P R = T P / P TPR=TP/P TPR=TP/P,正样本中被预测为正样本的频率(敏感性)
- 例:10位疑似癌症,3位确实癌症(P),7位不是癌症(N)。医生诊断出的3位癌症中,有2位是真的癌症(TP),有1位是误诊(FP),真阳性率TPR=TP/P=2/3;假阳性率FPR=FP/N=1/7
4、如何绘制ROC曲线?
- ROC曲线通过不断移动分类器的“截断点”来生成曲线上的一组关键点
- “截断点”:区分正负预测结果的阈值
- 法1:通过动态调整截断点,从最高得分开始(实际上是从正无穷开始,对应着ROC曲线的零点),逐渐调整到最低得分,每一个截断点都会对应一个FPR和TPR,在ROC图上绘制出每个截断点对应的位置,再连接所有点就得到最终的ROC曲线
- 法2:首先,根据样本标签统计出正样本数量为P,负样本数量为N;其次,把横轴刻度间隔设置为1/N,纵轴刻度间隔设置为1/P;根据模型输出的预测概率对样本进行排序(从高到低),依次遍历样本,同时从零点开始绘制ROC曲线,每遇到一个正样本就沿纵轴方向绘制一个刻度间隔的曲线,每遇到一个负样本就沿着横轴方向绘制一个刻度间隔的曲线,直到遍历完所有样本,曲线最终停在(1,1),整个ROC曲线绘制完成
5、如何计算AUC
- AUC(Area Under Curve):ROC曲线下的面积
- 作用:量化地反映基于ROC曲线衡量出的模型性能
- 计算AUC只需沿着ROC横轴做积分
- ROC曲线一般处于y=x曲线上方,所以AUC取值一般在0.5~1之间
- AUC越大,说明分类器越可能把真正的正样本排在前面,分类性能越好
6、ROC曲线与P-R曲线的异同
当正负样本的分布发生变化时,ROC曲线的形状能够基本保持不变,而P-R曲线的形状一般会发生较剧烈的变化
![]()
ROC曲线可以尽量降低不同测试集带来的干扰,更加客观的衡量模型本身的性能
在很多实际问题中,正负样本数量往往很不均衡,若选择不同测试集,P-R曲线的变化就会非常大。而ROC曲线则能够更加稳定地反映模型本身的好坏
如果研究者希望看到模型在特定数据集上的表现,P-R曲线更加直观
7、余弦相似度&余弦距离
余弦相似度常用来评估向量之间的相似性,取值范围[-1,1],相同两个向量余弦相似度为1
c o s ( A , B ) = A ⋅ B ∣ ∣ A ∣ ∣ 2 ∣ ∣ B ∣ ∣ 2 cos(A,B)=\frac{A·B}{||A||_2||B||_2} cos(A,B)=∣∣A∣∣2∣∣B∣∣2A⋅B
余弦相似度关注向量间的角度关系,不关心它们的绝对大小,与衡量绝对距离数值的欧氏距离有很大区别
在文本、图像等领域,研究对象的特征维度往往很高,余弦相似度在高维情况下依然保持“相同为1,正交为0,相反为-1”的性质;而欧氏距离数值受维度影响,范围不固定,含义也较为模糊
在一些场景,如Word2Vec,向量模厂经过归一化,此时欧式距离和余弦距离单调:
∣ ∣ A − B ∣ ∣ 2 = 2 ( 1 − c o s ( A , B ) ) ||A-B||_2=\sqrt{2(1-cos(A,B))} ∣∣A−B∣∣2=2(1−cos(A,B))余弦距离=1 - 余弦相似度,取值范围[0,2],相同两个向量余弦距离为0
8、余弦距离是否是一个严格定义的距离?
- 距离:在一个集合中,如果每一对元素均可唯一确定一个实数,使得三条距离公理(正定性、对称性、三角不等式)成立,则该实数可称为这对元素之间的距离
- 余弦距离满足正定性、对称性,但不满足三角不等式,因此不是严格定义的距离,如A(1,0),B(1,1),C(0,1)→dist(A,B)+dist(B,C)<dist(A,C)
- KL距离(相对熵),常用于计算两个分布之间的差异,但不满足对称性和三角不等式
9、A/B test
作用:验证新模块、新功能、新产品是否有效,新算法、新模型的效果是否有提升,新设计是否受到用户欢迎,新更改是否影响用户体验的主要测试方法
在对模型进行过充分的离线评估之后,为什么还要进行在线A/B测试?
(1)离线评估无法完全消除模型过拟合的影响,因此,得出的离线评估结果无法完全替代线上评估结果
(2)离线评估无法完全还原线上的工程环境。一般地,离线评估往往不会考虑线上环境的延迟、数据丢失、标签数据缺失等情况。因此,离线评估的结果是理想工程环境下的结果。
(3)线上系统的某些商业指标在离线评估中无法计算。比如,上新了新的推荐算法,离线评估往往关注的是ROC曲线、P-R曲线等的改进,而线上评估可以全面了解该推荐算法带来的用户点击率、留存时长、PV访问量等的变化。
如何进行线上A/B测试?
- 进行A/B测试的主要手段是将用户分桶,即将用户分成实验组和对照组,对实验组的用户施以新模型,对对照组的用户施以旧模型。
- 在分桶过程中,要注意样本的独立性和采样方式的无偏性,user_id是随机数,保证桶中样本无偏
10、在模型评估过程中,有哪些主要的验证方法,它们的优缺点是什么?
(1)Holdout检验
- 将原始样本集合划分成训练集和测试集
- 缺点:在测试集上计算出的最后评估指标与原始分组有很大关系
(2)交叉验证
- k-fold交叉验证:首先把全部样本划分成k个大小相同的样本子集;依次遍历这k个子集,每次把当前子集作为验证集,其余所有子集作为训练集,进行模型的训练和评估;最后把k次评估指标的平均值作为最终的评估指标。实际中,k常取10
- 留一验证:每次留下1个样本作为验证集,其余所有样本作为训练集。在样本总数较多时,时间开销极大。
- 留p验证:每次留下p个样本作为验证集,而从n个元素中选择p个元素有 C n p C_n^p Cnp种可能,时间开销远高于留一验证,故很少使用
(3)自助法(Bootstrap)
- 基于自主采样法的检验方法。对于总数为n的样本集合,进行n次有放回的随机抽样,得到大小为n的训练集。n次采样过程中,有的样本会被重复采样,有的样本没有被抽出过,没有被抽出的样本就作为验证集
11、在自助法的采样过程中,对n个样本进行n次自助抽样,当n趋于无穷大时,最终有多少数据从未被选择过?
一个样本在一次抽样中未被抽中的概率为 1 − 1 n 1-\frac {1}{n} 1−n1
一个样本在n次抽样中未被抽中的概率为 ( 1 − 1 n ) n (1-\frac{1}{n})^n (1−n1)n
当n趋于无穷大时
lim n → ∞ ( 1 − 1 n ) n = lim n → ∞ ( n − 1 n ) n = lim n → ∞ 1 ( n n − 1 ) n = lim n → ∞ 1 ( 1 + 1 n − 1 ) n − 1 lim n → ∞ 1 ( 1 + 1 n − 1 ) = 1 / e ≈ 0.368 \lim\limits_{n\rightarrow\infty}(1-\frac{1}{n})^n=\lim\limits_{n\rightarrow\infty}(\frac{n-1}{n})^n=\lim\limits_{n\rightarrow\infty}\frac {1}{(\frac{n}{n-1})^n}=\lim\limits_{n\rightarrow\infty}\frac {1}{(1+\frac{1}{n-1})^{n-1}}\lim\limits_{n\rightarrow\infty}\frac {1}{(1+\frac{1}{n-1})} \\=1/e\approx0.368 n→∞lim(1−n1)n=n→∞lim(nn−1)n=n→∞lim(n−1n)n1=n→∞lim(1+n−11)n−11n→∞lim(1+n−11)1=1/e≈0.368说明当样本数很大时,大约有36.8%的样本从未被选择过,可作为验证集
12、超参数有哪些调优方法?
- 超参数搜索算法包括:目标函数(最大化/最小化的目标);搜索范围(上限和下限);其他参数(如搜索步长)
(1)网格搜索
- 最简单,应用最广泛
- 通过查找搜索范围内的所有点来确定最优值
- 如果采用较大的搜索范围和较小的步长,网格搜索有很大概率找到全局最优值,但十分消耗计算资源和时间,特别是需要调优的超参数比较多时
- 实际应用中,网格搜索法一般会先使用较广的搜索范围和较大的步长,找到全局最优值最可能的位置,然后逐步缩小搜索范围和步长,来寻找更精确的最优值。这种方式可以降低所需时间和计算量,但由于目标函数一般非凸,很可能会错过全局最优值
(2)随机搜索
- 与网格搜索思想比较相似,只是不再测试范围内所有值,而是随机选取样本点。
- 理论依据:如果样本点集足够大,那么通过随机采样也大概率可以找到全局最优值或其近似值
- 一般比网络搜索快一些,但结果没法保证
(3)贝叶斯优化算法
网格搜索和随机搜索在测试一个新点时,会忽略前一个点的信息,而贝叶斯优化算法则充分利用了之前的信息
通过对目标函数的形状进行学习,找到使目标函数向全局最优值提升的参数
具体方法:
- 根据先验分布,假设一个搜集函数
- 每次使用新的采样点来测试目标函数时,利用这个信息来更新目标函数的先验分布
- 算法测试由后验分布给出的全局最值最可能出现的位置的点
注意:一旦找到局部最优值,它会在该区域不断采样,容易陷入局部最优值。为了弥补,贝叶斯优化算法会在探索和利用之间找到一个平衡点。
13、过拟合&欠拟合
过拟合:模型在训练集上表现很好,但在测试集和新数据上表现较差
欠拟合:模型在训练和预测时表现都不好
降低过拟合风险的方法:
(1)获得更多训练数据。使用更多训练数据可以让模型学习到更多更有效的特征,减小噪声的影响。直接增加实验数据一般很困难,但可以通过一定的规则进行扩充,如图像的平移、旋转、缩放等;生成对抗网络合成大量新训练数据
(2)降低模型复杂度。适当降低模型复杂度可以避免模型拟合过多的采样噪声。例如,在神经网络模型中减少网络层数、神经元个数等;在决策树模型中降低树的深度、进行剪枝等
(3)正则化方法。给模型的参数加上一定的正则约束,比如将权值的大小加入到损失函数中。如L1正则化 L = L 0 + λ ∣ ∣ w ∣ ∣ 1 L=L_0+\lambda||w||_1 L=L0+λ∣∣w∣∣1,L2正则化 L = L 0 + λ 2 ∣ ∣ w ∣ ∣ 2 2 L=L_0+\frac{\lambda}{2}||w||_2^2 L=L0+2λ∣∣w∣∣22
(4)集成学习方法。把多个模型集成在一起,降低单一模型的过拟合风险,如Bagging等
降低欠拟合风险的方法:
(1)添加新特征。如挖掘“上下文特征”、“ID类特征”、“组合特征”等
(2)增加模型复杂度。如在线性模型中添加高次项,在神经网络模型中增加网络层数或神经元个数等
(3)减小正则化参数。