![深度学习实战:基于TensorFlow 2和Keras(原书第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/670/40319670/b_40319670.jpg)
3.2 使用线性回归进行预测
线性回归是最广为人知的建模技术之一。它已有两百多年的历史,几乎被人们从所有可能的角度进行过探索。线性回归假设输入变量(X)和输出变量(Y)存在线性关系。它牵涉找到以下形式预测值Y的线性方程:
Yhat=WTX+b
其中X = {x1,x2,…,xn}是n个输入变量,W = {w1,w2,…wn}是线性系数,b是偏置项。偏置项允许回归模型即使无任何输入时仍可提供输出。它为我们提供了平移数据(可向左也可向右)从而更好地拟合数据的一种选项。输入样本i的观测值(Y)和预测值之间的误差为:
![087-02](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/087-02.jpg?sign=1738901229-SUhWxMRCZ0AlQZpCGTS3OVeRM0kGuyb6-0-0e63218d54ca0ae5b5227ec78479d693)
目标是找到系数W和偏置项b的最佳估计,以使观测值Y和预测值之间的误差最小。让我们来看一些示例,以便更好地理解这一点。
3.2.1 简单线性回归
如果只考虑一个自变量和一个因变量,我们得到的是一个简单的线性回归。考虑上一节中定义的房价预测示例,房屋面积(A)是自变量,房屋价格(Y)是因变量。我们想要找到预测价格和A之间的线性关系,其形式为:
![087-05](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/087-05.jpg?sign=1738901229-rOA2j1M4UjuEqxYplcBUXjRLDOUANW9q-0-8bfc86fada686c85b84effeea6b3d6c2)
其中b是偏置项。为此,我们需要确定W和b,以使价格Y和预测价格之间的误差最小。用于估计W和b的标准方法称为最小二乘法,即,我们尝试最小化误差平方和(S)。对于上述情况,表达式变为:
![087-07](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/087-07.jpg?sign=1738901229-L6W3kWK2Au1PgwSpNcNWPtOdMBnUgfBR-0-850805d95bf95088a9c4fdfda54ba86d)
我们希望估计回归系数W和b,以使S最小。基于函数的导数在其极小值处为0的事实,得出以下两个等式:
![087-08](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/087-08.jpg?sign=1738901229-o9NRWSqTm3FCaXj9mGftuP738pUBc8MF-0-67f103b8775abe21615f021690f5110a)
![088-01](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/088-01.jpg?sign=1738901229-ZonVJlvKGQIBTcxsF5Mo8Z5Q83Khzrip-0-b083870aaf60b1ba29684d31a6a6444a)
求解这两个方程可找到两个未知数。为此,我们首先在第二个等式中展开求和公式:
![088-02](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/088-02.jpg?sign=1738901229-NKO0AdX1PAfTg11MR6HeaPocRwwosxNi-0-c1f81481552a5fa3ab7374611e8e9d20)
看一下公式左侧的最后一项,它只是对一个常量做了N次求和。因此,可以将其重写为:
![088-03](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/088-03.jpg?sign=1738901229-mpXlbS04qOVrgZvcmn2hH1frkE0GGT13-0-6dcdeb7f7552db8589b3c0dbc6a763c9)
整理公式各项,得到:
![088-04](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/088-04.jpg?sign=1738901229-BfCyXu0LR53vS5vAiTP9brFJRNbtjoR1-0-10fd4457d476020b869632eace669c55)
公式右边的两项可分别用平均价格(输出)和平均面积(输入)
表示,因此得到:
![088-07](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/088-07.jpg?sign=1738901229-BAMwIBPy40Lfa6xoqAupwBM5HL7rT7c2-0-7c2afaa990a64f506934aea3c636f3c4)
以类似的方式,展开S对权重W的偏微分方程:
![088-08](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/088-08.jpg?sign=1738901229-yU4InsXBhxhtGxeBmyQlvQ3d7Iaeuyhx-0-4542662723472a6172a25a454c9c3949)
用表达式替换偏置项b:
![088-09](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/088-09.jpg?sign=1738901229-cQmYOAQhJotoD3Jai2fdGgUgOx0RkdmL-0-cfcd9b44826e2a19659aa34711e4c8d9)
整理:
![088-10](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/088-10.jpg?sign=1738901229-V7XpqFz8Sk1PX2LKAxqzOlSPEAyCffhu-0-a00fe1e7a28a065f8b50545405619797)
运用均值定义,我们可以从中得出权重W的值:
![088-11](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/088-11.jpg?sign=1738901229-EIBc144bk74F02X66Z8M7tY1BY8lP0j0-0-9d0fdafc6e07d8a79a3fdfe2dfe3fe0e)
式中分别是平均价格和平均面积。让我们用一些简单的样本数据试一下:
1)导入必要的模块。这是一个简单的示例,因此我们将仅使用NumPy、pandas和Matplotlib:
![089-01](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/089-01.jpg?sign=1738901229-MahhMVLgj9DlKX6QcutsfliCFUxzxopX-0-2163ebdd5ac72cda0ba2fc2ff699fe49)
2)生成具有线性关系的随机数据。为了使其更真实,我们还添加了随机噪声。你可以看到两个变量(诱因:area
,效果:price
)遵循线性正相关关系:
![089-02](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/089-02.jpg?sign=1738901229-WY31qaCRt7NbcWeJQcpLgDQ3qNrzow7F-0-f79485ee7c5fe087eaf176854675d256)
![089-03](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/089-03.jpg?sign=1738901229-u927zqXx8gsDlelDdqNF7LJgT54U1Ln8-0-8c0d84284944cb65352bff1f7f366fc1)
3)使用刚定义的方程计算两个回归系数。你可以看到结果非常接近我们模拟的线性关系:
![089-04](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/089-04.jpg?sign=1738901229-uXYU1MueXgZeETmr9RNyuQw7D9uGlKht-0-1f0d887f17b9a68232dfe770c8728a0d)
4)用得到的权重和偏差值来预测新价格:
![089-05](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/089-05.jpg?sign=1738901229-NXWqX1R5Oz0fgOooecWPrLZ8pxkwrOu9-0-9a5a4707a6525459613a94de65c1bb7b)
5)将预测价格与实际价格一起绘制出来。你可以看到预测价格在域内呈线性关系:
![090-01](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/090-01.jpg?sign=1738901229-IIh27F2eGxB598NQ7YF1Dl3iWnIVSVrG-0-6c005868ad48bebecfd5d3d840d4af54)
![090-02](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/090-02.jpg?sign=1738901229-QMPG3I0k92h2bhWyLQVFV9Dmg3mRXFlP-0-a0b76753559d2c3d45f7749fbad553cc)
3.2.2 多线性回归
前面的例子很简单,但事实并非如此。在大多数问题中,因变量取决于多个自变量。多线性回归可找到多个输入自变量(X)与输出因变量(Y)之间的线性关系,以使它们满足以下形式的预测值:
![090-04](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/090-04.jpg?sign=1738901229-j9sXmQDQxzd2oQzE0UQphDjauvlLFQdH-0-4757152f290aec7872d9797992af1608)
其中X={x1,x2,…,xn}是n个输入自变量,W={w1,w2,… wn}是线性系数,b为偏置项。
如前所述,使用最小二乘法来估计线性系数W,即最小化预测值和观测值(Y)之间的平方差之和。因此,我们尝试最小化损失函数:
![090-06](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/090-06.jpg?sign=1738901229-zcGGT2BPRAoYK0MMA7A9M3LfVlFYZ3lH-0-75588b589ccd487f1d41bf77c987d0d8)
式中,求和覆盖所有训练样本。可能正如你已猜到的,现在不是两个,而是有n+1个方程需要同时求解。一个更简单的选择是使用TensorFlow Estimator API。我们将很快学习如何使用TensorFlow Estimator API。
3.2.3 多元线性回归
在某些情况下,自变量会影响多个因变量。多元线性回归就是这种情况。从数学上讲,多元回归模型可以表示为:
![091-01](https://epubservercos.yuewen.com/FACE01/20940534208098106/epubprivate/OEBPS/Images/091-01.jpg?sign=1738901229-5QqnlDxoAPJXL8d9TVjWPWyrWhdIGIpM-0-cb76568404709080cf217edba4178140)
式中i∈[1, … , n],j∈[1, … , m]。项代表与第i个输入样本相对应的第j个预测输出值,w代表回归系数,xik是第i个输入样本的第k个特征。在这种情况下,需要求解的方程式数为n×m。尽管我们可以使用矩阵来求解这些方程,但该过程在计算上是昂贵的,因为它涉及求解逆矩阵和求解行列式。一种更简单的方法是使用最小二乘误差之和的梯度下降作为损失函数,并使用TensorFlow API提供的某个优化器。
下面我们将深入研究TensorFlow Estimator,这是一种通用的高阶API,可轻松开发模型。