Используя различные методы, можно скрепить результаты многих слабых учащихся в один качественный ансамблевой предиктор. Эти методы тесно следуют тому же синтаксису, поэтому можно попробовать различные методы с незначительными изменениями в ваших командах.
Вы можете создать ансамбль для классификации при помощи 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'
. Используйте суррогатные разделения, когда ваши данные имеют отсутствующие значения.
Примечание
Суррогатное разделение приводит к более медленному обучению и использованию большего количества памяти.
PredictorSelection
— fitcensemble
, 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
.
fitcensemble
| fitrensemble
| oobLoss
| resume
| resume
| templateDiscriminant
| templateKNN
| templateTree