exponenta event banner

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' аргумент пары имя-значение для числовых предикторов bin. После обучения вы можете воспроизвести связанные данные предиктора с помощью 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 значения NaNs.

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

Загрузить 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')

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

  • Измените максимальное количество разбиений, используя значения в последовательности {20,21,..., 2 m}. 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'Агрегация начальной загрузки (фасовка, например, случайного леса [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 выращивает м регрессионных деревьев за цикл обучения (см. NumLearningCycles). Например, для ансамбля, состоящего из двух типов регрессионных деревьев, поставка {t1 t2}, где t1 и t2 являются объектами шаблона дерева регрессии, возвращенными templateTree.

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

Подробные сведения о количестве обучающихся см. в разделе NumLearningCycles и Советы.

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

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

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

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

  • И вариант перекрестной проверки, то 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, а затем выращивает деревья по индексам bin вместо исходных данных.

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

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

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

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

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

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

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

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

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

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

Примечание

Параллельные вычисления Toolbox™ необходимы для параллельного вычисления.

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

Имя поляСтоимостьДефолт
UseParallel

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

false
UseSubstreams

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

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

false
StreamsУкажите это значение как RandStream объект или массив ячеек таких объектов. Использовать один объект, за исключением случаев, когда UseParallel значение равно true и UseSubstreams значение равно false. В этом случае используйте массив ячеек, размер которого совпадает с размером параллельного пула.Если не указать Streams, то fitrensemble использует поток или потоки по умолчанию.

Пример использования воспроизводимого параллельного обучения см. в разделе Ансамбль классификации поездов в параллельном режиме.

Для двухъядерных систем и выше, fitrensemble параллелизирует обучение с использованием стандартных блоков Intel ® Threading Building Blocks (TBB). Поэтому указание UseParallel вариант как true может не обеспечить значительное ускорение на одном компьютере. Подробные сведения о TBB Intel см. в разделе 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.

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

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

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

  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-by-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 является ones(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 поиск среди положительных целых чисел, по умолчанию log-scaled с диапазоном [10,500].

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

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

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

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

Установка параметров, не используемых по умолчанию, путем передачи вектора optimizableVariable объекты, не имеющие значений по умолчанию. Например,

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

Проход params как значение OptimizeHyperparameters.

По умолчанию итеративное отображение отображается в командной строке, а графики отображаются в соответствии с количеством гиперпараметров в оптимизации. Для оптимизации и графиков целевой функцией является log ( 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Логическое значение, указывающее, выполнять ли байесовскую оптимизацию параллельно, для чего требуется панель параллельных вычислений. Из-за непродуктивности параллельной синхронизации параллельная байесовская оптимизация не обязательно дает воспроизводимые результаты. Дополнительные сведения см. в разделе Параллельная байесовская оптимизация.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 + + требуется Coder™ MATLAB. Дополнительные сведения см. в разделе Введение в создание кода .

Алгоритмы

  • Подробные сведения о алгоритмах агрегации ансамбля см. в разделе Алгоритмы ансамбля.

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

  • Для двухъядерных систем и выше, fitrensemble параллелизует обучение с использованием Intel Threading Building Blocks (TBB). Подробные сведения о TBB Intel см. в разделе https://software.intel.com/en-us/intel-tbb.

Ссылки

[1] Брейман, Л. «Предикторы пакетирования». Машинное обучение. Том 26, стр. 123-140, 1996.

[2] Брейман, Л. «Случайные леса». Машинное обучение. Том 45, стр. 5-32, 2001.

[3] Фрейнд, Ю. и Р. Э. Шапайр. «Теоретическое обобщение онлайн-обучения и приложения для повышения». J. of Computer and System Sciences, Vol. 55, pp. 119-139, 1997.

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

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

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

Представлен в R2016b