手把手教你机器学习之朴素贝叶斯

朴素贝叶斯算法是一种基于贝叶斯理论的有监督学习算法。之所以说“朴素”,是因为这个算法是基于样本特征之间互相独立的“朴素”假设。正因为如此,由于不用考虑样本特征之间的关系,朴素贝叶斯分类器的效率是非常高的。

1.贝叶斯定理:

贝叶斯定理

2.朴素贝叶斯算法的不同方法:

朴素贝叶斯算法包含多种方法,在sklearn中,朴素贝叶斯有三种方法,分别是贝努力贝叶斯,高斯贝叶斯和多项式贝叶斯。

  1. 贝努力朴素贝叶斯:

贝努力朴素贝叶斯,这种方法比较适合于符合贝努力分布的数据集,贝努力分布也被称为"二项分布"或者是“0-1分布”。
下面我们来动手实践下:

#导入数据生成工作
from sklearn.datasets import make_blobs
#导入数据拆分工具
from sklearn.model_selection import train_test_split
#生成样本数量为500,分类数为5的数据集
X,y=make_blobs(n_samples=500,centers=5,random_state=8)
#将数据集拆分
X_train,X_test,y_train,y_teat=train_test_split(X,y,random_state=8)
#使用贝努力贝叶斯拟合数据
from sklearn.naive_bayes import BernoulliNB
nb=BernoulliNB()
nb.fit(X_train,y_train)
print('测试集得分:{}'.format(nb.score(X_test,y_teat)))

请添加图片描述
2.高斯朴素贝叶斯:
高斯朴素贝叶斯,顾名思义,是假设样本的特征符合高斯分布,或者说符合正态分布时所用的算法。
下面我们来动手实践下:

#导入数据生成工作
from sklearn.datasets import make_blobs
#导入数据拆分工具
from sklearn.model_selection import train_test_split
#生成样本数量为500,分类数为5的数据集
X,y=make_blobs(n_samples=500,centers=5,random_state=8)
#将数据集拆分
X_train,X_test,y_train,y_teat=train_test_split(X,y,random_state=8)
#使用贝努力贝叶斯拟合数据
from sklearn.naive_bayes import GaussianNB
nb=GaussianNB()
nb.fit(X_train,y_train)
print('测试集得分:{}'.format(nb.score(X_test,y_teat)))

请添加图片描述
结果分析:
看起来,使用高斯朴素贝叶斯方法建立的模型得分要好的多,这说明我们生成的手工数据集的特征基本上符合正态分布。
事实上,高斯朴素贝叶斯也确实是能够胜任大部分的分类任务,这是因为在自然科学和社会科学领域,有大量的现象都是呈现出正态分布的状态。

  1. 多项式朴素贝叶斯:
    多项式朴素贝叶斯,从名字也可以推断出它主要是用于拟合多项式分布的数据集。
    下面我们来动手实战下:
#导入数据生成工作
from sklearn.datasets import make_blobs
#导入数据拆分工具
from sklearn.model_selection import train_test_split
#生成样本数量为500,分类数为5的数据集
X,y=make_blobs(n_samples=500,centers=5,random_state=8)
#将数据集拆分
X_train,X_test,y_train,y_teat=train_test_split(X,y,random_state=8)
#使用贝努力贝叶斯拟合数据
from sklearn.naive_bayes import MultinomialNB
nb=MultinomialNB()
nb.fit(X_train,y_train)
print('测试集得分:{}'.format(nb.score(X_test,y_teat)))

事实上,上述代码是错误的,因为多项式朴素贝叶斯要求输入的X值必须非负,所以我们需要对数据进行预处理下。

#导入数据生成工作
from sklearn.datasets import make_blobs
#导入数据拆分工具
from sklearn.model_selection import train_test_split
#生成样本数量为500,分类数为5的数据集
X,y=make_blobs(n_samples=500,centers=5,random_state=8)
#将数据集拆分
X_train,X_test,y_train,y_teat=train_test_split(X,y,random_state=8)
from sklearn.preprocessing import MinMaxScaler
sca=MinMaxScaler().fit(X_train)
X_train_sca=sca.transform(X_train)
X_test_sca=sca.transform(X_test)
#使用贝努力贝叶斯拟合数据
from sklearn.naive_bayes import MultinomialNB
nb=MultinomialNB()
nb.fit(X_train_sca,y_train)
print('测试集得分:{}'.format(nb.score(X_test_sca,y_teat)))

请添加图片描述
结果分析:
多项式朴素贝叶斯只适合用来对非负离散数值特征进行分类,典型的例子就是对转化为向量后的文本数据进行分类。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
朴素贝叶斯算法是一种基于贝叶斯定理的分类算法,它假设特征之间相互独立。这个假设使得算法具有较快的训练和预测速度,并且在处理大规模数据集时表现良好。 下面我将用图解的方式详细介绍朴素贝叶斯算法的原理和步骤。 首先,我们需要准备一个分类任务的数据集。假设我们要构建一个垃圾邮件分类器,数据集包含了一些已经标记好的邮件样本,每个邮件样本都有一些特征(如邮件内容、发件人等)和对应的标签(垃圾邮件/非垃圾邮件)。 第一步是计算先验概率。先验概率指的是在没有任何特征信息的情况下,某个样本属于某个类别的概率。在我们的例子中,就是计算垃圾邮件和非垃圾邮件出现的概率。 第二步是计算条件概率。条件概率指的是在已知某个特征条件下,某个样本属于某个类别的概率。对于朴素贝叶斯算法来说,我们假设所有特征之间相互独立,因此可以将条件概率拆分为各个特征的概率乘积。我们需要计算每个特征在每个类别下的概率。 第三步是应用贝叶斯定理。贝叶斯定理可以根据已知的特征计算某个样本属于某个类别的后验概率。后验概率越大,就说明该样本属于该类别的可能性越大。 最后,我们可以根据后验概率进行分类预测。选择具有最大后验概率的类别作为预测结果。 总结一下,朴素贝叶斯算法通过计算先验概率、条件概率和应用贝叶斯定理,实现了对样本的分类预测。它的优势在于简单、快速,并且在一些特定的数据集上表现出色。然而,它的假设可能不符合实际情况,所以在实际应用中需要考虑和验证数据的特性和假设的合理性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值