templateTree

Создайте шаблон дерева решений

Описание

пример

t = templateTree возвращает шаблон обучающегося дерева принятия решений по умолчанию, подходящий для настройки модели бустинги и баггинги деревьев решений кода ансамбля (выхода) или исправляющего ошибку мультикласса (ECOC). Задайте t как учащийся, использующий:

  • fitcensemble для классификационных ансамблей

  • fitrensemble для регрессионных ансамблей

  • fitcecoc для классификации модели ECOC

Если вы задаете шаблон дерева решений по умолчанию, то во время обучения программное обеспечение использует значения по умолчанию для всех входных параметров. Рекомендуется задать тип дерева решений, например, для шаблона дерева классификации задайте 'Type','classification'. Если вы задаете тип дерева решений и отображаете t в Командном окне, затем все опции, кроме Type появляются пустыми ([]).

пример

t = templateTree(Name,Value) создает шаблон с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение".

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

Если вы отображаете t в Командном окне, затем все опции появляются пустыми ([]), кроме тех, которые вы задаете используя аргументы пары "имя-значение". Во время обучения программа использует значения по умолчанию для пустых опций.

Примеры

свернуть все

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

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

load fisheriris

Создайте шаблон дерева решений из древовидных пней с суррогатными разделениями.

t = templateTree('Surrogate','on','MaxNumSplits',1)
t = 
Fit template for Tree.
       Surrogate: 'on'
    MaxNumSplits: 1

Опции для объекта шаблона пусты, за исключением Surrogate и MaxNumSplits. Когда ты проходишь t для функции обучения программа заполняет пустые опции соответствующими значениями по умолчанию.

Задайте t как слабый ученик классификационного ансамбля.

Mdl = fitcensemble(meas,species,'Method','AdaBoostM2','Learners',t)
Mdl = 
  ClassificationEnsemble
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'setosa'  'versicolor'  'virginica'}
           ScoreTransform: 'none'
          NumObservations: 150
               NumTrained: 100
                   Method: 'AdaBoostM2'
             LearnerNames: {'Tree'}
     ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'
                  FitInfo: [100x1 double]
       FitInfoDescription: {2x1 cell}


  Properties, Methods

Отображение ошибки неправильной классификации в выборке (повторная замена).

L = resubLoss(Mdl)
L = 0.0333

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

Этот пример вручную находит оптимальные параметры при помощи опции перекрестной валидации ('KFold' аргумент пары "имя-значение") и kfoldLoss функция. Также можно использовать 'OptimizeHyperparameters' аргумент пары "имя-значение" для автоматической оптимизации гиперпараметров. См. «Оптимизация регрессионного ансамбля».

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

load carsmall
Tbl = table(Cylinders,Displacement,Horsepower,Weight,MPG);

Значения по умолчанию для древовидных контроллеров глубины для увеличения регрессионых деревьев:

  • 10 для MaxNumSplits.

  • 5 для MinLeafSize

  • 10 для MinParentSize

Для поиска оптимального уровня сложности дерева:

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

  2. Оцените перекрестно проверенную среднеквадратичную ошибку (MSE) для каждого ансамбля.

  3. Для уровня сложности дерева j, j=1...J, сравните совокупное, перекрестно проверенное MSE ансамблей путем построения их с количеством циклов обучения. Постройте график отдельных кривых для каждой скорости обучения на одном рисунке.

  4. Выберите кривую, которая достигает минимального MSE, и отметьте соответствующий цикл обучения и скорость обучения.

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

rng(1) % For reproducibility
MdlDeep = fitrtree(Tbl,'MPG','CrossVal','on','MergeLeaves','off', ...
    'MinParentSize',1,'Surrogate','on');
MdlStump = fitrtree(Tbl,'MPG','MaxNumSplits',1,'CrossVal','on', ...
    'Surrogate','on');

Перекрестная валидация ансамбля из 150 ускоренных регрессионых деревьев с помощью 5-кратной перекрестной валидации. Использование шаблона дерева:

  • Варьируйте максимальное количество разделений, используя значения в последовательности {20,21,...,2m}. m таково, что 2m не больше n-1.

  • Включите суррогатные расщепления.

Для каждого варианта настройте скорость обучения, используя каждое значение в наборе {0,1, 0,25, 0,5, 1}.

