Я использую стандартный scikit-learn (0.22)
конвейер (фаза препроцессора + фаза оценщика), чтобы выполнить RandomizedSearchCV
для некоторых некоторых параметров. после того, как я получу свою «лучшую» модель, я хочу посмотреть на feature_importance (и алгоритм случайного леса позволяет это сделать). но тогда я не знаю, какая переменная относится к чему. Я теряю всю маркировку . Вы знаете, как перепроектировать имена переменных? (особенно, когда присутствует OneHotEncoding и присутствуют цифры c и категориальные особенности)
код ниже.
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler, OneHotEncoder, LabelEncoder
from sklearn.ensemble import RandomForestClassifier
from sklearn.impute import SimpleImputer
from sklearn.model_selection import RandomizedSearchCV
from sklearn.pipeline import Pipeline
def build_pipeline(categorical_features, numeric_features):
numeric_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='median')),
('scaler', StandardScaler())
])
categorical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='most_frequent', fill_value='missing')),
('onehot', OneHotEncoder(handle_unknown='ignore')),
])
preprocessor = ColumnTransformer(
transformers=[
('num', numeric_transformer, numeric_features),
('cat', categorical_transformer, categorical_features)
])
return preprocessor
preprocessor = build_pipeline(categorical_features, numeric_features)
pipeline_rf = Pipeline(steps=[
('preprocessor', preprocessor),
('estimator', RandomForestClassifier())
])
# Create the grid for random CV
params= {'estimator__n_estimators': [10, 20],}
rf_grid_search = RandomizedSearchCV(pipeline_rf, params, n_iter=2, scoring='accuracy')
# fit model
rf_grid_search.fit(X, Y)
fit_model = rf_grid_search.best_estimator_
print(pd.Series(fit_model.steps[1][1].feature_importances_)