基于python的BP神经网络红酒品质分类预测模型

1 导入必要的库

import pandas as pd  
import numpy as np  
import matplotlib.pyplot as plt  
from sklearn.model_selection import train_test_split  
from sklearn.preprocessing import LabelEncoder  
from tensorflow.keras.models import Sequential  
from tensorflow.keras.layers import Dense  
from tensorflow.keras.callbacks import EarlyStopping  
from sklearn.metrics import classification_report, confusion_matrix
# 忽略Matplotlib的警告(可选)  
import warnings  
warnings.filterwarnings("ignore") 
# 设置中文显示和负号正常显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

2 数据加载与预处理

# 读取数据  
df = pd.read_csv('train.csv')  # 处理缺失值(这里假设我们删除含有缺失值的行)  
df.dropna(inplace=True)  # 处理重复值(这里选择删除重复的行)  
df.drop_duplicates(inplace=True)  # 将'wine types'列的文本转换为数值  
df['wine types'] = df['wine types'].map({'red': 1, 'white': 2})    
# 假设'quality'是我们要预测的标签  
X = df.drop('quality', axis=1)  
y = df['quality']

3 数据探索

# 选择绘制特征数据的折线图
X_columns_to_plot = X.columnsdf_plot = df[X_columns_to_plot]  df_plot.plot(subplots=True, figsize=(15, 15))  
plt.tight_layout()  
plt.show()

图 3-1

4 BP神经网络模型构建

import tensorflow as tf  
from tensorflow.keras.models import Sequential  
from tensorflow.keras.layers import Dense  
from sklearn.model_selection import train_test_split  
from sklearn.preprocessing import StandardScaler  # 分离特征和标签  
X = df.drop('quality', axis=1)  
y = df['quality']  # 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  # 特征缩放  
scaler = StandardScaler()  
X_train_scaled = scaler.fit_transform(X_train)  
X_test_scaled = scaler.transform(X_test)  # 构建模型  
model = Sequential([  Dense(64, activation='relu', input_shape=(X_train_scaled.shape[1],)),  Dense(32, activation='relu'),  Dense(10, activation='softmax')  # 假设有10个类别,根据实际情况调整  
])  # 编译模型  
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])  # 训练模型  
history = model.fit(X_train_scaled, y_train, epochs=100, validation_split=0.2, verbose=1)

图 4-1

5 训练评估可视化

# 绘制训练和验证的准确率与损失  
plt.figure(figsize=(12, 6))  
plt.subplot(1, 2, 1)  
plt.plot(history.history['accuracy'], color='#B0D5DF',label='Training Accuracy')  
plt.plot(history.history['val_accuracy'],  color='#1BA784',label='Validation Accuracy')  
plt.title('Training and Validation Accuracy')  
plt.legend()  plt.subplot(1, 2, 2)  
plt.plot(history.history['loss'],  color='#D11A2D',label='Training Loss')  
plt.plot(history.history['val_loss'], color='#87723E', label='Validation Loss')  
plt.title('Training and Validation Loss')  
plt.legend()  
plt.show()

图 5-1 过拟合

        成功过拟合了,其实早有预料,我手里的数据集都挺顽固的,训练效果都不好。

6 正则化

        这里采用L2正则化

import tensorflow as tf  
from tensorflow.keras.models import Sequential  
from tensorflow.keras.layers import Dense 
from tensorflow.keras.regularizers import l2  
from sklearn.model_selection import train_test_split  
from sklearn.preprocessing import StandardScaler  # 分离特征和标签  
X = df.drop('quality', axis=1)  
y = df['quality']  # 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  # 特征缩放  
scaler = StandardScaler()  
X_train_scaled = scaler.fit_transform(X_train)  
X_test_scaled = scaler.transform(X_test)  # 构建模型,添加L2正则化  
model = Sequential([    Dense(64, activation='relu', input_shape=(X_train_scaled.shape[1],), kernel_regularizer=l2(0.01)),  # 对第一个Dense层的权重添加L2正则化  Dense(64, activation='relu', kernel_regularizer=l2(0.01)),  # 对第二个Dense层的权重也添加L2正则化  Dense(10, activation='softmax')  # 输出层,假设是多分类问题  
])  # 编译模型  
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])  # 训练模型  
history = model.fit(X_train_scaled, y_train, epochs=100, validation_split=0.2, verbose=1)
# 绘制训练和验证的准确率与损失  
plt.figure(figsize=(12, 6))  
plt.subplot(1, 2, 1)  
plt.plot(history.history['accuracy'], color='#B0D5DF',label='Training Accuracy')  
plt.plot(history.history['val_accuracy'],  color='#1BA784',label='Validation Accuracy')  
plt.title('Training and Validation Accuracy')  
plt.legend()  plt.subplot(1, 2, 2)  
plt.plot(history.history['loss'],  color='#D11A2D',label='Training Loss')  
plt.plot(history.history['val_loss'], color='#87723E', label='Validation Loss')  
plt.title('Training and Validation Loss')  
plt.legend()  
plt.show()

