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

python打卡day36

复习日

仔细回顾一下神经网络到目前的内容,没跟上进度的补一下进度

  • 作业:对之前的信贷项目,利用神经网络训练下,尝试用到目前的知识点让代码更加规范和美观。
  • 探索性作业(随意完成):尝试进入nn.Module中,查看他的方法

数据预处理

import pandas as pd    #用于数据处理和分析,可处理表格数据。
import numpy as np     #用于数值计算,提供了高效的数组操作。
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
import warnings
warnings.filterwarnings("ignore")data = pd.read_csv('data.csv')    #读取数据# 先筛选字符串变量 
discrete_features = data.select_dtypes(include=['object']).columns.tolist()
# Home Ownership 标签编码
home_ownership_mapping = {'Own Home': 1,'Rent': 2,'Have Mortgage': 3,'Home Mortgage': 4
}
data['Home Ownership'] = data['Home Ownership'].map(home_ownership_mapping)# Years in current job 标签编码
years_in_job_mapping = {'< 1 year': 1,'1 year': 2,'2 years': 3,'3 years': 4,'4 years': 5,'5 years': 6,'6 years': 7,'7 years': 8,'8 years': 9,'9 years': 10,'10+ years': 11
}
data['Years in current job'] = data['Years in current job'].map(years_in_job_mapping)# Purpose 独热编码,记得需要将bool类型转换为数值
data = pd.get_dummies(data, columns=['Purpose'])
data2 = pd.read_csv("data.csv") # 重新读取数据,用来做列名对比
list_final = [] # 新建一个空列表,用于存放独热编码后新增的特征名
for i in data.columns:if i not in data2.columns:list_final.append(i) # 这里打印出来的就是独热编码后的特征名
for i in list_final:data[i] = data[i].astype(int) # 这里的i就是独热编码后的特征名# Term 0 - 1 映射
term_mapping = {'Short Term': 0,'Long Term': 1
}
data['Term'] = data['Term'].map(term_mapping)
data.rename(columns={'Term': 'Long Term'}, inplace=True) # 重命名列
continuous_features = data.select_dtypes(include=['int64', 'float64']).columns.tolist()  #把筛选出来的列名转换成列表# 连续特征用中位数补全
for feature in continuous_features:     mode_value = data[feature].mode()[0]            #获取该列的众数。data[feature].fillna(mode_value, inplace=True)          #用众数填充该列的缺失值,inplace=True表示直接在原数据上修改。X = data.drop(['Credit Default'], axis=1)  # 特征,axis=1表示按列删除
y = data['Credit Default'] # 标签# 按照8:2划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  # 80%训练集,20%测试集# 归一化
scaler = MinMaxScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

数据转换为张量,反正是二分类,输出0-1的浮点数问题也不大,主要是后面BCEWithLogitsLoss要求预测值和标签数据类型必须一致,这里就全整成tensorFloat32省事了

import torch
import torch.nn as nn
import torch.optim as optim# 将数据转换为PyTorch张量
X_train = torch.FloatTensor(X_train)
y_train = torch.FloatTensor(y_train.to_numpy())
X_test = torch.FloatTensor(X_test)
y_test = torch.FloatTensor(y_test.to_numpy())

网络定义及训练

class CreditRiskModel(nn.Module):def __init__(self, input_dim):super().__init__()# 输入层 → 隐藏层1self.fc1 = nn.Linear(input_dim, 32)self.relu1 = nn.ReLU()self.drop = nn.Dropout(0.2)  # 随机丢弃20%神经元,防止过拟合# 隐藏层2self.fc2 = nn.Linear(32, 16)self.relu2 = nn.ReLU()# 输出层self.fc3 = nn.Linear(16, 1)def forward(self, x):out = self.fc1(x)out = self.relu1(out)out = self.drop(out)out = self.fc2(out)out = self.relu2(out)out = self.fc3(out)return out model = CreditRiskModel(input_dim=len(data.columns) - 1) # 特征数就是输入维度# 损失函数用BCEWithLogitsLoss,内置Sigmoid和数值稳定
criterion = nn.BCEWithLogitsLoss()
# Adam优化器
optimizer = optim.Adam(model.parameters(), lr=0.01)num_epochs = 400 # 训练的轮数# 用于存储每个 epoch 的损失值,用于后续绘制训练曲线
losses = []for epoch in range(num_epochs): # range是从0开始,所以epoch是从0开始# 前向传播outputs = model(X_train).squeeze()  # 从 [6000, 1] → [6000],保证和标签的维度一致loss = criterion(outputs, y_train) # output是模型预测值,y_train是真实标签# 反向传播和优化optimizer.zero_grad() #梯度清零,因为PyTorch会累积梯度,所以每次迭代需要清零,梯度累计是那种小的bitchsize模拟大的bitchsizeloss.backward() # 反向传播计算梯度optimizer.step() # 更新参数# 记录损失值losses.append(loss.item()) # loss.item() 将单值张量转为 Python 的 float 或 int,才能添加到列表里面# 打印训练信息if (epoch + 1) % 20 == 0: # range是从0开始,所以epoch+1是从当前epoch开始,每20个epoch打印一次print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')

