потеря

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

Синтаксис

L = loss(SVMModel,TBL,ResponseVarName)
L = loss(SVMModel,TBL,Y)
L = loss(SVMModel,X,Y)
L = loss(___,Name,Value)

Описание

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 в 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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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-by-K логическая матрица со строками, указывающими на класс, которому принадлежит соответствующее наблюдение. Порядок следования столбцов соответствует порядку класса в SVMModel.ClassNames.

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

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

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

    • Cost является K-by-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, указывая на отрицательный или положительный класс, соответственно.

    • 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].

Счет классификации

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