在分解机算法中处理分类特征 - 特征散列与 One-Hot 编码

数据挖掘 Python 分类数据 scikit-学习 特征工程
2021-10-14 02:29:34

为了解决预测问题,我愿意使用Factorization Machines,该模型除了学习特征的线性权重之外,还为每个特征学习一个向量空间,以学习这个新空间中特征之间的配对交互。

有人告诉我,执行散列技巧将分类特征转换为 1-of-k 二进制特征(使用 sklearn 的DictVectorizer,它返回稀疏矩阵)会破坏特征交互,我应该尝试常规的 one-hot 编码

谁能解释为什么?

1个回答

我决定扩展我的评论并做出完整的回答。

所以有人可能会说执行散列技巧会​​破坏交互的原因是因为它可能将不同的特征映射到同一个桶。但通常这没什么大不了的。

请注意,DictVectorizer不执行散列技巧:

当特征值是字符串时,此转换器将执行二进制 one-hot(也称为 one-of-K)编码:为该特征可以采用的每个可能的字符串值构造一个布尔值特征。例如,可以取值“ham”和“spam”的特征“f”将成为输出中的两个特征,一个表示“f=ham”,另一个表示“f=spam”。

为此,您需要使用不同的矢量化器:HashingVectorizer