Машинное обучение

Что «наивного» в наивном байесовском классификаторе?

Наивный байесовский классификатор - это вероятностная модель машинного обучения, используемая для задач классификации. Его можно использовать для решения задач классификации любого количества классов и легко интерпретировать.

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

Ход обсуждения следующий:

  1. Теорема Байеса
  2. Математика, лежащая в основе наивного байесовского классификатора
  3. Реализация наивного Байеса
  4. Типы наивного Байеса
  5. Преимущества наивного Байеса
  6. Как улучшить наивный байесовский метод?

ТЕОРЕМА БЕЙСА:

Наивный байесовский метод берет свое начало в статистике. Прежде чем понять, что наивно в Наивном Байесе, давайте увидим необходимые корни.

Вероятность - это вероятность возникновения события. Математически вероятность события - это простое отношение наступления события ко всем возможным результатам эксперимента.

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

Комбинируя эти 2 состава, мы легко можем получить,

Это теорема Байеса, которая составляет суть наивного алгоритма Байеса.

Математика за классификатором NAIVE BAYES:

Рассмотрим задачу классификации машинного обучения. Учитывая новую точку данных, решение классификации с использованием наивного байеса основано на вероятностях точки в каждом классе.

Пусть новая точка будет, x, n-мерного размера, где каждый компонент измерения представлен как x₁, x₂,… xₙ. Вероятность появления этой n-мерной точки «x» в классе Cₖ определяется выражением

P (Cₖ и x) можно представить как P (Cₖ, x). и «x» может быть представлен с его n компонентами. Теперь P (Cₖ и x) представляется как P (Cₖ, x₁, x₂,… xₙ)

Применяя условную вероятность для каждого компонента, мы получаем,

Каждый из элементов в продукте представляет собой вероятность компонента, скажем, x₁, учитывая все остальные характеристики, x₂,… xₙ и класс Cₖ.

Теперь перейдем к «наивной» части наивного классификатора Бая.

В наивном классификаторе Бая предполагается, что для точки x каждый из ее компонентов взаимно независим от другого компонента, и все компоненты имеют равное влияние на результат.

При таком предположении каждый элемент продукта становится следующим:

Наша вероятность просто,

А вероятность того, что точка x принадлежит классу Cₖ, равна

где Z = P (x)

В Байесовском классификаторе Navies мы вычисляем эту условную вероятность x для всех классов и оцениваем, что точка X принадлежит классу Cₖ, который имеет наивысшее значение P (Cₖ | x).

ВНЕДРЕНИЕ КЛАССИФИКАТОРА NAIVE BAYES:

Воспользуемся задачей Классификатор вин от Kaggle.

О наборе данных:

Эти данные являются результатом химического анализа вин, выращенных в одном и том же регионе Италии, но полученных из трех разных сортов. Анализ определил количество 13 компонентов, содержащихся в каждом из трех типов вин.

Количество экземпляров каждого винного класса:

  • 1–59 классы
  • 2–71 класс
  • 3–48 классы

Функции:

Спирт, яблочная кислота, зола, щелочность золы, магний, общие фенолы, флаваноиды, нефлаваноидные фенолы, проантоцианы, интенсивность цвета, оттенок, OD280 / OD315 разбавленных вин, пролин

Теперь давайте реализуем наивный байесовский классификатор,

import pandas as pd
features = ['class','alcohol', 'malic_acid', 'ash', 'alcalinity_of_ash', 'magnesium', 'total_phenols', 'flavanoids', 'nonflavanoid_phenols', 'proanthocyanins', 'color_intensity', 'hue', 'od280/od315_of_diluted_wines', 'proline']
wine_data = pd.read_csv("wine_class.csv",names=features)

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

wine_data.head()

Выход :

Head () дает первые 5 точек данных во фрейме данных.

wine_data.shape

Выход: (178, 14)

Это означает, что данные Wine содержат 178 точек данных и 14 функций, включая класс.

wine_target = wine_data['class']
wine_features = wine_data.drop(['class'],axis=1)

Отделение независимых функций от зависимых функций.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(wine_features, wine_target, test_size=0.3,random_state=0)

Разделение данных на обучающие данные и тестовые данные, где тестовые данные составляют 30%, а обучающие данные - 70% от общих данных.

#Import Gaussian Naive Bayes model 
from sklearn.naive_bayes import GaussianNB 
 
#Create a Gaussian Classifier 
gnb = GaussianNB()
#Train the model using the training sets 
gnb.fit(X_train, y_train)

Да, всего 3 строки для реализации наивного байесовского классификатора независимо от размера данных.

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

#Import scikit-learn metrics module for accuracy calculation
from sklearn import metrics
#Predict the response for test dataset
y_pred = gnb.predict(X_test)
# Model Accuracy, how often is the classifier correct?
print("Accuracy:",metrics.accuracy_score(y_test, y_pred))

Выход:
Точность: 0,9074074074074074

Мы реализовали модель наивного байесовского классификатора с точностью около 90%. Для этой проблемы классификации вин точность - разумный показатель, позволяющий оценить эффективность модели.

ВИДЫ КЛАССИФИКАТОРОВ NAIVE BAYES:

1. Гауссовский наивный залив.

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

2. БЕРНОУЛЛИ НАИВНЫЕ ЗАЛИВЫ

Эта модель полезна, если векторы являются двоичными (то есть с нулями и единицами). Одним из приложений может быть классификация текста с моделью «мешок слов», где 1 представляет , если слово встречается в документе, а 0 представляет , если слово не встречается в документе

3. МУТЛИНОМИАЛЬНЫЕ НАИВНЫЕ ЗАЛИВЫ

Эта модель похожа на наивный байесовский метод Бернулли, за исключением того, что вектор здесь представляет собой количество вхождений компонента. Это означает, что эта модель полезна, если у нас есть несколько классов.

ПРЕИМУЩЕСТВА НАИВНЫХ ЗАЛИВ

  1. Это простой, быстрый и точный метод классификации
  2. Он имеет очень низкие вычислительные затраты.
  3. Эффективно работает с большими наборами данных
  4. Его можно использовать для бинарной классификации или задач мультиклассовой классификации.
  5. Когда предположение выполняется, наивный байесовский классификатор работает лучше, чем большинство классификаторов.

Наивный байесовский классификатор широко используется в задачах классификации текста, таких как обнаружение спама и сентиментальный анализ отзывов.

КАК УЛУЧШИТЬ НАИВНЫЕ ЗАЛИВЫ?

  • Примените «сглаживание Лапласа», когда данные теста данных имеют новую категорию, отличную от уже обученных данных.
  • Если данные не распределяются нормально, рекомендуется изменить данные так, чтобы они распределялись нормально.
  • Удалите коррелированные функции, поскольку они не добавляют ценности к выходным данным.

Следовательно, Naive Baye может эффективно использоваться для задач двоичной и многоклассовой классификации независимо от размера данных с низкими вычислительными затратами.

Спасибо за прочтение. Я собираюсь писать больше постов для новичков в будущем. Подпишитесь на меня на Medium, чтобы быть в курсе о них. Я приветствую обратную связь, и с ней можно связаться в Twitter ramya_vidiyala и LinkedIn RamyaVidiyala. Удачного обучения!