Как использовать искровой наивный байесовский классификатор для классификации текста с IDF?
Я хочу преобразовать текстовые документы в векторы функций, используя tf-idf, а затем обучить наивный алгоритм Байеса для их классификации.
Я могу легко загружать свои текстовые файлы без меток и использовать HashingTF (), чтобы преобразовать их в вектор, а затем использовать IDF () для взвешивания слов в соответствии с их важностью. Но если я сделаю это, я избавлюсь от меток, и, кажется, невозможно рекомбинировать метку с вектором, даже если порядок тот же.
С другой стороны, я могу вызывать HashingTF () для каждого отдельного документа и сохранять метки, но затем я не могу вызвать IDF () для него, так как для этого требуется весь корпус документов (и метки будут мешать) ,
В документации по искрам для наивных байесов есть только один пример, где точки уже помечены и векторизованы, так что это не сильно поможет.
Я также взглянул на это руководство:http://help.mortardata.com/technologies/spark/train_a_machine_learning_model но здесь он только применяет функцию хеширования к каждому документу без idf.
Поэтому у меня вопрос, есть ли способ не только векторизовать, но и взвесить слова, используя idf для наивного байесовского классификатора? Кажется, главная проблема заключается в том, что Спаркс настаивает на том, чтобы в качестве входных данных для NaiveBayes принимались только числа с помеченными точками.
def parseLine(line):
label = row[1] # the label is the 2nd element of each row
features = row[3] # the text is the 4th element of each row
features = tokenize(features)
features = hashingTF.transform(features)
return LabeledPoint(label, features)
labeledData = data1.map(parseLine)