机器学习:Normal euqation 解决一元线性回归 python

机器学习: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实现

猜你喜欢

转载自blog.csdn.net/zhangbaodan1/article/details/81031040