04-贝叶斯概率

频率论和贝叶斯论

频率论

频率论的概率:事件A在独立重复试验中发生的频率趋于极限p,那么这个极限就是该事件的概率。

频率论观点:通过重复随机事件的发生的频率来考察概率。

贝叶斯论

贝叶斯(Bayesian)观点:量化描述了频率的不确定性

贝叶斯的观点:能够使用概率论的机制,描述模型参数 w 或模型选择的不确定性。

例如:盒子中的水果的例子,水果种类的确定,为选择红盒的概率提供了相关的信息。

  • 贝叶斯定理通过观测到的数据提供的证据,把先验概率转化为了后验概率。
  • 进行数量的推断,如:多项式曲线拟合中的参数 w ,可以采用同样的方法。

    贝叶斯定理的公式:

    p(w|D)=p(D|w)p(w)p(D)

    在观测数据之前,以先验概率 p(w) 的形式给出了,一些关于参数 w 的假设。观测到的数据 D=t1,...,tn 的影响,是通过条件概率 p(D|w) 来表达的

    可以根据观测到 D 后的后验概率 p(w|D) 来估计 w 的不确定性。

    似然函数

    贝叶斯定理右侧的量 p(D|w) 由观测到的数据集 D 来估计,可以被看成参数向量 w 的似然函数(likelihood function)。

    不同的参数向量 w 的情况下,观测到的数据集的可能性

    在贝叶斯和频率论观点中,似然函数 p(D|w) 都起着重要作用。然而,在这两种观点中它的使用方式有着本质的不同。

    • 频率论的观点中, w 被当作固定的参数,它的值是由某种形式的估计来确定的,这个估计误差是由可能的数据集 D 分布来确定的。
    • 贝叶斯观点下中,只有一个数据集 D (即实际观测到的数据集) ,参数的不确定性是通过 w 的概率分布来表示的。

    最大似然(maximum likelihood)

    最大似然(maximum likelihood)是频率论广泛使用的一种估计,其中 w 取使似然函数 p(D|w) 达到最大值的值,也就是使 w 的值等于使观察到的数据集出现的概率最大的值。

    似然函数的负对数被称为误差函数(error function)。因为负对数是一个单调递减的函数,最大化似然函数也就是最小化误差

    自助法(bootstrap)

    自助法(bootstrap)是频率论中一种决定误差的方法

    1. 创造多个数据集:假设我们的原始数据集包含 N 个数据点 X=x1,...,xN

      • 我们可以通过随机的从 X 中取 N 个数据来创建数据集 XB
      • 选取是可以重复的,所以有些 XX 中的点可能在 XB 中出现多次,而有些可能不出现。
      • 这样的过程可以重复 L 次,得到 L 个大小为 N 的通过对原数据集 X 采样得到的数据集。
      • 参数估计的统计精确度就可以通过考察不同的自助数据集之间的预测变异性来进行评估。
DNN-贝叶斯算法是一种基于神经网络和贝叶斯思想的分类算法,通过将神经网络中的权重和偏置看做是随机变量,并利用贝叶斯公式计算后验概率来进行分类。其代码实现主要分为两部分:网络结构搭建和后验概率计算。 网络结构搭建: 在网络结构搭建方面,可以使用Keras、PyTorch等深度学习框架来实现,这里以Keras为例介绍。首先需要定义一个包含输入层、隐藏层和输出层的神经网络模型,代码如下: ```python from keras.models import Sequential from keras.layers import Dense # 定义神经网络模型 model = Sequential() model.add(Dense(units=64, activation='relu', input_dim=input_dim)) model.add(Dense(units=num_classes, activation='softmax')) ``` 其中,input_dim表示输入数据的维度,num_classes表示类别数。这里定义了一个包含一个隐藏层的全连接神经网络模型,隐藏层包含64个神经元,激活函数为ReLU,输出层包含num_classes个神经元,激活函数为Softmax。 后验概率计算: 在后验概率计算方面,需要对权重和偏置进行先验分布的设定,并使用贝叶斯公式计算后验概率。这里以PyMC3库为例介绍如何实现。首先需要定义先验分布,代码如下: ```python import pymc3 as pm with pm.Model() as model: # 定义权重和偏置的先验分布 weights = [pm.Normal('w'+str(i), mu=0, sd=1, shape=(input_dim, 64)) for i in range(2)] biases = [pm.Normal('b'+str(i), mu=0, sd=1, shape=(64,)) for i in range(2)] ``` 其中,weights和biases分别表示权重和偏置的先验分布,使用Normal函数定义正态分布。mu表示均,sd表示标准差,shape表示分布形状。 然后,需要定义Likelihood函数,并使用贝叶斯公式计算后验概率,代码如下: ```python with model: # 定义Likelihood函数 nn_output = pm.Deterministic('nn_output', pm.math.softmax(pm.math.dot(X, weights) + biases)) y_obs = pm.Categorical('y_obs', p=nn_output, observed=y) # 使用NUTS采样器进行后验概率计算 trace = pm.sample(1000, tune=1000, chains=1) ``` 其中,nn_output表示神经网络的输出结果,使用Deterministic函数定义;y_obs表示观测,使用Categorical函数定义;p表示类别的概率分布。最后使用NUTS采样器进行后验概率计算,并得到trace结果。
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值