Part1-线性回归课后练习
1、简单的函数
获得一个\(5\times 5\)的单位矩阵
1 | import numpy as np |
array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
2、单变量线性回归
2.1 绘制数据
1 | import pandas as pd |
2.2 梯度下降
2.2.1 数据处理
1 | # 添加一列 “1”,乘以参数后作为偏置参数 |
1 | # 观察数据 |
2.2.3 提取X和y
1 | X = X.values |
2.2.4 定义代价函数
\(J(\theta) = \frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2\)
1 | def compute_cost(X, y, theta): |
2.2.5 梯度下降法
1 | # 梯度下降 |
2.2.6 绘制结果
1 | grad_theta, cost = gradient_descent(X, y, np.zeros((1,2)), epoch=10000, alpha=0.003) |
2.2.7 绘制代价函数变化
1 | plt.plot(np.arange(len(cost)), cost, 'r') |
2.3 采用正规方程解
1 | # theta_normal = np.linalg.inv(X.T@X)@X.T@y |
matrix([[-3.89578088],
[ 1.19303364]])
3、多元线性回归
3.1 特征缩放
1 | import pandas as pd |
1 | data = data.apply(lambda column: (column - column.mean())/column.std()) |
3.2 多元梯度下降
1 | data.insert(0, 'Ones', np.ones(len(data))) |
1 | def compute_cost(X, y, theta): |
1 | def gradient_descent(X, y, theta, epoch=10000, alpha=0.003): |
1 | theta_grad, cost = gradient_descent(X, y, np.zeros((1,3))) |
3.3 采用正规方程解
1 | theta = np.linalg.inv(X.T@X)@X.T@y |
array([[-1.11022302e-16],
[ 8.84765988e-01],
[-5.31788197e-02]])