贝叶斯定理

贝叶斯定理是通过对观测值概率分布的主观判断(即先验概率)进行修正的定理,在概率论中具有重要地位。

先验概率分布(边缘概率)是指基于主观判断而非样本分布的概率分布,后验概率(条件概率)是根据样本分布和未知参数的先验概率分布求得的条件概率分布。

贝叶斯公式:

P(A∩B) = P(A)*P(B|A) = P(B)*P(A|B)

变形得:

P(A|B)=P(B|A)*P(A)/P(B)

其中

P(A)是A的先验概率或边缘概率,称作"先验"是因为它不考虑B因素。

P(A|B)是已知B发生后A的条件概率,也称作A的后验概率。

P(B|A)是已知A发生后B的条件概率,也称作B的后验概率,这里称作似然度。

P(B)是B的先验概率或边缘概率,这里称作标准化常量。

P(B|A)/P(B)称作标准似然度。

朴素贝叶斯分类(Naive Bayes)

朴素贝叶斯分类器在估计类条件概率时假设属性之间条件独立。

首先定义

x = {a1,a2,...}为一个样本向量,a为一个特征属性

div = {d1 = [l1,u1],...} 特征属性的一个划分

class = {y1,y2,...}样本所属的类别

算法流程:

(1) 通过样本集中类别的分布,对每个类别计算先验概率p(y[i])

(2) 计算每个类别下每个特征属性划分的频率p(a[j] in d[k] | y[i])

(3) 计算每个样本的p(x|y[i])

p(x|y[i]) = p(a[1] in d | y[i]) * p(a[2] in d | y[i]) * ...

样本的所有特征属性已知,所以特征属性所属的区间d已知。

可以通过(2)确定p(a[k] in d | y[i])的值,从而求得p(x|y[i])。

(4) 由贝叶斯定理得:

p(y[i]|x) = ( p(x|y[i]) * p(y[i]) ) / p(x)

因为分母相同,只需计算分子。

p(y[i]|x)是观测样本属于分类y[i]的概率,找出最大概率对应的分类作为分类结果。

示例:

导入数据集

{a1 = 0, a2 = 0, C = 0} {a1 = 0, a2 = 0, C = 1}

{a1 = 0, a2 = 0, C = 0} {a1 = 0, a2 = 0, C = 1}

{a1 = 0, a2 = 0, C = 0} {a1 = 0, a2 = 0, C = 1}

{a1 = 1, a2 = 0, C = 0} {a1 = 0, a2 = 0, C = 1}

{a1 = 1, a2 = 0, C = 0} {a1 = 0, a2 = 0, C = 1}

{a1 = 1, a2 = 0, C = 0} {a1 = 1, a2 = 0, C = 1}

{a1 = 1, a2 = 1, C = 0} {a1 = 1, a2 = 0, C = 1}

{a1 = 1, a2 = 1, C = 0} {a1 = 1, a2 = 1, C = 1}

{a1 = 1, a2 = 1, C = 0} {a1 = 1, a2 = 1, C = 1}

{a1 = 1, a2 = 1, C = 0} {a1 = 1, a2 = 1, C = 1}

计算类别的先验概率

P(C = 0) = 0.5

P(C = 1) = 0.5

计算每个特征属性条件概率:

P(a1 = 0 | C = 0) = 0.3

P(a1 = 1 | C = 0) = 0.7

P(a2 = 0 | C = 0) = 0.4

P(a2 = 1 | C = 0) = 0.6

P(a1 = 0 | C = 1) = 0.5

P(a1 = 1 | C = 1) = 0.5

P(a2 = 0 | C = 1) = 0.7

P(a2 = 1 | C = 1) = 0.3

测试样本:

x = { a1 = 1, a2 = 2}

p(x | C = 0) = p(a1 = 1 | C = 0) * p( 2 = 2 | C = 0) = 0.3 * 0.6 = 0.18

