700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【机器学习sklearn】高斯朴素贝叶斯 Gaussian naive bayes

【机器学习sklearn】高斯朴素贝叶斯 Gaussian naive bayes

时间:2018-10-08 20:46:31

相关推荐

【机器学习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​λij​P(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∈yargmin​R(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∏N​p(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(θ)=logp(D∣θ)=i=1∑N​logp(x∣θ)

则参数θ\thetaθ极大似然估计值θ^\hat{\theta}θ^为:

θ^=argmaxθLL(θ)\hat{\theta} = \underset{\theta} {arg\ max} \; LL(\theta)θ^=θargmax​LL(θ)

二、实例:高斯朴素贝叶斯 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 npimport matplotlib.pyplot as pltimport 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=colorplt.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) # 测试向量集Xy_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)

结果如下:


总结

具体可以参考以下内容:

高斯朴素贝叶斯原理与实现

通俗理解贝叶斯定理

机器学习——贝叶斯算法

机器学习——极大似然估计

《机器学习》- 周志华

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。