我在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只是内部表示的产物。
这里没有其他要学习的东西了。