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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

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

    ЗначениеОписание
    'binodeviance'Биномиальное отклонение
    'classiferror'Ошибка классификации
    'exponential'Экспоненциал
    'hinge'Стержень
    'logit'Логистический
    'mincost'Минимальный ожидал стоимость misclassification (для очков классификации, которые являются апостериорными вероятностями),
    '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 числовая матрица затрат misclassification. Например, Cost = ones(K) - eye(K) задает стоимость 0 для правильной классификации и 1 для misclassification.

    Задайте свою функцию с помощью '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');

Дерево классификации имеет четыре уровня сокращения. Уровень 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')

Больше о

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

Смотрите также

| | | |