python3+TensorFlow 2.x(二) 回归模型

目录

回归算法

1、线性回归 (Linear Regression)

一元线性回归举例

 2、非线性回归

3、回归分类 


回归算法

回归算法用于预测连续的数值输出。回归分析的目标是建立一个模型,以便根据输入特征预测目标变量,在使用 TensorFlow 2.x 实现线性回归模型时,通常的步骤包括数据预处理、模型构建、训练和评估。

1、线性回归 (Linear Regression)

概述:线性回归是最基本的回归算法之一,假设目标变量与输入特征之间存在线性关系。

模型形式:y=\beta _{0}+\beta _{1}x_{1}+...+\beta _{n}x_{n}+ϵ,其中 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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/8693.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【景区导游——LCA】

题目 代码 #include <bits/stdc.h> using namespace std; using ll long long; const int N 1e5 10; const int M 2 * N; int p[N][18], d[N], a[N]; ll dis[N][18]; //注意这里要开long long int h[N], e[M], ne[M], idx, w[M]; int n, k; void add(int a, int b, …

家政预约小程序11分类展示

目录 1 创建页面2 配置导航菜单3 配置侧边栏选项卡4 配置数据列表5 首页和分类页联动总结 我们现在在首页开发了列表显示服务信息的功能&#xff0c;在点击导航菜单的时候&#xff0c;需要自动跳转到对应的分类&#xff0c;本篇我们介绍一下使用侧边栏选项卡实现分类显示的功能…

CVE-2023-38831 漏洞复现:win10 压缩包挂马攻击剖析

目录 前言 漏洞介绍 漏洞原理 产生条件 影响范围 防御措施 复现步骤 环境准备 具体操作 前言 在网络安全这片没有硝烟的战场上&#xff0c;新型漏洞如同隐匿的暗箭&#xff0c;时刻威胁着我们的数字生活。其中&#xff0c;CVE - 2023 - 38831 这个关联 Win10 压缩包挂…

WPF进阶 | WPF 数据绑定进阶:绑定模式、转换器与验证

WPF进阶 | WPF 数据绑定进阶&#xff1a;绑定模式、转换器与验证 一、前言二、WPF 数据绑定基础回顾2.1 数据绑定的基本概念2.2 数据绑定的基本语法 三、绑定模式3.1 单向绑定&#xff08;One - Way Binding&#xff09;3.2 双向绑定&#xff08;Two - Way Binding&#xff09;…

Java Swing 基础组件详解 [论文投稿-第四届智能系统、通信与计算机网络]

大会官网&#xff1a;www.icisccn.net Java Swing 是一个功能强大的 GUI 工具包&#xff0c;提供了丰富的组件库用于构建跨平台的桌面应用程序。本文将详细讲解 Swing 的基础组件&#xff0c;包括其作用、使用方法以及示例代码&#xff0c;帮助你快速掌握 Swing 的核心知识。 一…

题解 信息学奥赛一本通/AcWing 1118 分成互质组 DFS C++

题目 传送门 AcWing 1118. 分成互质组 - AcWing题库https://www.acwing.com/problem/content/1120/https://www.acwing.com/problem/content/1120/https://www.acwing.com/problem/content/1120/https://www.acwing.com/problem/content/1120/https://www.acwing.com/proble…

论文阅读笔记:VMamba: Visual State Space Model

论文阅读笔记&#xff1a;VMamba: Visual State Space Model 1 背景2 创新点3 方法4 模块4.1 2D选择性扫描模块&#xff08;SS2D&#xff09;4.2 加速VMamba 5 效果5.1 和SOTA方法对比5.2 SS2D和自注意力5.3 有效感受野5.4 扫描模式 论文&#xff1a;https://arxiv.org/pdf/240…

技术总结:FPGA基于GTX+RIFFA架构实现多功能SDI视频转PCIE采集卡设计方案

目录 1、前言工程概述免责声明 3、详细设计方案设计框图SDI 输入设备Gv8601a 均衡器GTX 解串与串化SMPTE SD/HD/3G SDI IP核BT1120转RGBFDMA图像缓存RIFFA用户数据控制RIFFA架构详解Xilinx 7 Series Integrated Block for PCI ExpressRIFFA驱动及其安装QT上位机HDMI输出RGB转BT…

03:Heap代码的分析

