NLTK SklearnClassifier包装器数据

时间:2017-03-08 18:50:48

标签: python python-2.7 machine-learning scikit-learn nltk

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

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 个答案:

答案 0 :(得分:0)

一切都取决于您正在使用的分类器。并非所有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.