exponenta event banner

потеря

Потеря 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-на-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

Алгоритмы

свернуть все

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

Функции потери классификации измеряют прогностическую неточность классификационных моделей. При сравнении одного и того же типа потерь между многими моделями меньшие потери указывают на лучшую прогностическую модель.

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

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

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

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

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

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

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

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

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

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

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

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

    ∑j=1nwj=1.

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

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

L=∑j=1nwjI{y^j≠yj}.

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

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

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

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

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

где веса w˜j нормализуются для суммирования в n вместо 1.

Экспоненциальные потери'exponential'L=∑j=1nwjexp (мдж).
Потеря шарнира'hinge'L=∑j=1nwjmax{0,1−mj}.
Потеря журнала'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 = аргминк = 1,..., Kγ jk.

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

Средневзвешенное минимальное ожидаемое снижение затрат на неправильную классификацию

L=∑j=1nwjcj.

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

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

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

Comparison of classification losses for different loss functions

Истинная стоимость неправильной классификации

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

Можно установить истинную стоимость неправильной классификации для класса с помощью 'Cost' аргумент пары имя-значение при выполнении fitcknn. Стоимость Cost(i,j) - затраты на классификацию наблюдения по классу j если его истинный класс 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около-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