我正在尝试实现主动学习机(项目实验)算法,我想单独训练,请检查下面的代码。
clf = BernoulliNB()
clf.fit(X_train[0:40], y_train[0:40])
clf.fit(X_train[40:], y_train[40:])
以上通常都是这样做的
clf = BernoulliNB()
clf.fit(X_train, y_train)
两者都有不同的准确度分数。我想将训练数据添加到现有模型本身,因为它的计算成本很高 - 我不希望我的模型再做一次计算。
我能以任何方式吗?
答案 0 :(得分:2)
您应该使用partial_fit批量训练您的模型。
clf = BernoulliNB()
clf.partial_fit(X_train[0:40], y_train[0:40])
clf.partial_fit(X_train[40:], y_train[40:])
请检查this以了解有关该功能的更多信息。
希望这会有所帮助:)
答案 1 :(得分:1)
这称为在线培训或用于大数据的增量学习。请参阅此page for strategies。
基本上,在scikit-learn中,您需要partial_fit()
预先知道y
中的所有标签。
partial_fit(X,y,classes = None,sample_weight = None)
classes : array-like, shape = [n_classes] (default=None)
可能出现在y向量中的所有类的列表。必须在第一次调用partial_fit时提供,在后续调用中可以省略。
如果您只是这样做:
clf.partial_fit(X_train[0:40], y_train[0:40])
clf.partial_fit(X_train[40:], y_train[40:])
然后有可能如果任何类在前40个样本中不存在,并且在partial_fit()的下一次迭代中出现,那么它将抛出错误。
理想情况下,你应该这样做:
# First call
clf.partial_fit(X_train[0:40], y_train[0:40], classes = np.unique(y_train))
# subsequent calls
clf.partial_fit(X_train[40:80], y_train[40:80])
clf.partial_fit(X_train[80:], y_train[80:])
and so on..