开篇:最近回顾了系列的算法学习资料,整理了算法的学习流程,从问题出发,怎么用算法解决实际业务中的case。
当接到需求时,首先需要深入了解需求场景,将需求转换为算法可以解决的问题,我们大部分遇到的是分类和回归的场景。需要我们深入理解问题,收集足够多的数据,从不同的纬度分析,对该问题完成建模。对于需求场景中定义成问题,完成问题的建模,这是最重要的部分。接下来都是一些套路的流程,对数据进行特征抽取,不同维度分析数据等特征工程,根据模型复杂度、数据的稀疏、线性与非线性等筛选出适合的模型。在此基础上进一步提高效果的模型融合等等(后续慢慢会讲到
首先我们需要了解怎么评估建模的好坏。根据问题场景的不同,定义不同的评价指标,用来评价建模的好坏的程度。这个评估指标,一般作为模型的评估,真正线上的情况要根据不同场景的业务指标来衡量。
- 分类指标
- 准确率
通俗理解就是对于预测的所有数据,预测正确的数据占全部预测数据的比例。
如图中是模型对数据进行的预测,左右两个矩形表示正负样本集(正样本简称P负样本简称N),左侧红色半圆true positives表示模型正确预测为正样本的数据简称TP,剩余部分是false negatives,表示样本的真实标签是正样本,但是模型预测为负样本的数据,简称FN,右侧红色半圆部分false positives表示数据的真实标签是负样本,但是模型预测为正样本的数据,简称FP,剩余部分true negatives 表示真实是负样本,模型预测也是负样本,简称TN,TN+TP表示模型预测对的部分,包含了对正样本和负样本的预测,FN+FP表示模型预测错误的部分,包含了对正样本和负样本的预测。
对于一般的二分类问题,正负样本均衡,一般可以用准确率进行衡量。准确率可以覆盖到所有可预测到的数据,覆盖了TP、TN、FP、FN(样本总数)。需要照顾到所有情况数据的指标,样本均衡,可以使用准确率,计算公式如下:
- 召回率与精确率
真实场景中往往数据是不均衡的,如果用准确率很难衡量出模型的好坏程度。我们考虑使用召回率与精度。计算公式如下:
精确率和召回率都是越高越好,但是实际中往往两者是相矛盾的,精确率高时,召回率低,召回率高时,精确率低。所以要根据自己的实际业务选择哪个指标更加重要,如何将两个指标整合在一起呢?F1 score
也可以对不同指标进行加权,综合查看结果指标。
- ROC与AUC
ROC 是以FPR为横坐标,以TPR为纵坐标的曲线图。以样本的预测概率进行排序,以每条样本的预测概率为阈值,计算对应的TPR与FPR。
Roc曲线越靠近左上角性能越好,左上角坐标(1,0)表示完美分类器,FPR=0,TPR=1。(0,0) 点,FPR=TPR=0,所有的点都预测为了负值。(1,1)点,所有的点都预测为了正值。
(1,0)点,FPR=1,TPR=1,即 FP=1,TP=0.负样本都预测为正值,正样本都预测为了负值。 最差的分类器。具体的可以通过计算公式推导。
AUC表示roc曲线下方的面积,取值越大说明模型越有可能将正样本排在负样本的前面。因此AUC可以作为样本排序的指标,计算公式如下:
|p|表示正样本。|N|表示负样本。
表示第i个正样本的排序序号。排序根据概率得分从小到大排。
- 交叉熵损失
这是分类问题中的常见损失,同样在分类中,交叉熵损失是越小越好的。与AUC不同 对于排序不敏感
- 回归指标:
- 绝对值误差
MAE能够很好的刻画偏差,其实是对数据中值进行拟合,但是一些模型要求具有二阶导数的如XGBoost,所以不能用MAE所为损失函数。
计算公式如下:
- 绝对值百分比误差
保证
不等于0,是对MAE的一种改进。- 均方根误差
与MAE相比,RMSE对大误差的样本有更大的惩罚,对离群点敏感。不如MAE健壮。RMSE是对数据均值的拟合。
- 排序指标
- 平均准确率均值MAP
先一次排序的平均准确率,再计算总体的平均准确率。
假设有两个主题,主题1有4个相关网页,主题2有5个相关网页。某系统对于主题1检索出4个相关网页,其rank分别为1, 2, 4, 7;对于主题2检索出3个相关网页,其rank分别为1,3,5。对于主题1,平均精度均值为(1/1+2/2+3/4+4/7)/4=0.83。对于主题2,平均精度均值为(1/1+2/3+3/5+0+0)/5=0.45。则mAP= (0.83+0.45)/2=0.64。
- NDCG
累计增益(CG)
代表i位置的相关度
缺点:假设搜索“篮球”结果,最理想的结果是:B1、B2、 B3。而出现的结果是 B3、B1、B2的话,CG的值是没有变化的,因此需要下面的DCG。
折损累计增益(DCG)
为了让排名越靠前的结果越能影响最后的结果
归一化折损累计增益(NDCG)
DCG是一个累加的值,没法针对两个不同的搜索结果进行比较,因此需要归一化处理,这里是处以IDCG。IDCG为理想情况下最大的DCG值。
实际的例子
假设搜索回来的5个结果,其相关性分数分别是 3、2、3、0、1、2
那么 CG = 3+2+3+0+1+2
可以看到只是对相关的分数进行了一个关联的打分,并没有召回的所在位置对排序结果评分对影响。而我们看DCG:
i |
reli |
log2(i+1) |
reli /log2(i+1) |
1 |
3 |
1 |
3 |
2 |
2 |
1.58 |
1.26 |
3 |
3 |
2 |
1.5 |
4 |
0 |
2.32 |
0 |
5 |
1 |
2.58 |
0.38 |
6 |
2 |
2.8 |
0.71 |
所以 DCG = 3+1.26+1.5+0+0.38+0.71 = 6.86
接下来我们归一化,归一化需要先结算 IDCG,假如我们实际召回了8个物品,除了上面的6个,还有两个结果,假设第7个相关性为3,第8个相关性为0。那么在理想情况下的相关性分数排序应该是:3、3、3、2、2、1、0、0。计算IDCG@6:
i |
reli |
log2(i+1) |
reli /log2(i+1) |
1 |
3 |
1 |
3 |
2 |
3 |
1.58 |
1.89 |
3 |
3 |
2 |
1.5 |
4 |
2 |
2.32 |
0.86 |
5 |
2 |
2.58 |
0.77 |
6 |
1 |
2.8 |
0.35 |
所以IDCG = 3+1.89+1.5+0.86+0.77+0.35 = 8.37
最终 NDCG@6 = 6.86/8.37 = 81.96%
- 样本选择
从海量的数据中识别和选择相关性高的数据作为机器学习的输入。怎么选择样本数据尤为重要。对数据进行去噪处理,进行采样,选择合适的数据集。
数据去噪主要去掉不可能的值,空值等,但是一些模型是可以处理空值的如xgboost。
采样尽量保持采样的期望与真实数据的期望一致,尽量保持值的分布特点。主要有上采样、下采样、随机抽取、分层抽样、整群采样等
对于离线的验证可以进行交叉验证:1、留出法 2、k折交叉验证 3、自助法
来源:CSDN
作者:财神Childe
链接:https://blog.csdn.net/mr2zhang/article/details/103794414