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实现简单拆分PDF文件的方法
Jul 30 Python
python 正确保留多位小数的实例
Jul 16 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
在IPython中进行Python程序执行时间的测量方法
Nov 01 Python
python字符串中匹配数字的正则表达式
Jul 03 Python
Python3.8对可迭代解包的改进及用法详解
Oct 15 Python
python [:3] 实现提取数组中的数
Nov 27 Python
python要安装在哪个盘
Jun 15 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
Oct 20 Python
python通配符之glob模块的使用详解
Apr 24 Python
python 中[0]*2与0*2的区别说明
May 10 Python
python flappy bird小游戏分步实现流程
Feb 15 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
jqPlot 图表中文API使用文档及源码和在线示例
2012/02/07 Javascript
js点击出现悬浮窗效果不使用JQuery插件
2014/01/20 Javascript
js在指定位置增加节点函数insertBefore()用法实例
2015/01/12 Javascript
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
2015/06/11 Javascript
jquery显示loading图片直到网页加载完成的方法
2015/06/25 Javascript
Google 地图获取API Key详细教程
2016/08/06 Javascript
js实现导航吸顶效果
2017/02/24 Javascript
Vue中添加过渡效果的方法
2017/03/16 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
2017/06/09 jQuery
使用vs code开发Nodejs程序的使用方法
2017/09/21 NodeJs
Node.js readline 逐行读取、写入文件内容的示例
2018/03/01 Javascript
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
vue如何使用async、await实现同步请求
2019/12/09 Javascript
python使用Flask操作mysql实现登录功能
2018/05/14 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
Python中pymysql 模块的使用详解
2019/08/12 Python
Window10下python3.7 安装与卸载教程图解
2019/09/30 Python
使用Rasterio读取栅格数据的实例讲解
2019/11/26 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
2020/07/28 Python
Node.js 和 Python之间该选择哪个?
2020/08/05 Python
Python3使用 GitLab API 进行批量合并分支
2020/10/15 Python
html5新特性与用法大全
2018/09/13 HTML / CSS
巴西补充剂和维生素购物网站:Natue
2019/06/17 全球购物
Mountain Warehouse德国官网:英国户外零售商
2019/08/11 全球购物
生产内勤岗位职责
2013/12/07 职场文书
销售总经理岗位职责
2014/03/15 职场文书
2014幼儿园教师师德师风演讲稿
2014/09/10 职场文书
泸县召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
公司承诺书格式范文
2015/04/28 职场文书
收入证明范本
2015/06/12 职场文书
预备党员表决心的话
2015/09/22 职场文书
vue前端工程的搭建
2021/03/31 Vue.js
Python开发五子棋小游戏
2022/05/02 Python