Потеря классификации для наивного классификатора Байеса
возвращает Classification Loss, скаляр, представляющий, насколько хорошо обученный наивный классификатор Байеса L = loss(Mdl,tbl,ResponseVarName)Mdl классифицирует данные предиктора в таблице tbl по сравнению с метками истинного класса в tbl.ResponseVarName.
loss нормализует вероятности классов в tbl.ResponseVarName к вероятностям предыдущего класса, используемым fitcnb для обучения, которые хранятся в Prior имущество Mdl.
указывает параметры, использующие один или несколько аргументов пары имя-значение в дополнение к любой из комбинаций входных аргументов в предыдущих синтаксисах. Например, можно указать функцию потерь и классификационные веса.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.
Mdl - Наивная модель классификации БайесаClassificationNaiveBayes объект модели | CompactClassificationNaiveBayes объект моделиНаивная модель классификации Байеса, указанная как ClassificationNaiveBayes объект модели или CompactClassificationNaiveBayes объект модели, возвращенный fitcnb или compactсоответственно.
tbl - Образцы данныхОбразец данных, используемых для обучения модели, указанный как таблица. Каждая строка tbl соответствует одному наблюдению, и каждый столбец соответствует одной прогнозирующей переменной. tbl должен содержать все предикторы, используемые для обучения Mdl. Многозначные переменные и массивы ячеек, отличные от массивов ячеек символьных векторов, не допускаются. Дополнительно, tbl может содержать дополнительные столбцы для переменной ответа и весов наблюдения.
Если вы тренируетесь Mdl используя образцы данных, содержащиеся в таблице, затем входные данные для loss также должен находиться в таблице.
ResponseVarName - Имя переменной ответаtblИмя переменной ответа, указанное как имя переменной в tbl.
Необходимо указать ResponseVarName в виде вектора символов или строкового скаляра. Например, если переменная ответа y хранится как tbl.y, затем укажите его как 'y'. В противном случае программа обрабатывает все столбцы tbl, в том числе y, как предикторы.
Если tbl содержит переменную ответа, используемую для обучения Mdl, то указывать не нужно ResponseVarName.
Переменная ответа должна быть категориальным, символьным или строковым массивом, логическим или числовым вектором или массивом ячеек символьных векторов. Если ответная переменная является символьным массивом, то каждый элемент должен соответствовать одной строке массива.
Типы данных: char | string
X - Данные предиктораДанные предиктора, заданные как числовая матрица.
Каждая строка X соответствует одному наблюдению (также известному как экземпляр или пример), и каждый столбец соответствует одной переменной (также известной как элемент). Переменные в столбцах X должны быть такими же, как переменные, которые обучали Mdl классификатор.
Длина Y и количество строк X должно быть равным.
Типы данных: double | single
Y - Этикетки классовМетки класса, указанные как категориальный, символьный или строковый массив, логический или числовой вектор или массив ячеек символьных векторов. 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' - Функция потерь'mincost' (по умолчанию) | 'binodeviance' | 'classiferror' | 'exponential' | 'hinge' | 'logit' | 'quadratic' | дескриптор функцииФункция потерь, заданная как разделенная запятыми пара, состоящая из '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около-K логическая матрица со строками, указывающими класс, которому принадлежит соответствующее наблюдение. Порядок столбцов соответствует порядку классов в Mdl.ClassNames.
Создать C путем установки C(p,q) = 1 если наблюдение p находится в классе q, для каждой строки. Установка всех остальных элементов строки p кому 0.
S является nоколо-K числовая матрица классификационных баллов. Порядок столбцов соответствует порядку классов в Mdl.ClassNames. S - матрица классификационных баллов, аналогичная выходному результату predict.
W является n-по-1 числовой вектор весов наблюдения. Если вы проходите W, программное обеспечение нормализует веса для суммирования 1.
Cost является Kоколо-K числовая матрица затрат на неправильную классификацию. Например, Cost = ones(K) - eye(K) указывает стоимость 0 для правильной классификации и 1 для неправильной классификации.
Укажите свою функцию с помощью 'LossFun',@.lossfun
Дополнительные сведения о функциях потерь см. в разделе Классификационные потери.
Типы данных: char | string | function_handle
'Weights' - Наблюдательные весаones(size(X,1),1) (по умолчанию) | числовой вектор | имя переменной в tblВеса наблюдения, указанные как числовой вектор или имя переменной в tbl. Программное обеспечение взвешивает наблюдения в каждой строке X или tbl с соответствующими весами в Weights.
При указании Weights как числовой вектор, то размер Weights должно быть равно количеству строк X или tbl.
При указании Weights как имя переменной в tbl, то имя должно быть символьным вектором или строковым скаляром. Например, если веса сохранены как tbl.w, затем укажите Weights как 'w'. В противном случае программа обрабатывает все столбцы tbl, в том числе tbl.w, как предикторы.
Если функция потери не указана, программное обеспечение нормализуется Weights для добавления к 1.
Типы данных: double | char | string
L - классификационные потери;Потеря классификации, возвращенная как скаляр. L является показателем качества обобщения или повторного замещения. Его интерпретация зависит от функции потерь и схемы взвешивания; в целом, лучшие классификаторы дают меньшие значения потерь.
Функции потери классификации измеряют прогностическую неточность классификационных моделей. При сравнении одного и того же типа потерь между многими моделями меньшие потери указывают на лучшую прогностическую модель.
Рассмотрим следующий сценарий.
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. Поэтому
С учетом этого сценария в следующей таблице описаны поддерживаемые функции потерь, которые можно указать с помощью 'LossFun' аргумент пары имя-значение.
| Функция потерь | Значение LossFun | Уравнение |
|---|---|---|
| Биномиальное отклонение | 'binodeviance' | |
| Неверно классифицированная скорость в десятичной | 'classiferror' | j - метка класса, соответствующая классу с максимальным баллом. I {·} - функция индикатора. |
| Потери перекрестной энтропии | 'crossentropy' |
Взвешенная потеря перекрестной энтропии равна Kn, где веса нормализуются для суммирования в n вместо 1. |
| Экспоненциальные потери | 'exponential' | ). |
| Потеря шарнира | 'hinge' | |
| Потеря журнала | 'logit' | mj)). |
| Минимальная ожидаемая стоимость классификации ошибок | 'mincost' |
Программное обеспечение вычисляет взвешенную минимальную ожидаемую стоимость классификации, используя эту процедуру для наблюдений j = 1,..., n.
Средневзвешенное минимальное ожидаемое снижение затрат на неправильную классификацию Если используется матрица затрат по умолчанию (значение элемента которой равно 0 для правильной классификации и 1 для неправильной классификации), то |
| Квадратичные потери | 'quadratic' | ) 2. |
На этом рисунке сравниваются функции потерь (за исключением 'crossentropy' и 'mincost') над баллом м для одного наблюдения. Некоторые функции нормализуются для прохождения через точку (0,1).

