本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com
线性回归模型可以直接使用最小二乘法进行求解,也可以利用QR分解来优化计算量
本文展示如何自写代码实现线性回归模型的求解,包括最小二乘法与QR分解法
通过本文可以具体的掌握线性回归模型的实现原理,以及代码实现方法,从而加深理解
本节展示如何自写代码来实现线性回归模型
自写代码-求解线性回归
现有数据以下,需要我们建立线性模型,用变量 预测
以上数据的实际关系为:,等下可以回头看看求解结果是否与它一致
线性回归模型使用最小二乘法进行求解, 最小二乘法求解公式如下:
按上述公式编写代码进行求解即可,具体python代码实现如下:
import numpy as np
#输入数据
x = np.array([[0, 2], [1, 1], [2,3],[3,2],[4,5],[5,2]])
y = np.array([8,7,15,14,25,18])
# 给x添加一列1
xt = np.insert(x, x.shape[1], 1, axis=1)
#按公式求解w,其中inv的功能是求矩阵的逆,@是矩阵的乘法
w = np.linalg.inv(xt.T@xt)@xt.T@y
#输出W
print("模型参数W:"+str(w))
运行结果如下
模型参数W:[2. 3. 2.]
即代表模型为:
可见,模型的求解是有效的
自写代码-求解线性回归-QR分解法
线性回归除了使用最小二乘法求解,还可以加入QR分解来简化计算量
QR分解方法求解最小二乘解的公式如下:
其中,Q和R由X进行QR分解得到
根据上述公式,先对X进行QR分解,再按公式计算W即可
具体python代码实现如下:
"""
本代码展示QR分解来求解线性回归的python代码实现
本代码来自《老饼讲解-机器学习》www.bbbdata.com
"""
import numpy as np
#输入数据
x = np.array([[0, 2], [1, 1], [2,3],[3,2],[4,5],[5,2]])
y = np.array([8,7,15,14,25,18])
# 用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)) # 输出W
运行结果如下:
QR分解法得到的结果,与单纯的使用最小二乘法的结果是一样的
好了,以上就是如何自写代码来实现线性回归模型的求解了~
End