Используя различные методы, можно объединить результаты многих слабых учеников в один высококачественный предиктор ансамбля. Эти методы тесно следуют за тем же синтаксисом, таким образом, можно попробовать различные методы незначительными изменениями в командах.
Можно создать ансамбль для классификации при помощи 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> |
Массив символов | Строка пробелов |
StringArray | <missing> или "" |
Массив ячеек из символьных векторов | '' |
Логический вектор | (не возможный представлять) |
Чтобы создать классификацию и ансамбли регрессии с fitcensemble
и fitrensemble
, соответственно, выбирают соответствующие алгоритмы из этого списка.
Для классификации с двумя классами:
'AdaBoostM1'
'LogitBoost'
'GentleBoost'
'RobustBoost'
(требует Optimization Toolbox™),
'LPBoost'
(требует Optimization Toolbox),
'TotalBoost'
(требует Optimization Toolbox),
'RUSBoost'
'Subspace'
'Bag'
Для классификации с тремя или больше классами:
'AdaBoostM2'
'LPBoost'
(требует Optimization Toolbox),
'TotalBoost'
(требует Optimization Toolbox),
'RUSBoost'
'Subspace'
'Bag'
Для регрессии:
'LSBoost'
'Bag'
Для описаний различных алгоритмов см. Алгоритмы Ансамбля.
Смотрите предложения для выбора соответствующего алгоритма ансамбля.
Эта таблица приводит характеристики различных алгоритмов. В табличных заголовках:
Неустойчивость — Хороший для неустойчивых данных (один класс имеет намного больше наблюдений, чем другой),
Остановитесь — Алгоритм самоостанавливается
Разреженный — Требует меньшего количества слабых учеников, чем другие алгоритмы ансамбля
Алгоритм | Регрессия | Бинарная классификация | Классификация мультиклассов | Неустойчивость класса | Остановка | Разреженный |
---|---|---|---|---|---|---|
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 |
Для получения дополнительной информации алгоритмов, см. Алгоритмы Ансамбля.
Алгоритмы Boost
обычно используют очень мелкие деревья. Эта конструкция использует относительно мало времени или памяти. Однако для эффективных прогнозов, повышенным деревьям может быть нужно больше членов ансамбля, чем сложенные в мешок деревья. Поэтому это не всегда ясно, какой класс алгоритмов выше.
Bag
обычно создает глубокие деревья. Эта конструкция является и трудоемкой и интенсивно использующей память. Это также приводит к относительно медленным прогнозам.
Bag
может оценить ошибку обобщения без дополнительной перекрестной проверки. Смотрите oobLoss
.
За исключением Subspace
, все повышение и укладывание в мешки алгоритмов основаны на учениках дерева решений. Subspace
может использовать или дискриминантный анализ или соседних учеников k-nearest.
Для получения дополнительной информации характеристик отдельных членов ансамбля, смотрите Характеристики Алгоритмов Классификации.
Выбор размера ансамбля включает балансирующуюся скорость и точность.
Более многочисленные ансамбли занимают больше времени, чтобы обучить и сгенерировать прогнозы.
Некоторые алгоритмы ансамбля могут стать перетренированными (неточный), когда слишком большой.
Чтобы установить соответствующий размер, рассмотрите начиная с нескольких дюжин нескольким сотням участников в ансамбле, обучение ансамбль и затем проверка качества ансамбля, как в Тестовом Качестве Ансамбля. Если кажется, что вам нужно больше участников, добавьте их использующий метод 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
массив ячеек шаблонов ученика, наиболее распространенное использование должно дать всего один слабый шаблон ученика.
Для примеров с помощью шаблона смотрите, Обрабатывают Неустойчивые Данные или Неравные Затраты Misclassification в Ансамблях Классификации и Суррогатных Разделениях.
Деревья решений могут обработать значения NaN
в X
. Такие значения называются, “отсутствуя”. Если у вас есть некоторые отсутствующие значения подряд X
, дерево решений находит оптимальное использование разделений ненедостающими значениями только. Если целая строка состоит из NaN
, fitcensemble
и fitrensemble
игнорируют ту строку. Если у вас есть данные с большой частью отсутствующих значений в X
, используйте суррогатные разделения решения. Для примеров суррогатных разделений смотрите, Обрабатывают Неустойчивые Данные или Неравные Затраты Misclassification в Ансамблях Классификации и Суррогатных Разделениях.
Глубина слабого дерева ученика имеет значение в течение учебного времени, использования памяти и прогнозирующей точности. Вы управляете глубиной эти параметры:
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] по умолчанию. Если переменные прогноза неоднородны или существуют предикторы, имеющие много уровней и другое наличие немногих уровней, то стандартный CART имеет тенденцию выбирать предикторы, имеющие много уровней как предикторы разделения. Для выбора предиктора разделения, который устойчив к количеству уровней, которые имеют предикторы, считайте определение 'curvature'
или 'interaction-curvature'
. Эти спецификации проводят тесты хи-квадрата ассоциации между каждым предиктором и ответом или каждой парой предикторов и ответом, соответственно. Предиктор, который приводит к минимальному p - значение, является предиктором разделения для конкретного узла. Для получения дополнительной информации смотрите, Выбирают Split Predictor Selection Technique.
Когда повышение деревьев решений, выбор предикторов разделения с помощью искривления или тестов взаимодействия не рекомендуются.
fitcensemble
или fitrensemble
Синтаксисы для fitcensemble
и fitrensemble
идентичны. Для fitrensemble
синтаксис:
ens = fitrensemble(X,Y,Name,Value)
X
является матрицей данных. Каждая строка содержит одно наблюдение, и каждый столбец содержит одну переменную прогноза.
Y
является ответами с тем же количеством наблюдений как строки в X
.
Name,Value
задает дополнительные опции с помощью одного или нескольких аргументов пары "имя-значение". Например, можно задать метод агрегации ансамбля с аргументом 'Method'
, количеством ансамбля, изучающего циклы с аргументом 'NumLearningCycles'
и тип слабых учеников с аргументом 'Learners'
. Для полного списка аргументов пары "имя-значение" смотрите, что fitrensemble
функционирует страница.
Результатом fitrensemble
и fitcensemble
является объект ансамбля, подходящий для того, чтобы сделать прогнозы на новых данных. Для основного примера создания ансамбля регрессии смотрите Ансамбль Регрессии Train. Для основного примера создания ансамбля классификации смотрите Ансамбль Классификации Train.
Существует несколько пар "имя-значение", которые можно передать fitcensemble
или fitrensemble
и нескольким, которые применяются к слабым ученикам (templateDiscriminant
, templateKNN
и templateTree
). Чтобы определить, какой аргумент пары "имя-значение" является соответствующим, ансамбль или слабый ученик:
Используйте пары "имя-значение" шаблона, чтобы управлять характеристиками слабых учеников.
Используйте аргументы пары "имя-значение" fitcensemble
или fitrensemble
, чтобы управлять ансамблем в целом, или для алгоритмов или для структуры.
Например, для ансамбля повышенных деревьев классификации с каждым деревом глубже, чем значение по умолчанию, устанавливает аргументы пары "имя-значение" templateTree
MinLeafSize
и MinParentSize
к меньшим значениям, чем значения по умолчанию. Или, MaxNumSplits
к большему значению, чем значения по умолчанию. Деревья являются затем более покрытыми листвой (глубже).
Чтобы назвать предикторы в ансамбле классификации (часть структуры ансамбля), используйте пару "имя-значение" PredictorNames
в fitcensemble
.
fitcensemble
| fitrensemble
| oobLoss
| resume
| resume
| templateDiscriminant
| templateKNN
| templateTree