resubLoss

Класс: ClassificationTree

Ошибка классификации путем реподституции

Синтаксис

L = resubLoss(tree)
L = resubLoss(tree,Name,Value)
L = resubLoss(tree,'Subtrees',subtreevector)
[L,se] = resubLoss(tree,'Subtrees',subtreevector)
[L,se,NLeaf] = resubLoss(tree,'Subtrees',subtreevector)
[L,se,NLeaf,bestlevel] = resubLoss(tree,'Subtrees',subtreevector)
[L,...] = resubLoss(tree,'Subtrees',subtreevector,Name,Value)

Описание

L = resubLoss(tree) возвращает потери реституции, означающие потери, рассчитанные для данных, которые fitctree используется для создания tree.

L = resubLoss(tree,Name,Value) возвращает потерю с дополнительными опциями, заданными одним или несколькими Name,Value аргументы в виде пар. Можно задать несколько аргументы пары "имя-значение" в любом порядке как Name1,Value1,…,NameN,ValueN.

L = resubLoss(tree,'Subtrees',subtreevector) возвращает вектор классификационных ошибок для деревьев в последовательности обрезки subtreevector.

[L,se] = resubLoss(tree,'Subtrees',subtreevector) возвращает вектор стандартных ошибок ошибок классификации.

[L,se,NLeaf] = resubLoss(tree,'Subtrees',subtreevector) возвращает вектор чисел листовых узлов в деревьях последовательности обрезки.

[L,se,NLeaf,bestlevel] = resubLoss(tree,'Subtrees',subtreevector) возвращает лучший уровень обрезки, определенный в TreeSize Пара "имя-значение". По умолчанию bestlevel - уровень обрезки, который дает потерю в пределах одного стандартного отклонения минимальных потерь.

[L,...] = resubLoss(tree,'Subtrees',subtreevector,Name,Value) возвращает статистику потерь с дополнительными опциями, заданными одним или несколькими Name,Value аргументы в виде пар. Можно задать несколько аргументы пары "имя-значение" в любом порядке как Name1,Value1,…,NameN,ValueN.

Входные параметры

расширить все

tree

Классификационное дерево, созданное fitctree.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Функция потерь, заданная как разделенная разделенными запятой парами, состоящая из 'LossFun' и встроенное имя функции потери или указатель на функцию.

  • В следующей таблице перечислены доступные функции потерь. Задайте один с помощью соответствующего вектора символов или строкового скаляра.

    ЗначениеОписание
    'binodeviance'Биномиальное отклонение
    'classiferror'Неверно классифицированный коэффициент в десятичных числах
    'exponential'Экспоненциальные потери
    'hinge'Потеря шарнира
    'logit'Логистические потери
    'mincost'Минимальные ожидаемые затраты на неправильную классификацию (для классификационных оценок, которые являются апостериорными вероятностями)
    'quadratic'Квадратичные потери

    'mincost' подходит для классификационных оценок, которые являются апостериорными вероятностями. Деревья классификации возвращают апостериорные вероятности классификационных оценок как по умолчанию (см predict).

  • Задайте свою собственную функцию, используя обозначение указателя на функцию.

    Предположим, что n количество наблюдений в X и K быть количеством отдельных классов (numel(tree.ClassNames)). Ваша функция должна иметь эту подпись

    lossvalue = lossfun(C,S,W,Cost)
    где:

    • Выходной аргумент lossvalue является скаляром.

    • Вы выбираете имя функции (lossfun).

    • C является n-by- K логическая матрица со строками, указывающими, какому классу принадлежит соответствующее наблюдение. Порядок столбцов соответствует порядку классов в tree.ClassNames.

      Конструкция C путем установки C(p,q) = 1 если наблюдение p находится в q классов, для каждой строки. Установите все другие элементы строки p на 0.

    • S является n-by- K числовая матрица классификационных оценок. Порядок столбцов соответствует порядку классов в tree.ClassNames. S является матрицей классификационных оценок, подобной выходным данным predict.

    • W является n-by-1 числовой вектор весов наблюдений. Если вы сдаете Wпрограммное обеспечение нормирует их в сумме к 1.

    • Cost является K -by- K числовая матрица затрат на неправильную классификацию. Для примера, Cost = ones(K) - eye(K) задает стоимость 0 для правильной классификации и 1 для неправильной классификации.

    Задайте свою функцию, используя 'LossFun', @ lossfun.

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

Типы данных: char | string | function_handle

Name,Value аргументы, связанные с обрезкой поддеревьев:

Уровень обрезки, заданный как разделенная разделенными запятой парами, состоящая из 'Subtrees' и вектор неотрицательных целых чисел в порядке возрастания или 'all'.

