实现ols_matrix(x, y)函数如下:
defols_matrix(x,y):w=(x.T*x).I*x.T*yreturnw
同样,这里使用上面提供的示例数据。注意,由于是矩阵运算,所以需要对原数据进行形状变换,并添加截距项系数1,否则会因为形状问题无法计算。
x=np.array(x).reshape(len(x),1)x=np.concatenate((np.ones_like(x),x),axis=1)x=np.matrix(x)y=np.array(y).reshape(len(y),1)y=np.matrix(y)ols_matrix(x,y)>>>matrix([[44.25604341],[0.7175629]])
可以看到,这里得到的结果与代数求解方法一致。
上面我们使用最小二乘法来求解线性方程系数,得到的结果是精确的解析解。最后,尝试将拟合的直线绘制成图,查看拟合效果。这里,四舍五入保留参数的 3 为小数。