火花术语频率转换

时间:2016-10-13 13:01:54

标签: apache-spark machine-learning apache-spark-mllib tf-idf

我在一个句子中有一组单词,我已将其标记并应用了术语频率转换。

int numFeatures = 9000;
    hashingTF = new HashingTF().setInputCol("filtered").setOutputCol("features")
            .setNumFeatures(numFeatures);
    DataFrame rawFeaturizedData = hashingTF.transform(stopWordsRemoved);
    rawFeaturizedData.show();

当我打印数据框时,我会在"功能"中看到如下所示的值。柱

(9000,[2010,2113,2599,3807,5109,5849],[1.0,1.0,1.0,1.0,1.0,1.0])

9000是为术语频率计算配置的功能数。我已将此设置为9000,因为在应用文本转换(停用词删除,lemmetization等)后有8000个独特的单词

[2010,2113,2599,3807,5109,5849] - 我假设这些是分配给文本中每个单词的数字(特征)

什么是[1.0,1.0,1.0,1.0,1.0,1.0]? - 根据定义,术语频率会对单词进行散列并计算每个单词的权重。这是重量吗?为什么它总是显示为1.0?

1 个答案:

答案 0 :(得分:2)

下列的程序:

(9000,[2010,2113,2599,3807,5109,5849],[1.0,1.0,1.0,1.0,1.0,1.0])

SparseVector的Spark字符串表示形式,其中:

  • 前导数是向量的大小(此处是要素数)。
  • 第一个数组是非零指数列表。
  • 第二个数组是值列表(此处为权重)。

如果符合以下条件,则指数等于:

  • 没有重复的令牌。
  • 没有散列冲突。

让我们说输入数据如下所示:

val df = Seq("orange orange apple", "apple orange kiwi").toDF("text")
  .withColumn("filtered", split($"text", "\\s+"))

如果我们使用11个功能:

val hashingTF11 = new HashingTF()
  .setInputCol("filtered")
  .setOutputCol("features")
  .setNumFeatures(11)

并转换:

hashingTF11.transform(df).show(2, false)

我们会在第一行看到2.0(橙色代表两次):

+-------------------+-----------------------+---------------------------+
|text               |filtered               |features                   |
+-------------------+-----------------------+---------------------------+
|orange orange apple|[orange, orange, apple]|(11,[9,10],[2.0,1.0])      |
|apple orange kiwi  |[apple, orange, kiwi]  |(11,[6,9,10],[1.0,1.0,1.0])|
+-------------------+-----------------------+---------------------------+

但如果我们将功能数量减少到10:

val hashingTF10 = new HashingTF()
  .setInputCol("filtered")
  .setOutputCol("features")
  .setNumFeatures(10)

并转换:

hashingTF10.transform(df).show(2, false)

这两行都具有权重为2.0的功能:

+-------------------+-----------------------+--------------------+
|text               |filtered               |features            |
+-------------------+-----------------------+--------------------+
|orange orange apple|[orange, orange, apple]|(10,[1,3],[1.0,2.0])|
|apple orange kiwi  |[apple, orange, kiwi]  |(10,[1,3],[2.0,1.0])|
+-------------------+-----------------------+--------------------+

由于哈希冲突。