当前位置: 首页 > news >正文

贝叶斯分类器详解

入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。​​​​​​​

目录

一、数学基础

1、贝叶斯决策论

(1)先验概率和后验概率

(2)贝叶斯定理

2、极大似然估计

(1)基本思路

(2)公式推导

(3)常见假设——正态分布

二、朴素贝叶斯分类器

1、符号设定

2、后验概率的计算

3、极大似然法求最合适的分布参数

4、常见假设——正态分布

5、拉普拉斯平滑

三、优缺点

1、优点

2、缺点

四、代码示例


一、数学基础

1、贝叶斯决策论

(1)先验概率和后验概率

先验概率:根据以往经验和分析得到的概率;

后验概率:事情已经发生,要求这件事情发生的原因是由某个因素引起的可能性的大小(即根据观察到的样本修正之后的概率值)。

(2)贝叶斯定理

用途:为了解决“逆概率”问题,它可以根据过去的数据来预测出概率,在有限的信息下,预测概率。

P\left(B_{i} \mid A\right)=\frac{P\left(B_{i}\right) P\left(A \mid B_{i}\right)}{P(A)}=\frac{P\left(B_{i}\right) P\left(A \mid B_{i}\right)}{\sum_{j=1}^{n} P\left(B_{j}\right) P\left(A \mid B_{j}\right)}

P(B):先验概率,即在不知道A事件的前提下,我们对B事件概率的一个主观判断。

P(A|B)/P(A):可能性函数,即调整因子,即新信息A带来的调整,使得其与先验概率相乘后得到的概率更接近真实概率。

比如说,我们现在有个特征,想知道出现这种特征的对象是这种类别的概率,即:

P(\text { category } \mid \text { features })=\frac{P(\text { features} \mid \text{category }) P(\text { category })}{P(\text { features })}

2、极大似然估计

(1)基本思路

首先假定数据具有某种确定的概率分布(所有的采样都是独立同分布的),但是其参数未知,然后基于训练样本对该概率分布的参数进行估计,得到最合适的参数。

(2)公式推导

D_{c}为训练集中第c类样本组合而成的集合;\theta_{c}为假设样本分布的某种概率分布的参数向量;x为D_{c}中的某一样本,则目标为:

P(D_{c} \mid \theta_{c})= \prod_{x\epsilon D_{c}}^{} P(x \mid \theta_{c})

找出合适的\theta_{c}使得上述式子能得到最大值(即找到合适的参数使得更多的样本满足这样的分布)。

但是上述式子容易造成下溢(突破最小极限),所以通常又引入对数似然

LL(\theta_{c}) = log(P(D_{c} \mid \theta_{c}))= \sum_{x\epsilon D_{c}}^{}log(P(x \mid \theta_{c}))

于是最终的目标式化为:argmax LL(\theta_{c})

(3)常见假设——正态分布

解得:(其中n为D_{c}的总数)

\mu^{*}=\bar{x}=\frac{1}{n} \sum_{i=1}^{n} x_{i} ; \sigma^{* 2}=\frac{1}{n} \sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)^{2}


二、朴素贝叶斯分类器

朴素贝叶斯分类器假设所有属性相互独立。

1、符号设定

设样本属性集合为x=\left\{x_{1}, x_{2}, \ldots, x_{m}\right\}( n 为属性数目),x_{i}为样本x在第i属性上的取值;

样本类别集合为\left\{y_{1}, y_{2}, \ldots, y_{m}\right\}

2、后验概率的计算

“所有属性相互独立”才有下式的第二步

P\left(y_{j} \mid x\right)=\frac{P\left(y_{j}\right) P\left(x \mid y_{i}\right)}{P(x)}=\frac{P\left(y_{j}\right) \prod_{i=1}^{n} P\left(x_{i} \mid y_{j}\right)}{ \operatorname{P}(x)}, j=1,2 \ldots, m

3、极大似然法求最合适的分布参数

因为对于所有类别来说P(x)都一样,所以在求最大值时无需考虑它的影响。

所以目标式化为:argmax(P\left(y_{j}\right) \prod_{i=1}^{n} P\left(x_{i} \mid y_{j}\right)), j=1,2 \ldots, m

4、常见假设——正态分布

即有

p\left(x_{i} \mid y_{j}\right)=\frac{1}{\sqrt{2 \pi} \sigma_{y_{j}, i}} \exp \left(-\frac{\left(x_{i}-\mu_{y_{j}, i}\right)^{2}}{2 \sigma_{y_{j}, i}^{2}}\right)

5、拉普拉斯平滑

为了避免其他属性携带的信息被训练集中未出现的属性抹去,在估计概率是通常进行平滑。

P(y_{j})=\frac{|D_{y_{j}}|+1}{|D|+N}


三、优缺点

1、优点

(1)简单,学习效率高

(2)分类过程中时空开销小

2、缺点

受假设变量间独立与假设分布情况的影响


四、代码示例

from sklearn import metrics
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn import datasets
import pandas as pd
from sklearn.metrics import classification_report

data = datasets.load_iris()
iris_target = data.target
iris_features = pd.DataFrame(data=data.data, columns=data.feature_names)
train_x, test_x, train_y, test_y = train_test_split(iris_features, iris_target, test_size=0.3)

clf = GaussianNB()
clf.fit(train_x, train_y)

y_predict = clf.predict(test_x)
accuracy = metrics.accuracy_score(test_y, y_predict)

print(accuracy)
print(classification_report(test_y, y_predict))

输出


欢迎大家在评论区批评指正,谢谢~ 

相关文章:

  • Python和PHP有什么区别
  • 精品基于Uniapp+SSM实现的Android的餐饮管理系统
  • Docker中安装Redis
  • 糖尿病患者怎样养成良好习惯
  • 学习笔记:基于GMM的语音转换
  • Git基本应用<二>:Git的分支管理
  • 电商系统中的掉单问题
  • CONV1D卷积神经网络运算过程(举例:n行3列➡n行6列)
  • 数据结构c语言版第二版(严蔚敏)第一章练习
  • python练习Ⅱ--函数
  • 3D多模态成像市场现状及未来发展趋势分析
  • vscode 1.71变化与关注点(多配置预设/旧合并器回归等)
  • SQL面试题之区间合并问题
  • Linux用户和权限之一
  • 回溯法就是学不会2 —— 括号生成问题
  • 【Leetcode】101. 对称二叉树
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • go语言学习初探(一)
  • JAVA多线程机制解析-volatilesynchronized
  • Laravel5.4 Queues队列学习
  • Magento 1.x 中文订单打印乱码
  • Rancher如何对接Ceph-RBD块存储
  • Redis 中的布隆过滤器
  • use Google search engine
  • Vue--数据传输
  • 安卓应用性能调试和优化经验分享
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • ------- 计算机网络基础
  • 精彩代码 vue.js
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 想使用 MongoDB ,你应该了解这8个方面!
  • Java性能优化之JVM GC(垃圾回收机制)
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #include到底该写在哪
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (分类)KNN算法- 参数调优
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (区间dp) (经典例题) 石子合并
  • (十一)图像的罗伯特梯度锐化
  • (转)详解PHP处理密码的几种方式
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .jks文件(JAVA KeyStore)
  • .net mvc部分视图
  • .Net 路由处理厉害了