2014-12-18 3 views
0

Я очень новичок в python, а также в обучении машинам. Я пытаюсь работать с Sentiment Анализ данных twitter, поэтому при разработке я напрямую использую sklearn без какого-либо препроцесса в nltk.анализ настроений с использованием sklearn в python

#reading data from csv having 1 column with text and other with sentiment as pos and neg 
for index, row in val.iterrows(): 
    statement = row['tweets'].strip() #get the tweet from csv 
    tweets.append((statement, row['emo'])) #append the tweet and emotion(pos,neg) 

Тогда я использовал этот classfier

classifier = Pipeline([ 
    ('vectorizer', CountVectorizer()), 
    ('tfidf', TfidfTransformer()), 
    ('classifier', OneVsRestClassifier(LinearSVC()) 
    )]) 

#Dividing data into training and Testing 
np.random.shuffle(tweets) 
for key, value in tweets: 
    keys.append(key) 
    values.append(value) 

size = len(keys) * 1/2 

X_train = np.array(keys[0:size]) 
y_train = np.array(values[0:size]) 

X_test = np.array(keys[size + 1: len(keys)]) 
y_test = np.array(values[size + 1: len(keys)]) 

классификатор

classifier = classifier.fit(X_train, y_train) 

K-Fold Точность Тест

X_folds = np.array_split(X_test, 3) 
y_folds = np.array_split(y_test, 3) 

scores = list() 
for k in range(3): 
    X_train = list(X_folds) 
    X_test = X_train.pop(k) 
    X_train = np.concatenate(X_train) 
    y_train = list(y_folds) 
    y_test = y_train.pop(k) 
    y_train = np.concatenate(y_train) 
    clsf = classifier.fit(X_train, y_train) 

    scores.append(clsf.score(X_test, y_test)) 

С выше я получаю точность [+0,92494226327 944573, +0,91974595842956119, +0,93360277136258663] с помощью K-кратное с к = 3.

Насколько я вижу в коде TfidfTransformer, я нашел свой вид только предварительной обработки данных. Значит ли это, что если я работаю с sklearn, мне не нужно предварительно обрабатывать его, как указано в nltk.

Мой вопрос -

Если я могу непосредственно запустить набор данных на библиотеку scikit без предварительной обработки и получаю довольно хороший результат, когда сценарий , где я должен буду использовать предварительную обработку (nltk) перед запуском данных на skicit?

+2

Название немного противоречит множеству вопросов, представленных здесь. Попытайтесь сузить его до одного вопроса. Также рассмотрите свой вопрос и исправьте форматирование кода. – Hooked

+0

Вы можете использовать NLTK для тега вашего корпуса, когда-то помечен и организован, вы можете работать с классификацией scikit-learn. Я не понял, что ваш вопрос поможет мне помочь вам. –

+0

, не делая никаких тегов nltk с corpus, я получаю хорошую точность непосредственно над scikit-learn, так почему именно мне нужно пометить корпус? –

ответ

-1

Tfidf - это способ узнать, насколько значительным является слово в документе. Чтобы получить значимые результаты от вашего tfidf, хорошая предварительная обработка является обязательной с точки зрения стерилизации, ngraming и т. Д. Библиотека NLTK имеет хорошую поддержку для нее.

Результаты TFidf так же хороши, как и ваша предварительная обработка, иначе это будет GIGO (Garbage In Garbage Out). Так как вы иногда анализируете настроения, лучше заменить отрицания типа «din't» на «не» на этапе предварительной обработки.

5

Скорее всего, вы найдете, что тема covaries с настроениями (то есть большинство статей о матери Терезе положительны в настроении, большинство статей об убийстве отрицательны). Ваш мешок классификатора слов, вероятно, изучает категории тем, а не чувства. Вы можете проверить это, проверив весовые коэффициенты в терминах вашего классификатора: моя догадка - это самые взвешенные термины.

Почему это проблема? Потому что то, что вы узнали, не будет обобщать на темы, не входящие в ваш комплект обучения. Это будет большой проблемой, например, для Twitter, где тема быстро меняется. Попробуйте изучить такую ​​модель в месяце M и предсказать настроения в твитах в месяц M + 6. Я бы предположил, что это будет работать не очень хорошо!

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