天池离线赛-移动推荐算法(四):基于LR,RF,GBDT等模型的预测
是阿⾥天池赛2015年赛题之⼀,题⽬以移动电商平台的真实⽤户-商品⾏为数据为基础来构建商品推荐模型。该题现已成为新⼈⼊门的经典演练对象,博主也希望基于该题场景,加深对机器学习相关知识的理解,积累实践经验。关于题⽬回顾与数据初探,可参考:,本⽂讨论如何基于模型来进⾏预测,测试的模型包括逻辑回归(LR)、随机森林(RF)、梯度迭代提升树(GBDT)。
基于模型的预测
(注:这⾥的实现基于 python 的 pandas、sklearn 等⼯具包。相关程序可参考)
⾯向模型的数据预处理潮流英语
经过之后,在对特征数据样本套⽤模型进⾏分类预测之前,还需要根据具体所采⽤的模型对数据进⾏⼆次预处理,下⾯讨论其中重要的⼏点:
正负样本失衡问题
经过特征构建所得的数据集正负样本⽐例约为 1:1200,数据严重失衡,易导致模型训练失效。在这⾥,我们可通过下采样和基于f1_score 的评价标准来应对此问题。
改造英文
若考虑对训练集中的负样本进⾏下采样。为避免随机采样的特征空间覆盖性不⾜,先对负样本进⾏k-means聚类(参考),然后在每个聚类上采⽤subsample来获得全⾯的负样本采样,最后与正样本组成较为平衡的训练集。
相关程序参考这⾥:。
缺失值问题
在所构建的特征中,⼀些特征存在缺失值(如xx_diff_hours),这⾥,采⽤移除缺失值特征的数据集进⾏LR模型的训练,采⽤将缺失值赋值为-1的训练集进⾏RF/GBDT模型的训练。
归⼀化问题
在进⾏k-means和LR时,需要对不同度量尺度的特征进⾏归⼀化处理,这⾥我们采⽤sklearn.preprocessing.StandardScaler()实现。
逻辑回归
逻辑回归(logistic regression,简称LR)是⼀种线性回归模型,另⼀种贴切的名称是“对数⼏率回归”,该模型采⽤对数⼏率函数逼近预测结果。这⾥采⽤sklearn.linear_model.LogisticRegression来训练模型。
由于LR模型对正负样本平衡⼗分敏感,所以在k-means的基础上采⽤下采样,通过参数调节选取最优的正负样本⽐(N/P_ratio),下图是LR训练时的 f1_score 随
N/P_ratio 变化⽰意图:
从图中看出,由于采⽤的是 f1 值进⾏评价,LR 模型在⼀定的 N/P_ratio 下的结果好⼀些,下⾯分别取 N/P_ratio = 35 和 N/P_ratio = 55,以预测的Sigmoid函数阈值参数 cut_off 为变量,观察模型在验证集上的表现:
由上图看出,当 N/P_ratio 取值不同时,cut_off 的最优取值也不同,当 N/P_ratio 较⼩时,正例的特征空间相对较⼤,故⽽ cut_off 取值需要⼤⼀些,以压缩正样本预测空间,减⼩偏差;反之 cut_off 取值⼩⼀些。
southampton将两种 [N/P_ratio, cut_off] 参数下的模型预测结果上传,评分如下所⽰:
可见,由于直接采⽤LR初始模型,结果不令⼈满意(⽐前⾯基于规则的预测效果要差)。在过程中我们发现,由于数据随机性、⾮线性等因素,采⽤ LR 这样的线性模型许难以实现更好的效果,所以重新考虑采⽤RF、GBDT等集成模型来实现。
随机森林
随机森林(Random Forest,简称RF)是⼀种基于决策树基模型的集成学习⽅法,其核⼼思想是通过特征采样来降低训练⽅差,提⾼集成泛化能⼒。这⾥我们采⽤ble.RandomForestClassifier来随机森林的训练与预测任务。
在RF(或GBDT)的训练过程中,参数调节(parameter tuning)⼗分重要,⼀般地,将集成学习模型的参数分为两⼤类:过程参数和基学习器参数,⼀般地,先调试过程参数(如RF的基学习器个数n_estimators等),然后再调试基学习器参数(如决策树的最⼤深度
max_depth等)。
specificly下⾯讨论⼏个重要参数:
N/P_ratio(负正样本⽐例)
其实对于随机森林模型和下⾯的GBDT模型来说。其基学习器(决策树)采⽤“entropy”、“gini“等作为建树依据,对不同类别的划分具有强制作⽤。这类的模型对于类别失衡不敏感。但是过量冗余的负样本会严重加⼤训练消耗,所以也可以考虑在不影响模型训练的前提下对数据进⾏采样。
n_estimators(森林规模)
n_estimators 代表随机森林中基学习器(决策树)的个数,对应着“森林”的⼤⼩。⼀般地,森林规模越⼤,集成的⽅差越⼩,模型泛化能⼒越强,但规模越⼤导致计算开销越⼤,所以在保证泛化能⼒前提下取较合适的 n_estimators 值即可。
下图⽰是在某次参数调节中验证集 f1_score 随 n_estimators 的变化曲线,可以看到当 n_estimators 达到⼀定⼤⼩以后,继续增⼤⽆助于模型性能的提升。
max_depth(树深度)
max_depth 属于基学习器参数,它控制着每个决策树的深度,⼀般来说,决策树越深,模型拟合的偏差越⼩,但同时拟合的开销也越⼤。⼀般地,需要保证⾜够的树深度,但也不宜过⼤。
islate下图⽰为某次参数调节过程中验证集 f1_score 随 max_depth 的变化曲线,可以看到当 max_depth 达到⼀定⼤⼩以后,继续增⼤⽆助于模型性能的提升。
min_samples_split(划分样本数)/min_samples_leaf(叶最⼩样本数)
这两个参数控制着分⽀粒度,防⽌着过拟合,效果相似。在RF中单个基学习器关注偏差,其叶节点粒度应该很⼩,所以这两个参数应设置得⽐较⼩。
cut_off(预测概率阈值)
模型在对样本进⾏⼆分类预测时,⾸先得出的是样本所属类别的概率,然后通过阈值(如取cut_off = 0.5)划分得出结果。⽐如说:⼤于阈值判为正例,⼩于阈值的判为反例。该阈值反应了我们对于预测把握的估计,阈值越⼤的,要求的预测似然越⼤,对应的预测类别特征空间相应的收缩。
下图⽰为某次参数调节过程中验证集 f1_score 随 cut_off 的变化曲线,可以看到,此时的阈值应取⼤⼀些。
此外,还有许多的参数需要在模型训练时予以考虑。总的来说,参数调节是为了找到最适合于当前数据分布下的模型,由于参数众多,要找到这样⼀个全局最优的参数组合在实践中往往做不到,⼀个合理的⽅法是采⽤贪⼼的思路,先过程参数再基学习器参数,粗调与细调相结合,争取找到局部最优的参数组合,多次迭代此过程,使得局部最优的参数组合满⾜任务要求。
下⾯是两套参数组合下的预测结果评分,可以看到,基于此随机森林模型的预测结果明显优于之前的结果:
GBDT
newoneGBDT(梯度迭代决策树)是⼀种基于决策回归树的Boosting模型,其核⼼思想是将提升过程建⽴在对“之前残差的负梯度表⽰”的回归拟合上,通过不断的迭代实现降低偏差的⽬的。这⾥我们采⽤ble.GradientBoostingClassifier来实现GBDT分类器。
south是什么意思同随机森林⼀样,GBDT在训练时也需要进⾏⼤量的参数调节⼯作,以期获得适合于当前数据任务的模型。这⾥依然将GBDT的参数分为过程参数和基学习器参数两类,⾸先调节过程参数(学习率、基学习器个数等),然后调节基学习器参数(树深度、叶⼦分裂样本数等),推荐采⽤启发贪⼼式的参数调节⽅法,反复调节以期得到较好的参数组合。GBDT具体的调参对象与随机森林类似,但要注意⼆者集成本质的区别,下⾯是对⼀些重要参数的讨论:
N/P_ratio(负正样本⽐例)
和随机森林⼀样。考虑到过量冗余的负样本会严重加⼤训练消耗,考虑在不影响样本信息充分性的前提下对数据进⾏采样。
learning_rate(学习率)/n_estimators(基学习器数⽬)
这⾥,learning_rate 和 n_estimators 分别控制迭代的步长和最⼤迭代次数,所以,这两个参数应当⼀起调试,寻找最优的组合。
GBDT设置⼤量基学习器的⽬的是为了集成来降低偏差,所以 n_estimators ⼀般会设置得⼤⼀些。
下图⽰为某次参数调节过程中验证集 f1_score 在不同 learning_rate 取值下随 n_estimators 的变化曲线。从图中可以看出,过⼤学习率导致拟合效果很差甚⾄出现发散,过⼩的学习率导致拟合太慢;另
freshmeat外我们可以看出,当迭代达到⼀定次数时,继续迭代对模型提升效果不⼤,据此可选择出⼀个合适的n_estimators取值。
max_depth(树深度)
对于GBDT模型来说,其每个基学习器是⼀个弱学习器,决策树的深度⼀般设置得⽐较⼩,以此来降低⽅差,之后在经过残差逼近迭代来降低偏差,从⽽形成强学习器。所以不同于随机森林模型,这⾥的 max_depth 参数值应设置得⽐较⼩,
greg norman下图⽰为某次参数调节过程中验证集 f1_score 随 max_depth 的变化曲线。
min_samples_split(划分样本数)/min_samples_leaf(叶最⼩样本数)
在GBDT中,单个基学习器侧重于降低⽅差,其叶节点粒度应该⽐较粗,所以这两个参数应设置得较⼤,但同时要考虑到数据失衡的情况,所以⼜不能设置得过⼤。
下图⽰为某次参数调节过程中验证集 f1_score 随 min_samples_leaf 的变化曲线。
cut_off(预测概率阈值)
同随机森林中该项参数⼀致,cut_off 控制着我们对结果的置信程度。下图⽰为某次参数调节过程中验证集 f1_score 随 cut_off 的变化曲线,可以看出,当前参数设定下的训练器,取 cut_off ~ [0.4,0.6]⽐较合适,(p.s.cut_off分布较对称且矮胖得出来的结果⽐较稳定)。
除了上述参数之外,在⼀般调参的过程中还需要考虑的参数有:参考随机森林引⼊特征随机性的参数 max_features ,控制叶节点分裂粒度的参数 min_samples_split、min_samples_leaf 等。
下⾯是两套参数组合下的预测结果评分,可以看到,基于此GBDT模型的预测结果:
stresdout(p.s.借助GBDT的强⼤⼒量再次rank到了第2名….2/5000)
结果总结