Подгонка ансамбля учащихся для классификации
возвращает обученный объект модели ансамбля классификации (Mdl
= fitcensemble(Tbl
,ResponseVarName
)Mdl
), который содержит результаты увеличения 100 деревьев классификации и данных предиктора и отклика в таблице Tbl
. ResponseVarName
- имя переменной отклика в Tbl
. По умолчанию, fitcensemble
использует LogitBoost для двоичной классификации и AdaBoostM2 для многоклассовой классификации.
применяется Mdl
= fitcensemble(Tbl
,formula
)formula
для подгонки модели к предиктору и данным отклика в таблице Tbl
. formula
является объяснительной моделью отклика и подмножеством переменных предиктора в Tbl
используется для подгонки Mdl
. Для примера, 'Y~X1+X2+X3'
соответствует переменной отклика Tbl.Y
как функция от переменных предиктора Tbl.X1
, Tbl.X2
, и Tbl.X3
.
использует дополнительные опции, заданные одним или несколькими Mdl
= fitcensemble(___,Name,Value
)Name,Value
аргументы в виде пар и любой из входных параметров в предыдущих синтаксисах. Например, можно задать количество циклов обучения, метод агрегации ансамбля или реализовать 10-кратную перекрестную валидацию.
Создайте прогнозирующий классификационный ансамбль, используя все доступные переменные предиктора в данных. Затем обучите другой ансамбль, используя меньше предикторов. Сравните прогнозирующие точности в выборке ансамблей.
Загрузите census1994
набор данных.
load census1994
Обучите ансамбль классификационных моделей с помощью всего набора данных и опций по умолчанию.
Mdl1 = fitcensemble(adultdata,'salary')
Mdl1 = ClassificationEnsemble PredictorNames: {1x14 cell} ResponseName: 'salary' CategoricalPredictors: [2 4 6 7 8 9 10 14] ClassNames: [<=50K >50K] ScoreTransform: 'none' NumObservations: 32561 NumTrained: 100 Method: 'LogitBoost' LearnerNames: {'Tree'} ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.' FitInfo: [100x1 double] FitInfoDescription: {2x1 cell} Properties, Methods
Mdl
является ClassificationEnsemble
модель. Некоторые заметные характеристики Mdl
являются:
Поскольку в данных представлены два класса, LogitBoost является алгоритмом агрегации ансамблей.
Поскольку метод агрегации ансамбля является алгоритмом ускорения, классификационные деревья, которые допускают максимум 10 разделений, составляют ансамбль.
Сто деревьев составляют ансамбль.
Используйте классификационный ансамбль, чтобы предсказать метки случайного набора из пяти наблюдений из данных. Сравните предсказанные метки с их истинными значениями.
rng(1) % For reproducibility [pX,pIdx] = datasample(adultdata,5); label = predict(Mdl1,pX); table(label,adultdata.salary(pIdx),'VariableNames',{'Predicted','Truth'})
ans=5×2 table
Predicted Truth
_________ _____
<=50K <=50K
<=50K <=50K
<=50K <=50K
<=50K <=50K
<=50K <=50K
Обучите новый ансамбль с помощью age
и education
только.
Mdl2 = fitcensemble(adultdata,'salary ~ age + education');
Сравните потери реституции между Mdl1
и Mdl2
.
rsLoss1 = resubLoss(Mdl1)
rsLoss1 = 0.1058
rsLoss2 = resubLoss(Mdl2)
rsLoss2 = 0.2037
Скорость неправильной классификации в выборке для ансамбля, который использует все предикторы, ниже.
Обучите ансамбль ускоренных классификационных деревьев при помощи fitcensemble
. Сократите время обучения путем определения 'NumBins'
аргумент пары "имя-значение" для числовых предикторов интервала. Этот аргумент действителен только при fitcensemble
использует ученика дерева. После обучения можно воспроизвести привязанные данные предиктора с помощью BinEdges
свойство обученной модели и discretize
функция.
Сгенерируйте выборочные данные набор.
rng('default') % For reproducibility N = 1e6; X = [mvnrnd([-1 -1],eye(2),N); mvnrnd([1 1],eye(2),N)]; y = [zeros(N,1); ones(N,1)];
Визуализируйте набор данных.
figure scatter(X(1:N,1),X(1:N,2),'Marker','.','MarkerEdgeAlpha',0.01) hold on scatter(X(N+1:2*N,1),X(N+1:2*N,2),'Marker','.','MarkerEdgeAlpha',0.01)
Обучите ансамбль ускоренных классификационных деревьев с помощью адаптивной логистической регрессии (LogitBoost
, по умолчанию для двоичной классификации). Определите время для функции в целях сравнения.
tic Mdl1 = fitcensemble(X,y); toc
Elapsed time is 478.988422 seconds.
Ускорите обучение при помощи 'NumBins'
аргумент пары "имя-значение". Если вы задаете 'NumBins'
значение как положительный целочисленный скаляр, затем программное обеспечение помещает каждый числовой предиктор в заданное количество уравнительных интервалов, а затем выращивает деревья индексов интервала вместо исходных данных. Программное обеспечение не встраивает категориальные предикторы.
tic
Mdl2 = fitcensemble(X,y,'NumBins',50);
toc
Elapsed time is 165.598434 seconds.
Процесс примерно в три раза быстрее, когда вы используете привязанные данные вместо исходных данных. Обратите внимание, что прошедшее время может варьироваться в зависимости от вашей операционной системы.
Сравните классификационные ошибки по реподституции.
rsLoss1 = resubLoss(Mdl1)
rsLoss1 = 0.0788
rsLoss2 = resubLoss(Mdl2)
rsLoss2 = 0.0788
В этом примере значения предиктора раскладывания сокращают время обучения без потери точности. В целом, когда у вас есть большой набор данных, такой как в этом примере, использование опции binning ускоряет обучение, но вызывает потенциальное снижение точности. Если необходимо дополнительно сократить время обучения, укажите меньшее количество интервалов.
Воспроизведите привязанные данные предиктора при помощи BinEdges
свойство обученной модели и discretize
функция.
X = Mdl2.X; % Predictor data Xbinned = zeros(size(X)); edges = Mdl2.BinEdges; % Find indices of binned predictors. idxNumeric = find(~cellfun(@isempty,edges)); if iscolumn(idxNumeric) idxNumeric = idxNumeric'; end for j = idxNumeric x = X(:,j); % Convert x to array if x is a table. if istable(x) x = table2array(x); end % Group x into bins by using the discretize function. xbinned = discretize(x,[-inf; edges{j}; inf]); Xbinned(:,j) = xbinned; end
Xbinned
содержит индексы интервала в диапазоне от 1 до количества интервалов для числовых предикторов. Xbinned
значения 0
для категориальных предикторов. Если X
содержит NaN
s, затем соответствующее Xbinned
значения NaN
с.
Оцените ошибку обобщения ансамбля ускоренных классификационных деревьев.
Загрузите ionosphere
набор данных.
load ionosphere
Перекрестная валидация ансамбля деревьев классификации с помощью AdaBoostM1 и 10-кратной перекрестной валидации. Укажите, что каждое дерево должно быть разделено максимум пять раз с помощью шаблона дерева принятия решений.
rng(5); % For reproducibility t = templateTree('MaxNumSplits',5); Mdl = fitcensemble(X,Y,'Method','AdaBoostM1','Learners',t,'CrossVal','on');
Mdl
является ClassificationPartitionedEnsemble
модель.
Постройте график кумулятивной, 10-кратной перекрестной проверки, скорости неправильной классификации. Отображение предполагаемой ошибки обобщения ансамбля.
kflc = kfoldLoss(Mdl,'Mode','cumulative'); figure; plot(kflc); ylabel('10-fold Misclassification rate'); xlabel('Learning cycle');
estGenError = kflc(end)
estGenError = 0.0769
kfoldLoss
возвращает ошибку обобщения по умолчанию. Однако построение графика совокупных потерь позволяет вам контролировать, как изменяется потеря по мере накопления слабых учащихся в ансамбле.
Ансамбль достигает скорости неправильной классификации около 0,06 после накопления около 50 слабых учащихся. Затем коэффициент неправильной классификации немного увеличивается, когда в ансамбль поступает больше слабых учащихся.
Если вас устраивает ошибка обобщения ансамбля, то, чтобы создать прогнозирующую модель, обучите ансамбль снова, используя все настройки, кроме перекрестной валидации. Однако рекомендуется настраивать гиперпараметры, такие как максимальное количество разделений решений на дерево и количество циклов обучения.
Оптимизируйте гиперпараметры автоматически с помощью fitcensemble
.
Загрузите ionosphere
набор данных.
load ionosphere
Вы можете найти гиперпараметры, которые минимизируют пятикратные потери перекрестной валидации с помощью автоматической оптимизации гипероптимизации параметров управления.
Mdl = fitcensemble(X,Y,'OptimizeHyperparameters','auto')
В этом примере для воспроизводимости установите случайный seed и используйте 'expected-improvement-plus'
функция сбора. Кроме того, для воспроизводимости алгоритма случайного леса задайте 'Reproducible'
аргумент пары "имя-значение" как true
для учащихся дерева.
rng('default') t = templateTree('Reproducible',true); Mdl = fitcensemble(X,Y,'OptimizeHyperparameters','auto','Learners',t, ... 'HyperparameterOptimizationOptions',struct('AcquisitionFunctionName','expected-improvement-plus'))
|===================================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | Method | NumLearningC-| LearnRate | MinLeafSize | | | result | | runtime | (observed) | (estim.) | | ycles | | | |===================================================================================================================================| | 1 | Best | 0.10256 | 1.6978 | 0.10256 | 0.10256 | RUSBoost | 11 | 0.010199 | 17 |
| 2 | Best | 0.062678 | 9.4354 | 0.062678 | 0.064264 | LogitBoost | 206 | 0.96537 | 33 |
| 3 | Accept | 0.099715 | 7.614 | 0.062678 | 0.062688 | AdaBoostM1 | 130 | 0.0072814 | 2 |
| 4 | Accept | 0.068376 | 1.6045 | 0.062678 | 0.062681 | Bag | 25 | - | 5 |
| 5 | Accept | 0.065527 | 20.359 | 0.062678 | 0.062699 | LogitBoost | 447 | 0.5405 | 13 |
| 6 | Accept | 0.074074 | 7.1054 | 0.062678 | 0.0627 | GentleBoost | 157 | 0.60495 | 108 |
| 7 | Accept | 0.082621 | 0.9688 | 0.062678 | 0.064102 | GentleBoost | 19 | 0.0010515 | 42 |
| 8 | Accept | 0.17379 | 0.49564 | 0.062678 | 0.06268 | LogitBoost | 10 | 0.001079 | 149 |
| 9 | Accept | 0.076923 | 21.003 | 0.062678 | 0.062676 | GentleBoost | 468 | 0.035181 | 2 |
| 10 | Accept | 0.068376 | 13.575 | 0.062678 | 0.062676 | AdaBoostM1 | 221 | 0.99976 | 7 |
| 11 | Accept | 0.10541 | 3.6394 | 0.062678 | 0.062676 | RUSBoost | 59 | 0.99629 | 31 |
| 12 | Accept | 0.068376 | 3.3423 | 0.062678 | 0.062674 | AdaBoostM1 | 53 | 0.20568 | 26 |
| 13 | Accept | 0.096866 | 1.6005 | 0.062678 | 0.062672 | RUSBoost | 22 | 0.0010042 | 2 |
| 14 | Accept | 0.071225 | 1.201 | 0.062678 | 0.062688 | LogitBoost | 23 | 0.99624 | 1 |
| 15 | Accept | 0.082621 | 0.87944 | 0.062678 | 0.062687 | AdaBoostM1 | 11 | 0.95241 | 2 |
| 16 | Accept | 0.079772 | 29.788 | 0.062678 | 0.062679 | AdaBoostM1 | 486 | 0.23903 | 35 |
| 17 | Accept | 0.35897 | 23.651 | 0.062678 | 0.06267 | Bag | 499 | - | 169 |
| 18 | Accept | 0.074074 | 0.653 | 0.062678 | 0.062674 | Bag | 10 | - | 1 |
| 19 | Accept | 0.088319 | 32.811 | 0.062678 | 0.062674 | RUSBoost | 498 | 0.0010437 | 3 |
| 20 | Accept | 0.068376 | 6.1279 | 0.062678 | 0.062673 | GentleBoost | 130 | 0.0010021 | 3 |
|===================================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | Method | NumLearningC-| LearnRate | MinLeafSize | | | result | | runtime | (observed) | (estim.) | | ycles | | | |===================================================================================================================================| | 21 | Accept | 0.17379 | 22.601 | 0.062678 | 0.06271 | LogitBoost | 496 | 0.0010096 | 146 |
| 22 | Accept | 0.071225 | 2.9727 | 0.062678 | 0.062713 | GentleBoost | 71 | 0.91141 | 9 |
| 23 | Accept | 0.64103 | 1.1288 | 0.062678 | 0.062706 | RUSBoost | 20 | 0.0012846 | 173 |
| 24 | Accept | 0.11111 | 1.537 | 0.062678 | 0.062697 | RUSBoost | 24 | 0.96694 | 6 |
| 25 | Accept | 0.17379 | 5.5632 | 0.062678 | 0.062686 | LogitBoost | 136 | 0.001 | 3 |
| 26 | Accept | 0.35897 | 8.0556 | 0.062678 | 0.062686 | AdaBoostM1 | 156 | 0.003243 | 174 |
| 27 | Accept | 0.065527 | 1.0791 | 0.062678 | 0.062686 | Bag | 21 | - | 2 |
| 28 | Accept | 0.17379 | 1.7562 | 0.062678 | 0.062689 | LogitBoost | 42 | 0.0010283 | 21 |
| 29 | Accept | 0.074074 | 4.3825 | 0.062678 | 0.062689 | GentleBoost | 108 | 0.0010055 | 173 |
| 30 | Accept | 0.065527 | 1.4893 | 0.062678 | 0.062689 | LogitBoost | 32 | 0.97832 | 4 |
__________________________________________________________ Optimization completed. MaxObjectiveEvaluations of 30 reached. Total function evaluations: 30 Total elapsed time: 278.5509 seconds. Total objective function evaluation time: 238.1176 Best observed feasible point: Method NumLearningCycles LearnRate MinLeafSize __________ _________________ _________ ___________ LogitBoost 206 0.96537 33 Observed objective function value = 0.062678 Estimated objective function value = 0.062689 Function evaluation time = 9.4354 Best estimated feasible point (according to models): Method NumLearningCycles LearnRate MinLeafSize __________ _________________ _________ ___________ LogitBoost 206 0.96537 33 Estimated objective function value = 0.062689 Estimated function evaluation time = 9.4324
Mdl = ClassificationEnsemble ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'b' 'g'} ScoreTransform: 'none' NumObservations: 351 HyperparameterOptimizationResults: [1×1 BayesianOptimization] NumTrained: 206 Method: 'LogitBoost' LearnerNames: {'Tree'} ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.' FitInfo: [206×1 double] FitInfoDescription: {2×1 cell} Properties, Methods
Оптимизация искала методы агрегации ансамбля для двоичной классификации по NumLearningCycles
, по LearnRate
для применимых методов и над учеником дерева MinLeafSize
. Выходные выходы - классификатор ансамбля с минимальными расчетными потерями перекрестной валидации.
Один из способов создать ансамбль усиленных деревьев классификации, который имеет удовлетворительную прогнозирующую эффективность, заключается в настройке уровня сложности дерева принятия решений с помощью перекрестной валидации. Во время поиска оптимального уровня сложности настройте скорость обучения, чтобы минимизировать количество циклов обучения.
Этот пример вручную находит оптимальные параметры при помощи опции перекрестной валидации ('KFold'
аргумент пары "имя-значение") и kfoldLoss
функция. Также можно использовать 'OptimizeHyperparameters'
аргумент пары "имя-значение" для автоматической оптимизации гиперпараметров. См. «Оптимизация классификационного ансамбля».
Загрузите ionosphere
набор данных.
load ionosphere
Для поиска оптимального уровня сложности дерева:
Перекрестная проверка набора ансамблей. Экспоненциально повышает уровень сложности дерева для последующих ансамблей от пня принятия решений (один сплит) до не более n - 1 расщеплений. n - размер выборки. Кроме того, варьируйте скорость обучения для каждого ансамбля между 0,1 и 1.
Оцените перекрестно подтвержденную скорость неправильной классификации каждого ансамбля.
Для уровня сложности дерева , , сравните совокупную, перекрестно проверенную скорость неправильной классификации ансамблей путем построения их с количеством циклов обучения. Постройте график отдельных кривых для каждой скорости обучения на одном рисунке.
Выберите кривую, которая достигает минимальной скорости неправильной классификации, и отметьте соответствующий цикл обучения и скорость обучения.
Перекрестная проверка глубокого дерева классификации и пня. Эти классификационные деревья служат ориентирами.
rng(1) % For reproducibility MdlDeep = fitctree(X,Y,'CrossVal','on','MergeLeaves','off', ... 'MinParentSize',1); MdlStump = fitctree(X,Y,'MaxNumSplits',1,'CrossVal','on');
Перекрестная валидация ансамбля из 150 ускоренных классификационных деревьев с помощью 5-кратной перекрестной валидации. Используя шаблон дерева, варьируйте максимальное количество разделений, используя значения в последовательности . m таково, что не больше n-1. Для каждого варианта настройте скорость обучения, используя каждое значение в наборе {0,1, 0,25, 0,5, 1};
n = size(X,1); m = floor(log(n - 1)/log(3)); learnRate = [0.1 0.25 0.5 1]; numLR = numel(learnRate); maxNumSplits = 3.^(0:m); numMNS = numel(maxNumSplits); numTrees = 150; Mdl = cell(numMNS,numLR); for k = 1:numLR for j = 1:numMNS t = templateTree('MaxNumSplits',maxNumSplits(j)); Mdl{j,k} = fitcensemble(X,Y,'NumLearningCycles',numTrees,... 'Learners',t,'KFold',5,'LearnRate',learnRate(k)); end end
Оцените совокупный, перекрестно подтвержденный уровень неправильной классификации для каждого ансамбля и деревьев классификации, служащих в качестве контрольных показателей.
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);
Постройте график поведения перекрестно проверенной скорости неправильной классификации, когда количество деревьев в ансамбле увеличивается. Постройте график кривых относительно скорости обучения на том же графике и постройте отдельные графики для изменения уровней сложности дерева. Выберите подмножество уровней сложности дерева для построения графика.
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 = [0 0.2]; xlabel('Number of trees') ylabel('Cross-validated misclass. rate') title(sprintf('MaxNumSplits = %0.3g', maxNumSplits(mnsPlot(k)))) hold off end hL = legend([cellstr(num2str(learnRate','Learning Rate = %0.2f')); ... 'Deep Tree';'Stump';'Min. misclass. rate']); hL.Position(1) = 0.6;
Каждая кривая содержит минимальную перекрестно подтвержденную скорость неправильной классификации, происходящей при оптимальном количестве деревьев в ансамбле.
Идентифицируйте максимальное количество разделений, количество деревьев и скорость обучения, которые дают самый низкий уровень неправильной классификации в целом.
[minErr,minErrIdxLin] = min(error(:));
[idxNumTrees,idxMNS,idxLR] = ind2sub(size(error),minErrIdxLin);
fprintf('\nMin. misclass. rate = %0.5f',minErr)
Min. misclass. rate = 0.05413
fprintf('\nOptimal Parameter Values:\nNum. Trees = %d',idxNumTrees);
Optimal Parameter Values: Num. Trees = 47
fprintf('\nMaxNumSplits = %d\nLearning Rate = %0.2f\n',... maxNumSplits(idxMNS),learnRate(idxLR))
MaxNumSplits = 3 Learning Rate = 0.25
Создайте прогнозирующий ансамбль на основе оптимальных гиперпараметров и всего набора обучающих данных.
tFinal = templateTree('MaxNumSplits',maxNumSplits(idxMNS)); MdlFinal = fitcensemble(X,Y,'NumLearningCycles',idxNumTrees,... 'Learners',tFinal,'LearnRate',learnRate(idxLR))
MdlFinal = ClassificationEnsemble ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'b' 'g'} ScoreTransform: 'none' NumObservations: 351 NumTrained: 47 Method: 'LogitBoost' LearnerNames: {'Tree'} ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.' FitInfo: [47×1 double] FitInfoDescription: {2×1 cell} Properties, Methods
MdlFinal
является ClassificationEnsemble
. Чтобы предсказать, является ли радарный возврат хорошим по данным предиктора, можно передать данные предиктора и MdlFinal
на predict
.
Вместо поиска оптимальных значений вручную с помощью опции перекрестной валидации ('KFold'
) и kfoldLoss
функция, вы можете использовать 'OptimizeHyperparameters'
аргумент пары "имя-значение". Когда вы задаете 'OptimizeHyperparameters'
, программное обеспечение автоматически находит оптимальные параметры, используя байесовскую оптимизацию. Оптимальные значения, полученные при помощи 'OptimizeHyperparameters'
могут отличаться от полученных с помощью ручного поиска.
mdl = fitcensemble(X,Y,'OptimizeHyperparameters',{'NumLearningCycles','LearnRate','MaxNumSplits'})
|====================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | NumLearningC-| LearnRate | MaxNumSplits | | | result | | runtime | (observed) | (estim.) | ycles | | | |====================================================================================================================| | 1 | Best | 0.17379 | 6.2592 | 0.17379 | 0.17379 | 137 | 0.001364 | 3 |
| 2 | Accept | 0.17379 | 0.79961 | 0.17379 | 0.17379 | 15 | 0.013089 | 144 |
| 3 | Best | 0.065527 | 1.4585 | 0.065527 | 0.065538 | 31 | 0.47201 | 2 |
| 4 | Accept | 0.074074 | 13.988 | 0.065527 | 0.065549 | 340 | 0.92167 | 7 |
| 5 | Accept | 0.088319 | 0.92718 | 0.065527 | 0.072102 | 22 | 0.2432 | 1 |
| 6 | Accept | 0.074074 | 0.44748 | 0.065527 | 0.071237 | 10 | 0.7177 | 48 |
| 7 | Accept | 0.08547 | 0.52207 | 0.065527 | 0.074847 | 10 | 0.57238 | 2 |
| 8 | Accept | 0.074074 | 0.59154 | 0.065527 | 0.065556 | 11 | 0.97207 | 3 |
| 9 | Best | 0.059829 | 1.6809 | 0.059829 | 0.059648 | 42 | 0.92135 | 343 |
| 10 | Best | 0.054131 | 2.2481 | 0.054131 | 0.054148 | 49 | 0.97807 | 37 |
| 11 | Accept | 0.065527 | 2.1686 | 0.054131 | 0.059479 | 48 | 0.9996 | 2 |
| 12 | Accept | 0.068376 | 2.5909 | 0.054131 | 0.061923 | 58 | 0.91401 | 323 |
| 13 | Accept | 0.17379 | 0.48621 | 0.054131 | 0.062113 | 10 | 0.0010045 | 4 |
| 14 | Accept | 0.17379 | 0.55949 | 0.054131 | 0.059231 | 10 | 0.059072 | 148 |
| 15 | Accept | 0.065527 | 1.9568 | 0.054131 | 0.062559 | 46 | 0.76657 | 19 |
| 16 | Accept | 0.065527 | 2.5692 | 0.054131 | 0.062807 | 57 | 0.64443 | 311 |
| 17 | Accept | 0.17379 | 0.55723 | 0.054131 | 0.062748 | 10 | 0.0035012 | 2 |
| 18 | Accept | 0.12821 | 1.9669 | 0.054131 | 0.062043 | 47 | 0.055757 | 197 |
| 19 | Accept | 0.05698 | 1.2814 | 0.054131 | 0.060837 | 27 | 0.98997 | 12 |
| 20 | Accept | 0.059829 | 1.1975 | 0.054131 | 0.060881 | 26 | 0.99112 | 13 |
|====================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | NumLearningC-| LearnRate | MaxNumSplits | | | result | | runtime | (observed) | (estim.) | ycles | | | |====================================================================================================================| | 21 | Accept | 0.065527 | 1.2255 | 0.054131 | 0.061441 | 25 | 0.99183 | 9 |
| 22 | Accept | 0.17379 | 1.3748 | 0.054131 | 0.061461 | 29 | 0.0032434 | 344 |
| 23 | Accept | 0.068376 | 3.055 | 0.054131 | 0.061768 | 67 | 0.18672 | 11 |
| 24 | Accept | 0.059829 | 5.0035 | 0.054131 | 0.061785 | 119 | 0.3125 | 1 |
| 25 | Accept | 0.059829 | 7.6141 | 0.054131 | 0.061793 | 176 | 0.25401 | 304 |
| 26 | Accept | 0.059829 | 5.1133 | 0.054131 | 0.05988 | 115 | 0.34331 | 343 |
| 27 | Accept | 0.059829 | 7.4027 | 0.054131 | 0.059895 | 178 | 0.26684 | 13 |
| 28 | Accept | 0.059829 | 5.2506 | 0.054131 | 0.059872 | 118 | 0.32365 | 3 |
| 29 | Accept | 0.062678 | 10.523 | 0.054131 | 0.059871 | 238 | 0.22465 | 1 |
| 30 | Accept | 0.14815 | 0.57384 | 0.054131 | 0.059705 | 10 | 0.15205 | 2 |
__________________________________________________________ Optimization completed. MaxObjectiveEvaluations of 30 reached. Total function evaluations: 30 Total elapsed time: 122.7983 seconds. Total objective function evaluation time: 91.3933 Best observed feasible point: NumLearningCycles LearnRate MaxNumSplits _________________ _________ ____________ 49 0.97807 37 Observed objective function value = 0.054131 Estimated objective function value = 0.062545 Function evaluation time = 2.2481 Best estimated feasible point (according to models): NumLearningCycles LearnRate MaxNumSplits _________________ _________ ____________ 119 0.3125 1 Estimated objective function value = 0.059705 Estimated function evaluation time = 5.1842
mdl = ClassificationEnsemble ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'b' 'g'} ScoreTransform: 'none' NumObservations: 351 HyperparameterOptimizationResults: [1×1 BayesianOptimization] NumTrained: 119 Method: 'LogitBoost' LearnerNames: {'Tree'} ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.' FitInfo: [119×1 double] FitInfoDescription: {2×1 cell} Properties, Methods
Tbl
- Выборочные данныеВыборочные данные, используемых для обучения модели, заданная как таблица. Каждая строка Tbl
соответствует одному наблюдению, и каждый столбец соответствует одной переменной предиктора. Tbl
может содержать один дополнительный столбец для переменной отклика. Многополюсные переменные и массивы ячеек, отличные от массивов ячеек векторов символов, не разрешены.
Если Tbl
содержит переменную отклика, и вы хотите использовать все оставшиеся переменные в качестве предикторов, затем задайте переменную отклика используя ResponseVarName
.
Если Tbl
содержит переменную отклика, и вы хотите использовать подмножество остальных переменных только в качестве предикторов, затем задайте формулу используя formula
.
Если Tbl
не содержит переменной отклика, затем задает данные отклика используя Y
. Длина переменной отклика и количество строк Tbl
должно быть равным.
Примечание
Чтобы сэкономить память и время выполнения, поставьте X
и Y
вместо Tbl
.
Типы данных: table
ResponseVarName
- Имя переменной откликаTbl
Имя переменной отклика, заданное как имя переменной отклика в Tbl
.
Вы должны задать ResponseVarName
как вектор символов или строковый скаляр. Для примера, если Tbl.Y
- переменная отклика, затем задайте ResponseVarName
как 'Y'
. В противном случае, fitcensemble
обрабатывает все столбцы Tbl
как переменные предиктора.
Переменная отклика должна быть категориальными символьными или строковыми массивами, логическим или числовым вектором или массивом ячеек из векторов символов. Если переменная отклика является символьным массивом, то каждый элемент должен соответствовать одной строке массива.
Для классификации можно задать порядок классов с помощью ClassNames
аргумент пары "имя-значение". В противном случае, fitcensemble
определяет порядок классов и сохраняет его в Mdl.ClassNames
.
Типы данных: char
| string
formula
- Объяснительная модель переменной отклика и подмножества переменных предиктораОбъяснительная модель переменной отклика и подмножества переменных предиктора, заданная в виде вектора символов или строкового скаляра в форме 'Y~x1+x2+x3'
. В этой форме Y
представляет переменную отклика, и x1
, x2
, и x3
представляют переменные предиктора.
Чтобы задать подмножество переменных в Tbl
в качестве предикторов для настройки модели используйте формулу. Если вы задаете формулу, то программное обеспечение не использует никаких переменных в Tbl
которые не появляются в formula
.
Имена переменных в формуле должны быть обоими именами переменных в Tbl
(Tbl.Properties.VariableNames
) и действительный MATLAB® идентификаторы. Можно проверить имена переменных в Tbl
при помощи isvarname
функция. Если имена переменных недопустимы, можно преобразовать их, используя matlab.lang.makeValidName
функция.
Типы данных: char
| string
X
- Данные предиктораДанные предиктора, заданные как числовая матрица.
Каждая строка соответствует одному наблюдению, и каждый столбец соответствует одной переменной предиктора.
Длина Y
и количество строк X
должно быть равным.
Чтобы задать имена предикторов в порядке их внешнего вида в X
, используйте PredictorNames
аргумент пары "имя-значение".
Типы данных: single
| double
Y
- Данные откликаДанные отклика, заданные как категориальные символьные или строковые массивы, логический или числовой вектор или массив ячеек из векторов символов. Каждая запись в Y
- ответ на наблюдение или метка для наблюдения в соответствующей строке X
или Tbl
. Длина Y
и количество строк X
или Tbl
должно быть равным. Если переменная отклика является символьным массивом, то каждый элемент должен соответствовать одной строке массива.
Порядок классов можно задать с помощью ClassNames
аргумент пары "имя-значение". В противном случае, fitcensemble
определяет порядок классов и сохраняет его в Mdl.ClassNames
.
Типы данных: categorical
| char
| string
| logical
| single
| double
| cell
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'CrossVal','on','LearnRate',0.05
задает для реализации 10-кратной перекрестной валидации и использования 0.05
как скорость обучения.Примечание
Вы не можете использовать какой-либо аргумент пары "имя-значение" перекрестной проверки наряду с 'OptimizeHyperparameters'
аргумент пары "имя-значение". Можно изменить перекрестную валидацию для 'OptimizeHyperparameters'
только при помощи 'HyperparameterOptimizationOptions'
аргумент пары "имя-значение".
'Method'
- Метод агрегации ансамбля'Bag'
| 'Subspace'
| 'AdaBoostM1'
| 'AdaBoostM2'
| 'GentleBoost'
| 'LogitBoost'
| 'LPBoost'
| 'RobustBoost'
| 'RUSBoost'
| 'TotalBoost'
Метод агрегации ансамбля, заданный как разделенная разделенными запятой парами, состоящая из 'Method'
и одно из следующих значений.
Значение | Метод | Поддержка задач классификации | Связанные аргументы в виде пар имя-значение |
---|---|---|---|
'Bag' | Агрегация Bootstrap (упаковка, например, случайного леса [2]) - Если 'Method' является 'Bag' , затем fitcensemble использует упаковку в мешки со случайными выборами предиктора при каждом разделении (случайный лес) по умолчанию. Чтобы использовать пакетирование без случайных выборок, используйте учеников дерева, чья 'NumVariablesToSample' значение 'all' или использовать учащихся с дискриминантным анализом. | Двоичный и многоклассовый | Н/Д |
'Subspace' | Случайный подпространство | Двоичный и многоклассовый | NPredToSample |
'AdaBoostM1' | Адаптивное усиление | Только двоичный код | LearnRate |
'AdaBoostM2' | Адаптивное усиление | Мультиклассы | LearnRate |
'GentleBoost' | Нежное адаптивное ускорение | Только двоичный код | LearnRate |
'LogitBoost' | Адаптивная логистическая регрессия | Только двоичный код | LearnRate |
'LPBoost' | Ускорение линейного программирования - требует Optimization Toolbox™ | Двоичный и многоклассовый | MarginPrecision |
'RobustBoost' | Устойчивое усиление - Требует Optimization Toolbox | Только двоичный код | RobustErrorGoal , RobustMarginSigma , RobustMaxMargin |
'RUSBoost' | Случайное усиление понижающей дискретизации | Двоичный и многоклассовый | LearnRate , RatioToSmallest |
'TotalBoost' | Полное корректирующее увеличение - Требует Optimization Toolbox | Двоичный и многоклассовый | MarginPrecision |
Можно задать опции дискретизации (FResample
, Replace
, Resample
) для обучающих данных при использовании пакетирования ('Bag'
) или бустинг ('TotalBoost'
, 'RUSBoost'
, 'AdaBoostM1'
, 'AdaBoostM2'
, 'GentleBoost'
, 'LogitBoost'
, 'RobustBoost'
, или 'LPBoost'
).
Значения по умолчанию:
'LogitBoost'
для двоичных задач и 'AdaBoostM2'
для многоклассовых задач, если 'Learners'
включает только учащихся дерева
'AdaBoostM1'
для двоичных задач и 'AdaBoostM2'
для многоклассовых задач, если 'Learners'
включает как древовидный, так и дискриминантный анализ учащихся
'Subspace'
если 'Learners'
не включает учащихся дерева
Для получения дополнительной информации об алгоритмах и примерах агрегации ансамбля, смотрите Алгоритмы, Советы, Алгоритмы ансамбля и Выбор применимого метода агрегации ансамбля.
Пример: 'Method','Bag'
'NumLearningCycles'
- Количество циклов обучения ансамбля100
(по умолчанию) | положительное целое число | 'AllPredictorCombinations'
Количество циклов обучения ансамбля, заданное как разделенная разделенными запятой парами, состоящая из 'NumLearningCycles'
и положительное целое или 'AllPredictorCombinations'
.
Если вы задаете положительное целое число, то на каждом цикле обучения программное обеспечение обучает одного слабого ученика для каждого объекта шаблона в Learners
. Следовательно, программное обеспечение обучает NumLearningCycles*numel(Learners)
учащиеся.
Если вы задаете 'AllPredictorCombinations'
, затем установите Method
на 'Subspace'
и укажите одного ученика только для Learners
. С помощью этих настроек программное обеспечение обучает учащихся всем возможным комбинациям взятых предикторов NPredToSample
за раз. Следовательно, программное обеспечение обучает nchoosek
(size(X,2),NPredToSample)
учащиеся.
Программное обеспечение составляет ансамбль, используя всех обученных учащихся и хранит их в Mdl.Trained
.
Для получения дополнительной информации см. советы».
Пример: 'NumLearningCycles',500
Типы данных: single
| double
| char
| string
'Learners'
- Слабые учащиеся для использования в ансамбле'discriminant'
| 'knn'
| 'tree'
| объект шаблона слабого ученика | вектор камеры объектов шаблона слабого учащегосяСлабые ученики для использования в ансамбле, заданные как разделенная разделенными запятой парами, состоящая из 'Learners'
и слабое имя учащегося, объект шаблона слабого учащегося или вектор камеры объектов шаблона слабого учащегося.
Слабый учитель | Имя слабого учащегося | Функция создания объектов шаблона | Method Настройка |
---|---|---|---|
Дискриминантный анализ | 'discriminant' | templateDiscriminant | Рекомендуемый для 'Subspace' |
k - ближайшие соседи | 'knn' | templateKNN | Для 'Subspace' только |
Дерево решений | 'tree' | templateTree | Все методы, кроме 'Subspace' |
Имя слабого ученика ('discriminant'
, 'knn'
, или 'tree'
) — fitcensemble
использует слабых учащихся, созданных функцией создания объектов шаблона с настройками по умолчанию. Для примера укажите 'Learners','discriminant'
совпадает с заданием 'Learners',templateDiscriminant()
. См. страницы функций создания объектов шаблона для настроек по умолчанию слабого обучающегося.
Объект шаблона слабого ученика - fitcensemble
использует слабых учащихся, созданных функцией создания объектов шаблона. Используйте аргументы пары "имя-значение" функции создания объектов шаблона, чтобы задать настройки слабых учащихся.
Вектор камеры m объектов шаблона слабого ученика - fitcensemble
растет m учащихся за цикл обучения (см NumLearningCycles
). Например, для ансамбля, составленного из двух типов классификационных деревьев, поставляйте {t1 t2}
, где t1
и t2
возвращаются ли объекты шаблона дерева классификации по templateTree
.
Значение по умолчанию 'Learners'
значение 'knn'
если 'Method'
является 'Subspace'
.
Значение по умолчанию 'Learners'
значение 'tree'
если 'Method'
является 'Bag'
или любой метод бустинга. Значения по умолчанию templateTree()
зависят от значения 'Method'
.
Для упакованных деревьев принятия решений максимальное количество разделений решений ('MaxNumSplits'
) n–1
, где n
количество наблюдений. Количество предикторов для случайного выбора для каждого разделения ('NumVariablesToSample'
) - квадратный корень из числа предикторов. Поэтому, fitcensemble
выращивает глубокие деревья решений. Можно выращивать более мелкие деревья, чтобы уменьшить сложность модели или время расчетов.
Для повышенных деревьев принятия решений, 'MaxNumSplits'
равен 10 и 'NumVariablesToSample'
является 'all'
. Поэтому, fitcensemble
произрастает мелкие деревья принятия решений. Можно выращивать более глубокие деревья для лучшей точности.
Посмотрите templateTree
для настроек по умолчанию слабого учащегося. Чтобы получить воспроизводимые результаты, необходимо задать 'Reproducible'
Аргумент пары "имя-значение" из templateTree
как true
если 'NumVariablesToSample'
не 'all'
.
Для получения дополнительной информации о количестве учащихся для обучения смотрите NumLearningCycles
и советы.
Пример: 'Learners',templateTree('MaxNumSplits',5)
'NPrint'
- Частота распечатки'off'
(по умолчанию) | положительное целое числоЧастота распечатки, заданная как разделенная разделенными запятой парами, состоящая из 'NPrint'
и положительное целое или 'off'
.
Чтобы отследить количество слабых учащихся или складок, которые fitcensemble
обучен до сих пор, задайте положительное целое число. То есть, если вы задаете положительное целое m:
Не задавая также какую-либо опцию перекрестной валидации (для примера, CrossVal
), затем fitcensemble
отображает сообщение в командной строке каждый раз, когда оно завершает обучение m слабых учащихся.
И опция перекрестной валидации, затем fitcensemble
отображает сообщение в командной строке каждый раз, когда оно заканчивает обучение m складывается.
Если вы задаете 'off'
, затем fitcensemble
не отображает сообщение, когда оно завершает обучение слабых учащихся.
Совет
Для самой быстрой подготовки некоторых повышенных деревьев решений установите NPrint
к значению по умолчанию 'off'
. Этот советы сохраняются при классификации Method
является 'AdaBoostM1'
, 'AdaBoostM2'
, 'GentleBoost'
, или 'LogitBoost'
, или когда регрессия Method
является 'LSBoost'
.
Пример: 'NPrint',5
Типы данных: single
| double
| char
| string
'NumBins'
- Количество интервалов для числовых предикторов[]
(пусто) (по умолчанию) | положительным целочисленным скаляромКоличество интервалов для числовых предикторов, заданное как разделенная разделенными запятой парами, состоящая из 'NumBins'
и положительный целочисленный скаляр. Этот аргумент действителен только в тех случаях, когда fitcensemble
использует ученика дерева, то есть 'Learners'
является либо 'tree'
или объект шаблона, созданный при помощи templateTree
.
Если на 'NumBins'
значение пустое (по умолчанию), тогда fitcensemble
не содержит предикторов.
Если вы задаете 'NumBins'
значение как положительный целочисленный скаляр (numBins
), затем fitcensemble
помещает каждый числовой предиктор в самое большее numBins
equiprobable bins, а затем выращивает деревья на индексах интервал вместо исходных данных.
Количество интервалов может быть меньше numBins
если предиктор имеет меньше numBins
уникальные значения.
fitcensemble
не содержит категориальные предикторы.
Когда вы используете большой набор обучающих данных, эта опция binning ускоряет обучение, но может привести к потенциальному снижению точности. Можно попробовать 'NumBins',50
сначала, а затем измените значение в зависимости от точности и скорости обучения.
Обученная модель сохраняет границы интервала в BinEdges
свойство.
Пример: 'NumBins',50
Типы данных: single
| double
'CategoricalPredictors'
- Категориальный список предикторов'all'
Категориальный список предикторов, заданный как одно из значений в этой таблице.
Значение | Описание |
---|---|
Вектор положительных целых чисел |
Каждая запись в векторе является индексом значением, соответствующим столбцу данных предиктора, который содержит категориальную переменную. Значения индекса находятся между 1 и Если |
Логический вектор |
A |
Матрица символов | Каждая строка матрицы является именем переменной. Имена должны совпадать с записями в PredictorNames . Дополните имена дополнительными пробелами, чтобы каждая строка матрицы символов имела одинаковую длину. |
Строковые массивы или массив ячеек векторов символов | Каждый элемент массива является именем переменной. Имена должны совпадать с записями в PredictorNames . |
'all' | Все предикторы категоричны. |
Спецификация 'CategoricalPredictors'
подходит, если:
'Learners'
задает учащихся дерева.
'Learners'
задает k - ближайших учащихся, где все предикторы категоричны.
Каждый учащийся идентифицирует и обрабатывает категориальные предикторы так же, как и функция подгонки, соответствующая учащемуся. См. 'CategoricalPredictors'
из fitcknn
для k - ближайших учащихся и 'CategoricalPredictors'
из fitctree
для учащихся дерева.
Пример: 'CategoricalPredictors','all'
Типы данных: single
| double
| logical
| char
| string
| cell
'PredictorNames'
- Имена переменных предиктораИмена переменных предиктора, заданные как строковые массивы уникальных имен или массив ячеек из уникальных векторов символов. Функциональность PredictorNames
зависит от способа предоставления обучающих данных.
Если вы поставляете X
и Y
, тогда можно использовать PredictorNames
для назначения имен переменным предиктора в X
.
Порядок имен в PredictorNames
должен соответствовать порядку столбцов X
. То есть PredictorNames{1}
- имя X(:,1)
, PredictorNames{2}
- имя X(:,2)
и так далее. Кроме того, size(X,2)
и numel(PredictorNames)
должно быть равным.
По умолчанию PredictorNames
является {'x1','x2',...}
.
Если вы поставляете Tbl
, тогда можно использовать PredictorNames
выбрать, какие переменные предиктора использовать в обучении. То есть, fitcensemble
использует только переменные предиктора в PredictorNames
и переменной отклика во время обучения.
PredictorNames
должен быть подмножеством Tbl.Properties.VariableNames
и не может включать имя переменной отклика.
По умолчанию PredictorNames
содержит имена всех переменных предиктора.
Хорошей практикой является определение предикторов для обучения с использованием любой из 'PredictorNames'
или formula
, но не то и другое.
Пример: 'PredictorNames',{'SepalLength','SepalWidth','PetalLength','PetalWidth'}
Типы данных: string
| cell
'ResponseName'
- Имя переменной отклика'Y'
(по умолчанию) | символьный вектор | строковый скалярИмя переменной отклика, заданное как вектор символов или строковый скаляр.
Если вы поставляете Y
, тогда можно использовать 'ResponseName'
чтобы задать имя для переменной отклика.
Если вы поставляете ResponseVarName
или formula
, тогда вы не можете использовать 'ResponseName'
.
Пример: 'ResponseName','response'
Типы данных: char
| string
'Options'
- Опции для параллельных вычислений и установки случайных чиселОпции для параллельных вычислений и установки случайных чисел, заданные как структура. Создайте Options
структура с statset
.
Примечание
Вам нужно Parallel Computing Toolbox™, чтобы вычислить параллельно.
В этой таблице перечислены поля опций и их значения.
Имя поля | Значение | Дефолт |
---|---|---|
UseParallel | Установите это значение равным | false |
UseSubstreams | Установите это значение равным Чтобы вычислить воспроизводимо, установите | false |
Streams | Задайте это значение как RandStream объект или массив ячеек таких объектов. Используйте один объект, кроме тех случаев, когда UseParallel значение true и UseSubstreams значение false . В этом случае используйте массив ячеек, размер которого совпадает с размером параллельного пула. | Если вы не задаете Streams , затем fitcensemble использует поток по умолчанию или потоки. |
Для примера, использующего воспроизводимое параллельное обучение, смотрите Train Classification Ensemble in Parallel.
Для двухъядерных систем и выше, fitcensemble
параллелизирует обучение с помощью Intel® Многопоточные базовые блоки (TBB). Поэтому установка UseParallel
опция как true
может не обеспечить значительную скорость на одном компьютере. Для получения дополнительной информации о Intel TBB смотрите https://software.intel.com/en-us/intel-tbb.
Пример: 'Options',statset('UseParallel',true)
Типы данных: struct
'CrossVal'
- флаг перекрестной валидации'off'
(по умолчанию) | 'on'
Флаг перекрестной проверки, заданный как разделенная разделенными запятой парами, состоящая из 'Crossval'
и 'on'
или 'off'
.
Если вы задаете 'on'
затем программное обеспечение реализует 10-кратную перекрестную валидацию.
Чтобы переопределить этот параметр перекрестной проверки, используйте один из следующих аргументов пары "имя-значение": CVPartition
, Holdout
, KFold
, или Leaveout
. Чтобы создать перекрестно проверенную модель, можно использовать один аргумент пары "имя-значение" перекрестной валидации только за раз.
Другой способ - выполнить перекрестную проверку позже путем передачи Mdl
на crossval
или crossval
.
Пример: 'Crossval','on'
'CVPartition'
- Раздел перекрестной проверки[]
(по умолчанию) | cvpartition
Объект разделаРаздел перекрестной проверки, заданный как cvpartition
объект раздела, созданный cvpartition
. Объект раздела задает тип перекрестной валидации и индексацию для наборов обучения и валидации.
Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition
, Holdout
, KFold
, или Leaveout
.
Пример: Предположим, что вы создаете случайный разбиение для 5-кратной перекрестной валидации при 500 наблюдениях при помощи cvp = cvpartition(500,'KFold',5)
. Затем можно задать перекрестно проверенную модель при помощи 'CVPartition',cvp
.
'Holdout'
- Доля данных для валидации отключенияДоля данных, используемых для валидации удержания, заданная в виде скалярного значения в области значений (0,1). Если вы задаете 'Holdout',p
, затем программное обеспечение завершает следующие шаги:
Случайный выбор и резервирование p*100
% данных в качестве данных валидации и train модели с использованием остальных данных.
Сохраните компактную, обученную модель в Trained
свойство перекрестно проверенной модели.
Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition
, Holdout
, KFold
, или Leaveout
.
Пример: 'Holdout',0.1
Типы данных: double
| single
'KFold'
- Количество складок10
(по умолчанию) | положительное целое значение, больше 1Количество складок для использования в перекрестно проверенной модели, заданное как положительное целое значение, больше 1. Если вы задаете 'KFold',k
, затем программное обеспечение завершает следующие шаги:
Случайным образом разделите данные на k
наборы.
Для каждого набора зарезервируйте набор как данные валидации и обучите модель, используя другой k
- 1 комплект.
Сохраните k
компактные, обученные модели в k
-by-1 вектор камеры в Trained
свойство перекрестно проверенной модели.
Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition
, Holdout
, KFold
, или Leaveout
.
Пример: 'KFold',5
Типы данных: single
| double
'Leaveout'
- Оставьте один из флагов перекрестной проверки'off'
(по умолчанию) | 'on'
Выходной флаг перекрестной проверки, заданный как 'on'
или 'off'
. Если вы задаете 'Leaveout','on'
, затем для каждого из n наблюдений (где n - количество наблюдений, исключая недостающие наблюдения, заданное в NumObservations
свойство модели), программное обеспечение завершает следующие шаги:
Зарезервируйте одно наблюдение как данные валидации и обучите модель с помощью другого n - 1 наблюдений.
Сохраните n компактные обученные модели в векторе камеры n-на-1 в Trained
свойство перекрестно проверенной модели.
Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition
, Holdout
, KFold
, или Leaveout
.
Пример: 'Leaveout','on'
'ClassNames'
- Имена классов, используемых для обученияИмена классов, используемых для обучения, заданные как категориальные символьные или строковые массивы; логический или числовой вектор; или массив ячеек из векторов символов. ClassNames
должен иметь тот совпадающий тип данных, что и переменная отклика в Tbl
или Y
.
Если ClassNames
является символьный массив, тогда каждый элемент должен соответствовать одной строке массива.
Использование ClassNames
кому:
Задайте порядок классов во время обучения.
Задайте порядок любой размерности входного или выходного аргумента, которая соответствует порядку классов. Для примера используйте ClassNames
для определения порядка размерностей Cost
или порядок столбцов классификационных оценок, возвращаемых predict
.
Выберите подмножество классов для обучения. Например, предположим, что набор всех различных имен классов в Y
является {'a','b','c'}
. Чтобы обучить модель с помощью наблюдений из классов 'a'
и 'c'
только, задайте 'ClassNames',{'a','c'}
.
Значение по умолчанию для ClassNames
- набор всех различных имен классов в переменной отклика в Tbl
или Y
.
Пример: 'ClassNames',{'b','g'}
Типы данных: categorical
| char
| string
| logical
| single
| double
| cell
'Cost'
- Расходы на неправильную классификациюСтоимость неправильной классификации, заданная как разделенная разделенными запятой парами, состоящая из 'Cost'
и квадратную матрицу или структуру. Если вы задаете:
Квадратная матрица Cost
, затем Cost(i,j)
- стоимость классификации точки в класс j
если его класс true i
. То есть строки соответствуют истинному классу, а столбцы - предсказанному классу. Чтобы задать порядок классов для соответствующих строк и столбцов Cost
, также задайте ClassNames
аргумент пары "имя-значение".
Структура S
, тогда он должен иметь два поля:
S.ClassNames
, который содержит имена классов как переменный совпадающий тип данных as Y
S.ClassificationCosts
, которая содержит матрицу затрат со строками и столбцами, упорядоченными как в S.ClassNames
По умолчанию это таковые
, где (K
) - глаз (K
)K
- количество различных классов.
Примечание
fitcensemble
использует Cost
для корректировки вероятностей предыдущего класса, заданных в Prior
. Затем, fitcensemble
использует скорректированные предыдущие вероятности для обучения и сбрасывает матрицу затрат в значение по умолчанию.
Пример: 'Cost',[0 1 2 ; 1 0 2; 2 2 0]
Типы данных: double
| single
| struct
'Prior'
- Предыдущие вероятности'empirical'
(по умолчанию) | 'uniform'
| числовой вектор | массив структурПредыдущие вероятности для каждого класса, заданные как разделенная разделенными запятой парами, состоящая из 'Prior'
и значение в этой таблице.
Значение | Описание |
---|---|
'empirical' | Предшествующие вероятности классов являются относительными частотами классов в Y . |
'uniform' | Все предыдущие вероятности классов равны 1/ K, где K - количество классов. |
числовой вектор | Каждый элемент является классом предыдущей вероятности. Упорядочивайте элементы согласно Mdl.ClassNames или укажите порядок с помощью ClassNames аргумент пары "имя-значение". Программное обеспечение нормализует элементы так, что они суммируются с 1 . |
массив структур | Структурный
|
fitcensemble
нормализует предыдущие вероятности в Prior
в сумму до 1.
Пример: struct('ClassNames',{{'setosa','versicolor','virginica'}},'ClassProbs',1:3)
Типы данных: char
| string
| double
| single
| struct
'ScoreTransform'
- Преобразование счета'none'
(по умолчанию) | 'doublelogit'
| 'invlogit'
| 'ismax'
| 'logit'
| указатель на функцию |...Преобразование счета, заданное как вектор символов, строковый скаляр или указатель на функцию.
В этой таблице результирующие векторы символов и строковые скаляры.
Значение | Описание |
---|---|
'doublelogit' | 1/(1 + e–2x) |
'invlogit' | журнал (x/( 1 - x)) |
'ismax' | Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равным 0 |
'logit' | 1/(1 + e–x) |
'none' или 'identity' | x (без преобразования) |
'sign' | -1 для x < 0 0 для x = 0 1 для x > 0 |
'symmetric' | 2 x – 1 |
'symmetricismax' | Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равной -1 |
'symmetriclogit' | 2/(1 + e–x) – 1 |
Для функции MATLAB или функции, которую вы задаете, используйте указатель на функцию для преобразования счета. Указатель на функцию должен принять матрицу (исходные счета) и вернуть матрицу того же размера (преобразованные счета).
Пример: 'ScoreTransform','logit'
Типы данных: char
| string
| function_handle
'Weights'
- Веса наблюденийTbl
Веса наблюдений, заданные как разделенная разделенными запятой парами, состоящая из 'Weights'
и числовой вектор положительных значений или имени переменной в Tbl
. Программа взвешивает наблюдения в каждой строке X
или Tbl
с соответствующим значением в Weights
. Размер Weights
должно равняться количеству строк X
или Tbl
.
Если вы задаете входные данные как таблицу Tbl
, затем Weights
может быть именем переменной в Tbl
который содержит числовой вектор. В этом случае необходимо задать Weights
как вектор символов или строковый скаляр. Для примера, если вектор весов W
хранится как Tbl.W
, затем укажите его следующим 'W'
. В противном случае программное обеспечение обрабатывает все столбцы Tbl
, включая W
, как предикторы или реакция при обучении модели.
Программное обеспечение нормализует Weights
суммировать до значения предшествующей вероятности в соответствующем классе.
По умолчанию Weights
это таковые
, где (n
,1)n
количество наблюдений в X
или Tbl
.
Типы данных: double
| single
| char
| string
'FResample'
- Часть обучающего набора для повторной выборки1
(по умолчанию) | положительная скалярная величина в (0,1]Доля набора обучающих данных для повторной выборки для каждого слабого учащегося, заданная как разделенная разделенными запятой парами, состоящая из 'FResample'
и положительная скалярная величина в (0,1].
Как использовать 'FResample'
, задайте 'bag'
для Method
или установите Resample
на 'on'
.
Пример: 'FResample',0.75
Типы данных: single
| double
'Replace'
- Флаг, указывающий на выборку с заменой'on'
(по умолчанию) | 'off'
Флаг, указывающий выборку с заменой, задается как разделенная разделенными запятой парами, состоящая из 'Replace'
и 'off'
или 'on'
.
Для 'on'
программное обеспечение производит выборку обучающих наблюдений с заменой.
Для 'off'
программное обеспечение производит выборку обучающих наблюдений без замены. Если вы задаете Resample
на 'on'
затем программное обеспечение дискретизирует обучающие наблюдения, принимая равномерные веса. Если вы также задаете метод бустинга, то программное обеспечение повышает путем перевешивания наблюдений.
Если вы не задаете Method
на 'bag'
или установите Resample
на 'on'
, Replace
не имеет эффекта.
Пример: 'Replace','off'
'Resample'
- Флаг, указывающий на повторную выборку'off'
| 'on'
Флаг, указывающий на повторную выборку, заданный как разделенная разделенными запятой парами, состоящая из 'Resample'
и 'off'
или 'on'
.
Если Method
является методом бустинга, тогда:
'Resample','on'
задает для выборки обучающие наблюдения, использующие обновленные веса в качестве вероятностей полиномиальной выборки.
'Resample','off'
(по умолчанию) задает изменение веса наблюдений на каждой итерации обучения.
Если Method
является 'bag'
, затем 'Resample'
должен быть 'on'
. Программа пересчитывает часть обучающих наблюдений (см FResample
) с заменой или без (см. Replace
).
Если вы задаете, чтобы выполнить повторную выборку с помощью Resample
, тогда это хорошая практика, чтобы переопределить на целом наборе данных. То есть используйте настройку по умолчанию 1 для FResample
.
'LearnRate'
- Скорость обучения для усадки1
(по умолчанию) | числовой скаляр в (0,1]Скорость обучения для усадки, заданный как разделенная разделенными запятой парами, состоящая из 'LearnRate'
и числовой скаляр в интервале (0,1].
Чтобы обучить ансамбль с помощью усадки, установите LearnRate
к значению меньше 1
, для примера, 0.1
является популярным выбором. Обучение ансамбля с помощью усадки требует большего количества итераций обучения, но часто достигает лучшей точности.
Пример: 'LearnRate',0.1
Типы данных: single
| double
'LearnRate'
- Скорость обучения для усадки1
(по умолчанию) | числовой скаляр в (0,1]Скорость обучения для усадки, заданный как разделенная разделенными запятой парами, состоящая из 'LearnRate'
и числовой скаляр в интервале (0,1].
Чтобы обучить ансамбль с помощью усадки, установите LearnRate
к значению меньше 1
, для примера, 0.1
является популярным выбором. Обучение ансамбля с помощью усадки требует большего количества итераций обучения, но часто достигает лучшей точности.
Пример: 'LearnRate',0.1
Типы данных: single
| double
'RatioToSmallest'
- Пропорция дискретизации по отношению к наиболее представленному классуПропорция дискретизации относительно наименее представленного класса, заданная как разделенная разделенными запятой парами, состоящая из 'RatioToSmallest'
и числовой скаляр или числовой вектор положительных значений с длиной, равной количеству различных классов в обучающих данных.
Предположим, что есть K
классы в обучающих данных и самый низкий представленный класс имеют m
наблюдения в обучающих данных.
Если вы задаете положительный числовой скаляр s
, затем fitcensemble
выборки
наблюдения от каждого класса, то есть он использует одну и ту же пропорцию дискретизации для каждого класса. Для получения дополнительной информации см. «Алгоритмы».s
* m
Если вы задаете числовой вектор [
, затем s1
, s2
..., sK
]fitcensemble
выборки
наблюдения из si
* m
i классов
, i
= 1..., K. Элементы RatioToSmallest
соответствуют порядку имен классов, заданных с помощью ClassNames
(см. «Советы»).
Значение по умолчанию это таковые
, который задает выборку (K
,1)m
наблюдения от каждого класса.
Пример: 'RatioToSmallest',[2,1]
Типы данных: single
| double
'MarginPrecision'
- Точность запаса для управления скоростью сходимости0.1
(по умолчанию) | числовой скаляр в [0,1]Точность запаса для управления скоростью сходимости, заданная как разделенная разделенными запятой парами, состоящая из 'MarginPrecision'
и числовой скаляр в интервале [0,1]. MarginPrecision
влияет на количество усиливающих итераций, необходимых для сходимости.
Совет
Чтобы обучить ансамбль, используя много учащихся, задайте небольшое значение для MarginPrecision
. Для обучения с использованием нескольких учащихся задайте большое значение.
Пример: 'MarginPrecision',0.5
Типы данных: single
| double
'RobustErrorGoal'
- Целевая ошибка классификации0.1
(по умолчанию) | неотрицательный числовой скалярЦелевая ошибка классификации, заданная как разделенная разделенными запятой парами, состоящая из 'RobustErrorGoal'
и неотрицательный числовой скаляр. Верхняя граница от возможных значений зависит от значений RobustMarginSigma
и RobustMaxMargin
. Однако верхняя граница не может превысить 1
.
Совет
Для конкретного набора обучающих данных обычно существует оптимальная область значений для RobustErrorGoal
. Если вы установите его слишком низким или слишком высоким, то программное обеспечение может создать модель с плохой точностью классификации. Попробуйте выполнить перекрестную проверку, чтобы найти соответствующее значение.
Пример: 'RobustErrorGoal',0.05
Типы данных: single
| double
'RobustMarginSigma'
- Классификационный разброс маржинального распределения0.1
(по умолчанию) | положительный числовой скалярРаспределение классификационной маржи по обучающим данным, заданное как разделенная разделенными запятой парами, состоящая из 'RobustMarginSigma'
и положительный числовой скаляр. Перед указанием RobustMarginSigma
, проконсультируйтесь с литературой по RobustBoost
для примера [19].
Пример: 'RobustMarginSigma',0.5
Типы данных: single
| double
'RobustMaxMargin'
- Максимальный классификационный запас0
(по умолчанию) | неотрицательный числовой скалярМаксимальный классификационный запас в обучающих данных, заданный как разделенная разделенными запятой парами, состоящая из 'RobustMaxMargin'
и неотрицательный числовой скаляр. Программное обеспечение минимизирует количество наблюдений в обучающих данных, имеющих классификационные поля ниже RobustMaxMargin
.
Пример: 'RobustMaxMargin',1
Типы данных: single
| double
'NPredToSample'
- Количество предикторов для выборки1
(по умолчанию) | положительное целое числоКоличество предикторов для выборки для каждого случайного обучающего подпространства, заданное как разделенная разделенными запятой парами, состоящая из 'NPredToSample'
и положительное целое число в интервале 1,..., p, где p - количество переменных предиктора (size(X,2)
или size(Tbl,2)
).
Типы данных: single
| double
'OptimizeHyperparameters'
- Параметры для оптимизации'none'
(по умолчанию) | 'auto'
| 'all'
| строковые массивы или массив ячеек из допустимых имен параметров | вектор optimizableVariable
объектыОптимизируемые параметры, заданные как разделенная разделенными запятой парами, состоящая из 'OptimizeHyperparameters'
и одно из следующих:
'none'
- Не оптимизировать.
'auto'
- Использовать {'Method','NumLearningCycles','LearnRate'}
наряду с параметрами по умолчанию для заданного Learners
:
Learners
= 'tree'
(по умолчанию) - {'MinLeafSize'}
Learners
= 'discriminant'
— {'Delta','Gamma'}
Learners
= 'knn'
— {'Distance','NumNeighbors'}
Примечание
Для оптимизации гипероптимизации параметров управления, Learners
должен быть единственным аргументом, а не строковыми массивами или массивом ячеек.
'all'
- Оптимизируйте все подходящие параметры.
Строковые массивы или массив ячеек из допустимых имен параметров
Вектор optimizableVariable
объекты, как правило, выходные данные hyperparameters
Оптимизация пытается минимизировать потери перекрестной валидации (ошибка) для fitcensemble
путем изменения параметров. Для получения информации о потерях при перекрестной проверке (хотя и в другом контексте), смотрите Классификационные потери. Чтобы контролировать тип перекрестной валидации и другие аспекты оптимизации, используйте HyperparameterOptimizationOptions
Пара "имя-значение".
Примечание
'OptimizeHyperparameters'
значения переопределяют все значения, которые вы устанавливаете, используя другие аргументы пары "имя-значение". Для примера установка 'OptimizeHyperparameters'
на 'auto'
вызывает 'auto'
значения для применения.
Подходящие параметры для fitcensemble
являются:
Method
- Зависит от количества классов.
Два класса - Подходящие методы 'Bag'
, 'GentleBoost'
, 'LogitBoost'
, 'AdaBoostM1'
, и 'RUSBoost'
.
Три или более классов - Подходящие методы 'Bag'
, 'AdaBoostM2'
, и 'RUSBoost'
.
NumLearningCycles
— fitcensemble
поиск среди положительных целых чисел, по умолчанию логарифмический с областью значений [10,500]
.
LearnRate
— fitcensemble
поиск среди положительных реалов, по умолчанию логарифмический с областью значений [1e-3,1]
.
Подходящие гиперпараметры для выбранных Learners
:
Ученики | Подходящие гиперпараметры Bold = Используется по умолчанию | Область значений по умолчанию |
---|---|---|
'discriminant' | Delta | Логарифмический масштаб в области значений [1e-6,1e3] |
DiscrimType | 'linear' , 'quadratic' , 'diagLinear' , 'diagQuadratic' , 'pseudoLinear' , и 'pseudoQuadratic' | |
Gamma | Действительные значения в [0,1] | |
'knn' | Distance | 'cityblock' , 'chebychev' , 'correlation' , 'cosine' , 'euclidean' , 'hamming' , 'jaccard' , 'mahalanobis' , 'minkowski' , 'seuclidean' , и 'spearman' |
DistanceWeight | 'equal' , 'inverse' , и 'squaredinverse' | |
Exponent | Положительные значения в [0.5,3] | |
NumNeighbors | Положительные целочисленные значения логарифмически масштабируются в области значений [1, max(2,round(NumObservations/2))] | |
Standardize | 'true' и 'false' | |
'tree' | MaxNumSplits | Целые числа, логарифмированные в области значений [1,max(2,NumObservations-1)] |
MinLeafSize | Целые числа, логарифмированные в области значений [1,max(2,floor(NumObservations/2))] | |
NumVariablesToSample | Целые числа в области значений [1,max(2,NumPredictors)] | |
SplitCriterion | 'gdi' , 'deviance' , и 'twoing' |
В качестве альтернативы используйте hyperparameters
с выбранной вами Learners
. Обратите внимание, что вы должны задать данные предиктора и ответ при создании optimizableVariable
объект.
load fisheriris params = hyperparameters('fitcensemble',meas,species,'Tree');
Чтобы увидеть подходящие и стандартные гиперпараметры, исследуйте params
.
Установите параметры nondefault путем передачи вектора optimizableVariable
объекты, которые имеют значения nondefault. Для примера,
load fisheriris params = hyperparameters('fitcensemble',meas,species,'Tree'); params(4).Range = [1,30];
Передайте params
как значение OptimizeHyperparameters
.
По умолчанию итеративное отображение появляется в командной строке, и графики появляются согласно количеству гиперпараметров в оптимизации. Для оптимизации и графиков целевой функцией является журнал ( 1 + потери перекрестной валидации) для регрессии и коэффициент неправильной классификации для классификации. Чтобы управлять итеративным отображением, установите Verbose
поле 'HyperparameterOptimizationOptions'
аргумент пары "имя-значение". Чтобы управлять графиками, установите ShowPlots
поле 'HyperparameterOptimizationOptions'
аргумент пары "имя-значение".
Для получения примера смотрите Оптимизируйте Классификационный ансамбль.
Пример: 'OptimizeHyperparameters',{'Method','NumLearningCycles','LearnRate','MinLeafSize','MaxNumSplits'}
'HyperparameterOptimizationOptions'
- Опции для оптимизацииОпции оптимизации, заданные как разделенная разделенными запятой парами, состоящая из 'HyperparameterOptimizationOptions'
и структуру. Этот аргумент изменяет эффект OptimizeHyperparameters
аргумент пары "имя-значение". Все поля в структуре являются необязательными.
Имя поля | Значения | Дефолт |
---|---|---|
Optimizer |
| 'bayesopt' |
AcquisitionFunctionName |
Функции сбора данных, имена которых включают | 'expected-improvement-per-second-plus' |
MaxObjectiveEvaluations | Максимальное количество вычислений целевой функции. | 30 для 'bayesopt' или 'randomsearch' , и вся сетка для 'gridsearch' |
MaxTime | Временной предел, заданный как положительный действительный. Предел времени в секундах, что измеряется | Inf |
NumGridDivisions | Для 'gridsearch' , количество значений в каждой размерности. Значение может быть вектором положительных целых чисел, дающих количество значений для каждой размерности, или скаляром, который применяется ко всем размерностям. Это поле игнорируется для категориальных переменных. | 10 |
ShowPlots | Логическое значение, указывающее, показывать ли графики. Если true , это поле строит график наилучшего значения целевой функции относительно числа итерации. Если существует один или два параметра оптимизации и если Optimizer является 'bayesopt' , затем ShowPlots также строит график модели целевой функции относительно параметров. | true |
SaveIntermediateResults | Логическое значение, указывающее, сохранять ли результаты при Optimizer является 'bayesopt' . Если true , это поле перезаписывает переменную рабочей области с именем 'BayesoptResults' при каждой итерации. Переменная является BayesianOptimization объект. | false |
Verbose | Отображение в командной строке.
Для получения дополнительной информации смотрите | 1 |
UseParallel | Логическое значение, указывающее, запускать ли байесовскую оптимизацию параллельно, что требует Parallel Computing Toolbox. Из-за непродуктивности параллельной синхронизации параллельная байесовская оптимизация не обязательно приводит к воспроизводимым результатам. Для получения дополнительной информации см. «Параллельная байесовская оптимизация». | false |
Repartition | Логическое значение, указывающее, следует ли повторять перекрестную валидацию при каждой итерации. Если
| false |
Используйте не более одного из следующих трех имен полей. | ||
CVPartition | A cvpartition объект, созданный cvpartition . | 'Kfold',5 если вы не задаете какое-либо поле перекрестной проверки |
Holdout | Скаляр в области значений (0,1) представляющий фракцию удержания. | |
Kfold | Целое число, больше 1. |
Пример: 'HyperparameterOptimizationOptions',struct('MaxObjectiveEvaluations',60)
Типы данных: struct
Mdl
- Обученная модель классификационного ансамбляClassificationBaggedEnsemble
объект модели | ClassificationEnsemble
объект модели | ClassificationPartitionedEnsemble
перекрестно проверенный объект моделиОбученная модель ансамбля, возвращенная как один из объектов модели в этой таблице.
Объект модели | Задайте какие-либо опции перекрестной проверки? | Method Настройка | Resample Настройка |
---|---|---|---|
ClassificationBaggedEnsemble | Нет | 'Bag' | 'on' |
ClassificationEnsemble | Нет | Любой метод агрегации ансамбля для классификации | 'off' |
ClassificationPartitionedEnsemble | Да | Любой метод агрегации ансамбля для классификации | 'off' или 'on' |
Аргументы пары "имя-значение", которые управляют перекрестной проверкой CrossVal
, Holdout
, KFold
, Leaveout
, и CVPartition
.
Ссылка на свойства Mdl
, используйте запись через точку. Для примера, чтобы получить доступ или отобразить вектор камеры слабых объектов модели учащегося для ансамбля, который не был перекрестно проверен, введите Mdl.Trained
в командной строке.
NumLearningCycles
может варьироваться от нескольких десятков до нескольких тысяч. Обычно ансамбль с хорошей прогностической степенью требует от нескольких сотен до нескольких тысяч слабых учащихся. Однако вам не придется обучать ансамбль для того, чтобы было сразу много циклов. Можно начать с того, что вырастить несколько десятков учащихся, осмотреть эффективность ансамбля и затем, при необходимости, обучить более слабых учащихся, используя resume
для задач классификации.
Эффективность ансамбля зависит от обстановки ансамбля и настройки слабых учащихся. То есть, если вы задаете слабых учащихся с параметрами по умолчанию, то ансамбль может выступить плохо. Поэтому, как и настройки ансамбля, рекомендуется настроить параметры слабых учащихся с помощью шаблонов и выбрать значения, которые минимизируют ошибку обобщения.
Если вы задаете, чтобы выполнить повторную выборку с помощью Resample
, тогда это хорошая практика, чтобы переопределить на целом наборе данных. То есть используйте настройку по умолчанию 1
для FResample
.
Если метод агрегации ансамбля (Method
) 'bag'
и:
Стоимость неправильной классификации (Cost
) является сильно несбалансированным, тогда для выборок в мешке, программное обеспечение переизбирает уникальные наблюдения от класса, который имеет большой штраф.
Предшествующие вероятности класса (Prior
) сильно искажены, программное обеспечение переизбирает уникальные наблюдения из класса, который имеет большую предшествующую вероятность.
Для меньших размеров выборки эти комбинации могут привести к низкой относительной частоте наблюдений вне мешка от класса, который имеет большую штраф или предшествующую вероятность. Следовательно, оцененная ошибка вне сумки является сильно переменной, и ее может быть трудно интерпретировать. Чтобы избежать больших предполагаемых отклонений ошибок вне сумки, особенно для небольших размеров выборки, установите более сбалансированную матрицу затрат на неправильную классификацию с помощью Cost
или менее искаженный предыдущий вектор вероятностей с использованием Prior
.
Поскольку порядок некоторых входных и выходных аргументов соответствует отдельным классам в обучающих данных, рекомендуется задать порядок классов, используя ClassNames
аргумент пары "имя-значение".
Чтобы быстро определить порядок классов, удалите из обучающих данных все наблюдения, которые не классифицированы (то есть имеют отсутствующую метку), получите и отобразите массив всех различных классов, а затем укажите массив для ClassNames
. Для примера предположим, что переменная отклика (Y
) - массив ячеек с метками. Этот код задает порядок классов в переменной classNames
.
Ycat = categorical(Y); classNames = categories(Ycat)
categorical
присваивает <undefined>
к неклассифицированным наблюдениям и categories
исключает <undefined>
с его выхода. Поэтому, если вы используете этот код для массивов ячеек меток или аналогичный код для категориальных массивов, то вы не должны удалять наблюдения с отсутствующими метками, чтобы получить список различных классов.Чтобы указать, что порядок классов от самой низкой представленной метки до наиболее представленной, затем быстро определите порядок классов (как в предыдущей пуле), но расположите классы в списке по частоте перед передачей списка в ClassNames
. Следующий из предыдущего примера, этот код задает порядок классов от lowest- до наиболее представленных в classNamesLH
.
Ycat = categorical(Y); classNames = categories(Ycat); freq = countcats(Ycat); [~,idx] = sort(freq); classNamesLH = classNames(idx);
После обучения модели можно сгенерировать код C/C + +, который предсказывает метки для новых данных. Для генерации кода C/C + + требуется MATLAB Coder™. Для получения дополнительной информации смотрите Введение в генерацию кода .
Для получения дополнительной информации об алгоритмах агрегации ансамблей смотрите Ensemble Algorithms.
Если вы задаете Method
быть алгоритмом и Learners
ускорения чтобы быть деревьями решений, программное обеспечение по умолчанию растёт неглубокими деревьями решений. Можно настроить глубину дерева, задав
MaxNumSplits
, MinLeafSize
, и MinParentSize
Аргументы пары "имя-значение" с использованием templateTree
.
Для упаковки в мешки ('Method','Bag'
), fitcensemble
генерирует выборки в мешке путем избыточной дискретизации классов с большими расходами на неправильную классификацию и классов недостаточной дискретизации с небольшими расходами на неправильную классификацию. Следовательно, выборки вне мешка имеют меньше наблюдений от классов с большими расходами на неправильную классификацию и больше наблюдений от классов с небольшими затратами на неправильную классификацию. Если вы обучаете классификационный ансамбль с помощью небольшого набора данных и сильно искаженной матрицы затрат, то количество наблюдений вне мешка на класс может быть низким. Поэтому предполагаемая ошибка вне сумки может иметь большое отклонение и может быть трудной для интерпретации. То же явление может произойти и для классов с большими априорными вероятностями.
Для метода агрегации ансамбля RUSBoost ('Method','RUSBoost'
), аргумент пары "имя-значение" RatioToSmallest
задает пропорцию дискретизации для каждого класса относительно самого низкопредставленного класса. Например, предположим, что в обучающих данных два класса: A и B. A имеет 100 наблюдений и B имеет 10 наблюдений. Предположим также, что самый низкий представленный класс имеет m
наблюдения в обучающих данных.
Если вы задаете 'RatioToSmallest',2
, затем
= s
* m
2*10
= 20
. Следовательно, fitcensemble
обучает каждого ученика, используя 20 наблюдений из A класса и 20 наблюдений из B класса. Если вы задаете 'RatioToSmallest',[2 2]
, затем вы получаете тот же результат.
Если вы задаете 'RatioToSmallest',[2,1]
, затем
= s1
* m
2*10
= 20
и
= s2
* m
1*10
= 10
. Следовательно, fitcensemble
обучает каждого ученика, используя 20 наблюдений из класса A и 10 наблюдений из класса B.
Для двухъядерных систем и выше, fitcensemble
параллелизирует обучение с использованием Intel Threading Building Blocks (TBB). Для получения дополнительной информации о Intel TBB смотрите https://software.intel.com/en-us/intel-tbb.
[1] Breiman, L. «Bagging Predictors». Машинное обучение. Том 26, стр. 123-140, 1996.
[2] Breiman, L. «Random Forests». Машинное обучение. Том 45, стр. 5-32, 2001.
[3] Freund, Y. «Более надежный алгоритм усиления». arXiv:0905.2138v1, 2009.
[4] Freund, Y. and R. E. Schapire. Теоретически решающее обобщение онлайн-обучения и приложение к бустингу. J. Computer and System Sciences, Vol. 55, pp. 119-139, 1997.
[5] Фридман, Дж. «Жадное приближение функций: градиентная бустерная машина». Анналы статистики, том 29, № 5, стр. 1189 - 1232, 2001.
[6] Фридман, Дж., Т. Хасти и Р. Тибширани. «Аддитивная логистическая регрессия: статистический взгляд на увеличение». Анналы статистики, том 28, № 2, стр. 337 - 407, 2000.
[7] Хасти, Т., Р. Тибширани и Дж. Фридман. Раздел «Элементы статистического обучения», Спрингер, Нью-Йорк, 2008 год.
[8] Ho, T. K. «Метод случайного подпространства для построения лесов для принятия решений». Транзакции IEEE по анализу шаблонов и машинной разведке, том 20, № 8, стр. 832-844, 1998.
[9] Schapire, R. E., Y. Freund, P. Bartlett, and W.S. Lee. «Увеличение разницы: новое объяснение эффективности методов голосования». Анналы статистики, том 26, № 5, стр. 1651 - 1686, 1998.
[10] Seiffert, C., T. Khoshgoftaar, J. Hulse, and A. Napolitano. «RUSBoost: повышение эффективности классификации при искажении обучающих данных». 19-я Международная конференция по распознаванию шаблона, стр. 1-4, 2008.
[11] Warmuth, M., J. Liao, and G. Ratsch. «Полностью корректирующие алгоритмы повышения, которые максимизируют запас». Proc. 23-й Int 'l. Конф. по машинному обучению, ACM, Нью-Йорк, стр. 1001-1008, 2006.
fitcensemble
поддерживает параллельное обучение с помощью 'Options'
аргумент имя-значение. Создайте опции используя statset
, таких как options = statset('UseParallel',true)
. Параллельные тренировки ансамбля требуют, чтобы вы установили 'Method'
аргумент имя-значение в 'Bag'
. Параллельное обучение доступно только для учащихся-древовидников, тип по умолчанию для 'Bag'
.
Чтобы выполнить параллельную оптимизацию гипероптимизации параметров управления, используйте 'HyperparameterOptimizationOptions', struct('UseParallel',true)
аргумент имя-значение в вызове этой функции.
Для получения дополнительной информации об оптимизации параллельной гипероптимизации параметров управления смотрите Parallel Bayesian Optimization.
Общие сведения о параллельных вычислениях см. в разделе Запуск функций MATLAB с поддержкой автоматических параллелей (Parallel Computing Toolbox).
ClassificationBaggedEnsemble
| ClassificationEnsemble
| ClassificationPartitionedEnsemble
| predict
| templateDiscriminant
| templateKNN
| templateTree
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.