Какой метод использует sklearn VotingClassifier fit?


Официальный документ, по-видимому, не содержит такой информации.

Мне интересно, почему мы не можем предоставить VotingClassifier уже обученные модели, поэтому нам не нужно тренироваться снова, так как VotingClassifier требует, чтобы мы вызвали метод fit перед предсказанием.

Делает ли это просто:

for clf in self.clfs:
    clf.fit(X, y)

Или он использует какой-то более интересный метод складывания?

1 2

1 ответ:

Вот что делает VotingClassifier.fit:

def fit(self, X, y, sample_weight=None):
    ...  # Validates the arguments, estimators, etc.

    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
Как вы можете видеть, метод действительно соответствует классификаторам (параллельно!) и создает атрибуты Label encoder self.le_ и self.estimators_. Методыpredict() или transform() построены поверх этих атрибутов, поэтому сначала необходимо вызвать fit().