Машинное обучение от входа до мастера (2) — Наивный Байес

алгоритм

Алгоритмы машинного обучения (2): Наивный Байес

Каталог статей

1. Введение в лабораторию

1.1 Экспериментальная среда

1. python3.7
2. numpy >= '1.16.4'
3. sklearn >= '0.23.1'

1.2 Введение в наивный байесовский подход

Наивный байесовский алгоритм (NB) — один из наиболее широко используемых алгоритмов классификации. Это метод классификатора, основанный на байесовском определении и предположении о независимости признаков от условий. Поскольку наивный метод Байеса рассчитывается на основе формулы Байеса, он имеет прочную математическую основу и стабильную эффективность классификации. Модель NB должна оценивать несколько параметров, не чувствительна к отсутствующим данным, а алгоритм относительно прост. Классификация спама в те дни основывалась на распознавании наивного байесовского классификатора.

Что такое условная вероятность, мы понимаем на примере касания мяча. У нас есть два ведра:серое ведро и зеленое ведро.Всего 7 шариков,4 синих и 3 фиолетовых.Распределение такое:

Какова вероятность p того, что среди этих 7 шаров 1 шар будет случайно выбран фиолетовым? Процесс выбора выглядит следующим образом:

  1. Сначала выберите ведро
  2. Выберите другой мяч из выбранного ведра

p (шар = фиолетовый) = p (выберите серое ведро) ⋅ p (выберите фиолетовое из серого ведра) + p (выберите зеленое ведро) ⋅ p (выберите фиолетовое из зеленого ведра) = 1 2 ⋅ 2 4 + 1 2 ⋅ 1 3 p(ball=фиолетовый) \\ =p(выберите серое ведро) \cdot p(выберите фиолетовое из серого ведра) + p(выберите зеленое ведро) \cdot p(выберите фиолетовый из зеленого ведра) \\ =\ frac{1} {2} \cdot \frac{2}{4} + \frac{1}{2} \cdot \frac{1}{3} p(шар=фиолетовый)=p(выберите серое ведро)⋅ p(выберите фиолетовый из серого ведра)+p(выберите зеленое ведро)⋅p(выберите фиолетовый из зеленого ведра)=21​⋅42​+21​⋅31​

Вышеупомянутый процесс выбора мяча является процессом условной вероятности.В случае выбора цвета ведра, это вероятность фиолетового цвета.Другим методом расчета условной вероятности является байесовский критерий.

Формула Байеса — это формула данных, предложенная британскими математиками:

п ( A ∣ B ) знак равно p ( A , B ) p ( B ) знак равно p ( B ∣ A ) ⋅ p ( A ) ∑ a ∈ FA p ( B ∣ a ) ⋅ p ( a ) p (A | B) =\frac{p(A,B)}{p(B)}=\frac{p(B|A) \cdot p(A)}{\sum_{a \in ℱ_A}p(B|a) \ cdot p(a)} p(A∣B)=p(B)p(A,B)​=∑a∈FA​​p(B∣a)⋅p(a)p(B∣A)⋅p (А)

p(A,B): Указывает вероятность того, что событие A и событие B произойдут одновременно.

p(B): указывает вероятность возникновения события B, которая называется априорной вероятностью, p(A): указывает вероятность возникновения события A.

p(A|B): Указывает, что вероятность того, что событие A произойдет при условии, что произойдет событие B, называется апостериорной вероятностью.

p(B|A): Указывает вероятность того, что событие B произойдет, когда произойдет событие A.

Мы понимаем Байеса в одном предложении: существует связь между многими вещами в мире, если предположить, что событие А и событие Б. Люди часто используют произошедшее событие, чтобы сделать вывод о вероятности того, что мы хотим знать.
Например, когда врачу ставят диагноз, он будет судить о болезни пациента по налету на языке и сердцебиению. Для пациентов они будут обращать внимание только на то, что не так, а врачи будут направлять события, которые произошли.
Диагностика конкретных состояний. Здесь используется байесовская идея, А — симптом пациента, который уже возник, и вероятность В_i при условии, что А возникает.

1.3 Применение наивного байесовского метода

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

2. Лабораторное руководство

