fitcensemble

Подгонка ансамбля учащихся для классификации

Описание

пример

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(Tbl,Y) обрабатывает все переменные в таблице Tbl как переменные предиктора. Y - массив меток классов, который не находится в Tbl.

пример

Mdl = fitcensemble(X,Y) использует данные предиктора в матрице X и массив меток классов в Y.

пример

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 содержит NaNs, затем соответствующее 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');

Figure contains an axes. The axes contains an object of type line.

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

Для поиска оптимального уровня сложности дерева:

  1. Перекрестная проверка набора ансамблей. Экспоненциально повышает уровень сложности дерева для последующих ансамблей от пня принятия решений (один сплит) до не более n - 1 расщеплений. n - размер выборки. Кроме того, варьируйте скорость обучения для каждого ансамбля между 0,1 и 1.

  2. Оцените перекрестно подтвержденную скорость неправильной классификации каждого ансамбля.

  3. Для уровня сложности дерева j, j=1...J, сравните совокупную, перекрестно проверенную скорость неправильной классификации ансамблей путем построения их с количеством циклов обучения. Постройте график отдельных кривых для каждой скорости обучения на одном рисунке.

  4. Выберите кривую, которая достигает минимальной скорости неправильной классификации, и отметьте соответствующий цикл обучения и скорость обучения.

Перекрестная проверка глубокого дерева классификации и пня. Эти классификационные деревья служат ориентирами.

rng(1) % For reproducibility
MdlDeep = fitctree(X,Y,'CrossVal','on','MergeLeaves','off', ...
    'MinParentSize',1);
MdlStump = fitctree(X,Y,'MaxNumSplits',1,'CrossVal','on');

Перекрестная валидация ансамбля из 150 ускоренных классификационных деревьев с помощью 5-кратной перекрестной валидации. Используя шаблон дерева, варьируйте максимальное количество разделений, используя значения в последовательности {30,31,...,3m}. m таково, что 3m не больше 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 содержит переменную отклика, и вы хотите использовать все оставшиеся переменные в качестве предикторов, затем задайте переменную отклика используя ResponseVarName.

  • Если Tbl содержит переменную отклика, и вы хотите использовать подмножество остальных переменных только в качестве предикторов, затем задайте формулу используя formula.

  • Если Tbl не содержит переменной отклика, затем задает данные отклика используя Y. Длина переменной отклика и количество строк Tbl должно быть равным.

Примечание

Чтобы сэкономить память и время выполнения, поставьте X и Y вместо Tbl.

Типы данных: table

Имя переменной отклика, заданное как имя переменной отклика в Tbl.

Вы должны задать ResponseVarName как вектор символов или строковый скаляр. Для примера, если Tbl.Y - переменная отклика, затем задайте ResponseVarName как 'Y'. В противном случае, fitcensemble обрабатывает все столбцы Tbl как переменные предиктора.

Переменная отклика должна быть категориальными символьными или строковыми массивами, логическим или числовым вектором или массивом ячеек из векторов символов. Если переменная отклика является символьным массивом, то каждый элемент должен соответствовать одной строке массива.

Для классификации можно задать порядок классов с помощью ClassNames аргумент пары "имя-значение". В противном случае, fitcensemble определяет порядок классов и сохраняет его в Mdl.ClassNames.

Типы данных: char | string

Объяснительная модель переменной отклика и подмножества переменных предиктора, заданная в виде вектора символов или строкового скаляра в форме 'Y~x1+x2+x3'. В этой форме Y представляет переменную отклика, и x1, x2, и x3 представляют переменные предиктора.

Чтобы задать подмножество переменных в Tbl в качестве предикторов для настройки модели используйте формулу. Если вы задаете формулу, то программное обеспечение не использует никаких переменных в Tbl которые не появляются в formula.

Имена переменных в формуле должны быть обоими именами переменных в Tbl (Tbl.Properties.VariableNames) и действительный MATLAB® идентификаторы. Можно проверить имена переменных в Tbl при помощи isvarname функция. Если имена переменных недопустимы, можно преобразовать их, используя matlab.lang.makeValidName функция.

