Я пытаюсь построить конвейер с помощью StandardScaler() и LogisticRegression(). Я получаю разные результаты, когда я кодирую его с конвейером и без него. Вот мой код без конвейера:
clf_LR = linear_model.LogisticRegression()
scalar = StandardScaler()
X_train_std = scalar.fit_transform(X_train)
X_test_std = scalar.fit_transform(X_test)
clf_LR.fit(X_train_std, y_train)
print('Testing score without pipeline: ', clf_LR.score(X_test_std, y_test))
Мой код с конвейером:
pipe_LR = Pipeline([('scaler', StandardScaler()),
('classifier', linear_model.LogisticRegression())
])
pipe_LR.fit(X_train, y_train)
print('Testing score with pipeline: ', pipe_LR.score(X_test, y_test))
Вот мой результат:
Testing score with pipeline: 0.821917808219178
Testing score without pipeline: 0.8767123287671232
При попытке отладить проблему кажется, что данные стандартизируются. Но результат с конвейером соответствует результату обучения модели на моих исходных данных X_train (без применения StandardScaler()).
clf_LR_orig = linear_model.LogisticRegression()
clf_LR_orig.fit(X_train, y_train)
print('Testing score without Standardization: ', clf_LR_orig.score(X_test, y_test))
Testing score without Standardization: 0.821917808219178
Есть ли что-то, что я упускаю при строительстве трубопровода? Спасибо большое!
X_test_std = scalar.fit_transform(X_test)
на методtransform
. Вы никогда не должны подгонять свои трансформаторы к вашим тестовым данным. Дайте мне знать, если это работает, поэтому я опишу это более подробно. - person Szymon Bednorz   schedule 25.08.2020