老饼讲解:一步一步上手学习
这节我们自己编写代码来求解线性回归模型,线性回归模型可以直接使用最小二乘法进行求解,也可以利用QR分解来优化计算量,下面我们分别展示两种方法的具体实现代码。
现有数据以下

以上数据的实际关系为:,等下可以回头看看求解结果是否与它一致
下面我们不借助软件包,自己实现线性回归模型的训练。这里我们展示两种方法,一种是纯粹的最小二乘法,另一种是结合了QR分解的最小二乘法。
线性回归模型一般使用最小二乘法进行求解, 最小二乘法求解公式如下:
按上述公式编写代码进行求解即可,具体python代码实现如下:
"""
本代码展示用最小二乘法训练线性回归模型
本代码来自《老饼讲解-机器学习》www.bbblearn.com
"""
import numpy as np
# 训练数据
x = np.array([[0, 2], [1, 1], [2,3],[3,2],[4,5],[5,2]]) # 输入数据X
y = np.array([8,7,15,14,25,18]) # 输出数据y
# 用最小二乘法求解线性回归
xt = np.insert(x, x.shape[1], 1, axis=1) # 给x添加一列1
w = np.linalg.inv(xt.T@xt)@xt.T@y # 按公式求解w
# 打印结果
print("模型参数W:"+str(w)) # 打印模型参数代码运行结果如下:

即代表模型为:
这与数据的实际关系是一致的,可见,模型的求解是有效的。
线性回归除了使用最小二乘法求解,还可以加入结合QR分解来简化最小二乘法的计算量。
QR分解方法求解最小二乘解的公式如下:
其中,Q和R由X进行QR分解得到。
根据上述公式,先对X进行QR分解,再按公式计算W即可。
具体python代码实现如下:
"""
本代码展示用最小二乘法(结合QR分解)训练线性回归模型
本代码来自《老饼讲解-机器学习》www.bbblearn.com
"""
import numpy as np
# 训练数据
x = np.array([[0, 2], [1, 1], [2,3],[3,2],[4,5],[5,2]]) # 输入数据X
y = np.array([8,7,15,14,25,18]) # 输出数据y
# 用最小二乘法结合QR分解来求解线性回归
xt = np.insert(x, x.shape[1], 1, axis=1) # 给x添加一列1
Q, R = np.linalg.qr(xt) # 对x进行QR分解
w = np.linalg.inv(R)@Q.T@y # 用公式求解模型的系数
print("模型参数W:"+str(w)) # 打印模型参数代码运行结果如下:

可以看到,QR分解法得到的结果,与单纯的使用最小二乘法的结果是一样的。
线性回归的求解,只需按最小二乘法的公式直接进行计算就可以了,但如果要简化计算机底层的计算量,就可以使用结合了QR分解的最小二乘法公式,总的来说,线性回归模型的求解都只是一条公式的事。
评论