2016-11-28 1 views
0

まずは、私はPythonとnlp/machine learningの初心者です。今、これは実際にはかなりうまく動作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と呼ばれます。

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

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

FeatureUnionは、ほぼ同じこと:それは、その後、(名前の)ベクトライザーのリストを取り、同じ入力データのためにそれらすべてを呼び出すscikit-学ぶdocsに2つのトランスからの特徴を組み合わせた例があります結果を列単位で連結します。

あなたはscikit-学ぶクロスバリデーションを使用して簡単に時間を持つことになりますので、

は、これらのチュートリアルを参照してくださいなど、最終的にパイプラインを酸洗、FeatureUnionを使用することが通常より良いです:

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'によって返された行列を使います。 'count 'と' overall word count'の両方を使うために、 'classifier'が使う特徴ベクトルに単語カウントを追加するにはどうしたらいいですか? – Micha

関連する問題