templateNaiveBayes

Наивный классификатор Байеса

Описание

пример

t = templateNaiveBayes() возвращает наивный шаблон Байеса, подходящий для настройки многоклассовых моделей выходного кода с исправлением ошибок (ECOC).

Если вы задаете шаблон по умолчанию, то во время обучения программное обеспечение использует значения по умолчанию для всех входных параметров.

Задайте t как учащийся в fitcecoc.

пример

t = templateNaiveBayes(Name,Value) возвращает шаблон с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение". Все свойства t пусты, кроме тех, которые вы задаете используя Name,Value аргументы в виде пар.

Для примера можно задать распределения для предикторов.

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

Примеры

свернуть все

Использование templateNaiveBayes для задания наивного шаблона Байеса по умолчанию.

t = templateNaiveBayes()
t = 
Fit template for classification NaiveBayes.

    DistributionNames: [1x0 double]
               Kernel: []
              Support: []
                Width: []
              Version: 1
               Method: 'NaiveBayes'
                 Type: 'classification'

Все свойства объекта шаблона пусты, кроме Method и Type. Когда ты проходишь t для функции обучения программа заполняет пустые свойства соответствующими значениями по умолчанию. Например, программное обеспечение заполняет DistributionNames свойство с 1-бай- D массив ячеек из векторов символов с 'normal' в каждой камере, где D - количество предикторов. Для получения дополнительной информации о других значениях по умолчанию смотрите fitcnb.

t является планом для наивного ученика Бейеса, и никаких расчетов не происходит, когда вы задаете его. Можно пройти t на fitcecoc определить наивных двоичных учащихся Байеса для многоклассового обучения ECOC.

Создайте nondefault наивный шаблон Байеса для использования в fitcecoc.

Загрузите набор данных радужки Фишера.

load fisheriris

Создайте шаблон для наивных двоичных классификаторов Байеса и задайте ядерные распределения для всех предикторов.

t = templateNaiveBayes('DistributionNames','kernel')
t = 
Fit template for classification NaiveBayes.

    DistributionNames: 'kernel'
               Kernel: []
              Support: []
                Width: []
              Version: 1
               Method: 'NaiveBayes'
                 Type: 'classification'

Все свойства объекта шаблона пусты, кроме DistributionNames, Method, и Type. Когда ты проходишь t для функции обучения программа заполняет пустые свойства соответствующими значениями по умолчанию.

Задайте t в качестве двоичного ученика для многоклассовой модели ECOC.

Mdl = fitcecoc(meas,species,'Learners',t);

По умолчанию программное обеспечение обучает Mdl использование проекта кодирования один от одного.

Отображение ошибки неправильной классификации в выборке (повторная замена).

L = resubLoss(Mdl,'LossFun','classiferror')
L = 0.0333

Входные параметры

свернуть все

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'DistributionNames','mn' задает, чтобы рассматривать все предикторы как счетчики токенов для полиномиальной модели.

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

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

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

По умолчанию программное обеспечение устанавливает все предикторы, заданные как категориальные предикторы (используя CategoricalPredictors Аргумент пары "имя-значение") в 'mvmn'. В противном случае распределение по умолчанию 'normal'.

Необходимо указать, что по крайней мере один предиктор имеет распределение 'kernel' чтобы дополнительно задать Kernel, Support, или Width.

Пример: 'DistributionNames','mn'

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

Гладкий тип ядра, заданный как разделенная разделенными запятой парами, состоящая из 'Kernel' и вектор символов или строковый скаляр, строковые массивы или массив ячеек из векторов символов.

В этой таблице представлены доступные опции для настройки области плотности сглаживания ядра. Позвольте 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}

Если вы задаете 1-байтовый P строковые массивы или массив ячеек, причем каждый элемент массива содержит любое значение в таблице, то программное обеспечение обучает классификатор с помощью более гладкого типа ядра в j элемента для j функций в X. Программа игнорирует элементы Kernel не соответствует предиктору, распределение которого 'kernel'.

Необходимо указать, что по крайней мере один предиктор имеет распределение 'kernel' чтобы дополнительно задать Kernel, Support, или Width.

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

Поддержка плотности сглаживания ядра, заданная как разделенная разделенными запятой парами, состоящая из 'Support' и 'positive', 'unbounded', строковые массивы, массив ячеек или числовой вектор-строка. Программа применяет плотность сглаживания ядра к указанной области.

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

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

Если вы задаете 1-байтовый P строковые массивы или массив ячеек, причем каждый элемент в строковом массиве содержит любое текстовое значение в таблице и каждый элемент в массиве ячеек, содержащий любое значение в таблице, то программное обеспечение обучает классификатор с помощью поддержки ядра в j элемента для j функций в X. Программа игнорирует элементы Kernel не соответствует предиктору, распределение которого 'kernel'.

Необходимо указать, что по крайней мере один предиктор имеет распределение 'kernel' чтобы дополнительно задать Kernel, Support, или Width.

Пример: 'KSSupport',{[-10,20],'unbounded'}

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

Ширина окна сглаживания ядра, заданная как разделенная разделенными запятой парами, состоящая из 'Width' и матрица числовых значений, числовых векторов-столбцов, числовых векторов-строк или скаляров.

