fitrensemble

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

Описание

пример

Mdl = fitrensemble(Tbl,ResponseVarName) возвращает обученный объект модели ансамбля регрессии (Mdl), который содержит результаты увеличения 100 деревьев регрессии с помощью LSBoost и данных предиктора и отклика в таблице Tbl. ResponseVarName - имя переменной отклика в Tbl.

пример

Mdl = fitrensemble(Tbl,formula) применяется formula для подгонки модели к предиктору и данным отклика в таблице Tbl. formula является объяснительной моделью отклика и подмножеством переменных предиктора в Tbl используется для подгонки Mdl. Для примера, 'Y~X1+X2+X3' соответствует переменной отклика Tbl.Y как функция от переменных предиктора Tbl.X1, Tbl.X2, и Tbl.X3.

пример

Mdl = fitrensemble(Tbl,Y) обрабатывает все переменные в таблице Tbl как переменные предиктора. Y - вектор откликов, который не в Tbl.

пример

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

пример

Mdl = fitrensemble(___,Name,Value) использует дополнительные опции, заданные одним или несколькими Name,Value аргументы в виде пар и любой из входных параметров в предыдущих синтаксисах. Например, можно задать количество циклов обучения, метод агрегации ансамбля или реализовать 10-кратную перекрестную валидацию.

Примеры

свернуть все

Создайте регрессионный ансамбль, который предсказывает экономию топлива автомобиля с учетом количества цилиндров, объема, перемещаемого цилиндрами, лошадиной силы и веса. Затем обучите другой ансамбль, используя меньше предикторов. Сравните прогнозирующие точности в выборке ансамблей.

Загрузите carsmall набор данных. Сохраните переменные, которые будут использоваться в обучении, в таблице.

load carsmall
Tbl = table(Cylinders,Displacement,Horsepower,Weight,MPG);

Обучите регрессионный ансамбль.

Mdl1 = fitrensemble(Tbl,'MPG');

Mdl1 является RegressionEnsemble модель. Некоторые заметные характеристики Mdl1 являются:

  • Алгоритм агрегации ансамбля 'LSBoost'.

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

  • Сто деревьев составляют ансамбль.

Потому что MPG является переменной в рабочей области MATLAB ®, можно получить тот же результат путем ввода

Mdl1 = fitrensemble(Tbl,MPG);

Используйте обученный регрессионный ансамбль, чтобы предсказать расход топлива для четырехцилиндрового автомобиля с 200-кубическим водоизмещением, 150 лошадиных сил и весом 3000 фунтов.

pMPG = predict(Mdl1,[4 200 150 3000])
pMPG = 25.6467

Обучите новый ансамбль, используя все предикторы в Tbl кроме Displacement.

formula = 'MPG ~ Cylinders + Horsepower + Weight';
Mdl2 = fitrensemble(Tbl,formula);

Сравните MSE реституции между Mdl1 и Mdl2.

mse1 = resubLoss(Mdl1)
mse1 = 0.3096
mse2 = resubLoss(Mdl2)
mse2 = 0.5861

MSE в выборке для ансамбля, который обучается на всех предикторах, ниже.

Обучите ансамбль ускоренных регрессионых деревьев при помощи fitrensemble. Сократите время обучения путем определения 'NumBins' аргумент пары "имя-значение" для числовых предикторов интервала. После обучения можно воспроизвести привязанные данные предиктора с помощью BinEdges свойство обученной модели и discretize функция.

Сгенерируйте выборочные данные набор.

rng('default') % For reproducibility
N = 1e6;
X1 = randi([-1,5],[N,1]);
X2 = randi([5,10],[N,1]);
X3 = randi([0,5],[N,1]);
X4 = randi([1,10],[N,1]);
X = [X1 X2 X3 X4];
y = X1 + X2 + X3 + X4 + normrnd(0,1,[N,1]);

Обучите ансамбль ускоренных регрессионых деревьев с помощью ускорения методом наименьших квадратов (LSBoost, значение по умолчанию). Определите время для функции в целях сравнения.

tic
Mdl1 = fitrensemble(X,y);
toc
Elapsed time is 78.662954 seconds.

Ускорите обучение при помощи 'NumBins' аргумент пары "имя-значение". Если вы задаете 'NumBins' значение как положительный целочисленный скаляр, затем программное обеспечение помещает каждый числовой предиктор в заданное количество уравнительных интервалов, а затем выращивает деревья индексов интервала вместо исходных данных. Программное обеспечение не встраивает категориальные предикторы.

tic
Mdl2 = fitrensemble(X,y,'NumBins',50);
toc
Elapsed time is 43.353208 seconds.

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

Сравните регрессионные ошибки путем реституции.

rsLoss = resubLoss(Mdl1)
rsLoss = 1.0134
rsLoss2 = resubLoss(Mdl2)
rsLoss2 = 1.0133

