场感知因子分解机可以自动做特征组合和处理高维稀疏特征,因此它在处理大量离散特征的问题上往往有比较好的效果。使用场感知因子分解机时要注意对连续特征做归一化或离散化。
因子分解机、场感知因子分解机和其它模型的对比关系:
因子分解机和场感知因子分解机。场感知因子分解机对因子分解机引入场的概念,增加了模型复杂度和模型的表达能力。
因子分解机和神经网络。神经网络难以直接处理高维稀疏的离散特征,因为这导致了神经元的连接参数太多,而因子分解机可以看作对高维稀疏特征的离散特征做嵌入。
因子分解机和梯度提升树。因子分解机与梯度提升树都可以做特征组合,当数据不是高度稀疏时,梯度提升树可以有效的学习到比较复杂的特征组合,但在高度稀疏的数据中,特征二阶组合就足以让绝大多数组合特征找不到样本。
因子分解机和其它模型。因子分解机是一种比较灵活的模型,通过合适的特征变换方式,因子分解机可以模拟二阶多项式核的支持向量机模型、MF模型、SVD++模型等。但SVD++与MF扩展性不如因子分解机,支持向量机核函数计算复杂度较高。(MF、SVD++均为矩阵分解模型,参见:推荐系统总结MF->PMF->CTR->CDL->CNN,矩阵分解之SVD和SVD++)
梯度提升树(Gradient Boosting Decison Tree, GBDT)梯度提升树是一种基于回归树的集成学习方法,通过构造多个弱的回归树作为基学习器,并将这些树的结果累加起来作为最终的预测输出。
前置知识
机器学习的大致流程就是确定模型集合;定义经验损失函数;利用给定的数据集\(\{(x_i,y_i)\}\)从模型集合中寻找最佳模型(一般就是寻找最佳的模型参数)。
决策树是一种模型,它的主要思想是将输入空间划分为不同的子区域,然后给每个子区域确定一个值,该子区域又称为树的叶子节点。如果是分类树,这个值就是类别;如果是回归树,这个值就是实数值,该值又称作叶子节点的权重值,分数等。
\[
f(x)=\sum_{j=1}^Jc_jI(x\in R_j)
\]
其中,\(f(x)\)是决策树表征的函数;\(c_j\)是子区域对应的值;\(J\)为子区域的个数;\(I\)是指示函数,若\(x\in R_j\)则\(I(x\in R_j)=1\),否则为0
加法模型
\[
h(x)=\sum_{m=1}^M\beta_mf_m(x)
\]
\(f_m(x)\)称作基学习器;\(\beta_m\)是基学习器的系数,一般假设大于0
梯度提升树中的决策树是回归树,不是分类树,也就是说,只有回归树才有所谓的梯度提升。
泰勒公式
二阶泰勒展开:
\[
f(x+\Delta x)=f(x)+\frac{\partial f}{\partial x}\Delta x+\frac{1}{2}\frac{\partial ^2f}{\partial x^2}\Delta x^2+o(\Delta x)
\]
示例:对\(L(y,h_m(x)+\beta f(x))\)进行一阶泰勒展开,令\((y,h_m(x))\)为\(x\),\(\beta f(x)\)为\(\Delta x\),则:
\[
L(y,h_m(x)+\beta f(x))=L(y,h_m(x))+\beta f(x)\frac{\partial L(y,h_m(x))}{\partial h_m(x)}
\]
梯度提升树原理
梯度提升树是集成学习Boosting家族的一员,在训练时采用前向分步算法,首先确定第一棵树拟合的值,然后基于之前所有树的误差来更新并训练下一棵树,一步一步迭代下去直到梯度提升树构建完毕。
梯度提升树算法
简单起见,首先介绍与梯度提升树相近的提升树(Boosting Tree)。
提升树算法(以回归问题为例)
输入:训练数据集\(T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\},x_i\in X\subseteq \mathbb{R}^n,y\in Y\subseteq{R}\)
输出:提升树\(f_M(x)\)
初始化\(f_0(x)=0\)
对\(m=1,2,...,M\):
a. 计算残差:\(r_{mi}=y_i-f_{m-1}(x_i),\quad i=1,2,...,N\)
其中,\(f_{m-1}(x)\)为第\(m-1\)步时回归树加和的模型
b. 拟合残差\(r_{mi}\)学习一个回归树,获得\(T(x;\Theta_m)\)
其中,\(T(x;\Theta_m)\)是第\(m\)步的训练获得的基学习器,通过经验风险最小化确定这棵树的参数:
\[
\Theta_m=\mathop{argmin}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+T(x;\Theta_m))
\]
对于回归问题而言,\(L(y,\hat{y})\)可采用平方损失误差
c. 更新\(f_m(x)=f_{m-1}(x)+T(x;\Theta_m)\)
获得回归问题的提升树:
\[
f_M(x)=\sum_{m=1}^MT(x;\Theta_m)
\]
在提升树中,每一棵树的生成采用的训练数据都是上次预测结果与真实值的残差,这个残差会不断减小。
这实际就是前置知识中加法模型的典型应用。注意:由于这里基学习器是回归树,叶子节点的值是实数值,因此基学习器前的系数可省略。
梯度提升树