Совершенствование деревьев классификации и регрессии

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

Изучение ошибки реституции

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

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

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

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

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);

Вычислите ошибку в выборке.

resuberror = resubLoss(rtree)
resuberror = 4.7188

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

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

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

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

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

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

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

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

Метод'PredictorSelection' ЗначениеОписаниеСкорость обученияКогда задавать
Стандартная ТЕЛЕЖКА [1]Дефолт

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

Базовый уровень для сравнения

Укажите, верны ли какие-либо из этих условий:

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

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

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

Тест кривизны [2][3]'curvature'Выбирает предиктор разделения, который минимизирует p-значение хи-квадратных тестов независимости между каждым предиктором и ответом.Сопоставимо со стандартной ТЕЛЕЖКА

Укажите, верны ли какие-либо из этих условий:

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

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

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

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

Укажите, верны ли какие-либо из этих условий:

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

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

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

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

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

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

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

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 или «Leafiness» описывает один метод выбора оптимальной глубины для дерева. В отличие от этого раздела, вам не нужно выращивать новое дерево для каждого размера узла. Вместо этого вырастите глубокое дерево и обрежьте его до уровня, который вы выберете.

Обрезать дерево в командной строке используя 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] Breiman, L., J. H. Friedman, R. A. Olshen, and C. J. Stone. Деревья классификации и регрессии. Бока Ратон, FL: Chapman & Hall, 1984.

[2] Loh, W.Y. and Y.S. Shih. «Разделение методов выбора для деревьев классификации». Statistica Sinica, Vol. 7, 1997, pp. 815-840.

[3] Loh, W.Y. «Regression Trees with Unbiased Variable Selection and Interaction Detection». Statistica Sinica, Vol. 12, 2002, pp. 361-386.

См. также

| | | | | | |

Похожие темы