В этом примере значения предиктора раскладывания сокращают время обучения без значительной потери точности. В целом, когда у вас есть большой набор данных, такой как в этом примере, использование опции 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с.

Оцените ошибку обобщения ансамбля усиленных регрессионых деревьев.

Загрузите carsmall набор данных. Выберите количество цилиндров, объем, перемещаемый цилиндрами, лошадиную силу и вес в качестве предикторов экономии топлива.

load carsmall
X = [Cylinders Displacement Horsepower Weight];

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

rng(1); % For reproducibility
t = templateTree('MaxNumSplits',1);
Mdl = fitrensemble(X,MPG,'Learners',t,'CrossVal','on');

Mdl является RegressionPartitionedEnsemble модель.

Постройте график совокупной, 10-кратной перекрестной проверенной, среднеквадратичной ошибки (MSE). Отображение предполагаемой ошибки обобщения ансамбля.

kflc = kfoldLoss(Mdl,'Mode','cumulative');
figure;
plot(kflc);
ylabel('10-fold cross-validated MSE');
xlabel('Learning cycle');

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

estGenError = kflc(end)
estGenError = 26.2356

kfoldLoss возвращает ошибку обобщения по умолчанию. Однако построение графика совокупных потерь позволяет вам контролировать, как изменяется потеря по мере накопления слабых учащихся в ансамбле.

Ансамбль достигает MSE около 23,5 после накопления около 30 слабых учащихся.

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

В этом примере показано, как автоматически оптимизировать гиперпараметры с помощью fitrensemble. В примере используется carsmall данные.

Загрузите данные.

load carsmall

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

Mdl = fitrensemble([Horsepower,Weight],MPG,'OptimizeHyperparameters','auto')

В этом примере для воспроизводимости установите случайный seed и используйте 'expected-improvement-plus' функция сбора. Кроме того, для воспроизводимости алгоритма случайного леса задайте 'Reproducible' аргумент пары "имя-значение" как true для учащихся дерева.

rng('default')
t = templateTree('Reproducible',true);
Mdl = fitrensemble([Horsepower,Weight],MPG,'OptimizeHyperparameters','auto','Learners',t, ...
    'HyperparameterOptimizationOptions',struct('AcquisitionFunctionName','expected-improvement-plus'))
|===================================================================================================================================|
| Iter | Eval   | Objective:  | Objective   | BestSoFar   | BestSoFar   |       Method | NumLearningC-|    LearnRate |  MinLeafSize |
|      | result | log(1+loss) | runtime     | (observed)  | (estim.)    |              | ycles        |              |              |
|===================================================================================================================================|
|    1 | Best   |      2.9726 |      11.445 |      2.9726 |      2.9726 |          Bag |          413 |            - |            1 |
|    2 | Accept |      6.2619 |      1.9956 |      2.9726 |      3.6133 |      LSBoost |           57 |    0.0016067 |            6 |
|    3 | Accept |      2.9975 |     0.92413 |      2.9726 |      2.9852 |          Bag |           32 |            - |            2 |
|    4 | Accept |      4.1897 |      1.4237 |      2.9726 |       2.972 |          Bag |           55 |            - |           40 |
|    5 | Accept |      6.3321 |      1.7526 |      2.9726 |      2.9715 |      LSBoost |           55 |     0.001005 |            2 |
|    6 | Best   |      2.9714 |      1.1579 |      2.9714 |      2.9715 |          Bag |           39 |            - |            1 |
|    7 | Best   |      2.9615 |      1.5733 |      2.9615 |      2.9681 |          Bag |           55 |            - |            1 |
|    8 | Accept |      3.0499 |     0.32211 |      2.9615 |      2.9873 |          Bag |           10 |            - |            1 |
|    9 | Accept |      2.9855 |      12.596 |      2.9615 |      2.9633 |          Bag |          500 |            - |            1 |
|   10 | Best   |       2.928 |      7.6517 |       2.928 |      2.9317 |          Bag |          282 |            - |            2 |
|   11 | Accept |      2.9362 |      8.0622 |       2.928 |      2.9336 |          Bag |          304 |            - |            2 |
|   12 | Accept |      2.9316 |      6.9208 |       2.928 |      2.9327 |          Bag |          247 |            - |            2 |
|   13 | Best   |      2.9215 |      6.9252 |      2.9215 |      2.9299 |          Bag |          242 |            - |            2 |
|   14 | Accept |      4.1882 |      14.861 |      2.9215 |      2.9298 |      LSBoost |          498 |     0.011265 |           50 |
|   15 | Accept |      4.1881 |       14.99 |      2.9215 |      2.9297 |      LSBoost |          497 |     0.075987 |           50 |
|   16 | Accept |      3.6293 |      1.0081 |      2.9215 |      2.9297 |      LSBoost |           24 |      0.95396 |            1 |
|   17 | Accept |      4.1881 |      2.9224 |      2.9215 |      2.9296 |      LSBoost |           92 |      0.95228 |           49 |
|   18 | Accept |      3.3804 |     0.53025 |      2.9215 |      2.9296 |      LSBoost |           12 |      0.16163 |            1 |
|   19 | Accept |      3.5064 |      14.503 |      2.9215 |      2.9296 |      LSBoost |          473 |     0.043212 |            1 |
|   20 | Accept |      3.5342 |      14.337 |      2.9215 |      2.9296 |      LSBoost |          487 |      0.24602 |            1 |
|===================================================================================================================================|
| Iter | Eval   | Objective:  | Objective   | BestSoFar   | BestSoFar   |       Method | NumLearningC-|    LearnRate |  MinLeafSize |
|      | result | log(1+loss) | runtime     | (observed)  | (estim.)    |              | ycles        |              |              |
|===================================================================================================================================|
|   21 | Accept |      2.9413 |        6.02 |      2.9215 |      2.9319 |          Bag |          222 |            - |            2 |
|   22 | Accept |      2.9313 |      12.732 |      2.9215 |       2.931 |          Bag |          500 |            - |            2 |
|   23 | Accept |      2.9496 |       10.56 |      2.9215 |      2.9332 |          Bag |          395 |            - |            2 |
|   24 | Accept |      6.2871 |     0.46442 |      2.9215 |      2.9333 |      LSBoost |           10 |    0.0077899 |            1 |
|   25 | Accept |      3.5075 |      15.129 |      2.9215 |      2.9333 |      LSBoost |          488 |     0.092689 |            1 |
|   26 | Accept |      3.1057 |     0.57019 |      2.9215 |      2.9332 |      LSBoost |           11 |      0.37151 |            6 |
|   27 | Accept |      3.3708 |     0.46133 |      2.9215 |      2.9332 |      LSBoost |           10 |      0.18122 |            6 |
|   28 | Accept |      3.3523 |     0.49273 |      2.9215 |      2.9333 |      LSBoost |           10 |      0.40692 |            2 |
|   29 | Accept |      3.6144 |      15.255 |      2.9215 |      2.9331 |      LSBoost |          497 |      0.44774 |            7 |
|   30 | Accept |      3.2239 |     0.50452 |      2.9215 |      2.9331 |      LSBoost |           10 |      0.31373 |           36 |

