python3+TensorFlow 2.x(二) 回归模型
目录
回归算法
1、线性回归 (Linear Regression)
一元线性回归举例
2、非线性回归
3、回归分类
回归算法
回归算法用于预测连续的数值输出。回归分析的目标是建立一个模型,以便根据输入特征预测目标变量,在使用 TensorFlow 2.x 实现线性回归模型时,通常的步骤包括数据预处理、模型构建、训练和评估。
1、线性回归 (Linear Regression)
概述:线性回归是最基本的回归算法之一,假设目标变量与输入特征之间存在线性关系。
模型形式:y=+
+...+
+ϵ,其中 y 是目标变量,x 是特征,βi是权重,ϵ 是误差项。
一元线性回归举例
实现步骤:
导入必要的库。
生成或加载数据预处理:使用生成的线性数据集。生成了一个简单的线性关系 y = 2x + 1,并加上了一些噪声来模拟实际的观测数据。np.linspace 生成 100 个从 0 到 10 的点,np.random.normal 用于生成随机噪声。数据处理:使用 X.reshape(-1, 1) 将 X 变成二维数组,以适应 TensorFlow 的输入要求。
构建线性回归模型:使用 tf.keras.Sequential 创建一个简单的线性模型。只使用一个 Dense 层来表示线性回归,其中 input_dim=1 指明输入特征的维度为 1,output_dim=1 表示输出只有一个预测值。
编译模型:设置损失函数和优化器。使用了 adam 优化器,这是一个常用且效果不错的优化器。损失函数选择 mean_squared_error,这是回归问题中常见的损失函数。
训练模型:使用训练数据来训练模型。model.fit 方法用于训练模型。设置了 200 个 epoch 和10 的批次大小。
评估模型:通过测试数据评估模型性能。model.evaluate 会返回训练集的损失值,用来评估训练过程中的效果.
预测结果:使用训练好的模型进行预测。使用 matplotlib 绘制训练过程中每个 epoch 的损失变化情况,以便观察模型训练的收敛过程,使用 model.predict 来预测训练集上的输出,然后将预测结果与真实数据一起绘制出来,查看模型的拟合效果
import numpy as np
import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt# 1. 生成数据:y = 2x + 1
np.random.seed(42)
X = np.linspace(0, 10, 100) # 生成100个点,范围是[0, 10]
Y = 2 * X + 1 + np.random.normal(0, 1, X.shape[0]) # y = 2x + 1,加上一些噪声# 2. 数据预处理:将数据转化为TensorFlow的张量(也可以直接使用NumPy数组)
X_train = X.reshape(-1, 1) # 特征,转换成二维数组
Y_train = Y.reshape(-1, 1) # 标签,转换成二维数组# 3. 构建线性回归模型
model = keras.Sequential([keras.layers.Dense(1, input_dim=1) # 只有一个输入特征,输出一个值
])# 4. 编译模型:选择损失函数和优化器
model.compile(optimizer='adam', loss='mean_squared_error')# 5. 训练模型
history = model.fit(X_train, Y_train, epochs=200, batch_size=10, verbose=0)# 6. 评估模型
loss = model.evaluate(X_train, Y_train)
print(f"Final training loss: {loss}")# 7. 绘制训练过程中的损失变化
plt.plot(history.history['loss'])
plt.title('Training Loss Over Epochs')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.show()# 8. 预测结果
Y_pred = model.predict(X_train)# 9. 可视化真实数据和预测结果
plt.scatter(X_train, Y_train, color='blue', label='Actual Data')
plt.plot(X_train, Y_pred, color='red', label='Predicted Line')
plt.title('Linear Regression with TensorFlow 2')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()
2、非线性回归
创建合成数据集:使用 NumPy 生成从 -3 到 3 的 100 个点,并计算对应的 y 值为sin(x) 加上一些噪声。
划分训练集和测试集:使用 train_test_split 将数据集划分为训练集和测试集,比例为 80% 训练,20% 测试。
构建曲线拟合模型:使用 tf.keras.Sequential 创建一个简单的神经网络模型,包含两个隐藏层,每层有 64 个神经元,激活函数为 ReLU,最后一层为输出层。
编译模型:使用 Adam 优化器和均方误差损失函数编译模型。
训练模型:使用 fit 方法训练模型,设置训练轮数为 200,批次大小为 10。
进行预测:使用 predict 方法对测试集进行预测。可视化预测结果,使用 Matplotlib 绘制实际值和预测值的散点图。
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split# 1. 创建合成数据集
np.random.seed(0)
X = np.linspace(-3, 3, 100) # 生成从-3到3的100个点
y = np.sin(X) + np.random.normal(0, 0.1, X.shape) # y = sin(x) + 噪声# 2. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 3. 构建曲线拟合模型
# 将输入数据转换为二维数组
X_train = X_train.reshape(-1, 1)
X_test = X_test.reshape(-1, 1)model = tf.keras.Sequential([tf.keras.layers.Dense(64, activation='relu', input_shape=(1,)), # 隐藏层tf.keras.layers.Dense(64, activation='relu'), # 隐藏层tf.keras.layers.Dense(1) # 输出层
])# 4. 编译模型
model.compile(optimizer='adam', loss='mean_squared_error')# 5. 训练模型
model.fit(X_train, y_train, epochs=200, batch_size=10, verbose=0)# 6. 进行预测
predictions = model.predict(X_test)# 7. 可视化预测结果
plt.figure(figsize=(10, 6))
plt.scatter(X_test, y_test, color='blue', label='Actual Values') # 实际值
plt.scatter(X_test, predictions, color='red', label='Predicted Values') # 预测值
plt.title('Curve Fitting Regression')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.grid()
plt.show()
3、回归分类
import numpy as np
import tensorflow as tf
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification, make_regression
import matplotlib.pyplot as plt# 生成回归数据集
X_reg, y_reg = make_regression(n_samples=1000, n_features=1, noise=10, random_state=42)# 生成分类数据集
X_class, y_class = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, random_state=42)# 划分训练集和测试集
X_reg_train, X_reg_test, y_reg_train, y_reg_test = train_test_split(X_reg, y_reg, test_size=0.2, random_state=42)
X_class_train, X_class_test, y_class_train, y_class_test = train_test_split(X_class, y_class, test_size=0.2, random_state=42)# 创建线性回归模型
model_reg = tf.keras.Sequential([tf.keras.layers.Dense(1, input_shape=(1,)) # 输入特征为 1,输出为 1
])# 编译模型
model_reg.compile(optimizer='adam', loss='mean_squared_error')# 训练模型
model_reg.fit(X_reg_train, y_reg_train, epochs=100, batch_size=32, verbose=1)# 评估模型
loss_reg = model_reg.evaluate(X_reg_test, y_reg_test, verbose=0)
print(f'回归模型测试集损失: {loss_reg:.4f}')# 可视化回归结果
plt.scatter(X_reg, y_reg, color='blue', label='Data points')
plt.scatter(X_reg_test, model_reg.predict(X_reg_test), color='red', label='Predictions')
plt.title('Linear Regression Results')
plt.xlabel('Feature')
plt.ylabel('Target')
plt.legend()
plt.show()# 创建逻辑回归模型
model_class = tf.keras.Sequential([tf.keras.layers.Dense(1, activation='sigmoid', input_shape=(2,)) # 输入特征为 2,输出为 1
])# 编译模型
model_class.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])# 训练模型
model_class.fit(X_class_train, y_class_train, epochs=100, batch_size=32, verbose=1)# 评估模型
loss_class, accuracy_class = model_class.evaluate(X_class_test, y_class_test, verbose=0)
print(f'分类模型测试集损失: {loss_class:.4f}, 测试集准确率: {accuracy_class:.4f}')# 可视化分类数据点
plt.scatter(X_class_train[y_class_train == 0][:, 0], X_class_train[y_class_train == 0][:, 1], color='blue', label='Class 0', alpha=0.5)
plt.scatter(X_class_train[y_class_train == 1][:, 0], X_class_train[y_class_train == 1][:, 1], color='red', label='Class 1', alpha=0.5)# 绘制决策边界
x_min, x_max = X_class[:, 0].min() - 1, X_class[:, 0].max() + 1
y_min, y_max = X_class[:, 1].min() - 1, X_class[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01), np.arange(y_min, y_max, 0.01))
Z = model_class.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)plt.contourf(xx, yy, Z, levels=[0, 0.5, 1], alpha=0.2, colors=['blue', 'red'])
plt.title('Logistic Regression Decision Boundary')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()
plt.show()
make_classification 是 sklearn.datasets 模块中的一个函数,用于生成用于分类的合成数据集。可以通过不同的参数来控制生成数据的特性。
参数解释:n_samples: 生成的样本数量。
n_features: 特征的总数。设置为 2,表示每个样本有 2 个特征。
n_informative: 有效特征的数量,这些特征对分类任务有贡献。设置为 2,表示所有特征都是有效特征。
n_redundant: 冗余特征的数量,这些特征是通过线性组合生成的有效特征。设置为 0,表示没有冗余特征。
n_clusters_per_class: 每个类别的聚类数量。设置为 1,表示每个类别只有一个聚类。
random_state: 随机种子,用于确保结果的可重复性。设置为 42。
make_regression 是 sklearn.datasets 模块中的一个函数,用于生成用于回归的合成数据集。
参数解释:n_samples: 生成的样本数量。
n_features: 特征的总数。比如设置为 1,表示每个样本有 1 个特征。
n_informative: 有效特征的数量,这些特征对目标变量有贡献。比如设置为 1,表示所有特征都是有效特征。
n_targets: 目标变量的数量。默认值为 1,表示生成一个目标变量。
bias: 截距项,表示模型的偏置。可以设置为一个常数,比如 0。
noise: 添加到输出中的噪声的标准差。可以设置为一个浮点数,如 0.1表示添加一定的随机噪声。
random_state: 随机种子,用于确保结果的可重复性。可以设置为一个整数,比如 42。
相关文章:

