2016-11-28 19 views
0

首先,我是新的python和nlp /機器學習。 現在我有以下代碼:蟒蛇sklearn使用不僅僅是計數功能的幼稚bayes學習

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) 

現在這實際上工作得很好。我通過CountVectorizerclassifier獲得了一個稀疏矩陣,它使用矩陣以及目標(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-learn還提供了一個內置的幫手,它被稱爲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,詞彙向量,...

你可以讀出這些文檔的更多: - 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'返回的矩陣。如何將「字數」添加到「分類器」使用的特徵向量中,以便同時使用「計數」和「總字數」? – Micha