Apache spark Spark MLLib:将任意稀疏特征转换为固定长度向量

Apache spark Spark MLLib:将任意稀疏特征转换为固定长度向量,apache-spark,machine-learning,regression,apache-spark-mllib,vowpalwabbit,Apache Spark,Machine Learning,Regression,Apache Spark Mllib,Vowpalwabbit,我们正在将在线机器学习线性回归模型从Vowpal Wabbit转换为Spark MLLib。Vowpal Wabbit通过在链接列表支持的权重上训练模型,允许使用任意稀疏特征,而Spark MLLib则在固定长度数组支持的权重的MLLib向量上训练 我们传递给模型的特征是任意字符串,而不是类别。Vowpal Wabbit使用散列将这些特性映射到1.0的权重值。我们可以在MLLib中进行相同的映射,但仅限于固定长度的数组。在不知道特征空间大小的MLLib中是否有可能训练这样一个模型?Feature

我们正在将在线机器学习线性回归模型从Vowpal Wabbit转换为Spark MLLib。Vowpal Wabbit通过在链接列表支持的权重上训练模型,允许使用任意稀疏特征,而Spark MLLib则在固定长度数组支持的权重的MLLib
向量上训练


我们传递给模型的特征是任意字符串,而不是类别。Vowpal Wabbit使用散列将这些特性映射到
1.0
的权重值。我们可以在MLLib中进行相同的映射,但仅限于固定长度的数组。在不知道特征空间大小的MLLib中是否有可能训练这样一个模型?

FeatureHasher将这样做,并且是与Vowpal Wabbit(HarrulHash3)相同的哈希函数。VowpalWabbit和FeatureHasher的默认功能数均为2^18


你的意思是这样的吗?我看了HashingTF,我想它不是我想要的,因为它是在计算术语频率。我曾考虑过对一个非常大的向量使用哈希技巧,但它并不完全等同于链表实现,我不确定这个大向量是否能跟上我们的训练流。不过,任何洞察都会有所帮助。输入必须是一个向量,除非您想重写大部分MLLib,否则对此您无能为力
HashingTF
正在使用
SparseVector
,numFeatures等于
Integer。MAX_VALUE
和一些后期处理(截断为1.0)是您能得到的最好的结果。我不确定这是否是一种创建特性的明智方法,但它完全是另一回事:)。谢谢,是的,这正是我所发现的;我想我有一个想法,使用单比特输出散列函数,如描述的,向量大小相对较小,因为散列冲突不会以非常负面的方式影响模型。不过,这是一个需要谨慎处理的权衡。是相似的;不同的是,在我的例子中,“频率”需要一个上限1。实际上,我可以使用HashingTF
对输出向量进行第二次传递,为每个元素I返回
max(1,v[I])