Использование Select-K-best на неизвестном тестовом наборе

Я обучил классификатор логистической регрессии в sklearn. Мой базовый файл объектов имеет 65 функций, теперь я экстраполировал их на 1000, учитывая также квадратичные комбинации (используя PolynomialFeatures()). Затем я уменьшил их до 100 с помощью метода Select-K-Best().

Однако, как только я обучу свою модель и получу новый файл test_file, он будет иметь только 65 базовых функций, но моя модель ожидает 100 из них.

Итак, как я могу применить метод Select-K-Best() к моему набору тестов, когда я не знаю меток, что требуется для функции Select-K-Best.fit()

1 ответ

Решение

Вам не следует снова подгонять SelectKBest к тестовым данным - используйте вместо этого тот же (уже подхваченный) экземпляр SelectKBest, что и в обучении. Т.е. вы должны использовать метод.transform только для тестовых данных, а не метод.fit.

scikit-learn предоставляет утилиту, которая упрощает управление несколькими шагами; это называется трубопровод. В вашем случае это должно быть примерно так (через помощника make_pipeline):

pipe = make_pipeline(
    PolynomialFeatures(2), 
    SelectKBest(100), 
    LogisticRegression()
)
pipe.fit(X_train, y_train)
y_pred = pipe.predict(X_test)
Другие вопросы по тегам