Предположим, что существует K уровня классов и P предикторов. В этой таблице представлены доступные опции для настройки ширины окна сглаживания ядра.

ЗначениеОписание
K -by - P матрица числовых значенийЭлемент (k,j) задает ширину для j предиктора в классе k.
K численный вектор -by-1Element k задает ширину для всех предикторов в k классов.
1-байт- P числовой вектор-строкаElement j задает ширину на всех уровнях классов для j предиктора.
скалярЗадает пропускную способность для всех функций во всех классах.

По умолчанию программа автоматически выбирает ширину по умолчанию для каждой комбинации предиктора и класса с помощью значения, оптимального для Гауссова распределения. Если вы задаете Width и содержит NaNs, затем программа выбирает ширины для элементов, содержащих NaNс.

Необходимо указать, что по крайней мере один предиктор имеет распределение 'kernel' чтобы дополнительно задать Kernel, Support, или Width.

Пример: 'Width',[NaN NaN]

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

Выходные аргументы

свернуть все

Наивный шаблон классификации Байеса, подходящий для настройки многоклассовых моделей выходного кода с исправлением ошибок (ECOC), возвращенный как объект шаблона. Передайте t кому fitcecoc для определения способа создания наивного классификатора Байеса для модели ECOC.

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

Подробнее о

свернуть все

Наивный Байес

Naive Bayes является алгоритмом классификации, который применяет оценку плотности к данным.

Алгоритм использует теорему Байеса и (наивно) принимает, что предикторы являются условно независимыми, учитывая класс. Несмотря на то, что предположение обычно нарушается на практике, наивные классификаторы Байеса, как правило, дают апостериорные распределения, которые устойчивы к смещенным оценкам плотности классов, особенно там, где апостериорное значение равно 0,5 (контур решения) [1].

Наивные классификаторы Байеса присваивают наблюдения наиболее вероятному классу (другими словами, maximum a posteriori правилу принятия решений). Явно алгоритм делает следующие шаги:

  1. Оцените плотности предикторов в каждом классе.

  2. Моделируйте апостериорные вероятности согласно правилу Байеса. То есть для всех k = 1,..., K,

    P^(Y=k|X1,..,XP)=π(Y=k)j=1PP(Xj|Y=k)k=1Kπ(Y=k)j=1PP(Xj|Y=k),

    где:

    • Y - случайная переменная, соответствующая индексу класса наблюдения.

    • X 1,..., XP являются случайными предикторами наблюдения.

    • π(Y=k) - предшествующая вероятность того, что индекс класса k.

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

Если предикторы составляют полиномиальное распределение, то апостериорная вероятностьP^(Y=k|X1,..,XP)π(Y=k)Pmn(X1,...,XP|Y=k), где Pmn(X1,...,XP|Y=k) - функция масс вероятностей полиномиального распределения.

Алгоритмы

  • Если вы задаете 'DistributionNames','mn' при обучении Mdl использование fitcnb, затем программное обеспечение подходит для полиномиального распределения с помощью модели bag-of-tokens. Программа сохраняет вероятность того, что лексема j появляется в классах k в свойстве DistributionParameters {k, j}. Используя сглаживание добавки [2], предполагаемая вероятность является

    P(token j|класс k)=1+cj|kP+ck,

    где:

    • cj|k=nki:yiclass kxijwii:yiclass kwi, которое является взвешенным количеством вхождений лексемы j в классе k.

    • nk - количество наблюдений в k классов.

    • wi - вес для i наблюдений. Программа нормирует веса внутри класса, так что они суммируются с предшествующей вероятностью для этого класса.

    • ck=j=1Pcj|k, это общее взвешенное количество вхождений всех лексем в k классов.

  • Если вы задаете 'DistributionNames','mvmn' при обучении Mdl использование fitcnb, затем:

    1. Для каждого предиктора программное обеспечение собирает список уникальных уровней, хранит отсортированный список в CategoricalLevels, и рассматривает каждый уровень как интервал. Каждая комбинация предиктор/класс является отдельной, независимой полиномиальной случайной переменной.

    2. Для предиктора j в k классов программное обеспечение подсчитывает образцы каждого категориального уровня с помощью списка, хранящегося в CategoricalLevels {j}.

    3. Программа сохраняет вероятность того, что предиктор j, в классах k, имеет L уровня в свойстве DistributionParameters {k, j}, для всех уровней в CategoricalLevels {j}. Используя сглаживание добавки [2], предполагаемая вероятность является

      P(predictor j=L|class k)=1+mj|k(L)mj+mk,

      где:

      • mj|k(L)=nki:yi class kI{xij=L}wii:yi class kwi, которое является взвешенным количеством наблюдений, для которых j предиктора равен L в классе k.

      • nk - количество наблюдений в k классов.

      • I{xij=L}=1 если xij = L, в противном случае 0.

      • wi - вес для i наблюдений. Программа нормирует веса внутри класса, так что они суммируются с предшествующей вероятностью для этого класса.

      • mj - количество различных уровней в j предиктора.

      • mk - взвешенное количество наблюдений в классе k.

Ссылки

[1] Хасти, Т., Р. Тибширани и Дж. Фридман. Элементы статистического обучения, второе издание. Нью-Йорк: Спрингер, 2008.

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

Введенный в R2014b