Как вывести объект Pandas из конвейера sklearn - PullRequest
0 голосов
/ 11 января 2019

Я построил конвейер, который принимает фрейм данных панд, который был разбит на категориальные и числовые столбцы. Я пытаюсь запустить 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 и вызова других методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...