NLTK SklearnClassifier 包装数据

Posted

技术标签:

【中文标题】NLTK SklearnClassifier 包装数据【英文标题】:NLTK SklearnClassifier wrapper data 【发布时间】:2017-07-29 12:09:24 【问题描述】:

我试图在 nltk.SklearnClassifier 包装器中创建一个 sklearn 分类器,并遇到了这个问题,如果我们不立即训练分类器(所有教程都这样做)并训练它一次数据,它是否会删除破坏先前对分类器进行的训练。我希望我说清楚了,但如果不是,这里有一些代码可以解释。

from nltk.classify.scikitlearn import SklearnClassifier
from sklearn.naive_bayes import MultinomialNB

class classifier(object):
    def __init__(self,c):
        self.c = c

    def train(self,featuresets):
        self.c.train(featuresets)

    def classify(self,feature):
        self.c.classify(feature)

clf = classifier(SklearnClassifier(MultinomialNB()))
while True:
    #some lengthy operation
    clf.train(featuresets)
    #some lengthy operation again
    clf.classify(feature)

我希望你现在明白我想说什么了。因此,当clf 在循环中得到训练时,之前的所有训练是否都变得无用,如果它确实变得无用,那么还有什么其他方法可以达到同样的效果?提前致谢。

【问题讨论】:

【参考方案1】:

一切都取决于您使用的分类器。并非所有 sci-kit 分类器都能够多次学习。

如果您想多次训练它,请在初始化分类器对象时设置 warm_start = True。

MultinomialNB 不可能被多次训练。即http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html 能够做到这一点。

不过,首先最好考虑一下您是否真的需要多次训练它。当您的数据超出可用内存时,通常会使用增量学习。

warm_start : bool, default: False

When set to True, reuse the solution of the previous call to fit as initialization,
otherwise, just erase the previous solution. Useless for liblinear solver.

【讨论】:

以上是关于NLTK SklearnClassifier 包装数据的主要内容,如果未能解决你的问题,请参考以下文章

NLP - 'SklearnClassifier' 对象没有属性 'fit' / Python

NLTK Data 可以安装在 AWS Redshift 环境中吗?

下载nltk数据包报错

NLTK - nltk.tokenize.RegexpTokenizer - 正则表达式未按预期工作

NLTK1

snownlp和nltk啥关系