【问题标题】:Spark MLLib: convert arbitrary, sparse features to a fixed length VectorSpark MLLib:将任意稀疏特征转换为固定长度的向量
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2022-01-05
    • 2017-03-26
    • 2018-01-25
    • 2018-07-11
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 2016-10-16
    • 2017-01-01
    相关资源
    最近更新 更多