Создайте шаблон дерева решений
t = templateTree
t = templateTree(Name,Value)
возвращает шаблон ученика дерева решений по умолчанию, подходящий для обучения ансамбль (повышенные и сложенные в мешок деревья решений) или модель мультикласса выходного кода с коррекцией ошибок (ECOC). Задайте t
= templateTreet
как ученика, использующего:
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
Искать оптимальный уровень древовидной сложности:
Перекрестный подтвердите набор ансамблей. Экспоненциально увеличьте уровень древовидной сложности для последующих ансамблей от пня решения (одно разделение) к в большей части n - 1 разделение. n является объемом выборки. Кроме того, отличайтесь темп обучения для каждого ансамбля между 0,1 к 1.
Оцените перекрестную подтвержденную среднеквадратическую ошибку (MSE) для каждого ансамбля.
Для уровня древовидной сложности , , сравните совокупный, перекрестный подтвержденный MSE ансамблей путем графического вывода их против количества изучения циклов. Постройте отдельные кривые для каждого темпа обучения на той же фигуре.
Выберите кривую, которая достигает минимального 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-кратной перекрестной проверки. Используя древовидный шаблон:
Отличайтесь максимальное количество разделений с помощью значений в последовательности . m таков что не больше, чем 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'
— Максимальное количество разделений решенияМаксимальное количество разделений решения (или узлы ответвления) на дерево, заданное как пара, разделенная запятой, состоящая из 'MaxNumSplits'
и положительного целого числа. templateTree
разделяет MaxNumSplits
или меньше узлов ответвления. Для получения дополнительной информации на разделяющем поведении, см. Алгоритмы.
Для сложенных в мешок деревьев решений и двоичных учеников дерева решений в моделях ECOC, значением по умолчанию является n – 1, где n является количеством наблюдений в учебной выборке. Для повышенных деревьев решений значением по умолчанию является 10
.
Пример: 'MaxNumSplits',5
Типы данных: single | double
'MergeLeaves'
— Листовой флаг слияния'off'
| 'on'
Листовой флаг слияния, заданный как пара, разделенная запятой, состоящая из 'MergeLeaves'
и или 'on'
или 'off'
.
Когда 'on'
, дерево решений объединяет листы, которые происходят из того же родительского узла, и которые предоставляют сумму значений риска, больше или равных риску, сопоставленному с родительским узлом. Когда 'off'
, дерево решений не объединяет листы.
Для повышенных и сложенных в мешок деревьев решений значениями по умолчанию является 'off'
. Для двоичных учеников дерева решений в моделях ECOC значением по умолчанию является 'on'
.
Пример: 'MergeLeaves','on'
'MinLeafSize'
— Минимальные наблюдения на листМинимальные наблюдения на лист, заданный как пара, разделенная запятой, состоящая из 'MinLeafSize'
и положительного целочисленного значения. Каждый лист имеет, по крайней мере, наблюдения MinLeafSize
на древовидный лист. Если вы предоставляете и MinParentSize
и MinLeafSize
, дерево решений использует установку, которая дает большие листы: MinParentSize = max(MinParentSize,2*MinLeafSize)
.
Для повышенных и сложенных в мешок деревьев решений значениями по умолчанию является 1
для классификации и 5
для регрессии. Для двоичных учеников дерева решений в моделях ECOC значением по умолчанию является 1
.
Пример: 'MinLeafSize',2
'MinParentSize'
— Минимальные наблюдения на узел ответвленияМинимальные наблюдения на узел ответвления, заданный как пара, разделенная запятой, состоящая из 'MinParentSize'
и положительного целочисленного значения. Каждый узел ответвления в дереве имеет, по крайней мере, наблюдения MinParentSize
. Если вы предоставляете и MinParentSize
и MinLeafSize
, дерево решений использует установку, которая дает большие листы: MinParentSize = max(MinParentSize,2*MinLeafSize)
.
Для повышенных и сложенных в мешок деревьев решений значениями по умолчанию является 2
для классификации и 10
для регрессии. Для двоичных учеников дерева решений в моделях ECOC значением по умолчанию является 10
.
Пример: 'MinParentSize',4
'NumVariablesToSample'
— Количество предикторов, чтобы выбрать наугад для каждого разделения'all'
Количество предикторов, чтобы выбрать наугад для каждого разделения, заданного как пара, разделенная запятой, состоящая из 'NumVariablesToSample'
и положительного целочисленного значения. Также можно задать 'all'
, чтобы использовать все доступные предикторы.
Если данные тренировки включают много предикторов, и вы хотите анализировать важность предиктора, затем задать 'NumVariablesToSample'
как 'all'
. В противном случае программное обеспечение не может выбрать некоторые предикторы, недооценив их важность.
Чтобы воспроизвести случайные выборы, необходимо установить seed генератора случайных чисел при помощи rng
и задать 'Reproducible',true
.
Для повышенных деревьев решений и двоичных учеников дерева решений в моделях ECOC, значением по умолчанию является 'all'
. Значением по умолчанию для сложенных в мешок деревьев решений является квадратный корень из количества предикторов для классификации или одной трети количества предикторов для регрессии.
Пример: 'NumVariablesToSample',3
Типы данных: single
| double
| char
| string
'PredictorSelection'
— Алгоритм раньше выбирал лучший предиктор разделения'allsplits'
(значение по умолчанию) | 'curvature'
| 'interaction-curvature'
Алгоритм раньше выбирал лучший предиктор разделения в каждом узле, заданном как пара, разделенная запятой, состоящая из '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'
— Отметьте, чтобы оценить оптимальную последовательность сокращенных поддеревьев'off'
| 'on'
Отметьте, чтобы оценить оптимальную последовательность сокращенных поддеревьев, заданных как пара, разделенная запятой, состоящая из 'Prune'
и 'on'
или 'off'
.
Если Prune
является 'on'
, то программное обеспечение обучает учеников дерева классификации, не сокращая их, но оценивает оптимальную последовательность сокращенных поддеревьев для каждого ученика в ансамбле или двоичного ученика дерева решений в моделях ECOC. В противном случае программное обеспечение обучает учеников дерева классификации, не оценивая оптимальную последовательность сокращенных поддеревьев.
Для повышенных и сложенных в мешок деревьев решений значением по умолчанию является 'off'
.
Для двоичных учеников дерева решений в моделях ECOC значением по умолчанию является 'on'
.
Пример: 'Prune','on'
'PruneCriterion'
— Сокращение критерия'error'
| 'impurity'
| 'mse'
Сокращение критерия, заданного как пара, разделенная запятой, состоящая из 'PruneCriterion'
и критерия сокращения, допустимого для древовидного типа.
Для деревьев классификации можно задать 'error'
(значение по умолчанию) или 'impurity'
. Если вы задаете 'impurity'
, то templateTree
использует примесную меру, заданную аргументом пары "имя-значение" 'SplitCriterion'
.
Для деревьев регрессии можно задать только 'mse'
(значение по умолчанию).
Пример: 'PruneCriterion','impurity'
'Reproducible'
— Отметьте, чтобы осуществить воспроизводимостьfalse
(логический 0
) (значение по умолчанию) | true
(логический 1
)Отметьте, чтобы осуществить воспроизводимость по повторным выполнениям обучения модель, заданная как пара, разделенная запятой, состоящая из 'Reproducible'
и или false
или true
.
Если 'NumVariablesToSample'
не является 'all'
, то программное обеспечение выбирает предикторы наугад для каждого разделения. Чтобы воспроизвести случайные выборы, необходимо задать 'Reproducible',true
и установить seed генератора случайных чисел при помощи rng
. Обратите внимание на то, что установка 'Reproducible'
к true
может замедлить обучение.
Пример: 'Reproducible',true
Типы данных: логический
'SplitCriterion'
— Разделите критерий'gdi'
| 'twoing'
| 'deviance'
| 'mse'
Разделите критерий, заданный как пара, разделенная запятой, состоящая из 'SplitCriterion'
и критерия разделения, допустимого для древовидного типа.
Для деревьев классификации:
'gdi'
для индекса разнообразия Джини (значение по умолчанию)
'twoing'
для правила twoing
'deviance'
для максимального сокращения отклонения (также известный как перекрестную энтропию)
Для деревьев регрессии:
'mse'
для среднеквадратической ошибки (значение по умолчанию)
Пример: 'SplitCriterion','deviance'
'Surrogate'
— Суррогатные разделения решения'off'
(значение по умолчанию) | 'on'
| 'all'
| положительное целочисленное значениеСуррогатное решение разделяет флаг, заданный как пара, разделенная запятой, состоящая из 'Surrogate'
и один из 'off'
, 'on'
, 'all'
или положительного целочисленного значения.
Когда 'off'
, дерево решений не находит суррогатные разделения в узлах ответвления.
Когда 'on'
, дерево решений находит самое большее 10 суррогатных разделений в каждом узле ответвления.
Когда установлено в 'all'
, дерево решений находит все суррогатные разделения в каждом узле ответвления. Установка 'all'
может использовать продолжительное время и память.
Когда установлено в положительное целочисленное значение, дерево решений находит самое большее конкретное количество суррогатных разделений в каждом узле ответвления.
Используйте суррогатные разделения, чтобы улучшить точность прогнозов для данных с отсутствующими значениями. Эта установка также позволяет вам вычислить меры прогнозирующей ассоциации между предикторами.
Пример: 'Surrogate','on'
Типы данных: single
| double
| char
| string
'AlgorithmForCategorical'
— Алгоритм для лучшего категориального разделения предиктора'Exact'
| 'PullLeft'
| 'PCA'
| 'OVAbyClass'
Алгоритм, чтобы найти лучшее разделение на категориальном предикторе для данных с категориями C для данных и K ≥ 3 классами, заданными как пара, разделенная запятой, состоящая из 'AlgorithmForCategorical'
и одно из следующих.
Значение | Описание |
---|---|
'Exact' | Рассмотрите весь 2C–1 – 1 комбинация. |
'PullLeft' | Запустите со всех категорий C на правильном ответвлении. Рассмотрите перемещение каждой категории к левому ответвлению, когда это достигает минимальной примеси для классов K среди остающихся категорий. От этой последовательности выберите разделение, которое имеет самую низкую примесь. |
'PCA' | Вычислите счет к каждой категории с помощью скалярного произведения между первым основным компонентом взвешенной ковариационной матрицы (матрицы вероятности класса в центре) и вектором вероятностей класса для той категории. Сортировка очков в порядке возрастания, и рассматривает весь C — 1 разделение. |
'OVAbyClass' | Запустите со всех категорий C на правильном ответвлении. Для каждого класса закажите категории на основе их вероятности для того класса. Для первого класса рассмотрите перемещение каждой категории к левому ответвлению по порядку, записав примесный критерий при каждом перемещении. Повторитесь для остающихся классов. От этой последовательности выберите разделение, которое имеет минимальную примесь. |
Программное обеспечение выбирает оптимальное подмножество алгоритмов для каждого разделения с помощью известного количества классов и уровней категориального предиктора. Для двух классов это всегда выполняет точный поиск. Используйте аргумент пары "имя-значение" 'AlgorithmForCategorical'
, чтобы задать конкретный алгоритм.
Для получения дополнительной информации смотрите Разделяющие Категориальные Предикторы в Деревьях Классификации.
Пример: 'AlgorithmForCategorical','PCA'
'MaxNumCategories'
— Максимальные уровни категории в узле разделения10
(значение по умолчанию) | неотрицательное скалярное значениеМаксимальные уровни категории в узле разделения, заданном как пара, разделенная запятой, состоящая из 'MaxNumCategories'
и неотрицательного скалярного значения. Дерево классификации разделяет категориальный предиктор с помощью точного алгоритма поиска, если предиктор имеет на большинстве уровней MaxNumCategories
в узле разделения. В противном случае это находит лучшее категориальное разделение с помощью одного из неточных алгоритмов. Обратите внимание на то, что передача маленького значения может увеличить перегрузка памяти и время вычисления.
Пример: 'MaxNumCategories',8
'QuadraticErrorTolerance'
— Квадратичный ошибочный допуск1e-6
(значение по умолчанию) | значение положительной скалярной величиныКвадратичный ошибочный допуск на узел, заданный как пара, разделенная запятой, состоящая из 'QuadraticErrorTolerance'
и значения положительной скалярной величины. Дерево регрессии прекращает разделять узлы, когда квадратичная невязка взвешенного среднего на узел опускается ниже QuadraticErrorTolerance*ε
, где ε
является квадратичной невязкой взвешенного среднего всех ответов n, вычисленных прежде, чем вырастить дерево решений.
wi является весом наблюдения i, учитывая, что веса всех наблюдений суммируют к одному (), и
взвешенное среднее всех ответов.
Пример: 'QuadraticErrorTolerance',1e-4
t
Шаблон дерева решений для классификации или регрессииШаблон дерева решений для классификации или регрессии, подходящей для обучения ансамбль (повышенные и сложенные в мешок деревья решений) или модель мультикласса выходного кода с коррекцией ошибок (ECOC), возвращенная как объект шаблона. Передайте t
fitcensemble
, или fitrensemble
или fitcecoc
, чтобы задать, как создать дерево решений для ансамбля классификации, ансамбля регрессии или модели ECOC, соответственно.
Если вы отображаете t
в Командном окне, то все незаданные опции кажутся пустыми ([]
). Однако программное обеспечение заменяет пустые опции на их соответствующие значения по умолчанию во время обучения.
Чтобы разместить MaxNumSplits
, программное обеспечение разделяет все узлы в текущем layer, и затем считает количество узлов ответвления. Слой является набором узлов, которые являются равноотстоящими от корневого узла. Если количество узлов ответвления превышает MaxNumSplits
, то программное обеспечение выполняет эту процедуру.
Определите, сколько узлов ответвления в текущем слое должно быть не разделено так, чтобы было бы в большинстве узлов ответвления MaxNumSplits
.
Сортировка узлов ответвления их примесными усилениями.
Неразделенный желаемое количество наименее успешных ответвлений.
Возвратите дерево решений, выращенное до сих пор.
Эта процедура стремится производить максимально сбалансированные деревья.
Слой узлов ответвления разделений программного обеспечения слоем до по крайней мере одного из этих событий происходит.
Существует 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.
ClassificationTree
| RegressionTree
| fitcecoc
| fitcensemble
| fitctree
| fitrensemble
| templateEnsemble
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.