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正则匹配抓取豆瓣电影链接和评论代码分享
Dec 27 Python
Python的Django框架中消息通知的计数器实现教程
Jun 13 Python
Python实现字符串与数组相互转换功能示例
Sep 22 Python
python抓取网页中链接的静态图片
Jan 29 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
Feb 08 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
Sep 03 Python
python实现简单多人聊天室
Dec 11 Python
FFT快速傅里叶变换的python实现过程解析
Oct 21 Python
Pytorch 实现sobel算子的卷积操作详解
Jan 10 Python
python之生成多层json结构的实现
Feb 27 Python
ROS系统将python包编译为可执行文件的简单步骤
Jul 25 Python
python开发的自动化运维工具ansible详解
Aug 07 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获取当前文件所在目录 getcwd()函数
2009/05/13 PHP
php操作mysqli(示例代码)
2013/10/28 PHP
PHP获取php,mysql,apche的版本信息示例代码
2014/01/16 PHP
WampServer搭建php环境时遇到的问题汇总
2015/07/23 PHP
php对象工厂类完整示例
2018/08/09 PHP
tp5.1框架数据库子查询操作实例分析
2020/05/26 PHP
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
JavaScript生成GUID的多种算法小结
2013/08/18 Javascript
Javascript 遍历页面text控件详解
2014/01/06 Javascript
JS实现鼠标单击与双击事件共存
2014/03/08 Javascript
删除Javascript Object中间的key
2014/11/18 Javascript
jQuery中bind()方法用法实例
2015/01/19 Javascript
使用AngularJS实现可伸缩的页面切换的方法
2015/06/19 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
理解JavaScript表单的基础知识
2016/01/25 Javascript
Angularjs过滤器使用详解
2016/05/25 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
2016/12/01 Javascript
详解Node.js实现301、302重定向服务
2017/04/07 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
javascript计算渐变颜色的实例
2017/09/22 Javascript
angularJs select绑定的model取不到值的解决方法
2018/10/08 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
python中协程实现TCP连接的实例分析
2018/10/14 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
Python编写一个验证码图片数据标注GUI程序附源码
2019/12/09 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
2020/12/03 Python
用CSS3的box-reflect设置文字倒影效果的方法讲解
2016/03/07 HTML / CSS
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
企业管理培训感言
2014/01/27 职场文书
文艺晚会策划方案
2014/06/11 职场文书
工作违纪检讨书范文
2015/01/26 职场文书
党员干部廉洁自律承诺书
2015/04/28 职场文书
运动会闭幕式致辞
2015/07/29 职场文书