#11#100daysofAI

Введение

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

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

Случайный лес использует множество деревьев и делает прогноз, усредняя прогнозы каждого дерева компонентов. Как правило, он имеет гораздо лучшую точность прогнозирования, чем одно дерево решений, и хорошо работает с параметрами по умолчанию. Если вы продолжите моделирование, вы сможете изучить больше моделей с еще более высокой производительностью, но многие из них чувствительны к получению правильных параметров.

Введение

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

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

Случайный лес использует множество деревьев и делает прогноз, усредняя прогнозы каждого дерева компонентов. Как правило, он имеет гораздо лучшую точность прогнозирования, чем одно дерево решений, и хорошо работает с параметрами по умолчанию. Если вы продолжите моделирование, вы сможете изучить больше моделей с еще более высокой производительностью, но многие из них чувствительны к получению правильных параметров.

Пример

Вы уже видели код для загрузки данных несколько раз. В конце загрузки данных у нас есть следующие переменные:

  • поезд_Х
  • val_X
  • train_y
  • val_y
import pandas as pd
    
# Load data
melbourne_file_path = '../input/melbourne-housing-snapshot/melb_data.csv'
melbourne_data = pd.read_csv(melbourne_file_path) 
# Filter rows with missing values
melbourne_data = melbourne_data.dropna(axis=0)
# Choose target and features
y = melbourne_data.Price
melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'BuildingArea', 
                        'YearBuilt', 'Lattitude', 'Longtitude']
X = melbourne_data[melbourne_features]

from sklearn.model_selection import train_test_split

# split data into training and validation data, for both features and target
# The split is based on a random number generator. Supplying a numeric value to
# the random_state argument guarantees we get the same split every time we
# run this script.
train_X, val_X, train_y, val_y = train_test_split(X, y,random_state = 0)

Мы строим модель случайного леса аналогично тому, как мы строили дерево решений в scikit-learn — на этот раз с использованием класса RandomForestRegressor вместо DecisionTreeRegressor.

from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error

forest_model = RandomForestRegressor(random_state=1)
forest_model.fit(train_X, train_y)
melb_preds = forest_model.predict(val_X)
print(mean_absolute_error(val_y, melb_preds))
191669.7536453626

Заключение

Вероятно, есть место для дальнейшего улучшения, но это большое улучшение по сравнению с ошибкой наилучшего дерева решений в 250 000. Есть параметры, которые позволяют изменить производительность случайного леса так же, как мы изменили максимальную глубину одиночного дерева решений. Но одна из лучших особенностей моделей Random Forest заключается в том, что они обычно работают разумно даже без этой настройки.

Спасибо за чтение :)