2.1 Цели обучения

  1. Освойте формулу Байеса
  2. Объединение двух примеров для понимания байесовской оценки параметров
  3. Овладение байесовской оценкой

2.2 Поток кода

  • Часть 1. Набор данных Orioles — байесовская классификация

    • Шаг 1: Импорт библиотечной функции
    • Шаг 2: Импорт и анализ данных
    • Шаг 3: Обучение модели
    • Шаг 4: Предсказание модели
    • Шаг 5: Принципиальный анализ
  • Часть 2. Моделирование дискретных наборов данных — байесовская классификация

    • Шаг 1: Импорт библиотечной функции
    • Шаг 2: Импорт и анализ данных
    • Шаг 3: Обучение модели и визуализация
    • Шаг 4: Принципиальный анализ

2.3 Алгоритм боя

Набор данных Warbler — байесовская классификация

Шаг 1: Импорт библиотечной функции

import warnings
warnings.filterwarnings('ignore')
import numpy as np
# 加载莺尾花数据集
from sklearn import datasets
# 导入高斯朴素贝叶斯分类器
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split

Шаг 2: Импорт и анализ данных

X, y = datasets.load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

Нам нужно вычислить две вероятности: Условная вероятность: P (X (i) = x (i) ∣ Y = ck) P(X^{(i)}=x^{(i)}|Y=c_k) P(X(i)=x(i)∣Y=ck​) и априорную вероятность категории ck c_k ck​: P ( Y = ck ) P(Y=c_k) P(Y=ck​).

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

Шаг 3: Обучение модели

# 使用高斯朴素贝叶斯进行计算
clf = GaussianNB(var_smoothing=1e-8)
clf.fit(X_train, y_train)
GaussianNB(var_smoothing=1e-08)

Шаг 4: Предсказание модели

# 评估
y_pred = clf.predict(X_test)
acc = np.sum(y_test == y_pred) / X_test.shape[0]
print("Test Acc : %.3f" % acc)

# 预测
y_proba = clf.predict_proba(X_test[:1])
print(clf.predict(X_test[:1]))
print("预计的概率值:", y_proba)
Test Acc : 0.967
[2]
预计的概率值: [[1.63542393e-232 2.18880483e-006 9.99997811e-001]]

Шаг 5: Принципиальный анализ

Гауссовский Наивный Байес предполагает, что каждая функция подчиняется распределению Гаусса, Мы называем случайную величину X, подчиняющуюся математическому ожиданию μ, и распределение данных с дисперсией σ2, называемое распределением Гаусса. Для каждого признака мы обычно используем среднее значение для оценки μ и дисперсию всех признаков для оценки σ2.

п ( Икс ( я ) знак равно Икс ( я ) ∣ Y знак равно ck ) знак равно 1 2 π σ y 2 exp ⁡ ( - ( Икс ( я ) - μ ck ) 2 2 σ ck 2 ) P (X ^ {(i) }=x^{(i)}|Y=c_k) = \frac{1}{\sqrt{2\pi\sigma^2_y}} \exp\left(-\frac{(x^{(i)} - \mu_{c_k})^2}{2\sigma^2_{c_k}}\right) P(X(i)=x(i)∣Y=ck​)=2πσy2​ ​1​exp(−2σck ​2​(x(i)−µck​)2​)

Из результатов прогнозирования в приведенном выше примере мы видим, что значение апостериорной вероятности, соответствующее категории 2, является наибольшим, поэтому мы считаем, что категория 2 является оптимальным результатом.

Моделирование дискретных наборов данных — байесовская классификация

Шаг 1: Импорт библиотечной функции
+ Шаг 2: Импорт и анализ данных
+ Шаг 3: Обучение модели и визуализация
+ Шаг 4: Принципиальный анализ

import random
import numpy as np
# 使用基于类目特征的朴素贝叶斯
from sklearn.naive_bayes import CategoricalNB
from sklearn.model_selection import train_test_split

Шаг 2: Импорт и анализ данных

# 模拟数据
rng = np.random.RandomState(1)
# 随机生成600个100维的数据,每一维的特征都是[0, 4]之前的整数
X = rng.randint(5, size=(600, 100))
y = np.array([1, 2, 3, 4, 5, 6] * 100)
data = np.c_[X, y]
# X和y进行整体打散
random.shuffle(data)
X = data[:,:-1]
y = data[:, -1]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

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

