朴素贝叶斯算法

本文详细介绍了朴素贝叶斯算法的基本原理,并通过一个婚姻选择的实例直观展示了其工作过程。接着,讨论了高斯朴素贝叶斯、多项式朴素贝叶斯和伯努利朴素贝叶斯三种不同的实现方式,以及它们各自适用的数据特性。同时,通过鸢尾花数据集的分类任务,展示了高斯朴素贝叶斯模型的性能。
摘要由CSDN通过智能技术生成

朴素贝叶斯介绍

基本公式:

P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) P(A|B) = \frac{P(B|A)P(A)}{P(B)} P(AB)=P(B)P(BA)P(A)

假如换成我们的分类问题或许可能更好理解:

P ( 类别 ∣ 特征 ) = P ( 特征 ∣ 类别 ) P ( 类别 ) P ( 特征 ) P(类别|特征) = \frac{P(特征|类别)P(类别)}{P(特征)} P(类别特征)=P(特征)P(特征类别)P(类别)

可以通过一个小例子形象地描述该算法,请见下表:

颜值性格努力程度嫁与否
上进
不帅一般不嫁
不帅不好不上进不嫁
一般
不帅上进
不好一般不嫁
不上进
不帅不好上进不嫁
不好上进
不帅不上进不嫁

假设现在有个男生/女生向你求婚,他的特征是(帅,不好,不上进),你是否会选择嫁呢?

我们通过已有的许多数据,使用朴素贝叶斯算法预测一下:

P ( 类别 ∣ 特征 ) = P ( 特征 ∣ 类别 ) P ( 类别 ) P ( 特征 ) P(类别|特征) = \frac{P(特征|类别)P(类别)}{P(特征)} P(类别特征)=P(特征)P(特征类别)P(类别)

可得出以下公式:

P ( 嫁 ∣ 帅,不好,不上进 ) = P ( 帅,不好,不上进 ∣ 嫁 ) P ( 嫁 ) P ( 帅,不好,不上进 ) P(嫁|帅,不好,不上进) = \frac{P(帅,不好,不上进|嫁)P(嫁)}{P(帅,不好,不上进)} P(帅,不好,不上进)=P(帅,不好,不上进)P(帅,不好,不上进)P()

P ( 不嫁 ∣ 帅,不好,不上进 ) = P ( 帅,不好,不上进 ∣ 不嫁 ) P ( 不嫁 ) P ( 帅,不好,不上进 ) P(不嫁|帅,不好,不上进) = \frac{P(帅,不好,不上进|不嫁)P(不嫁)}{P(帅,不好,不上进)} P(不嫁帅,不好,不上进)=P(帅,不好,不上进)P(帅,不好,不上进不嫁)P(不嫁)

我们通过计算 P(嫁|帅,不好,不上进)P(不嫁|帅,不好,不上进) 的概率,通过比较进行预测嫁还是不嫁?

P(嫁): 5 10 = 1 2 \frac{5}{10} = \frac{1}{2} 105=21

P(不嫁): 5 10 = 1 2 \frac{5}{10} = \frac{1}{2} 105=21

由于朴素贝叶斯设定特征之间均是独立的,故有:

P(帅,不好,不上进|嫁) = P(帅|嫁)* P(不好|嫁)* P(不上进|嫁): 4 5 \frac{4}{5} 54 * 1 5 \frac{1}{5} 51 * 1 5 \frac{1}{5} 51 = 0.032

P(帅,不好,不上进|不嫁) = P(帅|不嫁)* P(不好|不嫁)* P(不上进|不嫁): 1 5 \frac{1}{5} 51 * 3 5 \frac{3}{5} 53 * 2 5 \frac{2}{5} 52 = 0.048

全概率公式可知:

