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 классификатор ансамбля.

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

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 ®, можно получить тот же результат путем ввода

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

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

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);

Сравните MSE реституции между 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 классификатор ансамбля.

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

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

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

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

Другой подход к оптимизации этого ансамбля смотрите в Optimize a Boosted Regression Ensemble.

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

свернуть все

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

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

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

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

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

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

    • 'AdaBoostM1'

    • 'LogitBoost'

    • 'GentleBoost'

    • 'RobustBoost' (Требует 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' для задач классификации и регрессии.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

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

Использование ClassNames кому:

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

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

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

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

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

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

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

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

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

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

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

По умолчанию это таковые (K) - глаз (K), где K - количество различных классов.

Примечание

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 не имеет эффекта.

Пример: '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 выборки s* m наблюдения от каждого класса, то есть он использует одну и ту же пропорцию дискретизации для каждого класса. Для получения дополнительной информации см. «Алгоритмы».

  • Если вы задаете числовой вектор [s1, s2..., sK], затем fitensemble выборки si* m наблюдения из i классов, i = 1..., K. Элементы RatioToSmallest соответствуют порядку имен классов, заданных с помощью ClassNames (см. «Советы»).

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

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

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

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

свернуть все

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

Совет

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

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

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

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

свернуть все

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

Совет

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

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

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

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

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

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

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

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

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

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

свернуть все

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

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

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

свернуть все

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

Объект модели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' и:

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

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

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

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

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

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

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

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

Алгоритмы

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

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

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

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

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

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

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

Ссылки

[1] Breiman, L. «Bagging Predictors». Машинное обучение. Том 26, стр. 123-140, 1996.

[2] Breiman, L. «Random Forests». Машинное обучение. Том 45, стр. 5-32, 2001.

[3] Freund, Y. «Более надежный алгоритм усиления». arXiv:0905.2138v1, 2009.

[4] Freund, Y. and R. E. Schapire. Теоретически решающее обобщение онлайн-обучения и приложение к бустингу. J. Computer and System Sciences, Vol. 55, pp. 119-139, 1997.

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

[6] Фридман, Дж., Т. Хасти и Р. Тибширани. «Аддитивная логистическая регрессия: статистический взгляд на увеличение». Анналы статистики, том 28, № 2, стр. 337 - 407, 2000.

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

[8] Ho, T. K. «Метод случайного подпространства для построения лесов для принятия решений». Транзакции IEEE по анализу шаблонов и машинной разведке, том 20, № 8, стр. 832-844, 1998.

[9] Schapire, R. E., Y. Freund, P. Bartlett, and W.S. Lee. «Увеличение разницы: новое объяснение эффективности методов голосования». Анналы статистики, том 26, № 5, стр. 1651 - 1686, 1998.

[10] Seiffert, C., T. Khoshgoftaar, J. Hulse, and A. Napolitano. «RUSBoost: повышение эффективности классификации при искажении обучающих данных». 19-я Международная конференция по распознаванию шаблона, стр. 1-4, 2008.

[11] Warmuth, M., J. Liao, and G. Ratsch. «Полностью корректирующие алгоритмы повышения, которые максимизируют запас». Proc. 23-й Int 'l. Конф. по машинному обучению, ACM, Нью-Йорк, стр. 1001-1008, 2006.

Введенный в R2011a