2.2 多变量线性回归#

2.2.1 理解多变量#

在2.1节的内容中,我们详细地介绍了什么是线性回归及一个典型的应用场景,同时还介绍了如何通过开源的sklearn来搭建一个简单的线性回归模型。相信此时各位读者对于线性回归的核心思想已经有了一定的认识。接下来,我们将继续开始学习线性回归的后续内容。

在这里我们还是继续以房价预测为例进行介绍。尽管影响房价的主要因素是面积,但是其他因素同样也可能影响房屋的价格。例如房屋到学校的距离、到医院的距离和到大型商场的距离等。虽然现实生活中一般不这么量化,但是开发商也总是会拿学区房做卖点,所以这时便有了影响房价的4个因素,而在机器学习中我们将其称为特征(Feature)或者属性(Attribute),因此,包含多个特征的线性回归就叫作多变量线性回归(Multiple Linear Regression)。

2.2.2 多变量线性回归建模#

以波士顿房价数据集为例,其一共包含了13个特征属性,因此可以得到如下所示的线性回归模型。

$$ h(x)=w_{1}x_{1}+\cdots +w_{13}x_{13}+b\tag{2-3} $$

并且同时,其目标函数为

$$ \begin{cases} J(W,b)=\frac{1}{2m}\sum_{i=1}^m(y^{(i)}-\hat{y}^{(i)})^2\\[2ex] \hat{y}^{(i)}=h(x^{(i)})=w_1x_1^{(i)}+\cdots+w_{13}x_{13}^{(i)}+b \end{cases} \tag{2-4} $$

其中$x^{(i)}_j$表示第$i$个样本的第$j$个特征属性; $W$为一个向量,表示所有的权重;$b$为一个标量,表示偏置。

由2.1节介绍的内容可知,只要通过某种方法最小化目标函数$J(W,b)$后,便可以求解出模型对应的参数。不过在这之前,我们先来看一下如何通过sklearn进行建模与求解。

2.2.3 多变量回归示例代码#

下面依旧以sklearn进行多变量线性回归模型的建模与求解为例,完整代码见 AllBookCode/Chapter02/02_boston_price_train.py 文件。

1.导入数据集

这里直接导入了一个sklearn内置的Boston房价数据集为例进行演示,代码如下:

1 from sklearn.datasets import fetch_california_housing
2 def load_data():
3     data = fetch_california_housing()
4     x = data.data
5     y = data.target
6     return x, y

2. 求解与结果

训练模型与输出相应的权重参数和预测值,代码如下:

1 def train(x, y):
2     model = LinearRegression()
3     model.fit(x,y)
4     print("权重为:",model.coef_,"偏置为:",model.intercept_)
5     print("第12个房屋的预测和真实价格:",model.predict(x[12,:].reshape(1,-1)))

根据上述代码便完成了对于多变量线性回归模型的建立与求解,同时也得出了各个特征所对应的权重参数,但由于不易对高维数据进行可视化,所以这里只能从预测的结果来评判模型的好坏,具体的模型评估指标将在第2.4节中进行介绍。

2.2.4 小结#

在本节内容中,我们首先介绍了什么是多变量回归,即包含有多个特征维度的线性回归模型;然后依旧以房间预测为例来介绍了多变量线性回归的建模过程;最后接受了在如何利用sklearn来完成多变量线性回归的建模任务。