exponenta event banner

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 регрессионных деревьев. Перекрестная проверка ансамбля с помощью пятикратной перекрестной проверки. Варьируйте максимальное количество разбиений, используя значения в последовательности {20,21,..., 2 m}, где m таковы, что 2 m не больше 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 представляет переменную ответа, и 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' (требуется панель инструментов оптимизации)

    • 'TotalBoost' (требуется панель инструментов оптимизации)

    • 'RUSBoost'

    • 'Subspace'

    • 'Bag'

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

    • 'AdaBoostM2'

    • 'LPBoost' (требуется панель инструментов оптимизации)

    • 'TotalBoost' (требуется панель инструментов оптимизации)

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

  • И вариант перекрестной проверки, то 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Флаг перекрестной проверки «оставить один», указанный как 'on' или 'off'. При указании 'Leaveout','on', то для каждого из n наблюдений (где n - количество наблюдений, исключая отсутствующие наблюдения, указанные в NumObservations свойство модели), программное обеспечение выполняет следующие действия:

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

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

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

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

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

свернуть все

Имена классов, используемых для обучения, указанные как категориальный, символьный или строковый массив; логический или числовой вектор; или массив ячеек символьных векторов. 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 если его истинный класс i. То есть строки соответствуют истинному классу, а столбцы - прогнозируемому классу. Определение порядка классов для соответствующих строк и столбцов Cost, также укажите ClassNames аргумент пары имя-значение.

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

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

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

Значение по умолчанию: ones(K) - eye(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 является ones(n,1), где n - количество наблюдений в X или Tbl.

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

Варианты отбора проб для бустерных методов и фасовки в мешки

свернуть все

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

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

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

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

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

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

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

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

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

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

  • Если Method является способом повышения, то:

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

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

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

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

Параметры методов 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 (см. Советы).

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

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

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

Параметры метода LPBoost и TotalBoost

свернуть все

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

Совет

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

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

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

Параметры метода Boost

свернуть все

Ошибка классификации цели, указанная как пара, разделенная запятыми, состоящая из '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. Следуя предыдущему примеру, этот код определяет порядок классов от нижнего до наиболее представленного в classNamesLH.

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

Алгоритмы

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

  • При указании Method быть алгоритмом повышения и Learners чтобы быть деревьями принятия решений, программное обеспечение по умолчанию растет. Stump принятия решения - это один корневой узел, соединенный с двумя конечными, конечными узлами. Можно скорректировать глубину дерева, указав 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 наблюдений из класса А и 10 наблюдений из класса В.

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

Ссылки

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

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

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

[4] Фрейнд, Ю. и Р. Э. Шапайр. «Теоретическое обобщение онлайн-обучения и приложения для повышения». J. of 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] Хо, Т. К. «Метод случайного подпространства для построения решающих лесов». IEEE Transactions on Pattern Analysis and Machine Intelligence, том 20, № 8, стр. 832-844, 1998.

[9] Шапайр, Р. Э., Я. Фройнд, П. Бартлетт и В. С. Ли. «Повышение маржи: новое объяснение эффективности методов голосования». Летописи статистики, т. 26, № 5, стр. 1651 - 1686, 1998.

[10] Зайфферт, К., Т. Хошгофтаар, Ж. Хульсе и А. Наполитано. 19-я Международная конференция по распознаванию образов, стр. 1-4, 2008.

[11] Вармут, М., Дж. Ляо и Г. Ратш. «Полностью корректирующие алгоритмы повышения, которые максимизируют запас». Proc. 23-я Int 'l. Conf. on Machine Learning, ACM, Нью-Йорк, стр. 1001-1008, 2006.

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