1.随机生成X1,设定X0为1,整合X0和X1
2.假设Y,使用一次线性方程,增加一部分随机误差
3.利用正规方程计算b,theta
4.利用测试数据对正规方程解进行测试,得到对应y值
5.在图上画出预测的直线和数据训练的直线
import numpy as np
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
np.random.seed(0)
# 随机生成X1
X = np.random.randn(100, 1)
# 人为设置正确Y值,添加点随机误差
Y = 4 + 3 * X + np.random.randn(100, 1)
# 整合X0和X1,X0,对应值为1,X0为b的系数,X1为w的系数(理解性说法)
X_b = np.c_[np.ones((100, 1)), X]
# b值和theta
theta_b = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(Y)
# 第一个个b
print(f"The best theta_b is {theta_b}")
# 随机生成两个数据,进行预测
X_new = np.array([[0], [2]])
# print(X_new.shape)
# print(np.ones((2, 1)))
X_new_b = np.c_[np.ones((2, 1)), X_new]
# 使用模型进行预测
y_predict = X_new_b.dot(theta_b)
print(f"y_predict:{y_predict}")
# 绘制拟合直线图
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.scatter(X, Y)
ax1.axis([0, 2, 0, 15])
ax1.set_title("train-data")
ax2.plot(X_new, y_predict)
ax1.axis([0, 2, 0, 15])
ax2.set_title("predict")
plt.show()