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语言的12个基础知识点小结
Jul 10 Python
Python实现多行注释的另类方法
Aug 22 Python
python实现字典(dict)和字符串(string)的相互转换方法
Mar 01 Python
Python实现两个list对应元素相减操作示例
Jun 09 Python
Python使用openpyxl读写excel文件的方法
Jun 30 Python
python+selenium实现自动化百度搜索关键词
Jun 03 Python
Python爬虫动态ip代理防止被封的方法
Jul 07 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
Aug 04 Python
python turtle 绘制太极图的实例
Dec 18 Python
Python openpyxl模块原理及用法解析
Jan 19 Python
python正则表达式实例代码
Mar 03 Python
基于python代码批量处理图片resize
Jun 04 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
Protoss魔法科技
2020/03/14 星际争霸
PHP安装攻略:常见问题解答(三)
2006/10/09 PHP
CodeIgniter php mvc框架 中国网站
2008/05/26 PHP
php mb_substr()函数截取中文字符串应用示例
2014/07/29 PHP
php中ob_get_length缓冲与获取缓冲长度实例
2014/11/20 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
JavaScript 页面坐标相关知识整理
2010/01/09 Javascript
JavaScript中的Math.LN2属性用法详解
2015/06/12 Javascript
js点击文本框后才加载验证码实例代码
2015/10/20 Javascript
jQuery的each循环用法简单示例
2016/06/12 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
2016/08/05 Javascript
js转换对象为xml
2017/02/17 Javascript
Vue.directive使用注意(小结)
2018/08/31 Javascript
解决Vue+Element ui开发中碰到的IE问题
2018/09/03 Javascript
微信上传视频文件提示(推荐)
2018/11/22 Javascript
JavaScript常见鼠标事件与用法分析
2019/01/03 Javascript
vue使用Proxy实现双向绑定的方法示例
2019/03/20 Javascript
Vuex的actions属性的具体使用
2019/04/14 Javascript
浅谈React中组件逻辑复用的那些事儿
2020/05/21 Javascript
如何搜索查找并解决Django相关的问题
2014/06/30 Python
Python构建XML树结构的方法示例
2017/06/30 Python
python3利用Dlib19.7实现人脸68个特征点标定
2018/02/26 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
Python使用Tkinter实现滚动抽奖器效果
2020/01/06 Python
python中翻译功能translate模块实现方法
2020/12/17 Python
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
Prototype是怎么扩展DOM的
2014/10/01 面试题
三分钟演讲稿事例
2014/03/03 职场文书
学生安全责任书
2014/04/15 职场文书
超市工作总结范文2014
2014/12/19 职场文书
幼儿园安全教育月活动总结
2015/05/08 职场文书
入党转正介绍人意见
2015/06/03 职场文书
2016年猴年新春致辞
2015/08/01 职场文书
军事理论课感想
2015/08/11 职场文书
MySQL 表空间碎片的概念及相关问题解决
2021/05/07 MySQL