Частая ошибка — сначала преобразовать весь датасет, а потом разделить его на train/test:
scaler.fit_transform(X) # уже увидел весь датасет
X_train, X_test = train_test_split(X)
💡 Правильнее спрятать preprocessing внутрь Pipeline:
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
model = make_pipeline(
StandardScaler(),
LogisticRegression()
)
model.fit(X_train, y_train)
score = model.score(X_test, y_test)
Теперь StandardScaler обучается только на X_train.
Особенно полезно при cross-validation: каждый фолд получает свой fit preprocessing.
🤩 Всё, что вычисляет параметры по данным — scaler, encoder, imputer и т. п. — лучше включать в Pipeline. Так меньше шансов случайно устроить data leakage.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека дата-сайентиста