为了解决预测问题,我愿意使用Factorization Machines,该模型除了学习特征的线性权重之外,还为每个特征学习一个向量空间,以学习这个新空间中特征之间的配对交互。
有人告诉我,执行散列技巧将分类特征转换为 1-of-k 二进制特征(使用 sklearn 的DictVectorizer,它返回稀疏矩阵)会破坏特征交互,我应该尝试常规的 one-hot 编码。
谁能解释为什么?
为了解决预测问题,我愿意使用Factorization Machines,该模型除了学习特征的线性权重之外,还为每个特征学习一个向量空间,以学习这个新空间中特征之间的配对交互。
有人告诉我,执行散列技巧将分类特征转换为 1-of-k 二进制特征(使用 sklearn 的DictVectorizer,它返回稀疏矩阵)会破坏特征交互,我应该尝试常规的 one-hot 编码。
谁能解释为什么?
我决定扩展我的评论并做出完整的回答。
所以有人可能会说执行散列技巧会破坏交互的原因是因为它可能将不同的特征映射到同一个桶。但通常这没什么大不了的。
请注意,DictVectorizer不执行散列技巧:
当特征值是字符串时,此转换器将执行二进制 one-hot(也称为 one-of-K)编码:为该特征可以采用的每个可能的字符串值构造一个布尔值特征。例如,可以取值“ham”和“spam”的特征“f”将成为输出中的两个特征,一个表示“f=ham”,另一个表示“f=spam”。
为此,您需要使用不同的矢量化器:HashingVectorizer