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 相关文章推荐
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
Apr 09 Python
深入讲解Java编程中类的生命周期
Feb 05 Python
Python 常用string函数详解
May 30 Python
python实现kMeans算法
Dec 21 Python
python 常见字符串与函数的用法详解
Nov 23 Python
Pytorch maxpool的ceil_mode用法
Feb 18 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
Apr 29 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
May 11 Python
详解python with 上下文管理器
Sep 02 Python
Python为何不支持switch语句原理详解
Oct 21 Python
python 写一个文件分发小程序
Dec 05 Python
python中使用asyncio实现异步IO实例分析
Feb 26 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下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
ThinkPHP与PHPExcel冲突解决方法
2011/08/08 PHP
php使用explode()函数将字符串拆分成数组的方法
2015/02/17 PHP
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
2013/01/11 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
2015/08/26 Javascript
js实现向右横向滑出的二级菜单效果
2015/08/27 Javascript
实例详解angularjs和ajax的结合使用
2015/10/22 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
Vuex 单状态库与多模块状态库详解
2018/12/11 Javascript
Vue 实现对quill-editor组件中的工具栏添加title
2020/08/03 Javascript
[00:28]DOTA2北京网鱼队选拔赛
2015/04/08 DOTA
[52:02]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第二场 2月26日
2021/03/11 DOTA
Python单元测试框架unittest简明使用实例
2015/04/13 Python
Python读写文件方法总结
2015/06/09 Python
python使用wmi模块获取windows下的系统信息 监控系统
2015/10/27 Python
使用简单工厂模式来进行Python的设计模式编程
2016/03/01 Python
Windows系统下多版本pip的共存问题详解
2017/10/10 Python
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
Django restframework 源码分析之认证详解
2019/02/22 Python
详解python中init方法和随机数方法
2019/03/13 Python
浅谈Python大神都是这样处理XML文件的
2019/05/31 Python
Pycharm运行加载文本出现错误的解决方法
2019/06/27 Python
python爬虫增加访问量的方法
2019/08/22 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
关于python中plt.hist参数的使用详解
2019/11/28 Python
详解如何通过H5(浏览器/WebView/其他)唤起本地app
2017/12/11 HTML / CSS
最耐用行李箱,一箱永流传:Briggs & Riley(全球终身保修)
2017/12/07 全球购物
俄罗斯的精英皮具:Wittchen
2018/01/29 全球购物
加拿大快时尚零售商:Ardene
2018/02/14 全球购物
一些高难度的SQL面试题
2016/11/29 面试题
便利店的创业计划书
2014/01/15 职场文书
报关员个人职业生涯规划书
2014/03/12 职场文书
领导干部作风整顿剖析材料
2014/10/11 职场文书
大学教师个人总结
2015/02/10 职场文书
贫困证明怎么写
2015/06/16 职场文书