Шаг 3: Обучение модели и прогнозирование

clf = CategoricalNB(alpha=1)
clf.fit(X_train, y_train)
acc = clf.score(X_test, y_test)
print("Test Acc : %.3f" % acc)
Test Acc : 0.683
# 随机数据测试,分析预测结果,贝叶斯会选择概率最大的预测结果
# 比如这里的预测结果是6,6对应的概率最大,由于我们是随机数据
# 读者运行的时候,可能会出现不一样的结果。
x = rng.randint(5, size=(1, 100))
print(clf.predict_proba(x))
print(clf.predict(x))
[[3.48859652e-04 4.34747491e-04 2.23077189e-03 9.90226387e-01
  5.98248900e-03 7.76745425e-04]]
[4]

2.4 Принципиальный анализ

2.4.1 Анализ результатов

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

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

Что означает параметр альфа=1?

Мы знаем, что байесовский метод должен вычислять две вероятности: условную вероятность: P(X(i) = x(i) ∣ Y = ck) c_k) P(X(i)=x(i)∣Y=ck​) и априорную вероятность категории ck c_k ck​: P ( Y = ck ) P(Y=c_k) P(Y=ck ​).

Для дискретных функций:

P ( X ( j ) = x ( j ) ∣ Y = ck ) = ∑ i = 1 NI ( xij = ajl , yi = ck ) + α ∑ i = 1 NI ( yi = ck ) + S j α P(X ^ {(j)} = x ^ {(j)} | Y = c_k) = \ frac {\ sum_ {i = 1} ^ {N} I (x_i ^ j = a_ {jl}, y_i = c_k) + \alpha}{\sum_{i=1}^{N}I(y_i=c_k)+S_j\alpha} P(X(j)=x(j)∣Y=ck​)=∑i=1N​I (yi​=ck​)+Sj​α∑i=1N​I(xij​=ajl​,yi​=ck​)+α​

Мы видим, что к каждой переменной добавляется частота альфа. Когда alphaλ=0, это оценка максимального правдоподобия. Обычно значение альфа = 1, которое представляет собой сглаживание по Лапласу, которое называется байесовской оценкой, главным образом потому, что если используется оценка максимального правдоподобия, если определенное значение признака не появляется в обучающих данных, в это время будет ситуация где вероятность равна 0, в результате чего вся оценка равна 0, поскольку вводится байесовская оценка.

в:

S j S_j Sj​: указывает номер j-го объекта.

x i j x_i^j xij​: представляет j-й элемент измерения i-го образца.

y i y_i yi​: метка i-го образца.

2.4.2 Наивный байесовский алгоритм

Наивный байесовский метод = теорема Байеса + условная независимость признаков.

Входное пространство X ∈ Rn X \in R^n X∈Rn представляет собой n-мерное векторное множество, выходное пространство y = {c1,c2,...,cK}y=\{c_1,c_2,.. .,c_K\} y={c1​,c2​,...,cK​}. Все X и y являются случайными величинами в соответствующем пространстве. P ( X , Y ) P(X,Y) P(X , Y) — совместная вероятность X и Y соответственно.Обучающий набор данных (сгенерированный P(X,Y)P(X,Y) P(X,Y) IID):
T = {( x 1 , y 1 ), ( x 2 , y 2 ) , . . . . , ( x N , y N ) } T = \ {(x_1, y_1), (x_2, y_2),... ,(x_N,y_N)\} T={(x1​,y1​),(x2​,y2​),...,(xN​,yN​)}

Чтобы вычислить список тестовых данных x, нам нужно по очереди вычислить P (Y = ck ∣ X = x) P(Y=c_k|X=x) P(Y=ck​∣X=x) и взять значение с наибольшей вероятностью, то есть класс, соответствующий x.

