Почему длина списка функций не совпадает
Длина ваших функций не совпадает, поскольку все некатегориальные столбцы отбрасываются при использовании ColumnTransformer
. По умолчанию он сохраняет только столбцы, для которых было указано преобразование. В результате, если вы не хотите, чтобы это произошло, вам нужно сделать это
preprocessor = ColumnTransformer(transformers=[('cat', OneHotEncoder(), cat_feats)],
remainder='passthrough')
(я удалил ваш категориальный конвейер, который здесь не нужен)
Также имейте в виду что применение OHE добавит функции, и поэтому общее число функций будет больше, чем у вас было в начале.
Как получить названия функций
После того, как вы все установили вам нужно получить имена элементов для результата OHE и оставшихся числовых столбцов.
Для столбцов OHE:
cat_features = gs.best_estimator_["preprocessor"].named_transformers_["cat"].get_feature_names()
Для числовых столбцов необходимо объявить num_feats
где все числовые элементы находятся в том же порядке, что и в исходном кадре данных.
Затем просто выполните:
feature_names = np.concatenate((cat_features, num_feats))
PS: это немного громоздко, и это может быть улучшено в более поздние версии sklearn, но на данный момент это процедура