Наивная Байесова классификация для классификации мультиклассов
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 в выборке.
NaN
s удалены из unique(X(:,j))
.
X
— Нестандартизированные предикторыЭто свойство доступно только для чтения.
Нестандартизированные предикторы раньше обучали наивный классификатор Байеса в виде числовой матрицы. Каждая строка X
соответствует одному наблюдению, и каждый столбец соответствует одной переменной. Программное обеспечение исключает наблюдения, содержащие по крайней мере одно отсутствующее значение, и удаляет соответствующие элементы из Y.
DistributionNames
— Распределения предиктора'normal'
(значение по умолчанию) | 'kernel'
| 'mn'
| 'mvmn'
| массив ячеек из символьных векторовЭто свойство доступно только для чтения.
Распределения предиктора в виде вектора символов или массива ячеек из символьных векторов. fitcnb
использует распределения предиктора, чтобы смоделировать предикторы. Эта таблица приводит доступные распределения.
Значение | Описание |
---|---|
'kernel' | Ядро, сглаживающее оценку плотности |
'mn' | Распределение многочлена. Если вы задаете mn , затем всеми функциями являются компоненты распределения многочлена. Поэтому вы не можете включать 'mn' как элемент массива строк или массива ячеек из символьных векторов. Для получения дополнительной информации смотрите Предполагаемую Вероятность для Распределения Многочлена. |
'mvmn' | Многомерное распределение многочлена. Для получения дополнительной информации смотрите Предполагаемую Вероятность для Многомерного Распределения Многочлена. |
'normal' | Нормальное (Гауссово) распределение |
Если DistributionNames
1 P массивом ячеек из символьных векторов, затем fitcnb
моделирует функцию j с помощью распределения в элементе j массива ячеек.
Пример: 'mn'
Пример: {'kernel','normal','kernel'}
Типы данных: char |
string
| cell
DistributionParameters
— Оценки параметра распределенияЭто свойство доступно только для чтения.
Параметр распределения оценивает в виде массива ячеек. DistributionParameters
K-by-D массив ячеек, где ячейка (k, d) содержит оценки параметра распределения для экземпляров предиктора d в классе k. Порядок строк соответствует порядку классов в свойстве ClassNames
, и порядок предикторов соответствует порядку столбцов X
.
Если класс k
не имеет никаких наблюдений для предиктора j
, затем Распределение {
k
J
}isempty
).
Элементы DistributionParameters
зависьте от распределений предикторов. Эта таблица описывает значения в DistributionParameters {
.k
J
}
Распределение предиктора j | Значение массива ячеек для предиктора j и класс k |
---|---|
kernel | 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' | Поле (универсальная форма) |
|
'epanechnikov' | Епанечников |
|
'normal' | Гауссов |
|
'triangle' | Треугольный |
|
Пример: '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)
).
Ширина (
ядро более сглаженная ширина окна для плотности сглаживания ядра предиктора k
J
)j
в классе k
NaN
s в столбце 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
— Misclassification стоитсяСтоимость Misclassification в виде числовой квадратной матрицы, где Cost(i,j)
стоимость классификации точки в класс j
если его истинным классом является i
. Строки соответствуют истинному классу, и столбцы соответствуют предсказанному классу. Порядок строк и столбцов Cost
соответствует порядку классов в ClassNames
.
Матрица стоимости misclassification должна иметь нули на диагонали.
Значение 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' | журнал (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 | Уменьшайте размер наивного классификатора Байеса |
crossval | Перекрестный подтвердите наивный классификатор Байеса |
edge | Ребро классификации для наивного классификатора Байеса |
logp | Регистрируйте безусловную плотность вероятности для наивного классификатора Байеса |
loss | Потеря классификации для наивного классификатора Байеса |
margin | Поля классификации для наивного классификатора Байеса |
partialDependence | Вычислите частичную зависимость |
plotPartialDependence | Создайте графики отдельного условного ожидания (ICE) и частичный график зависимости (PDP) |
predict | Классифицируйте наблюдения с помощью наивного классификатора Байеса |
resubEdge | Ребро классификации перезамены для наивного классификатора Байеса |
resubLoss | Потеря классификации перезамены для наивного классификатора Байеса |
resubMargin | Поля классификации перезамены для наивного классификатора Байеса |
resubPredict | Классифицируйте наблюдения с помощью наивного классификатора Байеса |
Создайте наивный классификатор Байеса для ирисового набора данных Фишера. Затем задайте априорные вероятности после обучения классификатор.
Загрузите 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% данных.
Полные и компактные наивные модели Bayes не используются для предсказания на новых данных. Вместо этого используйте их, чтобы оценить ошибку обобщения путем передачи CVMdl
к kfoldLoss
.
genError = kfoldLoss(CVMdl)
genError = 0.1852
В среднем ошибка обобщения составляет приблизительно 19%.
Можно задать различное условное распределение для предикторов или настроить параметры условного распределения, чтобы уменьшать ошибку обобщения.
В модели сумки лексем значении предиктора j является неотрицательным количеством случаев маркерного j в наблюдении. Количество категорий (интервалы) в модели многочлена является количеством отличных лексем (количество предикторов).
Naive Bayes является алгоритмом классификации, который применяет оценку плотности данными.
Алгоритм усиливает теорему Бейеса, и (наивно) принимает, что предикторы условно независимы, учитывая класс. Несмотря на то, что предположение обычно нарушается на практике, наивные классификаторы Байеса имеют тенденцию давать к апостериорным распределениям, которые устойчивы к смещенным оценкам плотности класса, особенно где следующее 0.5 (контур решения) [1].
Наивные классификаторы Байеса присваивают наблюдения самому вероятному классу (другими словами, правило решения maximum a posteriori). Явным образом алгоритм делает эти шаги:
Оцените плотность предикторов в каждом классе.
Апостериорные вероятности модели согласно правилу Бейеса. Таким образом, для всего k = 1..., K,
где:
Y является случайной переменной, соответствующей индексу класса наблюдения.
X 1..., XP является случайными предикторами наблюдения.
априорная вероятность, что индексом класса является k.
Классифицируйте наблюдение путем оценки апостериорной вероятности для каждого класса, и затем присвойте наблюдение классу, дающему к максимальной апостериорной вероятности.
Если предикторы составляют распределение многочлена, то апостериорная вероятность где функция вероятностной меры распределения многочлена.
Если вы задаете 'DistributionNames','mn'
когда учебный Mdl
использование fitcnb
, затем программное обеспечение соответствует распределению многочлена с помощью Модели Сумки Лексем. Программное обеспечение хранит вероятность тот маркерный j
появляется в классе k
в свойстве DistributionParameters {
. С дополнением, сглаживающим [2], предполагаемая вероятностьk
J
}
где:
который является взвешенным количеством случаев маркерного j в классе k.
nk является количеством наблюдений в классе k.
вес для наблюдения i. Программное обеспечение нормирует веса в классе так, чтобы они суммировали к априорной вероятности для того класса.
который является общим взвешенным количеством случаев всех лексем в классе k.
Если вы задаете 'DistributionNames','mvmn'
когда учебный Mdl
использование fitcnb
, затем программное обеспечение делает эти шаги:
Для каждого предиктора программное обеспечение собирает список уникальных уровней, хранит отсортированный список в CategoricalLevels
, и считает каждый уровень интервалом. Каждая комбинация предиктора и класса является отдельной, независимой случайной переменной многочлена.
Для предиктора j
в классе k, экземпляры программно-реализованных счетчиков каждого категориального уровня с помощью списка, сохраненного в CategoricalLevels {
.j
}
Программное обеспечение хранит вероятность тот предиктор j
в классе k
имеет уровень L в свойстве DistributionParameters {
, для всех уровней в k
J
}CategoricalLevels {
. С дополнением, сглаживающим [2], предполагаемая вероятностьj
}
где:
который является взвешенным количеством наблюдений, для которого предиктора j равняется L в классе k.
nk является количеством наблюдений в классе k.
если xij = L, и 0 в противном случае.
вес для наблюдения i. Программное обеспечение нормирует веса в классе так, чтобы они суммировали к априорной вероятности для того класса.
mj является количеством отличных уровней в предикторе j.
mk является взвешенным количеством наблюдений в классе k.
[1] Hastie, Тревор, Роберт Тибширэни и Джером Фридман. Элементы Статистического Изучения: Анализ данных, Вывод и Предсказание. 2-й Ряд редактора Спрингера в Статистике. Нью-Йорк, Нью-Йорк: Спрингер, 2009. https://doi.org/10.1007/978-0-387-84858-7.
[2] Укомплектование людьми, Кристофер Д., Prabhakar Raghavan и Hinrich Schütze. Введение в Информэйшн-Ретривэл, Нью-Йорк: Издательство Кембриджского университета, 2008.
Указания и ограничения по применению:
predict
функционируйте генерация кода поддержек.
Когда вы обучаете наивную модель Bayes при помощи fitcnb
, следующие ограничения применяются.
Класс помечает значение входного параметра (Y
) не может быть категориальный массив.
Генерация кода не поддерживает категориальные предикторы (logical
категориальный
'char'
Строка
, или cell
). Если вы снабжаете обучающими данными в таблице, предикторы должны быть числовыми (double
или single
). Кроме того, вы не можете использовать 'CategoricalPredictors'
аргумент пары "имя-значение".
Значение 'DistributionNames'
аргумент пары "имя-значение" не может содержать 'mn'
или 'mvmn'
.
Значение 'ClassNames'
аргументом пары "имя-значение" не может быть категориальный массив.
Значение 'ScoreTransform'
аргументом пары "имя-значение" не может быть анонимная функция.
Для получения дополнительной информации смотрите Введение в Генерацию кода.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.