P ( Y = ck ∣ X = x ) P(Y=c_k|X=x) P(Y=ck​∣X=x) Обычно мы интерпретируем это так, когда дано ( X = x ) (X=x) (При условии X=x), Y = ck Y=c_k Y=ck​Вероятность, это условная вероятность.Это просто, нам нужен только каждый x, вычислить его соответствующий ck, k ∈ [ 1 , 2 , . были проведены.

Деформированная по формуле Байеса получается формула расчета прогнозируемой вероятности:

P ( Y = ck ∣ X = x ) = P ( X = x ∣ Y = ck ) P ( Y = ck ) ∑ k P ( X = x ∣ Y = ck ) P ( Y = ck ) P (Y = c_k |X=x)=\frac{P(X=x|Y=c_k)P(Y=c_k)}{\sum_{k}P(X=x|Y=c_k)P(Y=c_k)} P (Y=ck​∣X=x)=∑k​P(X=x∣Y=ck​)P(Y=ck​)P(X=x∣Y=ck​)P(Y=ck​)​

Нам нужно только рассчитать следующие две вероятности, и, поскольку Наивный Байес предполагает условную независимость, мы можем рассчитать условную вероятность каждого признака в отдельности: P ( X ( i ) = x ( i ) ∣ Y = ck ) P ( X ^ { (i)}=x^{(i)}|Y=c_k) P(X(i)=x(i)∣Y=ck​) и априорная вероятность категории ck c_k ck​: P ( Y = ck ) P(Y=c_k) P(Y=ck​). Чтобы лучше понять эту формулу, см. следующую диаграмму для объяснения:

в:
п ( Y знак равно ck ) знак равно ∑ я знак равно 1 NI ( yi знак равно ck ) N , k знак равно 1 , 2 , ... , KP (Y = c_k) = \ frac {\ sum_ {i = 1} ^ {N} I(y_i=c_k)}{N}, k=1,2,...,KP(Y=ck​)=N∑i=1N​I(yi​=ck​)​,k=1,2 ,...,К

Когда задействовано несколько условий, наивный байесовский алгоритм использует предварительное предположение, которое мы называем предположением условной независимости (или простым предположением: наивное): формула выглядит следующим образом.
P ( A , B ∣ Y ) = P ( A ∣ Y ) ⋅ P ( B ∣ Y ) P(A,B|Y) = P(A|Y) \cdot P(B|Y) P(A,B ∣Y)=P(A∣Y)⋅P(B∣Y)
Эта формула является основным предположением Наивного Байеса, то есть каждая условная вероятность независима друг от друга, А не влияет на В, а В не влияет на А.
А для этого предположим X = [x1, x2,...,xn] X = [x_1,x_2,...,x_n] X=[x1​,x2​,...,xn​]

п ( Икс знак равно Икс ∣ Y знак равно ck ) знак равно п ( Икс ( 1 ) знак равно Икс ( 1 ) , Икс ( 2 ) знак равно Икс ( 2 ) , . . . , Икс ( п ) знак равно Икс ( п ) ∣ Y знак равно ck ) = ∏ i = 1 n P ( xi ∣ y ) P(X=x|Y=c_k) \\ =P(X^{(1)}=x^{(1)},X^{(2) }=x^{(2)},...,X^{(n)}=x^{(n)}|Y=c_k) \\ =\prod_{i=1}^{n} P( x_i | y) P(X=x∣Y=ck​)=P(X(1)=x(1),X(2)=x(2),...,X(n)=x(n )∣Y=ck​)=i=1∏n​P(xi​∣y)

Таким образом, исходная формула может быть эквивалентна:

п ( Y знак равно ck ∣ Икс знак равно Икс ) знак равно ∏ я знак равно 1 п п ( xi ∣ Y знак равно ck ) п ( Y знак равно ck ) ∑ k ∏ я знак равно 1 п п ( xi ∣ Y знак равно ck ) п ( Y знак равно ck ) P(Y=c_k|X=x)=\frac{\prod_{i=1}^{n} P(x_i | Y=c_k)P(Y=c_k)}{\sum_{k}\prod_{ i=1}^{n} P(x_i | Y=c_k)P(Y=c_k)} P(Y=ck​∣X=x)=∑k​∏i=1n​P(xi​∣Y= ck​)P(Y=ck​)∏i=1n​P(xi​∣Y=ck​)P(Y=ck​)​

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

y = argmaxck P ( Y = ck ) ∏ j P ( X ( j ) = x ( j ) ∣ Y = ck ) y = arg max_ {c_k} P (Y = c_k) \ prod_ {j} P (X ^ { (j)}=x^{(j)}|Y=c_k) y=argmaxck​​P(Y=ck​)j∏​P(X(j)=x(j)∣Y=ck​)

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

index X 1 : X_1: X1​: Погода хорошая или плохая X 2 : X_2: X2​:будь то выходные Y : Y: Y: выйти ли
1 хорошо да выйти
2 хорошо нет выйти
3 хорошо да не выходи
4 хорошо нет выйти
5 фигово да выйти
6 фигово нет не выходи

По вышеприведенным данным, чтобы лучше понять процесс расчета, приведем несколько расчетных формул:

А. При выходе X_1 — вероятность плохой погоды:
p ( X 1 = плохо ∣ Y = выйти) = p ( X 1 = плохо, Y = выйти) p ( Y = выйти) = 1 4 p(X_1= плохо|Y= выйти) =\frac{ p (X_1=плохо, Y=выходит)}{p(Y=выходит)}=\frac{1}{4} p(X1​=плохо∣Y=выходит)=p(Y=выходит)=p(Y=выходит) ухожу)p(X1 ​=плохо, Y=выхожу)​=41