Типы данных: char | string

Данные предиктора, заданные как числовая матрица.

Каждая строка соответствует одному наблюдению, и каждый столбец соответствует одной переменной предиктора.

Длина Y и количество строк X должно быть равным.

Чтобы задать имена предикторов в порядке их внешнего вида в X, используйте PredictorNames аргумент пары "имя-значение".

Типы данных: single | double

Данные отклика, заданные как категориальные символьные или строковые массивы, логический или числовой вектор или массив ячеек из векторов символов. Каждая запись в 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'Агрегация 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' и положительное целое или 'AllPredictorCombinations'.

  • Если вы задаете положительное целое число, то на каждом цикле обучения программное обеспечение обучает одного слабого ученика для каждого объекта шаблона в Learners. Следовательно, программное обеспечение обучает NumLearningCycles*numel(Learners) учащиеся.

  • Если вы задаете 'AllPredictorCombinations', затем установите Method на 'Subspace' и укажите одного ученика только для Learners. С помощью этих настроек программное обеспечение обучает учащихся всем возможным комбинациям взятых предикторов NPredToSample за раз. Следовательно, программное обеспечение обучает nchoosek(size(X,2),NPredToSample) учащиеся.

Программное обеспечение составляет ансамбль, используя всех обученных учащихся и хранит их в Mdl.Trained.

Для получения дополнительной информации см. советы».

Пример: 'NumLearningCycles',500

Типы данных: single | double | char | string

Слабые ученики для использования в ансамбле, заданные как разделенная разделенными запятой парами, состоящая из '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'.

Чтобы отследить количество слабых учащихся или складок, которые 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' и положительный целочисленный скаляр. Этот аргумент действителен только в тех случаях, когда fitcensemble использует ученика дерева, то есть 'Learners' является либо 'tree' или объект шаблона, созданный при помощи templateTree.

  • Если на 'NumBins' значение пустое (по умолчанию), тогда fitcensemble не содержит предикторов.

  • Если вы задаете 'NumBins' значение как положительный целочисленный скаляр (numBins), затем fitcensemble помещает каждый числовой предиктор в самое большее numBins equiprobable bins, а затем выращивает деревья на индексах интервал вместо исходных данных.

    • Количество интервалов может быть меньше numBins если предиктор имеет меньше numBins уникальные значения.

    • fitcensemble не содержит категориальные предикторы.

Когда вы используете большой набор обучающих данных, эта опция binning ускоряет обучение, но может привести к потенциальному снижению точности. Можно попробовать 'NumBins',50 сначала, а затем измените значение в зависимости от точности и скорости обучения.

Обученная модель сохраняет границы интервала в BinEdges свойство.

Пример: 'NumBins',50

Типы данных: single | double

Категориальный список предикторов, заданный как одно из значений в этой таблице.

ЗначениеОписание
Вектор положительных целых чисел

Каждая запись в векторе является индексом значением, соответствующим столбцу данных предиктора, который содержит категориальную переменную. Значения индекса находятся между 1 и p, где p - количество предикторов, используемых для обучения модели.

Если fitcensemble использует подмножество входа переменных в качестве предикторов, затем функция индексирует предикторы, используя только подмножество. The 'CategoricalPredictors' значения не подсчитывают переменную отклика, переменную веса наблюдения и любые другие переменные, которые функция не использует.

Логический вектор

A true запись означает, что соответствующий столбец данных предиктора является категориальной переменной. Длина вектора p.

Матрица символовКаждая строка матрицы является именем переменной. Имена должны совпадать с записями в PredictorNames. Дополните имена дополнительными пробелами, чтобы каждая строка матрицы символов имела одинаковую длину.
Строковые массивы или массив ячеек векторов символовКаждый элемент массива является именем переменной. Имена должны совпадать с записями в PredictorNames.
'all'Все предикторы категоричны.

Спецификация 'CategoricalPredictors' подходит, если:

  • 'Learners' задает учащихся дерева.

  • 'Learners' задает k - ближайших учащихся, где все предикторы категоричны.

