2017-03-08 35 views
0

我試圖在nltk.SklearnClassifier包裝中製作一個sklearn分類器,並且遇到了這樣的問題,即如果我們不一次訓練分類器(所有的教程都是這樣做的)並訓練它一個數據,它會刪除以前的訓練對分類器的破壞。我希望我明確表達自己的意見,但如果不是這裏,則需要解釋一些代碼。NLTK SklearnClassifier包裝數據

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

一切都取決於您使用的分類器。並非所有的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.