小编Mat*_*att的帖子

用于文本分类任务的最佳scikit分类器

我正在使用scikit对短语进行文本分类.一些例子是:

"Yes" - label.yes
"Yeah" - label.yes
...
"I don't know" - label.i_don't_know
"I am not sure" - label.i_don't_know
"I have no idea" - label.i_don't_know
Run Code Online (Sandbox Code Playgroud)

使用TfidfVectorizer和MultinomialNB分类器,一切都运行良好.

添加新文本/标签对时出现问题:

"I" - label.i
Run Code Online (Sandbox Code Playgroud)

预测"I"的类仍会返回label.i_don't_know,即使文本正好在这样的训练数据中,这可能是因为unigram"I"更常出现在label.i_don't_know中.在label.i中.

是否有一个分类器可以在此任务上提供相当或更好的性能,并保证正确返回训练数据元素的预测?

此代码进一步说明了该问题:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB

#instantiate classifier and vectorizer
clf=MultinomialNB(alpha=.01)
vectorizer =TfidfVectorizer(min_df=1,ngram_range=(1,2))

#Apply vectorizer to training data
traindata=['yes','yeah','i do not know','i am not sure','i have no idea','i'];
X_train=vectorizer.fit_transform(traindata)

#Label Ids
y_train=[0,0,1,1,1,2];

#Train classifier
clf.fit(X_train, y_train)

print clf.predict(vectorizer.transform(['i']))
Run Code Online (Sandbox Code Playgroud)

代码输出标签1,但正确的分类是标签2.

python classification scikit-learn

2
推荐指数
1
解决办法
3349
查看次数

标签 统计

classification ×1

python ×1

scikit-learn ×1