python3+TensorFlow 2.x(二) 回归模型
目录 回归算法 1、线性回归 (Linear Regression) 一元线性回归举例 2、非线性回归 3、回归分类 回归算法 回归算法用于预测连续的数值输出。回归分析的目标是建立一个模型,以便根据输入特征预测目标变量,在使用 TensorFlow 2.x 实现线性回归模型时&…...

机器人抓取与操作概述(深蓝)——1
工业机器人:① “臂”的形态 ② “手”的形态 ③ 视觉,力和触觉 1 机器人的不同形态 “臂”的形态 “手”的形态 2 常见的操作任务 操作:插入、推和滑 抓取:两指(平行夹爪)抓取、灵巧手抓取 落地-产…...

简单聊聊“DeepSeek”
目录 DeepSeek一夜火爆并受到广泛关注的优势 技术实力与创新 低成本与高效率 开源与免费 市场策略与应用领域 团队与资金优势 行业认可与媒体关注 DeepSeek在推理效率上的特别之处 多头潜在注意力(MLA) 多词元预测(MTP)…...
使用 Docker + Nginx + Certbot 实现自动化管理 SSL 证书
使用 Docker Nginx Certbot 实现自动化管理 SSL 证书 在互联网安全环境日益重要的今天,为站点或应用部署 HTTPS 已经成为一种常态。然而,手动申请并续期证书既繁琐又容易出错。本文将以 Nginx Certbot 为示例,基于 Docker 容器来搭建一个…...

