Наивная классификация Байеса для многоклассовой классификации
ClassificationNaiveBayes является классификатором наивного Байеса для многоклассового обучения. Обученный ClassificationNaiveBayes классификаторы сохраняют обучающие данные, значения параметров, распределение данных и предшествующие вероятности. Используйте эти классификаторы для выполнения таких задач, как оценка прогнозов повторного замещения (см. resubPredict) и прогнозирование меток или задних вероятностей для новых данных (см. predict).
Создать ClassificationNaiveBayes объект с помощью fitcnb.
PredictorNames - Имена предикторовЭто свойство доступно только для чтения.
Имена предикторов, заданные как массив ячеек символьных векторов. Порядок элементов в PredictorNames соответствует порядку, в котором имена предикторов появляются в данных обучения X.
ExpandedPredictorNames - Расширенные имена предикторовЭто свойство доступно только для чтения.
Расширенные имена предикторов, заданные как массив ячеек символьных векторов.
Если модель использует фиктивную кодировку переменных для категориальных переменных, то ExpandedPredictorNames содержит имена, описывающие развернутые переменные. В противном случае ExpandedPredictorNames является таким же, как PredictorNames.
CategoricalPredictors - Индексы категориального предиктора[] | вектор положительных целых чиселЭто свойство доступно только для чтения.
Индексы категориального предиктора, указанные как вектор положительных целых чисел. CategoricalPredictors содержит значения индексов, соответствующие столбцам данных предиктора, которые содержат категориальные предикторы. Если ни один из предикторов не категоричен, то это свойство пустое ([]).
Типы данных: single | double
CategoricalLevels - Многомерные полиномиальные уровниЭто свойство доступно только для чтения.
Многомерные полиномиальные уровни, определяемые как клеточный массив. Длина CategoricalLevels равно числу предикторов (size(X,2)).
Ячейки CategoricalLevels соответствуют предикторам, указанным как 'mvmn' во время обучения, то есть имеют многомерное полиномиальное распределение. Клетки, которые не соответствуют многомерному полиномиальному распределению, пусты ([]).
Если предиктор j является многомерным полиномиальным, то CategoricalLevels{j} является списком всех различных значений предиктора j в выборке. NaNs удалены из unique(X(:,j)).
X - Нестандартные предикторыЭто свойство доступно только для чтения.
Нестандартные предикторы, используемые для обучения наивного классификатора Байеса, указанного как числовая матрица. Каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одной переменной. Программа исключает наблюдения, содержащие по крайней мере одно отсутствующее значение, и удаляет соответствующие элементы из Y.
DistributionNames - Предикторные распределения'normal' (по умолчанию) | 'kernel' | 'mn' | 'mvmn' | массив ячеек символьных векторовЭто свойство доступно только для чтения.
Предикторные распределения, заданные как символьный вектор или массив ячеек символьных векторов. fitcnb использует распределения предиктора для моделирования предикторов. В этой таблице перечислены доступные дистрибутивы.
| Стоимость | Описание |
|---|---|
'kernel' | Оценка плотности сглаживания ядра |
'mn' | Полиномиальное распределение. При указании mn, то все особенности являются компонентами полиномиального распределения. Поэтому нельзя включать 'mn' в качестве элемента строкового массива или массива ячеек символьных векторов. Дополнительные сведения см. в разделе Предполагаемая вероятность для полиномиального распределения. |
'mvmn' | Многомерное полиномиальное распределение. Дополнительные сведения см. в разделе Предполагаемая вероятность многомерного многомерного распределения. |
'normal' | Нормальное (гауссово) распределение |
Если DistributionNames является массивом 1-by-P ячеек символьных векторов, то fitcnb моделирует признак j, используя распределение в элементе j массива ячеек.
Пример: 'mn'
Пример: {'kernel','normal','kernel'}
Типы данных: char | string | cell
DistributionParameters - Оценки параметров распределенияЭто свойство доступно только для чтения.
Оценки параметров распределения, заданные как массив ячеек. DistributionParameters является массивом ячеек K-by-D, где ячейка (k, d) содержит оценки параметров распределения для экземпляров предсказателя d в классе k. Порядок строк соответствует порядку классов в свойствеClassNamesи порядок предикторов соответствует порядку столбцов X.
Если класс k не имеет наблюдений для предиктора j, то Distribution{ пуст (k,j}[]).
Элементы DistributionParameters зависят от распределений предикторов. В этой таблице описываются значения в DistributionParameters{.k,j}
| Распределение предиктора j | Значение массива ячеек для предиктора j и класс k |
|---|---|
kernel | A KernelDistribution модель. Отображение свойств с помощью индексирования ячеек и точечной нотации. Например, чтобы отобразить оцененную полосу пропускания плотности ядра для предсказателя 2 в третьем классе, используйте Mdl.DistributionParameters{3,2}.BandWidth. |
mn | Скаляр, представляющий вероятность появления маркера j в классе k. Дополнительные сведения см. в разделе Предполагаемая вероятность для полиномиального распределения. |
mvmn | Числовой вектор, содержащий вероятности для каждого возможного уровня предсказателя j в классе k. Программное обеспечение упорядочивает вероятности по отсортированному порядку всех уникальных уровней предиктора j (сохраняется в свойстве CategoricalLevels). Дополнительные сведения см. в разделе Предполагаемая вероятность многомерного многомерного распределения. |
normal | Числовой вектор 2 на 1. Первый элемент является средним значением выборки, а второй элемент является стандартным отклонением выборки. |
Kernel - Более гладкий тип ядра'normal' (по умолчанию) | 'box' | массив ячеек |...Это свойство доступно только для чтения.
Более плавный тип ядра, указанный как имя ядра или массива ячеек имен ядра. Длина Kernel равно числу предикторов (size(X,2)). Kernel{j} соответствует предиктору j и содержит символьный вектор, описывающий тип сглаживания ядра. Если ячейка пуста ([]), то fitcnb не соответствует распределению ядра соответствующему предиктору.
В этой таблице описаны поддерживаемые типы сглаживания ядра. I {u} обозначает функцию индикатора.
| Стоимость | Ядро | Формула |
|---|---|---|
'box' | Коробка (униформа) |
=0.5I{|x|≤1} |
'epanechnikov' | Епанечников |
I{|x|≤1} |
'normal' | Гауссовский |
0.5x2) |
'triangle' | Треугольный |
I{|x|≤1} |
Пример: 'box'
Пример: {'epanechnikov','normal'}
Типы данных: char | string | cell
Support - Поддержка более плавной плотности ядраЭто свойство доступно только для чтения.
Поддержка более плавной плотности ядра, заданная как массив ячеек. Длина Support равно числу предикторов (size(X,2)). Ячейки представляют области, в которые fitcnb применяет плотность ядра. Если ячейка пуста ([]), то fitcnb не соответствует распределению ядра соответствующему предиктору.
В этой таблице описаны поддерживаемые параметры.
| Стоимость | Описание |
|---|---|
| Вектор числовой строки 1 на 2 | Поддержка плотности применяется, например, к указанным границам [L,U], где L и U являются конечными нижней и верхней границами соответственно. |
'positive' | Поддержка плотности применяется ко всем положительным действительным значениям. |
'unbounded' | Поддержка плотности применяется ко всем действительным значениям. |
Width - Более гладкая ширина окна ядраЭто свойство доступно только для чтения.
Более гладкая ширина окна ядра, заданная как числовая матрица. Width является матрицей K-by-P, где K - количество классов в данных, а P - количество предикторов (size(X,2)).
Width( - ширина окна сглаживания ядра для плотности сглаживания ядра предиктора k,j)j внутри класса k. NaNs в столбце j указать, что fitcnb не подходил для предиктора j с использованием плотности ядра.
ClassNames - Уникальные имена классовЭто свойство доступно только для чтения.
Уникальные имена классов, используемые в модели обучения, указанные как категориальный или символьный массив, логический или числовой вектор или массив ячеек символьных векторов.
ClassNames имеет тот же тип данных, что и Yи имеет K элементов (или строк) для символьных массивов. (Программа рассматривает строковые массивы как массивы ячеек символьных векторов.)
Типы данных: categorical | char | string | logical | double | cell
ResponseName - Имя переменной ответаЭто свойство доступно только для чтения.
Имя ответной переменной, указанное как символьный вектор.
Типы данных: char | string
Y - Этикетки классовЭто свойство доступно только для чтения.
Метки классов, используемые для обучения наивного классификатора Байеса, заданного как категориальный или символьный массив, логический или числовой вектор или массив ячеек символьных векторов. Каждая строка Y представляет наблюдаемую классификацию соответствующей строки X.
Y имеет тот же тип данных, что и данные в Y используется для обучения модели. (Программа рассматривает строковые массивы как массивы ячеек символьных векторов.)
Типы данных: single | double | logical | char | string | cell | categorical
ModelParameters - Значения параметров, используемые для обучения моделиЭто свойство доступно только для чтения.
Значения параметров, используемые для обучения ClassificationNaiveBayes модель, заданная как объект. ModelParameters содержит значения параметров, такие как значения аргументов пары имя-значение, используемые для обучения наивного классификатора Байеса.
Доступ к свойствам ModelParameters используя точечную нотацию. Например, доступ к поддержке ядра с помощью Mdl.ModelParameters.Support.
NumObservations - Количество учебных наблюденийЭто свойство доступно только для чтения.
Количество учебных наблюдений в данных обучения, хранящихся в X и Y, указывается как числовой скаляр.
Prior - Предварительные вероятностиПредшествующие вероятности, указанные как числовой вектор. Порядок элементов в Prior соответствует элементам Mdl.ClassNames.
fitcnb нормализует предыдущие вероятности, установленные с помощью 'Prior' аргумент пары имя-значение, так что sum(Prior) = 1.
Значение Prior не влияет на наиболее подходящую модель. Поэтому можно сбросить Prior после обучения Mdl с использованием точечной нотации.
Пример: Mdl.Prior = [0.2 0.8]
Типы данных: double | single
W - Наблюдательные весаЭто свойство доступно только для чтения.
Веса наблюдений, указанные как вектор неотрицательных значений с тем же количеством строк, что и Y. Каждая запись в W указывает относительную важность соответствующего наблюдения в Y. fitcnb нормализует значение, установленное для 'Weights' аргумент пары имя-значение, так что веса внутри конкретного класса суммируются с предыдущей вероятностью для этого класса.
Cost - Расходы на неправильную классификациюСтоимость неправильной классификации, указанная как числовая квадратная матрица, где Cost(i,j) - стоимость классификации точки по классу j если его истинный класс i. Строки соответствуют истинному классу, а столбцы соответствуют прогнозируемому классу. Порядок строк и столбцов Cost соответствует порядку классов в ClassNames.
Матрица затрат на неправильную классификацию должна иметь нули на диагонали.
Значение Cost не влияет на обучение. Можно сбросить Cost после обучения Mdl с использованием точечной нотации.
Пример: Mdl.Cost = [0 0.5 ; 1 0]
Типы данных: double | single
HyperparameterOptimizationResults - Оптимизация гиперпараметров при перекрестной проверкеBayesianOptimization объект | таблицаЭто свойство доступно только для чтения.
Оптимизация гиперпараметров с перекрестной проверкой, указанная как BayesianOptimization объект или таблица гиперпараметров и связанных значений. Это свойство не является пустым, если 'OptimizeHyperparameters' аргумент пары «имя-значение» не является пустым при создании модели. Значение HyperparameterOptimizationResults зависит от настройки Optimizer в поле HyperparameterOptimizationOptions структура при создании модели.
Значение Optimizer Область | Значение HyperparameterOptimizationResults |
|---|---|
'bayesopt' (по умолчанию) | Объект класса BayesianOptimization |
'gridsearch' или 'randomsearch' | Таблица используемых гиперпараметров, наблюдаемые значения целевой функции (потеря перекрестной проверки) и ранг наблюдений от самого низкого (лучший) до самого высокого (худший) |
ScoreTransform - Преобразование классификационного балла'none' (по умолчанию) | 'doublelogit' | 'invlogit' | 'ismax' | 'logit' | дескриптор функции |...Преобразование оценки классификации, указанное как символьный вектор или дескриптор функции. В этой таблице представлены доступные векторы символов.
| Стоимость | Описание |
|---|---|
'doublelogit' | 1/( 1 + e-2x) |
'invlogit' | log (x/( 1 - x)) |
'ismax' | Устанавливает балл для класса с наибольшим баллом в 1 и устанавливает балл для всех остальных классов в 0 |
'logit' | 1/( 1 + e-x) |
'none' или 'identity' | x (без преобразования) |
'sign' | -1 для x < 0 0 для x = 0 1 для x > 0 |
'symmetric' | 2x – 1 |
'symmetricismax' | Устанавливает балл для класса с наибольшим баллом в 1 и устанавливает балл для всех остальных классов в -1 |
'symmetriclogit' | 2/( 1 + e-x) - 1 |
Для функции MATLAB ® или определяемой функции используйте ее дескриптор функции для преобразования баллов. Дескриптор функции должен принимать матрицу (исходные баллы) и возвращать матрицу того же размера (преобразованные баллы).
Пример: Mdl.ScoreTransform = 'logit'
Типы данных: char | string | function handle
compact | Уменьшение размера модели машинного обучения |
compareHoldout | Сравнение точности двух классификационных моделей с использованием новых данных |
crossval | Модель машинного обучения с перекрестной проверкой |
edge | Край классификации для наивного классификатора Байеса |
incrementalLearner | Преобразовать наивную модель классификации Байеса в инкрементного ученика |
lime | Локальные интерпретируемые модели-агностические объяснения (LIME) |
logp | Логарифмическая безусловная плотность вероятности для наивного классификатора Байеса |
loss | Потеря классификации для наивного классификатора Байеса |
margin | Поля классификации для наивного классификатора Байеса |
partialDependence | Вычислить частичную зависимость |
plotPartialDependence | Создание графиков частичной зависимости (PDP) и индивидуального условного ожидания (ICE) |
predict | Классифицировать наблюдения с помощью наивного классификатора Байеса |
resubEdge | Край классификации повторной субституции |
resubLoss | Потеря классификации возмещения |
resubMargin | Маржа классификации ресообразования |
resubPredict | Классификация данных обучения с использованием обученного классификатора |
shapley | Значения Шапли |
testckfold | Сравнение точности двух классификационных моделей с помощью повторной перекрестной проверки |
Создайте наивный классификатор Байеса для набора данных радужки Фишера. Затем укажите предварительные вероятности после обучения классификатора.
Загрузить fisheriris набор данных. Создать X в виде цифровой матрицы, которая содержит четыре измерения лепестка для 150 ирисов. Создать Y как клеточный массив характерных векторов, который содержит соответствующие виды радужки.
load fisheriris
X = meas;
Y = species;Обучить наивный классификатор Байеса с помощью предикторов X и метки классов Y. fitcnb предполагает, что каждый предиктор является независимым и подходит для каждого предиктора с использованием нормального распределения по умолчанию.
Mdl = fitcnb(X,Y)
Mdl =
ClassificationNaiveBayes
ResponseName: 'Y'
CategoricalPredictors: []
ClassNames: {'setosa' 'versicolor' 'virginica'}
ScoreTransform: 'none'
NumObservations: 150
DistributionNames: {'normal' 'normal' 'normal' 'normal'}
DistributionParameters: {3x4 cell}
Properties, Methods
Mdl является обученным ClassificationNaiveBayes классификатор. Некоторые из Mdl отображаются в окне команд.
Отображение свойств Mdl с использованием точечной нотации. Например, отображение имен классов и предыдущих вероятностей.
Mdl.ClassNames
ans = 3x1 cell
{'setosa' }
{'versicolor'}
{'virginica' }
Mdl.Prior
ans = 1×3
0.3333 0.3333 0.3333
Порядок предшествующих вероятностей класса в Mdl.Prior соответствует порядку классов в Mdl.ClassNames. По умолчанию предшествующие вероятности являются соответствующими относительными частотами классов в данных. Кроме того, можно установить предыдущие вероятности при вызове fitcnb с помощью «»Prior' аргумент пары имя-значение.
Установите предыдущие вероятности после обучения классификатора с помощью точечной нотации. Например, установите предыдущие вероятности 0,5, 0,2 и 0,3 соответственно.
Mdl.Prior = [0.5 0.2 0.3];
Теперь этот обученный классификатор можно использовать для выполнения дополнительных задач. Например, можно маркировать новые измерения с помощью predict или перекрестная проверка классификатора с помощью crossval.
Тренируйте и перекрестно проверяйте наивный классификатор Байеса. fitcnb реализует 10-кратную перекрестную проверку по умолчанию. Затем оцените кросс-проверенную ошибку классификации.
Загрузить ionosphere набор данных. Удалите первые два предиктора стабильности.
load ionosphere X = X(:,3:end); rng('default') % for reproducibility
Обучение и перекрестная проверка наивного классификатора Байеса с использованием предикторов X и метки классов Y. Рекомендуется указывать имена классов. fitcnb предполагает, что каждый предиктор условно и нормально распределен.
CVMdl = fitcnb(X,Y,'ClassNames',{'b','g'},'CrossVal','on')
CVMdl =
ClassificationPartitionedModel
CrossValidatedModel: 'NaiveBayes'
PredictorNames: {1x32 cell}
ResponseName: 'Y'
NumObservations: 351
KFold: 10
Partition: [1x1 cvpartition]
ClassNames: {'b' 'g'}
ScoreTransform: 'none'
Properties, Methods
CVMdl является ClassificationPartitionedModel перекрестно проверенный, наивный классификатор Байеса. Кроме того, можно выполнить перекрестную проверку обученного ClassificationNaiveBayes модель, передав ее crossval.
Отобразить первую тренировочную складку CVMdl с использованием точечной нотации.
CVMdl.Trained{1}ans =
CompactClassificationNaiveBayes
ResponseName: 'Y'
CategoricalPredictors: []
ClassNames: {'b' 'g'}
ScoreTransform: 'none'
DistributionNames: {1x32 cell}
DistributionParameters: {2x32 cell}
Properties, Methods
Каждая складка является CompactClassificationNaiveBayes модель обучена 90% данных.
Полные и компактные наивные модели Байеса не используются для прогнозирования на новых данных. Вместо этого используйте их для оценки ошибки обобщения путем передачи CVMdl кому kfoldLoss.
genError = kfoldLoss(CVMdl)
genError = 0.1852
В среднем погрешность обобщения составляет примерно 19%.
Можно указать другое условное распределение для предикторов или настроить параметры условного распределения, чтобы уменьшить ошибку обобщения.
В модели сумки маркеров значение предсказателя j является неотрицательным числом появлений маркера j в наблюдении. Количество категорий (ячеек) в полиномиальной модели - это количество различных токенов (количество предикторов).
Наивный Байес - это алгоритм классификации, который применяет оценку плотности к данным.
Алгоритм использует теорему Байеса, и (наивно) предполагает, что предикторы условно независимы, учитывая класс. Хотя это предположение обычно нарушается на практике, наивные классификаторы Байеса, как правило, дают апостериорные распределения, которые устойчивы к смещенным оценкам плотности класса, особенно если апостериор равен 0,5 (граница принятия решения) [1].
Наивные байесовские классификаторы присваивают наблюдения наиболее вероятному классу (другими словами, максимальному правилу апостериорного решения). В явном виде алгоритм выполняет следующие шаги:
Оцените плотности предикторов в каждом классе.
Модель задних вероятностей по правилу Байеса. То есть для всех k = 1,...,K,
k) ∏j=1PP (Xj 'Y = k),
где:
Y - случайная величина, соответствующая индексу класса наблюдения.
X1,...,XP являются случайными предикторами наблюдения.
k) - предшествующая вероятность того, что индекс класса равен k.
Классифицируйте наблюдение, оценивая заднюю вероятность для каждого класса, а затем назначьте наблюдение классу, дающему максимальную заднюю вероятность.
Если предсказатели составляют multinomial распределение, то следующий XP'Y=k), XP'Y=k) является функцией массы вероятности multinomial распределения.
При указании 'DistributionNames','mn' при обучении Mdl использование fitcnb, то программное обеспечение подходит для полиномиального распределения с использованием модели Bag-of-Tokens. Программа сохраняет вероятность того, что маркер j появляется в классе k в свойстве DistributionParameters{. При аддитивном сглаживании [2] оценочная вероятность равнаk,j}
cj' kP + ck,
где:
который является взвешенным числом вхождений маркера j в классе k.
nk - количество наблюдений в классе k.
- вес для наблюдения. Программное обеспечение нормализует вес внутри класса таким образом, что они суммируют с предыдущей вероятностью для этого класса.
общее взвешенное число вхождений всех маркеров в классе k.
При указании 'DistributionNames','mvmn' при обучении Mdl использование fitcnb, затем программное обеспечение выполняет следующие шаги:
Для каждого предиктора программное обеспечение собирает список уникальных уровней, сохраняет отсортированный список в CategoricalLevelsи рассматривает каждый уровень как ячейку. Каждая комбинация предиктора и класса является отдельной, независимой полиномиальной случайной величиной.
Для предиктора j в классе k программное обеспечение подсчитывает экземпляры каждого категориального уровня с использованием списка, сохраненного в CategoricalLevels{.j}
Программное обеспечение сохраняет вероятность того, что предиктор j в классе k имеет уровень L в свойстве DistributionParameters{, для всех уровней в k,j}CategoricalLevels{. При аддитивном сглаживании [2] оценочная вероятность равнаj}
L) mj + mk,
где:
kwi, который является взвешенным числом наблюдений, для которых предиктор j равен L в классе k.
nk - количество наблюдений в классе k.
} = 1, если xij = L, и 0 в противном случае.
- вес для наблюдения. Программное обеспечение нормализует вес внутри класса таким образом, что они суммируют с предыдущей вероятностью для этого класса.
mj - количество различных уровней в предикторе j.
mk - взвешенное число наблюдений в классе k.
[1] Хасти, Тревор, Роберт Тибширани и Джером Фридман. Элементы статистического обучения: анализ данных, вывод и прогноз. 2-я редакция серии Спрингера в статистике. Нью-Йорк, Нью-Йорк: Спрингер, 2009. https://doi.org/10.1007/978-0-387-84858-7.
[2] Мэннинг, Кристофер Д., Прабхакар Рагхаван и Хинрих Шютце. Введение в поиск информации, Нью-Йорк: Cambridge University Press, 2008.
Примечания и ограничения по использованию:
predict функция поддерживает генерацию кода.
Когда вы тренируете наивную модель Байеса с помощью fitcnb, применяются следующие ограничения.
Значение 'DistributionNames' аргумент пары имя-значение не может содержать 'mn'.
Значение 'ScoreTransform' аргумент пары имя-значение не может быть анонимной функцией.
Дополнительные сведения см. в разделе Введение в создание кода.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.