我们正在将一个在线机器学习的线性回归模型从Vowpal Wabbit转换到Spark MLLib。Vowpal Wabbit通过使用链表支持的权重来训练模型,从而允许使用任意稀疏特征,而Spark MLLib则是通过固定长度数组支持的MLLib Vector
权重来训练模型。
我们传递给模型的特征是任意字符串而不是类别。Vowpal Wabbit使用哈希将这些特征映射到权重值1.0
。我们在MLLib中可以进行相同的映射,但受限于固定长度数组。在特征空间大小未知的情况下,是否可以在MLLib中训练这样的模型?
回答:
FeatureHasher可以实现这一点,并且使用与Vowpal Wabbit相同的哈希函数(MurmurHash3)。VowpalWabbit和FeatureHasher的默认特征数量都是2^18
https://spark.apache.org/docs/2.3.1/api/java/org/apache/spark/ml/feature/FeatureHasher.html