我在DataBricks上尝试了标准spark HashingTF示例。

import org.apache.spark.ml.feature.{HashingTF, IDF, Tokenizer}

val sentenceData = spark.createDataFrame(Seq(
  (0, "Hi I heard about Spark"),
  (0, "I wish Java could use case classes"),
  (1, "Logistic regression models are neat")
)).toDF("label", "sentence")

val tokenizer = new Tokenizer().setInputCol("sentence").setOutputCol("words")
val wordsData = tokenizer.transform(sentenceData)
val hashingTF = new HashingTF()
  .setInputCol("words").setOutputCol("rawFeatures").setNumFeatures(20)
val featurizedData = hashingTF.transform(wordsData)
display(featurizedData)


我很难理解下面的结果。
Please see the image
当numFeatures为20时

[0,20,[0,5,9,17],[1,1,1,2]]
[0,20,[2,7,9,13,15],[1,1,3,1,1]]
[0,20,[4,6,13,15,18],[1,1,1,1,1]]


如果[0,5,9,17]是哈希值
和[1,1,1,2]是频率。
17有频率2
9有3(有2)
13,15拥有1,而他们必须拥有2。

可能我缺少了一些东西。找不到详细说明的文档。

最佳答案

您的猜测是正确的:


20-是矢量大小
第一个列表是索引列表
第二个列表是值列表


前导0只是内部表示的产物。

这里没有其他要学习的东西了。

07-24 18:45