Каждый учащийся идентифицирует и обрабатывает категориальные предикторы так же, как и функция подгонки, соответствующая учащемуся. См. 'CategoricalPredictors' из fitcknn для k - ближайших учащихся и 'CategoricalPredictors' из fitctree для учащихся дерева.

Пример: 'CategoricalPredictors','all'

Типы данных: single | double | logical | char | string | cell

Имена переменных предиктора, заданные как строковые массивы уникальных имен или массив ячеек из уникальных векторов символов. Функциональность 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

Имя переменной отклика, заданное как вектор символов или строковый скаляр.

  • Если вы поставляете Y, тогда можно использовать 'ResponseName' чтобы задать имя для переменной отклика.

  • Если вы поставляете ResponseVarName или formula, тогда вы не можете использовать 'ResponseName'.

Пример: 'ResponseName','response'

Типы данных: char | string

Параллельные опции

свернуть все

Опции для параллельных вычислений и установки случайных чисел, заданные как структура. Создайте Options структура с statset.

Примечание

Вам нужно Parallel Computing Toolbox™, чтобы вычислить параллельно.

В этой таблице перечислены поля опций и их значения.

Имя поляЗначениеДефолт
UseParallel

Установите это значение равным true для параллельного вычисления. Параллельные тренировки ансамбля требуют, чтобы вы установили 'Method' аргумент имя-значение в 'Bag'. Параллельное обучение доступно только для учащихся-древовидников, тип по умолчанию для 'Bag'.

false
UseSubstreams

Установите это значение равным true проводить расчеты параллельно воспроизводимым способом.

Чтобы вычислить воспроизводимо, установите Streams к типу, который позволяет субпотоки: 'mlfg6331_64' или 'mrg32k3a'. Кроме того, используйте шаблон дерева с 'Reproducible' значение-имя аргумента установлено в true. См. Воспроизводимость в параллельных статистических расчетах.

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' и 'on' или 'off'.

Если вы задаете 'on'затем программное обеспечение реализует 10-кратную перекрестную валидацию.

Чтобы переопределить этот параметр перекрестной проверки, используйте один из следующих аргументов пары "имя-значение": CVPartition, Holdout, KFold, или Leaveout. Чтобы создать перекрестно проверенную модель, можно использовать один аргумент пары "имя-значение" перекрестной валидации только за раз.

Другой способ - выполнить перекрестную проверку позже путем передачи Mdl на crossval или crossval.

Пример: 'Crossval','on'

Раздел перекрестной проверки, заданный как cvpartition объект раздела, созданный cvpartition. Объект раздела задает тип перекрестной валидации и индексацию для наборов обучения и валидации.

Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

Пример: Предположим, что вы создаете случайный разбиение для 5-кратной перекрестной валидации при 500 наблюдениях при помощи cvp = cvpartition(500,'KFold',5). Затем можно задать перекрестно проверенную модель при помощи 'CVPartition',cvp.

Доля данных, используемых для валидации удержания, заданная в виде скалярного значения в области значений (0,1). Если вы задаете 'Holdout',p, затем программное обеспечение завершает следующие шаги:

  1. Случайный выбор и резервирование p*100% данных в качестве данных валидации и train модели с использованием остальных данных.

  2. Сохраните компактную, обученную модель в Trained свойство перекрестно проверенной модели.

Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

Пример: 'Holdout',0.1

Типы данных: double | single

Количество складок для использования в перекрестно проверенной модели, заданное как положительное целое значение, больше 1. Если вы задаете 'KFold',k, затем программное обеспечение завершает следующие шаги:

  1. Случайным образом разделите данные на k наборы.

  2. Для каждого набора зарезервируйте набор как данные валидации и обучите модель, используя другой k - 1 комплект.

  3. Сохраните k компактные, обученные модели в k-by-1 вектор камеры в Trained свойство перекрестно проверенной модели.

Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

Пример: 'KFold',5

Типы данных: single | double

Выходной флаг перекрестной проверки, заданный как 'on' или 'off'. Если вы задаете 'Leaveout','on', затем для каждого из n наблюдений (где n - количество наблюдений, исключая недостающие наблюдения, заданное в NumObservations свойство модели), программное обеспечение завершает следующие шаги:

  1. Зарезервируйте одно наблюдение как данные валидации и обучите модель с помощью другого n - 1 наблюдений.

  2. Сохраните n компактные обученные модели в векторе камеры n-на-1 в Trained свойство перекрестно проверенной модели.

Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

