@[机器学习系列之一①问题建模
机器学习系列之一②特征工程
机器学习系列之一③常用模型
机器学习系列之一④模型融合](这里写自定义目录标题)
通用流程包含4大部分,分别是:问题建模、特征工程、模型选择和模型融合。问题建模主要包含三个部分:评估指标、样本选择和交叉验证
评估指标用于反映模型效果。通常,线下使用机器学习评估指标,线上使用业务指标评估指标根据任务类型分类,可分为分类指标、回归指标、聚类指标和排序指标。
1)P/R 多用于二分类任务,可根据混淆矩阵进行计算
其中,TP(True Positive)表示真实结果为正例,预测结果也为正例;FP(False Positive)表示真是结果为负例,但是预测结果是正例;TN(True Negative)表示真是结果为正例,预测结果为负例;FP(False Negative)表示真是结果为负例,预测结果也为负例。TP+FP+FN+TN=样本总数
精确率和召回率的定义:
P-R曲线(P为纵轴、R为横轴),PR曲线越靠近右上角越好,曲线下的面积叫AP(平均精确率)分数。
虽然PR曲线可以在一定程度上反映模型性能,但是 计算不方便,因此提出了F1值。F1值是P与R的调和平均值:
精确率和准确率要进行区分,精确率是二分类指标,准确率是多分类指标,
2) ROC/AUC
ROC(接收者操作特征) 纵坐标真正率(TPR),横坐标假正率(FPR),越靠近左上角性能越好。
AUC(Area Under ROC Curve)是ROC曲线下的面积,取值越大说明模型越可能将正样本排在负样本前面。AUC*2 = Gini+1。计算方式:
物理角度,AUC是ROC曲线面积:
从概率角度,AUC考虑样本的排序质量,它与排序误差有关,公式:
因为AUC与排序有关,所以它对排序敏感,而对预测分数没有那么敏感。但是P-R曲线对于预测分数比较敏感。
3)对数损失logloss
是对预测概率的似然估计。本质上是利用样本中已知的分布,求解使这种分布出现的概率最大的最佳模型参数。
其二分类计算公式:(这不就是LR的损失函数嘛)
其中,y∈{0,1},pi表示第i条样本预测为1的概率
在多分类任务中,计算公式:
其中,N为样本数,C为类别数,yij=1表示第i条样本的类别为j,pij表示第i条样本类别j的概率。
logloss主要是衡量预测概率分布与真实概率分布的差异,取值越小越好。与AUC不同,logloss对于预测概率比较敏感。
1)MAE,也称为L1范数损失。对于损失函数需要求二阶导数的(XGBoost),无法使用。
其中,N为样本数,yi为第i条样本的真实值,pi为第i条严格不能的预测值。如果考虑了样本权重,可以使用加权平均绝对误差(WMAE),公式:、
其中,wi表示第i条样本的权重。
2)MAPE,计算绝对误差百分比来表示预测结果,值越小越好。
MAPE与量纲无关,因此在特定场景下不同问题具有一定可比性。但是,在yi=0出无定义,如果yi接近0可能导致MAPE大于1,而且,MAPE对于负值误差的惩罚大于正值误差。故而提出了改进指标:MASE,sMAPE、MDA。
3)RMSE ,表示预测值与真实值差值的样本标准差,与MAE相比,RMSE对于误差样本有更大的惩罚,但是对于离群点更敏感,健壮性不如MAE。是对数据分布的平均值进行拟合。
1) MAP,分两步计算,首先计算排序的平均精确率,在计算总体平均精确率。MAP指标会限定评估排在前面的文档质量。
其中,AP@K表示前k个结果的平均准确率;M表示每次排序的总文档,可能一次返回文档数不足K个;P(k)表示前k个结果的准确率;rel(k)表示第k个结果是否相关文档,相关取值为1,否则为0。
其中,Q为查询数量,APq@K为第q次查询的AP@K结果。下面有个例子
2)NDCG(归一化贴现累计收益)
其中,NDCG@K表示计算前K个结果的NDCG;relk表示第k个位置的相关性得分;IDCG@K是前K个排序返回结果集能够得到的最佳排序结果,用于归一化DCG@K;|REL|为结果集按相关性排序后的相关性得分列表。
相对于MAP描述相关性只有0/1二值表示,NDCG可以分为多等级。比如网页排序中常用5个等级使得评分更加丰富。但是相关性描述是一个超参数,需要人为定义,此外还需要考虑位置偏偏置,使得不同位置的权重不同。例子:
从海量数据中识别和选择相关性高的数据作为模型输入。目的是从完整训练集T中选择一个子集S属于T,子集S不在包含冗余样本。理想情况下是S最小,然后模型效果不变差。样本选择的方法有很多,主要分为三类:数据去噪、采样 、原型选择和训练集选择。前两者最为简单有效而且应用最多。
噪声可能会导致数据质量下降,影响模型效果,但是可以提提升模型的健壮性。
数据噪声可能是特征值不对,比如特征值缺失、超出特征值域范围;也可能是标注不对,比如二分类正样本标注成负样本。
针对误标注实例有很多成功的处理方案,最常见的有集成过滤(EF)、交叉验证委员会过滤法(CVCF)和迭代分割过滤法(IPF),这些方法都是基于融合或者投票的思想进行数据过滤的。
除了以上方法之外,还可以就业务考虑做一些数据过滤工作,比如清洗爬虫数据和不具代表性样本等。再如过滤掉无效曝光数据,根据用户最后一次点击位置行为的位置,过滤掉最后一次点击之后的展示 ,可以认为用户没有看到,也可以保留最后一次点击之后的少数几个曝光。
采样是一个完善的统计技术,从整体选择一部分来进行推论。采样能够克服高维特征以及大量数据导致的问题,有助于降低成本,缩短时间甚至提升效果,在不平衡分类问题中还能帮助平衡样本比例。进行采样时最关心采样方法和采样比例。
通常,考虑样本对总体的估值不超出边界误差的情况下能够计算出样本量,如下不等式:
一个好的样本子集应该具有无偏性和很小的样本方差。其中,无偏性是指对样本的期望等于全体样本期望,也即E(e) =e0。样本方差是平衡样本估计值和真实值的偏差,即Var(e)=E[e-E(e)]2,小方差能保证估计值不会产生太大偏差。
现今的采样方法主要介绍下面五种:
原型选择是基于实例的方法,在样本选择过程中不需要训练模型,而是选取相似度或距离都指标来选找到分类精度和数据量最佳的训练集,多采用KNN算法。
训练集选择是构建预测模型来进行样本选择的方法的统称,比如决策树、ANN和SVM算法。原型选择和选练集选择两大类别的样本选择方法有很多,但是没有一种通用方法。
原型选择有很多分类标准,根据从数据集T中选择样本集S的方向可以分为5类:
还可以根据选择的样本,原型原则相关算法可以分为三类:
划分训练集和测试集的方法统称为交叉验证。下面介绍几种常用的:
留出法(Hold-out)是将数据集D随机划分成两个互斥的数据集,一份用于训练,一份用于测试。本质上,并不算交叉验证法,因为数据没有交叉。通常做法是2/3作为训练集,1/3作为测试集。如下图所示。
值得注意,单次划分的得到的结果往往不靠谱,在正常实验中,我们通常会进行多次留出法实验,每次随机划分,最终得到的实验结论进行平均。
在实际应用中,有一种场景使用留出法:数据有明显的时间序列因素,即线上数据的时间都在离线数据即之后,这种情况下根据时间对离线数据集进行划分,使得测试集时间分布在训练集之后。
K折交叉验证将数据集D划分为K份互斥数据集Dk,一般是平均分配使得每一份数据量接近且数据分布尽可能一致。每次使用一份数据测试及,其余k-1份数据训练,需要迭代K轮得到k个模型;最后将K份测试记过汇总到一起评估一个离线指标。
K折交叉验证的稳定性与K取值很相关。K值太小实验稳定性偏低,K值太大可能导致成本太高,K常用取值是5和10。K折交叉验证能够很好的避免过拟合和欠拟合,得到的结论也更有说服力。
相比留出法,K折交叉验证更为复杂,但是数据利用率更高。留一法LOO是K折中的一个特例,其中K=N,每一条样本当测试集,其余训练。优点是不受随机样本划分的影响,但是计算成本太高,甚至不可行。因此,常用于数据稀疏。
对于类别数据不均衡的情况,可以使用分层K折交叉验证。对每个类别进行k折交叉,使得各个类别数据分布与完整数据集分布更为一致。
自助法(Bootstrapping)以自主采样为基础,使用有放回的重复采样的方式进行训练集测试集的构建。比如构建n条样本的训练集,每次从数据集D采样一条放入训练,然后有放回重新采样,重复n次得到n条样本的训练集,然后将没出现过的放到测试集。可以计算出其概率是:因为没被采样的概率是(1-1/n),那么n次之后:
这就意味着,数据量很大的时候,约有36.8%的数据不会出现在训练集中。前面两种方法会因训练集的大小不一致而产生一定的偏差,而自助法不会。但是自助法改变了初始数据分布,会引入估计偏差,所以在数据足够时,一般采用留出法和交叉验证,而在数据量小并且难以有效区分训练集和测试集时,采用自助法。
参考文档
美团机器学习实践
百面机器学习