templateTree

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

Синтаксис

t = templateTree
t = templateTree(Name,Value)

Описание

пример

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 = 
  classreg.learning.classif.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

Отобразите в выборке (перезамена) misclassification ошибка.

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;

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

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

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

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

tFinal = templateTree('MaxNumSplits',maxNumSplits(idxMNS),'Surrogate','on');
MdlFinal = fitrensemble(Tbl,'MPG','NumLearningCycles',idxNumTrees, ...
    'Learners',tFinal,'LearnRate',learnRate(idxLR))
MdlFinal = 
  classreg.learning.regr.RegressionEnsemble
           PredictorNames: {'Cylinders'  'Displacement'  'Horsepower'  'Weight'}
             ResponseName: 'MPG'
    CategoricalPredictors: []
        ResponseTransform: 'none'
          NumObservations: 94
               NumTrained: 38
                   Method: 'LSBoost'
             LearnerNames: {'Tree'}
     ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'
                  FitInfo: [38×1 double]
       FitInfoDescription: {2×1 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 |             | runtime     | (observed)  | (estim.)    | ycles        |              |              |
|====================================================================================================================|
|    1 | Best   |      3.3989 |       0.702 |      3.3989 |      3.3989 |           26 |     0.072054 |            3 |
|    2 | Accept |      6.0978 |      4.5175 |      3.3989 |      3.5582 |          170 |    0.0010295 |           70 |
|    3 | Best   |      3.2848 |      7.3601 |      3.2848 |       3.285 |          273 |      0.61026 |            6 |
|    4 | Accept |      6.1839 |      1.9371 |      3.2848 |      3.2849 |           80 |    0.0016871 |            1 |
|    5 | Best   |      3.0154 |     0.33314 |      3.0154 |       3.016 |           12 |      0.21457 |            2 |
|    6 | Accept |      3.3146 |     0.32962 |      3.0154 |        3.16 |           10 |      0.18164 |            8 |
|    7 | Accept |      3.0512 |     0.31776 |      3.0154 |      3.1213 |           10 |      0.26719 |           16 |
|    8 | Best   |      3.0013 |     0.29751 |      3.0013 |      3.0891 |           10 |      0.27408 |            1 |
|    9 | Best   |      2.9797 |     0.31657 |      2.9797 |      2.9876 |           10 |      0.28184 |            2 |
|   10 | Accept |      3.0646 |     0.59906 |      2.9797 |      3.0285 |           23 |       0.9922 |            1 |
|   11 | Accept |      2.9825 |     0.31056 |      2.9797 |       2.978 |           10 |      0.54187 |            1 |
|   12 | Best   |      2.9526 |     0.31189 |      2.9526 |      2.9509 |           10 |      0.49116 |            1 |
|   13 | Best   |      2.9281 |     0.98544 |      2.9281 |      2.9539 |           38 |      0.30709 |            1 |
|   14 | Accept |       2.944 |     0.60449 |      2.9281 |      2.9305 |           20 |      0.40583 |            1 |
|   15 | Best   |      2.9128 |     0.50753 |      2.9128 |      2.9237 |           20 |      0.39672 |            1 |
|   16 | Best   |      2.9077 |     0.58614 |      2.9077 |       2.919 |           21 |      0.38157 |            1 |
|   17 | Accept |      3.3932 |     0.36691 |      2.9077 |       2.919 |           10 |      0.97862 |           99 |
|   18 | Accept |      6.2938 |     0.33318 |      2.9077 |      2.9204 |           10 |    0.0074886 |           95 |
|   19 | Accept |      3.0049 |      0.4842 |      2.9077 |      2.9114 |           15 |      0.45073 |            9 |
|   20 | Best   |      2.9072 |      2.2091 |      2.9072 |      2.9111 |           87 |        0.152 |            1 |
|====================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | NumLearningC-|    LearnRate | MaxNumSplits |
|      | result |             | runtime     | (observed)  | (estim.)    | ycles        |              |              |
|====================================================================================================================|
|   21 | Accept |      2.9217 |     0.53329 |      2.9072 |      2.9154 |           21 |      0.31845 |            1 |
|   22 | Best   |      2.8994 |      4.8548 |      2.8994 |       2.917 |          189 |     0.098534 |            1 |
|   23 | Accept |      2.9055 |      7.6922 |      2.8994 |      2.9166 |          310 |      0.15505 |            1 |
|   24 | Accept |      2.9264 |      1.4456 |      2.8994 |      2.9012 |           61 |      0.23387 |            1 |
|   25 | Accept |      3.0869 |     0.34623 |      2.8994 |      2.9169 |           10 |      0.48674 |           27 |
|   26 | Best   |      2.8942 |      7.7285 |      2.8942 |      2.8912 |          319 |      0.11093 |            1 |
|   27 | Accept |      3.0175 |     0.97891 |      2.8942 |      2.8889 |           38 |      0.32187 |            4 |
|   28 | Accept |      2.9049 |      3.4053 |      2.8942 |      2.8941 |          141 |      0.13325 |            1 |
|   29 | Accept |      3.0477 |     0.30373 |      2.8942 |      2.8939 |           10 |      0.28155 |           97 |
|   30 | Accept |      3.0563 |      0.3135 |      2.8942 |       2.894 |           10 |      0.53101 |            3 |

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

Best observed feasible point:
    NumLearningCycles    LearnRate    MaxNumSplits
    _________________    _________    ____________

           319            0.11093          1      

Observed objective function value = 2.8942
Estimated objective function value = 2.894
Function evaluation time = 7.7285

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

           319            0.11093          1      

Estimated objective function value = 2.894
Estimated function evaluation time = 7.9767
mdl = 
  classreg.learning.regr.RegressionEnsemble
                       PredictorNames: {'Cylinders'  'Displacement'  'Horsepower'  'Weight'}
                         ResponseName: 'MPG'
                CategoricalPredictors: []
                    ResponseTransform: 'none'
                      NumObservations: 94
    HyperparameterOptimizationResults: [1×1 BayesianOptimization]
                           NumTrained: 319
                               Method: 'LSBoost'
                         LearnerNames: {'Tree'}
                 ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'
                              FitInfo: [319×1 double]
                   FitInfoDescription: {2×1 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, стандартном CART, разделяющий предиктор алгоритм предпочитает разделять непрерывный предиктор по этим двум переменным.

Обучите случайный лес 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. Train с помощью значения по умолчанию, один по сравнению с одним кодирующего проект.

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')

Отобразите в выборке (перезамена) misclassification ошибка.

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

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

свернуть все

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (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).

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

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

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

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

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

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

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

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

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

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

Стандартный CART — Выбирает предиктор разделения, который максимизирует усиление критерия разделения по всем возможным разделениям всех предикторов [1].

'curvature'Тест искривления — Выбирает предиктор разделения, который минимизирует p - значение тестов хи-квадрата независимости между каждым предиктором и ответом [3][4]. Учебная скорость подобна стандартному CART.
'interaction-curvature'Тест взаимодействия — Выбирает предиктор разделения, который минимизирует p - значение тестов хи-квадрата независимости между каждым предиктором и ответом, и это минимизирует p - значение теста хи-квадрата независимости между каждой парой предикторов и ответом [3]. Учебная скорость может быть медленнее, чем стандартный CART.

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

Совет

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

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

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

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

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

  • Скорость прогноза незатронута значением 'PredictorSelection'.

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

Пример: '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

Типы данных: логический

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Типы данных: single | double | 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] Бреимен, L., Дж. Фридман, Р. Олшен и К. Стоун. Классификация и деревья регрессии. Бока-Ратон, FL: нажатие CRC, 1984.

[2] Котельщик, Д., С. Цз. Хун и Дж. Р. М. Хоскинг. “Деля Номинальные Атрибуты в Деревьях решений”. Анализ данных и Открытие Знаний, Издание 3, 1999, стр 197–217.

[3] Loh, W.Y. “Деревья регрессии с Несмещенным Обнаружением Выбора переменной и Взаимодействия”. Statistica Sinica, Издание 12, 2002, стр 361–386.

[4] Loh, В.И. и И.С. Ши. “Разделите Методы выбора для Деревьев Классификации”. Statistica Sinica, Издание 7, 1997, стр 815–840.

Введенный в R2014a