Если вы задаете вектор, то все элементы должны быть как минимум 0 и самое большее max(tree.PruneList). 0 указывает полное, несрезанное дерево и max(tree.PruneList) указывает полностью обрезанное дерево (т.е. только корневой узел).

Если вы задаете 'all', затем resubLoss работает со всеми поддеревьями (т.е. со всей последовательностью обрезки). Эта спецификация эквивалентна использованию 0:max(tree.PruneList).

resubLoss черносливы tree каждому уровню, указанному в Subtrees, а затем оценивает соответствующие выходные аргументы. Размер Subtrees определяет размер некоторых выходных аргументов.

Для вызова Subtrees, свойства PruneList и PruneAlpha от tree должно быть непустым. Другими словами, расти tree путем установки 'Prune','on', или путем обрезки tree использование prune.

Пример: 'Subtrees','all'

Типы данных: single | double | char | string

Размер дерева, заданный как разделенная разделенными запятой парами, состоящая из 'TreeSize' и одно из следующих значений:

  • 'se'loss возвращает наивысший уровень обрезки с потерями в пределах одного стандартного отклонения от минимального (L+ se, где L и se относятся к наименьшему значению в Subtrees).

  • 'min'loss возвращает элемент Subtrees с наименьшими потерями, обычно наименьший элемент Subtrees.

Выходные аргументы

L

Классификационные потери, вектор, длина Subtrees. Смысл ошибки зависит от значений в Weights и LossFun.

se

Стандартная ошибка потерь, вектор, длина Subtrees.

NLeaf

Количество листьев (терминальных узлов) в обрезанных поддеревьях, вектор, длина Subtrees.

bestlevel

Скаляр, значение которого зависит от TreeSize:

  • TreeSize = 'se'loss возвращает наивысший уровень обрезки с потерями в пределах одного стандартного отклонения от минимального (L+ se, где L и se относятся к наименьшему значению в Subtrees).

  • TreeSize = 'min'loss возвращает элемент Subtrees с наименьшими потерями, обычно наименьший элемент Subtrees.

Примеры

расширить все

Вычислите ошибку классификации восстановления для ionosphere данные.

load ionosphere
tree = fitctree(X,Y);
L = resubLoss(tree)
L = 0.0114

Необрезанные деревья решений, как правило, перегружаются. Один из способов сбалансировать сложность модели и эффективности вне выборки - это обрезать дерево (или ограничить его рост), чтобы эффективность в выборке и вне выборки были удовлетворительными.

Загрузите набор данных радужки Фишера. Разделите данные на наборы для обучения (50%) и валидации (50%).

load fisheriris
n = size(meas,1);
rng(1) % For reproducibility
idxTrn = false(n,1);
idxTrn(randsample(n,round(0.5*n))) = true; % Training set logical indices 
idxVal = idxTrn == false;                  % Validation set logical indices

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

Mdl = fitctree(meas(idxTrn,:),species(idxTrn));

Просмотрите дерево классификации.

view(Mdl,'Mode','graph');

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

Классификационное дерево имеет четыре уровня обрезки. Уровень 0 является полным, несрезанным деревом (как показано). Уровень 3 является только корневым узлом (то есть без разделений).

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

m = max(Mdl.PruneList) - 1;
trnLoss = resubLoss(Mdl,'SubTrees',0:m)
trnLoss = 3×1

    0.0267
    0.0533
    0.3067

  • Полное, несрезанное дерево ошибочно классифицирует около 2,7% обучающих наблюдений.

  • Дерево, обрезанное до уровня 1, неправильно классифицирует около 5,3% обучающих наблюдений.

  • Дерево, обрезанное до уровня 2 (то есть пень), неправильно классифицирует около 30,6% обучающих наблюдений.

Исследуйте ошибку классификации выборок валидации на каждом уровне, исключая самый высокий уровень.

valLoss = loss(Mdl,meas(idxVal,:),species(idxVal),'SubTrees',0:m)
valLoss = 3×1

    0.0369
    0.0237
    0.3067

  • Полное, несрезанное дерево ошибочно классифицирует около 3,7% наблюдений валидации.

  • Дерево, обрезанное до уровня 1, неправильно классифицирует около 2,4% наблюдений валидации.

  • Дерево, обрезанное до уровня 2 (то есть пень), неправильно классифицирует около 30,7% наблюдений валидации.

Чтобы сбалансировать сложность модели и несовпадающую эффективность, рассмотрите обрезку Mdl на уровень 1.

pruneMdl = prune(Mdl,'Level',1);
view(pruneMdl,'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.

Подробнее о

расширить все