nou*_*nia 6 python nltk scikit-learn
文本文档的分类是scikit-learn的一个简单任务,但是在NLTK中没有一个干净的支持,也有样本用这样的方式做到这一点.我想用NLTK进行预处理并使用sckit-learn进行分类,我在NLTK中找到了SklearnClassifier,但是有一点问题.
在scikit中学习一切都很好:
from sklearn.naive_bayes import MultinomialNB
from sklearn.multiclass import OneVsRestClassifier
X_train = [[0, 0], [0, 1], [1, 1]]
y_train = [('first',), ('second',), ('first', 'second')]
clf = OneVsRestClassifier(MultinomialNB())
clf.fit(X_train, y_train)
print clf.classes_
Run Code Online (Sandbox Code Playgroud)
结果是['first' 'second']
,这是我的期望.但是当我尝试在NLTK中使用相同的代码时:
from nltk.classify import SklearnClassifier
X_train = [{'a': 1}, {'b': 1}, {'c': 1}]
y_train = [('first',), ('second',), ('first', 'second')]
clf = SklearnClassifier(OneVsRestClassifier(MultinomialNB()))
clf.train(zip(X_train, y_train))
print clf.labels()
Run Code Online (Sandbox Code Playgroud)
结果是[('first',), ('second',), ('first', 'second')]
,它不是正确的.有什么解决方案吗?
Fre*_*Foo 16
用于scikit-learn的NLTK包装器不知道多标签分类,它不应该因为它没有实现MultiClassifierI
.实现这需要一个单独的类.
您可以实现缺少的功能,也可以在没有包装器的情况下使用scikit-learn.较新版本的scikit-learn有一个DictVectorizer
接受NLTK包装器接受的大致相同的输入:
from sklearn.feature_extraction import DictVectorizer
X_train_raw = [{'a': 1}, {'b': 1}, {'c': 1}]
y_train = [('first',), ('second',), ('first', 'second')]
v = DictVectorizer()
X_train = v.fit_transform(X_train_raw)
clf = OneVsRestClassifier(MultinomialNB())
clf.fit(X_train, y_train)
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用X_test = v.transform(X_test_raw)
将测试样本转换为矩阵.sklearn.pipeline.Pipeline
通过将矢量化器和分类器绑定在一个对象中,可以使A 更容易.
免责声明:根据常见问题解答,我应该披露我的从属关系.我写了两个DictVectorizer
和用于scikit-learn的NLTK包装器.
归档时间: |
|
查看次数: |
2849 次 |
最近记录: |