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'Минимальный ожидал стоимость misclassification (для баллов классификации, которые являются апостериорными вероятностями),
    '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.ClassNamesS матрица баллов классификации, похожих на выход predict.

    • W n- 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 mustBeNonempty. Другими словами, вырастите 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')

Больше о

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

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

| | | |