4. 逻辑回归与FM:逻辑回归在推荐中的应用、特征交叉、FM因子分解机原理
好,咱们进入第四章。
这一章,我打算聊聊推荐系统里两个非常经典的模型——逻辑回归和FM。说实话,这两个模型虽然“年纪”不小了,但直到今天,很多工业级推荐系统的底层架构里,依然能看到它们的身影。你想想看,能在深度学习大行其道的今天还屹立不倒,肯定是有两把刷子的。
4.1 逻辑回归在推荐中的应用
逻辑回归,说白了就是一个线性模型加了个sigmoid函数。但别小看它,它在推荐系统里可是个“万金油”角色。
为什么逻辑回归适合做推荐?
核心原因就两点:可解释性强和计算效率高。
- 可解释性:每个特征都有一个对应的权重w。权重越大,说明这个特征对点击率的影响越大。这在业务排查和调优时特别有用。我记得有一次,线上CTR突然下跌,我直接拉出逻辑回归的权重表,发现某个特征的权重异常高,一查果然是数据埋点出了问题。
- 计算效率:逻辑回归的预测就是一次矩阵乘法加一个激活函数,计算量非常小。在广告系统这种动辄千万级QPS的场景下,逻辑回归依然是很多团队的首选。
具体怎么用?
在推荐场景里,我们通常把逻辑回归当作一个CTR预估模型。输入是用户特征、物品特征、上下文特征,输出是用户点击该物品的概率。
# 一个简单的逻辑回归CTR预估示例
import numpy as np
from sklearn.linear_model import LogisticRegression
# 假设我们有1000个样本,每个样本有10个特征
X = np.random.rand(1000, 10)
y = np.random.randint(0, 2, 1000)
model = LogisticRegression()
model.fit(X, y)
# 预测点击概率
pred_proba = model.predict_proba(X)[:, 1]
print(pred_proba[:5])
4.2 特征交叉:逻辑回归的“阿喀琉斯之踵”
逻辑回归虽然好,但它有一个致命的弱点——无法自动学习特征之间的交互关系。
举个例子:假设“男性”喜欢“足球”,“女性”喜欢“美妆”。逻辑回归只能学到“男性”这个特征对点击有正向作用,“足球”这个特征也有正向作用。但它学不到“男性+足球”这个组合的额外加成效果。
为什么会这样?因为逻辑回归是线性模型,它的输出是各个特征的加权和。特征之间是“独立”的,没有交叉项。
怎么解决?
最直接的办法就是手动做特征交叉。比如把“性别=男”和“品类=足球”组合成一个新特征“性别=男_品类=足球”。
# 手动特征交叉示例
import pandas as pd
data = pd.DataFrame({
'gender': ['male', 'female', 'male'],
'category': ['football', 'beauty', 'football'],
'click': [1, 0, 1]
})
# 手动构造交叉特征
data['gender_category'] = data['gender'] + '_' + data['category']
print(data)
但问题来了:如果特征维度很高,比如用户有1万个,物品有10万个,那交叉后的特征维度就是1万×10万=10亿。这谁受得了?
4.3 FM因子分解机原理
好了,既然手动交叉特征不靠谱,那有没有一种模型能自动学习特征交叉,又不会导致参数爆炸呢?
有,就是FM(Factorization Machine,因子分解机)。
FM的核心思想
FM的聪明之处在于:它不再为每个交叉特征单独分配一个权重,而是为每个特征学习一个隐向量(embedding)。两个特征的交叉权重,就等于它们隐向量的点积。
举个例子:
- 特征“男性”的隐向量是 [0.1, 0.2, 0.3]
- 特征“足球”的隐向量是 [0.4, 0.5, 0.6]
- 那么“男性+足球”的交叉权重 = 0.1×0.4 + 0.2×0.5 + 0.3×0.6 = 0.32
这样一来,参数数量就从O(n²)降到了O(nk),其中k是隐向量的维度(通常取10~50)。
FM的数学公式
FM的预测公式长这样:
y(x) = w0 + Σ(wi * xi) + ΣΣ( <vi, vj> * xi * xj )
其中:
- w0是全局偏置
- wi是每个特征的线性权重
- <vi, vj>是特征i和特征j隐向量的点积,代表交叉权重
FM的优势
- 自动学习交叉:不需要手动构造特征,模型自己会学。
- 泛化能力强:即使两个特征在训练数据中从未同时出现过,只要它们各自与其他特征有交互,FM也能通过隐向量推断出它们的交叉权重。
- 计算高效:FM的交叉项可以化简为O(nk)的时间复杂度,比暴力计算O(n²)快得多。
4.4 逻辑回归 vs FM:怎么选?
最后,我简单总结一下这两个模型的适用场景:
| 对比维度 | 逻辑回归 | FM |
|---|---|---|
| 特征交叉能力 | 无(需手动交叉) | 强(自动学习) |
| 可解释性 | 强(权重一目了然) | 中等(隐向量需分析) |
| 计算效率 | 极高 | 高 |
| 泛化能力 | 弱(依赖特征工程) | 强(能处理稀疏特征) |
| 推荐场景 | 简单场景、高QPS场景 | 特征稀疏、需要交叉的场景 |
嗯,这一章的内容就到这里。逻辑回归和FM,一个是“老黄牛”,一个是“多面手”。搞懂了它们,你就掌握了推荐系统里最基础也最核心的建模思路。下一章,我们聊聊深度学习在推荐中的应用,到时候你会发现,很多复杂模型其实都是FM的“变种”或“升级版”。