Zy= β1Z*1 + β2Z*2 + … + βkZ*k
多元线性方程,一般采用矩阵来表示,因此在求多元线性方程的最小化函数时,就需要对矩阵进行求导,这个求导过程,NG已经给出了,如下:
最终求出来的公式如下:
这个公式也叫正规方程,它需要求解矩阵,所以数据比较多时,就比较慢。下面来给出一个计算简单线性回归的矩阵求法,假如数据:
(1,6), (2,5),(3,7)和(4, 10)
计算代码如下:
import numpy as np import matplotlib.pyplot as plt input = np.array([ [1, 6], [2, 5], [3, 7], [4, 10] ]) m = len(input) X = np.array([np.ones(m), input[:, 0]]).T y = np.array(input[:, 1]).reshape(-1, 1) betaHat = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y) print(betaHat) plt.figure(1) xx = np.linspace(0, 5, 2) yy = np.array(betaHat[0] + betaHat[1] * xx) plt.plot(xx, yy.T, color='b') plt.scatter(input[:, 0], input[:, 1], color='r') plt.show()
可见矩阵计算方法比较快,不需要迭代,一步就可以计算出来。