Figure contains an axes. The axes with title Min objective vs. Number of function evaluations contains 2 objects of type line. These objects represent Min observed objective, Estimated min objective.

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 234.2022 seconds
Total objective function evaluation time: 188.0911

Best observed feasible point:
    Method    NumLearningCycles    LearnRate    MinLeafSize
    ______    _________________    _________    ___________

     Bag             242              NaN            2     

Observed objective function value = 2.9215
Estimated objective function value = 2.9329
Function evaluation time = 6.9252

Best estimated feasible point (according to models):
    Method    NumLearningCycles    LearnRate    MinLeafSize
    ______    _________________    _________    ___________

     Bag             282              NaN            2     

Estimated objective function value = 2.9331
Estimated function evaluation time = 7.7082
Mdl = 
  RegressionBaggedEnsemble
                         ResponseName: 'Y'
                CategoricalPredictors: []
                    ResponseTransform: 'none'
                      NumObservations: 94
    HyperparameterOptimizationResults: [1x1 BayesianOptimization]
                           NumTrained: 282
                               Method: 'Bag'
                         LearnerNames: {'Tree'}
                 ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'
                              FitInfo: []
                   FitInfoDescription: 'None'
                       Regularization: []
                            FResample: 1
                              Replace: 1
                     UseObsForLearner: [94x282 logical]


  Properties, Methods

Оптимизация искала методы регрессии (Bag и LSBoost), над NumLearningCycles, по LearnRate для LSBoostи над учеником дерева MinLeafSize. Выходом является регрессия ансамбля с минимальными расчетными потерями перекрестной валидации.

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

Этот пример вручную находит оптимальные параметры при помощи опции перекрестной валидации ('KFold' аргумент пары "имя-значение") и kfoldLoss функция. Также можно использовать 'OptimizeHyperparameters' аргумент пары "имя-значение" для автоматической оптимизации гиперпараметров. См. «Оптимизация регрессионного ансамбля».

Загрузите carsmall набор данных. Выберите количество цилиндров, объем, перемещаемый цилиндрами, лошадиную силу и вес в качестве предикторов экономии топлива.

load carsmall
Tbl = table(Cylinders,Displacement,Horsepower,Weight,MPG);

Значения по умолчанию для древовидных контроллеров глубины для увеличения регрессионых деревьев:

  • 10 для MaxNumSplits.

  • 5 для MinLeafSize

  • 10 для MinParentSize

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

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

  2. Оцените перекрестно проверенную среднеквадратичную ошибку (MSE) для каждого ансамбля.

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

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

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