Б. Вероятность выхода
p ( Y = выход) = 4 6 p(Y= выход)=\frac{4}{6} p(Y= выход)=64​

в) Вероятность плохой погоды в X_1,
p ( X 1 = плохо ) = 2 6 p(X_1= плохо)=\frac{2}{6} p(X1​= плохо)=62​

г. В случае непогоды в Х_1 вероятность выхода на улицу:
p ( Y = выход ∣ X 1 = плохой ) = p ( X 1 = плохой ∣ Y = выход ) ⋅ p ( Y = выход ) p ( X = плохой ) = 1 4 ⋅ 4 6 2 6 = 1 2 p(Y=Выход |X_1=Плохо)=\frac{p(X_1=Плохо|Y=Выход) \cdot p(Y=Выход)}{p(X=Плохо)} \\ = \frac{ \frac{1}{4} \cdot \frac{4}{6}}{\frac{2}{6}}=\frac{1}{2} p(Y=выйти∣X1 =плохо) =p(X=плохо)p(X1​=плохо∣Y=гулять)⋅p(Y=гулять)​=62​41​⋅64​=21

е. Вероятность не выйти на улицу в случае непогоды в X_1:
p ( Y = выход ∣ X 1 = нехорошо) = 1 − p ( Y = не выход ∣ X 1 = плохо) = 1 − 1 2 = 1 2 p(Y = выход | X_1 = плохо) = 1 - p(Y=не выходит|X_1=плохо)=1-\frac{1}{2}=\frac{1}{2} p(Y=выходит∣X1​=плохо)=1− p(Y = Не выходит∣X1​= Плохо)=1−21​=21

2.4.3 Преимущества и недостатки наивного байесовского метода

преимущество:
Наивный байесовский алгоритм в основном основан на классической байесовской формуле для продавливания, которая имеет хорошие математические принципы. И он хорошо работает, когда объем данных невелик, а инкрементные вычисления могут выполняться, когда объем данных велик. Поскольку Наивный Байес использует априорные вероятности для оценки апостериорных вероятностей, модель имеет хорошую интерпретируемость.

недостаток:
Наивные байесовские модели имеют наименьшую теоретическую частоту ошибок по сравнению с другими методами классификации. Однако это не всегда так, потому что наивная байесовская модель предполагает, что атрибуты независимы друг от друга, когда задана выходная категория, что часто неверно в практических приложениях.Когда корреляция велика, эффект классификации не хорошо. Когда корреляция атрибутов мала, наивный байесовский метод работает лучше всего. Для этого существуют алгоритмы, такие как полунаивный байесовский, которые умеренно улучшены за счет учета частичных корреляций, например, мы предполагаем, что каждый атрибут зависит только от одного от другого, чтобы не быть слишком затратным в вычислительном отношении. Чтобы решить корреляцию между функциями, мы также можем использовать метод уменьшения размерности данных (PCA), чтобы удалить корреляцию функций, а затем выполнить наивный байесовский расчет.