一、问题描述
回归(regression)是指⼀类为⼀个或多个⾃变量与因变量之间关系建模的⽅法。在⾃然科学和社会科学领域回归经常⽤来表⽰输⼊和输出之间的关系。
本文以y = 2x + 1的数据进行拟合为例,给出了基于矩阵运算来估计系数的方法及python实现。
二、数学推导
注意:
对于矩阵A只是列满,不是方阵(一般情况),则(A.T*A)'*A.T称为矩阵A的广义逆(伪逆)
三 、Python程序
1.绘制散点图
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
trainX=np.arange(25)
trainY=2*trainX+1+np.random.randn(25)
plt.scatter(trainX, trainY,color='red',marker='+')
结果如下图所示:
2.数据拟合
X=np.ones((25,2))
X[:,0]=trainX
Y=trainY.T
b=np.dot(X.T,X)
b1=np.linalg.pinv(b)
b3=np.dot(b1,X.T)
b5=np.dot(b3,Y)
得到回归系数为:k = b5(0) = 1.98233782, b = b5(1) = 1.167998
3.完整的代码
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
trainX=np.arange(25)
trainY=2*trainX+1+np.random.randn(25)
X=np.ones((25,2))
X[:,0]=trainX
Y=trainY.T
b=np.dot(X.T,X)
b1=np.linalg.pinv(b)
b3=np.dot(b1,X.T)
b5=np.dot(b3,Y)
Y1=b5[0]*trainX+b5[1]
fig,ax = plt.subplots()
ax.scatter(trainX, trainY,color='red',marker='+')
ax.plot(trainX, Y1,color='blue')
结果如下图所示: