【发布时间】:2016-06-13 04:57:13
【问题描述】:
我们正在将在线机器学习线性回归模型从 Vowpal Wabbit 转换为 Spark MLLib。 Vowpal Wabbit 允许通过在由链表支持的权重上训练模型来实现任意、稀疏的特征,而 Spark MLLib 在由固定长度数组支持的权重的 MLLib Vector 上进行训练。
我们传递给模型的特征是任意字符串而不是类别。 Vowpal Wabbit 使用哈希将这些特征映射到1.0 的权重值。我们可以在 MLLib 中进行相同的映射,但仅限于固定长度的数组。是否可以在特征空间大小未知的MLLib中训练出这样的模型?
【问题讨论】:
-
你的意思是像
HashingTF这样的东西吗? -
我查看了 HashingTF,我认为它不是我想要的,因为它正在计算词频。我曾考虑使用带有非常大向量的散列技巧,但它并不完全等同于链表实现,而且我不确定大向量是否能跟上我们的训练流。不过,任何见解都会有所帮助。
-
输入必须是向量,除非您想重写大部分 MLLib,否则您无能为力。
HashingTF正在使用SparseVector并且 numFeatures 等于Integer.MAX_VALUE和一些后处理(截断到 1.0)是你能得到的最好的东西。我不相信这是一种创建功能的理智方式,但它完全不同:)。 -
谢谢,是的,这正是我所发现的;我想我有一个想法,使用here 描述的单位输出散列函数,向量大小相对较小,因为some sources 说散列冲突不会以非常负面的方式影响模型。不过,这是一个需要谨慎处理的权衡。
-
This question 类似;不同之处在于,在我的情况下,“频率”需要上限为 1。我实际上可以使用
HashingTF对输出向量进行第二次传递,为每个元素 i 返回max(1, v[i])。
标签: apache-spark machine-learning regression apache-spark-mllib vowpalwabbit