exponenta event banner

потеря

Найти ошибку классификации для классификатора вспомогательных векторных машин (SVM)

Описание

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

loss нормализует вероятности классов в TBL.ResponseVarName к вероятности предшествующего класса, что fitcsvm используется для обучения, хранится в Prior имущество SVMModel.

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

L = loss(SVMModel,TBL,Y) возвращает ошибку классификации для данных предиктора в таблице TBL и метки истинного класса в Y.

loss нормализует вероятности классов в Y к вероятности предшествующего класса, что fitcsvm используется для обучения, хранится в Prior имущество SVMModel.

пример

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

пример

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

Примеры

свернуть все

Загрузить ionosphere набор данных.

load ionosphere
rng(1); % For reproducibility

Обучение классификатора SVM. Укажите 15% образец для тестирования, стандартизируйте данные и укажите, что 'g' является положительным классом.

CVSVMModel = fitcsvm(X,Y,'Holdout',0.15,'ClassNames',{'b','g'},...
    'Standardize',true);
CompactSVMModel = CVSVMModel.Trained{1}; % Extract the trained, compact classifier
testInds = test(CVSVMModel.Partition);   % Extract the test indices
XTest = X(testInds,:);
YTest = Y(testInds,:);

CVSVMModel является ClassificationPartitionedModel классификатор. Он содержит свойство Trained, который представляет собой массив ячеек 1 на 1, содержащий CompactClassificationSVM классификатор, который программное обеспечение обучило с помощью обучающего набора.

Определите, насколько хорошо алгоритм обобщается, оценив ошибку классификации тестового образца.

L = loss(CompactSVMModel,XTest,YTest)
L = 0.0787

Классификатор SVM неправильно классифицирует приблизительно 8% тестового образца.

Загрузить ionosphere набор данных.

load ionosphere
rng(1); % For reproducibility

Обучение классификатора SVM. Укажите 15% образец для тестирования, стандартизируйте данные и укажите, что 'g' является положительным классом.

CVSVMModel = fitcsvm(X,Y,'Holdout',0.15,'ClassNames',{'b','g'},...
    'Standardize',true);
CompactSVMModel = CVSVMModel.Trained{1}; % Extract the trained, compact classifier
testInds = test(CVSVMModel.Partition);   % Extract the test indices
XTest = X(testInds,:);
YTest = Y(testInds,:);

CVSVMModel является ClassificationPartitionedModel классификатор. Он содержит свойство Trained, который представляет собой массив ячеек 1 на 1, содержащий CompactClassificationSVM классификатор, который программное обеспечение обучило с помощью обучающего набора.

Определите, насколько хорошо алгоритм обобщается, оценивая потери шарнира тестового образца.

L = loss(CompactSVMModel,XTest,YTest,'LossFun','hinge')
L = 0.2998

Потеря шарнира составляет приблизительно 0,3. Предпочтительны классификаторы с потерями шарнира, близкими к 0.

Входные аргументы

свернуть все

Модель классификации SVM, указанная как ClassificationSVM объект модели или CompactClassificationSVM объект модели, возвращенный fitcsvm или compactсоответственно.

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

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

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

Если установить 'Standardize',true в fitcsvm при обучении SVMModel, то программное обеспечение стандартизирует столбцы данных предиктора, используя соответствующие средства в SVMModel.Mu и стандартные отклонения в SVMModel.Sigma.

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

Имя переменной ответа, указанное как имя переменной в TBL.

Необходимо указать ResponseVarName в виде вектора символов или строкового скаляра. Например, если переменная ответа Y хранится как TBL.Y, затем укажите ResponseVarName как 'Y'. В противном случае программа обрабатывает все столбцы TBL, в том числе Y, в качестве предикторов при обучении модели.

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

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

Данные предиктора, заданные как числовая матрица.

Каждая строка X соответствует одному наблюдению (также известному как экземпляр или пример), и каждый столбец соответствует одной переменной (также известной как элемент). Переменные в столбцах X должны быть такими же, как переменные, которые обучали SVMModel классификатор.

