2014-01-28 3 views
3

В настоящее время я работаю над сентиментальным анализом данных twitter для одной из данных компании. Я загружаю данные в HDFS и используя классификатор Naive Bayes от Mahout для прогнозирования положительных, отрицательных или нейтральных настроений ,Логистическая регрессия Реализация SVM в Mahout

Вот что я делаю

  1. я обеспечиваю подготовки данных к машине (ключ: настроения, значение: текст).

  2. Использование библиотеки mahout путем вычисления tf-idf (Inverse Document Frequency) текста, создающего вектор-функцию.

    махаут seq2sparser -i/пользователь/корень/new_model/dataseq --maxDFPercent --minSupport 4 1000000 --maxNGramSize 2 -a org.apache.lucene.analysis.WhitespaceAnalyzer -o/пользователь/корень/new_model/предсказывал

  3. Разделение данных как набора для обучения и набора тестов.

  4. Этот вектор функции Я передаю наивный алгоритм Байеса, чтобы построить модель.

махаут trainnb -i/пользователь/корень/new_model/железно-векторы -EL -lI/пользователь/корень/new_model/labelindex -o/пользователь/корень/new_model/модель -ow -c

  1. Используя эту модель, я предсказываю чувство новых данных.

Это очень простая реализация, что я делаю. Благодаря этой реализации я получаю очень низкую точность, даже если у меня есть хороший набор для обучения. Поэтому я решил переключиться на логистическую регрессию/SVM, потому что они дают лучшие результаты для этой проблемы.

Итак, мой вопрос: как я могу использовать этот алгоритм для построения моей модели или предсказания настроений твитов с использованием этих двух алгоритмов. Какие шаги я должен выполнить для достижения этого?

+0

Вы фильтруете слова, используя слова остановки? Насколько низкая точность? Является ли ваша точность рассчитана по одному тестовому набору или перекрестно проверена? –

+0

Нет. Я не удаляю стоп-слова. Я тестировал его на 1000 тестовых данных. Точность составляет около 65%. –

+0

Если вы сохраняете слова остановки (т. Е. Шумные функции) и выполняете только 1 проход поезда/теста, то полученная точность может быть не очень значимой. Прежде чем решить, следует ли менять алгоритм, я предлагаю убедиться, что 65% - это точная оценка точности. Например, вы можете выполнить кросс-валидацию (я не знаю, возможно ли это с помощью Mahout), или вы можете выполнить процедуру обучения n раз и вычислить среднюю точность (70% -поезд-30% или 90% % train-10% test - общие схемы) –

ответ

0

Попробуйте использовать CrossFoldLearner, но я сомневаюсь, если он принимает наивные байесовские модели обучения, я использовал OnlineLogisticRegression некоторое время назад. Или, надеюсь, вы можете написать свой собственный CrossFoldLearner с наивным Байесом в качестве ученика. Также я не думаю, что изменение алгоритма резко улучшит результаты. Это означает, что вам нужно внимательно изучить анализатор для выполнения токенизации. Возможно, рассмотрите токенизацию bigram, вместо того, чтобы использовать только токены Unigram. Вы задумались о фонетике, поскольку большинство слов щебета не из словаря.

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