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объект модели объект модели, возвращенный 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 должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

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

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

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

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

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

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

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

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

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

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

    • 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 числовая матрица затрат на неправильную классификацию. Для примера, Cost = ones(K) - eye(K) задает стоимость 0 для правильной классификации и 1 для неправильной классификации.

    Задайте свою функцию, используя '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 (<reservedrangesplaceholder1>). Поэтому 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)).
Минимальные ожидаемые затраты на неправильную классификацию'mincost'

'mincost' подходит только, если классификационные оценки апостериорные вероятности.

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

  1. Оцените ожидаемые затраты на неправильную классификацию классификации Xj наблюдений в k классов:

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

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

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

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

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

Взвешенное среднее значение минимальных ожидаемых потерь от неправильной классификации

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 cost - это относительная серьезность классификатора, маркирующего наблюдение не в тот класс.

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

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

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

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

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

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

Это 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