2016-11-28 12 views
0

Прежде всего, я новичок в изучении python и nlp/machine. прямо сейчас у меня есть следующий код:python sklearn использует больше, чем просто функции подсчета для обучения наивных заливов

vectorizer = CountVectorizer(
    input="content", 
    decode_error="ignore", 
    strip_accents=None, 
    stop_words = stopwords.words('english'), 
    tokenizer=myTokenizer 
) 
counts = vectorizer.fit_transform(data['message'].values) 
classifier = MultinomialNB() 
targets = data['sentiment'].values 
classifier.fit(counts, targets) 

теперь это на самом деле работает довольно хорошо. Я получаю разреженную матрицу через CountVectorizer, а classifier использует матрицу, а также цели (0,2,4).

Однако, что мне делать, если бы я хотел использовать больше функций в векторе вместо просто слов? Кажется, я не могу это понять. Заранее спасибо.

ответ

1

В вашем случае counts - разреженная матрица; Вы можете добавить столбцы к нему с дополнительными функциями:

import numpy as np 
from scipy import sparse as sp 

counts = vectorizer.fit_transform(data['message'].values) 
ones = np.ones(shape=(len(data), 1)) 
X = sp.hstack([counts, ones]) 

classifier.fit(X, targets) 

scikit учиться также встроенный помощник для этого; он называется FeatureUnion. Существует пример объединения функций от двух трансформаторов в scikit учиться docs:

estimators = [('linear_pca', PCA()), ('kernel_pca', KernelPCA())] 
combined = FeatureUnion(estimators) 

# then you can do this: 
X = combined.fit_transform(my_data) 

FeatureUnion делает почти то же самое: он принимает список vectorizers (с названиями), называет их всех для одних и тех же входных данных, то конкатенирует результат по столбцам.

Это, как правило, лучше использовать FeatureUnion, потому что у вас будет легче, используя scikit учиться кросс-проверки, травление окончательного трубопровода и т.д.

Смотрите также эти учебники:

0

Это зависит от ваших данных и того, что вы пытаетесь сделать. Существуют различные методы преобразования, которые можно использовать у подсчетов слова: мешок слов, TFIDF, Word Вектор, ...

Вы можете прочитать больше из этих документов: - http://billchambers.me/tutorials/2015/01/14/python-nlp-cheatsheet-nltk-scikit-learn.html - http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html

+0

привет, спасибо за ваш ответ. эти ссылки кажутся полезными. Однако, я думаю, мой вопрос на самом деле еще проще, чем вы думаете. Я понимаю, что есть много доступных векторных инструментов. Но давайте просто скажем, что я хотел использовать общее количество слов самого сообщения в качестве дополнительной функции. это было бы простое целое число. в настоящее время функция 'classifier.fit' использует матрицу, возвращаемую' CountVectorizer'. Как добавить число слов к вектору функций, используемых «классификатором», чтобы использовать его как «counts», так и «count count»? – Micha