python中如何使用朴素贝叶斯算法


Posted in Python onApril 06, 2017

这里再重复一下标题为什么是"使用"而不是"实现":

首先,专业人士提供的算法比我们自己写的算法无论是效率还是正确率上都要高。

其次,对于数学不好的人来说,为了实现算法而去研究一堆公式是很痛苦的事情。

再次,除非他人提供的算法满足不了自己的需求,否则没必要"重复造轮子"。

下面言归正传,不了解贝叶斯算法的可以去查一下相关资料,这里只是简单介绍一下:

1.贝叶斯公式:

P(A|B)=P(AB)/P(B)

2.贝叶斯推断:

P(A|B)=P(A)×P(B|A)/P(B)

用文字表述:

后验概率=先验概率×相似度/标准化常量

而贝叶斯算法要解决的问题就是如何求出相似度,即:P(B|A)的值

3. 在scikit-learn包中提供了三种常用的朴素贝叶斯算法,下面依次说明:

1)高斯朴素贝叶斯:假设属性/特征是服从正态分布的(如下图),主要应用于数值型特征。

 python中如何使用朴素贝叶斯算法

使用scikit-learn包中自带的数据,代码及说明如下:

>>>from sklearn import datasets ##导入包中的数据
>>> iris=datasets.load_iris() ##加载数据
>>> iris.feature_names  ##显示特征名字
 ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
>>> iris.data   ##显示数据
 array([[ 5.1, 3.5, 1.4, 0.2],[ 4.9, 3. , 1.4, 0.2],[ 4.7, 3.2, 1.3, 0.2]............
>>> iris.data.size  ##数据大小 ---600个
>>> iris.target_names  ##显示分类的名字 
 array(['setosa', 'versicolor', 'virginica'], dtype='<U10')
>>> from sklearn.naive_bayes import GaussianNB ##导入高斯朴素贝叶斯算法
>>> clf = GaussianNB()    ##给算法赋一个变量,主要是为了方便使用
>>> clf.fit(iris.data, iris.target)  ##开始分类。对于量特别大的样本,可以使用函数partial_fit分类,避免一次加载过多数据到内存

>>> clf.predict(iris.data[0].reshape(1,-1)) ##验证分类。标红部分特别说明:因为predict的参数是数组,data[0]是列表,所以需要转换一下
array([0])
>>> data=np.array([6,4,6,2])   ##验证分类
>>> clf.predict(data.reshape(1,-1))
array([2])

这里涉及到一个问题:如何判断数据符合正态分布? R语言里面有相关函数判断,或者直接绘图也可以看出来,但是都是P(x,y)这种可以在坐标系里面直接

画出来的情况,而例子中的数据如何确定,目前还没有搞明白,这部分后续会补上。

2)多项式分布朴素贝叶斯:常用于文本分类,特征是单词,值是单词出现的次数。

##示例来在官方文档,详细说明见第一个例子
>>> import numpy as np
>>> X = np.random.randint(5, size=(6, 100)) ##返回随机整数值:范围[0,5) 大小6*100 6行100列
>>> y = np.array([1, 2, 3, 4, 5, 6])
>>> from sklearn.naive_bayes import MultinomialNB
>>> clf = MultinomialNB()
>>> clf.fit(X, y)
MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True) 
>>> print(clf.predict(X[2]))
[3]

3)伯努力朴素贝叶斯:每个特征都是是布尔型,得出的结果是0或1,即出现没出现

##示例来在官方文档,详细说明见第一个例子
>>> import numpy as np
>>> X = np.random.randint(2, size=(6, 100))
>>> Y = np.array([1, 2, 3, 4, 4, 5])
>>> from sklearn.naive_bayes import BernoulliNB
>>> clf = BernoulliNB()
>>> clf.fit(X, Y)
BernoulliNB(alpha=1.0, binarize=0.0, class_prior=None, fit_prior=True) 
>>> print(clf.predict(X[2]))
[3]

补充说明:此文还不完善,示例一中也有部分说明需要写,最近事情较多,后续会逐渐完善。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Python 相关文章推荐
对于Python的Django框架使用的一些实用建议
Apr 03 Python
Python使用matplotlib绘制动画的方法
May 20 Python
pygame游戏之旅 python和pygame安装教程
Nov 20 Python
Python设计模式之解释器模式原理与用法实例分析
Jan 10 Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
Apr 29 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
Jun 13 Python
Python with用法:自动关闭文件进程
Jul 10 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
Sep 03 Python
python 实现绘制整齐的表格
Nov 18 Python
pycharm 实现本地写代码,服务器运行的操作
Jun 08 Python
通过代码实例解析Pytest运行流程
Aug 20 Python
pycharm如何设置官方中文(如何汉化)
Dec 29 Python
python获取当前运行函数名称的方法实例代码
Apr 06 #Python
python爬取w3shcool的JQuery课程并且保存到本地
Apr 06 #Python
使用Python对SQLite数据库操作
Apr 06 #Python
使用Python对MySQL数据操作
Apr 06 #Python
windows 10下安装搭建django1.10.3和Apache2.4的方法
Apr 05 #Python
Python使用迭代器捕获Generator返回值的方法
Apr 05 #Python
由浅入深讲解python中的yield与generator
Apr 05 #Python
You might like
PHP函数常用用法小结
2010/02/08 PHP
Laravel5中contracts详解
2015/03/02 PHP
php+ajax实现无刷新的新闻留言系统
2020/12/21 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
关于Curl在Swoole协程中的解决方案详析
2019/09/12 PHP
禁止刷新,回退的JS
2006/11/25 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
2011/06/27 Javascript
jquery.validate使用时遇到的问题
2015/05/25 Javascript
js图片翻书效果代码分享
2015/08/20 Javascript
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
jquery设置表单元素为不可用的简单代码
2016/07/04 Javascript
js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换
2016/12/06 Javascript
js记录点击某个按钮的次数-刷新次数为初始状态的实例
2017/02/15 Javascript
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
基于jQuery的$.getScript方法去加载javaScript文档解析
2017/11/08 jQuery
Vuejs中使用markdown服务器端渲染的示例
2017/11/22 Javascript
JS实现的文件拖拽上传功能示例
2018/05/21 Javascript
JavaScript实现简单贪吃蛇效果
2020/03/09 Javascript
js实现随机圆与矩形功能
2020/10/29 Javascript
CentOS 8.2服务器上安装最新版Node.js的方法
2020/12/16 Javascript
Python返回真假值(True or False)小技巧
2015/04/10 Python
Python实现的彩票机选器实例
2015/06/17 Python
解析Python中的__getitem__专有方法
2016/06/27 Python
python基于pyDes库实现des加密的方法
2017/04/29 Python
Python使用matplotlib的pie函数绘制饼状图功能示例
2018/01/08 Python
python 数字类型和字符串类型的相互转换实例
2018/07/17 Python
Python中函数的基本定义与调用及内置函数详解
2019/05/13 Python
解决Jupyter notebook中.py与.ipynb文件的import问题
2020/04/21 Python
瑞典在互联网上最大的宠物商店:Animail
2020/10/31 全球购物
如何用SQL语句进行模糊查找
2015/09/25 面试题
应届毕业生通用的自荐书范文
2014/02/07 职场文书
八一建军节营销活动方案
2014/08/31 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书
Go语言设计模式之结构型模式
2021/06/22 Golang
Java中的继承、多态以及封装
2022/04/11 Java/Android
处理canvas绘制图片模糊问题
2022/05/11 Javascript