Найти в Дзене
ЦифроПроф

О регрессии в машинном обучении

Дерево в регрессии обучается аналогично, только предсказывает оно не класс, а число. На практическом примере это будет выглядеть следующим образом. Необходимо import pandas as pd from sklearn.tree import DecisionTreeRegressor from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error df = pd.read_csv('/datasets/train_data.csv') features = df.drop(['last_price'], axis=1) target = df['last_price'] / 1000000 features_train, features_valid, target_train, target_valid = train_test_split( features, target, test_size=0.25, random_state=12345) best_model = None best_result = 10000 best_depth = 0 for depth in range(1, 6): model = DecisionTreeRegressor(random_state=12345, max_depth=depth) model.fit(features_train, target_train) predictions_valid = model.predict(features_valid) result = mean_squared_error(target_valid, predictions_valid)**0.5 if result < best_result: best_model = model best_result = result
Фото из открытых источников
Фото из открытых источников

Регрессия решает задачи предсказания, когда не целесообразно использовать инструменты классификации. Однако, деревянные модели подходят не только для задач классификации, но также и для регрессии.

Дерево в регрессии обучается аналогично, только предсказывает оно не класс, а число. На практическом примере это будет выглядеть следующим образом. Необходимо

  • Выделить 25% данных для валидационной выборки, остальные — для обучающей.
  • Обучить модели дерева решений для задачи регрессии с различными значениями глубины от 1 до 5.
  • Для каждой модели посчитать значение метрики RMSE на валидационной выборке.
  • Сохранить модель с наилучшим значением RMSE на валидационной выборке в переменной best_model.

import pandas as pd

from sklearn.tree import DecisionTreeRegressor

from sklearn.model_selection import train_test_split

from sklearn.metrics import mean_squared_error

df = pd.read_csv('/datasets/train_data.csv')

features = df.drop(['last_price'], axis=1)

target = df['last_price'] / 1000000

features_train, features_valid, target_train, target_valid = train_test_split(

features, target, test_size=0.25, random_state=12345)

best_model = None

best_result = 10000

best_depth = 0

for depth in range(1, 6):

model = DecisionTreeRegressor(random_state=12345, max_depth=depth)

model.fit(features_train, target_train)

predictions_valid = model.predict(features_valid)

result = mean_squared_error(target_valid, predictions_valid)**0.5

if result < best_result:

best_model = model

best_result = result

best_depth = depth

print("RMSE наилучшей модели на валидационной выборке:", best_result, "Глубина дерева:", best_depth)

Случайный лес используется по тому же принципу. Он обучает множество независимых деревьев, а потом принимает решение, усредняя их ответы.

import pandas as pd

from sklearn.ensemble import RandomForestRegressor

from sklearn.model_selection import train_test_split

from sklearn.metrics import mean_squared_error

df = pd.read_csv('/datasets/train_data.csv')

features = df.drop(['last_price'], axis=1)

target = df['last_price']/1000000

features_train, features_valid, target_train, target_valid = train_test_split(

features, target, test_size=0.25, random_state=12345)

best_model = None

best_result = 10000

best_est = 0

best_depth = 0

for est in range(10, 51, 10):

for depth in range (1, 11):

model = RandomForestRegressor(random_state=12345, n_estimators=est, max_depth=depth)

model.fit(features_train, target_train)

predictions_valid = model.predict(features_valid)

result = mean_squared_error(target_valid, predictions_valid)**0.5

if result < best_result:

best_model = model

best_result = result

best_est = est

best_depth = depth

print("RMSE наилучшей модели на валидационной выборке:", best_result, "Количество деревьев:", best_est, "Максимальная глубина:", depth)

Линейная регрессия для той же задачи

import pandas as pd

from sklearn.linear_model import LinearRegression

from sklearn.model_selection import train_test_split

from sklearn.metrics import mean_squared_error

df = pd.read_csv('/datasets/train_data.csv')

features = df.drop(['last_price'], axis=1)

target = df['last_price']/1000000

features_train, features_valid, target_train, target_valid = train_test_split(

features, target, test_size=0.25, random_state=12345)

model = LinearRegression()# инициализируйте модель LinearRegression

model.fit(features_train, target_train)

predictions_valid = model.predict(features_valid)

result = mean_squared_error(target_valid, predictions_valid)**0.5

print("RMSE модели линейной регрессии на валидационной выборке:", result)

Подведем итог - какая модель показала лучший результат?

import pandas as pd

from sklearn.tree import DecisionTreeRegressor

from sklearn.ensemble import RandomForestRegressor

from sklearn.linear_model import LinearRegression

from sklearn.model_selection import train_test_split

from sklearn.metrics import mean_squared_error

df = pd.read_csv('/datasets/train_data.csv')

features = df.drop(['last_price'], axis=1)

target =df["last_price"]/1000000

features_train, features_valid, target_train, target_valid = train_test_split(

features, target, test_size=0.25, random_state=12345)

model = RandomForestRegressor(random_state=12345)

model.fit(features_train, target_train)

predictions_valid = model.predict(features_valid)

result = mean_squared_error(target_valid, predictions_valid)**0.5

print("RMSE наилучшей модели на валидационной выборке:", result)

#задача регрессии и классификации в машинном обучении

#деревья регрессии машинное обучение