python sklearn GradientBoostingClassifier warm start error



我使用该模型在一组迭代 1000 次的数据上训练分类器:

clf = GradientBoostingClassifier(n_estimators=1000, learning_rate=0.05, subsample=0.1, max_depth=3)
clf.fit(X, y, sample_weight=train_weight)

现在我想将迭代次数增加到 2000 次。所以我这样做:

clf.set_params(n_estimators=2000, warm_start=True)
clf.fit(X, y, sample_weight=train_weight)

但是我收到以下错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-13-49cfdfd6c024> in <module>()
      1 start = time.clock()
      2 clf.set_params(n_estimators=2000, warm_start=True)
----> 3 clf.fit(X, y, sample_weight=train_weight)
      4 ...
C:Anaconda3libsite-packagessklearnensemblegradient_boosting.py in fit(self, X, y, sample_weight, monitor)
   1002                                     self.estimators_.shape[0]))
   1003             begin_at_stage = self.estimators_.shape[0]
-> 1004             y_pred = self._decision_function(X)
   1005             self._resize_state()
   1006 
C:Anaconda3libsite-packagessklearnensemblegradient_boosting.py in _decision_function(self, X)
   1120         # not doing input validation.
   1121         score = self._init_decision_function(X)
-> 1122         predict_stages(self.estimators_, X, self.learning_rate, score)
   1123         return score
   1124 
sklearn/ensemble/_gradient_boosting.pyx in sklearn.ensemble._gradient_boosting.predict_stages (sklearnensemble_gradient_boosting.c:2564)()
ValueError: ndarray is not C-contiguous

我在这里做错了什么?

warm_start正在使用

中。实际上有一个错误阻止了它的工作。

同时,解决方法是将数组复制到 C 连续数组:

X_train = np.copy(X_train, order='C')
X_test = np.copy(X_test, order='C')

参考:讨论和错误

您通常无法在 fit 调用之间修改 sklearn 分类器并期望它正常工作。估计器的数量实际上会影响模型内部对象的大小 - 因此它不仅仅是迭代次数(从编程的角度来看)。

在我看来

,问题是你没有将 warm_start=True 传递给构造函数。如果您这样做:

clf = GradientBoostingClassifier(n_estimators=1000, learning_rate=0.05, subsample=0.1, max_depth=3, warm_start=True)

您将能够使用以下方法拟合其他估算器:

clf.set_params(n_estimators=2000)
clf.fit(X, y, sample_weight=train_weight)

如果它不起作用,您可能应该尝试更新您的 sklearn 版本。

相关内容

  • 没有找到相关文章