2 Обучение моделей
Выполним разбивку датасета на признаки и таргет (целевой признак).
features = df.drop('Price', axis=1)
target = df['Price']
Разобьём данные на тренировочную, валидационную и тестовую выборки.
X_train
X_train, X_valid, y_train, y_valid = train_test_split(features, target, test_size=0.4, random_state=12345)
X_valid, X_test, y_valid, y_test = train_test_split(X_valid, y_valid, test_size=0.5, random_state=12345)
Проверим выборки
print(X_train.shape)
print(y_train.shape)
print(X_valid.shape)
print(y_valid.shape)
print(X_test.shape)
print(y_test.shape)
(188262, 9)
(188262,)
(62754, 9)
(62754,)
(62754, 9)
(62754,)
Выведем категориальные и численные столбцы в виде списков
categorical_columns = X_train.select_dtypes(include='object').columns.to_list()
numeric_columns = X_train.select_dtypes(exclude='object').columns.to_list()
Применим make_column_transformer и завернём в него кодировку численных и категориальных столбцов
# применим make_column_transformer
col_transformer_ohe = ColumnTransformer(
transformers=[
('onehot', OneHotEncoder(), categorical_columns),
('scaler', StandardScaler(), numeric_columns)],
remainder='passthrough'
)
Выполним обучение тремя моделями: Линейная регрессия, LightGBM и CatBoost. Сравним модели по метрике RMSE и по времени обучения и предсказания.
2.1 Линейная регрессия
# обучим модель Линейной регрессии и зададим пайплайн
model_lr = LinearRegression()
pipeline_lr = make_pipeline(col_transformer_ohe, model_lr)
# зададим гиперпараметры
search_space_lr = {"linearregression__fit_intercept": [True, False],
"linearregression__copy_X": [True, False],
"linearregression__n_jobs": (1, 2, 3),
"linearregression__positive": [True, False]}
# применим BayesSearchCV
lr_search = BayesSearchCV(pipeline_lr, search_space_lr, n_iter=32,
scoring="neg_mean_squared_error", n_jobs=-1, cv=5)
%%time
# обучаем модель на тренировочной выборке
lr_search.fit(X_train, y_train)