官方文档似乎没有提供这方面的信息。
我想知道为什么我们不能直接提供已经训练好的模型给VotingClassifier,这样就不需要再次训练,因为VotingClassifier要求我们在预测之前调用fit方法。
它只是这样做的吗:
for clf in self.clfs: clf.fit(X, y)
还是使用了某种更有趣的折叠方法?
回答:
以下是VotingClassifier.fit
的具体操作:
def fit(self, X, y, sample_weight=None): ... # 验证参数、估计器等 self.le_ = LabelEncoder() self.le_.fit(y) self.classes_ = self.le_.classes_ self.estimators_ = [] transformed_y = self.le_.transform(y) self.estimators_ = Parallel(n_jobs=self.n_jobs)( delayed(_parallel_fit_estimator)(clone(clf), X, transformed_y, sample_weight) for _, clf in self.estimators) return self
… 其中_parallel_fit_estimator
只是对estimator.fit
调用的一个包装器:
def _parallel_fit_estimator(estimator, X, y, sample_weight): if sample_weight is not None: estimator.fit(X, y, sample_weight) else: estimator.fit(X, y) return estimator
如您所见,该方法确实是并行地拟合分类器,并创建标签编码器self.le_
和self.estimators_
属性。predict()
或transform()
方法都是基于这些属性构建的,这就是为什么必须先调用fit()
方法的原因。