машинное обучение
June 17, 2022
Выборка оптимального алгоритма со Scikit-learn
Рассмотрим, как производить выборку алгоритмов машинного обучения с библиотекой Scikit-learn. Для работы используем поставляемый с библиотекой датасет:
from sklearn.datasets import load_diabetes from sklearn.metrics import mean_absolute_error, mean_absolute_percentage_error import pandas as pd import numpy as np np.random.seed(0) df, y = load_diabetes(return_X_y=True, as_frame=True) df['age'] = pd.cut(df['age'], bins=5, labels=False) df['target'] = y df = df.sample(frac=1).reset_index(drop=True) display(df.head()) display(df.shape)
from sklearn.model_selection import train_test_split X_tr, X_val, y_tr, y_val = train_test_split(df.drop(columns='target').copy(), df['target'], test_size=0.2) y_tr.shape[0], y_val.shape[0]
Создадим пайплайн машинного обучения и выведем метрики качества:
from sklearn.model_selection import RandomizedSearchCV from sklearn.pipeline import Pipeline from sklearn.compose import make_column_transformer from sklearn.preprocessing import StandardScaler, OneHotEncoder from sklearn.tree import DecisionTreeRegressor from sklearn.ensemble import RandomForestRegressor, ExtraTreesRegressor ct = make_column_transformer((OneHotEncoder(sparse=False, handle_unknown='ignore'), ['age']), (StandardScaler(), X_tr.drop(columns=['age']).columns), remainder='passthrough') model = Pipeline([('prep', ct), ('reg', DecisionTreeRegressor())]) model.fit(X_tr, y_tr) y_p = model.predict(X_val) print(f'{mean_absolute_error(y_val, y_p):.2f}', f'{mean_absolute_percentage_error(y_val, y_p):.3f}')
Теперь с помощью RandomizedSearchCV или GridSearchCV можно попытаться найти оптимальный алгоритм и параметры к нему. Для этого разные алгоритмы следует заключать в отдельные словари списка (если перебираемые свойства отличаются), синтаксис обращения к свойствам - посредством указания имени шага, затем двойного подчеркивания и имени свойства (писал ранее):
from sklearn.model_selection import RandomizedSearchCV from sklearn.pipeline import Pipeline from sklearn.compose import make_column_transformer from sklearn.preprocessing import StandardScaler, OneHotEncoder from sklearn.tree import DecisionTreeRegressor from sklearn.ensemble import RandomForestRegressor, ExtraTreesRegressor params = [{'reg':[DecisionTreeRegressor()], 'reg__max_depth':[7,10,14]}, {'reg':[RandomForestRegressor(), ExtraTreesRegressor()], 'reg__max_depth':[7,10,14], 'reg__n_estimators':np.arange(10,100,10), 'reg__min_samples_split':[2,3,4]}, ] gr_s = RandomizedSearchCV(model, params, n_iter=20, n_jobs=-1, scoring='neg_mean_absolute_percentage_error') gr_s.fit(X_tr, y_tr)
Выведем полученные параметры (подробнее здесь) :
- Создание пайплайнов предобработки данных
- Подбор этапов предобработки данных
- Подбор гиперпараметров модели с GridSearchCV и RandomizedSearchCV
Не пропустите ничего интересного и подписывайтесь на страницы канала в других социальных сетях: