当前位置: 首页 > news >正文

线性回归实战

3.1 使用正规方程进行求解

3.1.1 简单线性回归

公式 :
y = w x + b y = wx + b y=wx+b
一元一次方程,在机器学习中一元表示一个特征,b表示截距,y表示目标值。
使用代码进行实现:

导入包

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.rand(30,1)
plt.scatter(X,y)

# 计算斜率+截距
#系数
X = np.concatenate([X,np.full(shape=[30,1],fill_value=1)],axis=1)
X

在这里插入图片描述
获取系数

coef_ = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
w_ = coef_[0,0]
b_ = coef_[1,0]
print('正规方程算法计算,系数',w_,b_)

真实的系数

print('原始的数据斜率、截距',w,b)

绘制图形

plt.scatter(X[:,0],y,color='red')
plt.plot(X[:,0],X[:,0] * w_ + b_,color='green')

在这里插入图片描述

3.1.2 多元的线性回归

公式:
y = w 1 x 1 + w 2 x 2 + b y = w_1x_1 + w_2x_2 + b y=w1x1+w2x2+b
导入包

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D  # 绘制三维图像·
# 转化为矩阵
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)
ax.scatter(x1,x2,y) #三维散点图
ax.view_init(elev=10,azim=-20) # 调整视角

多元公式模型

X = np.concatenate([x1,x2,np.full(shape=(300,1),fill_value=1)],axis = 1)
X

在这里插入图片描述

# 方程的系数 
coef_ = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
w1 = coef_[0][0]
w2 = coef_[1][0]
b_ = coef_[2][0]
print('正规方程求解的方程系数:',w1,w2,b_)
print('真实方程系数',w,b)

在这里插入图片描述
绘制拟合线段

fig = plt.figure(figsize=(9,6))
ax = Axes3D(fig)
ax.scatter(x1,x2,y,color='red') #三维散点图
ax.view_init(elev=10,azim=-20) # 调整视角
# 特征1:x1
x = np.linspace(-150,150,num=500)
y = np.linspace(0,300,num = 500)
z = x *w1_+ y*w2_ +b
ax.plot(x,y,z,color='green')

在这里插入图片描述

在这里插入图片描述

http://www.lryc.cn/news/256547.html

相关文章:

  • stm32 使用18B20 测试温度
  • 【Delphi】一个函数实现ios,android震动功能 Vibrate(包括3D Touch 中 Peek 震动等)
  • 国产Type-C PD芯片—接口快充取电芯片
  • pytorch学习6-非线性变换(ReLU和sigmoid)
  • 详解Keras3.0 Models API: Whole model saving loading
  • Spring Cloud Gateway 网关的基础使用
  • 小米手机锁屏时间设置为永不休眠_手机不息屏_保持亮屏
  • lightdb plorasql集合类型新增可变数组
  • 算法--最短路
  • Linux 定时任务备份MySQL数据库
  • 查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
  • 外观模式 rust和java的实现
  • uniapp-hubildx配置
  • Nginx基础篇:Nginx搭建、Nginx反向代理、文件服务器部署配置。
  • 什么是TDR(威胁检测与响应)
  • 30、pytest入门内容回顾
  • 2023年 - 我的程序员之旅和成长故事
  • JMH性能测试
  • 超完整的mysql安装配置方法(包含idea和navicat连接mysql,并实现建表)
  • 通过仿真理解完整的阵列信号噪声模型
  • 问题:数组对象去重
  • 前端:让一个div悬浮在另一个div之上
  • 千锋 Vue 详细笔记整理
  • uniapp实战 —— 骨架屏
  • 【数据仓库-10】-- 数据仓库、数据湖和湖仓一体对比
  • 单臂路由与三层交换机
  • 免费的数据采集软件,最新免费的几款数据采集软件【2024】
  • nodejs微信小程序+python+PHP北京地铁票务APP-计算机毕业设计推荐 -安卓
  • zabbix 进阶
  • 【性能测试】Jmeter 配置元件(一):计数器