Среда для обучения в ансамбле

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

Вы можете создать ансамбль для классификации при помощи fitcensemble или для регрессии при помощи fitrensemble.

Обучение ансамбля классификации с помощью fitcensemble, используйте этот синтаксис.

ens = fitcensemble(X,Y,Name,Value)
  • X - матрица данных. Каждая строка содержит одно наблюдение, и каждый столбец содержит одну переменную предиктора.

  • Y - вектор откликов с таким же количеством наблюдений, как и строки в X.

  • Name,Value задайте дополнительные опции, используя один или несколько аргументы пары "имя-значение". Например, можно задать метод агрегации ансамбля с 'Method' аргумент, количество циклов обучения ансамбля с 'NumLearningCycles' аргумент и тип слабых учащихся с 'Learners' аргумент. Полный список аргументов пары "имя-значение" см. в fitcensemble страница функции.

Этот рисунок показывает информацию, необходимую для создания классификационного ансамбля.

Точно так же можно обучить ансамбль регрессии при помощи fitrensemble, который следует тому же синтаксису, что и fitcensemble. Для получения дополнительной информации о входных параметрах и аргументах пары "имя-значение", смотрите fitrensemble страница функции.

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

Подготовка данных предиктора

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

Подготовка ответных данных

Для данных отклика можно использовать самые различные типы данных.

  • Для регрессионных ансамблей, Y должен быть числовым вектором с таким же количеством элементов, как и количество строк X.

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

    Например, предположим, что ваши данные отклика состоят из трех наблюдений в следующем порядке: true, false, true. Можно выразить Y как:

    • [1;0;1] (числовой вектор)

    • categorical({'true','false','true'}) (категориальный вектор)

    • [true;false;true] (логический вектор)

    • ['true ';'false';'true '] (символьный массив, заполненный пространствами, так что каждая строка имеет одинаковую длину)

    • ["true","false","true"] (строковые массивы)

    • {'true','false','true'} (массив ячеек из векторов символов)

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

fitcensemble и fitrensemble игнорировать отсутствующие значения в Y при создании ансамбля. Эта таблица содержит метод включения отсутствующих записей.

Тип данныхОтсутствующая запись
Числовой векторNaN
Категориальный вектор<undefined>
Символьный массивСтрока пространств
Строковые массивы<missing> или ""
Массив ячеек из символьных векторов''
Логический вектор(невозможно представить)

Выберите применимый метод агрегации ансамбля

Создание классификационных и регрессионных ансамблей с fitcensemble и fitrensemble, соответственно, выберите соответствующие алгоритмы из этого списка.

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

    • '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'

Описание различных алгоритмов смотрите в Ensemble Algorithms.

Смотрите предложения по выбору подходящего алгоритма ансамбля.

В этой таблице перечислены характеристики различных алгоритмов. В заголовках таблиц:

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

  • Остановка - Алгоритм автоматически завершается

  • Разреженный - требует меньше слабых учащихся, чем другие алгоритмы ансамбля

АлгоритмРегрессДвоичная классификацияМногоклассовая классификацияКлассовый дисбалансСтопРедкий
Bag×××   
AdaBoostM1 ×    
AdaBoostM2  ×   
LogitBoost ×    
GentleBoost ×    
RobustBoost ×    
LPBoost ×× ××
TotalBoost ×× ××
RUSBoost ×××  
LSBoost×     
Subspace ××   

RobustBoost, LPBoost, и TotalBoost требуется лицензия Optimization Toolbox. Попробуйте TotalBoost перед LPBoost, как TotalBoost может быть более устойчивым.

Предложения по выбору подходящего алгоритма ансамбля

  • Регрессия - Ваш выбор LSBoost или Bag. Различия между бустингом и упаковкой см. в Общих характеристиках алгоритмов ансамбля.

  • Двоичная классификация - Попробуйте AdaBoostM1 во-первых, с этими модификациями:

    Характеристика данныхРекомендуемый алгоритм
    Много предикторовSubspace
    Перекос данных (еще много наблюдений одного класса)RUSBoost
    Маркируйте шум (некоторые обучающие данные имеют неправильный класс)RobustBoost
    Много наблюденийИзбегайте LPBoost и TotalBoost
  • Многоклассовая классификация - Попробуйте AdaBoostM2 во-первых, с этими модификациями:

    Характеристика данныхРекомендуемый алгоритм
    Много предикторовSubspace
    Перекос данных (еще много наблюдений одного класса)RUSBoost
    Много наблюденийИзбегайте LPBoost и TotalBoost

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