n = size(Tbl,1);
m = floor(log2(n - 1));
learnRate = [0.1 0.25 0.5 1];
numLR = numel(learnRate);
maxNumSplits = 2.^(0:m);
numMNS = numel(maxNumSplits);
numTrees = 150;
Mdl = cell(numMNS,numLR);

for k = 1:numLR
    for j = 1:numMNS
        t = templateTree('MaxNumSplits',maxNumSplits(j),'Surrogate','on');
        Mdl{j,k} = fitrensemble(Tbl,'MPG','NumLearningCycles',numTrees, ...
            'Learners',t,'KFold',5,'LearnRate',learnRate(k));
    end
end

Оценка совокупного, перекрестно проверенного MSE каждого ансамбля.

kflAll = @(x)kfoldLoss(x,'Mode','cumulative');
errorCell = cellfun(kflAll,Mdl,'Uniform',false);
error = reshape(cell2mat(errorCell),[numTrees numel(maxNumSplits) numel(learnRate)]);
errorDeep = kfoldLoss(MdlDeep);
errorStump = kfoldLoss(MdlStump);

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

mnsPlot = [1 round(numel(maxNumSplits)/2) numel(maxNumSplits)];
figure;
for k = 1:3
    subplot(2,2,k)
    plot(squeeze(error(:,mnsPlot(k),:)),'LineWidth',2)
    axis tight
    hold on
    h = gca;
    plot(h.XLim,[errorDeep errorDeep],'-.b','LineWidth',2)
    plot(h.XLim,[errorStump errorStump],'-.r','LineWidth',2)
    plot(h.XLim,min(min(error(:,mnsPlot(k),:))).*[1 1],'--k')
    h.YLim = [10 50];    
    xlabel('Number of trees')
    ylabel('Cross-validated MSE')
    title(sprintf('MaxNumSplits = %0.3g', maxNumSplits(mnsPlot(k))))
    hold off
