1. 评价指标的局限性
准确率(Accuracy)
精确率(Precision)
召回率(Recall)
均方根误差(Root Mean Square Error, RMSE)
1.1 准确率
准确率: 指分类正确的样本占总样本个数的比例
Accuracy = \frac{n_{correct}}{n_{total}}
准确度的问题: 当不同类别的样本比例非常不均衡时, 占比大的类别往往成为影响准确率的最主要因素.
例如: 当负样本占 99%, 分类器把所有样本都预测为负样本也可以获得 99% 的准确率.
1.2 精确率与召回率
精确度: 分类正确的正样本个数占分类器判定为正样本的样本个数的比例.
召回率: 分类正确的正样本个数占真正的正样本个数的比例.
在排序问题中, 通常没有一个确定的阀值把得到的结果直接判定为正样本或负样本, 而是采用 TopN 返回结果的 Precision 值和 Recall 值来衡量排序模型的性能, 即认为模型返回的 Top N 的结果就是模型判定的正样本, 然后计算前 N 个位置上的准确率 Precision@N 和前 N 个位置上的召回率 Recall@N.
Precision 值和 Recall 值是既矛盾又统一的两个指标, 为了提高 Precision 值, 分类器需要尽量在 "更有把握" 时才把样本预测为正样本, 但此时往往会因为过于保守而漏掉很多 "没有把握" 的正样本, 导致 Recall 值降低.
为了综合评价一个排序模型的好坏, 不仅要看 precision 和 recall, 而且最好绘制模型 P-R(precision-recall)曲线.
由图可见, 当召回率接近于 0 时, 模型 A 的精确率为 0.9, 模型 B 的精确率是 1, 这说明模型 B 得分前几位的样本全部是真正的正样本, 而模型 A 即使得分最高的几个样本也存在预测错误的情况. 并且, 随着召回率的增加, 精确率整体呈下降趋势. 但是, 当召回率为 1 时, 模型 A 的精确率反而超过了模型 B. 这充分说明, 只用某个点对应的精确率和召回率是不能全面地衡量模型的性能, 只有通过 P-R 曲线的整体表现, 才能够对模型进行更为全面的评估.
- F1 score
- math F1 = \frac{
- 2 \times precision \times recall
- } {
- precision + recall
- }
1.3 均方根误差 RMSE
RMSE 的计算公式:
RMSE = \sqrt{ {\frac {{\sum_{i=1}^n} {(y_i - \overline{y}_{i} )}^2} {n}}}
\(y_i\)是第 i 个样本点的真实值,\(\overline{y}_{i}\) 是第 i 个样本预测值, n 是样本点个数.
RMSE 能够很好地反映回归模型预测值与真实值的偏离程度.
比 RMSE 的鲁棒性更好的指标, 平均绝对百分比误差(Mean Absolute Percent Error, MAPE), 定义如下:
物理含义: 相比 RMSE,MAPE 相当于把每个点的误差进行了归一化, 降低了个别离群点带来的绝对误差的影响.
***
2. ROC 曲线
ROC 曲线是 Receiver Operating Characteristic Curve 的简称, 中文名为 "受试者工作特征曲线".ROC 曲线源于军事领域, 而后在医学领域应用甚广,"受试者工作特征曲线" 这一名称也正是来自于医学领域.
ROC 曲线的横坐标为假阳性率(False Positive Rate,FPR); 纵坐标为真阳性率(True Positive Rate,TPR) .FPR 和 TPR 的计算方法分别为:
上式中, P 是真实的正样本的数量, N 是真实的负样本的数量, TP 是 P 个正样本中被分类器预测为正样本的个数, FP 是 N 个负样本中被分类器预测为正样本的个数.
下面例子有助于学习:
只看定义确实有点绕, 为了更直观地说明这个问题, 我们举一个医院诊断病人的例子. 假设有 10 位疑似癌症患者, 其中有 3 位很不幸确实患了癌症(P=3), 另外 7 位不是癌症患者(N=7). 医院对这 10 位疑似患者做了诊断, 诊断出 3 位癌症患者, 其中有 2 位确实是真正的患者(TP=2). 那么真阳性率 TPR=TP/P=2/3. 对于 7 位非癌症患者来说, 有一位很不幸被误诊为癌症患者(FP=1), 那么假阳性率 FPR=FP/N=1/7. 对于 "该医院" 这个分类器来说, 这组分类结果就对应 ROC 曲线上的一个点(1/7,2/3).
2.1 如何画出 ROC 曲线?
**ROC 曲线是通过不选移动分类器的截断点来生成曲线上的一组关键点.
截断点: 区分正负预测结果的阈值.
通过动态地调整截断点, 从最高的得分开始(实际上是从正无穷开始, 对应着 ROC 曲线的零点), 逐渐调整到最低得分, 每一个截断点都会对应一个 FPR 和 TPR, 在 ROC 图上绘制出每个截断点对应的位置, 再连接所有点就得到最终的 ROC 曲线.
其实, 还有一种更直观地绘制 ROC 曲线的方法. 首先, 根据样本标签统计出正负样本的数量, 假设正样本数量为 P, 负样本数量为 N; 接下来, 把横轴的刻度间隔设置为 1/N, 纵轴的刻度间隔设置为 1/P; 再根据模型输出的预测概率对样本进行排序 (从高到低); 依次遍历样本, 同时从零点开始绘制 ROC 曲线, 每遇到一个正样本就沿纵轴方向绘制一个刻度间隔的曲线, 每遇到一个负样本就沿横轴方向绘制一个刻度间隔的曲线, 直到遍历完所有样本, 曲线最终停在(1,1) 这个点, 整个 ROC 曲线绘制完成.
2.2 如何计算 AUC?
AUC, 就是 ROC 曲线下的面积. 能够量化地反映基于 ROC 曲线衡量出的模型性能. AUC 越大, 说明分类器越可能把真正的正样本排在前面, 分类性能越好.
计算 AUC 值只需要沿着 ROC 横轴做积分就可以了.
2.3 比较 ROC 曲线和 P-R 曲线有什么特点?
相比 P-R 曲线, ROC 曲线有一个特点, 当正负样本的分布发生变化时, ROC 曲线的形状能够基本保持不变, 而 P-R 曲线的形状一般会发生较剧烈的变化.(从两者曲线的定义, 物理含义就能很好地理解)
可以看出, P-R 曲线发生了明显的变化, 而 ROC 曲线形状基本不变. 这个特点让 ROC 曲线能够尽量降低不同测试集带来的干扰, 更加客观地衡量模型本身的性能. 这有什么实际意义呢? 在很多实际问题中, 正负样本数量往往很不均衡. 比如, 计算广告领域经常涉及转化率模型, 正样本的数量往往是负样本数量的 1/1000 甚至 1/10000. 若选择不同的测试集, P-R 曲线的变化就会非常大, 而 ROC 曲线则能够更加稳定地反映模型本身的好坏. 所以, ROC 曲线的适用场景更多, 被广泛用于排序, 推荐, 广告等领域. 但需要注意的是, 选择 P-R 曲线还是 ROC 曲线是因实际问题而异的, 如果研究者希望更多地看到模型在特定数据集上的表现, P-R 曲线则能够更直观地反映其性能.
***
3. 余弦距离的应用
对于两个向量 A 和 B, 其余弦相似度定义为
即两个向量夹角的余弦, 关注的是向量之间的角度关系, 并不关心它们的绝对大小, 其取值范围是[-1,1]. 当一对文本相似度的长度差距很大, 但内容相近时, 如果使用词频或词向量作为特征, 它们在特征空间中的的欧氏距离通常很大; 而如果使用余弦相似度的话, 它们之间的夹角可能很小, 因而相似度高. 此外, 在文本, 图像, 视频等领域, 研究的对象的特征维度往往很高, 余弦相似度在高维情况下依然保持 "相同时为 1, 正交时为 0, 相反时为 - 1" 的性质, 而欧氏距离的数值则受维度的影响, 范围不固定, 并且含义也比较模糊.
在一些场景, 例如 Word2Vec 中, 其向量的模长是经过归一化的, 此时欧氏距离与余弦距离有着单调的关系, 即
结论:
总体来说, 欧氏距离体现数值上的绝对差异, 而余弦距离体现方向上的相对差异. 例如, 统计两部剧的用户观看行为, 用户 A 的观看向量为 (0,1), 用户 B 为(1,0); 此时二者的余弦距离很大, 而欧氏距离很小; 我们分析两个用户对于不同视频的偏好, 更关注相对差异, 显然应当使用余弦距离. 而当我们分析用户活跃度, 以登陆次数(单位: 次) 和平均观看时长 (单位: 分钟) 作为特征时, 余弦距离会认为 (1,10),(10,100) 两个用户距离很近: 但显然这两个用户活跃度是有着极大差异的, 此时我们更关注数值绝对差异, 应当使用欧氏距离.
特定的度量方法适用于什么样的问题, 需要在学习和研究中多总结和思考, 这样不仅仅对面试有帮助, 在遇到新的问题时也可以活学活用.
3.1 余弦距离是不是一个严格定义的距离?
距离定义: 在一个集合中, 如果每一对元素均可唯一确定一个实数, 使得三条距离公理 (正定性, 对称性, 三角不等式) 成立, 则该实数可称为这对元素之间的距离.
***
4. A/B 测试的陷阱
4.1 在对模型进行过充分的离线评估之后, 为什么还要进行在线 A/B 测试?
离线评估无法完全消除模型过拟合的影响.
离线评估无法完全还原线上工程环境.
某些商业指标在离线评估中无法计算.
4.2 如何进行线上 A/B 测试?
进行 A/B 测试的主要手段是进行用户分桶, 即将用户分成实验组和对照组, 对实验组的用户施以新模型, 对对照组的用户施以旧模型. 在分桶的过程中, 要注意样本的独立性和采样方式的无偏性, 确保同一个用户每次只能分到同一个桶中, 在分桶过程中所选取的 user_id 需要是一个随机数, 这样才能保证桶中的样本是无偏的.
***
5. 模型评估的方法
5.1 模型评估过程中, 有哪些主要的验证方法, 优缺点是什么?
1. Holdout 检验
Holdout 检验是最简单也是最直接的验证方法, 它将原始的样本集合随机划分成训练集和验证集两部分. 比方说, 对于一个点击率预测模型, 我们把样本按照 70%~30% 的比例分成两部分, 70% 的样本用于模型训练; 30% 的样本用于模型验证, 包括绘制 ROC 曲线, 计算精确率和召回率等指标来评估模型性能.
Holdout 检验的缺点很明显, 即在验证集上计算出来的最后评估指标与原始分组有很大关系. 为了消除随机性, 研究者们引入了 "交叉检验" 的思想.
2. 交叉检验
k-fold 交叉验证: 首先将全部样本划分成 k 个大小相等的样本子集; 依次遍历这 k 个子集, 每次把当前子集作为验证集, 其余所有子集作为训练集, 进行模型的训练和评估; 最后把 k 次评估指标的平均值作为最终的评估指标. 在实际实验中, k 经常取 10.
留一验证: 每次留下 1 个样本作为验证集, 其余所有样本作为测试集. 样本总 58 数为 n, 依次对 n 个样本进行遍历, 进行 n 次验证, 再将评估指标求平均值得到最终的评估指标. 在样本总数较多的情况下, 留一验证法的时间开销极大. 事实上, 留一验证是留 p 验证的特例. 留 p 验证是每次留下 p 个样本作为验证集, 而从 n 个元素中选择 p 个元素有 C% 种可能, 因此它的时间开销更是远远高于留一验证, 故而很少在实际工程中被应用.
自助法: 自助法是基于自助采样法的检验方法. 对于总数为 n 的样本集合, 进行 n 次有放回的随机抽样, 得到大小为 n 的训练集. n 次采样过程中, 有的样本会被重复采样, 有的样本没有被抽出过, 将这些没有被抽出的样本作为验证集, 进行模型验证, 这就是自助法的验证过程.
5.2 自助法, 对 n 个样本进行采样, 当 n 趋于无穷大时, 有多少样本从未被选择过?
6. 超参数调优
网格搜索: 通过查找搜索范围内的所有的点来确定最优值
随机搜索: 在搜索范围内随机选取样本点
贝叶斯优化算法: 贝叶斯优化算法在寻找最优最值参数时, 采用了与网格搜索, 随机搜索完全不同的方法. 网格搜索和随机搜索在测试一个新点时, 会忽略前一个点的信息; 而贝叶斯优化算法则充分利用了之前的信息. 贝叶斯优化算法通过对目标函数形状进行学习, 找到使目标函数向全局最优值提升的参数. 具体来说, 它学习目标函数形状的方法是, 首先根据先验分布, 假设一个搜集函数; 然后, 每一次使用新的采样点来测试目标函数时, 利用这个信息来更新目标函数的先验分布; 最后, 算法测试由后验分布给出的全局最值最可能出现的位置的点. 对于贝叶斯优化算法, 有一个需要注意的地方, 一旦找到了一个局部最优值, 它会在该区域不断采样, 所以很容易陷入局部最优值. 为了弥补这个缺陷, 贝叶斯优化算法会在探索和利用之间找到一个平衡点,"探索" 就是在还未取样的区域获取采样点; 而 "利用" 则是根据后验分布在最可能出现全局最值的区域进行采样.
7. 过拟合与欠拟合
7.1 过拟合和欠拟合具体指的是什么现象?
过拟合: 在训练集上表现很好, 在测试集和新数据上表现很差.
欠拟合: 训练和测试都表现不好.
7.2 降低过拟合和欠拟合风险的方法?
降低过拟合的方法:
获得更多的数据
降低模型复杂度.
正则化方法.(给模型参数加上一定的正则约束)
集成学习. 集成学习是把多个模型集成在一起, 来降低单一模型的过拟合风险, 如 Bagging 方法.
降低欠拟合风险的方法:
添加新特征
增加模型复杂度
减小正则化系数
来源: https://www.cnblogs.com/wemo/p/10513972.html