图 6-1 

        这就不错了。

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

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

相关文章

NET8部署Kestrel服务HTTPS深入解读TLS协议之Certificate证书

Certificate证书 Certificate称为数字证书。数字证书是一种证明身份的电子凭证,它包含一个公钥和一些身份信息,用于验证数字签名和加密通信。数字证书在网络通信、电子签名、认证授权等场景中都有广泛应用。其特征如下: 由权威机构颁发&…

跟李沐学AI:池化层

目录 二维最大池化 填充、步幅和多个通道 平均池化层 池化层总结 二维最大池化 返回滑动窗口中的最大值。 图为池化窗口形状为 22 的最大池化层。着色部分是第一个输出元素,以及用于计算这个输出的输入元素: max(0,1,3,4)4。池化层与卷积层类似,不断…

Spark核心知识要点(八)Shuffle配置调优

1、Shuffle优化配置 -spark.shuffle.file.buffer 默认值:32k参数说明:该参数用于设置shuffle write task的BufferedOutputStream的buffer缓冲大小。将数据写到磁盘文件之前,会先写入buffer缓冲中,待缓冲写满之后,才会…

Linux中,MySQL的用户管理

MySQL库中的表及其作用 user表 User表是MySQL中最重要的一个权限表,记录允许连接到服务器的帐号信息,里面的权限是全局级的。 db表和host表 db表和host表是MySQL数据中非常重要的权限表。db表中存储了用户对某个数据库的操作权限,决定用户…

单元测试的最佳实践

整体架构 合适的架构可以提升可测试性。比如菱形对称架构的模块化和解耦特性使得系统各个部分可以独立进行单元测试。这不仅提高了测试的效率,还能够减少测试的依赖性,提高测试准确性。 代码设计 代码设计和可测试性有密切关联。强烈建议一个方法的代码行…

Android 15 适配整理——实践版

背景 谷歌发布Android 15后,国内的手机厂商迅速行动,开始了新系统的适配工作。小米、OPPO、vivo和联想等金标联盟成员联合发布了适配公告,督促APP开发者在2024年8月31日前完成适配工作,否则将面临搜索标签提示、应用降级、分机型…

JavaWeb笔记_JSTL标签库JavaEE三层架构案例

一.JSTL标签库 1.1 JSTL概述 JSTL(jsp standard tag library):JSP标准标签库,它是针对EL表达式一个扩展,通过JSTL标签库与EL表达式结合可以完成更强大的功能 JSTL它是一种标签语言,JSTL不是JSP内置标签 JSTL标签库主要包含: ****核心标签 格式化标签 …

【算法】插入区间

难度:中等 题目: 给你一个 无重叠的 ,按照区间起始端点排序的区间列表 intervals,其中 intervals[i] [starti, endi] 表示第 i 个区间的开始和结束,并且 intervals 按照 starti 升序排列。同样给定一个区间 newInte…

leetcode面试题17.最大子矩阵

sooooooo long没刷题了,汗颜 题目链接:leetcode面试题17 1.题目 给定一个正整数、负整数和 0 组成的 N M 矩阵,编写代码找出元素总和最大的子矩阵。 返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和…

Android平台轻量级RTSP服务模块二次封装版调用说明

