Перейти к содержимому

RandomForestRegressor

RandomForestRegressor — модель регрессии, которая строит много деревьев решений и усредняет их прогнозы.

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

Для регрессии итоговый прогноз — это среднее значение прогнозов отдельных деревьев.

Например:

дерево 1: 12.4
дерево 2: 13.1
дерево 3: 12.8
итог: примерно 12.8
МодельКак работает
DecisionTreeRegressorстроит одно дерево
RandomForestRegressorстроит много деревьев и усредняет их прогнозы

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

RandomForestRegressor полезен, когда зависимость между признаками и ответом нелинейная, а одно дерево даёт слишком грубый прогноз.

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

В примере модель предсказывает цену квартиры по числу комнат, площади, площади кухни, этажу, числу этажей в доме и времени до метро.

uses MLABC;
begin
var ds := Datasets.MoscowHousing;
var df := ds.Data;
var features := [
'rooms',
'area',
'kitchen_area',
'floor',
'floors_total',
'metro_minutes'
];
var target := 'price';
var (trainDf, testDf) := df.TrainTestSplit(0.2, seed := 42);
var Xtrain := trainDf.ToMatrix(features);
var ytrain := trainDf.ToVector(target);
var Xtest := testDf.ToMatrix(features);
var ytest := testDf.ToVector(target);
var model := new RandomForestRegressor(seed := 42);
model.Fit(Xtrain, ytrain);
var pred := model.Predict(Xtest);
Println('R²:', Metrics.R2(ytest, pred):0:3);
end.

Вывод:

R²: 0.896

R² = 0.896 означает, что модель объясняет примерно 89.6% разброса цен на тестовой выборке.

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

  • nTrees — сколько деревьев построить;
  • maxDepth — максимальная глубина каждого дерева;
  • minSamplesLeaf — минимальное число объектов в листе;
  • seed — фиксирует случайность, чтобы результат можно было повторить.

Для первого запуска часто достаточно указать только seed.

  • обычно точнее одного дерева;
  • устойчивее к случайным особенностям данных;
  • не требует масштабирования признаков;
  • умеет описывать нелинейные зависимости.
  • хуже объясняется, чем одно дерево;
  • работает медленнее одного дерева;
  • итоговый прогноз нельзя прочитать как одно простое дерево.

Следующая ансамблевая модель — GradientBoostingRegressor. Она тоже строит много деревьев, но делает это последовательно: каждое следующее дерево исправляет ошибки предыдущих.