线性回归计算举例

使用正规方程计算(一元线性回归)

import numpy as np
import matplotlib.pyplot as plt
# 转化成矩阵
X = np.linspace(0, 10, num = 30).reshape(-1, 1)
# 斜率和截距,随机生成
w = np.random.randint(1, 5, size = 1)
b = np.random.randint(1, 10, size = 1)
# 根据一元一次方程是计算目标值y,并加上“噪声”
y = X * w + b + np.random.randn(30, 1)
plt.scatter(X, y)

# 重新构造X,b,相当于系数w0,前面统一乘以1
X = np.concatenate([X, np.full(shape = (30, 1), fill_value = 1)], axis = 1)
# 正规方程求解
theta = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y).round(2)
print('一元一次方程真是的斜率和截距是:', w, b)
print('通过sklearn求解的斜率和截距是:',theta)
# 根据求解的斜率和截距绘制线性回归线形图
plt.plot(X[:, 0], X.dot(theta), color = 'green')

运行结果

一元一次方程真是的斜率和截距是: [4] [4]
通过sklearn求解的斜率和截距是: [[4.03]
 [3.76]]

在这里插入图片描述

sklearn计算

一元线性方程

from sklearn.linear_model import LinearRegression
import numpy as np
import matplotlib.pyplot as plt

# 生成一列等差数据
X = np.linspace(0, 9, num = 10).reshape(-1, 1)

w = np.random.randint(1, 5, size = 1)
b = np.random.randint(1, 10, size = 1)

y = X * w + b + np.random.randn(10, 1)
plt.scatter(X, y)

model = LinearRegression()
model.fit(X, y)
w_ = model.coef_
b_ = model.intercept_
print('一元一次方程真是的斜率和截距是:', w, b)
print('通过sklearn求解的斜率和截距是:',w_, b_)
plt.plot(X, X.dot(w_) + b_, color = 'green')

运行结果

一元一次方程真是的斜率和截距是: [2] [4]
通过sklearn求解的斜率和截距是: [[2.11650606]] [3.65838892]

在这里插入图片描述

二元线性方程

from sklearn.linear_model import LinearRegression
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D
import warnings
#warnings.filterwarnings('ignore')

# 转化成矩阵
x1 = np.random.randint(-150, 150, size = (300, 1))
x2 = np.random.randint(0, 300, size = (300, 1))

# 斜率和截距,随机生成
w = np.random.randint(1, 5, size = 2)
b = np.random.randint(1, 10, size = 1)

# 根据二元一次方程计算目标值y,并加上“噪声”
y = x1 * w[0] + x2 * w[1] + b + np.random.randn(300, 1)

fig = plt.figure(figsize = (9, 6))
ax = Axes3D(fig)
fig.add_axes(ax)
# 三维散点图
ax.scatter(x1, x2, y)
# 调整视角
ax.view_init(elev = 10, azim = -20)

# 重新构造X,将x1,x2以及截距b,相当于系数w0,前面同意乘以1进行数据合并
X = np.concatenate([x1, x2], axis = 1)
# 使用sklearn中的线性回归求解
model = LinearRegression()
model.fit(X, y)
w_ = model.coef_.reshape(-1)
b_ = model.intercept_

print('二元一次方程真是的斜率和截距是:', w, b)
print('通过sklearn求解的斜率和截距是:', w_, b_)

# 根据求解的斜率和截距绘制线性回归线形图
x = np.linspace(-150, 150, 100)
y = np.linspace(0, 300, 100)
z = x * w_[0] + y * w_[1] + b_
ax.plot(x, y, z, color = 'green')

运行结果:

二元一次方程真是的斜率和截距是: [4 2] [6]
通过sklearn求解的斜率和截距是: [3.99968575 2.00023195] [5.94420593]

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值