Python快乐编程:人工智能深度学习基础
上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的奇异值为