end
hL = legend([cellstr(num2str(learnRate','Learning Rate = %0.2f')); ...
        'Deep Tree';'Stump';'Min. MSE']);
hL.Position(1) = 0.6;

Figure contains 3 axes. Axes 1 with title MaxNumSplits = 1 contains 7 objects of type line. Axes 2 with title MaxNumSplits = 8 contains 7 objects of type line. Axes 3 with title MaxNumSplits = 64 contains 7 objects of type line. These objects represent Learning Rate = 0.10, Learning Rate = 0.25, Learning Rate = 0.50, Learning Rate = 1.00, Deep Tree, Stump, Min. MSE.

Каждая кривая содержит минимальное перекрестное подтверждение MSE, происходящее при оптимальном количестве деревьев в ансамбле.

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

[minErr,minErrIdxLin] = min(error(:));
[idxNumTrees,idxMNS,idxLR] = ind2sub(size(error),minErrIdxLin);
fprintf('\nMin. MSE = %0.5f',minErr)
Min. MSE = 16.77593
fprintf('\nOptimal Parameter Values:\nNum. Trees = %d',idxNumTrees);
Optimal Parameter Values:
Num. Trees = 78
fprintf('\nMaxNumSplits = %d\nLearning Rate = %0.2f\n',...
    maxNumSplits(idxMNS),learnRate(idxLR))
MaxNumSplits = 1
Learning Rate = 0.25

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

tFinal = templateTree('MaxNumSplits',maxNumSplits(idxMNS),'Surrogate','on');
MdlFinal = fitrensemble(Tbl,'MPG','NumLearningCycles',idxNumTrees, ...
    'Learners',tFinal,'LearnRate',learnRate(idxLR))
MdlFinal = 
  RegressionEnsemble
           PredictorNames: {1x4 cell}
             ResponseName: 'MPG'
    CategoricalPredictors: []
        ResponseTransform: 'none'
          NumObservations: 94
               NumTrained: 78
                   Method: 'LSBoost'
             LearnerNames: {'Tree'}
     ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'
                  FitInfo: [78x1 double]
       FitInfoDescription: {2x1 cell}
           Regularization: []


  Properties, Methods

MdlFinal является RegressionEnsemble. Чтобы предсказать экономию топлива автомобиля, учитывая его количество цилиндров, объем, перемещаемый цилиндрами, мощность и вес, можно передать данные предиктора и MdlFinal на predict.

Вместо поиска оптимальных значений вручную с помощью опции перекрестной валидации ('KFold') и kfoldLoss функция, вы можете использовать 'OptimizeHyperparameters' аргумент пары "имя-значение". Когда вы задаете 'OptimizeHyperparameters', программное обеспечение автоматически находит оптимальные параметры, используя байесовскую оптимизацию. Оптимальные значения, полученные при помощи 'OptimizeHyperparameters' могут отличаться от полученных с помощью ручного поиска.

t = templateTree('Surrogate','on');
mdl = fitrensemble(Tbl,'MPG','Learners',t, ...
    'OptimizeHyperparameters',{'NumLearningCycles','LearnRate','MaxNumSplits'})
|====================================================================================================================|
| Iter | Eval   | Objective:  | Objective   | BestSoFar   | BestSoFar   | NumLearningC-|    LearnRate | MaxNumSplits |
|      | result | log(1+loss) | runtime     | (observed)  | (estim.)    | ycles        |              |              |
|====================================================================================================================|
|    1 | Best   |      3.3955 |       1.332 |      3.3955 |      3.3955 |           26 |     0.072054 |            3 |
|    2 | Accept |      6.0976 |      6.9885 |      3.3955 |      3.5549 |          170 |    0.0010295 |           70 |
|    3 | Best   |      3.2914 |      10.751 |      3.2914 |      3.2917 |          273 |      0.61026 |            6 |
|    4 | Accept |      6.1839 |      3.4531 |      3.2914 |      3.2915 |           80 |    0.0016871 |            1 |
|    5 | Best   |      3.0379 |      1.7951 |      3.0379 |      3.0384 |           18 |      0.21288 |           31 |
|    6 | Accept |       3.052 |      1.1116 |      3.0379 |      3.0401 |           28 |      0.18021 |           13 |
|    7 | Best   |      2.9642 |      2.2063 |      2.9642 |      2.9701 |           32 |      0.24179 |            5 |
|    8 | Best   |      2.9446 |      1.2017 |      2.9446 |      2.9413 |           21 |      0.25944 |            1 |
|    9 | Best   |      2.9387 |     0.73108 |      2.9387 |        2.94 |           18 |      0.26309 |            1 |
|   10 | Accept |      3.0469 |     0.87257 |      2.9387 |      2.9414 |           10 |      0.25476 |            1 |
|   11 | Accept |      3.0784 |     0.77319 |      2.9387 |      2.9408 |           11 |       0.9742 |            2 |
|   12 | Best   |      2.9367 |      1.6773 |      2.9367 |       2.942 |           25 |      0.47913 |            1 |
|   13 | Best   |      2.8952 |      1.2261 |      2.8952 |      2.9033 |           28 |       0.3572 |            1 |
|   14 | Accept |      2.9054 |     0.94135 |      2.8952 |      2.9041 |           29 |       0.3393 |            1 |
|   15 | Best   |      2.8928 |      1.4597 |      2.8928 |      2.9007 |           28 |        0.355 |            1 |
|   16 | Accept |      2.9008 |      1.3572 |      2.8928 |      2.9006 |           31 |      0.34654 |            1 |
|   17 | Accept |      2.8939 |      1.5636 |      2.8928 |      2.8991 |           26 |      0.35626 |            1 |
|   18 | Accept |      2.9109 |     0.95378 |      2.8928 |      2.8999 |           22 |      0.35898 |            1 |
|   19 | Accept |      2.9078 |      1.1717 |      2.8928 |       2.901 |           31 |       0.3438 |            1 |
|   20 | Accept |      2.9139 |      1.7969 |      2.8928 |      2.9018 |           33 |      0.32636 |            1 |
|====================================================================================================================|
| Iter | Eval   | Objective:  | Objective   | BestSoFar   | BestSoFar   | NumLearningC-|    LearnRate | MaxNumSplits |
|      | result | log(1+loss) | runtime     | (observed)  | (estim.)    | ycles        |              |              |
|====================================================================================================================|
|   21 | Accept |       2.901 |     0.97123 |      2.8928 |      2.9016 |           24 |      0.36235 |            1 |
|   22 | Accept |      6.4217 |     0.45103 |      2.8928 |       2.902 |           10 |    0.0010438 |            2 |
|   23 | Accept |       6.232 |     0.81571 |      2.8928 |      2.9007 |           10 |     0.010918 |            1 |
|   24 | Accept |      2.9491 |     0.70086 |      2.8928 |      2.9004 |           10 |      0.45635 |            2 |
|   25 | Accept |      2.8951 |      15.429 |      2.8928 |      2.9005 |          406 |     0.093798 |            1 |
|   26 | Accept |      2.9079 |      14.399 |      2.8928 |      2.9007 |          478 |       0.1292 |            1 |
|   27 | Best   |      2.8923 |      9.3649 |      2.8923 |      2.9008 |          221 |      0.11307 |            1 |
|   28 | Accept |      3.1867 |      13.217 |      2.8923 |      2.9021 |          309 |      0.10879 |           83 |
|   29 | Accept |      3.1689 |     0.48561 |      2.8923 |      2.9021 |           11 |       0.5454 |           98 |
|   30 | Accept |      2.9006 |      3.8922 |      2.8923 |      2.9016 |          102 |      0.20979 |            1 |

Figure contains an axes. The axes with title Min objective vs. Number of function evaluations contains 2 objects of type line. These objects represent Min observed objective, Estimated min objective.

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 152.6867 seconds
Total objective function evaluation time: 103.0901

Best observed feasible point:
    NumLearningCycles    LearnRate    MaxNumSplits
    _________________    _________    ____________

           221            0.11307          1      

Observed objective function value = 2.8923
Estimated objective function value = 2.8927
Function evaluation time = 9.3649

Best estimated feasible point (according to models):
    NumLearningCycles    LearnRate    MaxNumSplits
    _________________    _________    ____________

           29             0.3393           1      

Estimated objective function value = 2.9016
Estimated function evaluation time = 1.4054
mdl = 
  RegressionEnsemble
                       PredictorNames: {1x4 cell}
                         ResponseName: 'MPG'
                CategoricalPredictors: []
                    ResponseTransform: 'none'
                      NumObservations: 94
    HyperparameterOptimizationResults: [1x1 BayesianOptimization]
                           NumTrained: 29
                               Method: 'LSBoost'
                         LearnerNames: {'Tree'}
                 ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'
                              FitInfo: [29x1 double]
                   FitInfoDescription: {2x1 cell}
                       Regularization: []


  Properties, Methods

Загрузите 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);

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

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

Потому что существует 3 категории только в Cylinders и Model_Yearстандартный алгоритм разделения предикторов ТЕЛЕЖКА предпочитает разделение непрерывного предиктора над этими двумя переменными.

Обучите случайный лес из 500 регрессионых деревьев, используя весь набор данных. Чтобы вырастить объективные деревья, задайте использование теста кривизны для разделения предикторов. Поскольку в данных отсутствуют значения, задайте использование суррогатных разделений. Чтобы воспроизвести случайные выборки предиктора, установите seed генератора случайных чисел при помощи rng и задайте 'Reproducible',true.

rng('default'); % For reproducibility
t = templateTree('PredictorSelection','curvature','Surrogate','on', ...
    'Reproducible',true); % For reproducibility of random predictor selections
Mdl = fitrensemble(X,'MPG','Method','bag','NumLearningCycles',500, ...
    'Learners',t);

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

options = statset('UseParallel',true);
imp = oobPermutedPredictorImportance(Mdl,'Options',options);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).

