fitensemble

Подходящий ансамбль учеников для классификации и регрессии

Описание

fitensemble может повысить или ученики дерева решений сумки или классификаторы дискриминантного анализа. Функция может также обучить случайные ансамбли подпространства классификаторов дискриминантного анализа или KNN.

Для более простые интерфейсы, которые соответствуют классификации и ансамблям регрессии, вместо этого используйте fitcensemble и fitrensemble, соответственно. Кроме того, fitcensemble и fitrensemble предоставьте возможности для Байесовой оптимизации.

пример

Mdl = fitensemble(Tbl,ResponseVarName,Method,NLearn,Learners) возвращает обученный объект модели ансамбля, который содержит результаты подбора кривой ансамблю NLearn классификация или ученики регрессии (Learners) ко всем переменным в таблице Tbl. ResponseVarName имя переменной отклика в Tbl. Method метод агрегации ансамбля.

пример

Mdl = fitensemble(Tbl,formula,Method,NLearn,Learners) подбирает модель, заданную formula.

пример

Mdl = fitensemble(Tbl,Y,Method,NLearn,Learners) обработки все переменные в Tbl как переменные предикторы. Y переменная отклика, которая не находится в Tbl.

пример

Mdl = fitensemble(X,Y,Method,NLearn,Learners) обучает ансамбль, использующий данные о предикторе в X и данные об ответе в Y.

пример

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

Примеры

свернуть все

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

Загрузите ionosphere набор данных.

load ionosphere;

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

ClassTreeEns = fitensemble(X,Y,'AdaBoostM1',100,'Tree');

ClassTreeEns обученный ClassificationEnsemble классификатор ансамбля.

Определите совокупные потери перезамены (i.e., совокупная misclassification ошибка меток в обучающих данных).

rsLoss = resubLoss(ClassTreeEns,'Mode','Cumulative');

rsLoss 100 1 вектор, где элемент k содержит потерю перезамены после первого k изучение циклов.

Постройте совокупную потерю перезамены по количеству изучения циклов.

plot(rsLoss);
xlabel('Number of Learning Cycles');
ylabel('Resubstitution Loss');

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

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

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

  1. Случайным образом деля данные в наборы обучения и перекрестной проверки. Сделайте это путем определения 'holdout',holdoutProportion когда вы обучаете ансамбль, использующий fitensemble.

  2. Передача обученного ансамбля к kfoldLoss, который оценивает ошибку обобщения.

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

Загрузите carsmall набор данных. Храните обучающие данные в таблице.

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

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

t = templateTree('Surrogate','On');

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

Mdl1 = fitensemble(Tbl,'MPG','LSBoost',100,t);

Mdl1 обученный RegressionEnsemble ансамбль регрессии. Поскольку MPG переменная в MATLAB® Workspace, можно получить тот же результат путем ввода

Mdl1 = fitensemble(Tbl,MPG,'LSBoost',100,t);

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

predMPG = predict(Mdl1,[4 200 150 3000])
predMPG = 22.8462

Средняя экономия топлива автомобиля с этими техническими требованиями составляет 21,78 мили на галлон.

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

formula = 'MPG ~ Cylinders + Horsepower + Weight';
Mdl2 = fitensemble(Tbl,formula,'LSBoost',100,t);

Сравните перезамену MSEs между Mdl1 и Mdl2.

mse1 = resubLoss(Mdl1)
mse1 = 6.4721
mse2 = resubLoss(Mdl2)
mse2 = 7.8599

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

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

Загрузите ionosphere набор данных.

load ionosphere;

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

rng(2); % For reproducibility
ClassTreeEns = fitensemble(X,Y,'AdaBoostM1',100,'Tree',...
    'Holdout',0.5);

ClassTreeEns обученный ClassificationEnsemble классификатор ансамбля.

Определите совокупную ошибку обобщения, i.e., совокупная misclassification ошибка меток в данных о валидации).

genError = kfoldLoss(ClassTreeEns,'Mode','Cumulative');

genError 100 1 вектор, где элемент k содержит ошибку обобщения после первого k изучение циклов.

Постройте ошибку обобщения по количеству изучения циклов.

plot(genError);
xlabel('Number of Learning Cycles');
ylabel('Generalization Error');

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

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