loss可视化

import matplotlib.pyplot as plt
# 可视化损失曲线
plt.plot(range(num_epochs), losses)
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.title('Training Loss over Epochs')
plt.show()

曲线有点小毛刺,但总归还是收敛了的

推理

# 评估模型
model.eval() # 设置模型为评估模式
with torch.no_grad(): # torch.no_grad()的作用是禁用梯度计算,可以提高模型推理速度outputs = model(X_test)  # 对测试数据进行前向传播,获得预测结果_, predicted = torch.max(outputs, 1) # torch.max(outputs, 1)返回每行的最大值和对应的索引correct = (predicted == y_test).sum().item() # 计算预测正确的样本数accuracy = correct / y_test.size(0)print(f'测试集准确率: {accuracy * 100:.2f}%')# ----------------------------------------------
测试集准确率: 70.60%

 准确率不太高,可能训练的epoch还是少了点

收获心得:

1、终于搞懂数据转换成张量的时候要不要加上to_numpy()了,先看看数据类型,DataFrame或者Series就转换不过去,先搞成数组或者列表(很幽默啊,划分数据集后特征和标签的数据类型居然不一样)

print(type(X_train))
print(type(X_test))
print(type(y_train))
print(type(y_test))# ---------------------------------------
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'pandas.core.series.Series'>
<class 'pandas.core.series.Series'>

2、构造神经网络的时候,输入层的输入维度没注意太多,因为处理前数据有16个特征,所以设置的16,一直报错,然后想起来独热编码之后导致了特征膨胀,变成了31个特征。这里的处理是将输入层的维度就设置成了31,但如果是大型数据集,特征更多了之后这样显然不太合适,还没想到处理办法

@浙大疏锦行

相关文章:

python打卡day36

复习日 仔细回顾一下神经网络到目前的内容&#xff0c;没跟上进度的补一下进度 作业&#xff1a;对之前的信贷项目&#xff0c;利用神经网络训练下&#xff0c;尝试用到目前的知识点让代码更加规范和美观。探索性作业&#xff08;随意完成&#xff09;&#xff1a;尝试进入nn.M…...

8.Java 8 日期时间处理:从 Date 的崩溃到 LocalDate 的优雅自救​

一、被 Date 逼疯的程序员&#xff1a;那些年踩过的坑​ 还记得刚学 Java 时被Date支配的恐惧吗&#xff1f;​ 想获取 "2023 年 10 月 1 日"&#xff1f;new Date(2023, 9, 1)—— 等等&#xff0c;为什么月份是 9&#xff1f;哦对&#xff0c;Java 的月份从 0 开…...

基于Python的全卷积网络(FCN)实现路径损耗预测

以下是一份详细的基于Python的全卷积网络(FCN)实现路径损耗预测的技术文档。本方案包含理论基础、数据生成、模型构建、训练优化及可视化分析,代码实现约6000字。 基于全卷积网络的无线信道路径损耗预测系统 目录 问题背景与需求分析系统架构设计合成数据生成方法全卷积网络…...

【ubuntu】安装NVIDIA Container Toolkit

目录 安装NVIDIA Container Toolkit 安装依赖 添加密钥和仓库 配置中国科技大学&#xff08;USTC&#xff09; 镜像 APT 源 更新 APT 包列表 安装 NVIDIA Container Toolkit 验证安装 重启docker 起容器示例命令 【问题】如何在docker中正确使用GPU&#xff1f; 安装…...

Paimon和Hive相集成

Flink版本1.17 Hive版本3.1.3 1、Paimon集成Hive 将paimon-hive-connector.jar复制到auxlib中&#xff0c;下载链接Index of /groups/snapshots/org/apache/https://repository.apache.org/snapshots/org/apache/paimon/ 通过flink进入查看paimon /opt/softwares/flink-1.…...

精益数据分析(74/126):从愿景到落地的精益开发路径——Rally的全流程管理实践

精益数据分析&#xff08;74/126&#xff09;&#xff1a;从愿景到落地的精益开发路径——Rally的全流程管理实践 在创业的黏性阶段&#xff0c;如何将抽象的愿景转化为可落地的产品功能&#xff1f;如何在快速迭代中保持战略聚焦&#xff1f;今天&#xff0c;我们通过Rally软…...

HarmonyOS 鸿蒙应用开发进阶:深入理解鸿蒙跨设备互通机制

