Untitled
unknown
plain_text
a year ago
2.6 kB
3
Indexable
Never
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)