loss

Потеря k - ближайшего соседа классификатора

Описание

L = loss(mdl,tbl,ResponseVarName) возвращает скаляр, представляющий, насколько хорошо mdl классифицирует данные в tbl когда tbl.ResponseVarName содержит истинные классификации. Если tbl содержит переменную отклика, используемую для обучения mdl, тогда вам не нужно указывать ResponseVarName.

При вычислении потерь, loss функция нормирует вероятности классов в tbl.ResponseVarName к вероятностям классов, используемым для обучения, которые хранятся в Prior свойство mdl.

Смысл классификационных потерь (L) зависит от функции потерь и схемы взвешивания, но, в целом, лучшие классификаторы дают меньшие значения классификационных потерь. Для получения дополнительной информации смотрите Классификационные потери.

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

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

пример

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

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

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

Примеры

свернуть все

Создайте k-ближайших соседей классификатор для данных радужной оболочки глаза Фишера, где k = 5.

Загрузите набор данных радужной оболочки глаза Фишера.

load fisheriris

Создайте классификатор для пяти ближайших соседей.

mdl = fitcknn(meas,species,'NumNeighbors',5);

Исследуйте потерю классификатора для среднего наблюдения, классифицированного как 'versicolor'.

X = mean(meas);
Y = {'versicolor'};
L = loss(mdl,X,Y)
L = 0

Все пять ближайших соседей классифицируются как 'versicolor'.

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

свернуть все

k-ближайших соседей классификатор модели, заданный как ClassificationKNN объект.

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

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

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

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

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

Вы должны задать ResponseVarName как вектор символов или строковый скаляр. Для примера, если переменная отклика сохранена как tbl.response, затем укажите его следующим 'response'. В противном случае программное обеспечение обрабатывает все столбцы tbl, включая tbl.response, как предикторы.

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

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

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

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

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

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

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

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: loss(mdl,tbl,'response','LossFun','exponential','Weights','w') возвращает взвешенные экспоненциальные потери mdl классификация данных в tbl. Здесь, tbl.response - переменная отклика, и tbl.w - весовая переменная.

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

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

    ЗначениеОписание
    'binodeviance'Биномиальное отклонение
    'classiferror'Неверно классифицированный коэффициент в десятичных числах
    'exponential'Экспоненциальные потери
    'hinge'Потеря шарнира
    'logit'Логистические потери
    'mincost'Минимальные ожидаемые затраты на неправильную классификацию (для классификационных оценок, которые являются апостериорными вероятностями)
    'quadratic'Квадратичные потери

    'mincost' подходит для классификационных оценок, которые являются апостериорными вероятностями. По умолчанию k-ближайшие модели-соседи возвращают апостериорные вероятности как классификационные оценки (см predict).

  • Указатель на функцию можно задать для пользовательской функции потерь с помощью @ (например, @lossfun). Предположим n количество наблюдений в X и K быть количество отдельных классов (numel(mdl.ClassNames)). Ваша пользовательская функция потерь должна иметь следующую форму:

    function lossvalue = lossfun(C,S,W,Cost)

    • C является n -by K логической матрицей с строками, указывающими класс, к которому принадлежит соответствующее наблюдение. Порядок столбцов соответствует порядку классов в mdl.ClassNames. Конструкция C путем установки C(p,q) = 1, если наблюдение p находится в q классов, для каждой строки. Установите все другие элементы строки p на 0.

    • S является n -by K числовой матрицей классификационных оценок. Порядок столбцов соответствует порядку классов в mdl.ClassNames. Аргумент S является матрицей классификационных оценок, подобной выходным данным predict.

    • W является n -by-1 числовым вектором весов наблюдений. Если вы сдаете W, программное обеспечение нормализует веса, чтобы сумма 1.

    • Cost является K -by K числовой матрицей затрат на неправильную классификацию. Для примера, Cost = ones(K) – eye(K) задает стоимость 0 для правильной классификации и 1 для неправильной классификации.

    • Выходной аргумент lossvalue является скаляром.

Для получения дополнительной информации о функциях потерь смотрите Классификационные потери.

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

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

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

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

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

Пример: 'Weights','w'

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

Алгоритмы

свернуть все

Классификационные потери

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

Рассмотрим следующий сценарий.

  • L - средневзвешенные классификационные потери.

  • n - размер выборки.

  • Для двоичной классификации:

    • yj - наблюдаемая метка класса. Программное обеспечение кодирует его как -1 или 1, указывая на отрицательный или положительный класс (или первый или второй класс в ClassNames свойство), соответственно.

    • f (Xj) является баллом классификации положительного класса для j наблюдений (строка) X данных предиктора.

    • mj = yj f (Xj) является классификационной оценкой для классификации j наблюдений в класс, относящийся к yj. Положительные значения mj указывают на правильную классификацию и не вносят большой вклад в средние потери. Отрицательные значения mj указывают на неправильную классификацию и вносят значительный вклад в среднюю потерю.

  • Для алгоритмов, которые поддерживают многоклассовую классификацию (то есть K ≥ 3):

    • yj* - вектор с K - 1 нулями, с 1 в положении, соответствующем истинному, наблюдаемому классу yj. Для примера, если истинный класс второго наблюдения является третьим классом и K = 4, то y 2* = [0 0 1 0]′. Порядок классов соответствует порядку в ClassNames свойство модели входа.

    • f (Xj) является вектором K длины счетов классов для j наблюдений X данных предиктора. Порядок счетов соответствует порядку классов в ClassNames свойство модели входа.

    • mj = yj*f (<reservedrangesplaceholder1>). Поэтому mj является скалярной классификационной оценкой, которую модель предсказывает для истинного наблюдаемого класса.

  • Вес для j наблюдения wj. Программа нормализует веса наблюдений так, чтобы они суммировались с соответствующей вероятностью предыдущего класса. Программное обеспечение также нормализует предыдущие вероятности, поэтому они равны 1. Поэтому,

    j=1nwj=1.