Общие характеристики алгоритмов ансамбля

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

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

  • Bag может оценить ошибку обобщения без дополнительной перекрестной валидации. См. oobLoss.

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

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

Установите количество представителей ансамбля

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

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

  • Некоторые алгоритмы ансамбля могут стать переобученными (неточными), когда они слишком велики.

Чтобы задать соответствующий размер, рассмотрите начало с нескольких десятков до нескольких сотен представителей в ансамбле, обучение ансамбля, а затем проверку качества ансамбля, как в Test Ensemble Quality. Если кажется, что вам нужно больше представителей, добавьте их с помощью resume метод (классификация) или resume метод (регрессия). Повторяйте, пока добавление большего количества представителей не улучшит качество ансамбля.

Совет

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

Подготовьте слабых учащихся

В настоящее время слабыми типами учащихся являются:

  • 'Discriminant' (рекомендуемый для Subspace ансамбль)

  • 'KNN' (только для Subspace ансамбль)

  • 'Tree' (для любого ансамбля, кроме Subspace)

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

  • Чтобы создать ансамбль с опциями слабого ученика по умолчанию, задайте значение 'Learners' Аргумент пары "имя-значение" как вектор символов или строковый скаляр слабого имени учащегося. Для примера:

    ens = fitcensemble(X,Y,'Method','Subspace', ...
       'NumLearningCycles',50,'Learners','KNN');
    % or
    ens = fitrensemble(X,Y,'Method','Bag', ...
       'NumLearningCycles',50,'Learners','Tree');
  • Чтобы создать ансамбль с недефолтно слабыми опциями для учащихся, создайте ненефтяно слабого ученика с помощью соответствующей template способ.

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

    templ = templateTree('Surrogate','all');
    ens = fitcensemble(X,Y,'Method','AdaBoostM2', ...
       'NumLearningCycles',50,'Learners',templ);

    Для выращивания деревьев с листьями, содержащими ряд наблюдений, которые составляют не менее 10% от размера выборки:

    templ = templateTree('MinLeafSize',size(X,1)/10);
    ens = fitcensemble(X,Y,'Method','AdaBoostM2', ...
       'NumLearningCycles',50,'Learners',templ);

    Кроме того, выберите максимальное количество разделений на дерево:

    templ = templateTree('MaxNumSplits',4);
    ens = fitcensemble(X,Y,'Method','AdaBoostM2', ...
       'NumLearningCycles',50,'Learners',templ);

    Можно также использовать ненарушенных слабых учащихся в fitrensemble.

В то время как вы можете дать fitcensemble и fitrensemble массив ячеек из шаблонов учащихся, наиболее распространенным использованием является предоставление всего одного слабого шаблона учащегося.

Для примеров, использующих шаблон, смотрите Handle Imbalanced Data или Неравные затраты на неправильную классификацию в классификационных ансамблях и суррогатных сплитах.

Деревья решений могут обрабатывать NaN значения в X. Такие значения называются «отсутствующими». Если у вас есть некоторые отсутствующие значения в строке X, дерево решений находит оптимальные расщепления, используя только незаписывающие значения. Если целая строка состоит из NaN, fitcensemble и fitrensemble игнорируйте эту строку. Если у вас есть данные с большой долей отсутствующих значений в X, используйте суррогатные разделения решений. Для примеров суррогатных расщеплений смотрите Handle Imbalanced Data или Неравные затраты на неправильную классификацию в классификационных ансамблях и суррогатных расщеплениях.

