exponenta event banner

Класс TreeBagger

Мешок деревьев принятия решений

Описание

TreeBagger представляет собой совокупность деревьев решений для классификации или регрессии. Фасовка в мешки означает агрегацию начальной загрузки. Каждое дерево в ансамбле выращивается на независимо нарисованной загрузочной реплике входных данных. Наблюдения, не включенные в эту реплику, находятся «вне пакета» для этого дерева.

TreeBagger полагается на ClassificationTree и RegressionTree функциональные возможности для выращивания отдельных деревьев. В частности, ClassificationTree и RegressionTree принимает количество элементов, выбранных случайным образом для каждого разделения решения, в качестве необязательного входного аргумента. То есть TreeBagger реализует алгоритм случайного леса [1].

Для регрессионных проблем: TreeBagger поддерживает среднюю и квантильную регрессию (то есть квантильный регрессионный лес [2]).

  • Чтобы предсказать средние ответы или оценить среднеквадратичную ошибку данных, передайте TreeBagger модель и данные для predict или errorсоответственно. Для выполнения аналогичных операций при наблюдениях вне мешка используйте oobPredict или oobError.

  • Для оценки квантилей распределения ответа или ошибки квантиля данных передайте TreeBagger модель и данные для quantilePredict или quantileErrorсоответственно. Для выполнения аналогичных операций при наблюдениях вне мешка используйте oobQuantilePredict или oobQuantileError.

Строительство

TreeBaggerСоздание пакета деревьев решений

Функции объекта

appendДобавить новые деревья в ансамбль
compactКомпактный ансамбль деревьев принятия решений
errorОшибка (вероятность неправильной классификации или MSE)
fillproxМатрица близости для данных обучения
growTreesОбучение дополнительных деревьев и добавление в ансамбль
marginМаржа классификации
mdsproxМногомерное масштабирование матрицы близости
meanMarginСредняя классификационная маржа
oobErrorОшибка вне пакета
oobMarginГраницы вне упаковки
oobMeanMarginСредние маржи вне упаковки
oobPredictАнсамблевые прогнозы для наблюдений вне мешка
oobQuantileErrorВне пакета квантовая потеря пакета деревьев регрессии
oobQuantilePredictКвантильные прогнозы для наблюдений вне пакета из пакета деревьев регрессии
partialDependenceВычислить частичную зависимость
plotPartialDependenceСоздание графиков частичной зависимости (PDP) и индивидуального условного ожидания (ICE)
predictПрогнозирование ответов с использованием совокупности упакованных в мешки деревьев принятия решений
quantileErrorПотери квантилей с использованием пакета деревьев регрессии
quantilePredictПредсказать квантиль ответа с использованием пакета деревьев регрессии

Свойства

ClassNames

Массив ячеек, содержащий имена классов для переменной ответа Y. Это свойство пусто для деревьев регрессии.

ComputeOOBPrediction

Логический флаг, определяющий необходимость вычисления внеплановых прогнозов для учебных наблюдений. Значение по умолчанию: false.

Если этот флаг true, доступны следующие свойства:

  • OOBIndices

  • OOBInstanceWeight

Если этот флаг true, могут быть вызваны следующие методы:

  • oobError

  • oobMargin

  • oobMeanMargin

ComputeOOBPredictorImportance

Логический флаг, указывающий, следует ли вычислять оценки переменной важности вне пакета. Значение по умолчанию: false. Если этот флаг true, то ComputeOOBPrediction так же верно.

Если этот флаг true, доступны следующие свойства:

  • OOBPermutedPredictorDeltaError

  • OOBPermutedPredictorDeltaMeanMargin

  • OOBPermutedPredictorCountRaiseMargin

Cost

Квадратная матрица, где Cost(i,j) - стоимость классификации точки по классу j если его истинный класс i (т.е. строки соответствуют истинному классу, а столбцы соответствуют прогнозируемому классу). Порядок строк и столбцов Cost соответствует порядку классов в ClassNames. Количество строк и столбцов в Cost - количество уникальных классов в ответе.

Это свойство:

  • только для чтения

  • пустой ([]) для ансамблей регрессионных деревьев

DefaultYfit

Значение по умолчанию, возвращенное predict и oobPredict. DefaultYfit управляет тем, какое прогнозируемое значение возвращается, если прогнозирование невозможно. Например, когда oobPredict необходимо предсказать для наблюдения, которое находится в мешке для всех деревьев в ансамбле.

  • Для классификации можно задать для этого свойства одно из следующих значений: '' или 'MostPopular'. При выборе 'MostPopular' (значение по умолчанию), значение свойства становится именем наиболее вероятного класса в данных обучения. При выборе '', наблюдения внутри сумки исключаются из вычисления ошибки вне сумки и запаса.

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

