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定时检查启动某个exe程序适合检测exe是否挂了
Jan 21 Python
使用Python实现博客上进行自动翻页
Aug 23 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
May 22 Python
详解安装mitmproxy以及遇到的坑和简单用法
Jan 21 Python
python+os根据文件名自动生成文本
Mar 21 Python
Python values()与itervalues()的用法详解
Nov 27 Python
python基于TCP实现的文件下载器功能案例
Dec 10 Python
tensorflow多维张量计算实例
Feb 11 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
Mar 08 Python
Python基于pyjnius库实现访问java类
Jul 31 Python
python中@contextmanager实例用法
Feb 07 Python
python 高阶函数简单介绍
Feb 19 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执行速度全攻略(下)
2006/10/09 PHP
php使用base64加密解密图片示例分享
2014/01/20 PHP
php单例模式实现方法分析
2015/03/14 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
fix-ie5.js扩展在IE5下不能使用的几个方法
2007/08/20 Javascript
extjs 学习笔记 四 带分页的grid
2009/10/20 Javascript
2010年最佳jQuery插件整理
2010/12/06 Javascript
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
实例说明为什么不要行内使用javascript
2014/04/18 Javascript
JavaScript中的数组操作介绍
2014/12/30 Javascript
动态加载jQuery的方法
2015/06/16 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
2017/06/08 Javascript
vue.js国际化 vue-i18n插件的使用详解
2017/07/07 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
深入浅析Vue.js计算属性和侦听器
2018/05/05 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
2018/06/01 Javascript
小程序实现悬浮搜索框
2019/07/12 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
2020/07/19 Javascript
Python 实现域名解析为ip的方法
2019/02/14 Python
python 利用pyttsx3文字转语音过程详解
2019/09/25 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
2020/04/14 Python
Python实现爬取网页中动态加载的数据
2020/08/17 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
python中子类与父类的关系基础知识点
2021/02/02 Python
YesStyle美国/全球:购买亚洲时装、美容化妆品和生活百货
2017/01/16 全球购物
Falconeri美国官网:由羊绒和羊毛制成的针织服装
2018/04/08 全球购物
利用指针变量实现队列的入队操作
2012/04/07 面试题
如何写好优秀的创业计划书
2014/01/30 职场文书
庆中秋节主题活动方案
2014/02/03 职场文书
教师个人自我鉴定
2014/02/08 职场文书
秋季运动会广播稿大全
2014/02/17 职场文书
学历公证委托书
2014/04/09 职场文书
2014年药剂科工作总结
2014/11/26 职场文书
党员干部学习十八届五中全会精神心得体会
2016/01/05 职场文书