以两个步骤训练数据的准确度相同?

时间:2017-11-30 05:41:03

标签: numpy machine-learning parallel-processing scikit-learn

我正在尝试实现主动学习机(项目实验)算法,我想单独训练,请检查下面的代码。

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)

两者都有不同的准确度分数。我想将训练数据添加到现有模型本身,因为它的计算成本很高 - 我不希望我的模型再做一次计算。

我能以任何方式吗?

2 个答案:

答案 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..