process
FM ➡️ FFM ➡️ DeepFM
线性模型: f(x)= + ·
缺点:只考虑了每个特征对结果的影响,而没有考虑特征件组合对结果的影响
SVM模型: f(x)= + · + ·
缺点:在稀疏性明显的样本中,和都不为0的样本非常少,这会导致不能够得到足够的训练,从而不准确。
FM模型: f(x)= + · + ()·
优点:可以在稀疏数据中进行参数估计,FM模型复杂度是线性的,可以用于任何为实值的情况
FFM模型: f(x)= + · + ()·
优点:FFM只会学习到字段之间的交叉,而不会学习同字段内的交叉
x = [u1, u2, m1, m2, c1, c2]
field1 field2 field3
DeepFM模型:
前面模型的缺点:尽管FM模型理论上可以得到高阶特征关系,但实际应用中一般指采用二阶特征,因为复杂度太高,现有的FNN,PNN和Wide&Deep模型都有着预训练耗时以及需要特征工程等问题
该模型解决的问题:如何找到一种可以兼顾低阶和高阶特征,并且无需特征工程和预训练方法
=<w,x> + <,>·
一阶特征 高阶特征
= ( + )
= · +
y=sigmoid( + )
- Q1:由于类别特征
无法直接用于数值计算,为了表征这类特征,我们采用独热编
码将特征向量转换为高维稀疏向量.考虑到高维稀疏特征难
以处理,通常采用特征嵌入将高维稀疏特征嵌入到低维稠密
的向量空间中,以获得特征嵌入向量E
1 | import pandas as pd |
-
Q2:baseline
LR (Logistic Regression):这是一个基本的线性模型,对原始特征进行线性变换,然后通过sigmoid函数将输出转换成0到1之间的概率。它适用于二分类问题,但只能捕捉到特征的一阶交互(即每个特征对输出的独立影响)。FM (Factorization Machine):这是一个能够学习特征对的二阶交互的模型。它使用了矩阵分解的技术,使得在有大量稀疏特征的情况下,也能高效地学习特征的二阶交互。
DeepFM:这个模型结合了FM和深度学习的技术。它的FM部分用于学习特征的低阶交互,而深度网络部分用于学习特征的高阶交互。这两部分共享同样的输入,使得低阶和高阶交互能够同时被学习。
xDeepFM:这个模型在DeepFM的基础上进一步引入了CIN(Compressed Interaction Network)部分,用于显式地学习特征的高阶交互。它同时考虑了显式和隐式的特征交互,能够更好地学习特征之间的复杂关系。
AFM (Attentional Factorization Machine):这个模型在FM的基础上引入了注意力机制。对于每个特征对的交互,AFM都会通过一个注意力网络来计算其重要性,然后将注意力分数用于加权特征对的交互。这使得模型能够区分不同交互特征的重要性。
AutoInt (Automatic Feature Interaction):这个模型使用了多头自注意力机制来学习特征的交互。自注意力机制使得模型在计算一个特征对输出的影响时,能够考虑到所有其他特征的信息。这使得模型能够自动地、显式地学习特征的高阶交互。
-
Q3:低阶和高阶的特征是什么?你能用DeepFM模型举一个例子吗,帮助我更好的理解DeepFM模型
"低阶"和"高阶"特征交互通常指的是特征组合的复杂性。低阶特征交互通常指的是两个或者少数几个特征之间的交互。例如,在推荐系统中,用户的性别(男或女)和商品的类别(衣服或鞋子)之间的交互可以被看作是一个二阶交互(也就是低阶交互)。如果男性更倾向于购买鞋子,而女性更倾向于购买衣服,这个信息就是一个二阶交互特征。
高阶特征交互则涉及到三个或者更多的特征。例如,用户的年龄、性别和商品的类别三者之间的交互就是一个三阶交互。如果我们发现年轻的男性用户更倾向于购买运动鞋,而年轻的女性用户更倾向于购买高跟鞋,这个信息就是一个三阶交互特征。
下面是一个DeepFM模型的例子。假设我们有一个简化的推荐系统问题,特征包括用户的性别(男、女)、年龄(年轻、中年、老年)和商品的类别(衣服、鞋子)。我们想预测一个用户是否会购买一个商品。
DeepFM会将这些特征先通过embedding转化为连续向量,然后:
FM部分:DeepFM会学习每对特征之间的交互,也就是二阶交互。例如,它会学习"男性"和"鞋子"的交互对购买行为的影响是什么,"年轻"和"衣服"的交互对购买行为的影响是什么等。
Deep部分:DeepFM的深度网络部分则会学习更复杂的、高阶的特征交互。例如,它可能会发现年轻的男性用户更喜欢购买运动鞋这样的三阶交互。
最后,DeepFM会将FM部分和Deep部分的输出合并,然后通过一个sigmoid函数,将它们转化为购买的概率。
-
Q4: 什么是隐变量
隐变量(latent variable)是指在统计模型中未被直接观测到的变量。它通常用于描述一些隐藏的因素,这些因素影响了我们可以观测到的变量。
举个简单的例子,假设我们要建立一个模型来预测某个学生的考试成绩。考试成绩是我们可以观测到的变量。但是考试成绩会受到一些隐藏的因素的影响,比如这个学生的智商、学习动机、学习时间等,这些就是隐变量。
我们可以建立一个回归方程:
考试成绩 = w1 * 智商 + w2 * 学习动机 + w3 * 学习时间 + 噪声
这里智商、学习动机和学习时间就是隐变量,它们影响着我们最终观测到的考试成绩,但自己本身是不可观测的。我们需要通过考试成绩反向估计这些隐变量,以建立一个更好的预测模型。
隐变量在很多机器学习和统计模型中都有应用。比如在隐马尔科夫模型、概率图模型等,都利用隐变量来描绘数据之间的复杂依赖关系。总体来说,隐变量为我们建模提供了更大的灵活性。