鸿蒙跨设备互通&#xff08;HarmonyOS Cross-Device Collaboration&#xff09;是鸿蒙系统分布式能力的重要体现&#xff0c;通过创新的分布式软总线技术&#xff0c;实现了设备间的高效互联与能力共享。本文将系统性地解析鸿蒙跨设备互通的技术架构、实现原理及开发实践。 跨设…...

Vue.js教学第十五章:深入解析Webpack与Vue项目实战

Webpack 与 Vue 项目详解 在现代前端开发中,Webpack 作为最流行的模块打包工具之一,对于 Vue 项目的构建和优化起着至关重要的作用。本文将深入剖析 Webpack 的基本概念、在 Vue 项目中的应用场景,并详细讲解常用的 Webpack loaders 和 plugins 的配置与作用,同时通过实例…...

深入浅出 Python Testcontainers:用容器优雅地编写集成测试

在现代软件开发中&#xff0c;自动化测试已成为敏捷开发与持续集成中的关键环节。单元测试可以快速验证函数或类的行为是否符合预期&#xff0c;而集成测试则确保多个模块协同工作时依然正确。问题是&#xff1a;如何让集成测试可靠、可重复且易于维护&#xff1f; 这时&#…...

Cmake编译gflags过程记录和在QT中测试

由于在QT中使用PaddleOCR2.8存在这样那样的问题&#xff0c;查找貌似是gflags相关问题导致的&#xff0c;因此从头开始按相关参考文章编译一遍gflags源码&#xff0c;测试结果表明Qt5.14.2中使用MSVC2017X64编译器运行的QTgflags项目是正常。 详细编译步骤如下&#xff1a; 1、…...

项目中Warmup耗时高该如何操作处理

1&#xff09;项目中Warmup耗时高该如何操作处理 2&#xff09;如何在卸载资源后Untracked和Other的内存都回收 3&#xff09;总Triangles的值是否包含了通过GPU Instancing画的三角形 4&#xff09;有没有用Lua来修复虚幻引擎中对C代码进行插桩Hook的方案 这是第432篇UWA技术知…...

制作一款打飞机游戏53:子弹样式

现在&#xff0c;我们有一个小程序可以发射子弹&#xff0c;但这些子弹并不完美&#xff0c;我们稍后会修复它们。 子弹模式与目标 在开始之前&#xff0c;我想修正一下&#xff0c;因为我观察到在其他射击游戏中有一个我想复制的简单行为。我们有静态射击、瞄准射击和快速射击…...

Windows磁盘无法格式化及磁盘管理

简述&#xff1a;D盘使用了虚拟分区&#xff0c;结果导致无法格式化。 一、无法格式化磁盘 因为以前划分C盘的时候&#xff0c;空间划小了&#xff0c;所以在下载一些程序的依赖包之后爆红。当我想要把D盘的空间分给C盘时&#xff0c;发现D盘无法格式化。在网上没有找到合适的…...

每日算法 -【Swift 算法】Z 字形变换(Zigzag Conversion)详解与实现

Swift | Z 字形变换&#xff08;Zigzag Conversion&#xff09;详解与实现 &#x1f9e9; 题目描述 给定一个字符串 s 和一个行数 numRows&#xff0c;请按照从上往下、再从下往上的“Z”字形排列这个字符串&#xff0c;并按行输出最终结果。例如&#xff1a; 输入&#xff…...

Docker运维-5.3 配置私有仓库(Harbor)

1. harbor的介绍 Harbor(港湾)&#xff0c;是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器。以前的镜像私有仓库采用官方的 Docker Registry&#xff0c;不便于管理镜像。 Harbor 是由 VMWare 在 Docker Registry 的基础之上进行了二次封装&#xff0c;加进去了很…...

day 36

利用前面所学知识&#xff0c;对之前的信贷项目&#xff0c;利用神经网络训练 # 先运行之前预处理好的代码 import pandas as pd import pandas as pd #用于数据处理和分析&#xff0c;可处理表格数据。 import numpy as np #用于数值计算&#xff0c;提供了高效的数组…...

mybatis-plus使用记录

MyBatis-Plus 学习笔记 一、 快速入门 MyBatis-Plus (MP) 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 1. 引入 Maven 依赖 要使用 MyBatis-Plus&#xff0c;首先需要在项目的 pom.xml 文件中引入相…...

Mcu_Bsdiff_Upgrade

系统架构 概述 MCU BSDiff 升级系统通过使用二进制差分技术&#xff0c;提供了一种在资源受限的微控制器上进行高效固件更新的机制。系统不传输和存储完整的固件映像&#xff0c;而是只处理固件版本之间的差异&#xff0c;从而显著缩小更新包并降低带宽要求。 该架构遵循一个…...

