ClassificationNaiveBayes

Наивная классификация Байеса для многоклассовой классификации

Описание

ClassificationNaiveBayes является наивным классификатором Байеса для многоклассового обучения. Обученные ClassificationNaiveBayes классификаторы сохраняют обучающие данные, значения параметров, распределение данных и предыдущие вероятности. Используйте эти классификаторы для выполнения задач, таких как оценка предсказаний реституции (см. resubPredict) и предсказание меток или апостериорных вероятностей для новых данных (см. predict).

Создание

Создайте ClassificationNaiveBayes объект при помощи fitcnb.

Свойства

расширить все

Свойства предиктора

Это свойство доступно только для чтения.

Имена предиктора, заданные как массив ячеек из векторов символов. Порядок элементов в PredictorNames соответствует порядку, в котором имена предикторов появляются в обучающих данных X.

Это свойство доступно только для чтения.

Расширенные имена предикторов, заданные как массив ячеек из векторов символов.

Если модель использует кодировку фиктивных переменных для категориальных переменных, то ExpandedPredictorNames включает имена, которые описывают расширенные переменные. В противном случае ExpandedPredictorNames то же, что и PredictorNames.

Это свойство доступно только для чтения.

Категориальные индексы предиктора, заданные как вектор положительных целых чисел. CategoricalPredictors содержит значения индекса, соответствующие столбцам данных предиктора, которые содержат категориальные предикторы. Если ни один из предикторов не является категориальным, то это свойство пустое ([]).

Типы данных: single | double

Это свойство доступно только для чтения.

Многомерные полиномиальные уровни, заданные как массив ячеек. Длина CategoricalLevels равно количеству предикторов (size(X,2)).

Камеры CategoricalLevels соответствуют предикторам, которые вы задаете как 'mvmn' во время обучения, то есть они имеют многомерное полиномиальное распределение. Камеры, которые не соответствуют многомерному полиномиальному распределению, пусты ([]).