С учетом этого сценария в следующей таблице описываются поддерживаемые функции потерь, которые можно задать при помощи 'LossFun' аргумент пары "имя-значение".

Функция потерьЗначение LossFunУравнение
Биномиальное отклонение'binodeviance'L=j=1nwjlog{1+exp[2mj]}.
Неверно классифицированный коэффициент в десятичных числах'classiferror'

L=j=1nwjI{y^jyj}.

y^j - метка класса, соответствующая классу с максимальным счетом. I {·} является функцией индикации.

Потери перекрестной энтропии'crossentropy'

'crossentropy' подходит только для моделей нейронных сетей.

Взвешенные потери перекрестной энтропии

L=j=1nw˜jlog(mj)Kn,

где веса w˜j нормированы в сумме к n вместо 1.

Экспоненциальные потери'exponential'L=j=1nwjexp(mj).
Потеря шарнира'hinge'L=j=1nwjmax{0,1mj}.
Логит потеря'logit'L=j=1nwjlog(1+exp(mj)).
Минимальные ожидаемые затраты на неправильную классификацию'mincost'

'mincost' подходит только, если классификационные оценки апостериорные вероятности.

Программа вычисляет взвешенные минимальные ожидаемые затраты классификации, используя эту процедуру для наблюдений j = 1,..., n.

  1. Оцените ожидаемые затраты на неправильную классификацию классификации Xj наблюдений в k классов:

    γjk=(f(Xj)C)k.

    f (Xj) является вектором-столбцом апостериорных вероятностей классов для двоичной и многоклассовой классификации для Xj наблюдений. C - матрица затрат, сохраненная в Cost свойство модели.

  2. Для j наблюдения спрогнозируйте метку класса, соответствующую минимальной ожидаемой стоимости неправильной классификации:

    y^j=argmink=1,...,Kγjk.

  3. Используя C, идентифицируйте понесенные затраты (cj) для создания предсказания.

Взвешенное среднее значение минимальных ожидаемых потерь от неправильной классификации

L=j=1nwjcj.

Если вы используете матрицу затрат по умолчанию (значение элемента которой 0 для правильной классификации и 1 для неправильной классификации), то 'mincost' потеря эквивалентна 'classiferror' потеря.

Квадратичные потери'quadratic'L=j=1nwj(1mj)2.

Этот рисунок сравнивает функции потерь (кроме 'crossentropy' и 'mincost') по счету m для одного наблюдения. Некоторые функции нормированы, чтобы пройти через точку (0,1).

Comparison of classification losses for different loss functions

Истинные затраты на неправильную классификацию

Две стоимости связаны с классификацией KNN: истинная стоимость неправильной классификации для каждого класса и ожидаемая стоимость неправильной классификации для каждого наблюдения.

Можно задать истинные затраты на неправильную классификацию по классам с помощью 'Cost' аргумент пары "имя-значение" при запуске fitcknn. Значение Cost(i,j) - стоимость классификации наблюдений в классы j если его класс true i. По умолчанию Cost(i,j) = 1 если i ~= j, и Cost(i,j) = 0 если i = j. Другими словами, стоимость 0 для правильной классификации и 1 для неправильной классификации.

Ожидаемая стоимость

Две стоимости связаны с классификацией KNN: истинная стоимость неправильной классификации для каждого класса и ожидаемая стоимость неправильной классификации для каждого наблюдения. Третий выход predict - ожидаемая стоимость неправильной классификации за наблюдение.

Предположим, у вас есть Nobs наблюдения, которые необходимо классифицировать с помощью обученного классификатора mdl, и у вас есть K классы. Наблюдения помещаются в матрицу Xnew с одним наблюдением за строкой. Команда

[label,score,cost] = predict(mdl,Xnew)

возвращает матрицу cost размера Nobs-by- K, среди других выходов. Каждая строка cost матрица содержит ожидаемые (средние) затраты на классификацию наблюдений в каждый из K классы. cost(n,j) является

i=1KP^(i|Xnew(n))C(j|i),

где

  • K - количество классов.

  • P^(i|X(n)) - апостериорная вероятность i классов для Xnew наблюдений (n).

  • C(j|i) - истинная стоимость неправильной классификации при классификации наблюдения как j, когда его истинный класс i.

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

Введенный в R2012a