p(x | C = 1) = p(a1 = 1 | C = 1) * p (a2 = 2 | C = 1) = 0.5 * 0.3 = 0.15

计算P(C | x) * p(x):

P(C = 0) * p(x | C = 1) = 0.5 * 0.18 = 0.09

P(C = 1) * p(x | C = 2) = 0.5 * 0.15 = 0.075

所以认为测试样本属于类型C1

Python实现

朴素贝叶斯分类器的训练过程为计算(1),(2)中的概率表,应用过程为计算(3),(4)并寻找最大值。

还是使用原来的接口进行类封装:

from numpy import *

class NaiveBayesClassifier(object):

def __init__(self):

self.dataMat = list()

self.labelMat = list()

self.pLabel1 = 0

self.p0Vec = list()

self.p1Vec = list()

def loadDataSet(self,filename):

fr = open(filename)

for line in fr.readlines():

lineArr = line.strip().split()

dataLine = list()

for i in lineArr:

dataLine.append(float(i))

label = dataLine.pop() # pop the last column referring to label

self.dataMat.append(dataLine)

self.labelMat.append(int(label))

def train(self):

dataNum = len(self.dataMat)

featureNum = len(self.dataMat[0])

self.pLabel1 = sum(self.labelMat)/float(dataNum)

p0Num = zeros(featureNum)

p1Num = zeros(featureNum)

p0Denom = 1.0

p1Denom = 1.0

for i in range(dataNum):

if self.labelMat[i] == 1:

p1Num += self.dataMat[i]

p1Denom += sum(self.dataMat[i])

else:

p0Num += self.dataMat[i]

p0Denom += sum(self.dataMat[i])

self.p0Vec = p0Num/p0Denom

self.p1Vec = p1Num/p1Denom

def classify(self, data):

p1 = reduce(lambda x, y: x * y, data * self.p1Vec) * self.pLabel1

p0 = reduce(lambda x, y: x * y, data * self.p0Vec) * (1.0 - self.pLabel1)

if p1 > p0:

return 1

else:

return 0

def test(self):

self.loadDataSet('testNB.txt')

self.train()

print(self.classify([1, 2]))

if __name__ == '__main__':

NB = NaiveBayesClassifier()

NB.test()

Matlab

Matlab的标准工具箱提供了对朴素贝叶斯分类器的支持:

trainData = [0 1; -1 0; 2 2; 3 3; -2 -1;-4.5 -4; 2 -1; -1 -3];

group = [1 1 -1 -1 1 1 -1 -1]';

model = fitcnb(trainData, group)

testData = [5 2;3 1;-4 -3];

predict(model, testData)

fitcnb用来训练模型,predict用来预测。