DeltaCriterionDecisionSplit

Числовой массив 1-by-Nvars размеров изменений критерия разделения, суммированных по разделениям по каждой переменной, усредненных по всему ансамблю выращенных деревьев.

InBagFraction

Часть наблюдений, которые выбираются случайным образом с заменой для каждой реплики начальной загрузки. Размер каждой реплики - Nobs ×InBagFraction, где Нобс - количество наблюдений в тренировочном наборе. Значение по умолчанию - 1.

MergeLeaves

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

Method

Метод, используемый деревьями. Возможные значения: 'classification' для классификационных ансамблей, и 'regression' для регрессионных ансамблей.

MinLeafSize

Минимальное количество наблюдений на лист дерева. По умолчанию MinLeafSize равен 1 для классификации и 5 для регрессии. Для обучения по дереву принятия решений, MinParent значение устанавливается равным 2*MinLeafSize.

NumTrees

Скалярное значение, равное числу деревьев решений в ансамбле.

NumPredictorSplit

Числовой массив размера 1-by-Nvars, где каждый элемент даёт количество расщеплений на этом предикторе, суммированных по всем деревьям.

NumPredictorsToSample

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

OOBIndices

Логический массив размером Nobs-by-NumTrees, где Nobs - количество наблюдений в обучающих данных, а NumTrees - количество деревьев в ансамбле. A true значение для элемента (i, j) указывает, что наблюдение i находится вне пакета для дерева j. Другими словами, наблюдение i не было выбрано для тренировочных данных, используемых для выращивания дерева j.

OOBInstanceWeight

Числовой массив Nobs-by-1 размера, содержащий число деревьев, используемых для вычисления отклика вне пакета для каждого наблюдения. Нобс - количество наблюдений в данных обучения, использованных для создания ансамбля.

OOBPermutedPredictorCountRaiseMargin

Числовой массив размера 1-by-Nvars содержащий меру важности переменной для каждой переменной предиктора (характеристики). Для любой переменной мера представляет собой разницу между числом повышенных полей и числом пониженных полей, если значения этой переменной переставлены в наблюдениях вне пакета. Эта мера вычисляется для каждого дерева, затем усредняется по всему ансамблю и делится на стандартное отклонение по всему ансамблю. Это свойство пусто для деревьев регрессии.

OOBPermutedPredictorDeltaError

Числовой массив размера 1-by-Nvars содержащий меру важности для каждой прогнозирующей переменной (признака). Для любой переменной мерой является увеличение ошибки предсказания, если значения этой переменной переставлены в наблюдениях вне пакета. Эта мера вычисляется для каждого дерева, затем усредняется по всему ансамблю и делится на стандартное отклонение по всему ансамблю.

OOBPermutedPredictorDeltaMeanMargin

Числовой массив размера 1-by-Nvars содержащий меру важности для каждой прогнозирующей переменной (признака). Для любой переменной измерением является уменьшение классификационного запаса, если значения этой переменной переставлены в наблюдениях вне пакета. Эта мера вычисляется для каждого дерева, затем усредняется по всему ансамблю и делится на стандартное отклонение по всему ансамблю. Это свойство пусто для деревьев регрессии.

OutlierMeasure

Числовой массив размера Nobs-by-1, где Нобс - количество наблюдений в обучающих данных, содержащих более высокие показатели для каждого наблюдения.

Prior

Числовой вектор предшествующих вероятностей для каждого класса. Порядок элементов Prior соответствует порядку классов в ClassNames.

Это свойство:

  • только для чтения

  • пустой ([]) для ансамблей регрессионных деревьев

Proximity

Числовая матрица размера Nobs-by-Nobs, где Nobs - количество наблюдений в обучающих данных, содержащих показатели близости между наблюдениями. Для любых двух наблюдений их близость определяется как доля деревьев, для которых эти наблюдения высаживаются на один и тот же лист. Это симметричная матрица с 1s на диагональных и внедиагональных элементах в диапазоне от 0 до 1.

Prune

Prune свойство имеет значение true, если деревья принятия решений обрезаны, и значение false, если они не. Для ансамблей не рекомендуется обрезать деревья принятия решений. Значением по умолчанию является false.

SampleWithReplacement

Логический флаг, определяющий выборку данных для каждого дерева принятия решений с заменой. Это свойство имеет значение true если TreeBagger образцы данных с заменой и false в противном случае. Значение по умолчанию: true.

TreeArguments

Массив ячеек аргументов для fitctree или fitrtree. Эти аргументы используются TreeBagger при выращивании новых деревьев для ансамбля.

Trees

Массив ячеек размером NumTrees-by-1 содержащий деревья в ансамбле.

SurrogateAssociation

Матрица размера Nvars-by-Nvars с прогностическими показателями переменной ассоциации, усредненная по всему ансамблю выращенных деревьев. Если вы выросли ансамбль настройки 'surrogate' кому 'on'эта матрица для каждого дерева заполняется прогностическими показателями ассоциации, усредненными по суррогатным разделениям. Если вы выросли ансамбль настройки 'surrogate' кому 'off' (по умолчанию), SurrogateAssociation диагональ.

PredictorNames

Массив ячеек, содержащий имена переменных предиктора (признаков). TreeBagger берет эти имена из необязательного 'names' параметр. Имена по умолчанию: 'x1', 'x2'и т.д.

W

Числовой вектор весов длины Нобса, где Нобс - количество наблюдений (строк) в обучающих данных. TreeBagger использует эти веса для выращивания каждого дерева решений в ансамбле. Дефолт W является ones(Nobs,1).

X

Таблица или числовая матрица размера Nobs-by-Nvars, где Nobs - количество наблюдений (строк), а Nvars - количество переменных (столбцов) в обучающих данных. Если тренировать ансамбль с помощью таблицы предикторных значений, то X является таблицей. Если тренировать ансамбль с помощью матрицы предикторных значений, то X является матрицей. Это свойство содержит значения предиктора (или функции).

Y

Массив откликов Nobs размера. Элементы Y соответствуют строкам X. Для классификации, Y - набор меток истинного класса. Метки могут быть любой переменной группировки, то есть числовым или логическим вектором, символьной матрицей, строковым массивом, массивом ячеек символьных векторов или категориальным вектором. TreeBagger преобразует метки в массив ячеек символьных векторов для классификации. Для регрессии Y - числовой вектор.

Примеры

свернуть все

Загрузите набор данных радужки Фишера.

load fisheriris

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

rng(1); % For reproducibility
Mdl = TreeBagger(50,meas,species,'OOBPrediction','On',...
    'Method','classification')
Mdl = 
  TreeBagger
Ensemble with 50 bagged decision trees:
                    Training X:              [150x4]
                    Training Y:              [150x1]
                        Method:       classification
                 NumPredictors:                    4
         NumPredictorsToSample:                    2
                   MinLeafSize:                    1
                 InBagFraction:                    1
         SampleWithReplacement:                    1
          ComputeOOBPrediction:                    1
 ComputeOOBPredictorImportance:                    0
                     Proximity:                   []
                    ClassNames:        'setosa'    'versicolor'     'virginica'

  Properties, Methods

Mdl является TreeBagger ансамбль.

Mdl.Trees сохраняет вектор клеток 50 на 1 обученных деревьев классификации (CompactClassificationTree объекты модели), которые составляют ансамбль.

Постройте график первого обученного дерева классификации.

view(Mdl.Trees{1},'Mode','graph')

Figure Classification tree viewer contains an axes and other objects of type uimenu, uicontrol. The axes contains 21 objects of type line, text.

По умолчанию TreeBagger выращивает глубокие деревья.

Mdl.OOBIndices сохраняет индексы вне пакета в виде матрицы логических значений.

Постройте график ошибки вне пакета по количеству выращенных деревьев классификации.

figure;
oobErrorBaggedEnsemble = oobError(Mdl);
plot(oobErrorBaggedEnsemble)
xlabel 'Number of grown trees';
ylabel 'Out-of-bag classification error';

Figure contains an axes. The axes contains an object of type line.

Погрешность «вне мешка» уменьшается с количеством выращенных деревьев.

Чтобы пометить наблюдения вне мешка, пропустите Mdl кому oobPredict.

Загрузить carsmall набор данных. Рассмотрим модель, которая предсказывает экономию топлива автомобиля, учитывая его рабочий объем двигателя.

load carsmall

Обучение ансамбля пакетных регрессионных деревьев с использованием всего набора данных. Укажите 100 слабых учеников.

rng(1); % For reproducibility
Mdl = TreeBagger(100,Displacement,MPG,'Method','regression');

Mdl является TreeBagger ансамбль.

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

Для десяти равномерно разнесенных перемещений двигателя между минимальным и максимальным объемами в выборке предсказать условные средние отклики и условные квартили.

predX = linspace(min(Displacement),max(Displacement),10)';
mpgMean = predict(Mdl,predX);
mpgQuartiles = quantilePredict(Mdl,predX,'Quantile',[0.25,0.5,0.75]);

Постройте график наблюдений и оценочных средних ответов и квартилей на том же рисунке.

figure;
plot(Displacement,MPG,'o');
hold on
plot(predX,mpgMean);
plot(predX,mpgQuartiles);
ylabel('Fuel economy');
xlabel('Engine displacement');
legend('Data','Mean Response','First quartile','Median','Third quartile');

Figure contains an axes. The axes contains 5 objects of type line. These objects represent Data, Mean Response, First quartile, Median, Third quartile.

Загрузить carsmall набор данных. Рассмотрим модель, которая предсказывает среднюю экономию топлива автомобиля с учетом его ускорения, количества цилиндров, рабочего объема двигателя, лошадиных сил, производителя, модельного года и веса. Рассмотреть Cylinders, Mfg, и Model_Year в качестве категориальных переменных.

load carsmall
Cylinders = categorical(Cylinders);
Mfg = categorical(cellstr(Mfg));
Model_Year = categorical(Model_Year);
X = table(Acceleration,Cylinders,Displacement,Horsepower,Mfg,...
    Model_Year,Weight,MPG);
rng('default'); % For reproducibility

Отображение количества категорий, представленных в категориальных переменных.

numCylinders = numel(categories(Cylinders))
numCylinders = 3
numMfg = numel(categories(Mfg))
numMfg = 28
numModelYear = numel(categories(Model_Year))
numModelYear = 3

Потому что есть 3 категории только в Cylinders и Model_Yearстандартный алгоритм разделения предиктора CART предпочитает разделение непрерывного предиктора по этим двум переменным.

Обучение случайного леса из 200 деревьев регрессии с использованием всего набора данных. Чтобы вырастить несмещенные деревья, укажите использование теста кривизны для расщепления предикторов. Поскольку в данных отсутствуют значения, укажите использование суррогатных разбиений. Храните информацию вне пакета для оценки важности предиктора.

Mdl = TreeBagger(200,X,'MPG','Method','regression','Surrogate','on',...
    'PredictorSelection','curvature','OOBPredictorImportance','on');

TreeBagger сохраняет оценки важности предиктора в свойстве OOBPermutedPredictorDeltaError. Сравните оценки с помощью гистограммы.

imp = Mdl.OOBPermutedPredictorDeltaError;

figure;
bar(imp);
title('Curvature Test');
ylabel('Predictor importance estimates');
xlabel('Predictors');
h = gca;
h.XTickLabel = Mdl.PredictorNames;
h.XTickLabelRotation = 45;
h.TickLabelInterpreter = 'none';

Figure contains an axes. The axes with title Curvature Test contains an object of type bar.

В этом случае Model_Year является наиболее важным предиктором, за которым следует Weight.

Сравните imp для оценки важности предиктора, вычисленной из случайного леса, который выращивает деревья с использованием стандартной CART.

MdlCART = TreeBagger(200,X,'MPG','Method','regression','Surrogate','on',...
    'OOBPredictorImportance','on');

impCART = MdlCART.OOBPermutedPredictorDeltaError;

figure;
bar(impCART);
title('Standard CART');
ylabel('Predictor importance estimates');
xlabel('Predictors');
h = gca;
h.XTickLabel = Mdl.PredictorNames;
h.XTickLabelRotation = 45;
h.TickLabelInterpreter = 'none';

Figure contains an axes. The axes with title Standard CART contains an object of type bar.

В этом случае Weight, непрерывный предиктор, является наиболее важным. Следующие два наиболее важных предиктора Model_Year за которым внимательно следят Horsepower, который является непрерывным предиктором.

Копирование семантики

Значение. Сведения о том, как это влияет на использование класса, см. в разделе Сравнение классов дескрипторов и значений в документации по объектно-ориентированному программированию MATLAB ®.

Совет

Для TreeBagger объект модели B, Trees свойство хранит вектор ячейки B.NumTrees CompactClassificationTree или CompactRegressionTree объекты модели. Для текстового или графического отображения дерева t в векторе ячейки введите

view(B.Trees{t})

Альтернативная функциональность

Toolbox™ статистики и машинного обучения предлагает три объекта для фасовки в мешки и случайного леса:

Для получения подробной информации о различиях между TreeBagger и фасованные ансамбли (ClassificationBaggedEnsemble и RegressionBaggedEnsemble), см. Сравнение ансамблей TreeBagger и Bagged.

Ссылки

[1] Брейман, Л. «Случайные леса». Машинное обучение 45, стр. 5-32, 2001.

[2] Мейнсхаузен, Н. «Квантильные регрессионные леса». Журнал исследований машинного обучения, том 7, 2006, стр. 983-999.