Heap代码的分析 1、内存对齐2、Heap_1.c文件代码分析3、Heap_2.c文件代码分析4、Heap_4.c文件代码分析5、Heap_5.c文件代码分析 1、内存对齐 内存对齐的作用是为了CPU更快的读取数据。对齐存储与不对齐存储的情况如下&#xff1a; 计算机读取内存中的数据时是一组一组的读取的…

自动驾驶---苏箐对智驾产品的思考

1 前言 对于更高级别的自动驾驶&#xff0c;很多人都有不同的思考&#xff0c;方案也好&#xff0c;产品也罢。最近在圈内一位知名的自动驾驶专家苏箐发表了他自己对于自动驾驶未来的思考。 苏箐是地平线的副总裁兼首席架构师&#xff0c;同时也是高阶智能驾驶解决方案SuperDri…

Android BitmapShader简洁实现马赛克/高斯模糊(毛玻璃),Kotlin(三)

Android BitmapShader简洁实现马赛克/高斯模糊&#xff08;毛玻璃&#xff09;&#xff0c;Kotlin&#xff08;三&#xff09; 发现&#xff0c;如果把&#xff08;二&#xff09; Android BitmapShader简洁实现马赛克&#xff0c;Kotlin&#xff08;二&#xff09;-CSDN博客 …

【数据结构】 并查集 + 路径压缩与按秩合并 python

目录 前言模板朴素实现路径压缩按秩合并按树高为秩按节点数为秩 总结 前言 并查集的基本实现通常使用森林来表示不同的集合&#xff0c;每个集合用一棵树表示&#xff0c;树的每个节点有一个指向其父节点的指针。 如果一个节点是它自己的父节点&#xff0c;那么它就是该集合的代…

【深度学习入门_机器学习理论】K近邻法(KNN)

本部分主要为机器学习理论入门_K近邻法(KNN)&#xff0c;书籍参考 “ 统计学习方法&#xff08;第二版&#xff09;”。 学习目标&#xff1a; 了解k近邻算法的基本概念、原理、应用&#xff1b;熟悉k近邻算法重要影响要素&#xff1b;熟悉kd树原理与优化应用。 开始本算法之…

深入理解 SQL 中的子查询

文章目录 一、什么是子查询二、子查询的基本语法三、数据准备四、子查询的分类4.1 标量子查询4.2 单行子查询4.3 多行子查询4.4 关联子查询 五、子查询的应用场景5.1 子查询与 WHERE 子句5.2 子查询与 SELECT 子句5.3 子查询与 FROM 子句 六、性能优化与注意事项 本文将深入探讨…

Zookeeper入门部署(单点与集群)

本篇文章基于docker方式部署zookeeper集群&#xff0c;请先安装docker 目录 1. docker初期准备 2.启动zookeeper 2.1 单点部署 2.2 集群部署 3. Linux脚本实现快速切换启动关闭 1. docker初期准备 拉取zookeeper镜像 docker pull zookeeper:3.5.6 如果拉取时间过长&#xf…

【SpringBoot教程】Spring Boot + MySQL + HikariCP 连接池整合教程

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 在前面一篇文章中毛毛张介绍了SpringBoot中数据源与数据库连接池相关概念&#xff0c;今天毛毛张要分享的是关于SpringBoot整合HicariCP连接池相关知识点以及底层源码…

SCRM在企业私域流量与客户管理中的变革之路探索

内容概要 在当今数字化高速发展的时代&#xff0c;SCRM&#xff08;社交客户关系管理&#xff09;作为一种新的管理工具&#xff0c;正逐渐成为企业私域流量管理和客户关系维护的重要基石。它不仅仅是一种软件工具&#xff0c;更是一种整合客户数据和关系管理的全新思维方式。…

实战 | 域环境下通过anydesk进入生产网

视频教程在我主页简介或专栏里 目录&#xff1a; 前言 外网突破 资产扫描与常规漏洞 经典的MS17010漏洞利用&#xff1a; 网络通信设备弱口令&#xff1a; 安全防护设备集群&#xff1a; 域环境渗透 核心生产网渗透 总结 教程下载链接&#xff1a;zkanzz 话不多说&#x…

卡特兰数学习

1&#xff0c;概念 卡特兰数&#xff08;英语&#xff1a;Catalan number&#xff09;&#xff0c;又称卡塔兰数&#xff0c;明安图数。是组合数学中一种常出现于各种计数问题中的数列。它在不同的计数问题中频繁出现。 2&#xff0c;公式 卡特兰数的递推公式为&#xff1a;f(…