Вы выполняете преобразование в X_fresh
, которое вы не выполняете в X_train
.Ваш конвейер ожидает, что входные данные из X_fresh
будут иметь ту же форму, что и X_train
.Выполняя это преобразование selector
перед конвейером, вы изменяете форму X_fresh
, чтобы она больше не соответствовала X_train
.
Поскольку selector
уже является частью конвейера, этот кодненужное:
X_fresh=X_fresh[:,selector.get_support(indices=True)
При вызове y_pred=estimator.predict(X_fresh)
шаг selector
будет выполняться как часть конвейера, поэтому нет необходимости вызывать этот шаг независимо.Это одно из преимуществ использования конвейера с самого начала.Когда вы вызываете estimator
, убедитесь, что X_fresh
совпадает с формой X_train
, поскольку именно этого и ожидал обученный конвейер.
Конвейер работает путем объединения шагов модели вместе.В вашем конвейере у вас есть шаг выбора объекта selector
и шаг регрессии regressor
.Когда вы вызываете метод fit()
в вашем конвейере, входные данные, X_train
сначала преобразуются в selector
, чтобы получить 250 лучших функций, а затем преобразованные данные передаются на шаг regressor
для обучения регрессионной модели..
Когда вы вызываете predict()
в своем конвейере, новые данные, которые вы вводите, будут выполнять те же самые шаги, поэтому нет необходимости выполнять какой-либо шаг из конвейера независимо.
Доподгоняя ваш конвейер, вы должны получить X_train.shape
, чтобы определить, сколько столбцов в X_train
.После того, как вы укажете estimator
, вы должны убедиться, что X_fresh
имеет те же столбцы, что и X_train
.Затем, когда вы вызываете прогнозирование на estimator
, конвейер автоматически выполнит выбор функции и выдаст прогнозы.