exponenta event banner

Улучшение классификационных деревьев и регрессионных деревьев

Можно настроить деревья, установив пары имя-значение в fitctree и fitrtree. В оставшейся части этого раздела описывается, как определить качество дерева, как определить, какие пары имя-значение установить, и как управлять размером дерева.

Проверка ошибки повторного предоставления

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

Ошибка повторного предоставления дерева классификации

В этом примере показано, как проверить ошибку повторного замещения дерева классификации.

Загрузите данные радужки Фишера.

load fisheriris

Обучение дерева классификации по умолчанию с использованием всего набора данных.

Mdl = fitctree(meas,species);

Проверьте ошибку повторного предоставления.

resuberror = resubLoss(Mdl)
resuberror = 0.0200

Дерево правильно классифицирует почти все данные радужки Фишера.

Перекрестная проверка

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

Перекрестная проверка дерева регрессии

В этом примере показано, как проверить точность повторной выборки и перекрестной проверки дерева регрессии для прогнозирования пробега на основе carsmall данные.

Загрузить carsmall набор данных. Рассмотрим ускорение, смещение, лошадиную силу и вес как предикторы MPG.

load carsmall
X = [Acceleration Displacement Horsepower Weight];

Вырастите дерево регрессии, используя все наблюдения.

rtree = fitrtree(X,MPG);

Вычислите ошибку in-sample.

resuberror = resubLoss(rtree)
resuberror = 4.7188

Потеря повторного замещения для дерева регрессии является среднеквадратичной ошибкой. Результирующее значение указывает, что типичная предиктивная ошибка для дерева составляет около квадратного корня из 4,7, или немного больше 2.

Оцените MSE перекрестной проверки.

rng 'default';
cvrtree = crossval(rtree);
cvloss = kfoldLoss(cvrtree)
cvloss = 23.5706

Перекрестно подтвержденная потеря составляет почти 25, что означает, что типичная предиктивная ошибка для дерева в новых данных составляет около 5. Это показывает, что перекрестно подтвержденные убытки обычно выше, чем простые потери при ресооружении.

Выбор метода выбора разделенного предиктора

Стандартный алгоритм CART имеет тенденцию выбирать непрерывные предикторы, которые имеют много уровней. Иногда такой выбор может быть ложным и может также маскировать более важные предикторы, которые имеют меньше уровней, такие как категориальные предикторы. То есть процесс выбора предиктора в каждом узле смещен. Кроме того, стандартная CART имеет тенденцию пропускать важные взаимодействия между парами предикторов и ответом.

Чтобы уменьшить смещение выбора и увеличить обнаружение важных взаимодействий, можно указать использование тестов кривизны или взаимодействий с помощью 'PredictorSelection' аргумент пары имя-значение. Использование теста кривизны или взаимодействия имеет дополнительное преимущество в получении лучших оценок важности предиктора, чем стандартная CART.

Эта таблица суммирует поддерживаемые методы выбора предиктора.

Техника'PredictorSelection' СтоимостьОписаниеСкорость обученияКогда указать
Стандартная корзина [1]Дефолт

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

Базовая линия для сравнения

Укажите, выполняется ли одно из следующих условий:

  • Все предикторы непрерывны

  • Важность предиктора не является целью анализа

  • Для усиления деревьев принятия решений

Проверка кривизны [2][3]'curvature'Выбирает расщепленный предиктор, который минимизирует p-значение тестов независимости хи-квадрат между каждым предиктором и ответом.Сопоставимо со стандартной CART

Укажите, выполняется ли одно из следующих условий:

  • Переменные предиктора неоднородны

  • Важность предиктора является целью анализа

  • Улучшение интерпретации дерева

Тест взаимодействия [3]'interaction-curvature'Выбирает расщепленный предиктор, который минимизирует p-значение тестов независимости хи-квадрат между каждым предиктором и ответом (то есть проводит тесты кривизны), и который минимизирует p-значение критерия независимости хи-квадрат между каждой парой предикторов и ответом.Медленнее стандартной CART, особенно когда набор данных содержит множество предикторных переменных.

Укажите, выполняется ли одно из следующих условий:

  • Переменные предиктора неоднородны

  • Вы подозреваете связи между парами предикторов и ответом

  • Важность предиктора является целью анализа

  • Улучшение интерпретации дерева

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

Глубина контроля или «листовитость»

Когда вы выращиваете дерево решений, учитывайте его простоту и прогностическую силу. Глубокое дерево с множеством листьев, как правило, очень точно на тренировочных данных. Однако дерево не гарантированно покажет сопоставимую точность на независимом тестовом наборе. Листовое дерево имеет тенденцию перетренироваться (или переоснащаться), и его точность тестирования часто намного меньше, чем точность обучения (повторного замещения). Напротив, мелкое дерево не достигает высокой точности тренировки. Но мелкое дерево может быть более надежным - его точность обучения может быть близка к точности репрезентативного тестового набора. Также неглубокое дерево легко интерпретировать. Если у вас недостаточно данных для обучения и тестирования, оцените точность дерева путем перекрестной проверки.

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

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

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

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

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

MinParent = max(MinParentSize,2*MinLeafSize)

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

Альтернативный метод управления глубиной дерева см. в разделе Обрезка.

