Untitled

mail@pastecode.io avatar
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)