技术背景 在前面的blog,我们发布了Android平台轻量级RTSP服务模块的技术对接说明,好多开发者希望,更黑盒的对接轻量级RTSP服务这块,专注于自身业务逻辑。为此,我们针对Android平台轻量级RTSP服务模块,做了…

解析capl文件生成XML Test Module对应的xml工具

之前一直用的CAPL Test Module来写代码,所有的控制都是在MainTest()函数来实现的,但是有一次,代码都写完了,突然需要用xml的这种方式来实现,很突然,之前也没研究过,整理这个xml整的一身汗&#…

【Nacos】微服务注册在不同的group上,支持跨group服务发现,二次开发

Nacos具备微服务注册和发现,以及配置管理的功能,本文详情描述【注册和发现】的原理,以及基本使用,包括如何进行跨group注册和发现。 一、Nacos配置spring:cloud:nacos:discovery:server-addr: nacosIP地址:8849namespace: devgro…

无人机飞行姿态俯仰、横滚、偏航、油门详解

无人机飞行姿态涉及其在空中的空间位置和方向。飞行姿态控制的精确性和稳定性是无人机实现自主飞行和完成任务的关键。无人机的飞行姿态主要通过控制其横滚、俯仰和偏航来实现。以下是对无人机飞行姿态的详细解释: 1. 横滚(Roll) 定义&…

vue中的nexttrick

Vue.js 是一个用于构建用户界面的渐进式框架,它允许开发者通过声明式的数据绑定来构建网页应用。在 Vue 中,nextTick 是一个非常重要的 API,它用于延迟回调的执行,直到下次 DOM 更新循环之后。 为什么使用 nextTick? …

自定义维度映射:Kylin Cube设计的高级玩法

自定义维度映射:Kylin Cube设计的高级玩法 在数据仓库领域,Apache Kylin以其高性能的分析能力而闻名。Kylin通过构建多维数据立方体(Cube)来实现对大数据集的快速查询。Cube设计中的维度映射是优化查询性能的关键环节。本文将探讨…

vue3前端开发-小兔鲜项目-登录组件的开发表单验证

vue3前端开发-小兔鲜项目-登录组件的开发表单验证&#xff01;现在开始写登录页面的内容。首先这一次完成基础的首页按钮点击跳转&#xff0c;以及初始化一些简单的表单的输入验证。后期还会继续完善内容。 1&#xff1a;首先还是准备好login页面的组件代码内容。 <script …

企业风险管理的智能监控:Kompas.ai如何预警潜在风险

在企业运营中&#xff0c;风险管理是确保业务连续性和稳健发展的关键环节。随着技术的进步&#xff0c;智能风险管理成为预防损失和识别潜在风险的重要手段。Kompas.ai&#xff0c;作为一款先进的智能监控工具&#xff0c;正通过数据分析和模式识别技术&#xff0c;帮助企业实现…

《华为数据之道》读书笔记六---面向自助消费的数据服务建设

七、从结果管理到过程管理&#xff0c; 从能“看”到能“管” 1、数据赋能业务运营 数字化运营旨在利用数字化技术获取、管理和分析数据&#xff0c;从而为企业的战略决策与业务运营提供可量化的、科学的支撑。 数字化运营归根结底是运营&#xff0c;旨在推动运营效率与能力的…

【第三天】计算机网络 HTTP请求中常见的状态码 什么是强缓存和协商缓存

HTTP请求中常见的状态码 前面不是说过了HTTP的请求报文和响应报文吗&#xff1f; 状态码不就是响应报文里才有的吗。 同时响应报文的第一行包含了协议版本&#xff0c;状态码以及描述。 状态码有以下这几个类别&#xff1a; 状态码类别含义1XXinformation(信息性状态码&#…

基站光伏直流叠光能效管理方案

安科瑞 华楠 基站现状和趋势 5G基站是专门提供5G网络服务的公用移动通信基站。5G基站主要用于提供5G空口协议功能&#xff0c;支持与用户设备、核心网之间的通信。按照逻辑功能划分&#xff0c;5G基站可分为5G基带单元与5G射频单元&#xff0c;二者之间可通过CPRI或eCPRI接口…