Сравните оценки с помощью гистограммы.

figure;
bar(imp);
title('Out-of-Bag Permuted Predictor Importance Estimates');
ylabel('Estimates');
xlabel('Predictors');
h = gca;
h.XTickLabel = Mdl.PredictorNames;
h.XTickLabelRotation = 45;
h.TickLabelInterpreter = 'none';

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

Создайте шаблон ансамбля для использования в fitcecoc.

Загрузите набор данных аритмии.

load arrhythmia
tabulate(categorical(Y));
  Value    Count   Percent
      1      245     54.20%
      2       44      9.73%
      3       15      3.32%
      4       15      3.32%
      5       13      2.88%
      6       25      5.53%
      7        3      0.66%
      8        2      0.44%
      9        9      1.99%
     10       50     11.06%
     14        4      0.88%
     15        5      1.11%
     16       22      4.87%
rng(1); % For reproducibility

Некоторые классы имеют небольшие относительные частоты в данных.

Создайте шаблон для AdaBoostM1 ансамбля классификационных деревьев и укажите использовать 100 учащихся и усадку 0,1. По умолчанию бустинг увеличивает пни (т.е. один узел, имеющий набор листьев). Поскольку существуют классы с малыми частотами, деревья должны быть достаточно листовыми, чтобы быть чувствительными к классам меньшинств. Задайте минимальное количество наблюдений узла листа равное 3.