Стоимость неправильной классификации - это относительная серьезность классификатора, маркирующего наблюдение в неправильный класс.
Существует два типа затрат на неправильную классификацию: истинные и ожидаемые. Пусть K - число классов.
Истинная стоимость неправильной классификации - матрица K-by-K, где элемент (i, j) указывает стоимость неправильной классификации предсказания наблюдения в класс j, если его истинный класс равен i. Программное обеспечение сохраняет стоимость неправильной классификации в свойствеMdl.Costи использует его в вычислениях. По умолчанию Mdl.Cost(i,j) = 1, если i ≠ j, и Mdl.Cost(i,j) = 0, если i = j. Другими словами, стоимость составляет 0 для правильной классификации и 1 для любой неправильной классификации.
Ожидаемая стоимость неправильной классификации - K-мерный вектор, где элемент k - средневзвешенная стоимость неправильной классификации при классификации наблюдения по классу k, взвешенная по апостериорным вероятностям класса.
Costjk.
Другими словами, программное обеспечение классифицирует наблюдения по классу, соответствующему самой низкой ожидаемой стоимости неправильной классификации.
Апостериорная вероятность - вероятность того, что наблюдение принадлежит конкретному классу, учитывая данные.
Для наивного Байеса апостериорная вероятность того, что классификация равна k для данного наблюдения (x1,...,xP), равна
k) P (X1,..., XP),
где:
= k) - условная плотность соединения предикторов при условии, что они находятся в классе k.Mdl.DistributionNames сохраняет имена распределения предикторов.
δ (Y = k) - класс, предшествующий распределению вероятности .Mdl.Prior сохраняет предыдущее распределение.
) - совместная плотность предикторов. Классы дискретны, поэтому δ (Y = k).
Предшествующая вероятность класса - предполагаемая относительная частота, с которой наблюдения из этого класса происходят в популяции.
Эта функция полностью поддерживает массивы tall. С помощью этой функции можно использовать модели, обученные работе с данными в памяти или с данными высокого уровня.
Дополнительные сведения см. в разделе Массивы Tall.
ClassificationNaiveBayes | CompactClassificationNaiveBayes | fitcnb | predict | resubLoss
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.