exponenta event banner

потеря

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

Описание

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около-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

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

Подробнее

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

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

См. также

| | |