机器学习:Normal euqation 解决一元线性回归 python
利用Normal queation 解决一元线性回归,比如现在有一组数据,近似服从
$$y = {\theta }_0 + {\theta }_1 x$$
通过Normal queation 可以求解出\({\theta }_0\)和\({\theta }_1\),其中,我们先做一些定义:
$$x^{(i)} = \begin{bmatrix} x^{(i)}_0\\x^{(i)}_1\\x^{(i)}_2\\\vdots \\x^{(i)}_n\\ \end{bmatrix}\; \; \; \; \;X = \begin{bmatrix} (x^{(1)})^{T}\\(x^{(2)})^{T}\\\vdots \\(x^{(m)})^{T}\\ \end{bmatrix} = \begin{bmatrix} x^{(1)}_0 & x^{(1)}_1 & x^{(1)}_2 & \cdots & x^{(1)}_n\\x^{(2)}_0 & x^{(2)}_1 & x^{(2)}_2 & \cdots & x^{(2)}_n\\\vdots &\vdots &\vdots &\ddots &\vdots &\\x^{(m)}_0 & x^{(m)}_1 & x^{(m)}_2 & \cdots & x^{(m)}_n\\\end{bmatrix}$$
$$y^{(i)} = \begin{bmatrix} y^{(1)}\\y^{(2)}\\y^{(3)}\\\vdots \\y^{(m)}\\ \end{bmatrix}
\; \; \; \; \; \theta = \begin{bmatrix} \theta_0\\\theta_1\\\theta_2\\\vdots \\\theta_n\\ \end{bmatrix}$$
其中,m代表训练样本的个数,n代表特征个数,x为输入,y为输出。
我们可以推导出(具体的推导方式可以见:Normal equation 公式推导):
$$ \theta = {\left ( X^{T}X \right )}^{-1}X^{T}y$$
因此,我们便可以利用这个公式,通过python求解出\({\theta }_0\)$和\({\theta }_1\)
#!/usr/bin/python
# coding=utf-8
import numpy as np
# 构造训练数据
x = np.arange(0., 2000., 0.2)
m = len(x) # 训练数据点数目
x0 = np.full(m, 1.0)
input_data = np.vstack([x0, x]).T # 将偏置b作为权向量的第一个分量
target_data = (2 * x + 5 + np.random.randn(m))
#将数据转为矩阵
X = np.mat(input_data)
y = np.mat(target_data).T
#计算theta值
theta = np.dot(np.dot(np.dot(X.T,X).I,X.T),y)
print(theta)
也有人拿梯度下降求解\({\theta }_0\)和\({\theta }_1\),具体可以见梯度下降python实现