![Python快乐编程:人工智能深度学习基础](https://wfqqreader-1252317822.image.myqcloud.com/cover/181/44510181/b_44510181.jpg)
上QQ阅读APP看书,第一时间看更新
3.2.5 实例:线性回归
假设平面直角坐标系中存在4个坐标点,坐标分别为(-1,0)、(0,1)、(1,2)、(2,1),求一条经过这4个点的直线方程,坐标点如图3.5所示。
![](https://epubservercos.yuewen.com/507925/23721665909549406/epubprivate/OEBPS/Images/Figure-P60_12612.jpg?sign=1739524638-ljYTntXHMKknVC0FQIztPd1iXPUHpPUp-0-df8b74966b3d0e5cbff2e1a5d374a524)
图3.5 4个点的坐标
设直线的方程为y=mx+b。从图3.5可以很容易看出,这4个坐标点并不在一条直线上,因此不可能存在一条直线同时连接这4个点。此时,可以通过最小二乘的方法找到一条距离这4个点最近的直线,来求得近似解。具体方法如下所示。
首先,用方程组的形式分别表示图3.5中的4个点。
![](https://epubservercos.yuewen.com/507925/23721665909549406/epubprivate/OEBPS/Images/Figure-P60_15402.jpg?sign=1739524638-uJiHYwdiJrKvKwmI5SQLIt68Zsd98I0Q-0-3806939974e5912b608d4f7ef99c6c42)
通过矩阵和向量的形式来表示上述方程组:
![](https://epubservercos.yuewen.com/507925/23721665909549406/epubprivate/OEBPS/Images/Figure-P61_15403.jpg?sign=1739524638-YbmvpcZ8FfHmQOMygqvaB9Om75ZSxVJ0-0-476afc4a4c4904983b4a64dfa5015445)
上述表达式的最小二乘逼近如下所示。
![](https://epubservercos.yuewen.com/507925/23721665909549406/epubprivate/OEBPS/Images/Figure-P61_15404.jpg?sign=1739524638-1v3fqWweTQOPY5ap41St1g94igsg2lq8-0-ddfc4dcc478bbc6ac4a28da37e5fc089)
接下来,对矩阵求逆,结果为
,将结果代入上述表达式:
![](https://epubservercos.yuewen.com/507925/23721665909549406/epubprivate/OEBPS/Images/Figure-P61_15410.jpg?sign=1739524638-iCLphCCcLtPOg7hTxsCvYxkSIHvyWhAT-0-5ca5b9d04e001b47a7066c9d6010bfc4)
因此,所求直线方程为,具体如图3.6所示。
![](https://epubservercos.yuewen.com/507925/23721665909549406/epubprivate/OEBPS/Images/Figure-P61_5068.jpg?sign=1739524638-hNULMB5wYAaW7cExlebeC6uXhx4oqQEa-0-b9e0c351874b7a093c2fc64bc827d81d)
图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的奇异值为。