有监督学习——决策树

任务 1、基于iris_data.csv数据&#xff0c;建立决策树模型&#xff0c;评估模型表现; 2、可视化决策树结构; 3、修改min_samples_leaf参数&#xff0c;对比模型结果 代码工具&#xff1a;jupyter notebook 参考资料 20.23 决策树&#xff08;1&#xff09;_哔哩哔哩_bil…...

华为OD机试真题——启动多任务排序(2025B卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

2025 B卷 200分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…...

AWS云与第三方通信最佳实践:安全、高效的数据交互方案

引言 在当今的云计算时代,企业经常需要在AWS云环境中存储和处理数据,同时还需要与第三方应用或服务进行数据交互。如何安全、高效地实现这种通信是许多企业面临的挑战。本文将详细探讨几种AWS云与第三方通信的方案,并分析它们的优缺点,帮助您为自己的业务场景选择最佳解决…...

Ubuntu Server 24 设置 WiFi 网络的方案

一、配置流程 1. 确认无线网卡信息 首先需明确无线网卡接口名称及当前连接状态&#xff1a; ip link show # 查看网络接口&#xff08;寻找状态为 "UP" 的无线接口&#xff0c;如 wlan0、wlx* 或 wlp1s0&#xff09; iwconfig # 确认无线网…...

【redis】redis和hiredis的基本使用

总结&#xff1a; 介绍了一下redis和hiredis的安装步骤&#xff0c;用一个简单的demo演示了使用redis的基本过程。 启动redis步骤 1、下载redis&#xff1a;https://github.com/redis/redis 2、编译命令&#xff1a;make 3、编译产物&#xff1a;libredis.a&#xff08;静…...

大模型时代,Python 近红外光谱与 Transformer 模型:学习的必要性探究

在当下大语言模型盛行的时代&#xff0c;各类新技术如潮水般不断涌现&#xff0c;让人应接不暇。身处这样的浪潮之中&#xff0c;不少人心中都会泛起疑问&#xff1a;Python 近红外光谱和 Transformer 模型还有学习的必要性吗&#xff1f;今天&#xff0c;就让我们深入探讨一番…...

产品经理常用术语大全

作为一名产品经理&#xff0c;不仅需要具备跨领域的知识和技能&#xff0c;还需要熟练掌握一系列专业术语&#xff0c;以便更有效地沟通、规划和执行产品开发过程中的各项任务。以下是一篇详细介绍产品经理日常工作中常见术语的文章&#xff0c;旨在帮助新手快速入门&#xff0…...

梯度优化提示词:精准引导AI分类

基于梯度优化的提示词工程方法,通过迭代调整提示词的嵌入向量,使其能够更有效地引导模型做出正确分类。 数据形式 训练数据 train_data 是一个列表,每个元素是一个字典,包含两个键: text: 需要分类的文本描述label: 对应的标签(“冲动"或"理性”)示例数据: …...

AUTOSAR 运行时环境 (RTE)

目录 往期推荐 什么是运行时环境&#xff1f; AUTOSAR 中的运行时环境 (RTE) RTE 的应用 RTE 的生成 关于RTE API的一些信息 RTE生成后文件之间的关系 往期推荐 2025汽车行业新宠&#xff1a;欧企都在用的工具软件ETAS工具链自动化实战指南&#xff1c;一&#xff1e;ET…...

Bolt.new:重塑 Web 开发格局的 AI 利器

根据 Menlo Ventures 2024 年的调查&#xff0c;在主流 AI 应用场景中&#xff0c;AI 编程工具的采用率以 51% 位居榜首&#xff0c;代码生成成为最易落地且受欢迎的场景。科技巨头谷歌 CEO Sundar Pichai 在 2024 年 10 月财报会议上透露&#xff0c;公司超四分之一的新代码由…...

RK3588 RKNN ResNet50推理测试

RK3588 RKNN ResNet50推理测试 一、背景二、性能数据三、操作步骤3.1 安装依赖3.2 安装rknn-toolkit,更新librknnrt.so3.3 下载推理图片3.4 生成`onnx`模型转换脚本3.5 生成rknn模型3.6 运行rknn模型一、背景 在嵌入式设备上进行AI推理时,我们面临着算力有限、功耗敏感等挑战…...

SQLMesh 宏操作符详解:提升 SQL 查询的灵活性与效率

SQLMesh 提供了一系列强大的宏操作符&#xff08;如 WITH、JOIN、WHERE 等&#xff09;&#xff0c;用于动态构建 SQL 查询。这些操作符不仅简化了复杂查询的编写&#xff0c;还提高了代码的可读性和可维护性。本文将深入探讨这些操作符的使用场景、语法及实际案例&#xff0c;…...