Если бы мне пришлось суммировать подгонку и подгонку в 2 строки, это было бы

Переобучение: хорошая производительность на обучающих данных, плохое обобщение на другие данные.

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

Легко-просто правильно..!!

Теперь давайте просто изучим это с помощью модели дерева решений.

как правило, дерево нередко имеет 10 расщеплений между верхним уровнем (все дома) и листом. По мере того, как дерево становится глубже, набор данных разбивается на листья с меньшим количеством домов. Если в дереве было только 1 разбиение, оно делит данные на 2 группы. Если каждую группу разделить снова, мы получим 4 группы домов. Разделение каждого из них снова приведет к созданию 8 групп. Если мы продолжим удваивать количество групп, добавляя больше сплитов на каждом уровне, у нас будет 210210 групп домов к тому времени, когда мы доберемся до 10-го уровня. Это 1024 листа.

Когда мы делим дома на st многих листьев, у нас также становится меньше домов на каждом листе. Листья с очень небольшим количеством домов будут давать прогнозы, очень близкие к фактическим значениям этих домов, но они могут делать очень ненадежные прогнозы для новых данных (поскольку каждый прогноз основан только на нескольких домах).

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

В крайнем случае, если дерево делит дома только на 2 или 4, каждая группа по-прежнему имеет большое разнообразие домов. Результирующие прогнозы могут быть далекими для большинства домов, даже в обучающих данных (и они будут плохими при проверке по той же причине). Когда модели не удается уловить важные различия и закономерности в данных, поэтому она плохо работает даже на обучающих данных, это называется недоподгонка.

Поскольку мы заботимся о точности новых данных, которые мы оцениваем по нашим проверочным данным, мы хотим найти золотую середину между подгонкой и переподгонкой. Визуально нам нужна нижняя точка (красной) кривой проверки в

Пример

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

Мы можем использовать служебную функцию, чтобы сравнить оценки MAE из разных значений для max_leaf_nodes:

from sklearn.metrics import mean_absolute_error
from sklearn.tree import DecisionTreeRegressor
def get_mae(max_leaf_nodes, train_X, val_X, train_y, val_y):
    model = DecisionTreeRegressor(max_leaf_nodes=max_leaf_nodes, random_state=0)
    model.fit(train_X, train_y)
    preds_val = model.predict(val_X)
    mae = mean_absolute_error(val_y, preds_val)
    return(mae)

Данные загружаются в train_X, val_X, train_y и val_y с помощью кода, который вы уже видели (и что вы уже написали).

Мы можем использовать цикл for для сравнения точности моделей, построенных с разными значениями max_leaf_nodes.

# compare MAE with differing values of max_leaf_nodes
for max_leaf_nodes in [5, 50, 500, 5000]:
    my_mae = get_mae(max_leaf_nodes, train_X, val_X, train_y, val_y)
    print("Max leaf nodes: %d  \t\t Mean Absolute Error:  %d" %(max_leaf_nodes, my_mae))
Max leaf nodes: 5  		 Mean Absolute Error:  347380
Max leaf nodes: 50  		 Mean Absolute Error:  258171
Max leaf nodes: 500  		 Mean Absolute Error:  243495
Max leaf nodes: 5000  		 Mean Absolute Error:  254983

Из перечисленных вариантов 500 — оптимальное количество листьев.