Можно управлять глубиной деревьев в ансамбле деревьев решений. Можно также управлять древовидной глубиной в модели ECOC, содержащей двоичных учеников дерева решений, использующих MaxNumSplits, MinLeafSize, или MinParentSize параметры пары "имя-значение".

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

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

Загрузите carsmall набор данных. Задайте переменные Acceleration, Displacement, Horsepower, и Weight как предикторы и MPG как ответ.

load carsmall
X = [Acceleration Displacement Horsepower Weight];
Y = MPG;

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

  • 1 для MaxNumSplits. Эта опция выращивает пни.

  • 5 для MinLeafSize

  • 10 для MinParentSize

Искать оптимальное количество разделений:

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

  2. Крест подтверждает ансамбли.

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

  4. Сравните перекрестный подтвержденный MSEs. Ансамбль с самым низким выполняет лучшее, и указывает на оптимальное максимальное количество разделений, количество деревьев и скорость обучения для набора данных.

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

MdlDeep = fitrtree(X,Y,'CrossVal','on','MergeLeaves','off',...
    'MinParentSize',1,'Surrogate','on');
MdlStump = fitrtree(X,Y,'MaxNumSplits',1,'CrossVal','on','Surrogate','on');

Обучите повышающие ансамбли, использующие 150 деревьев регрессии. Крест подтверждает ансамбль, использующий 5-кратную перекрестную проверку. Варьируйтесь максимальное количество разделений с помощью значений в последовательности {20,21,...,2m}, где m таков что 2m не больше, чем n - 1, где n является размером обучающей выборки. Для каждого варианта настройте скорость обучения к каждому значению в наборе {0.1, 0.25, 0.5, 1};

n = size(X,1);
m = floor(log2(n - 1));
lr = [0.1 0.25 0.5 1];
maxNumSplits = 2.^(0:m);
numTrees = 150;
Mdl = cell(numel(maxNumSplits),numel(lr));
rng(1); % For reproducibility
for k = 1:numel(lr);
    for j = 1:numel(maxNumSplits);
        t = templateTree('MaxNumSplits',maxNumSplits(j),'Surrogate','on');
        Mdl{j,k} = fitensemble(X,Y,'LSBoost',numTrees,t,...
            'Type','regression','KFold',5,'LearnRate',lr(k));
    end;
end;

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

