Создайте шаблон дерева решений
возвращает шаблон ученика дерева решений по умолчанию, подходящий для обучения ансамбль (ускоренные и упакованные деревья решений) или модель мультикласса выходного кода с коррекцией ошибок (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.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'
— Максимальное количество разделений решенияМаксимальное количество разделений решения (или узлы ветви) на дерево, заданное как разделенная запятой пара, состоящая из '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'
все
, или положительное целочисленное значение.
Когда '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'
— Максимальные уровни категории в узле разделения
(значение по умолчанию) | неотрицательное скалярное значениеМаксимальные уровни категории в узле разделения, заданном как разделенная запятой пара, состоящая из '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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.