粒子群算法 笔记 数学建模
引入: 如何找到全局最大值:如果只是贪心的话,容易被局部最大解锁定 方法有:盲目搜索,启发式搜索 盲目搜索:枚举法和蒙特卡洛模拟,但是样例太多花费巨量时间 所以启发式算法就来了,通过经验和规…...

【C语言】结构体与共用体深入解析
在C语言中,结构体(struct)和共用体(union)都是用来存储不同类型数据的复合数据类型,它们在程序设计中具有重要的作用。 推荐阅读:操作符详细解说,让你的编程技能更上一层楼 1. 结构体…...
es6.7.1分词器ik插件安装-和head插件连接es特殊配置
es6.7.1分词器ik插件安装-和head插件连接es特殊配置 如果对运维课程感兴趣,可以在b站上、A站或csdn上搜索我的账号: 运维实战课程,可以关注我,学习更多免费的运维实战技术视频 1.查看es6.7.1和es-head安装位置和es插件路径 [ro…...

java求职学习day18
常用的设计原则和设计模式 1 常用的设计原则(记住) 1.1 软件开发的流程 需求分析文档、概要设计文档、详细设计文档、编码和测试、安装和调试、维护和升级 1.2 常用的设计原则 (1)开闭原则(Open Close Principle…...
单链表专题(上)
链表的定义与创建 线性表: 1. 物理结构上不一定是线性的 2. 逻辑结构上一定是线性的 链表是一种物理存储结构上非连续,非顺序的存储结构 链表也是线性表的一种,但是在物理结构上不是连续的 链表是由一个一个的节点组成,需要数…...

【stm32学习】STM32F103相关特性
| 名称 | 缩写 | 频率 | 外部连接 | 功能 | 用途 | 特性 | |--------------------|------|----------------|---------------|------------|--------------|----------------| | 外部高速晶体振荡器 | HSE | 4~16MHz …...

PostGIS笔记:PostgreSQL中表、键和索引的基础操作
创建、查看与删除表 在数据库中创建一个表,使用如下代码: create table streets (id serial not null primary key, name varchar(50));这里的表名是streets,id是主键所以非空,采用serial数据类型,这个数据类型会自动…...

蓝桥杯python语言基础(3)——循环结构
一、for语句 理解range函数 range(start, stop, step) start: 序列开始的数字(默认为0)。stop: 序列结束的数字(不包含stop)。step: 步长(默认为1)。 练习 输出在 l 和 r 之间的所有偶数: pri…...

微服务网关鉴权之sa-token
目录 前言 项目描述 使用技术 项目结构 要点 实现 前期准备 依赖准备 统一依赖版本 模块依赖 配置文件准备 登录准备 网关配置token解析拦截器 网关集成sa-token 配置sa-token接口鉴权 配置satoken权限、角色获取 通用模块配置用户拦截器 api模块配置feign…...

23【进制的理解】
很多人可能听过计算机的最底层是2进制执行,但是原理并不知道,我们今天先不讨论那么复杂的问题,先讨论什么是进制 1910,10并不是1个字符,而是2个字符,也就是说在10进制里面没有“10”这个字符,1…...

jemalloc 5.3.0的tsd模块的源码分析
一、背景 在主流的内存库里,jemalloc作为android 5.0-android 10.0的默认分配器肯定占用了非常重要的一席之地。jemalloc的低版本和高版本之间的差异特别大,低版本的诸多网上整理的总结,无论是在概念上和还是在结构体命名上在新版本中很多都…...

【Convex Optimization Stanford】Lec3 Function
【Convex Optimization Stanford】Lec3 Function 前言凸函数的定义对凸函数在一条线上的限制增值扩充? 一阶条件二阶条件一些一阶/二阶条件的例子象集和sublevel set关于函数凸性的扩展(Jesen Inequality)保持函数凸性的操作非负加权和 & 仿射函数的…...

深入 Rollup:从入门到精通(三)Rollup CLI命令行实战
准备阶段:初始化项目 初始化项目,这里使用的是pnpm,也可以使用yarn或者npm # npm npm init -y # yarn yarn init -y # pnpm pnpm init安装rollup # npm npm install rollup -D # yarn yarn add rollup -D # pnpm pnpm install rollup -D在…...

wangEditor富文本编辑器,Laravel上传图片配置和使用
文章目录 前言步骤1. 构造好前端模版2. 搭建后端存储3. 调试 前言 由于最近写项目需要使用富文本编辑器,使用的是VUE3.0版本所以很多不兼容,实际测试以后推荐使用wangEditor 步骤 构造好前端模版搭建后端存储调试 1. 构造好前端模版 安装模版 模版安…...
chrome源码剖析—进程通信
Chrome 浏览器采用多进程架构(multi-process architecture),这种架构使得每个浏览器标签、扩展、插件、GPU 渲染等都在独立的进程中运行。为了确保不同进程之间的高效通信,Chrome 使用 进程间通信(IPC, Inter-Process …...
JJJ:linux时间子系统相关术语
文章目录 墙上时间内核管理的各种时间无时钟滴答模式(tickless mode 或 no-tick mode)简要介绍具体实现动态时钟滴答 Dynamic Ticks完全无时钟滴答(Full Tickless) nohz sleep单触发模式 oneshot mode 墙上时间 真实世界的真实时…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...