LR+GBDT
在推荐问题中,我们一般都预测用户是否做某事,是一个二分类问题。
对于二分类问题一般我们使用的是逻辑回归。逻辑回归是广义的线性模型,增加sigma函数使其输出值在[0,1]内,可以看做是一个事件发生的概率值。
但是逻辑回归对非线性的关系无能为力。
为了解决这个问题,我们可以用特征值组合解决这个问题。
假如性别和国籍与最终预测结果是非线性的。而性别+国籍与预测结果是线性的。如性别(男)并且国籍(china)。一个并操作就是特征值组合。
假如我们使用one_hot来表示特征值,那么性别1,国籍1 -> 性别国籍 1
特征值组合也属于特征工程的一部分,其难点在于怎么组合,组合哪些特征值是有效的。
特征选择时,我们总使用树模型来选择最重要的几个特征值。在这里树模型又发挥着特征组合的功能。
我们先来看一棵cart树,因为它是一颗二叉树,所以每一个节点分出两个枝干。每一个叶节点作为输出。
例如,样本x最终落在了小女孩叶节点上,那么我们可以认为age<15并且No male与最终结果有线性关系。
这样我们可以认为每一个叶节点都可以看做一个组合过的特征值,且该特征值与结果有着线性关系。
我们选择的树模型是梯度提升树。什么是梯度提升树?又为什么选择它呢?
梯度提升树是一个提升bosting模型。从一个弱分类器开始,开始用训练集训练出一棵树,将其负梯度作为残差(与真实性的差距)
用残差训练下一棵树,用下一棵树的叶节点去最小化全局损失函数
最后更新树(就是累加过程)
直到满足一个较小的误差。并得到强分类器
为什么使用该树呢?
梯度提升树是一颗树+一棵树累加起来的。前面的树是为了区分大多数样本,而后面的树是为了把特殊的样本分开。所以我们得到的组合特征也是有重要性的。
这比起单棵树或者是随机森林都要好。
我们将GBDT中,安树的叶节点采取特征值做one_hot然后喂入逻辑回归模型。会得到很好的效果。