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下利用OpenCV来旋转图像的教程
Apr 16 Python
Python最基本的输入输出详解
Apr 25 Python
Python编程中运用闭包时所需要注意的一些地方
May 02 Python
教你用Type Hint提高Python程序开发效率
Aug 08 Python
详解python多线程、锁、event事件机制的简单使用
Apr 27 Python
解决已经安装requests,却依然提示No module named requests问题
May 18 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
May 21 Python
使用Flask集成bootstrap的方法
Jul 24 Python
Python利用sqlacodegen自动生成ORM实体类示例
Jun 04 Python
Django如何自定义model创建数据库索引的顺序
Jun 20 Python
Python爬虫使用代理IP的实现
Oct 27 Python
基于python制作简易版学生信息管理系统
Apr 20 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
Mysql中limit的用法方法详解与注意事项
2008/04/19 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
2014/10/15 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
php回调函数处理数组操作示例
2020/04/13 PHP
PHP 构造函数和析构函数原理与用法分析
2020/04/21 PHP
JavaScript中的16进制字符(改进)
2011/11/21 Javascript
javascript实现2048游戏示例
2014/05/04 Javascript
Jquery Post处理后不进入回调的原因及解决方法
2014/07/15 Javascript
php,js,css字符串截取的办法集锦
2014/09/26 Javascript
javascript根据时间生成m位随机数最大13位
2014/10/30 Javascript
JavaScript包装对象使用详解
2015/07/09 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
javascript函数命名的三种方式及区别介绍
2016/03/22 Javascript
AngularJS实现一次监听多个值发生的变化
2016/08/31 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
2017/05/09 Javascript
Vue-router 类似Vuex实现组件化开发的示例
2017/09/15 Javascript
JS 实现微信扫一扫功能
2018/09/14 Javascript
微信小程序绘制图片发送朋友圈
2019/07/25 Javascript
jQuery实现简单评论功能
2020/08/19 jQuery
[01:25]DOTA2自定义游戏灵园鬼域等你踏足
2015/10/30 DOTA
python中的__slots__使用示例
2015/02/26 Python
基于python实现简单日历
2018/07/28 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
2020/10/04 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
css3动画事件—webkitAnimationEnd与计时器time事件
2013/01/31 HTML / CSS
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
终端业务员岗位职责
2013/11/27 职场文书
行政人事经理职位说明书
2014/03/05 职场文书
基层干部2014全国两会学习心得体会
2014/03/10 职场文书
个人求职信范文
2014/05/24 职场文书
七年级作文之环保作文
2019/10/17 职场文书
iPhone13 Pro外观确定,升级4800万镜头,4月20日发新品
2021/04/15 数码科技
配置nginx 重定向到系统维护页面
2021/06/08 Servers
Spring Boot 启动、停止、重启、状态脚本
2021/06/26 Java/Android