[ML] Bayesian Linear Regression

热身预览


1.1.10. Bayesian Regressionhtml

 

From: scikit-learn 线性回归算法库小结算法

17. BayesianRidge

使用场景:网络

若是咱们的数据有不少缺失或者矛盾的病态数据,能够考虑BayesianRidge类,它对病态数据鲁棒性很高,也不用交叉验证选择超参数。可是极大化似然函数的推断过程比较耗时,通常状况不推荐使用。框架

 

18. ARDRegression

ARDRegression和BayesianRidge很像,惟一的区别在于对回归系θ的先验分布假设机器学习

    • BayesianRidge假设θ的先验分布规律为球形正态分布,BayesianRidge中球形分布的θ对应的λ只有一个。
    • ARDRegression丢掉了BayesianRidge中的球形高斯的假设,采用与坐标轴平行的椭圆形高斯分布。这样对应的超参数λ有n个维度,各不相同。

ARDRegression也是经过最大化边际似然函数来估计超参数α和λ向量,以及回归系数θ。函数

使用场景:工具

若是咱们的数据有不少缺失或者矛盾的病态数据,能够考虑BayesianRidge类,若是发现拟合很差,能够换ARDRegression试一试。post

由于ARDRegression对回归系数先验分布的假设没有BayesianRidge严格,某些时候会比BayesianRidge产生更好的后验结果。学习

 

 

 

贝叶斯线性拟合


1、解题思路

总感受 贝叶斯回归能更好的“拟合”,真的嚒?url

整体思路依然是:(1) 找到最大似然 (2) 经过EM找到渐近解,或者经过“增量学习”进行“training"。

Ref: 贝叶斯线性回归(Bayesian Linear Regression)

 

2、贝叶斯估计的增量学习(在线学习方法)

详见连接:贝叶斯线性回归(Bayesian Linear Regression)

增量方法:基于贝叶斯推断的回归模型(代码篇): 机器学习你会遇到的“坑” 

贝叶斯线性估计,它的基本思想是经过增量学习,将上一个数据点的后验几率做为下一次的先验几率,并使用所有的数据点经过极大后验估计来估计参数值。

 

3、贝叶斯线性估计示范

print(__doc__)

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
import timefrom sklearn.linear_model import BayesianRidge, LinearRegression

X = [[1,1], [1,2], [1,3], [1,4], [1,5], [1,6]]
y = [25, 36, 45, 54, 72, 83]

print(X)
print(y)

###############################################################################
# 使用贝叶斯脊回归拟合数据
clf = BayesianRidge(compute_score=True)
clf.fit(X, y)

print(clf.predict([[1,7]]))
print(clf.coef_)

X_test=[[1, 1],  [1, 2],  [1, 3],  [1, 4],  [1, 5],  [1, 6], [1, 7]]
y_pred = clf.predict(X_test)
# Plot outputs plt.scatter([1,2,3,4,5,6], y, color='black') plt.plot([1,2,3,4,5,6,7], y_pred, color='blue', linewidth=3) plt.xticks(()) plt.yticks(())plt.show()

 

 

 

增量在线学习


 

1、参数估计方法论

经常使用的参数估计方法有:极大似然估计 ----> 最大后验估计 ----> 贝叶斯估计 ----> 最大熵估计 ----> 混合模型估计

他们之间是有递进关系的,想要理解后一个参数估计方法,最好对前一个参数估计有足够的理解。

极大似然估计

θ看作是未知的参数

最大后验估计

参数θ 当作一个随机变量

贝叶斯估计

参数θ的后验分布的指望

 

2、增量学习过程

这个式子也算是 “高维线性可分” 的最简单的版本。

重点理解第二行的由来,先认可一个重要的认知:

    • x, y是样本,天然是肯定的数据。
    • w是参数,咱们理解为是“随机变量”,是须要估计的东西;先假设是标准的二维高斯分布。

  

(1)第一个样本点的坐标大概为:(0.9,0.1) --> 获得以下式子,也就是“第二行左图”。【获得一个样本,对参数作出调整】

(2)将第二行的第左边那幅图和第一行的中间那幅图相乘,就能够获得第二行中间那幅图。【这是参数的分布,方差在逐渐减少】

(3)第二行最右边那幅图就是从第二行中间那幅图中随机抽取一些点(w0,w1),并以(w0,w1)为参数,画出来的直线。【这些红色直线,以后会收敛】

 

优势: 

1. 贝叶斯回归对数据有自适应能力,能够重复的利用实验数据,并防止过拟合。
2. 贝叶斯回归能够在估计过程当中引入正则项。


缺点: 

1. 贝叶斯回归的学习过程开销太大。

 

 

 

增量EM算法

Ref: EM算法及其改进

EM的缺点:收敛缓慢;一次迭代遍历全部样本,太费事儿。

 

 

online learning的一种,相似"反向传播算法”的效果。

这跟sampling估产的原理有啥区别? 难道没有上述缺点?

 

 

 

MCMC采样估参

Ref: [Bayes] Parameter estimation by Sampling

Ref: 贝叶斯网与吉布斯采样学习心得(之零,兼引言)

 

贝叶斯网络 (Baysian Network)

贝叶斯网络(Baysian Network)是统计推断中的重要工具。简单地说,贝叶斯网就是对于由一系列待估计量做为自变量的联合分布的一种描述。即贝叶斯网描述了以下的后验分 [公式]


其中[公式]表明一个待估计变量构成的向量,[公式]为一系列的已知测量量。原则上讲,若是咱们可以写出[公式]的具体表达式,咱们就能给出关于[公式]的统计特征的描述,从而直接求解这一统计推断问题。

若是必要,在贝叶斯的框架下,咱们能够将这一后验几率进一步展开为:

 [公式]  ----> 即先验几率[公式]和似然函数[公式]的乘积。

 

问题来了

若是咱们有后验几率的具体表达式,原则上咱们能够对待估计变量[公式]的统计特征进行直接估计。然而现实并不那么美好!

 

若是[公式]的维度很高,并且后验几率形式特别复杂,每每致使在对[公式]的某个份量求解边缘分布时的积分没法简单直接求得。

例如,求某个份量的指望就必然涉及对后验几率的积分

蒙特卡罗积分法对于高维度的积分问题而言是一种可行的解决方案,基于这一原理,咱们就能用基于抽样的方法来解决这一问题(这里的抽样是指按照给定的联合分布产生一个符合该分布的样本,而不是指从一个整体中抽取出一个样本)。
若是咱们可以对后验几率进行采样,即根据后验几率得到一系列 [公式]的实现样本,咱们就可以对这个样本进行直接的统计,从而得到对[公式]的估计。

 

那么如何完成对[公式]的采样呢?这时候咱们便要请出吉布斯(Gibbs)采样算法了。

吉布斯采样算法的基本思想很直接,就是依次对[公式]的各个份量进行采样,在采样某一个份量的时候,认为其余份量固定。这就将多维采样问题转换为了对一维分布进行采样,而这可以用拒绝算法(或者自适应拒绝算法)、切片法等等解决。

 

改善采样效率

原本故事到这里已经能够结束,从而没有贝叶斯网什么事情了,可是实践中,我发现(固然不多是我首先发 现的),直接对后验几率进行吉布斯采样,虽然能凑合着用,可是效率有时候堪忧,贝叶斯网的出现能够显著改善采样的效率。

若是咱们可以把后验几率进行分解, 把各个参量之间的关系捋顺,在对某一具体份量进行采集的时候,只须要计算和它相关的量,就能大大下降计算复杂性,从而提升效率。

End.

相关文章
相关标签/搜索