loss

Ошибка классификации

Описание

L = loss(tree,TBL,ResponseVarName) возвращает скалярное представление как хорошо tree классифицирует данные на TBL, когда TBL.ResponseVarName содержит истинные классификации.

При вычислении потери, loss нормирует вероятности класса в Y к вероятностям класса, используемым в обучении, сохраненном в Prior свойство tree.

L = loss(tree,TBL,Y) возвращает скалярное представление как хорошо tree классифицирует данные на TBL, когда Y содержит истинные классификации.

L = loss(tree,X,Y) возвращает скалярное представление как хорошо tree классифицирует данные на X, когда Y содержит истинные классификации.

L = loss(___,Name,Value) возвращает потерю с дополнительными опциями, заданными одним или несколькими Name,Value парные аргументы, с помощью любого из предыдущих синтаксисов. Например, можно задать веса наблюдения или функция потерь.

[L,se,NLeaf,bestlevel] = loss(___) также возвращает вектор стандартных погрешностей ошибок классификации (se), вектор количеств вершин в деревьях последовательности сокращения (NLeaf), и лучший уровень сокращения, как задано в TreeSize пара "имя-значение" (bestlevel).

Примечание

loss возвращает se и дальнейшие выходные параметры только, когда LossFun парой "имя-значение" является 'classiferror' по умолчанию.

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

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

Обученное дерево классификации, заданное как ClassificationTree или CompactClassificationTree объект модели. Таким образом, tree обученная модель классификации, возвращенная fitctree или compact.

Выборочные данные, заданные как таблица. Каждая строка TBL соответствует одному наблюдению, и каждый столбец соответствует одному переменному предиктору. Опционально, TBL может содержать дополнительные столбцы для весов наблюдения и переменной отклика. TBL должен содержать все предикторы, используемые, чтобы обучить tree. Многостолбцовые переменные и массивы ячеек кроме массивов ячеек из символьных векторов не позволены.

Если TBL содержит переменную отклика, используемую, чтобы обучить tree, затем вы не должны задавать ResponseVarName или Y.

Если вы обучаете tree использование выборочных данных содержится в table, затем входные данные для этого метода должны также быть в таблице.

Типы данных: table

Данные, чтобы классифицировать, заданный как числовая матрица. Каждая строка X представляет одно наблюдение, и каждый столбец представляет один предиктор. X должен иметь одинаковое число столбцов, когда данные раньше обучали treeX должен иметь одинаковое число строк как число элементов в Y.

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

Имя переменной отклика, заданное как имя переменной в TBL. Если TBL содержит переменную отклика, используемую, чтобы обучить tree, затем вы не должны задавать ResponseVarName.

Если вы задаете ResponseVarName, затем необходимо сделать так как вектор символов или представить скаляр в виде строки. Например, если переменная отклика хранится как TBL.Response, затем задайте его как 'Response'. В противном случае программное обеспечение обрабатывает все столбцы TBL, включая TBL.ResponseVarName, как предикторы.

Переменная отклика должна быть категориальным, символом, или массивом строк, логическим или числовым вектором или массивом ячеек из символьных векторов. Если переменная отклика является символьным массивом, то каждый элемент должен соответствовать одной строке массива.

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

Метки класса, заданные как категориальное, символ, или массив строк, логический или числовой вектор или массив ячеек из символьных векторов. Y должен иметь тот же тип, как классификация раньше обучала tree, и его число элементов должно равняться количеству строк X.

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

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

Задайте дополнительные разделенные запятой пары 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

Веса наблюдения, заданные как разделенная запятой пара, состоящая из 'Weights' и числовой вектор положительных значений или имя переменной в TBL.

Если вы задаете Weights как числовой вектор, затем размер Weights должно быть равно количеству строк в X или TBL.

Если вы задаете Weights как имя переменной в TBL, необходимо сделать так как вектор символов или представить скаляр в виде строки. Например, если веса хранятся как TBL.W, затем задайте его как 'W'. В противном случае программное обеспечение обрабатывает все столбцы TBL, включая TBL.W, как предикторы.

loss нормирует веса так, чтобы веса наблюдения в каждом классе суммировали к априорной вероятности того класса. Когда вы предоставляете Weights, loss вычисляет взвешенную потерю классификации.

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

Name,Value аргументы сопоставили с сокращением поддеревьев:

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

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

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

loss чернослив 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.

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

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

Потеря классификации, возвращенная как вектор длина Subtrees. Значение ошибки зависит от значений в Weights и LossFun.

Стандартная погрешность потери, возвращенной как вектор длина Subtrees.

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

Лучше всего сокращая уровень, как задано в TreeSize пара "имя-значение", возвращенная как скаляр, значение которого зависит от TreeSize:

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

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

По умолчанию, bestlevel уровень сокращения, который дает потерю в одном стандартном отклонении минимальной потери.

Примеры

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

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

load ionosphere
tree = fitctree(X,Y);
L = loss(tree,X,Y)
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')

Больше о

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

Расширенные возможности

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

| | |