Создайте шаблон дерева решений
возвращает шаблон обучающегося дерева принятия решений по умолчанию, подходящий для настройки модели бустинги и баггинги деревьев решений кода ансамбля (выхода) или исправляющего ошибку мультикласса (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 = ClassificationEnsemble ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' NumObservations: 150 NumTrained: 100 Method: 'AdaBoostM2' LearnerNames: {'Tree'} ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.' FitInfo: [100x1 double] FitInfoDescription: {2x1 cell} Properties, Methods
Отображение ошибки неправильной классификации в выборке (повторная замена).
L = resubLoss(Mdl)
L = 0.0333
Один из способов создать ансамбль ускоренных деревьев регрессии, который имеет удовлетворительную прогнозирующую эффективность, - настроить уровень сложности дерева принятия решений с помощью перекрестной валидации. Во время поиска оптимального уровня сложности, настройте скорость обучения, чтобы минимизировать количество циклов обучения также.
Этот пример вручную находит оптимальные параметры при помощи опции перекрестной валидации ('KFold'
аргумент пары "имя-значение") и kfoldLoss
функция. Также можно использовать 'OptimizeHyperparameters'
аргумент пары "имя-значение" для автоматической оптимизации гиперпараметров. См. «Оптимизация регрессионного ансамбля».
Загрузите carsmall
набор данных. Выберите количество цилиндров, объем, перемещаемый цилиндрами, лошадиную силу и вес в качестве предикторов экономии топлива.
load carsmall
Tbl = table(Cylinders,Displacement,Horsepower,Weight,MPG);
Значения по умолчанию для древовидных контроллеров глубины для увеличения регрессионых деревьев:
10
для MaxNumSplits
.
5
для MinLeafSize
10
для MinParentSize
Для поиска оптимального уровня сложности дерева:
Перекрестная проверка набора ансамблей. Экспоненциально повышает уровень сложности дерева для последующих ансамблей от пня принятия решений (один сплит) до не более 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 = 16.77593
fprintf('\nOptimal Parameter Values:\nNum. Trees = %d',idxNumTrees);
Optimal Parameter Values: Num. Trees = 78
fprintf('\nMaxNumSplits = %d\nLearning Rate = %0.2f\n',... maxNumSplits(idxMNS),learnRate(idxLR))
MaxNumSplits = 1 Learning Rate = 0.25
Создайте прогнозирующий ансамбль на основе оптимальных гиперпараметров и всего набора обучающих данных.
tFinal = templateTree('MaxNumSplits',maxNumSplits(idxMNS),'Surrogate','on'); MdlFinal = fitrensemble(Tbl,'MPG','NumLearningCycles',idxNumTrees, ... 'Learners',tFinal,'LearnRate',learnRate(idxLR))
MdlFinal = RegressionEnsemble PredictorNames: {1x4 cell} ResponseName: 'MPG' CategoricalPredictors: [] ResponseTransform: 'none' NumObservations: 94 NumTrained: 78 Method: 'LSBoost' LearnerNames: {'Tree'} ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.' FitInfo: [78x1 double] FitInfoDescription: {2x1 cell} Regularization: [] Properties, Methods
MdlFinal
является RegressionEnsemble
. Чтобы предсказать экономию топлива автомобиля, учитывая его количество цилиндров, объем, перемещаемый цилиндрами, мощность и вес, можно передать данные предиктора и MdlFinal
на predict
.
Вместо поиска оптимальных значений вручную с помощью опции перекрестной валидации ('KFold'
) и kfoldLoss
функция, вы можете использовать 'OptimizeHyperparameters'
аргумент пары "имя-значение". Когда вы задаете 'OptimizeHyperparameters'
, программное обеспечение автоматически находит оптимальные параметры, используя байесовскую оптимизацию. Оптимальные значения, полученные при помощи 'OptimizeHyperparameters'
могут отличаться от полученных с помощью ручного поиска.
t = templateTree('Surrogate','on'); mdl = fitrensemble(Tbl,'MPG','Learners',t, ... 'OptimizeHyperparameters',{'NumLearningCycles','LearnRate','MaxNumSplits'})
|====================================================================================================================| | Iter | Eval | Objective: | Objective | BestSoFar | BestSoFar | NumLearningC-| LearnRate | MaxNumSplits | | | result | log(1+loss) | runtime | (observed) | (estim.) | ycles | | | |====================================================================================================================| | 1 | Best | 3.3955 | 1.332 | 3.3955 | 3.3955 | 26 | 0.072054 | 3 | | 2 | Accept | 6.0976 | 6.9885 | 3.3955 | 3.5549 | 170 | 0.0010295 | 70 | | 3 | Best | 3.2914 | 10.751 | 3.2914 | 3.2917 | 273 | 0.61026 | 6 | | 4 | Accept | 6.1839 | 3.4531 | 3.2914 | 3.2915 | 80 | 0.0016871 | 1 | | 5 | Best | 3.0379 | 1.7951 | 3.0379 | 3.0384 | 18 | 0.21288 | 31 | | 6 | Accept | 3.052 | 1.1116 | 3.0379 | 3.0401 | 28 | 0.18021 | 13 | | 7 | Best | 2.9642 | 2.2063 | 2.9642 | 2.9701 | 32 | 0.24179 | 5 | | 8 | Best | 2.9446 | 1.2017 | 2.9446 | 2.9413 | 21 | 0.25944 | 1 | | 9 | Best | 2.9387 | 0.73108 | 2.9387 | 2.94 | 18 | 0.26309 | 1 | | 10 | Accept | 3.0469 | 0.87257 | 2.9387 | 2.9414 | 10 | 0.25476 | 1 | | 11 | Accept | 3.0784 | 0.77319 | 2.9387 | 2.9408 | 11 | 0.9742 | 2 | | 12 | Best | 2.9367 | 1.6773 | 2.9367 | 2.942 | 25 | 0.47913 | 1 | | 13 | Best | 2.8952 | 1.2261 | 2.8952 | 2.9033 | 28 | 0.3572 | 1 | | 14 | Accept | 2.9054 | 0.94135 | 2.8952 | 2.9041 | 29 | 0.3393 | 1 | | 15 | Best | 2.8928 | 1.4597 | 2.8928 | 2.9007 | 28 | 0.355 | 1 | | 16 | Accept | 2.9008 | 1.3572 | 2.8928 | 2.9006 | 31 | 0.34654 | 1 | | 17 | Accept | 2.8939 | 1.5636 | 2.8928 | 2.8991 | 26 | 0.35626 | 1 | | 18 | Accept | 2.9109 | 0.95378 | 2.8928 | 2.8999 | 22 | 0.35898 | 1 | | 19 | Accept | 2.9078 | 1.1717 | 2.8928 | 2.901 | 31 | 0.3438 | 1 | | 20 | Accept | 2.9139 | 1.7969 | 2.8928 | 2.9018 | 33 | 0.32636 | 1 | |====================================================================================================================| | Iter | Eval | Objective: | Objective | BestSoFar | BestSoFar | NumLearningC-| LearnRate | MaxNumSplits | | | result | log(1+loss) | runtime | (observed) | (estim.) | ycles | | | |====================================================================================================================| | 21 | Accept | 2.901 | 0.97123 | 2.8928 | 2.9016 | 24 | 0.36235 | 1 | | 22 | Accept | 6.4217 | 0.45103 | 2.8928 | 2.902 | 10 | 0.0010438 | 2 | | 23 | Accept | 6.232 | 0.81571 | 2.8928 | 2.9007 | 10 | 0.010918 | 1 | | 24 | Accept | 2.9491 | 0.70086 | 2.8928 | 2.9004 | 10 | 0.45635 | 2 | | 25 | Accept | 2.8951 | 15.429 | 2.8928 | 2.9005 | 406 | 0.093798 | 1 | | 26 | Accept | 2.9079 | 14.399 | 2.8928 | 2.9007 | 478 | 0.1292 | 1 | | 27 | Best | 2.8923 | 9.3649 | 2.8923 | 2.9008 | 221 | 0.11307 | 1 | | 28 | Accept | 3.1867 | 13.217 | 2.8923 | 2.9021 | 309 | 0.10879 | 83 | | 29 | Accept | 3.1689 | 0.48561 | 2.8923 | 2.9021 | 11 | 0.5454 | 98 | | 30 | Accept | 2.9006 | 3.8922 | 2.8923 | 2.9016 | 102 | 0.20979 | 1 |
__________________________________________________________ Optimization completed. MaxObjectiveEvaluations of 30 reached. Total function evaluations: 30 Total elapsed time: 152.6867 seconds Total objective function evaluation time: 103.0901 Best observed feasible point: NumLearningCycles LearnRate MaxNumSplits _________________ _________ ____________ 221 0.11307 1 Observed objective function value = 2.8923 Estimated objective function value = 2.8927 Function evaluation time = 9.3649 Best estimated feasible point (according to models): NumLearningCycles LearnRate MaxNumSplits _________________ _________ ____________ 29 0.3393 1 Estimated objective function value = 2.9016 Estimated function evaluation time = 1.4054
mdl = RegressionEnsemble PredictorNames: {1x4 cell} ResponseName: 'MPG' CategoricalPredictors: [] ResponseTransform: 'none' NumObservations: 94 HyperparameterOptimizationResults: [1x1 BayesianOptimization] NumTrained: 29 Method: 'LSBoost' LearnerNames: {'Tree'} ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.' FitInfo: [29x1 double] FitInfoDescription: {2x1 cell} Regularization: [] Properties, Methods
Этот пример использует:
Загрузите carsmall
набор данных. Рассмотрим модель, которая предсказывает среднюю экономию топлива автомобиля, учитывая его ускорение, количество цилиндров, объем двигателя, мощность, производитель, год модели и вес. Рассмотрим Cylinders
, Mfg
, и Model_Year
как категориальные переменные.
load carsmall Cylinders = categorical(Cylinders); Mfg = categorical(cellstr(Mfg)); Model_Year = categorical(Model_Year); X = table(Acceleration,Cylinders,Displacement,Horsepower,Mfg,... Model_Year,Weight,MPG);
Отображение количества категорий, представленных в категориальных переменных.
numCylinders = numel(categories(Cylinders))
numCylinders = 3
numMfg = numel(categories(Mfg))
numMfg = 28
numModelYear = numel(categories(Model_Year))
numModelYear = 3
Потому что существует 3 категории только в Cylinders
и Model_Year
стандартный алгоритм разделения предикторов ТЕЛЕЖКА предпочитает разделение непрерывного предиктора над этими двумя переменными.
Обучите случайный лес из 500 регрессионых деревьев, используя весь набор данных. Чтобы вырастить объективные деревья, задайте использование теста кривизны для разделения предикторов. Поскольку в данных отсутствуют значения, задайте использование суррогатных разделений. Чтобы воспроизвести случайные выборки предиктора, установите seed генератора случайных чисел при помощи rng
и задайте 'Reproducible',true
.
rng('default'); % For reproducibility t = templateTree('PredictorSelection','curvature','Surrogate','on', ... 'Reproducible',true); % For reproducibility of random predictor selections Mdl = fitrensemble(X,'MPG','Method','bag','NumLearningCycles',500, ... 'Learners',t);
Оцените измерения важности предиктора путем перестановки наблюдений вне мешка. Выполняйте вычисления параллельно.
options = statset('UseParallel',true); imp = oobPermutedPredictorImportance(Mdl,'Options',options);
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 6).
Сравните оценки с помощью гистограммы.
figure; bar(imp); title('Out-of-Bag Permuted Predictor Importance Estimates'); ylabel('Estimates'); xlabel('Predictors'); h = gca; h.XTickLabel = Mdl.PredictorNames; h.XTickLabelRotation = 45; h.TickLabelInterpreter = 'none';
В этом случае Model_Year
является наиболее важным предиктором, за которым следуют Cylinders
. Сравните эти результаты с результатами в оценке важности предикторов.
Создайте шаблон ансамбля для использования в fitcecoc
.
Загрузите набор данных аритмии.
load arrhythmia
tabulate(categorical(Y));
Value Count Percent 1 245 54.20% 2 44 9.73% 3 15 3.32% 4 15 3.32% 5 13 2.88% 6 25 5.53% 7 3 0.66% 8 2 0.44% 9 9 1.99% 10 50 11.06% 14 4 0.88% 15 5 1.11% 16 22 4.87%
rng(1); % For reproducibility
Некоторые классы имеют небольшие относительные частоты в данных.
Создайте шаблон для AdaBoostM1 ансамбля классификационных деревьев и укажите использовать 100 учащихся и усадку 0,1. По умолчанию бустинг увеличивает пни (т.е. один узел, имеющий набор листьев). Поскольку существуют классы с малыми частотами, деревья должны быть достаточно листовыми, чтобы быть чувствительными к классам меньшинств. Задайте минимальное количество наблюдений узла листа равное 3.
tTree = templateTree('MinLeafSize',20); t = templateEnsemble('AdaBoostM1',100,tTree,'LearnRate',0.1);
Все свойства объектов шаблона пусты, кроме Method
и Type
, и соответствующие свойства аргумента пары "имя-значение" значений в вызовах функции. Когда ты проходишь t
для функции обучения программа заполняет пустые свойства соответствующими значениями по умолчанию.
Задайте t
в качестве двоичного ученика для многоклассовой модели ECOC. Обучите, используя проект кодирования по умолчанию один от одного.
Mdl = fitcecoc(X,Y,'Learners',t);
Mdl
является ClassificationECOC
многоклассовая модель.
Mdl.BinaryLearners
- массив ячеек 78 на 1 из CompactClassificationEnsemble
модели.
Mdl.BinaryLearners{j}.Trained
- массив ячеек 100 на 1 CompactClassificationTree
модели, для j
= 1,...,78.
Можно проверить, что один из двоичных учащихся содержит слабого ученика, который не является пнем при помощи view
.
view(Mdl.BinaryLearners{1}.Trained{1},'Mode','graph')
Отображение ошибки неправильной классификации в выборке (повторная замена).
L = resubLoss(Mdl,'LossFun','classiferror')
L = 0.0819
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. 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)
.
Если вы задаете MinLeafSize
, затем значение по умолчанию для 'MinParentSize'
является 10
.
Если вы не задаете 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' | Стандартная ТЕЛЕЖКА - выбирает предиктор разделения, который максимизирует коэффициент усиления разделения по всем возможным разделениям всех предикторов [1]. |
'curvature' | Тест кривизны - выбирает разделенный предиктор, который минимизирует p значение хи-квадратных тестов независимости между каждым предиктором и [3][4] отклика. Скорость обучения аналогична стандартной ТЕЛЕЖКА. |
'interaction-curvature' | Тест взаимодействия - выбирает разделенный предиктор, который минимизирует p-значение хи-квадратных тестов независимости между каждым предиктором и ответом, и который минимизирует p-значение хи-квадратного теста независимости между каждой парой предикторов и откликом [3]. Скорость обучения может быть медленнее, чем стандартная ТЕЛЕЖКА. |
Для 'curvature'
и 'interaction-curvature'
, если все тесты дают p значений, больше 0,05, то MATLAB® останавливает разделение узлов.
Совет
Тесты кривизны и взаимодействия не рекомендованы для увеличения деревьев решений. Чтобы обучить ансамбль бустерных деревьев, который имеет большую точность, используйте стандартную ТЕЛЕЖКУ.
Стандартная ТЕЛЕЖКА имеет тенденцию выбирать разделенные предикторы, содержащие много различных значений, например, непрерывных переменных, по сравнению с теми, которые содержат несколько различных значений, например, категориальные переменные [4]. Если набор данных предиктора неоднороден, или если существуют предикторы, которые имеют относительно меньше различных значений, чем другие переменные, то рассмотрите установку кривизны или теста взаимодействия.
Если существуют предикторы, которые имеют относительно меньше различных значений, чем другие предикторы, например, если набор данных предиктора неоднороден.
Если анализ предикторной важности является вашей целью. Для получения дополнительной информации об оценке предикторной важности см. oobPermutedPredictorImportance
для задач классификации, oobPermutedPredictorImportance
для регрессионных задач и Введение в выбор признаков.
Деревья, выращенные с использованием стандартной ТЕЛЕЖКА, не чувствительны к взаимодействиям переменных предиктора. Кроме того, такие деревья с меньшей вероятностью идентифицируют важные переменные в присутствии многих нерелевантных предикторов, чем применение теста взаимодействия. Поэтому, чтобы принять во внимание взаимодействия предикторов и идентифицировать переменные важности в присутствии многих нерелевантных переменных, задайте тест взаимодействия [3].
Скорость предсказания не зависит от значения 'PredictorSelection'
.
Для получения дополнительной информации о том, как templateTree
выбирает разделение предикторов, см. «Правила разделения узлов» (классификация), «Правила разделения узлов» (регрессия) и «Выбор метода выбора разделения предикторов».
Пример: 'PredictorSelection','curvature'
'Prune'
- Флаг для оценки оптимальной последовательности обрезанных поддеревьев'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
Типы данных: logical
'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'
дерево решений находит все суррогатные разделения в каждом узле ветви. The 'all'
настройка может занять значительное время и память.
Когда установлено положительное целое значение, дерево решений находит самое большее заданное количество суррогатных разделений в каждом узле ветви.
Используйте суррогатные разделения, чтобы улучшить точность предсказаний для данных с отсутствующими значениями. Эта настройка также позволяет вам вычислить меры прогнозирующей связи между предикторами.
Пример: 'Surrogate','on'
Типы данных: single
| double
| char
| string
'Type'
- Тип дерева решений'classification'
| 'regression'
Тип дерева решений, заданный как значение в таблице
Значение | Описание |
---|---|
'classification' | Вырастите учащихся дерева классификации. Функции аппроксимации fitcensemble и fitcecoc установите это значение при прохождении t к ним. |
'regression' | Выращивайте учащихся дерева регрессии. Функция аппроксимации fitrensemble устанавливает это значение при прохождении t к нему. |
Совет
Хотя t
выводит Type
из функции аппроксимации, в которую она подается, при установке происходит следующее Type
:
Отображение t
показывает все опции. Каждый не заданный опция является пустым массивом []
.
templateTree
проверяет спецификации на ошибки.
Пример: 'Type','classification'
Типы данных: 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] Breiman, L., J. Friedman, R. Olshen, and C. Stone. Деревья классификации и регрессии. Бока Ратон, FL: CRC Press, 1984.
[2] Coppersmith, D., S. J. Хонг и Дж. Р. М. Хоскинг. «Разбиение номинальных атрибутов на разделы в деревьях решений». Data Mining and Knowledge Discovery, Vol. 3, 1999, pp. 197-217.
[3] Loh, W.Y. «Regression Trees with Unbiased Variable Selection and Interaction Detection». Statistica Sinica, Vol. 12, 2002, pp. 361-386.
[4] Loh, W.Y. and Y.S. Shih. «Разделение методов выбора для деревьев классификации». Statistica Sinica, Vol. 7, 1997, pp. 815-840.
ClassificationTree
| fitcecoc
| fitcensemble
| fitctree
| fitrensemble
| RegressionTree
| templateEnsemble
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.