朴素贝叶斯分类器python_朴素贝叶斯分类器及Python实现
贝叶斯定理
贝叶斯定理是通过对观测值概率分布的主观判断(即先验概率)进行修正的定理,在概率论中具有重要地位。
先验概率分布(边缘概率)是指基于主观判断而非样本分布的概率分布,后验概率(条件概率)是根据样本分布和未知参数的先验概率分布求得的条件概率分布。
贝叶斯公式:
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实现相关推荐
- sklearn朴素贝叶斯分类器_python机器学习:方法链和朴素贝叶斯分类器
今天我们在学习朴素贝叶斯分类器之前,我们先来总结下前面经常用到的内容,方法链:在scikit-learn中所有模型的fit方法返回的都是self.我们用一行代码初始化模型并拟合,对应代码如下:logr ...
- 朴素贝叶斯分类器NBC
朴素贝叶斯分类器NBC 朴素贝叶斯算法是统计学的一种分类方法,利用概率统计知识进行分类.朴素贝叶斯一贝叶斯定理为基础,故统称为贝叶斯分类. ##贝叶斯流派 在提出贝叶斯方法之前,人们认为一件事发生的概 ...
- 机器学习(3)高斯判别分析朴素贝叶斯分类器
判别模型与生成模型 判别模型 判别模型是对观测数据进行直接分类,常见的判别模型有逻辑回归和感知机算法等.此模型仅对数据进行分类,并不能具象化或者量化数据本身的分布状态,因此也无法根据分类生成可观测的图 ...
- 贝叶斯分类器_Sklearn 中的朴素贝叶斯分类器
(给Python开发者加星标,提升Python技能) 作者:Martin Müller,翻译:github-sisibeloved https://github.com/xitu/gold-miner ...
- 【贝叶斯分类2】朴素贝叶斯分类器
文章目录 1. 贝叶斯决策论回顾 1.1 分类原理 1.2 贝叶斯分类器 1.3 P(c|x) 1.4 计算公式 1.5 极大似然估计 2. 朴素贝叶斯分类器学习笔记 2.1 引言 2.2 知识卡片 ...
- 【贝叶斯分类3】半朴素贝叶斯分类器
文章目录 1. 朴素贝叶斯分类器知识回顾 1.1 类别,特征 1.2 风险,概率 1.3 类条件概率 2. 半朴素贝叶斯分类器学习笔记 2.1 引言 2.2 知识卡片 2.3 半朴素贝叶斯分类器 2. ...
- 第九课.朴素贝叶斯分类器
目录 朴素贝叶斯算法原理 朴素贝叶斯参数估计 极大似然估计 贝叶斯估计 朴素贝叶斯算法流程 实验:Numpy实现朴素贝叶斯分类器 朴素贝叶斯算法原理 若P(X)P(X)P(X)表示事件XXX发生的概率 ...
- 面试前抢救一下--朴素贝叶斯分类器
写在最前 朴素贝叶斯分类器,实际上也是对人们常识做的一个算法的完善.其以一种更为精准的量化来判断分类,使用的方法是后验概率.本文从与决策树的比较出发,介绍先验概率和后验概率的关系,再详细介绍一下朴素贝 ...
- python机器学习库sklearn——朴素贝叶斯分类器
分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 文档贝叶斯分类器的相关的知 ...
最新文章
- 惠普企业第三财季净利润23亿美元 同比增长914%
- NOIP2012 D2 T2借教室
- 蓝桥杯-逆序对(java)
- python培训的课时是多久_如何快速学习python,学习python的最短时间是多久?
- Python 教你自动发微博,每日一句英语
- windows下Emacs的安装与配置
- 密码必须至少为6个字符_1081 检查密码 (15分)
- nginx导致的session丢失的解决方法
- 【小技巧】33 个神经网络「炼丹」技巧
- 探讨VSTS联合MS PROJECT协同开发之三:比较篇
- C#连接oracle数据库提示ORA-12154: TNS: 无法解析指定的连接标识符
- 瑞昱rtl8197fs芯片怎么样_拆开外表看内在 篇二:设计精美,做工优秀却无自研芯片——荣耀路由器2拆解评测...
- DNS欺骗的艺术 | 域名劫持和网页挂马
- c语言 字符串转整型
- 2021-2027全球及中国油田钻机行业研究及十四五规划分析报告
- Access-Control-Allow-Origin跨域问题,使用Nginx配置来解决
- 2022研究生数学建模ABCDEF思路
- 两代 2011/2014 Mac Mini 硬盘SSD性能提升研究。(SSD固态硬盘研究)
- Mybatis|CURD|配置详解|注解开发|多点查询|动态sql|缓存
- TCP局域网服务器简易搭建(eps-01s)
热门文章
- messagedigest 图片加密_MessageDigest 加密和解密2
- 7价 半导体掺杂_天津大学封伟团队:新型半导体二维原子晶体锗硅烷材料的带隙调控...
- linux 复制分区文件,dd复制分区后目标分区的大小变成原分区了
- android h5使用缓存_Android SDK 的 H5 打通方案演进 | 数据采集
- Linux-C实现GPRS模块发送短信
- Linux C 算法——排序
- std::map的insert和下标[]访问
- Taro+react开发(16)--跳转拿参
- 前端学习(3259):js高级教程(3)typeof
- 前端学习(2964):路由的实现