Пример: 'Leaveout','on'

Другие опции классификации

свернуть все

Имена классов, используемых для обучения, заданные как категориальные символьные или строковые массивы; логический или числовой вектор; или массив ячеек из векторов символов. 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(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'Предшествующие вероятности классов являются относительными частотами классов в Y.
'uniform'Все предыдущие вероятности классов равны 1/ K, где K - количество классов.
числовой векторКаждый элемент является классом предыдущей вероятности. Упорядочивайте элементы согласно Mdl.ClassNames или укажите порядок с помощью ClassNames аргумент пары "имя-значение". Программное обеспечение нормализует элементы так, что они суммируются с 1.
массив структур

Структурный S с двумя полями:

  • S.ClassNames содержит имена классов как переменная того же типа, что и Y.

  • S.ClassProbs содержит вектор соответствующих априорных вероятностей. Программное обеспечение нормализует элементы так, что они суммируются с 1.

fitcensemble нормализует предыдущие вероятности в Prior в сумму до 1.

Пример: struct('ClassNames',{{'setosa','versicolor','virginica'}},'ClassProbs',1:3)

Типы данных: char | string | double | single | struct

Преобразование счета, заданное как вектор символов, строковый скаляр или указатель на функцию.

В этой таблице результирующие векторы символов и строковые скаляры.

ЗначениеОписание
'doublelogit'1/(1 + e–2x)
'invlogit'журнал (x/( 1 - x))
'ismax'Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равным 0
'logit'1/(1 + ex)
'none' или 'identity'x (без преобразования)
'sign'-1 для x < 0
0 для x = 0
1 для x > 0
'symmetric'2 x – 1
'symmetricismax'Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равной -1
'symmetriclogit'2/(1 + ex) – 1

Для функции MATLAB или функции, которую вы задаете, используйте указатель на функцию для преобразования счета. Указатель на функцию должен принять матрицу (исходные счета) и вернуть матрицу того же размера (преобразованные счета).

Пример: 'ScoreTransform','logit'

Типы данных: char | string | function_handle

Веса наблюдений, заданные как разделенная разделенными запятой парами, состоящая из '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' и положительная скалярная величина в (0,1].

Как использовать 'FResample', задайте 'bag' для Method или установите Resample на 'on'.

Пример: 'FResample',0.75

Типы данных: single | double

Флаг, указывающий выборку с заменой, задается как разделенная разделенными запятой парами, состоящая из 'Replace' и 'off' или 'on'.

  • Для 'on'программное обеспечение производит выборку обучающих наблюдений с заменой.

  • Для 'off'программное обеспечение производит выборку обучающих наблюдений без замены. Если вы задаете Resample на 'on'затем программное обеспечение дискретизирует обучающие наблюдения, принимая равномерные веса. Если вы также задаете метод бустинга, то программное обеспечение повышает путем перевешивания наблюдений.

Если вы не задаете Method на 'bag' или установите Resample на 'on', Replace не имеет эффекта.

Пример: 'Replace','off'

Флаг, указывающий на повторную выборку, заданный как разделенная разделенными запятой парами, состоящая из 'Resample' и 'off' или 'on'.

  • Если Method является методом бустинга, тогда:

    • 'Resample','on' задает для выборки обучающие наблюдения, использующие обновленные веса в качестве вероятностей полиномиальной выборки.

    • 'Resample','off'(по умолчанию) задает изменение веса наблюдений на каждой итерации обучения.

  • Если Method является 'bag', затем 'Resample' должен быть 'on'. Программа пересчитывает часть обучающих наблюдений (см FResample) с заменой или без (см. Replace).

Если вы задаете, чтобы выполнить повторную выборку с помощью Resample, тогда это хорошая практика, чтобы переопределить на целом наборе данных. То есть используйте настройку по умолчанию 1 для FResample.

AdaBoostM1, AdaBoostM2, LogitBoost и опции метода GentleBoost

свернуть все

Скорость обучения для усадки, заданный как разделенная разделенными запятой парами, состоящая из 'LearnRate' и числовой скаляр в интервале (0,1].

Чтобы обучить ансамбль с помощью усадки, установите LearnRate к значению меньше 1, для примера, 0.1 является популярным выбором. Обучение ансамбля с помощью усадки требует большего количества итераций обучения, но часто достигает лучшей точности.

Пример: 'LearnRate',0.1

Типы данных: single | double

Опции метода RUSBoost

свернуть все

Скорость обучения для усадки, заданный как разделенная разделенными запятой парами, состоящая из 'LearnRate' и числовой скаляр в интервале (0,1].

Чтобы обучить ансамбль с помощью усадки, установите LearnRate к значению меньше 1, для примера, 0.1 является популярным выбором. Обучение ансамбля с помощью усадки требует большего количества итераций обучения, но часто достигает лучшей точности.

Пример: 'LearnRate',0.1

Типы данных: single | double

Пропорция дискретизации относительно наименее представленного класса, заданная как разделенная разделенными запятой парами, состоящая из '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

Опции методов LPBoost и TotalBoost

свернуть все

Точность запаса для управления скоростью сходимости, заданная как разделенная разделенными запятой парами, состоящая из 'MarginPrecision' и числовой скаляр в интервале [0,1]. MarginPrecision влияет на количество усиливающих итераций, необходимых для сходимости.

Совет

Чтобы обучить ансамбль, используя много учащихся, задайте небольшое значение для MarginPrecision. Для обучения с использованием нескольких учащихся задайте большое значение.

Пример: 'MarginPrecision',0.5

Типы данных: single | double

Опции метода RobustBoost

свернуть все

Целевая ошибка классификации, заданная как разделенная разделенными запятой парами, состоящая из 'RobustErrorGoal' и неотрицательный числовой скаляр. Верхняя граница от возможных значений зависит от значений RobustMarginSigma и RobustMaxMargin. Однако верхняя граница не может превысить 1.

Совет

Для конкретного набора обучающих данных обычно существует оптимальная область значений для RobustErrorGoal. Если вы установите его слишком низким или слишком высоким, то программное обеспечение может создать модель с плохой точностью классификации. Попробуйте выполнить перекрестную проверку, чтобы найти соответствующее значение.

Пример: 'RobustErrorGoal',0.05

Типы данных: single | double

Распределение классификационной маржи по обучающим данным, заданное как разделенная разделенными запятой парами, состоящая из 'RobustMarginSigma' и положительный числовой скаляр. Перед указанием RobustMarginSigma, проконсультируйтесь с литературой по RobustBoostдля примера [19].

Пример: 'RobustMarginSigma',0.5

Типы данных: single | double

Максимальный классификационный запас в обучающих данных, заданный как разделенная разделенными запятой парами, состоящая из 'RobustMaxMargin' и неотрицательный числовой скаляр. Программное обеспечение минимизирует количество наблюдений в обучающих данных, имеющих классификационные поля ниже RobustMaxMargin.

Пример: 'RobustMaxMargin',1

Типы данных: single | double

Опции метода случайного подпространства

свернуть все

Количество предикторов для выборки для каждого случайного обучающего подпространства, заданное как разделенная разделенными запятой парами, состоящая из 'NPredToSample' и положительное целое число в интервале 1,..., p, где p - количество переменных предиктора (size(X,2) или size(Tbl,2)).

Типы данных: single | double

Опции оптимизации гипероптимизации параметров управления

свернуть все

Оптимизируемые параметры, заданные как разделенная разделенными запятой парами, состоящая из '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'.

  • NumLearningCyclesfitcensemble поиск среди положительных целых чисел, по умолчанию логарифмический с областью значений [10,500].

  • LearnRatefitcensemble поиск среди положительных реалов, по умолчанию логарифмический с областью значений [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' и структуру. Этот аргумент изменяет эффект OptimizeHyperparameters аргумент пары "имя-значение". Все поля в структуре являются необязательными.

Имя поляЗначенияДефолт
Optimizer
  • 'bayesopt' - Используйте байесовскую оптимизацию. Внутренне эта настройка вызывает bayesopt.

  • 'gridsearch' - Используйте поиск по сетке с NumGridDivisions значений на размерность.

  • 'randomsearch' - Поиск наугад среди MaxObjectiveEvaluations точки.

'gridsearch' ищет в случайном порядке, используя равномерную выборку без замены от сетки. После оптимизации можно получить таблицу в порядке сетки при помощи команды sortrows(Mdl.HyperparameterOptimizationResults).

'bayesopt'
AcquisitionFunctionName

  • 'expected-improvement-per-second-plus'

  • 'expected-improvement'

  • 'expected-improvement-plus'

  • 'expected-improvement-per-second'

  • 'lower-confidence-bound'

  • 'probability-of-improvement'

Функции сбора данных, имена которых включают per-second не дают воспроизводимых результатов, потому что оптимизация зависит от времени выполнения целевой функции. Функции сбора данных, имена которых включают plus изменять свое поведение при чрезмерной эксплуатации области. Для получения дополнительной информации см. Типы функций приобретения.

'expected-improvement-per-second-plus'
MaxObjectiveEvaluationsМаксимальное количество вычислений целевой функции.30 для 'bayesopt' или 'randomsearch', и вся сетка для 'gridsearch'
MaxTime

Временной предел, заданный как положительный действительный. Предел времени в секундах, что измеряется tic и toc. Время выполнения может превысить MaxTime потому что MaxTime не прерывает вычисления функции.

Inf
NumGridDivisionsДля 'gridsearch', количество значений в каждой размерности. Значение может быть вектором положительных целых чисел, дающих количество значений для каждой размерности, или скаляром, который применяется ко всем размерностям. Это поле игнорируется для категориальных переменных.10
ShowPlotsЛогическое значение, указывающее, показывать ли графики. Если true, это поле строит график наилучшего значения целевой функции относительно числа итерации. Если существует один или два параметра оптимизации и если Optimizer является 'bayesopt', затем ShowPlots также строит график модели целевой функции относительно параметров.true
SaveIntermediateResultsЛогическое значение, указывающее, сохранять ли результаты при Optimizer является 'bayesopt'. Если true, это поле перезаписывает переменную рабочей области с именем 'BayesoptResults' при каждой итерации. Переменная является BayesianOptimization объект.false
Verbose

Отображение в командной строке.

  • 0 - Нет итерационного отображения

  • 1 - Итеративное отображение

  • 2 - Итеративное отображение с дополнительной информацией

Для получения дополнительной информации смотрите bayesopt Verbose аргумент пары "имя-значение".

1
UseParallelЛогическое значение, указывающее, запускать ли байесовскую оптимизацию параллельно, что требует Parallel Computing Toolbox. Из-за непродуктивности параллельной синхронизации параллельная байесовская оптимизация не обязательно приводит к воспроизводимым результатам. Для получения дополнительной информации см. «Параллельная байесовская оптимизация».false
Repartition

Логическое значение, указывающее, следует ли повторять перекрестную валидацию при каждой итерации. Если falseОптимизатор использует один раздел для оптимизации.

true обычно дает наиболее устойчивые результаты, потому что эта настройка учитывает шум разбиения. Однако для хороших результатов true требует, по крайней мере, в два раза больше вычислений функции.

false
Используйте не более одного из следующих трех имен полей.
CVPartitionA cvpartition объект, созданный cvpartition.'Kfold',5 если вы не задаете какое-либо поле перекрестной проверки
HoldoutСкаляр в области значений (0,1) представляющий фракцию удержания.
KfoldЦелое число, больше 1.

Пример: 'HyperparameterOptimizationOptions',struct('MaxObjectiveEvaluations',60)

Типы данных: struct

Выходные аргументы

свернуть все

Обученная модель ансамбля, возвращенная как один из объектов модели в этой таблице.

Объект моделиЗадайте какие-либо опции перекрестной проверки?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.

Расширенные возможности

Введенный в R2016b
Для просмотра документации необходимо авторизоваться на сайте