这是关于功能集的一个非常基本的问题。使用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