【机器学习sklearn】高斯朴素贝叶斯 Gaussian naive bayes
贝叶斯Bayes - Thomas Bayes
- 前言
- 一、贝叶斯决策论(Bayesian decision theory)
- 二、实例:高斯朴素贝叶斯 Gaussian Naive Bayes (GaussianNB)
- 1.引入库
- 2.生成数据
- 3.高斯朴素贝叶斯模型
- 总结
前言
在介绍贝叶斯之前,我们先了解一下几个概率相关的定义:
- 条件概率(后验概率):事件A在另一个事件B已经发生的条件下发生概率,公式表示为P(A|B),读作“在B条件下A的概率”。
P(A∣B)=P(A∩B)P(B)P(A|B)=\frac{P(A \cap B)}{P(B)} P(A∣B)=P(B)P(A∩B) - 联合概率:表示两个事件同时发生的概率, P(AB)。
- 边缘概率(先验概率):是某个事件发生的概率, P(A)或P(B)。
贝叶斯定理公式
P(A∣B)=P(B∣A)P(A)P(B)P(A|B)=\frac{P(B|A)P(A)}{P(B)} P(A∣B)=P(B)P(B∣A)P(A)
一、贝叶斯决策论(Bayesian decision theory)
对于分类任务来说,在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记。
基于后验概率P(ci∣x)P(c_i|x)P(ci∣x)可获得将样本xxx分类为cic_ici所产生的期望损失(expected loss),即在样本xxx上的“条件风险”(conditional risk)。
R(ci∣x)=∑j=1NλijP(cj∣x)R(c_i|x)=\sum_{j=1}^N \lambda_{ij} P(c_j|x)R(ci∣x)=j=1∑NλijP(cj∣x)
决策论中将“期望损失”称为“风险risk”。λij\lambda_{ij}λij为误判损失。
贝叶斯判定准则(Bayes decision rule):为最小化总体风险,只需在每个样本上选择那个能使条件风险R(c∣x)R(c|x)R(c∣x)最小的类别标记,即
h∗(x)=argminc∈yR(c∣x)h^*(x)=\underset{c \in y} {arg \, min} R(c|x)h∗(x)=c∈yargminR(c∣x)
此时,h∗h^*h∗称为贝叶斯最优分类器(Bayes optimal classifier),与之对应的总体风险R(h∗)R(h^*)R(h∗)称为贝叶斯风险(Bayes risk)。
使用贝叶斯判断最小化决策风险,主要有两个策略:
(1)“判别式模型”(discriminative models);
(2)“生成式模型”(generative models)。
基于贝叶斯定理,则
P(c∣x)=P(x∣c)P(c)P(x)P(c|x)=\frac{P(x|c)P(c)}{P(x)} P(c∣x)=P(x)P(x∣c)P(c)换言之,
P(类别∣样本)=P(样本∣类别)P(类别)P(样本)P(类别|样本)=\frac{P(样本|类别)P(类别)}{P(样本)} P(类别∣样本)=P(样本)P(样本∣类别)P(类别)
其中,P(c)P(c)P(c)是类先验概率;P(x∣c)P(x|c)P(x∣c)是样本xxx相对于类标记c的类条件概率(class-conditional probability)或似然(likelihood);P(x)P(x)P(x)是用于归一化的证据因子(evidence factor)。
根据数据采样来估计概率分布参数的经典方法:
极大似然估计法(Maximum Likelihood Estimation, MLE),一种给定观察数据来评估模型参数的方法。利用已知的样本结果信息,反推最具有可能(最大概率)导致这些样本结果出现的模型参数值。
对于p(x∣θ)p(x|\theta)p(x∣θ),xxx表示样本数据,θ\thetaθ表示模型参数。
如果θ\thetaθ是已知的,xxx是变量,则该函数称为概率函数(probability function);
如果xxx是已知的,θ\thetaθ是变量,则该函数称为似然函数(likelihood function)。
令D={x1,x2,...,xN}D= \lbrace x_1,x_2,...,x_N \rbraceD={x1,x2,...,xN},则参数θ\thetaθ对数据集D的似然:
p(D∣θ)=∏i=1Np(xi∣θ)p(D|\theta)=\prod_{i=1}^N p(x_i|\theta) p(D∣θ)=i=1∏Np(xi∣θ)
对θ\thetaθ进行极大似然估计,就是去寻找能最大化似然p(x∣θ)p(x|\theta)p(x∣θ)的参数值θ^\hat{\theta}θ^。
对数似然(log-likelihood)函数,用来缓解“下溢”问题:
LL(θ)=logp(D∣θ)=∑i=1Nlogp(x∣θ)LL(\theta)=log\ p(D|\theta) = \sum_{i=1}^N log \; p(x| \theta)LL(θ)=log p(D∣θ)=i=1∑Nlogp(x∣θ)
则参数θ\thetaθ极大似然估计值θ^\hat{\theta}θ^为:
θ^=argmaxθLL(θ)\hat{\theta} = \underset{\theta} {arg\ max} \; LL(\theta)θ^=θarg maxLL(θ)
二、实例:高斯朴素贝叶斯 Gaussian Naive Bayes (GaussianNB)
在 sklearn 库中,基于贝叶斯定理的算法集中在 sklearn.naive_bayes 包中,根据对“似然度”计算方法的不同,将朴素贝叶斯大致分为三种:多项式朴素贝叶斯(MultinomialNB)、伯努利分布朴素贝叶斯(BernoulliNB)、高斯朴素贝叶斯(GaussianNB)。值得注意的是,朴素贝叶斯算法的实现是基于假设而来,在朴素贝叶斯看来,特征之间是相互独立、互不影响的。
高斯朴素贝叶斯适用于特征呈正态分布的,多项式贝叶斯适用于特征是多项式分布的,伯努利贝叶斯适用于二项分布。
class sklearn.naive_bayes.GaussianNB(*, priors=None, var_smoothing=1e-09)[source]
- priors:类的先验概率
- var_smoothing:为维持计算的稳定性,将所有特征中最大方差的部分添加到估计的方差中。(1e-09为默认值)
1.引入库
代码如下(示例):
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
# Seaborn提供了许多定制的主题和用于控制matplotlib图形外观的高级界面from sklearn.datasets import make_blobs # 产生聚类数据集
from sklearn.naive_bayes import GaussianNB # 导入高斯朴素贝叶斯模型
2.生成数据
代码如下(示例):
# 生成随机数据(X数据向量)
X,y = make_blobs(n_samples=100, n_features=2, centers=2, random_state=2, cluster_std=1.5)
# make_blobs:为聚类产生数据集
# n_samples:样本点数,n_features:数据的维度,centers:产生数据的中心点,默认值3
# cluster_std:数据集的标准差,浮点数或者浮点数序列,默认值1.0,random_state:随机种子
plt.scatter(X[:,0], X[:,1], c=y, s=50, cmap='RdBu') # s=size; c=color
plt.show()
结果如下:
3.高斯朴素贝叶斯模型
代码如下(示例):
# 高斯朴素贝叶斯 Gaussian naive bayes,适用于特征呈正态分布的情况
model = GaussianNB() # 定义模型
model.fit(X,y) # 训练模型
rng = np.random.RandomState(0) # 一个伪随机数生成器。伪随机数是用确定性的算法计算出来的似来自[0,1]均匀分布的随机数序列。
X_test = [-6, -14] + [14, 18] * rng.rand(2000, 2) # 测试向量集X
y_pred = model.predict(X_test) # 模型预测的分类标签
plt.scatter(X[:,0], X[:,1], c=y, s=50, cmap='RdBu')
lim = plt.axis() # 设置坐标轴
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred, s=20, cmap='RdBu', alpha=0.1) # 有透明度的散点图
plt.axis(lim)
plt.show()# 预测模型概率
# predict_proba()函数 返回的是对于预测为各个类别的概率
yprob = model.predict_proba(X_test)
prob = yprob[-8:].round(2)
print(prob)
结果如下:
总结
具体可以参考以下内容:
高斯朴素贝叶斯原理与实现
通俗理解贝叶斯定理
机器学习——贝叶斯算法
机器学习——极大似然估计
《机器学习》- 周志华
【机器学习sklearn】高斯朴素贝叶斯 Gaussian naive bayes相关推荐
- 垃圾邮件分类快速理解机器学习中的朴素贝叶斯(Naive Bayes)
贝叶斯方法是一个历史悠久,有着坚实的理论基础的方法,同时处理很多问题时直接而又高效,很多高级自然语言处理模型也可以从它演化而来.因此,学习贝叶斯方法,是研究自然语言处理问题的一个非常好的切入口. 其实 ...
- 朴素贝叶斯(Naive Bayes)分类和Gaussian naive Bayes
朴素贝叶斯(Naive Bayes) 参考资料:https://www.cnblogs.com/pinard/p/6069267.html 朴素贝叶斯最关键的就是 (强制认为每种指标都是独立的 ...
- python机器学习-朴素贝叶斯(Naive Bayes)模型建立及评估(完整代码+实现效果)
实现功能: python机器学习-朴素贝叶斯(Naive Bayes)模型建立及评估. 实现代码: # 导入需要的库 from warnings import simplefilter simplef ...
- 朴素贝叶斯(naive bayes)原理小结
朴素贝叶斯(naive bayes)原理小结 1. 朴素贝叶斯的学习 1.1 基本假设:条件独立性 1.2 朴素贝叶斯分类器 1.3 后验概率的含义 2. 参数估计 2.1 极大似然估计 2.2 贝叶 ...
- 朴素贝叶斯(Naive Bayes)(原理+Python实现)
朴素贝叶斯(Naive Bayes)(原理+Python实现) 创作背景 算法分类 生成类算法 判别类算法 区别 知识补充 朴素贝叶斯算法 举个栗子 求解思路 求解过程(数学计算) 代码实现 自己实现 ...
- 朴素贝叶斯(naive bayes)分类
1. 概念回顾 1.1 条件概率公式 条件概率是指在事件B发生的条件下,事件A发生的概率.条件概率表示为P(A∣B)P(A|B)P(A∣B),读作"A在B发生的条件下发生的概率". ...
- 朴素贝叶斯(Naive Bayes):鸢尾花分类项目(不调库,手工推)
一.数据来源 1.数据来源:kaggle 2.数据样式 通过对数据"萼片.花瓣的长度.宽度(sepal_length.sepal_width.petal_length.petal_width ...
- 朴素贝叶斯(Naive Bayes)和校正曲线(Calibration Curve)
算法回顾 图片来源:https://medium.com/machine-learning-101/chapter-1-supervised-learning-and-naive-bayes-clas ...
- Spark MLlib 源码学习---朴素贝叶斯模型(Naive Bayes)
朴素贝叶斯是机器学习中比较常用的一种模型,尤其在文本分类的问题上是比较常用的baseline.朴素贝叶斯本身训练速度快,具有可并行化程度高,可解释性好的优点,但由于其对特征之间的独立性假设不是很符合某 ...
最新文章
- python打开文件并读取内容-python怎么打开文件读取数据
- Synchronized和Lock有什么区别
- 用python实现星期的转换_在Python中将秒转换为周-天-小时-分钟-秒
- 【BZOJ3530】数数(AC自动机,动态规划)
- kubeadm部署k8s1.9高可用集群--1集群概述
- 持久化存储技术之本地存储
- Windows移动热点服务
- Rexroth力士乐工控机触摸屏维修SYSTEM200概述
- matlab神经网络训练方法,matlab神经网络训练图
- 学术论文写作规范性的要点-I 中文学术论文写作规划
- 最新可用ip地址查询接口
- 树莓派linux下gpio驱动,树莓派官方自带gpio驱动bcm2708_gpio.c原理分析 linux gpio架构 gpio子系统...
- Vuze(AKA Azureus) 4.5 发布
- ristretto255 point压缩和解压缩算法(2)——extended坐标系下
- Ethernet协议
- 2018回顾录——花信之年
- 基于HVS 的结构相似性的视频质量评价
- 业务结构单一,天润云能借IPO说出好故事吗?
- Django7-2.模板系统常用知识点(2)
- 软件测试初学者,手把手教你如何编写一份高效好用的测试用例