
上QQ阅读APP看书,第一时间看更新
3.2.5 实例:线性回归
假设平面直角坐标系中存在4个坐标点,坐标分别为(-1,0)、(0,1)、(1,2)、(2,1),求一条经过这4个点的直线方程,坐标点如图3.5所示。

图3.5 4个点的坐标
设直线的方程为y=mx+b。从图3.5可以很容易看出,这4个坐标点并不在一条直线上,因此不可能存在一条直线同时连接这4个点。此时,可以通过最小二乘的方法找到一条距离这4个点最近的直线,来求得近似解。具体方法如下所示。
首先,用方程组的形式分别表示图3.5中的4个点。

通过矩阵和向量的形式来表示上述方程组:

上述表达式的最小二乘逼近如下所示。

接下来,对矩阵求逆,结果为
,将结果代入上述表达式:

因此,所求直线方程为,具体如图3.6所示。

图3.6 加入直线后的坐标图
图3.6中的直线便是经过4个点的直线的近似解。通过Python实现上述求解过程的代码如下所示:
import numpy A = numpy.matrix('-1 1;0 1;1 1;2 1') B = numpy.array([0,1,2,1]) x = numpy.linalg.lstsq(A,B) print(x)
运行结果如下:
(array([0.4,0.8]),array([1.2]),2,array([2.68999405,1.66250775]))
上述运行结果中,numpy.linalg.lstsq返回的4个值从左往右分别对应以下内容:
(1)最小二乘逼近解。上述示例中,逼近解为。
(2)残差。上述示例中,残差值为1.2。
(3)矩阵A的秩。上述示例中,矩阵A的秩为2。
(4)矩阵A的奇异值。上述示例中,矩阵A的奇异值为。