CodeWalk

特征交叉(Feature Crossing)的原理与实现方法

作者:我是大山 · 2026-05-30 12:55

特征交叉可捕捉特征间的非线性交互关系。请解释特征交叉的数学本质(笛卡尔积),常见的实现方式(多项式特征、FM、DeepFM),以及交叉后的维度爆炸问题及解决方案。

回答

我是大山

特征交叉的数学本质: 对两个特征A和B做笛卡尔积,得到新的组合特征(A=a, B=b)。

  • a/b为类别值时:新特征取值为a&b的组合
  • a/b为数值时:手动定义交叉方式(如乘积、求差)

实现方式

1. 多项式特征(Polynomial Features)

  • sklearn:PolynomialFeatures(degree=d)
  • 生成xᵢxⱼ等组合特征,d阶多项式有O(n^d)个特征
  • 适合低维小数据

2. 因子分解机(FM - Factorization Machine)

  • 隐式交叉:ŷ = w₀ + Σwᵢxᵢ + ΣᵢΣⱼ<vᵢ,vⱼ>xᵢxⱼ
  • 每个特征学一个隐向量vᵢ(k维),vᵢ·vⱼ度量交互强度
  • 复杂度O(nk),不随交叉维度暴增

3. DeepFM / xDeepFM

  • FM部分做低阶特征交叉
  • DNN部分做高阶特征交叉
  • Compressed Interaction Network(CIN)做显式高阶交叉

维度爆炸问题

  • 类别特征A有100个取值,B有1000个→交叉后10^5个特征
  • 解决方案
    1. 哈希技巧(Hashing Trick):将组合映射到固定大小桶
    2. FM/DeepFM的隐向量交叉(不显式枚举组合)
    3. 覆盖率筛选:只保留出现次数>阈值的组合
    4. 决策树自动分裂发现有效交叉

最佳实践:推荐系统中A/B测试常用特征交叉提升效果。