exponenta event banner

ClassificationNaiveBayes

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

Описание

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

Создание

Создать ClassificationNaiveBayes объект с помощью fitcnb.

Свойства

развернуть все

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Если DistributionNames является массивом 1-by-P ячеек символьных векторов, то fitcnb моделирует признак j, используя распределение в элементе j массива ячеек.

Пример: 'mn'

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

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

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

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

Если класс k не имеет наблюдений для предиктора j, то Distribution{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{j} соответствует предиктору j и содержит символьный вектор, описывающий тип сглаживания ядра. Если ячейка пуста ([]), то fitcnb не соответствует распределению ядра соответствующему предиктору.

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

СтоимостьЯдроФормула
'box'Коробка (униформа)

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

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

f (x) = 0,75 (1 x2) I{|x|≤1}

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

f (x) = 12.dexp (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)).

Width(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 если его истинный класс 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'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%.

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

Подробнее

развернуть все

Алгоритмы

развернуть все

Ссылки

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

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

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

.
Представлен в R2014b