朴素贝叶斯分类器python_朴素贝叶斯分类器及Python实现相关推荐

  1. sklearn朴素贝叶斯分类器_python机器学习:方法链和朴素贝叶斯分类器

    今天我们在学习朴素贝叶斯分类器之前,我们先来总结下前面经常用到的内容,方法链:在scikit-learn中所有模型的fit方法返回的都是self.我们用一行代码初始化模型并拟合,对应代码如下:logr ...

  2. 朴素贝叶斯分类器NBC

    朴素贝叶斯分类器NBC 朴素贝叶斯算法是统计学的一种分类方法,利用概率统计知识进行分类.朴素贝叶斯一贝叶斯定理为基础,故统称为贝叶斯分类. ##贝叶斯流派 在提出贝叶斯方法之前,人们认为一件事发生的概 ...

  3. 机器学习(3)高斯判别分析朴素贝叶斯分类器

    判别模型与生成模型 判别模型 判别模型是对观测数据进行直接分类,常见的判别模型有逻辑回归和感知机算法等.此模型仅对数据进行分类,并不能具象化或者量化数据本身的分布状态,因此也无法根据分类生成可观测的图 ...

  4. 贝叶斯分类器_Sklearn 中的朴素贝叶斯分类器

    (给Python开发者加星标,提升Python技能) 作者:Martin Müller,翻译:github-sisibeloved https://github.com/xitu/gold-miner ...

  5. 【贝叶斯分类2】朴素贝叶斯分类器

    文章目录 1. 贝叶斯决策论回顾 1.1 分类原理 1.2 贝叶斯分类器 1.3 P(c|x) 1.4 计算公式 1.5 极大似然估计 2. 朴素贝叶斯分类器学习笔记 2.1 引言 2.2 知识卡片 ...

  6. 【贝叶斯分类3】半朴素贝叶斯分类器

    文章目录 1. 朴素贝叶斯分类器知识回顾 1.1 类别,特征 1.2 风险,概率 1.3 类条件概率 2. 半朴素贝叶斯分类器学习笔记 2.1 引言 2.2 知识卡片 2.3 半朴素贝叶斯分类器 2. ...

  7. 第九课.朴素贝叶斯分类器

    目录 朴素贝叶斯算法原理 朴素贝叶斯参数估计 极大似然估计 贝叶斯估计 朴素贝叶斯算法流程 实验:Numpy实现朴素贝叶斯分类器 朴素贝叶斯算法原理 若P(X)P(X)P(X)表示事件XXX发生的概率 ...

  8. 面试前抢救一下--朴素贝叶斯分类器

    写在最前 朴素贝叶斯分类器,实际上也是对人们常识做的一个算法的完善.其以一种更为精准的量化来判断分类,使用的方法是后验概率.本文从与决策树的比较出发,介绍先验概率和后验概率的关系,再详细介绍一下朴素贝 ...

  9. python机器学习库sklearn——朴素贝叶斯分类器

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 文档贝叶斯分类器的相关的知 ...

最新文章

  1. 惠普企业第三财季净利润23亿美元 同比增长914%
  2. NOIP2012 D2 T2借教室
  3. 蓝桥杯-逆序对(java)
  4. python培训的课时是多久_如何快速学习python,学习python的最短时间是多久?
  5. Python 教你自动发微博,每日一句英语
  6. windows下Emacs的安装与配置
  7. 密码必须至少为6个字符_1081 检查密码 (15分)
  8. nginx导致的session丢失的解决方法
  9. 【小技巧】33 个神经网络「炼丹」技巧
  10. 探讨VSTS联合MS PROJECT协同开发之三:比较篇
  11. C#连接oracle数据库提示ORA-12154: TNS: 无法解析指定的连接标识符
  12. 瑞昱rtl8197fs芯片怎么样_拆开外表看内在 篇二:设计精美,做工优秀却无自研芯片——荣耀路由器2拆解评测...
  13. DNS欺骗的艺术 | 域名劫持和网页挂马
  14. c语言 字符串转整型
  15. 2021-2027全球及中国油田钻机行业研究及十四五规划分析报告
  16. Access-Control-Allow-Origin跨域问题,使用Nginx配置来解决
  17. 2022研究生数学建模ABCDEF思路
  18. 两代 2011/2014 Mac Mini 硬盘SSD性能提升研究。(SSD固态硬盘研究)
  19. Mybatis|CURD|配置详解|注解开发|多点查询|动态sql|缓存
  20. TCP局域网服务器简易搭建(eps-01s)

热门文章

  1. messagedigest 图片加密_MessageDigest 加密和解密2
  2. 7价 半导体掺杂_天津大学封伟团队:新型半导体二维原子晶体锗硅烷材料的带隙调控...
  3. linux 复制分区文件,dd复制分区后目标分区的大小变成原分区了
  4. android h5使用缓存_Android SDK 的 H5 打通方案演进 | 数据采集
  5. Linux-C实现GPRS模块发送短信
  6. Linux C 算法——排序
  7. std::map的insert和下标[]访问
  8. Taro+react开发(16)--跳转拿参
  9. 前端学习(3259):js高级教程(3)typeof
  10. 前端学习(2964):路由的实现