高斯噪声:最小二乘线性估计的新视角
从平面线性拟合谈起
我们知道,线性回归是最简单的一种数据拟合,说的直白点,我们举平面上的例子来看,平面上有若干个样本点,我们的目标就是去画一条直线去拟合这些样本点。如果你对拟合这两个字还不是吃得很透,我们下面慢慢来介绍。
从高斯噪声的角度看最小二乘
高斯噪声是如何和最小二乘估计联系起来的?也就是换句话说,我们如何从概率的视角去审视最小二乘估计?下面我们来重点介绍这个话题。
我们思考一个问题,通过线性拟合,我们能否让直线精确无误的通过每一个样本点,使得拟合出来的直线的误差为 0?
这种理想的情况在现实当中显然是不可能的,因为样本数据本身是带有噪声的,带有随机性的,这个直观点说,我们看上面那幅图,所有的样本点都围绕着直线上下,在直线附近上下夹杂着这种随机的噪声。那么我们可以这么理解:拟合出来的直线代表了样本数据的确定性,而拟合值和真实值之间的误差,也可以称之为是噪声,则代表了随机性。
那么好,这个随机性的噪声我们是不是就可以用符合某个分布的随机变量来描述,没错,这就是我们一开始讲的高斯噪声。
到此处已经豁然开朗,最终我们不就到达了最小二乘法的定义式了吗?二者是不谋而合。因此,从概率的角度来说,最小二乘估计其中隐含了样本噪声服从 0 均值高斯分布的假设。
**
线性回归代码实践
**
最终,我们来快速看一下 Python 当中做线性回归的实现方法,我们借助 sklearn 工具包,实现起来是相当容易的:
from sklearn import datasets
from sklearn import linear_model
from sklearn.metrics import r2_score
from sklearn.datasets import load_boston
boston = load_boston()
from sklearn.model_selection import train_test_split
#获取波士顿房价数据集(506*13)
boston = datasets.load_boston()
#选取一半的数据做训练数据,一半做测试数据
X_train,X_test,y_train,y_test = \
train_test_split(boston.data,boston.target,test_size=0.5,random_state=33)
#使用最小二乘线性回归进行拟合,导入相应的模块
lr = linear_model.LinearRegression()
lr.fit(X_train, y_train) #进行线性拟合
y_pred = lr.predict(X_test)#得到预测值集合y_pred
w = lr.coef_ #获得该回该方程的回归系数与截距
w0 = lr.intercept_
print("估计系数w={}:".format(w))
print("估计截距w0={}:".format(w0))
#利用评价指标 r2_score,来评价模型的拟合优度,越接近 1 拟合情况越好
print("拟合优度r2_score={}".format(r2_score(y_test, y_pred)))
运行结果:
估计系数 w=[-1.13886467e-01 5.57751443e-02 3.19967368e-02 4.83656552e+00
-1.73802992e+01 3.81631385e+00 8.77697010e-03 -1.48553776e+00
3.16012600e-01 -1.14998706e-02 -8.54089583e-01 8.31673898e-03
-6.00625497e-01]:
估计截距w0=34.525556152532474:
拟合优度r2_score=0.7206754178645804
结合注释,我们会发现利用 sklearn 的工具做最小二乘法的线性拟合还是相当容易的,最终如我们所愿,样本数据有 13 维特征。