最小二乘的系数向量可以这样找到:
beta = ((X'X)^-1)*X'y
理论上,这个结果对于任意数量的变量(X 列)都是正确的。
我制作了两个 Python 笔记本:一个用于单变量线性回归,另一个用于多元线性回归。
两个笔记本的代码类似:
- 创建一条随机线
# multivariate snippet. A part from the plotting part,
# this is the only part of the code that differs between the two notebooks.
beta = np.random.randint(1,6,(3,))
X = np.linspace([1, 3, 7],[1, 14, 23],100)
y = X @ beta
- 制造噪音
mu, sigma = 0, 1
noise = np.random.normal(mu, sigma, 100)
- 为 y 添加噪声
y_noise = y + noise
- 尝试通过 y_noise 拟合一条线
beta_ = np.linalg.inv(X.T @ X) @ X.T @ y_noise
y_ = X @ beta_
- 比较 y_ 和 y_noise
为什么在拟合 2D 线和 3D 线时会得到如此不同的结果?