2016-10-13 11 views
1

У меня есть набор слов в предложении, в котором я обозначил и применил преобразование временной частоты.преобразование частоты искрового периода

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, поскольку после применения текстовых преобразований было сделано 8000 уникальных слов (удаление стоп-слов, lemmetization и т. Д.)

[2010,2113,2599,3807,5109,5849] - Я предполагаю, что это числа, присвоенные каждое слово в тексте (функции)

что такое [1.0,1.0,1.0,1.0,1.0,1.0]? - По определению, временная частота делает хеширование слов, а также вычисляет вес каждого слова. Это вес? Почему он всегда отображается как 1.0?

ответ

1

После:

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

является Спарк строковое представление SparseVector где:

  • Ведущее число является размер вектора (здесь количество функций).
  • Первый массив - это список ненулевых индексов.
  • Второй массив - это список значений (здесь весов).

Индексы равен единице, если:

  • Там нет повторяющихся жетонов.
  • Не существует конфликтов хеширования.

Допустим ввод данных выглядит следующим образом:

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])| 
+-------------------+-----------------------+--------------------+ 

из-за столкновения хешей.

 Смежные вопросы

  • Нет связанных вопросов^_^