loss

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

Описание

L = loss(SVMModel,TBL,ResponseVarName) возвращает ошибку классификации (см. Потерю Классификации), скалярное представление как хорошо обученный классификатор машины опорных векторов (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 \in 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 \in fitcsvm обучать SVMModel, затем программное обеспечение стандартизирует столбцы X использование соответствующих средних значений в SVMModel.Mu и стандартные отклонения в SVMModel.Sigma.

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

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

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

Аргументы name-value

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

    Задайте свое использование функции '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

Больше о

свернуть все

Потеря классификации

Функции 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 (Xj). Поэтому 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)).
Минимальный ожидал стоимость misclassification'mincost'

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

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

  1. Оцените ожидаемую misclassification стоимость классификации наблюдения Xj в класс k:

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

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

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

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

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

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

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

Классификационная оценка

classification score 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) = xjx (линейное ядро), то функция счета уменьшает до

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

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

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

Ссылки

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

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

Введенный в R2014a