Длина Y и количество строк в X должно быть равным.

Если установить 'Standardize',true в fitcsvm обучаться SVMModel, то программное обеспечение стандартизирует столбцы X используя соответствующие средства в SVMModel.Mu и стандартные отклонения в SVMModel.Sigma.

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

Метки класса, указанные как категориальный, символьный или строковый массив, логический или числовой вектор или массив ячеек символьных векторов. Y должен совпадать с типом данных SVMModel.ClassNames. (Программа рассматривает строковые массивы как массивы ячеек символьных векторов.)

Длина Y должно равняться количеству строк в TBL или количество строк в X.

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

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

Пример: loss(SVMModel,TBL,Y,'Weights',W) взвешивает наблюдения в каждой строке TBL используя соответствующий вес в каждой строке переменной W в TBL.

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

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

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

    'mincost' подходит для классификационных оценок, которые являются задними вероятностями. Можно указать использование апостериорных вероятностей в качестве показателей классификации для моделей SVM путем установки 'FitPosterior',true при перекрестной проверке модели с помощью fitcsvm.

  • Укажите собственную функцию с помощью нотации дескриптора функции.

    Предположим, что n - количество наблюдений в X, и K - количество различных классов (numel(SVMModel.ClassNames)) используется для создания входной модели (SVMModel). Ваша функция должна иметь эту подпись

    lossvalue = lossfun(C,S,W,Cost)
    где:

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

    • Выберите имя функции (lossfun).

    • C является nоколо-K логическая матрица со строками, указывающими класс, которому принадлежит соответствующее наблюдение. Порядок столбцов соответствует порядку классов в SVMModel.ClassNames.

      Конструкция C путем установки C(p,q) = 1 если наблюдение p находится в классе q, для каждой строки. Установка всех остальных элементов строки p кому 0.

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

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

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

    Укажите свою функцию с помощью 'LossFun',@lossfun.

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

Пример: 'LossFun','binodeviance'

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

Веса наблюдения, указанные как разделенная запятыми пара, состоящая из 'Weights' и числовой вектор или имя переменной в TBL. Программное обеспечение взвешивает наблюдения в каждой строке X или TBL с соответствующим весом в Weights.

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

При указании Weights как имя переменной в TBL, необходимо сделать это как вектор символа или скаляр строки. Например, если веса сохранены как TBL.W, затем укажите Weights как 'W'. В противном случае программа обрабатывает все столбцы TBL, в том числе TBL.W, как предикторы.

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

Пример: '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

Оценка классификации

Показатель классификации SVM для классификации наблюдения x представляет собой расстояние со знаком от x до границы принятия решения в диапазоне от - ∞ до +∞. Положительный балл для класса указывает, что x прогнозируется в этом классе. Отрицательный балл указывает на обратное.

Положительным показателем классификации классов f (x) является обученная функция классификации SVM. f (x) также является численным прогнозируемым ответом для x или баллом для прогнозирования x в положительный класс.

f (x) =∑j=1nαjyjG (xj, x) + b,

где (α1,..., αn, b) - оцененные параметры SVM, G (xj, x) - скалярное произведение в предикторном пространстве между x и векторами поддержки, и сумма включает в себя наблюдения обучающего набора. Отрицательный балл классификации класса для x или балл для прогнозирования x в отрицательный класс равен -f (x).

Если G (xj, x) = xj′x (линейное ядро), то функция оценки уменьшается до

f (x) = (x/s) β + b.

s - шкала ядра, а β - вектор аппроксимированных линейных коэффициентов.

Дополнительные сведения см. в разделе Общие сведения о векторных машинах поддержки.

Ссылки

[1] Хасти, Т., Р. Тибширани и Дж. Фридман. элементы статистического обучения, второе издание. Спрингер, Нью-Йорк, 2008.

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

Представлен в R2014a