DeepFM算法

本文介绍了DeepFM算法相关内容。

简介

DeepFM将深度学习模型(DNN)和因子分解机(FM)模型结合,同时支持学习低阶显式特征组合和高阶隐式特征组合,不需要人工做特征工程,常用于推荐系统或广告系统。

  • 输入通常有以下两类特征:

    • 类别特征(Categorical Feature):字符串类型。如性别(男/女)或物品类型(服饰、玩具、电子等)。

    • 数值特征(Numrical Feature):整型或浮点型。如用户活跃度或商品价格等。

  • 输出通常是0~1之间的浮点数,表示取值为1的概率。可以用于排序,也可以用于二分类。

使用场景

DeepFM通常用于分类或排序场景。在人工构建的特征但不能直接反映结果的场景上效果更好。在各种各样的推荐场景中,低阶特征组合或者高阶的特征组合都会对用户最终的行为产生影响。但人为可能无法明确特征组合,DeepFM可以自动学习这些组合。

例如:在个性化商品推荐场景中,通常需要做点击预估模型。使用用户过往的行为(点击、曝光未点击、购买等)作为创建模型数据,来预测用户点击或购买的概率。如果用户过往行为较多,且不能直接反映出在未来某时刻的点击或购买情况。DeepFM会对用户行为进行组合,同时将一些稀疏特征转化为高维的稠密特征。

参数说明

下表中的参数为创建模型CREATE MODEL语法中model_parameter参数的取值,您可以根据当前需求选择对应的参数。

参数

说明

metrics

评估模型的指标参数。取值如下:

  • accuracy(默认):精确度,用于评估分类模型。

  • binary_crossentropy:交叉熵,用于评估二分类问题。

  • mse:均方误差,用于评估回归模型。

loss

学习任务及对应的学习目标。取值如下:

  • binary_crossentropy(默认):交叉熵,用于二分类问题。

  • mean_squared_error:均方误差,用于回归模型。

optimizer

优化器。取值如下:

  • adam(默认):吸收了AdaGrad(自适应学习率的梯度下降算法)和动量梯度下降算法的优点,既能适应稀疏梯度(即自然语言和计算机视觉问题),又能缓解梯度震荡的问题。

  • sgd:随机梯度下降。

  • rmsprop:对AdaGrad算法进行改进,引入了权重参数,其对应的步长分量累计修改为加权和。

validation_split

交叉验证数据比例。默认值为0.2。

epochs

迭代次数。默认6次。

batch_size

batch长度,batch越短越容易过拟合。默认64。

task

任务类型。取值如下:

  • binary(默认):分类模型。

  • regression:回归模型。

示例

创建模型与离线模型学习

/*polar4ai*/CREATE MODEL airline_deepfm WITH
(model_class = 'deepfm',
x_cols = 'Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length',
y_cols='Delay',model_parameter=(epochs=6))
AS (SELECT * FROM db4ai.airlines);

模型评估

/*polar4ai*/SELECT Airline FROM EVALUATE(MODEL airline_deepfm, 
SELECT * FROM db4ai.airlines LIMIT 20) WITH 
(x_cols = 'Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length',y_cols='Delay',metrics='acc');

模型预测

/*polar4ai*/SELECT Airline FROM PREDICT(MODEL airline_deepfm,
SELECT * FROM db4ai.airlines limit 20) WITH
(x_cols = 'Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length');