tTree = templateTree('MinLeafSize',20);
t = templateEnsemble('AdaBoostM1',100,tTree,'LearnRate',0.1);

Все свойства объектов шаблона пусты, кроме Method и Type, и соответствующие свойства аргумента пары "имя-значение" значений в вызовах функции. Когда ты проходишь t для функции обучения программа заполняет пустые свойства соответствующими значениями по умолчанию.

Задайте t в качестве двоичного ученика для многоклассовой модели ECOC. Обучите, используя проект кодирования по умолчанию один от одного.

Mdl = fitcecoc(X,Y,'Learners',t);
  • Mdl является ClassificationECOC многоклассовая модель.

  • Mdl.BinaryLearners - массив ячеек 78 на 1 из CompactClassificationEnsemble модели.

  • Mdl.BinaryLearners{j}.Trained - массив ячеек 100 на 1 CompactClassificationTree модели, для j = 1,...,78.

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

view(Mdl.BinaryLearners{1}.Trained{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.

Отображение ошибки неправильной классификации в выборке (повторная замена).

L = resubLoss(Mdl,'LossFun','classiferror')
L = 0.0819

Входные параметры

свернуть все

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'Surrogate','on','NumVariablesToSample','all' задает шаблон с суррогатными разделениями и использует все доступные предикторы при каждом разделении.
Для деревьев классификации и регрессии

свернуть все

Максимальное количество разделений решений (или узлов ветви) на дерево, заданное как разделенная разделенными запятой парами, состоящая из 'MaxNumSplits' и положительное целое число. templateTree разделяет MaxNumSplits или меньше узлов ветви. Для получения дополнительной информации о разделении поведения, см. Алгоритмы.

Для пакетных деревьев принятия решений и двоичных учащихся дерева принятия решений в моделях ECOC, по умолчанию является n – 1, где n количество наблюдений в обучающей выборке. Для бустерных деревьев решений значением по умолчанию является 10.

Пример: 'MaxNumSplits',5

Типы данных: single | double

Флаг слияния листов, заданный как разделенная разделенными запятой парами, состоящая из 'MergeLeaves' и любой из них 'on' или 'off'.

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

Для усиленных и упакованных деревьев принятия решений, значения по умолчанию 'off'. Для двоичных учащихся дерева решений в моделях ECOC, по умолчанию является 'on'.

Пример: 'MergeLeaves','on'

Минимальные наблюдения за листом, заданные как разделенная разделенными запятой парами, состоящая из 'MinLeafSize' и положительное целое значение. Каждый лист имеет по крайней мере MinLeafSize наблюдения по листу дерева. Если вы поставляете оба MinParentSize и MinLeafSize, дерево решений использует настройку, которая дает большие листья: MinParentSize = max(MinParentSize,2*MinLeafSize).

Для усиленных и упакованных деревьев принятия решений, значения по умолчанию 1 для классификации и 5 для регрессии. Для двоичных учащихся дерева решений в моделях ECOC, по умолчанию является 1.

Пример: 'MinLeafSize',2

Минимальные наблюдения на узел ветви, заданные как разделенная разделенными запятой парами, состоящая из 'MinParentSize' и положительное целое значение. Каждый узел ветви в дереве имеет по крайней мере MinParentSize наблюдения. Если вы поставляете оба MinParentSize и MinLeafSize, дерево решений использует настройку, которая дает большие листья: MinParentSize = max(MinParentSize,2*MinLeafSize).

  • Если вы задаете MinLeafSize, затем значение по умолчанию для 'MinParentSize' является 10.

  • Если вы не задаете MinLeafSize, затем значение по умолчанию изменяется в зависимости от модели обучения. Для бустерных и упакованных деревьев решений значение по умолчанию 2 для классификации и 10 для регрессии. Для двоичных учащихся дерева решений в моделях ECOC значение по умолчанию 10.

Пример: 'MinParentSize',4

Количество предикторов для случайного выбора для каждого разделения, заданное как разделенная разделенными запятой парами, состоящая из 'NumVariablesToSample' и положительное целое значение. Также можно задать 'all' использовать все доступные предикторы.

Если обучающие данные включают много предикторов, и вы хотите проанализировать важность предиктора, задайте 'NumVariablesToSample' как 'all'. В противном случае программное обеспечение может не выбрать некоторые предикторы, недооценив их важность.

Чтобы воспроизвести случайные выборки, необходимо задать seed генератора случайных чисел при помощи rng и задайте 'Reproducible',true.

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

Пример: 'NumVariablesToSample',3

Типы данных: single | double | char | string

Алгоритм, используемый для выбора наилучшего разделения предиктора в каждом узле, заданный как разделенная разделенными запятой парами, состоящая из 'PredictorSelection' и значение в этой таблице.

ЗначениеОписание
'allsplits'

Стандартная ТЕЛЕЖКА - выбирает предиктор разделения, который максимизирует коэффициент усиления разделения по всем возможным разделениям всех предикторов [1].

'curvature'Тест кривизны - выбирает разделенный предиктор, который минимизирует p значение хи-квадратных тестов независимости между каждым предиктором и [3][4] отклика. Скорость обучения аналогична стандартной ТЕЛЕЖКА.
'interaction-curvature'Тест взаимодействия - выбирает разделенный предиктор, который минимизирует p-значение хи-квадратных тестов независимости между каждым предиктором и ответом, и который минимизирует p-значение хи-квадратного теста независимости между каждой парой предикторов и откликом [3]. Скорость обучения может быть медленнее, чем стандартная ТЕЛЕЖКА.

Для 'curvature' и 'interaction-curvature', если все тесты дают p значений, больше 0,05, то MATLAB® останавливает разделение узлов.

Совет

  • Тесты кривизны и взаимодействия не рекомендованы для увеличения деревьев решений. Чтобы обучить ансамбль бустерных деревьев, который имеет большую точность, используйте стандартную ТЕЛЕЖКУ.

  • Стандартная ТЕЛЕЖКА имеет тенденцию выбирать разделенные предикторы, содержащие много различных значений, например, непрерывных переменных, по сравнению с теми, которые содержат несколько различных значений, например, категориальные переменные [4]. Если набор данных предиктора неоднороден, или если существуют предикторы, которые имеют относительно меньше различных значений, чем другие переменные, то рассмотрите установку кривизны или теста взаимодействия.

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

    • Если анализ предикторной важности является вашей целью. Для получения дополнительной информации об оценке предикторной важности см. oobPermutedPredictorImportance для задач классификации, oobPermutedPredictorImportance для регрессионных задач и Введение в выбор признаков.

  • Деревья, выращенные с использованием стандартной ТЕЛЕЖКА, не чувствительны к взаимодействиям переменных предиктора. Кроме того, такие деревья с меньшей вероятностью идентифицируют важные переменные в присутствии многих нерелевантных предикторов, чем применение теста взаимодействия. Поэтому, чтобы принять во внимание взаимодействия предикторов и идентифицировать переменные важности в присутствии многих нерелевантных переменных, задайте тест взаимодействия [3].

  • Скорость предсказания не зависит от значения 'PredictorSelection'.

Для получения дополнительной информации о том, как templateTree выбирает разделение предикторов, см. «Правила разделения узлов» (классификация), «Правила разделения узлов» (регрессия) и «Выбор метода выбора разделения предикторов».

Пример: 'PredictorSelection','curvature'

Флаг для оценки оптимальной последовательности обрезанных поддеревьев, заданный как разделенная разделенными запятой парами, состоящая из 'Prune' и 'on' или 'off'.

Если Prune является 'on'затем программное обеспечение обучает учащихся классификационного дерева, не обрезая их, но оценивает оптимальную последовательность обрезанных поддеревьев для каждого учащегося в ансамбле или дереве принятия решений двоичного ученика в моделях ECOC. В противном случае программное обеспечение обучает учащихся классификационного дерева, не оценивая оптимальную последовательность обрезанных поддеревьев.

Для бустерных и упакованных деревьев решений, по умолчанию является 'off'.

Для двоичных учащихся дерева решений в моделях ECOC, по умолчанию является 'on'.

Пример: 'Prune','on'

Критерий обрезки, заданный как разделенная запятыми пара, состоящая из 'PruneCriterion' и критерий обрезки, действительный для типа дерева.

  • Для деревьев классификации можно задать 'error' (по умолчанию) или 'impurity'. Если вы задаете 'impurity', затем templateTree использует меру примеси, заданную 'SplitCriterion' аргумент пары "имя-значение".

  • Для деревьев регрессии можно задать только 'mse'(по умолчанию).

Пример: 'PruneCriterion','impurity'

Флаг для обеспечения воспроизводимости во время повторных запусков обучения модели, заданный как разделенная разделенными запятой парами, состоящая из 'Reproducible' и любой из них false или true.

Если 'NumVariablesToSample' не 'all'затем программа выбирает предикторы случайным образом для каждого разделения. Чтобы воспроизвести случайные выборки, вы должны задать 'Reproducible',true и установите seed генератора случайных чисел при помощи rng. Обратите внимание, что установка 'Reproducible' на true может замедлить обучение.

Пример: 'Reproducible',true

Типы данных: logical

Критерий разделения, заданный как разделенная разделенными запятой парами, состоящая из 'SplitCriterion' и критерий разделения, действительный для типа дерева.

  • Для деревьев классификации:

    • 'gdi' для индекса разнообразия Джини (по умолчанию)

    • 'twoing' для правила twoing

    • 'deviance' для максимального уменьшения отклонения (также известного как перекрестная энтропия)

  • Для деревьев регрессии:

    • 'mse' для средней квадратичной невязки (по умолчанию)

Пример: 'SplitCriterion','deviance'

Флаг разделения суррогатного решения, заданный как разделенная разделенными запятой парами, состоящая из 'Surrogate' и один из 'off', 'on', 'all', или положительное целое значение.

  • Когда 'off'дерево решений не находит суррогатных расщеплений в узлах ветви.

  • Когда 'on'дерево решений находит самое большее 10 суррогатных разделений в каждом узле ветви.

  • Когда установлено значение 'all'дерево решений находит все суррогатные разделения в каждом узле ветви. The 'all' настройка может занять значительное время и память.

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

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

Пример: 'Surrogate','on'

Типы данных: single | double | char | string

Тип дерева решений, заданный как значение в таблице

ЗначениеОписание
'classification'Вырастите учащихся дерева классификации. Функции аппроксимации fitcensemble и fitcecoc установите это значение при прохождении t к ним.
'regression'Выращивайте учащихся дерева регрессии. Функция аппроксимации fitrensemble устанавливает это значение при прохождении t к нему.

Совет

Хотя t выводит Type из функции аппроксимации, в которую она подается, при установке происходит следующее Type:

  • Отображение t показывает все опции. Каждый не заданный опция является пустым массивом [].

  • templateTree проверяет спецификации на ошибки.

Пример: 'Type','classification'

Типы данных: char | string

Только для деревьев классификации

свернуть все

Алгоритм, чтобы найти лучшее разделение на категориальном предикторе для данных с C категориями для данных и K ≥ 3 классах, заданных как разделенная разделенными запятой парами, состоящая из 'AlgorithmForCategorical' и одно из следующих.

ЗначениеОписание
'Exact'Рассмотрим все 2C–1 - 1 комбинация.
'PullLeft'Начните со всех C категорий правой ветви. Рассмотрите перемещение каждой категории в левую ветвь, когда она достигает минимальной примеси для классов K среди остальных категорий. Из этой последовательности выберите разделение, которое имеет самую низкую примесь.
'PCA'Вычислите счет для каждой категории, используя скалярное произведение между первым основным компонентом взвешенной ковариационной матрицы (матрицы вероятностей центрированного класса) и вектором вероятностей классов для этой категории. Отсортируйте счета в порядке возрастания и рассмотрим все C - 1 расщепления.
'OVAbyClass'Начните со всех C категорий правой ветви. Для каждого класса упорядочивайте категории на основе их вероятности для этого класса. Для первого класса рассмотрите перемещение каждой категории в левую ветвь по порядку, записывая критерий примеси при каждом перемещении. Повторите для остальных классов. Из этой последовательности выберите разделение, которое имеет минимальную примесь.

Программа выбирает оптимальное подмножество алгоритмов для каждого разделения, используя известное количество классов и уровней категориального предиктора. Для двух классов он всегда выполняет точный поиск. Используйте 'AlgorithmForCategorical' аргумент пары "имя-значение" для задания конкретного алгоритма.

Для получения дополнительной информации см. Разделение категориальных предикторов в классификационных деревьях.

Пример: 'AlgorithmForCategorical','PCA'

Максимальные уровни категорий в разделенном узле, заданные как разделенная разделенными запятой парами, состоящая из 'MaxNumCategories' и неотрицательное скалярное значение. Дерево классификации разделяет категориальный предиктор, используя точный алгоритм поиска, если предиктор имеет самое большее MaxNumCategories уровни в разделенном узле. В противном случае он находит лучшее категориальное разделение с помощью одного из неточных алгоритмов. Обратите внимание, что передача небольшого значения может увеличить время расчета и перегрузку памяти.

Пример: 'MaxNumCategories',8

Только для деревьев регрессии

свернуть все

Квадратичный допуск ошибок на узел, заданный как разделенная разделенными запятой парами, состоящая из 'QuadraticErrorTolerance' и положительная скалярная величина значение. Дерево регрессии останавливает разделение узлов, когда средневзвешенная квадратичная невязка на узел падает ниже QuadraticErrorTolerance*ε, где ε - средневзвешенная квадратичная невязка всех n реакций, вычисленных перед ростом дерева решений.

ε=i=1nwi(yiy¯)2.

wi - вес i наблюдений, учитывая, что веса всех наблюдений равны единице (i=1nwi=1), и

y¯=i=1nwiyi

- взвешенное среднее значение всех ответов.

Пример: 'QuadraticErrorTolerance',1e-4

Выходные аргументы

свернуть все

Шаблон дерева решений для классификации или регрессии, подходящий для обучения ансамбля (усиленные и упакованные деревья решений) или исправляющего ошибки выходного кода (ECOC) многоклассовой модели, возвращенный в качестве объекта шаблона. Передайте t кому fitcensemble, или fitrensemble, или fitcecoc указать, как создать дерево решений для классификационного ансамбля, регрессионного ансамбля или модели ECOC, соответственно.

Если вы отображаете t в Командном окне, тогда все неустановленные опции появятся пустыми ([]). Однако во время обучения программа заменяет пустые опции соответствующими значениями по умолчанию.

Алгоритмы

  • Для размещения MaxNumSplitsпрограмма разделяет все узлы в текущей layer, а затем подсчитывает количество узлов ветви. Слой является набором узлов, равноудаленных от корневого узла. Если количество узлов ветви превышает MaxNumSplits, затем программное обеспечение следует этой процедуре.

    1. Определите, сколько узлов ветви в текущем слое должно быть непригодным, чтобы было самое большее MaxNumSplits узлы ветви.

    2. Сортировка узлов ветви по усилениям примесей.

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

    4. Верните дерево решений, выращенное до сих пор.

    Эта процедура направлена на создание максимально сбалансированных деревьев.

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

    • Есть MaxNumSplits + 1 узел ветви.

    • Предлагаемое разделение заставляет количество наблюдений по меньшей мере в одном узле ветви быть меньше MinParentSize.

    • Предлагаемое разделение заставляет количество наблюдений по меньшей мере в одном листовом узле быть меньше MinLeafSize.

    • Алгоритм не может найти хорошее разделение внутри слоя (т.е. критерий обрезки (см PruneCriterion), не улучшается для всех предлагаемых расщеплений в слое). Особый случай этого события - когда все узлы являются чистыми (т.е. все наблюдения в узле имеют один и тот же класс).

    • Для значений 'curvature' или 'interaction-curvature' от PredictorSelectionвсе тесты дают p значений более 0,05.

    MaxNumSplits и MinLeafSize не влияет на разделение значений по умолчанию. Поэтому, если вы задаете 'MaxNumSplits', тогда разделение может остановиться из-за значения MinParentSize перед MaxNumSplits имеют место расщепления.

  • Для получения дополнительной информации о выборе разделенных предикторов и алгоритмов разделения узлов при выращивании деревьев решений, смотрите Алгоритмы для деревьев классификации и Алгоритмы для деревьев регрессии.

Ссылки

[1] Breiman, L., J. Friedman, R. Olshen, and C. Stone. Деревья классификации и регрессии. Бока Ратон, FL: CRC Press, 1984.

[2] Coppersmith, D., S. J. Хонг и Дж. Р. М. Хоскинг. «Разбиение номинальных атрибутов на разделы в деревьях решений». Data Mining and Knowledge Discovery, Vol. 3, 1999, pp. 197-217.

[3] Loh, W.Y. «Regression Trees with Unbiased Variable Selection and Interaction Detection». Statistica Sinica, Vol. 12, 2002, pp. 361-386.

[4] Loh, W.Y. and Y.S. Shih. «Разделение методов выбора для деревьев классификации». Statistica Sinica, Vol. 7, 1997, pp. 815-840.

Введенный в R2014a