#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 заключается в том, что они обычно работают разумно даже без этой настройки.