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).

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

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

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

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

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

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

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

Данные для классификации, заданные как числовая матрица. Каждая строка X представляет одно наблюдение, и каждый столбец представляет один предиктор. X должны иметь одинаковое число столбцов в качестве данных, используемых для обучения tree. X должно иметь одинаковое число строк как количество элементов в 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'Минимальные ожидаемые затраты на неправильную классификацию (для классификационных оценок, которые являются апостериорными вероятностями)
    '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

Веса наблюдений, заданные как разделенная разделенными запятой парами, состоящая из '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 должно быть непустым. Другими словами, расти 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');

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.

Подробнее о

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

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

См. также

| | |