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 相关文章推荐
Python3实现连接SQLite数据库的方法
Aug 23 Python
Python中asyncore的用法实例
Sep 29 Python
python通过colorama模块在控制台输出彩色文字的方法
Mar 19 Python
Python中asyncio与aiohttp入门教程
Oct 16 Python
简单了解python单例模式的几种写法
Jul 01 Python
python获取依赖包和安装依赖包教程
Feb 13 Python
python字符串常用方法及文件简单读写的操作方法
Mar 04 Python
Selenium 滚动页面至元素可见的方法
Mar 18 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
May 10 Python
python和C++共享内存传输图像的示例
Oct 27 Python
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
Jun 11 Python
python百行代码实现汉服圈图片爬取
Nov 23 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
磨咖啡豆的密诀
2021/03/03 冲泡冲煮
PHP字符编码问题之GB2312 VS UTF-8解决方法
2011/06/23 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-3 代码组织和重用2
2011/07/03 PHP
php数字转汉字代码(算法)
2011/10/08 PHP
PHP删除HTMl标签的三种解决方法
2013/06/30 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
php计算数组相同值出现次数的代码(array_count_values)
2015/01/20 PHP
PHP解压ZIP文件到指定文件夹的方法
2016/11/17 PHP
Js切换功能的简单方法
2010/11/23 Javascript
js 判断图片是否加载完以及实现图片的预下载
2014/08/14 Javascript
Javascript仿新浪游戏频道鼠标悬停显示子菜单效果
2015/08/21 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
2015/11/02 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
2017/03/13 Javascript
vue2.0 循环遍历加载不同图片的方法
2018/03/06 Javascript
vue项目中vue-i18n和element-ui国际化开发实现过程
2018/04/25 Javascript
vue实现文字横向无缝走马灯组件效果的实例代码
2019/04/09 Javascript
js实现开关灯效果
2020/03/30 Javascript
Vue+Java+Base64实现条码解析的示例
2020/09/23 Javascript
[52:02]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第一场 11.27
2020/11/30 DOTA
python实现随机密码字典生成器示例
2014/04/09 Python
浅析Python多线程下的变量问题
2015/04/28 Python
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
浅析Python中yield关键词的作用与用法
2016/11/29 Python
利用pandas合并多个excel的方法示例
2019/10/10 Python
python区分不同数据类型的方法
2019/10/14 Python
python将三维数组展开成二维数组的实现
2019/11/30 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
2020/09/23 Python
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
顺丰快递Java软件工程师面试题
2015/07/31 面试题
《他得的红圈圈最多》教学反思
2014/04/24 职场文书
支行行长竞聘演讲稿
2014/05/15 职场文书
森林防火标语
2014/06/23 职场文书
2015新学期开学寄语
2015/02/26 职场文书
MySQL数据库安装方法与图形化管理工具介绍
2022/05/30 MySQL
python中使用redis用法详解
2022/12/24 Redis