Я построил конвейер, который принимает фрейм данных панд, который был разбит на категориальные и числовые столбцы. Я пытаюсь запустить GridSearchCV для своих результатов и в конечном итоге посмотреть на ранжированные функции, важные для наиболее эффективной модели, выбранной GridSearchCV. Проблема, с которой я сталкиваюсь, состоит в том, что конвейеры sklearn выводят массивные объекты массива и по пути теряют любую информацию столбца. Таким образом, когда я иду, чтобы исследовать самые важные коэффициенты модели, у меня остается немаркированный массив пустышек.
Я читал, что создание собственного трансформатора может быть возможным решением этой проблемы, но у меня нет опыта в этом. Я также изучил возможности использования пакета sklearn-pandas, но не решаюсь попытаться реализовать что-то, что может не обновляться параллельно с sklearn. Кто-нибудь может подсказать, что, по их мнению, является лучшим способом обойти эту проблему? Я также открыт для любой литературы, которая имеет дело с применением панд и конвейеров sklearn.
Мой трубопровод:
# impute and standardize numeric data
numeric_transformer = Pipeline([
('impute', SimpleImputer(missing_values=np.nan, strategy="mean")),
('scale', StandardScaler())
])
# impute and encode dummy variables for categorical data
categorical_transformer = Pipeline([
('impute', SimpleImputer(missing_values=np.nan, strategy="most_frequent")),
('one_hot', OneHotEncoder(sparse=False, handle_unknown='ignore'))
])
preprocessor = ColumnTransformer(transformers=[
('num', numeric_transformer, numeric_features),
('cat', categorical_transformer, categorical_features)
])
clf = Pipeline([
('transform', preprocessor),
('ridge', Ridge())
])
Перекрестная проверка:
kf = KFold(n_splits=4, shuffle=True, random_state=44)
cross_val_score(clf, X_train, y_train, cv=kf).mean()
Сетка Поиск:
param_grid = {
'ridge__alpha': [.001, .1, 1.0, 5, 10, 100]
}
gs = GridSearchCV(clf, param_grid, cv = kf)
gs.fit(X_train, y_train)
Коэффициенты экспертизы:
model = gs.best_estimator_
predictions = model.fit(X_train, y_train).predict(X_test)
model.named_steps['ridge'].coef_
Вот выходные данные коэффициентов модели в том виде, в котором они в настоящее время стоят, когда выполняются на наборе данных «mpg» для морских районов:
array([-4.64782052e-01, 1.47805207e+00, -3.28948689e-01, -5.37033173e+00,
2.80000700e-01, 2.71523808e+00, 6.29170887e-01, 9.51627968e-01,
...
-1.50574860e+00, 1.88477450e+00, 4.57285471e+00, -6.90459868e-01,
5.49416409e+00])
В идеале я хотел бы сохранить информацию о кадре данных pandas и получить производные имена столбцов после OneHotEncoder и вызова других методов.