Если j предиктора является многомерным полиномиальным, то CategoricalLevels{<reservedrangesplaceholder1> <reservedrangesplaceholder0> является списком всех различных значений предикторов, j в выборке. NaNs удаляются из unique(X(:,j)).

Это свойство доступно только для чтения.

Нестандартные предикторы, используемые для обучения наивного классификатора Байеса, заданные как числовая матрица. Каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одной переменной. Программа исключает наблюдения, содержащие по крайней мере одно отсутствующее значение, и удаляет соответствующие элементы из Y.

Свойства распределения предикторов

Это свойство доступно только для чтения.

Распределения предиктора, заданные как вектор символов или массив векторов символов ячеек. fitcnb использует распределения предикторов, чтобы смоделировать предикторы. В этой таблице перечислены доступные распределения.

ЗначениеОписание
'kernel'Оценка плотности сглаживания ядра
'mn'Полиномиальное распределение. Если вы задаете mn, тогда все функции являются компонентами полиномиального распределения. Поэтому вы не можете включать 'mn' как элемент массива строковых массивов или массива ячеек из векторов символов. Для получения дополнительной информации см. «Предполагаемая вероятность полиномиального распределения».
'mvmn'Многомерное полиномиальное распределение. Для получения дополнительной информации см. «Предполагаемая вероятность многомерного полиномиального распределения».
'normal'Нормальное (Гауссово) распределение

Если DistributionNames является массивом ячеек P размером 1 байт, тогдаfitcnb моделирует функцию j с помощью распределения в элементе j массива ячеек.

Пример: 'mn'

Пример: {'kernel','normal','kernel'}

Типы данных: char | string | cell

Это свойство доступно только для чтения.

Оценки параметров распределения, заданные как массив ячеек. DistributionParameters является K -by - D массивом ячеек, где камера (k, d) содержит оценки параметров распределения для образцов d предиктора в k классов. Порядок строк соответствует порядку классов в свойстве ClassNames, и порядок предикторов соответствует порядку столбцов X.

Если k класса не имеет наблюдений для предиктора j, затем Распределение {k, j} пуст ([]).

Элементы DistributionParameters зависят от распределений предикторов. Эта таблица описывает значения в DistributionParameters {k, j}.

Распределение предсказателя jЗначение массива ячеек для предсказателя j и k классов
kernelA KernelDistribution модель. Отобразите свойства с помощью индексации камер и записи через точку. Для примера, чтобы отобразить предполагаемую пропускную способность плотности ядра для предиктора 2 в третьем классе, используйте Mdl.DistributionParameters{3,2}.BandWidth.
mnСкаляр, представляющий вероятность того, что лексема j появляется в классе k. Для получения дополнительной информации см. «Предполагаемая вероятность полиномиального распределения».
mvmnЧисловой вектор, содержащий вероятности для каждого возможного уровня j предиктора в классе k. Программа упорядочивает вероятности по отсортированному порядку всех уникальных уровней j предиктора (сохраненных в свойстве CategoricalLevels). Для получения дополнительной информации см. «Предполагаемая вероятность многомерного полиномиального распределения».
normalЧисловой вектор 2 на 1. Первый элемент является средним значением выборки, а второй элемент - стандартным отклонением выборки.

Это свойство доступно только для чтения.

Более плавный тип ядра, заданный как имя ядра или массива ячеек с именами ядра. Длина Kernel равно количеству предикторов (size(X,2)). Kernel{<reservedrangesplaceholder1> <reservedrangesplaceholder0> соответствует j предиктора и содержит вектор символов, описывающий тип более сглаженного ядра. Если камера пуста ([]), затем fitcnb не соответствует ядерному распределению соответствующему предиктору.

Эта таблица описывает поддерживаемые типы сглаживания ядра. I {u} обозначает функцию индикации.

ЗначениеЯдроФормула
'box'Коробка (униформа)

f(x)=0.5I{|x|1}

'epanechnikov'Епанечников

f(x)=0.75(1x2)I{|x|1}

'normal'Гауссовский

f(x)=12πexp(0.5x2)

'triangle'Треугольный

f(x)=(1|x|)I{|x|1}

Пример: 'box'

Пример: {'epanechnikov','normal'}

Типы данных: char | string | cell

Это свойство доступно только для чтения.

Поддержка более плавной плотности ядра, заданная как массив ячеек. Длина Support равно количеству предикторов (size(X,2)). Камеры представляют области, в которые fitcnb применяет плотность ядра. Если камера пуста ([]), затем fitcnb не соответствует ядерному распределению соответствующему предиктору.

В этой таблице описаны поддерживаемые опции.

ЗначениеОписание
1 на 2 числовых векторы-строкиПоддержка плотности применяется к заданным границам, например [L,U], где L и U являются конечными нижней и верхней границами, соответственно.
'positive'Поддержка плотности применяется ко всем положительным вещественным значениям.
'unbounded'Поддержка плотности применяется ко всем вещественным значениям.

Это свойство доступно только для чтения.

Ядро сглаживает ширину окна, заданную как числовая матрица. Width является K -by - P матрицей, где K - количество классов в данных, и P - количество предикторов (size(X,2)).

Ширина (k, j) - более гладкая ширина окна ядра для плотности сглаживания ядра предиктора j в пределах k классов. NaNs в столбце j указать, что fitcnb не подходил под предиктор j использование плотности ядра.

Свойства отклика

Это свойство доступно только для чтения.

Уникальные имена классов, используемые в модели обучения, заданные как категориальный или символьный массив, логический или числовой вектор или массив ячеек векторов символов.

ClassNames имеет тот совпадающий тип данных что и Y, и имеет K элементы (или строки) для символьных массивов. (Программа обрабатывает массивы строк как массивы ячеек векторов символов.)

Типы данных: categorical | char | string | logical | double | cell

Это свойство доступно только для чтения.

Имя переменной отклика, заданное как вектор символов.

Типы данных: char | string

Это свойство доступно только для чтения.

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

Y имеет тот совпадающий тип данных, что и данные в Y используется для настройки модели. (Программа обрабатывает массивы строк как массивы ячеек векторов символов.)

Типы данных: single | double | logical | char | string | cell | categorical

Свойства обучения

Это свойство доступно только для чтения.

Значения параметров, используемые для обучения ClassificationNaiveBayes модель, заданная как объект. ModelParameters содержит значения параметров, такие как значения аргументов пары "имя-значение", используемые для обучения наивного классификатора Байеса.

Доступ к свойствам ModelParameters при помощи записи через точку. Для примера получите доступ к поддержке ядра с помощью Mdl.ModelParameters.Support.

Это свойство доступно только для чтения.

Количество обучающих наблюдений в обучающих данных, хранящихся в X и Y, заданный как числовой скаляр.

Предыдущие вероятности, заданные как числовой вектор. Порядок элементов в Prior соответствует элементам Mdl.ClassNames.

fitcnb нормализует предыдущие вероятности, которые вы задаете используя 'Prior' аргумент пары "имя-значение", так что sum(Prior) = 1.

Значение Prior не влияет на наиболее подходящую модель. Поэтому можно сбросить Prior после обучения Mdl использование записи через точку.

Пример: Mdl.Prior = [0.2 0.8]

Типы данных: double | single

Это свойство доступно только для чтения.

Веса наблюдений, заданные как вектор неотрицательных значений с одинаковым числом строк, как Y. Каждая запись в W определяет относительную важность соответствующего наблюдения в Y. fitcnb нормализует значение, заданное для 'Weights' аргумент пары "имя-значение", так что веса в конкретном классе равны предыдущей вероятности для этого класса.

Свойства классификатора

Стоимость неправильной классификации, заданная как числовая квадратная матрица, где Cost(i,j) - стоимость классификации точки в класс j если его класс true i. Строки соответствуют истинному классу, а столбцы - предсказанному классу. Порядок строк и столбцов Cost соответствует порядку классов в ClassNames.

Матрица затрат неправильной классификации должна иметь нули на диагонали.

Значение Cost не влияет на обучение. Можно сбросить Cost после обучения Mdl использование записи через точку.

Пример: Mdl.Cost = [0 0.5 ; 1 0]

Типы данных: double | single

Это свойство доступно только для чтения.

Оптимизация гиперпараметров перекрестной валидации, заданная как BayesianOptimization объект или таблица гиперпараметров и связанных значений. Это свойство непусто, если 'OptimizeHyperparameters' аргумент пары "имя-значение" не пуст при создании модели. Значение HyperparameterOptimizationResults зависит от настройки Optimizer поле в HyperparameterOptimizationOptions структура при создании модели.

Значение Optimizer ОбластьЗначение HyperparameterOptimizationResults
'bayesopt' (по умолчанию)Объект BayesianOptimization классов
'gridsearch' или 'randomsearch'Таблица используемых гиперпараметров, наблюдаемых значений целевой функции (потери перекрестной валидации) и ранг наблюдений от самого низкого (лучшего) до самого высокого (худшего)

Классификационная оценка преобразование, заданное как вектор символов или указатель на функцию. В этой таблице представлены доступные векторы символов.

ЗначениеОписание
'doublelogit'1/(1 + e–2x)
'invlogit'журнал (x/( 1 - x))
'ismax'Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равным 0
'logit'1/(1 + ex)
'none' или 'identity'x (без преобразования)
'sign'-1 для x < 0
0 для x = 0
1 для x > 0
'symmetric'2 x – 1
'symmetricismax'Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равной -1
'symmetriclogit'2/(1 + ex) – 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Значения Shapley
testckfoldСравните точности двух классификационных моделей путем повторной перекрестной валидации

Примеры

свернуть все

Создайте наивный классификатор Байеса для набора данных радужной оболочки глаза Фишера. Затем задайте предыдущие вероятности после настройки классификатора.

Загрузите f isheriris набор данных. Создание 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%.

Можно задать другое условное распределение для предикторов или настроить параметры условного распределения, чтобы уменьшить ошибку обобщения.

Подробнее о

расширить все

Алгоритмы

расширить все

Ссылки

[1] Хасти, Тревор, Роберт Тибширани и Джером Фридман. Элементы статистического обучения: майнинг данных, вывод и предсказание. 2nd ed. Springer Series in Statistics. Нью-Йорк, Нью-Йорк: Спрингер, 2009. https://doi.org/10.1007/978-0-387-84858-7.

[2] Мэннинг, Кристофер Д., Прабхакар Рагхаван и Хинрих Шютце. Введение в информационный поиск, NY: Cambridge University Press, 2008.

Расширенные возможности

.
Введенный в R2014b