Компактный наивный классификатор Байеса для многоклассовой классификации
CompactClassificationNaiveBayes
является компактной версией наивного классификатора Байеса. Компактный классификатор не включает данные, используемые для настройки наивного классификатора Байеса. Поэтому вы не можете выполнить некоторые задачи, такие как перекрестная валидация, используя компактный классификатор. Используйте компактный наивный классификатор Байеса для задач, таких как предсказание меток данных.
Создайте CompactClassificationNaiveBayes
модель из полного, обученного ClassificationNaiveBayes
классификатор при помощи compact
.
PredictorNames
- Имена предикторовЭто свойство доступно только для чтения.
Имена предиктора, заданные как массив ячеек из векторов символов. Порядок элементов в PredictorNames
соответствует порядку, в котором имена предикторов появляются в обучающих данных X
.
ExpandedPredictorNames
- Расширенные имена предикторовЭто свойство доступно только для чтения.
Расширенные имена предикторов, заданные как массив ячеек из векторов символов.
Если модель использует кодировку фиктивных переменных для категориальных переменных, то ExpandedPredictorNames
включает имена, которые описывают расширенные переменные. В противном случае ExpandedPredictorNames
то же, что и PredictorNames
.
CategoricalPredictors
- Категориальные индексы предиктора[]
| вектор положительных целых чиселЭто свойство доступно только для чтения.
Категориальные индексы предиктора, заданные как вектор положительных целых чисел. CategoricalPredictors
содержит значения индекса, соответствующие столбцам данных предиктора, которые содержат категориальные предикторы. Если ни один из предикторов не является категориальным, то это свойство пустое ([]
).
Типы данных: single
| double
CategoricalLevels
- Многомерные полиномиальные уровниЭто свойство доступно только для чтения.
Многомерные полиномиальные уровни, заданные как массив ячеек. Длина CategoricalLevels
равно количеству предикторов (size(X,2)
).
Камеры CategoricalLevels
соответствуют предикторам, которые вы задаете как 'mvmn'
во время обучения, то есть они имеют многомерное полиномиальное распределение. Камеры, которые не соответствуют многомерному полиномиальному распределению, пусты ([]
).
Если j предиктора является многомерным полиномиальным, то CategoricalLevels{
<reservedrangesplaceholder1> <reservedrangesplaceholder0> является списком всех различных значений предикторов, j в выборке.
NaN
s удаляются из unique(X(:,j))
.
DistributionNames
- Распределения предикторов'normal'
(по умолчанию) | 'kernel'
| 'mn'
| 'mvmn'
| массивов ячеек из векторов символовЭто свойство доступно только для чтения.
Распределения предиктора, заданные как вектор символов или массив векторов символов ячеек. fitcnb
использует распределения предикторов, чтобы смоделировать предикторы. В этой таблице перечислены доступные распределения.
Значение | Описание |
---|---|
'kernel' | Оценка плотности сглаживания ядра |
'mn' | Полиномиальное распределение. Если вы задаете mn , тогда все функции являются компонентами полиномиального распределения. Поэтому вы не можете включать 'mn' как элемент массива строковых массивов или массива ячеек из векторов символов. Для получения дополнительной информации см. «Предполагаемая вероятность полиномиального распределения». |
'mvmn' | Многомерное полиномиальное распределение. Для получения дополнительной информации см. «Предполагаемая вероятность многомерного полиномиального распределения». |
'normal' | Нормальное (Гауссово) распределение |
Если DistributionNames
является массивом ячеек P размером 1 байт, тогда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
}[]
).
Элементы 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{
<reservedrangesplaceholder1> <reservedrangesplaceholder0> соответствует 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
Prior
- Предыдущие вероятностиПредыдущие вероятности, заданные как числовой вектор. Порядок элементов в Prior
соответствует элементам Mdl.ClassNames
.
fitcnb
нормализует предыдущие вероятности, которые вы задаете используя 'Prior'
аргумент пары "имя-значение", так что sum(Prior)
= 1
.
Значение Prior
не влияет на наиболее подходящую модель. Поэтому можно сбросить Prior
после обучения Mdl
использование записи через точку.
Пример: Mdl.Prior = [0.2 0.8]
Типы данных: double
| single
Cost
- Расходы на неправильную классификациюСтоимость неправильной классификации, заданная как числовая квадратная матрица, где Cost(i,j)
- стоимость классификации точки в класс j
если его класс true i
. Строки соответствуют истинному классу, а столбцы - предсказанному классу. Порядок строк и столбцов Cost
соответствует порядку классов в ClassNames
.
Матрица затрат неправильной классификации должна иметь нули на диагонали.
Значение Cost
не влияет на обучение. Можно сбросить Cost
после обучения Mdl
использование записи через точку.
Пример: Mdl.Cost = [0 0.5 ; 1 0]
Типы данных: double
| single
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' | 2 x – 1 |
'symmetricismax' | Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равной -1 |
'symmetriclogit' | 2/(1 + e–x) – 1 |
Для MATLAB® функция или функция, которую вы задаете, используйте указатель на функцию для преобразования счета. Указатель на функцию должен принять матрицу (исходные счета) и вернуть матрицу того же размера (преобразованные счета).
Пример: Mdl.ScoreTransform = 'logit'
Типы данных: char
| string
| function handle
compareHoldout | Сравните точности двух классификационных моделей с помощью новых данных |
edge | Классификационное ребро для наивного классификатора Байеса |
lime | Локальные интерпретируемые модели-агностические объяснения (LIME) |
logp | Логгирование безусловной плотности вероятностей для наивного классификатора Байеса |
loss | Классификационные потери для наивного классификатора Байеса |
margin | Классификационные поля для наивного классификатора Байеса |
partialDependence | Вычисление частичной зависимости |
plotPartialDependence | Создайте график частичной зависимости (PDP) и отдельные графики условного ожидания (ICE) |
predict | Классифицируйте наблюдения с помощью наивного классификатора Байеса |
shapley | Значения Shapley |
Уменьшите размер полного наивного классификатора Байеса путем удаления обучающих данных. Полные наивные классификаторы Байеса держат обучающие данные. Можно использовать компактный наивный классификатор Байеса для повышения эффективности памяти.
Загрузите ionosphere
набор данных. Удалите первые два предиктора устойчивости.
load ionosphere
X = X(:,3:end);
Обучите наивный классификатор Байеса с помощью предикторов X
и метки классов Y
. Рекомендуемая практика состоит в том, чтобы задать имена классов. fitcnb
принимает, что каждый предиктор условно и нормально распределен.
Mdl = fitcnb(X,Y,'ClassNames',{'b','g'})
Mdl = ClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'b' 'g'} ScoreTransform: 'none' NumObservations: 351 DistributionNames: {1x32 cell} DistributionParameters: {2x32 cell} Properties, Methods
Mdl
является обученным ClassificationNaiveBayes
классификатор.
Уменьшите размер наивного классификатора Байеса.
CMdl = compact(Mdl)
CMdl = CompactClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'b' 'g'} ScoreTransform: 'none' DistributionNames: {1x32 cell} DistributionParameters: {2x32 cell} Properties, Methods
CMdl
является обученным CompactClassificationNaiveBayes
классификатор.
Отображение объема памяти, используемой каждым классификатором.
whos('Mdl','CMdl')
Name Size Bytes Class Attributes CMdl 1x1 15060 classreg.learning.classif.CompactClassificationNaiveBayes Mdl 1x1 111174 ClassificationNaiveBayes
Полный наивный классификатор Байеса (Mdl
) более чем в семь раз больше компактного наивного классификатора Байеса (CMdl
).
Чтобы эффективно пометить новые наблюдения, можно удалить Mdl
из рабочей области MATLAB ®, а затем передайте CMdl
и новые значения предиктора, чтобы predict
.
Обучите и проверьте наивный классификатор Байеса. 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%.
Можно задать другое условное распределение для предикторов или настроить параметры условного распределения, чтобы уменьшить ошибку обобщения.
В модели bag-of-tokens значение предиктора j является неотрицательным числом вхождений лексемы, j в наблюдении. Количество категорий (интервалов) в полиномиальной модели является количеством различных лексем (количество предикторов).
Naive Bayes является алгоритмом классификации, который применяет оценку плотности к данным.
Алгоритм использует теорему Байеса и (наивно) принимает, что предикторы являются условно независимыми, учитывая класс. Несмотря на то, что предположение обычно нарушается на практике, наивные классификаторы Байеса, как правило, дают апостериорные распределения, которые устойчивы к смещенным оценкам плотности классов, особенно там, где апостериорное значение равно 0,5 (контур решения) [1].
Наивные классификаторы Байеса присваивают наблюдения наиболее вероятному классу (другими словами, maximum a posteriori правилу принятия решений). Явно алгоритм делает следующие шаги:
Оцените плотности предикторов в каждом классе.
Моделируйте апостериорные вероятности согласно правилу Байеса. То есть для всех k = 1,..., K,
где:
Y - случайная переменная, соответствующая индексу класса наблюдения.
X 1,..., XP являются случайными предикторами наблюдения.
- предшествующая вероятность того, что индекс класса k.
Классифицировать наблюдение путем оценки апостериорной вероятности для каждого класса, а затем присвоить наблюдение классу, дающему максимальную апостериорную вероятность.
Если предикторы составляют полиномиальное распределение, то апостериорная вероятность где - функция масс вероятностей полиномиального распределения.
Если вы задаете 'DistributionNames','mn'
при обучении Mdl
использование fitcnb
, затем программное обеспечение подходит для полиномиального распределения с помощью модели Bag-of-Tokens. Программа сохраняет вероятность того, что лексема 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] Хасти, Тревор, Роберт Тибширани и Джером Фридман. Элементы статистического обучения: майнинг данных, вывод и предсказание. 2nd ed. Springer Series in Statistics. Нью-Йорк, Нью-Йорк: Спрингер, 2009. https://doi.org/10.1007/978-0-387-84858-7.
[2] Мэннинг, Кристофер Д., Прабхакар Рагхаван и Хинрих Шютце. Введение в информационный поиск, NY: Cambridge University Press, 2008.
Указания и ограничения по применению:
predict
функция поддерживает генерацию кода.
Когда вы обучаете наивную модель Байеса с помощью fitcnb
, применяются следующие ограничения.
Значение 'DistributionNames'
аргумент пары "имя-значение" не может содержать 'mn'
.
Значение 'ScoreTransform'
аргумент пары "имя-значение" не может быть анонимной функцией.
Для получения дополнительной информации смотрите Введение в генерацию кода.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.