kflAll = @(x)kfoldLoss(x,'Mode','cumulative');
errorCell = cellfun(kflAll,Mdl,'Uniform',false);
error = reshape(cell2mat(errorCell),[numTrees numel(maxNumSplits) numel(lr)]);
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(lr','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 = 18.42979
fprintf('\nOptimal Parameter Values:\nNum. Trees = %d',idxNumTrees);
Optimal Parameter Values:
Num. Trees = 1
fprintf('\nMaxNumSplits = %d\nLearning Rate = %0.2f\n',...
    maxNumSplits(idxMNS),lr(idxLR))
MaxNumSplits = 4
Learning Rate = 1.00

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

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

свернуть все

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

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

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

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

Примечание

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

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

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

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

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

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

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

Объяснительная модель переменной отклика и подмножество переменных предикторов в виде вектора символов или строкового скаляра в форме 'Y~x1+x2+x3'. В этой форме, Y представляет переменную отклика и x1x2 , и 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 должно быть равным. Если переменная отклика является символьным массивом, то каждый элемент должен соответствовать одной строке массива.

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

  • Для регрессии, Y должен быть числовой вектор-столбец.

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

Метод агрегации ансамбля в виде одних из имен методов в этом списке.

  • Для классификации с двумя классами:

    • 'AdaBoostM1'

    • 'LogitBoost'

    • 'GentleBoost'

    • 'RobustBoost' (требует Optimization Toolbox™),

    • 'LPBoost' (требует Optimization Toolbox),

    • 'TotalBoost' (требует Optimization Toolbox),

    • 'RUSBoost'

    • 'Subspace'

    • 'Bag'

  • Для классификации с тремя или больше классами:

    • 'AdaBoostM2'

    • 'LPBoost' (требует Optimization Toolbox),

    • 'TotalBoost' (требует Optimization Toolbox),

    • 'RUSBoost'

    • 'Subspace'

    • 'Bag'

  • Для регрессии:

    • 'LSBoost'

    • 'Bag'

Если вы задаете 'Method','Bag', затем задайте проблемный тип с помощью Type аргумент пары "имя-значение", потому что можно задать 'Bag' для классификации и проблем регрессии.

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

Количество ансамбля, изучающего циклы в виде положительного целого числа или 'AllPredictorCombinations'.

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

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

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

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

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

Слабые ученики, чтобы использовать в ансамбле в виде имени слабого ученика, объекта шаблона слабого ученика или массива ячеек объектов шаблона слабого ученика.

Слабый ученикИмя слабого ученикаФункция создания объекта шаблонаMethod Настройки
Дискриминантный анализ'Discriminant'templateDiscriminantРекомендуемый для 'Subspace'
k самые близкие соседи'KNN'templateKNNДля 'Subspace' только
Дерево решений'Tree'templateTreeВсе методы кроме 'Subspace'

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

Пример: Для ансамбля, состоявшего из двух типов деревьев классификации, предоставьте {t1 t2}, где t1 и t2 шаблоны дерева классификации.

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

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

Пример: 'CrossVal','on','LearnRate',0.05 задает, чтобы реализовать 10-кратную перекрестную проверку и использовать 0.05 как скорость обучения.
Общие опции ансамбля

свернуть все

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

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

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

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

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

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

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

Спецификация 'CategoricalPredictors' является соответствующим если:

  • 'Learners' задает древовидных учеников.

  • 'Learners' задает k - самые близкие ученики, где все предикторы являются категориальными.

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

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

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

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

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

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

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

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

Совет

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Контролируемый тип изучения в виде разделенной запятой пары, состоящей из 'Type' и 'classification' или 'regression'.

  • Если Method 'bag', затем контролируемый тип изучения неоднозначен. Поэтому задайте Type при укладывании в мешки.

  • В противном случае, значение Method определяет контролируемый тип изучения.

Пример: 'Type','classification'

Опции перекрестной проверки

свернуть все

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

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

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

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

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

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

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

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

  3. Сохраните k компактные, обученные модели в k- 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'

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

свернуть все

Имена классов, чтобы использовать для обучения в виде категориального, символа или массива строк; логический или числовой вектор; или массив ячеек из символьных векторов. ClassNames должен иметь совпадающий тип данных как переменную отклика в Tbl или Y.

Если ClassNames символьный массив, затем каждый элемент должен соответствовать одной строке массива.

Используйте ClassNames к:

  • Задайте порядок классов во время обучения.

  • Задайте порядок любой размерности аргумента ввода или вывода, которая соответствует порядку класса. Например, используйте ClassNames задавать порядок размерностей Cost или порядок следования столбцов классификационных оценок, возвращенных predict.

  • Выберите подмножество классов для обучения. Например, предположите что набор всех отличных имен классов в Y {'a','b','c'}. Обучать модель с помощью наблюдений от классов 'a' и 'c' только, задайте 'ClassNames',{'a','c'}.

Значение по умолчанию для ClassNames набор всех отличных имен классов в переменной отклика в Tbl или Y.

Пример: 'ClassNames',{'b','g'}

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

Стоимость Misclassification в виде разделенной запятой пары, состоящей из 'Cost' и квадратная матрица или структура. Если вы задаете:

  • Квадратная матрица Cost, затем Cost(i,j) стоимость классификации точки в класс j если его истинным классом является i. Таким образом, строки соответствуют истинному классу, и столбцы соответствуют предсказанному классу. Чтобы задать класс заказывают для соответствующих строк и столбцов Cost, также задайте ClassNames аргумент пары "имя-значение".

  • Структура S, затем это должно иметь два поля:

    • S.ClassNames, который содержит имена классов как переменную совпадающего типа данных как Y

    • S.ClassificationCosts, который содержит матрицу стоимости со строками и столбцами, упорядоченными как в S.ClassNames

Значением по умолчанию являются единицы (K) - глаз (K), где K количество отличных классов.

Примечание

fitensemble использование Cost настраивать предшествующие вероятности класса, заданные в Priorто, fitensemble использует настроенные априорные вероятности для обучения и сбрасывает матрицу стоимости к ее значению по умолчанию.

Пример: 'Cost',[0 1 2 ; 1 0 2; 2 2 0]

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

Априорные вероятности для каждого класса в виде разделенной запятой пары, состоящей из 'Prior' и значение в этой таблице.

ЗначениеОписание
'empirical'Априорные вероятности класса являются частотами родственника класса в Y.
'uniform'Все априорные вероятности класса равны 1/K, где K является количеством классов.
числовой векторКаждым элементом является априорная вероятность класса. Закажите элементы согласно Mdl.ClassNames или задайте порядок с помощью ClassNames аргумент пары "имя-значение". Программное обеспечение нормирует элементы, таким образом, что они суммируют к 1.
массив структур

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

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

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

fitensemble нормирует априорные вероятности в Prior суммировать к 1.

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

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

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

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

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

По умолчанию, Weights единицы (n,1), где n количество наблюдений в X или Tbl.

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

Выборка опций для повышения методов и укладывания в мешки

свернуть все

Часть набора обучающих данных, чтобы передискретизировать для каждого слабого ученика в виде разделенной запятой пары, состоящей из 'FResample' и положительная скалярная величина в (0,1].

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

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

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

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

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

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

Если вы не устанавливаете Method к 'bag' или набор Resample к 'on'замена не оказывает влияния.

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

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

  • Если Method повышающий метод, затем:

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

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

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

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

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

свернуть все

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

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

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

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

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

свернуть все

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

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

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

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

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

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

  • Если вы задаете положительный числовой скаляр sто fitensemble выборки sM наблюдения от каждого класса, то есть, это использует ту же пропорцию выборки для каждого класса. Для получения дополнительной информации см. Алгоритмы.

  • Если вы задаете числовой вектор [s1S2 ..., sK]то fitensemble выборки siM наблюдения от класса ii = 1..., K. Элементы RatioToSmallest соответствуйте порядку имен классов, заданных с помощью ClassNames (см. Советы).

Значением по умолчанию являются единицы (K,1), который задает, чтобы произвести m наблюдения от каждого класса.

Пример: 'RatioToSmallest',[2,1]

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

LPBoost и опции метода TotalBoost

свернуть все

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

Совет

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

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

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

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

свернуть все

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

Совет

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

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

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

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

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

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

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

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

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

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

свернуть все

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

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

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

свернуть все

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

Объект моделиType УстановкаЗадать какие-либо опции перекрестной проверки?Method УстановкаResample Установка
ClassificationBaggedEnsemble'classification'Нет'Bag''on'
ClassificationEnsemble'classification'НетЛюбой метод агрегации ансамбля для классификации'off'
ClassificationPartitionedEnsemble'classification'ДаЛюбой метод агрегации ансамбля классификации'off' или 'on'
RegressionBaggedEnsemble'regression'Нет'Bag''on'
RegressionEnsemble'regression'Нет'LSBoost''off'
RegressionPartitionedEnsemble'regression'Да'LSBoost' или 'Bag''off' или 'on'

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

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

Советы

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

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

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

  • В проблемах классификации (то есть, Type 'classification'):

    • Если метод агрегации ансамбля (Method) 'bag' и:

      • Стоимость misclassification (Cost) является очень неустойчивым, затем, для выборок в сумке, программное обеспечение сверхдискретизировало уникальные наблюдения от класса, который имеет большой штраф.

      • Априорные вероятности класса (Prior) высоко скашиваются, программное обеспечение сверхдискретизировало уникальные наблюдения от класса, который имеет большую априорную вероятность.

      Для меньших объемов выборки эти комбинации могут привести к низкой относительной частоте наблюдений из сумки от класса, который имеет большой штраф или априорную вероятность. Следовательно, предполагаемая ошибка из сумки является очень переменной, и она может затруднить, чтобы интерпретировать. Чтобы избежать больших предполагаемых ошибочных отклонений из сумки, особенно для размеров небольшой выборки, устанавливают более сбалансированную матрицу стоимости misclassification использование Cost или менее скошенный вектор априорной вероятности использование Prior.

    • Поскольку порядок некоторых аргументов ввода и вывода соответствует отличным классам в обучающих данных, это - хорошая практика, чтобы задать порядок класса с помощью ClassNames аргумент пары "имя-значение".

      • Чтобы определить порядок класса быстро, удалите все наблюдения из обучающих данных, которые являются несекретными (то есть, имейте недостающую метку), получите и отобразите массив всех отличных классов, и затем задайте массив для ClassNames. Например, предположите переменную отклика (Y) массив ячеек меток. Этот код задает порядок класса в переменной classNames.

        Ycat = categorical(Y);
        classNames = categories(Ycat)
        categorical присвоения <undefined> к несекретным наблюдениям и categories исключает <undefined> от его выхода. Поэтому, если вы используете этот код для массивов ячеек меток или подобный код для категориальных массивов, затем вы не должны удалять наблюдения с пропавшими без вести меток, чтобы получить список отличных классов.

      • Чтобы указать что порядок класса от представленной самым низким образом метки до наиболее представленного, затем быстро определите порядок класса (как в предыдущем маркере), но расположите классы в списке частотой прежде, чем передать список ClassNames. Следуя из предыдущего примера, этот код задает порядок класса от самого низкого - к наиболее представленному в classNamesLH.

        Ycat = categorical(Y);
        classNames = categories(Ycat);
        freq = countcats(Ycat);
        [~,idx] = sort(freq);
        classNamesLH = classNames(idx);

Алгоритмы

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

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

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

  • Для метода агрегации ансамбля RUSBoost (Method), аргумент пары "имя-значение" RatioToSmallest задает пропорцию выборки для каждого класса относительно представленного самым низким образом класса. Например, предположите, что существует два класса в обучающих данных: A и B. A имеет 100 наблюдений, и B имеют 10 наблюдений. Кроме того, предположите, что представленный самым низким образом класс имеет m наблюдения в обучающих данных.

    • Если вы устанавливаете 'RatioToSmallest',2, затем sM= 2*10 = 20 . Следовательно, fitensemble обучает каждого ученика, использующего 20 наблюдений от класса A и 20 наблюдений от класса B. Если вы устанавливаете 'RatioToSmallest',[2 2], затем вы получаете тот же результат.

    • Если вы устанавливаете 'RatioToSmallest',[2,1], затем s1M= 2*10 = 20 и s2M= 1*10 = 10 . Следовательно, fitensemble обучает каждого ученика, использующего 20 наблюдений от класса A и 10 наблюдений от класса B.

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

Ссылки

[1] Бреимен, L. “Укладывание в мешки Предикторов”. Машинное обучение. Издание 26, стр 123–140, 1996.

[2] Бреимен, L. “Случайные Леса”. Машинное обучение. Издание 45, стр 5–32, 2001.

[3] Freund, Y. “Более устойчивый повышающий алгоритм”. arXiv:0905.2138v1, 2009.

[4] Freund, Y. и Р. Э. Шапайр. “Теоретическое Решением Обобщение Дистанционного обучения и Приложения к Повышению”. J. Компьютерных и Системных Наук, Издания 55, стр 119–139, 1997.

[5] Фридман, J. “Жадное приближение функций: машина повышения градиента”. Летопись Статистики, Издания 29, № 5, стр 1189–1232, 2001.

[6] Фридман, J., Т. Хэсти и Р. Тибширэни. “Аддитивная логистическая регрессия: статистическое представление повышения”. Летопись Статистики, Издания 28, № 2, стр 337–407, 2000.

[7] Hastie, T., Р. Тибширэни и Дж. Фридман. Выпуск раздела Elements of Statistical Learning, Спрингер, Нью-Йорк, 2008.

[8] Хо, T. K. “Случайный метод подпространства для построения лесов решения”. Транзакции IEEE согласно Анализу Шаблона и Искусственному интеллекту, Изданию 20, № 8, стр 832–844, 1998.

[9] Schapire, R. E. И. Фреунд, П. Бартлетт и В.С. Ли. “Повышение поля: новое объяснение эффективности голосующих методов”. Летопись Статистики, Издания 26, № 5, стр 1651–1686, 1998.

[10] Seiffert, C., Т. Хошгофтаар, Дж. Хулс и А. Наполитано. “RUSBoost: Улучшание производительности классификации, когда обучающие данные скашивается”. 19-я Международная конференция по вопросам Распознавания образов, стр 1–4, 2008.

[11] Warmuth, M., Цз. Ляо и Г. Рэч. “Полностью корректирующие повышающие алгоритмы, которые максимизируют поле”. Proc. 23-й Int’l. Конференция по Машинному обучению, ACM, Нью-Йорк, стр 1001–1008, 2006.

Введенный в R2011a