我试图在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
在循环中接受训练时,所有先前的训练是否变得无用,如果它确实变得无用,那么实现相同的其他方法是什么?提前谢谢。
答案 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.