машинное обучение
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
Не пропустите ничего интересного и подписывайтесь на страницы канала в других социальных сетях: