Класс TreeBagger

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

Описание

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

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

Для проблем регрессии TreeBagger поддерживает среднее значение и регрессию квантиля (то есть, лес регрессии квантиля [2]).

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

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

Конструкция

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

Методы

добавлениеДобавьте новые деревья ансамблю
компактныйКомпактный ансамбль деревьев решений
ошибкаОшибка (misclassification вероятность или MSE)
fillproxМатрица близости для данных тренировки
growTreesОбучите дополнительные деревья и добавьте к ансамблю
полеПоле классификации
mdsproxМногомерное масштабирование матрицы близости
meanMarginСреднее поле классификации
oobErrorОшибка из сумки
oobMarginПоля из сумки
oobMeanMarginСредние поля из сумки
oobPredictПрогнозы ансамбля для наблюдений из сумки
oobQuantileErrorПотеря квантиля из сумки мешка деревьев регрессии
oobQuantilePredictПрогнозы квантиля для наблюдений из сумки от мешка деревьев регрессии
предсказатьПредскажите ансамбль использования ответов сложенных в мешок деревьев решений
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 Nvars изменений в критерии разделения, суммированном по разделениям на каждой переменной, усредненной через целый ансамбль выращенных деревьев.

InBagFraction

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

MergeLeaves

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

Method

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

MinLeafSize

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

NumTrees

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

NumPredictorSplit

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

NumPredictorsToSample

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

OOBIndices

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

OOBInstanceWeight

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

OOBPermutedPredictorCountRaiseMargin

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

OOBPermutedPredictorDeltaError

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

OOBPermutedPredictorDeltaMeanMargin

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

OutlierMeasure

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

Prior

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

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

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

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

Proximity

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

Prune

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

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

Числовой вектор весов длины Nobs, где Nobs является количеством наблюдений (строки) в данных тренировки. 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')

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

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

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

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

Ошибка из сумки уменьшается с количеством выращенных деревьев.

Чтобы маркировать наблюдения из сумки, передайте 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');

Загрузите набор данных 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';

В этом случае 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';

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

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

Значение. Чтобы изучить, как это влияет на ваше использование класса, смотрите Сравнение Указателя и Классов Значения (MATLAB) в документации MATLAB® Object-Oriented Programming.

Советы

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

view(B.Trees{t})

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

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

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

Ссылки

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

[2] Meinshausen, N. “Леса Регрессии квантиля”. Журнал Исследования Машинного обучения, Издания 7, 2006, стр 983–999.