這是關於功能集的一個非常基本的問題。使用MultinomialNB組合功能集
比方說,我有一羣人有各種功能,我想提出建議。他們還寫了一段自由形式的文本,這對我需要向他們推薦的內容非常重要。
我可以瞭解如何向量化他們的示例文本,但我不知道如何再添加功能,如國籍,年齡,性別等等等等
所以我有這樣的:
#dbsession = sqlalchemy session
people = dbsession.query(People).filter(People.category!="inactive")
all_text = [(a.all_text, a.category) for a in people ]
vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5, stop_words='english')
X_train = vectorizer.fit_transform([x[0] for x in all_text])
y_train = ([x[1] for x in all_text])
classifier = MultinomialNB()
classifier.fit(X_train,y_train)
print("Training score: {0:.1f}%".format(classifier.score(X_train, y_train) * 100))
a = People.populate_from_db(dbsession,2309601) # this gives me the person I want to categorise
print a
sample_text = a.all_text
t_form = vectorizer.transform([sample_text])
probs = classifier.predict_proba(t_form)
for i,p in enumerate(probs[0]):
print "# ", classifier.classes_[i] , "%.2f %%" % (p*100)
(是的,我知道我不應該使用訓練集中的一個項目進行測試,但是我只是在將實際數據放入之前先運行代碼)。
現在,如果人物對象具有屬性如「國籍」,那麼將其加入到分類中的最佳方式是什麼?更難?
這些不是多項NB的好功能,因爲它們不是頻率。切換到'LogisticRegression',並使用'DictVectorizer'進行特徵提取。 'TfidfVectorizer'實際上僅用於詞頻特性。 – 2014-09-01 15:40:17
謝謝@larsmans - 我是新手(如果你沒有猜到),並從http://scikit-learn.org/stable/auto_examples/document_classification_20newsgroups.html獲得我的主要示例。我將如何取代LogisticRegression/DictVectorizer?直接在代碼中? – 2014-09-01 16:30:46
比這更有意思。忘記我所說的話,你可以做的最簡單的事情可能是在你的文檔中加入'sex = male'(或'= female')和'nationality = WHATEVER',然後看看樸素貝葉斯是否挑選它。 – 2014-09-01 20:30:57