贝叶斯线性回归算法简介
频率主义线性回归概述
线性回归的频率主义观点可能你已经学过了:该模型假定因变量(y)是权重乘以一组自变量(x)的线性组合。完整的公式还包含一个误差项以解释随机采样噪声。如有两个自变量时,方程为:
![](https://i-blog.csdnimg.cn/direct/53895cb1d9cb420689fc3f25f30a45f2.png)
模型中,y是因变量,β是权重(称为模型参数),x是自变量的值,ε是表示随机采样噪声的误差项或变量的影响。
线性回归是一个简单的模型,它可以很容易解释:是截距项,其他权重β表示增加自变量对因变量的影响。 例如,如果是1.2,那么对于中的每个单位增加,响应将增加1.2。
我们可以使用矩阵方程将线性模型推广到任意数量的预测变量。 在预测矩阵中添加一个常数项1以解释截距,我们可以将矩阵公式写为:
![](https://i-blog.csdnimg.cn/direct/535def62ef2948038a502aa000db0200.png)
从训练数据中学习线性模型的目标是找到最能解释数据的系数β。 在频率主义线性回归中,最好的解释是采用残差平方和(RSS)的系数β。 RSS是已知值(y)和预测模型输出之间的差值的总和(ŷ,表示估计的明显的y-hat)。 残差平方和是模型参数的函数:
![](https://i-blog.csdnimg.cn/direct/e1bbb6df5a8546f4bca5bf2aef1a863c.png)
总和被用于训练集中的N个数据点。 我们在这里不会详细讨论这个细节,但是这个方程对于模型参数β有封闭解,可以使误差最小化。 这被称为β的最大似然估计,因为它是给定输入X和输出y的最可能的值。 以矩阵形式表示的封闭形式解为:
![](https://i-blog.csdnimg.cn/direct/df7e2be18f3c457697552fda6db9721a.png)
(再一次,我们必须在β上放上'帽子',因为它代表了模型参数的估计值。)不要让矩阵算术吓跑你! 感谢像Python中的Scikit-learn这样的库,我们通常不需要手工计算(尽管编码线性回归是一种很好的做法)。 这种通过最小化RSS来拟合模型参数的方法称为最小二乘法(OLS)。
我们从频率主义线性回归中得到的仅仅是基于训练数据的模型参数的单一估计。 我们的模型完全被数据告知:在这个视图中,我们需要知道的模型的所有信息都编码在我们可用的训练数据中。
一旦我们有了β-hat,我们可以通过应用我们的模型方程来估计任何新数据点的输出值:
![](https://i-blog.csdnimg.cn/direct/c00c691af2f945c0b6b2d36ab5a50282.png)
作为OLS的一个例子,我们可以对真实世界的数据进行线性回归,这些数据的持续时间和消耗的热量为15000次运动观察。 以下是通过求解上述模型参数的矩阵方程得到的数据和OLS模型:
![](https://i-blog.csdnimg.cn/direct/924eb416f04742ce86ea03e66505132f.jpeg)
使用OLS,我们得到模型参数的单个估计值,在这种情况下,线的截距和斜率。我们可以写出由OLS产生的等式:
![](https://i-blog.csdnimg.cn/direct/ffc21c1e703c461e878d2d13f8b8d026.png)
从斜坡上,我们可以说每一分钟的锻炼就能燃烧7.17卡路里。 这种情况下的截距并不有用,因为它告诉我们,如果我们运动0分钟,我们会燃烧-21.86卡路里! 这只是OLS拟合程序的一个人为因素,它找到了尽可能减少训练数据错误的线条,无论它是否物理上合理。
如果我们有一个新的数据点,说一个15.5分钟的运动持续时间,我们可以将其插入到方程式中,以获得燃烧卡路里的点估计值:
![](https://i-blog.csdnimg.cn/direct/1d48e0cf0dc246ab8b884b584872d70c.png)
最小二乘法给出了输出的单点估计,我们可以将其解释为给定数据的最可能估计。 但是,如果我们有一个小数据集,我们可能会将我们的估计值表示为可能值的分布,这就是贝叶斯线性回归。
从普通最小二乘线性回归问题说起
从更为宏观的角度看,普通的线性回归问题,从本质上来说就是以"残差平方和"为统计量的一次多项式模型拟合问题,即
![](https://i-blog.csdnimg.cn/direct/357ffc88740c47c498b5feff3875f117.jpeg)
又称为最小二乘法。非常简单直接,甚至简单粗暴的思路,在各类工程问题得到了广泛地应用。数学上可以证明,最小二乘法的结果和均一正态误差(即每一个y的测量值yi的的分布是以"真实的"为期望,统一地误差为标准差的正态分布)情况下的极大似然拟合是一致的。在很多情况下,对于yi分布的假设往往是隐含的,不被显示指出的。
然而,当上述对于yi的正态分布性质的隐含假设不再成立时,最小二乘尽管仍然可能是对于真实结果的一个足够良好的逼近,但其可解释性将会受到显著的损害。同时,当实际情况中
yi显著偏离正态分布,而在数据分析中又强加这一假定时,很可能会发现出现显著偏离模型的野值(野值是相对于给定的yi的分布而言的,例如,如果yi服从的实际上是t分布,而强行假定它符合正态分布,就可能观察到出现概率极小的测量值,因为t分布相对于正态分布有两个很长的尾巴)。
对于这些显著偏离模型的所谓野值,我们当然可以修正统计量,使得拟合结果更为稳健(即所谓稳健拟合),然而很多情况下这只是权宜之计。
此外,对于自变量和因变量都存在弥散的情况下,普通的最小二乘线性拟合尽管能稍作修改应用在此类问题上,但这种修改的可推广性很差,难以应用到更复杂的非线性模型中。
贝叶斯线性回归模型
贝叶斯线性回归不仅可以解决极大似然估计中存在的过拟合的问题,而且,它对数据样本的利用率是100%,仅仅使用训练样本就可以有效而准确的确定模型的复杂度。
线性回归模型是一组输入变量x的基函数的线性组合,在数学上其形式如下:
![](https://i-blog.csdnimg.cn/direct/b7d1974d60a84f56989bdd8b6048ac58.png)
这里ϕj(x)就是前面提到的基函数,总共的基函数的数目为M个,如果定义ϕ0(x)=1的话,那个上面的式子就可以简单的表示为:
![](https://i-blog.csdnimg.cn/direct/bd6e9f10412d4d6f96325c9933805ace.jpeg)
则线性模型的概率表示如下:
![](https://i-blog.csdnimg.cn/direct/3d6f918964be4119bf25b1df6f3adbd9.jpeg)
假设参数w满足高斯分布,这是一个先验分布:
![](https://i-blog.csdnimg.cn/direct/8f4220fd3f834dabb03d913bca65678a.jpeg)
一般来说,我们称p(w)为共轭先验(conjugate prior)。这里t是x对应的目标输出,β−1和α−1分别对应于样本集合和w的高斯分布的方差,w是参数,
那么,线性模型的对数后验概率函数:
![](https://i-blog.csdnimg.cn/direct/5961eb22131842fd853a9c0b38b87523.jpeg)
式子的推导过程:
![](https://i-blog.csdnimg.cn/direct/2bfc621cd21b47199f0b12e56c7f0741.jpeg)
这里M+1是模型的复杂度,即多项式回归的次数。那么根据贝叶斯规则:
![](https://i-blog.csdnimg.cn/direct/80191f2155c7408cbcf0364022ff0b55.jpeg)
这个叫做MAP极大后验概率(maximum posterior)。对这个式子做对数似然,去除无关项之后,可以很容易得到下面这个结果:
![](https://i-blog.csdnimg.cn/direct/cd94814166e845cdaf469488d4b3cfd8.jpeg)
这里可以看出,先验概率对应的就是正则项,其正则参数为:
![](https://i-blog.csdnimg.cn/direct/ffc741d5e77d426ea52e671e538f96e9.jpeg)
可以假设,复杂的模型有较小的先验概率,而相对简单的模型有较大的先验概率。
贝叶斯线性回归算法的学习过程
根据前面关于贝叶斯估计的增量学习可以很容易得到下面这个式子,这个就是贝叶斯学习过程:在前一个训练集合Dn−1的后验概率p(θ|Dn−1)上,乘以新的测试样本点xn的似然估计,得到新的集合Dn的后验概率p(θ|Dn),这样,相当于p(θ|Dn−1)成为了p(θ|Dn)的先验概率分布:
![](https://i-blog.csdnimg.cn/direct/f2d4ba65629f401d9807e35dd01540de.jpeg)
有了上面的基础知识,这里就着重的讲下面这幅图,这个图是从RMPL第155页截取下来的,这幅图清晰的描述了贝叶斯线性回归的学习过程,下面结合这幅图,详细的说明一下贝叶斯学习过程。
![](https://i-blog.csdnimg.cn/direct/816356e0191745d08241942d685216ba.jpeg)
首先,说一下这里的模型:
![](https://i-blog.csdnimg.cn/direct/bdd1ddfe84d044a38d5505f71fd458b4.jpeg)
第一行:
第一行是初始状态,此时只有关于w的先验信息,即:p(θ|D0)=p(θ)=N(w|0,α−1I)。先看中间这幅图,这幅图是关于w的先验分布,由于我们假设w初始为高斯分布N(w|0,α−1I),故其图形是以(0,0)为中心的圆组成的。由于此时还没有样本点进入,所以没有关于样本的似然估计,故第一行中左边likelihood没有图。第一行右边data space的那幅图显示的是从第二幅图prior/posterior中随机抽取一些点(w0,w1),并以(w0,w1)为参数,画出来的直线,此时这些直线是随机的。
第二行:
此时有了第一个样本点x1,那么根据x1就可以得到第二行中,关于x1的似然估计,由于y=w0+w1x,似然估计的结果其实是这个式子的对偶式,即w1=1/x*y−1/x*w0。从第二行的最右边data space中的图中可以估计出,第一个样本点的坐标大概为:(0.9,0.1),所以其第一幅图中,似然估计的中心线的方程为:
![](https://i-blog.csdnimg.cn/direct/dc11882e515d489295f24ac6a81df8bf.jpeg)
近似为左边那幅图的画法。由于第二行的先验分布是第一行的后验分布,也就是第一行的中间那幅图。则,第二行的后验分布的求法就是:将第二行的第左边那幅图和第一行的中间那幅图相乘,就可以得到第二行中间那幅图。第二行最右边那幅图就是从第二行中间那幅图中随机抽取一些点(w0,w1),并以(w0,w1)为参数,画出来的直线。
第三行之后,就可以一次类推了。
上面就是贝叶斯学习过程的完整描述。
贝叶斯线性回归算法代码实现
python
import numpy as np
import pymc3 as pm
import arviz as az
# 生成一些模拟数据
np.random.seed(123)
true_intercept = 1.
true_slope = 2.
num_samples = 50 # 数据点的数量
x = np.linspace(0, 1, num_samples)
noise = np.random.normal(0, 0.1, num_samples)
y = true_intercept + true_slope * x + noise
# 指定模型
with pm.Model() as model:
# 先验设定
intercept = pm.Normal('intercept', mu=0, sd=100)
slope = pm.Normal('slope', mu=0, sd=10)
# 响应变量的条件分布设定
y_obs = pm.Normal('y_obs', mu=intercept + slope * x, sd=1, observed=y)
# 运行MCMC模拟
trace = pm.sample(1000, tune=1000)
# 作图和结果分析
az.plot_posterior(trace['intercept'], rope=[-5, 5], textsize=20)
az.plot_posterior(trace['slope'], rope=[-5, 5], textsize=20)
# 打印结果摘要
az.summary(trace, var_names=['intercept', 'slope'], probs=[0.05, 0.95])
贝叶斯线性回归的优缺点
优点:
- 贝叶斯回归对数据有自适应能力,可以重复的利用实验数据,并防止过拟合
- 贝叶斯回归可以在估计过程中引入正则项
缺点:
- 贝叶斯回归的学习过程开销太大
贝叶斯线性回归的应用场景
贝叶斯线性回归是一种统计学习方法,它结合了贝叶斯统计和线性回归的概念,通过贝叶斯推断方法求解线性回归模型。这种方法的优势在于它能够将线性模型的参数视为随机变量,并通过模型参数的先验计算其后验,从而提供参数的不确定性估计。贝叶斯线性回归的应用场景广泛:
- 高速公路造价预测:在项目前期,通过识别高速公路造价的影响因素,建立造价预测指标体系,然后利用贝叶斯线性回归方程对造价进行预测。这种方法相较于BP神经网络模型,具有更高的预测精度和稳定性,误差控制在5%以内,MAPE为2.29%,决定系数为0.925,显示出良好的可行性和适用性。
- 工资预测模型构建:在劳动经济学领域,通过分析横截面工资数据,使用贝叶斯方法如BIC和贝叶斯模型来构建工资的预测模型。这种方法可以提供对收入和工资的深入理解,为从性别歧视到高等教育等问题提供见解。
- 大数据分析和人工智能:随着数据的增长和复杂性增加,贝叶斯统计和线性回归将应用于大数据分析中,帮助企业和组织更好地理解数据和预测趋势。同时,它们在人工智能和机器学习领域也发挥着重要作用,例如在图像识别、自然语言处理和推荐系统等领域3。
- 医疗和生物学:贝叶斯统计和线性回归将在医疗和生物学领域应用于预测疾病发展、分析基因表达等问题。这些应用展示了贝叶斯线性回归在处理复杂数据和提供预测方面的能力。