Выбрать соответствующую глубину дерева

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

Загрузить ionosphere данные.

load ionosphere

Создание экспоненциально разнесенного набора значений из 10 через 100 , которые представляют минимальное количество наблюдений на конечный узел.

leafs = logspace(1,2,10);

Создание перекрестно проверенных деревьев классификации для ionosphere данные. Укажите, чтобы вырастить каждое дерево с использованием минимального размера листа в leafs.

rng('default')
N = numel(leafs);
err = zeros(N,1);
for n=1:N
    t = fitctree(X,Y,'CrossVal','On',...
        'MinLeafSize',leafs(n));
    err(n) = kfoldLoss(t);
end
plot(leafs,err);
xlabel('Min Leaf Size');
ylabel('cross-validated error');

Figure contains an axes. The axes contains an object of type line.

Лучший размер листа находится между около 20 и 50 наблюдения на лист.

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

DefaultTree = fitctree(X,Y);
view(DefaultTree,'Mode','Graph')

Figure Classification tree viewer contains an axes and other objects of type uimenu, uicontrol. The axes contains 60 objects of type line, text.

OptimalTree = fitctree(X,Y,'MinLeafSize',40);
view(OptimalTree,'mode','graph')

Figure Classification tree viewer contains an axes and other objects of type uimenu, uicontrol. The axes contains 12 objects of type line, text.

resubOpt = resubLoss(OptimalTree);
lossOpt = kfoldLoss(crossval(OptimalTree));
resubDefault = resubLoss(DefaultTree);
lossDefault = kfoldLoss(crossval(DefaultTree));
resubOpt,resubDefault,lossOpt,lossDefault
resubOpt = 0.0883
resubDefault = 0.0114
lossOpt = 0.1054
lossDefault = 0.1054

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

Сокращение

Обрезка оптимизирует глубину дерева (листовитость) путём слияния листьев на той же ветви дерева. Параметр «Контролировать глубину» (Control Depth) или «Листовитость» (Leafety) описывает один из методов выбора оптимальной глубины для дерева. В отличие от этого раздела, вам не нужно создавать новое дерево для каждого размера узла. Вместо этого вырастите глубокое дерево и срежьте его до выбранного уровня.

Удаление дерева в командной строке с помощью команды prune метод (классификация) или prune метод (регрессия). В качестве альтернативы срежьте дерево в интерактивном режиме с помощью средства просмотра дерева:

view(tree,'mode','graph')

Для обрезки дерева оно должно содержать последовательность обрезки. По умолчанию оба fitctree и fitrtree вычислить последовательность обрезки для дерева во время построения. При построении дерева с помощью 'Prune' пара имя-значение установлена в 'off'или если обрезать дерево до меньшего уровня, дерево не будет содержать полную последовательность обрезки. Создайте полную последовательность обрезки с помощью prune метод (классификация) или prune метод (регрессия).

Удаление дерева классификации

В этом примере создается дерево классификации для ionosphere данные и отсекает их до хорошего уровня.

Загрузить ionosphere данные:

load ionosphere

Создайте дерево классификации по умолчанию для данных:

tree = fitctree(X,Y);

Просмотр дерева в интерактивном средстве просмотра:

view(tree,'Mode','Graph')

Figure Classification tree viewer contains an axes and other objects of type uimenu, uicontrol. The axes contains 60 objects of type line, text.

Найдите оптимальный уровень отсечения, минимизируя перекрестные потери:

[~,~,~,bestlevel] = cvLoss(tree,...
    'SubTrees','All','TreeSize','min')
bestlevel = 6

Обрезать дерево до уровня 6:

view(tree,'Mode','Graph','Prune',6)

Figure Classification tree viewer contains an axes and other objects of type uimenu, uicontrol. The axes contains 12 objects of type line, text.

Можно также использовать интерактивное окно для обрезки дерева.

Обрезанное дерево совпадает с почти оптимальным деревом в примере «Выбор подходящей глубины дерева».

Набор 'TreeSize' кому 'SE' (по умолчанию), чтобы найти максимальный уровень отсечения, для которого ошибка дерева не превышает ошибку от наилучшего уровня плюс одно стандартное отклонение:

[~,~,~,bestlevel] = cvLoss(tree,'SubTrees','All')
bestlevel = 6

В этом случае уровень одинаков для любой установки 'TreeSize'.

Обрезать дерево, чтобы использовать его для других целей:

tree = prune(tree,'Level',6); 
view(tree,'Mode','Graph')

Figure Classification tree viewer contains an axes and other objects of type uimenu, uicontrol. The axes contains 12 objects of type line, text.

Ссылки

[1] Брейман, Л., Дж. Х. Фридман, Р. А. Ольшен и К. Дж. Стоун. Деревья классификации и регрессии. Бока Ратон, Флорида: Чепмен энд Холл, 1984.

[2] Ло, У.Я. и Ю.С. Ших. «Разбить методы выбора для деревьев классификации». Statistica Sinica, том 7, 1997, стр. 815-840.

[3] Loh, W.Y. «Регрессионные деревья с несмещенным выбором переменных и обнаружением взаимодействия». Statistica Sinica, Vol. 12, 2002, pp. 361-386.

См. также

| | | | | | |

Связанные темы