机器学习算法-朴素贝叶斯
来源:互联网 发布:达克赛德vs灭霸 知乎 编辑:程序博客网 时间:2024/05/21 08:59
贝叶斯(Thomas Bayes) ,英国数学家。约1701年出生于伦敦,做过神甫。1742年成为英国皇家学会会员。1761年4月7日逝世。贝叶斯在数学方面主要研究概率论,他首先将归纳推理法用于概率论基础理论,并创立了贝叶斯统计理论,对统计决策函数、统计推断、统计的估算等做出了卓越的贡献。学过概率论的同学一定对贝叶斯耳熟能详,并且被其创造的贝叶斯定理深深折服。尽管书本上是以数学公式对外展现,并搭配详尽的理论证明,但其原理毋需数字也可明了:如果你看到一个人总是做一些好事,则那个人多半会是一个好人。这就是说,当你不能准确知悉一个事物的本质时,你可以依靠与事物特定本质相关的事件出现的多少去判断其本质属性的概率。 用数学语言表达就是:支持某项属性的事件发生得愈多,则该属性成立的可能性就愈大。
贝叶斯定理特别好用,但并不复杂,它解决了生活中经常碰到的问题:已知某条件下的概率,如何得到两条件交换后的概率。贝叶斯分类法基于贝叶斯定理,是统计学分类方法,它可以基于当前条件预测样本的类隶属关系概率,如一个给定元组属于一个特定类的概率。朴素贝叶斯分类法假定一个属性值在给定类上的概率独立于其他属性的值,这一假定称为类条件独立性。
一、基本原理
设
二、算法步骤
接下来详细介绍一下朴素贝叶斯分类的工作过程,具体如下所示:
1. 每个数据样本用一个
2. 假定有
3. 由于
4. 给定具有许多属性的数据集,计算
其中概率
如果
其中
5. 对未知样本
三、算法举例
数据样本用属性age,income,student和credit_rating描述。类标号属性buys_computer具有两个不同值(即{yes,no})。设
(1) 为了正确分类样本
P(buys_computer=”yes”)=9/14=0.643,
P(buys_computer=”no”)=5/14=0.357。
(2) 为得到
P(age<=30|buys_computer=”yes”)=2/9=0.222,
P(age<=30|buys_computer=”no”)=3/5=0.600,
P(income=”medium”|buys_computer=”yes”)=4/9=0.444,
P(income=”medium”|buys_computer=”no”)=2/5=0.400,
P(student=”yes”|buys_computer=”yes” )=6/9=0.677,
P(student=”yes”|buys_computer=”no”)=1/5=0.200,
P(credit_rating=”fair”|buys_computer=”yes”)=6/9=0.667,
P(credit_rating=”fair”|buys_computer=”no”)=2/5=0.400。
(3) 假设条件独立性,使用以上概率,我们得到:
P(
P(
P(
P(
因此,对于样本
四、算法的优缺点
1. 优点:算法基于贝叶斯法则,相对容易构建和理解。并且判断效率较快,能比许多其他分类算法更快地预测类。对于相互独立假设不成立的训练样本集,一般也有较好的效果。使用小数据集也可以容易地训练数据。
2. 缺点:偶尔会遇见”零条件概率问题”:如果给定没有出现过的类和特征,则该类别的条件概率估计将出现为0。这会影响到后验概率的计算结果,使分类产生偏差。有几个样本校正技术可以解决这个问题,如“拉普拉斯校正”。另外是它的特征之间独立的假设非常强,在现实生活中几乎不可能找到这样的数据集。
五、算法实战-Python语言
# -*- coding: utf-8 -*-from sklearn import datasetsfrom sklearn.naive_bayes import GaussianNBfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import confusion_matrixiris = datasets.load_iris()X = iris.datay = iris.target# 为了看模型在没有见过数据集上的表现,随机拿出数据集中30%的部分做测试X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)gnb = GaussianNB().fit(X_train, y_train)y_pred = gnb.predict(X_test)print "Number of mislabeled points out of a total %d points : %d" % (X_test.shape[0],(y_test != y_pred).sum())print confusion_matrix(y_test,y_pred)newx = [[4.5,3.0,2.0,3.6]]newy_pred = gnb.predict(newx)print "The predictive output of newx is %d." % newy_pred
参考资料
- http://blog.csdn.net/szuodao/article/details/51743501#朴素贝叶斯nb的优点 不同分类算法的优缺点是什么?
- https://baike.baidu.com/item/贝叶斯公式/9683982 贝叶斯公式
- 算法步骤及案例参考一份PPT,因时间久远,无法确定链接。在此对作者表示感谢。
- 机器学习算法-朴素贝叶斯
- 机器学习:朴素贝叶斯算法
- 机器学习--朴素贝叶斯算法
- 机器学习算法-朴素贝叶斯
- 机器学习算法:朴素贝叶斯
- 【机器学习算法】 朴素贝叶斯
- 朴素贝叶斯算法--机器学习
- 机器学习算法之朴素贝叶斯算法
- 机器学习算法之朴素贝叶斯算法
- 机器学习经典算法3-朴素贝叶斯
- 机器学习_算法_朴素贝叶斯
- 机器学习算法-深入探讨朴素贝叶斯
- 机器学习算法-朴素贝叶斯实战
- 机器学习实战-朴素贝叶斯算法
- 机器学习--朴素贝叶斯算法案例
- 机器学习算法-朴素贝叶斯Python实现
- 机器学习之实战朴素贝叶斯算法
- 机器学习之实战朴素贝叶斯算法
- 【Unity】UGUI Image组件检视面板编辑器扩展(ImageEditor类)
- 什么是ESR
- rsync命令 远程数据同步工具
- 第三周——项目三—求集合并集
- QMainWindow
- 机器学习算法-朴素贝叶斯
- SQL SELECT 语句
- java点餐系统
- codevs1217 luogu1083 借教室
- 数据库SQL语句:查询一张表中某字段重复的数据
- 关于BigDecimal类的pom.xml中jar依赖
- 解决android studio的Android Device Monitor(DDMS)里的File Explorer不显示目录树
- 1011. A+B和C (15)
- 八皇后编程问题