потеря

Потеря k - самый близкий соседний классификатор

Синтаксис

L = loss(mdl,tbl,ResponseVarName)
L = loss(mdl,tbl,Y)
L = loss(mdl,X,Y)
L = loss(___,Name,Value)

Описание

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-nearest для ирисовых данных Фишера, где 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-nearest граничат с моделью классификатора, заданной как объект 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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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'Минимальный ожидал стоимость misclassification (для очков классификации, которые являются апостериорными вероятностями),
    '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 числовая матрица затрат misclassification. Например, Cost = ones(K) – eye(K) задает стоимость 0 для правильной классификации и 1 для misclassification.

    • Выходным аргументом 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, указывая на отрицательный или положительный класс, соответственно.

    • 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 (Xj). Поэтому mj является скалярным счетом классификации, который модель предсказывает для истинного, наблюдаемого класса.

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

    j=1nwj=1.

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

Функция потерьЗначение LossFunУравнение
Биномиальное отклонение'binodeviance'L=j=1nwjжурнал{1+exp[2mj]}.
Экспоненциальная потеря'exponential'L=j=1nwjexp(mj).
Ошибка классификации'classiferror'

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

Это - взвешенная часть неправильно классифицированных наблюдений где y^j метка класса, соответствующая классу с максимальной апостериорной вероятностью. I {x} является функцией индикатора.

Потеря стержня'hinge'L=j=1nwjmax {0,1mj}.
Потеря логита'logit'L=j=1nwjжурнал(1+exp(mj)).
Минимальная стоимость'mincost'

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

  1. Оцените 1 K вектором ожидаемых затрат классификации для наблюдения j:

    γj=f(Xj)C.

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

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

    y^j=minj=1,...,K(γj).

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

Взвешенная, средняя, минимальная потеря стоимости

L=j=1nwjcj.

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

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

Истинная стоимость Misclassification

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

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

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

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

Предположим, что у вас есть наблюдения 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|Xnew(n)) апостериорная вероятность класса i для наблюдения Xnew (n).

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

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

Представленный в R2012a