rng(1) % For reproducibility
MdlDeep = fitrtree(Tbl,'MPG','CrossVal','on','MergeLeaves','off', ...
    'MinParentSize',1,'Surrogate','on');
MdlStump = fitrtree(Tbl,'MPG','MaxNumSplits',1,'CrossVal','on', ...
    'Surrogate','on');

Перекрестная валидация ансамбля из 150 ускоренных регрессионых деревьев с помощью 5-кратной перекрестной валидации. Использование шаблона дерева:

  • Варьируйте максимальное количество разделений, используя значения в последовательности {20,21,...,2m}. m таково, что 2m не больше n-1.

  • Включите суррогатные расщепления.

Для каждого варианта настройте скорость обучения, используя каждое значение в наборе {0,1, 0,25, 0,5, 1}.

n = size(Tbl,1);
m = floor(log2(n - 1));
learnRate = [0.1 0.25 0.5 1];
numLR = numel(learnRate);
maxNumSplits = 2.^(0:m);
numMNS = numel(maxNumSplits);
numTrees = 150;
Mdl = cell(numMNS,numLR);

for k = 1:numLR
    for j = 1:numMNS
        t = templateTree('MaxNumSplits',maxNumSplits(j),'Surrogate','on');
        Mdl{j,k} = fitrensemble(Tbl,'MPG','NumLearningCycles',numTrees, ...
            'Learners',t,'KFold',5,'LearnRate',learnRate(k));
    end
end

Оценка совокупного, перекрестно проверенного MSE каждого ансамбля.

kflAll = @(x)kfoldLoss(x,'Mode','cumulative');
errorCell = cellfun(kflAll,Mdl,'Uniform',false);
error = reshape(cell2mat(errorCell),[numTrees numel(maxNumSplits) numel(learnRate)]);
errorDeep = kfoldLoss(MdlDeep);
errorStump = kfoldLoss(MdlStump);

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

mnsPlot = [1 round(numel(maxNumSplits)/2) numel(maxNumSplits)];
figure;
for k = 1:3
    subplot(2,2,k)
    plot(squeeze(error(:,mnsPlot(k),:)),'LineWidth',2)
    axis tight
    hold on
    h = gca;
    plot(h.XLim,[errorDeep errorDeep],'-.b','LineWidth',2)
    plot(h.XLim,[errorStump errorStump],'-.r','LineWidth',2)
    plot(h.XLim,min(min(error(:,mnsPlot(k),:))).*[1 1],'--k')
    h.YLim = [10 50];    
    xlabel('Number of trees')
    ylabel('Cross-validated MSE')
    title(sprintf('MaxNumSplits = %0.3g', maxNumSplits(mnsPlot(k))))
    hold off
