exponenta event banner

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около-K логическая матрица со строками, указывающими, какому классу принадлежит соответствующее наблюдение. Порядок столбцов соответствует порядку классов в tree.ClassNames.

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

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

    • W является n-по-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.

Подробнее

развернуть все