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 = 
  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.00516
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 | log(1+loss) | runtime     | (observed)  | (estim.)    | ycles        |              |              |
|====================================================================================================================|
|    1 | Best   |      3.3985 |     0.64049 |      3.3985 |      3.3985 |           26 |     0.072054 |            3 |
|    2 | Accept |      6.0976 |      4.2888 |      3.3985 |      3.5578 |          170 |    0.0010295 |           70 |
|    3 | Best   |      3.2868 |      6.5078 |      3.2868 |       3.287 |          273 |      0.61026 |            6 |
|    4 | Accept |      6.1839 |      1.8448 |      3.2868 |      3.2868 |           80 |    0.0016871 |            1 |
|    5 | Best   |      3.1931 |     0.29631 |      3.1931 |      3.1928 |           10 |      0.21453 |            1 |
|    6 | Best   |      2.9415 |     0.28328 |      2.9415 |      3.0916 |           10 |      0.30877 |            2 |
|    7 | Accept |      3.0264 |     0.28242 |      2.9415 |      2.9444 |           10 |      0.24753 |            2 |
|    8 | Accept |      3.1258 |     0.32071 |      2.9415 |      3.0441 |           10 |      0.81536 |           99 |
|    9 | Accept |      2.9553 |     0.31485 |      2.9415 |      2.9592 |           10 |      0.36957 |            7 |
|   10 | Best   |      2.9289 |     0.28006 |      2.9289 |      2.9384 |           10 |      0.43084 |            1 |
|   11 | Accept |      2.9596 |     0.32254 |      2.9289 |      2.9395 |           10 |      0.42675 |            2 |
|   12 | Best   |      2.9043 |      0.2823 |      2.9043 |      2.9295 |           10 |      0.39082 |            1 |
|   13 | Accept |      5.9804 |     0.27544 |      2.9043 |      2.9124 |           10 |     0.023911 |            1 |
|   14 | Accept |      3.0912 |     0.27686 |      2.9043 |      2.9186 |           10 |      0.99207 |            1 |
|   15 | Best   |      2.8957 |     0.30037 |      2.8957 |         2.9 |           10 |      0.34653 |            1 |
|   16 | Accept |      2.8968 |     0.31255 |      2.8957 |      2.8978 |           11 |      0.35663 |            1 |
|   17 | Best   |      2.8939 |     0.66329 |      2.8939 |      2.8966 |           28 |      0.33763 |            1 |
|   18 | Best   |      2.8899 |     0.32061 |      2.8899 |      2.8947 |           11 |      0.34921 |            1 |
|   19 | Best   |      2.8865 |      0.5951 |      2.8865 |      2.8939 |           25 |      0.35178 |            1 |
|   20 | Accept |      4.2362 |      0.3337 |      2.8865 |      2.8921 |           11 |      0.10376 |           74 |
|====================================================================================================================|
| Iter | Eval   | Objective:  | Objective   | BestSoFar   | BestSoFar   | NumLearningC-|    LearnRate | MaxNumSplits |
|      | result | log(1+loss) | runtime     | (observed)  | (estim.)    | ycles        |              |              |
|====================================================================================================================|
|   21 | Accept |      5.4462 |     0.27971 |      2.8865 |      2.8906 |           10 |     0.051581 |            1 |
|   22 | Accept |       2.921 |      1.5744 |      2.8865 |      2.8907 |           66 |      0.11167 |            1 |
|   23 | Accept |      2.9173 |     0.69377 |      2.8865 |      2.8911 |           29 |      0.18208 |            1 |
|   24 | Accept |      3.0436 |     0.74312 |      2.8865 |      2.8911 |           31 |      0.99932 |            1 |
|   25 | Accept |      2.9339 |     0.43096 |      2.8865 |      2.8952 |           17 |       0.3015 |            1 |
|   26 | Accept |       2.888 |      1.3685 |      2.8865 |      2.8955 |           61 |      0.35991 |            1 |
|   27 | Accept |      2.9265 |      1.0567 |      2.8865 |      2.8964 |           46 |      0.16738 |            1 |
|   28 | Accept |      2.9456 |      0.9888 |      2.8865 |      2.8967 |           42 |      0.53842 |            1 |
|   29 | Accept |      2.9436 |      1.5579 |      2.8865 |      2.8887 |           69 |     0.053645 |            1 |
|   30 | Accept |      2.9237 |       3.352 |      2.8865 |      2.8885 |          146 |     0.067582 |            1 |

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

Best observed feasible point:
    NumLearningCycles    LearnRate    MaxNumSplits
    _________________    _________    ____________

           25             0.35178          1      

Observed objective function value = 2.8865
Estimated objective function value = 2.8885
Function evaluation time = 0.5951

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

           28             0.33763          1      

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

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 имя аргумента и 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'все, или положительное целочисленное значение.

  • Когда '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