end
hL = legend([cellstr(num2str(learnRate','Learning Rate = %0.2f')); ...
        'Deep Tree';'Stump';'Min. MSE']);
hL.Position(1) = 0.6;

Figure contains 3 axes. Axes 1 with title MaxNumSplits = 1 contains 7 objects of type line. Axes 2 with title MaxNumSplits = 8 contains 7 objects of type line. Axes 3 with title MaxNumSplits = 64 contains 7 objects of type line. These objects represent Learning Rate = 0.10, Learning Rate = 0.25, Learning Rate = 0.50, Learning Rate = 1.00, Deep Tree, Stump, Min. MSE.

Каждая кривая содержит минимальное перекрестное подтверждение MSE, происходящее при оптимальном количестве деревьев в ансамбле.

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

[minErr,minErrIdxLin] = min(error(:));
[idxNumTrees,idxMNS,idxLR] = ind2sub(size(error),minErrIdxLin);
fprintf('\nMin. MSE = %0.5f',minErr)
Min. MSE = 16.77593
fprintf('\nOptimal Parameter Values:\nNum. Trees = %d',idxNumTrees);
Optimal Parameter Values:
Num. Trees = 78
fprintf('\nMaxNumSplits = %d\nLearning Rate = %0.2f\n',...
    maxNumSplits(idxMNS),learnRate(idxLR))
MaxNumSplits = 1
Learning Rate = 0.25

Создайте прогнозирующий ансамбль на основе оптимальных гиперпараметров и всего набора обучающих данных.

tFinal = templateTree('MaxNumSplits',maxNumSplits(idxMNS),'Surrogate','on');
MdlFinal = fitrensemble(Tbl,'MPG','NumLearningCycles',idxNumTrees, ...
    'Learners',tFinal,'LearnRate',learnRate(idxLR))
MdlFinal = 
  RegressionEnsemble
           PredictorNames: {1x4 cell}
             ResponseName: 'MPG'
    CategoricalPredictors: []
        ResponseTransform: 'none'
          NumObservations: 94
               NumTrained: 78
                   Method: 'LSBoost'
             LearnerNames: {'Tree'}
     ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'
                  FitInfo: [78x1 double]
       FitInfoDescription: {2x1 cell}
           Regularization: []


  Properties, Methods

MdlFinal является RegressionEnsemble. Чтобы предсказать экономию топлива автомобиля, учитывая его количество цилиндров, объем, перемещаемый цилиндрами, мощность и вес, можно передать данные предиктора и MdlFinal на predict.

Вместо поиска оптимальных значений вручную с помощью опции перекрестной валидации ('KFold') и kfoldLoss функция, вы можете использовать 'OptimizeHyperparameters' аргумент пары "имя-значение". Когда вы задаете 'OptimizeHyperparameters', программное обеспечение автоматически находит оптимальные параметры, используя байесовскую оптимизацию. Оптимальные значения, полученные при помощи 'OptimizeHyperparameters' могут отличаться от полученных с помощью ручного поиска.

t = templateTree('Surrogate','on');
mdl = fitrensemble(Tbl,'MPG','Learners',t, ...
    'OptimizeHyperparameters',{'NumLearningCycles','LearnRate','MaxNumSplits'})
|====================================================================================================================|
| Iter | Eval   | Objective:  | Objective   | BestSoFar   | BestSoFar   | NumLearningC-|    LearnRate | MaxNumSplits |
|      | result | log(1+loss) | runtime     | (observed)  | (estim.)    | ycles        |              |              |
|====================================================================================================================|
|    1 | Best   |      3.3955 |       1.332 |      3.3955 |      3.3955 |           26 |     0.072054 |            3 |
|    2 | Accept |      6.0976 |      6.9885 |      3.3955 |      3.5549 |          170 |    0.0010295 |           70 |
|    3 | Best   |      3.2914 |      10.751 |      3.2914 |      3.2917 |          273 |      0.61026 |            6 |
|    4 | Accept |      6.1839 |      3.4531 |      3.2914 |      3.2915 |           80 |    0.0016871 |            1 |
|    5 | Best   |      3.0379 |      1.7951 |      3.0379 |      3.0384 |           18 |      0.21288 |           31 |
|    6 | Accept |       3.052 |      1.1116 |      3.0379 |      3.0401 |           28 |      0.18021 |           13 |
|    7 | Best   |      2.9642 |      2.2063 |      2.9642 |      2.9701 |           32 |      0.24179 |            5 |
|    8 | Best   |      2.9446 |      1.2017 |      2.9446 |      2.9413 |           21 |      0.25944 |            1 |
|    9 | Best   |      2.9387 |     0.73108 |      2.9387 |        2.94 |           18 |      0.26309 |            1 |
|   10 | Accept |      3.0469 |     0.87257 |      2.9387 |      2.9414 |           10 |      0.25476 |            1 |
|   11 | Accept |      3.0784 |     0.77319 |      2.9387 |      2.9408 |           11 |       0.9742 |            2 |
|   12 | Best   |      2.9367 |      1.6773 |      2.9367 |       2.942 |           25 |      0.47913 |            1 |
|   13 | Best   |      2.8952 |      1.2261 |      2.8952 |      2.9033 |           28 |       0.3572 |            1 |
|   14 | Accept |      2.9054 |     0.94135 |      2.8952 |      2.9041 |           29 |       0.3393 |            1 |
|   15 | Best   |      2.8928 |      1.4597 |      2.8928 |      2.9007 |           28 |        0.355 |            1 |
|   16 | Accept |      2.9008 |      1.3572 |      2.8928 |      2.9006 |           31 |      0.34654 |            1 |
|   17 | Accept |      2.8939 |      1.5636 |      2.8928 |      2.8991 |           26 |      0.35626 |            1 |
|   18 | Accept |      2.9109 |     0.95378 |      2.8928 |      2.8999 |           22 |      0.35898 |            1 |
|   19 | Accept |      2.9078 |      1.1717 |      2.8928 |       2.901 |           31 |       0.3438 |            1 |
|   20 | Accept |      2.9139 |      1.7969 |      2.8928 |      2.9018 |           33 |      0.32636 |            1 |
|====================================================================================================================|
| Iter | Eval   | Objective:  | Objective   | BestSoFar   | BestSoFar   | NumLearningC-|    LearnRate | MaxNumSplits |
|      | result | log(1+loss) | runtime     | (observed)  | (estim.)    | ycles        |              |              |
|====================================================================================================================|
|   21 | Accept |       2.901 |     0.97123 |      2.8928 |      2.9016 |           24 |      0.36235 |            1 |
|   22 | Accept |      6.4217 |     0.45103 |      2.8928 |       2.902 |           10 |    0.0010438 |            2 |
|   23 | Accept |       6.232 |     0.81571 |      2.8928 |      2.9007 |           10 |     0.010918 |            1 |
|   24 | Accept |      2.9491 |     0.70086 |      2.8928 |      2.9004 |           10 |      0.45635 |            2 |
|   25 | Accept |      2.8951 |      15.429 |      2.8928 |      2.9005 |          406 |     0.093798 |            1 |
|   26 | Accept |      2.9079 |      14.399 |      2.8928 |      2.9007 |          478 |       0.1292 |            1 |
|   27 | Best   |      2.8923 |      9.3649 |      2.8923 |      2.9008 |          221 |      0.11307 |            1 |
|   28 | Accept |      3.1867 |      13.217 |      2.8923 |      2.9021 |          309 |      0.10879 |           83 |
|   29 | Accept |      3.1689 |     0.48561 |      2.8923 |      2.9021 |           11 |       0.5454 |           98 |
|   30 | Accept |      2.9006 |      3.8922 |      2.8923 |      2.9016 |          102 |      0.20979 |            1 |

Figure contains an axes. The axes with title Min objective vs. Number of function evaluations contains 2 objects of type line. These objects represent Min observed objective, Estimated min objective.

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 152.6867 seconds
Total objective function evaluation time: 103.0901

Best observed feasible point:
    NumLearningCycles    LearnRate    MaxNumSplits
    _________________    _________    ____________

           221            0.11307          1      

Observed objective function value = 2.8923
Estimated objective function value = 2.8927
Function evaluation time = 9.3649

Best estimated feasible point (according to models):
    NumLearningCycles    LearnRate    MaxNumSplits
    _________________    _________    ____________

           29             0.3393           1      

Estimated objective function value = 2.9016
Estimated function evaluation time = 1.4054
mdl = 
  RegressionEnsemble
                       PredictorNames: {1x4 cell}
                         ResponseName: 'MPG'
                CategoricalPredictors: []
                    ResponseTransform: 'none'
                      NumObservations: 94
    HyperparameterOptimizationResults: [1x1 BayesianOptimization]
                           NumTrained: 29
                               Method: 'LSBoost'
                         LearnerNames: {'Tree'}
                 ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'
                              FitInfo: [29x1 double]
                   FitInfoDescription: {2x1 cell}
                       Regularization: []


  Properties, Methods

Входные параметры

свернуть все

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

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

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

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

Примечание

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

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

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

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

Типы данных: 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 должно быть равным.

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

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'NumLearningCycles',500,'Method','Bag','Learners',templateTree(),'CrossVal','on' перекрестная проверка ансамбля из 500 упакованных регрессионых деревьев с помощью 10-кратной перекрестной валидации.

Примечание

Вы не можете использовать какой-либо аргумент пары "имя-значение" перекрестной проверки наряду с 'OptimizeHyperparameters' аргумент пары "имя-значение". Можно изменить перекрестную валидацию для 'OptimizeHyperparameters' только при помощи 'HyperparameterOptimizationOptions' аргумент пары "имя-значение".

Общие опции ансамбля

свернуть все

Метод агрегации ансамбля, заданный как разделенная разделенными запятой парами, состоящая из 'Method' и 'LSBoost' или 'Bag'.

ЗначениеМетодПримечания
'LSBoost'Ускорение методом наименьших квадратов (LSBoost)Можно задать скорость обучения для усадки при помощи 'LearnRate' аргумент пары "имя-значение".
'Bag'Агрегация Bootstrap (упаковка, например, случайного леса [2])fitrensemble использует упаковку в мешки со случайными выборами предиктора при каждом разделении (случайный лес) по умолчанию. Чтобы использовать пакетирование без случайных выборок, используйте учеников дерева, чья 'NumVariablesToSample' значение 'all'.

Для получения дополнительной информации об алгоритмах агрегации ансамбля и примерах смотрите Алгоритмы, Алгоритмы ансамбля и Выбор применимого метода агрегации ансамбля.

Пример: 'Method','Bag'

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

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

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

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

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

Слабые ученики для использования в ансамбле, заданные как разделенная разделенными запятой парами, состоящая из 'Learners' и 'tree', объект шаблона дерева или вектор камер объектов шаблона дерева.

  • 'tree' (по умолчанию) - fitrensemble использует учащихся дерева регрессии по умолчанию, что аналогично использованию templateTree(). Значения по умолчанию templateTree() зависят от значения 'Method'.

    • Для упакованных деревьев принятия решений максимальное количество разделений решений ('MaxNumSplits') n–1, где n количество наблюдений. Количество предикторов для случайного выбора для каждого разделения ('NumVariablesToSample') составляет треть от числа предикторов. Поэтому, fitrensemble выращивает глубокие деревья решений. Можно выращивать более мелкие деревья, чтобы уменьшить сложность модели или время расчетов.

    • Для повышенных деревьев принятия решений, 'MaxNumSplits' равен 10 и 'NumVariablesToSample' является 'all'. Поэтому, fitrensemble произрастает мелкие деревья принятия решений. Можно выращивать более глубокие деревья для лучшей точности.

    Посмотрите templateTree для настроек по умолчанию слабого учащегося.

  • Объект шаблона дерева - fitrensemble использует объект шаблона дерева, созданный templateTree. Используйте аргументы пары "имя-значение" templateTree для задания настроек учащихся дерева.

  • Вектор камер m объектов шаблона дерева - fitrensemble растет m деревьев регрессии за цикл обучения (см NumLearningCycles). Например, для ансамбля, составленного из двух типов регрессионых деревьев, поставляйте {t1 t2}, где t1 и t2 возвращаются ли объекты шаблона регрессионного дерева templateTree.

Чтобы получить воспроизводимые результаты, необходимо задать 'Reproducible' Аргумент пары "имя-значение" из templateTree как true если 'NumVariablesToSample' не 'all'.

Для получения дополнительной информации о количестве учащихся для обучения смотрите NumLearningCycles и советы.

Пример: 'Learners',templateTree('MaxNumSplits',5)

Частота распечатки, заданная как разделенная разделенными запятой парами, состоящая из 'NPrint' и положительное целое или 'off'.

Чтобы отследить количество слабых учащихся или складок, которые fitrensemble обучен до сих пор, задайте положительное целое число. То есть, если вы задаете положительное целое m:

  • Не задавая также какую-либо опцию перекрестной валидации (для примера, CrossVal), затем fitrensemble отображает сообщение в командной строке каждый раз, когда оно завершает обучение m слабых учащихся.

  • И опция перекрестной валидации, затем fitrensemble отображает сообщение в командной строке каждый раз, когда оно заканчивает обучение m складывается.

Если вы задаете 'off', затем fitrensemble не отображает сообщение, когда оно завершает обучение слабых учащихся.

Совет

Для самой быстрой подготовки некоторых повышенных деревьев решений установите NPrint к значению по умолчанию 'off'. Этот советы сохраняются при классификации Method является 'AdaBoostM1', 'AdaBoostM2', 'GentleBoost', или 'LogitBoost', или когда регрессия Method является 'LSBoost'.

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

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

Количество интервалов для числовых предикторов, заданное как разделенная разделенными запятой парами, состоящая из 'NumBins' и положительный целочисленный скаляр.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

По умолчанию, если данные предиктора находятся в таблице (Tbl), fitrensemble принимает, что переменная категориальна, если это логический вектор, неупорядоченный категориальный вектор, символьный массив, строковые массивы или массив ячеек из векторов символов. Если данные предиктора являются матрицей (X), fitrensemble принимает, что все предикторы непрерывны. Чтобы идентифицировать любые другие предикторы как категориальные предикторы, задайте их с помощью 'CategoricalPredictors' аргумент имя-значение.

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

    • PredictorNames должен быть подмножеством Tbl.Properties.VariableNames и не может включать имя переменной отклика.

    • По умолчанию PredictorNames содержит имена всех переменных предиктора.

    • Хорошей практикой является определение предикторов для обучения с использованием любой из 'PredictorNames' или formula, но не то и другое.

Пример: 'PredictorNames',{'SepalLength','SepalWidth','PetalLength','PetalWidth'}

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

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

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

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

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

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

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

Пример: Предположим, что вы создаете указатель на функцию, который применяет экспоненциальное преобразование к вектору входа при помощи myfunction = @(y)exp(y). Затем можно задать преобразование отклика следующим 'ResponseTransform',myfunction.

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

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

свернуть все

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

Для примера, использующего воспроизводимое параллельное обучение, смотрите Train Classification Ensemble in Parallel.

Для двухъядерных систем и выше, fitrensemble параллелизирует обучение с помощью 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'

Другие опции регрессии

свернуть все

Веса наблюдений, заданные как разделенная разделенными запятой парами, состоящая из 'Weights' и числовой вектор положительных значений или имени переменной в Tbl. Программа взвешивает наблюдения в каждой строке X или Tbl с соответствующим значением в Weights. Размер Weights должно равняться количеству строк X или Tbl.

Если вы задаете входные данные как таблицу Tbl, затем Weights может быть именем переменной в Tbl который содержит числовой вектор. В этом случае необходимо задать Weights как вектор символов или строковый скаляр. Для примера, если вектор весов W хранится как Tbl.W, затем укажите его следующим 'W'. В противном случае программное обеспечение обрабатывает все столбцы Tbl, включая W, как предикторы или реакция при обучении модели.

Программное обеспечение нормализует значения Weights в сумму до 1.

По умолчанию 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.

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

свернуть все

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

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

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

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

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

свернуть все

Оптимизируемые параметры, заданные как разделенная разделенными запятой парами, состоящая из 'OptimizeHyperparameters' и одно из следующих:

  • 'none' - Не оптимизировать.

  • 'auto' - Использовать {'Method','NumLearningCycles','LearnRate'} наряду с параметрами по умолчанию для заданного Learners:

    • Learners = 'tree' (по умолчанию) - {'MinLeafSize'}

    Примечание

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

  • 'all' - Оптимизируйте все подходящие параметры.

  • Строковые массивы или массив ячеек из допустимых имен параметров

  • Вектор optimizableVariable объекты, как правило, выходные данные hyperparameters

Оптимизация пытается минимизировать потери перекрестной валидации (ошибка) для fitrensemble путем изменения параметров. Чтобы контролировать тип перекрестной валидации и другие аспекты оптимизации, используйте HyperparameterOptimizationOptions Пара "имя-значение".

Примечание

'OptimizeHyperparameters' значения переопределяют все значения, которые вы устанавливаете, используя другие аргументы пары "имя-значение". Для примера установка 'OptimizeHyperparameters' на 'auto' вызывает 'auto' значения для применения.

Подходящие параметры для fitrensemble являются:

  • Method - Приемлемые методы 'Bag' или 'LSBoost'.

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

  • LearnRatefitrensemble поиск среди положительных реалов, по умолчанию логарифмический с областью значений [1e-3,1].

  • MinLeafSizefitrensemble поиск среди целых чисел, логарифмированных в области значений [1,max(2,floor(NumObservations/2))].

  • MaxNumSplitsfitrensemble поиск среди целых чисел, логарифмированных в области значений [1,max(2,NumObservations-1)].

  • NumVariablesToSamplefitrensemble поиск среди целых чисел в области значений [1,max(2,NumPredictors)].

Установите параметры nondefault путем передачи вектора optimizableVariable объекты, которые имеют значения nondefault. Для примера,

load carsmall
params = hyperparameters('fitrensemble',[Horsepower,Weight],MPG,'Tree');
params(4).Range = [1,20];

Передайте params как значение OptimizeHyperparameters.

По умолчанию итеративное отображение появляется в командной строке, и графики появляются согласно количеству гиперпараметров в оптимизации. Для оптимизации и графиков целевой функцией является журнал ( 1 + потери перекрестной валидации) для регрессии и коэффициент неправильной классификации для классификации. Чтобы управлять итеративным отображением, установите Verbose поле 'HyperparameterOptimizationOptions' аргумент пары "имя-значение". Чтобы управлять графиками, установите ShowPlots поле 'HyperparameterOptimizationOptions' аргумент пары "имя-значение".

Для получения примера смотрите Optimize Regression Ensemble.

Пример: '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 Настройка
RegressionBaggedEnsembleНет'Bag''on'
RegressionEnsembleНет'LSBoost''off'
RegressionPartitionedEnsembleДа'LSBoost' или 'Bag''off' или 'on'

Аргументы пары "имя-значение", которые управляют перекрестной проверкой CrossVal, Holdout, KFold, Leaveout, и CVPartition.

Ссылка на свойства Mdl, используйте запись через точку. Для примера, чтобы получить доступ или отобразить вектор камеры слабых объектов модели учащегося для ансамбля, который не был перекрестно проверен, введите Mdl.Trained в командной строке.

Совет

  • NumLearningCycles может варьироваться от нескольких десятков до нескольких тысяч. Обычно ансамбль с хорошей прогностической степенью требует от нескольких сотен до нескольких тысяч слабых учащихся. Однако вам не придется обучать ансамбль для того, чтобы было сразу много циклов. Можно начать с того, что вырастить несколько десятков учащихся, осмотреть эффективность ансамбля и затем, при необходимости, обучить более слабых учащихся, используя resume.

  • Эффективность ансамбля зависит от обстановки ансамбля и настройки слабых учащихся. То есть, если вы задаете слабых учащихся с параметрами по умолчанию, то ансамбль может выступить плохо. Поэтому, как и настройки ансамбля, рекомендуется настроить параметры слабых учащихся с помощью шаблонов и выбрать значения, которые минимизируют ошибку обобщения.

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

  • После обучения модели можно сгенерировать код C/C + +, который предсказывает ответы для новых данных. Для генерации кода C/C + + требуется MATLAB Coder™. Для получения дополнительной информации смотрите Введение в генерацию кода .

Алгоритмы

  • Для получения дополнительной информации об алгоритмах агрегации ансамблей смотрите Ensemble Algorithms.

  • Если вы задаете 'Method','LSBoost', затем программное обеспечение по умолчанию растёт мелкими деревьями решений. Можно настроить глубину дерева, задав MaxNumSplits, MinLeafSize, и MinParentSize Аргументы пары "имя-значение" с использованием templateTree.

  • Для двухъядерных систем и выше, fitrensemble параллелизирует обучение с использованием 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. and R. E. Schapire. Теоретически решающее обобщение онлайн-обучения и приложение к бустингу. J. Computer and System Sciences, Vol. 55, pp. 119-139, 1997.

[4] Фридман, Дж. «Жадное приближение функций: градиентная бустерная машина». Анналы статистики, том 29, № 5, стр. 1189 - 1232, 2001.

[5] Хасти, Т., Р. Тибширани и Дж. Фридман. Раздел «Элементы статистического обучения», Спрингер, Нью-Йорк, 2008 год.

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

Введенный в R2016b