loss

Потеря классификации для наивного классификатора Байеса

Описание

L = loss(Mdl,tbl,ResponseVarName) возвращает Потерю Классификации, скалярное представление как хорошо обученный наивный классификатор Байеса Mdl классифицирует данные о предикторе на таблицу tbl по сравнению с истинным классом помечает в tbl.ResponseVarName.

loss нормирует вероятности класса в tbl.ResponseVarName к предшествующим вероятностям класса, используемым fitcnb для обучения, которые хранятся в Prior свойство Mdl.

L = loss(Mdl,tbl,Y) возвращает потерю классификации для данных о предикторе в таблице tbl и истинный класс помечает в Y.

пример

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

пример

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

Примеры

свернуть все

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

Загрузите fisheriris набор данных. Создайте X как числовая матрица, которая содержит четыре лепестковых измерения для 150 ирисовых диафрагм. Создайте Y как массив ячеек из символьных векторов, который содержит соответствующие ирисовые разновидности.

load fisheriris
X = meas;
Y = species;
rng('default')  % for reproducibility

Случайным образом наблюдения раздела в набор обучающих данных и набор тестов со стратификацией, с помощью информации о классе в Y. Задайте 30%-ю выборку затяжки для тестирования.

cv = cvpartition(Y,'HoldOut',0.30);

Извлеките обучение и протестируйте индексы.

trainInds = training(cv);
testInds = test(cv);

Задайте наборы тестовых данных и обучение.

XTrain = X(trainInds,:);
YTrain = Y(trainInds);
XTest = X(testInds,:);
YTest = Y(testInds);

Обучите наивный классификатор Байеса с помощью предикторов XTrain и класс маркирует YTrain. Методические рекомендации должны задать имена классов. fitcnb принимает, что каждый предиктор условно и нормально распределен.

Mdl = fitcnb(XTrain,YTrain,'ClassNames',{'setosa','versicolor','virginica'})
Mdl = 
  ClassificationNaiveBayes
              ResponseName: 'Y'
     CategoricalPredictors: []
                ClassNames: {'setosa'  'versicolor'  'virginica'}
            ScoreTransform: 'none'
           NumObservations: 105
         DistributionNames: {'normal'  'normal'  'normal'  'normal'}
    DistributionParameters: {3x4 cell}


  Properties, Methods

Mdl обученный ClassificationNaiveBayes классификатор.

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

L = loss(Mdl,XTest,YTest)
L = 0.0444

Наивный классификатор Байеса неправильно классифицирует приблизительно 4% тестовой выборки.

Вы можете уменьшить ошибку классификации путем определения лучших распределений предиктора, когда вы обучаете классификатор с fitcnb.

Загрузите fisheriris набор данных. Создайте X как числовая матрица, которая содержит четыре лепестковых измерения для 150 ирисовых диафрагм. Создайте Y как массив ячеек из символьных векторов, который содержит соответствующие ирисовые разновидности.

load fisheriris
X = meas;
Y = species;
rng('default')  % for reproducibility

Случайным образом наблюдения раздела в набор обучающих данных и набор тестов со стратификацией, с помощью информации о классе в Y. Задайте 30%-ю выборку затяжки для тестирования.

cv = cvpartition(Y,'HoldOut',0.30);

Извлеките обучение и протестируйте индексы.

trainInds = training(cv);
testInds = test(cv);

Задайте наборы тестовых данных и обучение.

XTrain = X(trainInds,:);
YTrain = Y(trainInds);
XTest = X(testInds,:);
YTest = Y(testInds);

Обучите наивный классификатор Байеса с помощью предикторов XTrain и класс маркирует YTrain. Методические рекомендации должны задать имена классов. fitcnb принимает, что каждый предиктор условно и нормально распределен.

Mdl = fitcnb(XTrain,YTrain,'ClassNames',{'setosa','versicolor','virginica'});

Mdl обученный ClassificationNaiveBayes классификатор.

Определите, как хорошо алгоритм делает вывод путем оценки тестовой демонстрационной потери логита.

L = loss(Mdl,XTest,YTest,'LossFun','logit')
L = 0.3359

Потеря логита - приблизительно 0,34.

Входные параметры

свернуть все

Наивная Байесова модель классификации в виде ClassificationNaiveBayes объект модели или CompactClassificationNaiveBayes объект модели, возвращенный fitcnb или compact, соответственно.

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

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

Имя переменной отклика в виде имени переменной в tbl.

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

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

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

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

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

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

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

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

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

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

Типы данных: categorical | char | string | logical | single | double | cell

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

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

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

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

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

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

    'mincost' подходит для классификационных оценок, которые являются апостериорными вероятностями. Наивные модели Bayes возвращают апостериорные вероятности как классификационные оценки по умолчанию (см. predict).

  • Задайте свою собственную функцию с помощью обозначения указателя на функцию.

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

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

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

    • Вы задаете имя функции (lossfun).

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

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

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

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

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

    Задайте свое использование функции 'LossFun', @lossfun.

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

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

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

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

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

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

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

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

свернуть все

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

Больше о

свернуть все

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

Функции 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

Стоимость Misclassification

misclassification cost является относительной серьезностью классификатора, маркирующего наблюдение в неправильный класс.

Существует два типа затрат misclassification: верный и ожидаемый. Позвольте K быть количеством классов.

  • True misclassification costK-by-K матрица, где элемент (i, j) указывает на misclassification стоимость предсказания наблюдения в класс j, если его истинным классом является i. Программное обеспечение хранит стоимость misclassification в свойстве Mdl.Cost, и использование это в расчетах. По умолчанию, Mdl.Cost(i,j) = 1, если ij, и Mdl.Cost(i,j) = 0, если i = j. Другими словами, стоимостью является 0 для правильной классификации и 1 для любой неправильной классификации.

  • Expected misclassification costK - размерный вектор, где элемент k является взвешенным средним misclassification стоимость классификации наблюдения в класс k, взвешенный апостериорными вероятностями класса.

    ck=j=1KP^(Y=j|x1,...,xP)Costjk.

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

Апостериорная вероятность

posterior probability является вероятностью, что наблюдение принадлежит конкретного класса, учитывая данные.

Для наивного Бейеса апостериорная вероятность, что классификацией является k для заданного наблюдения (x 1..., xP)

P^(Y=k|x1,..,xP)=P(X1,...,XP|y=k)π(Y=k)P(X1,...,XP),

где:

  • P(X1,...,XP|y=k) условная объединенная плотность предикторов, учитывая, они находятся в классе k. Mdl.DistributionNames хранит имена распределения предикторов.

  • π (Y = k) является априорным распределением вероятностей класса. Mdl.Prior хранит предшествующее распределение.

  • P(X1,..,XP) объединенная плотность предикторов. Классы дискретны, таким образом, P(X1,...,XP)=k=1KP(X1,...,XP|y=k)π(Y=k).

Априорная вероятность

prior probability класса является принятой относительной частотой, с которой наблюдения от того класса происходят в населении.

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

Введенный в R2014b