P(帅,不好,不上进) = P(帅,不好,不上进|嫁)P(嫁) + P(帅,不好,不上进|不嫁)P(不嫁) = 1 2 \frac{1}{2} 21 * ( 4 5 \frac{4}{5} 54 * 1 5 \frac{1}{5} 51 * 1 5 \frac{1}{5} 51 + 1 5 \frac{1}{5} 51 * 3 5 \frac{3}{5} 53 * 2 5 \frac{2}{5} 52) = 0.04

故可得以下结果:

P ( 嫁 ∣ 帅,不好,不上进 ) = 0.5 ∗ 0.032 0.04 = 40 % P(嫁|帅,不好,不上进) = \frac{0.5 * 0.032}{0.04} = 40\% P(帅,不好,不上进)=0.040.50.032=40%

P ( 不嫁 ∣ 帅,不好,不上进 ) = 0.5 ∗ 0.048 0.04 = 60 % P(不嫁|帅,不好,不上进) = \frac{0.5 * 0.048}{0.04} = 60\% P(不嫁帅,不好,不上进)=0.040.50.048=60%

根据贝叶斯概率的比较,女生会选择不嫁, 故这就是朴素贝叶斯算法的具体思想。

朴素贝叶斯的三种实现方式

朴素贝叶斯,主要有三种朴素贝叶斯分类器,分别为 GaussianNB(高斯分布)、MultinomialNB(多项式贝叶斯)、BernoulliNB(伯努利贝叶斯)

GaussianNB–高斯贝叶斯

一般来说,如果样本特征的分布大部分是连续值,使用 GaussianNB 会比较好。

我们也可使用该模型测试一下 鸢尾花分类,得到以下评估结果。

import numpy as np               #导入numpy包
import pandas as pd              #导入pandas包
from sklearn.naive_bayes import GaussianNB                #导入高斯贝叶斯
from sklearn.model_selection import train_test_split     #导入拆分 训练集与测试集 的方法
from sklearn.metrics import accuracy_score
import sklearn
import mglearn


#使用sklearn的iris鸢尾草数据集
dataset_iris = sklearn.datasets.load_iris()

#划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(dataset_iris.data, dataset_iris.target)
print(X_train.shape)
print(y_train.shape)


#训练模型
gaussian_nb = GaussianNB().fit(X_train, y_train)

#输出所有的预测结果及每个结果的可能性
predict = gaussian_nb.predict(X_test)
predict_pro = gaussian_nb.predict_proba(X_test)   #预测结果的可能性,一个列表,每个元素表示3个种类的各个可能性,预测结果为最大的那个种类

print(predict)           #所有预测结果

#分别用高斯贝叶斯模型对训练集与测试集进行评估
train_score = gaussian_nb.score(X_train, y_train)
test_score = gaussian_nb.score(X_test, y_test)

#输出评估的精确度
print('The train_score: {}'.format(train_score))
print('The test_score: {}'.format(test_score))

运行结果

(112, 4)
(112,)
[0 2 2 2 1 0 2 2 0 2 1 1 1 1 2 0 2 1 1 1 2 2 1 0 2 2 1 1 1 0 2 0 0 1 0 1 1
 2]
The train_score: 0.9464285714285714
The test_score: 0.9736842105263158

MultinomialNB----多项式贝叶斯

MultinomialNB就是先验为多项式分布的朴素贝叶斯。

它假设特征是由一个简单多项式分布生成的。

多项分布可以描述各种类型样本出现次数的概率,因此多项式朴素贝叶斯非常适合用于描述出现次数或者出现次数比例的特征.该模型常用于文本分类,特征表示的是次数,例如某个词语的出现次数。

若样本特征的分布大部分是多元离散值,使用 MultinomialNB 比较合适。

BernoulliNB----伯努利贝叶斯

BernoulliNB 就是先验为伯努利分布的朴素贝叶斯。

在伯努利模型中,每个特征的取值是布尔型的,即true和false,或者1和0。

若样本特征是二元离散值或者很稀疏的多元离散值,应该使用 BernoulliNB 。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gaolw1102

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值