线性回归手搓算法版(正规方程模拟)

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值