Общие настройки для слабых учащихся дерева

  • Глубина слабого дерева учащихся имеет значение для времени обучения, использования памяти и прогнозирующей точности. Вы управляете глубиной следующих параметров:

    • MaxNumSplits - Максимальное количество разделений узлов ветви MaxNumSplits по дереву. Установите большие значения MaxNumSplits получить глубокие деревья. Значение по умолчанию для упаковки в мешки size(X,1) - 1. Значение по умолчанию для бустинга 1.

    • MinLeafSize - Каждый лист имеет по крайней мере MinLeafSize наблюдения. Установите маленькие значения MinLeafSize получить глубокие деревья. Значение по умолчанию для классификации 1 и 5 для регрессии.

    • MinParentSize - Каждый узел ветви в дереве имеет по крайней мере MinParentSize наблюдения. Установите маленькие значения MinParentSize получить глубокие деревья. Значение по умолчанию для классификации 2 и 10 для регрессии.

    Если вы поставляете оба MinParentSize и MinLeafSize, учащийся использует настройку, которая дает большие листья (более мелкие деревья):

    MinParent = max(MinParent,2*MinLeaf)

    Если вы дополнительно поставляете MaxNumSplitsзатем программа разделяет дерево до тех пор, пока не будет удовлетворен один из трех критериев разделения.

  • Surrogate - Выращивайте деревья решений с суррогатными расщеплениями при Surrogate является 'on'. Используйте суррогатные разделения, когда ваши данные имеют отсутствующие значения.

    Примечание

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

  • PredictorSelectionfitcensemble, fitrensemble, и TreeBagger по умолчанию выращивайте деревья с помощью стандартного алгоритма CART [11]. Если переменные предиктора неоднородны или существуют предикторы, имеющие много уровней и другие, имеющие несколько уровней, то стандартная ТЕЛЕЖКА имеет тенденцию выбирать предикторы, имеющие много уровней в качестве разделенных предикторов. Для выбора разделителя-предиктора, который является устойчивым к количеству уровней, которые имеют предикторы, рассмотрите указание 'curvature' или 'interaction-curvature'. Эти спецификации проводят хи-квадратные тесты связи между каждым предиктором и ответом или каждой парой предикторов и ответом, соответственно. Предиктор, который приводит к минимальному p-значению, является разделенным предиктором для конкретного узла. Для получения дополнительной информации смотрите Выберите Метод Выбора Разделителя Предиктора.

    Примечание

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

Звонить fitcensemble или fitrensemble

Синтаксисы для fitcensemble и fitrensemble идентичны. Для fitrensemble, синтаксис:

ens = fitrensemble(X,Y,Name,Value)
  • X - матрица данных. Каждая строка содержит одно наблюдение, и каждый столбец содержит одну переменную предиктора.

  • Y - это ответы с таким же количеством наблюдений, как и строки в X.

  • Name,Value задайте дополнительные опции, используя один или несколько аргументы пары "имя-значение". Например, можно задать метод агрегации ансамбля с 'Method' аргумент, количество циклов обучения ансамбля с 'NumLearningCycles' аргумент и тип слабых учащихся с 'Learners' аргумент. Полный список аргументов пары "имя-значение" см. в fitrensemble страница функции.

Результат fitrensemble и fitcensemble является объектом ансамбля, подходящим для составления предсказаний по новым данным. Основной пример создания регрессионного ансамбля см. в Train Regression Ensemble. Базовый пример создания классификационного ансамбля см. в Train Classification Ensemble.

Где задать пары "имя-значение"

Существует несколько пар "имя-значение", в которые можно перейти fitcensemble или fitrensemble, и несколько, которые применяются к слабым ученикам (templateDiscriminant, templateKNN, и templateTree). Чтобы определить, какой аргумент пары "имя-значение" подходит, ансамбль или слабый ученик:

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

  • Использовать fitcensemble или fitrensemble аргументы пары "имя-значение" для управления ансамблем в целом либо для алгоритмов, либо для структуры.

Для примера, для ансамбля усиленных деревьев классификации с каждым деревом глубже, чем по умолчанию, установите templateTree аргументы пары "имя-значение" MinLeafSize и MinParentSize к меньшим значениям, чем значения по умолчанию. Или, MaxNumSplits к большему значению, чем значения по умолчанию. Деревья затем более листовые (более глубокие).

Чтобы назвать предикторов в классификационном ансамбле (часть структуры ансамбля), используйте PredictorNames Пара "имя-значение" в fitcensemble.

См. также

| | | | | | |

Похожие темы