1.1.10. Bayesian Regressionhtml
From: scikit-learn 线性回归算法库小结算法
使用场景:网络
若是咱们的数据有不少缺失或者矛盾的病态数据,能够考虑BayesianRidge类,它对病态数据鲁棒性很高,也不用交叉验证选择超参数。可是极大化似然函数的推断过程比较耗时,通常状况不推荐使用。框架
ARDRegression和BayesianRidge很像,惟一的区别在于对回归系θ的先验分布假设。机器学习
ARDRegression也是经过最大化边际似然函数来估计超参数α和λ向量,以及回归系数θ。函数
使用场景:工具
若是咱们的数据有不少缺失或者矛盾的病态数据,能够考虑BayesianRidge类,若是发现拟合很差,能够换ARDRegression试一试。post
由于ARDRegression对回归系数先验分布的假设没有BayesianRidge严格,某些时候会比BayesianRidge产生更好的后验结果。学习
总感受 贝叶斯回归能更好的“拟合”,真的嚒?url
整体思路依然是:(1) 找到最大似然 (2) 经过EM找到渐近解,或者经过“增量学习”进行“training"。
Ref: 贝叶斯线性回归(Bayesian Linear Regression)
详见连接:贝叶斯线性回归(Bayesian Linear Regression)
增量方法:基于贝叶斯推断的回归模型(代码篇): 机器学习你会遇到的“坑”
贝叶斯线性估计,它的基本思想是经过增量学习,将上一个数据点的后验几率做为下一次的先验几率,并使用所有的数据点经过极大后验估计来估计参数值。
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)第一个样本点的坐标大概为:(0.9,0.1) --> 获得以下式子,也就是“第二行左图”。【获得一个样本,对参数作出调整】
(2)将第二行的第左边那幅图和第一行的中间那幅图相乘,就能够获得第二行中间那幅图。【这是参数的分布,方差在逐渐减少】
(3)第二行最右边那幅图就是从第二行中间那幅图中随机抽取一些点(w0,w1),并以(w0,w1)为参数,画出来的直线。【这些红色直线,以后会收敛】
优势:
1. 贝叶斯回归对数据有自适应能力,能够重复的利用实验数据,并防止过拟合。
2. 贝叶斯回归能够在估计过程当中引入正则项。
缺点:
1. 贝叶斯回归的学习过程开销太大。
Ref: EM算法及其改进
EM的缺点:收敛缓慢;一次迭代遍历全部样本,太费事儿。
online learning的一种,相似"反向传播算法”的效果。
这跟sampling估产的原理有啥区别? 难道没有上述缺点?
Ref: [Bayes] Parameter estimation by Sampling
贝叶斯网络(Baysian Network)是统计推断中的重要工具。简单地说,贝叶斯网就是对于由一系列待估计量做为自变量的联合分布的一种描述。即贝叶斯网描述了以下的后验分
其中表明一个待估计变量构成的向量,
为一系列的已知测量量。原则上讲,若是咱们可以写出
的具体表达式,咱们就能给出关于
的统计特征的描述,从而直接求解这一统计推断问题。
若是必要,在贝叶斯的框架下,咱们能够将这一后验几率进一步展开为:
----> 即先验几率
和似然函数
的乘积。
若是咱们有后验几率的具体表达式,原则上咱们能够对待估计变量的统计特征进行直接估计。然而现实并不那么美好!
若是的维度很高,并且后验几率形式特别复杂,每每致使在对
的某个份量求解边缘分布时的积分没法简单直接求得。
例如,求某个份量的指望就必然涉及对后验几率的积分。
蒙特卡罗积分法对于高维度的积分问题而言是一种可行的解决方案,基于这一原理,咱们就能用基于抽样的方法来解决这一问题(这里的抽样是指按照给定的联合分布产生一个符合该分布的样本,而不是指从一个整体中抽取出一个样本)。
若是咱们可以对后验几率进行采样,即根据后验几率得到一系列 的实现样本,咱们就可以对这个样本进行直接的统计,从而得到对
的估计。
那么如何完成对的采样呢?这时候咱们便要请出吉布斯(Gibbs)采样算法了。
吉布斯采样算法的基本思想很直接,就是依次对的各个份量进行采样,在采样某一个份量的时候,认为其余份量固定。这就将多维采样问题转换为了对一维分布进行采样,而这可以用拒绝算法(或者自适应拒绝算法)、切片法等等解决。
原本故事到这里已经能够结束,从而没有贝叶斯网什么事情了,可是实践中,我发现(固然不多是我首先发 现的),直接对后验几率进行吉布斯采样,虽然能凑合着用,可是效率有时候堪忧,贝叶斯网的出现能够显著改善采样的效率。
若是咱们可以把后验几率进行分解, 把各个参量之间的关系捋顺,在对某一具体份量进行采集的时候,只须要计算和它相关的量,就能大大下降计算复杂性,从而提升效率。
End.