【问题标题】:NLTK SklearnClassifier wrapper dataNLTK SklearnClassifier 包装数据
【发布时间】: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 在循环中得到训练时,之前的所有训练是否都变得无用,如果它确实变得无用,那么还有什么其他方法可以达到同样的效果?提前致谢。

【问题讨论】:

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


    【解决方案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.
    

    【讨论】:

      猜你喜欢
      • 2013-12-22
      • 2015-08-03
      • 2017-03-12
      • 1970-01-01
      • 2015-03-01
      • 2015-01-04
      • 2021-10-14
      • 2018-12-07
      • 2018-01-28
      相关资源
      最近更新 更多