- 博客(37)
- 收藏
- 关注
原创 【Python打卡Day37】早停策略和模型权重的保存 @浙大疏锦行
DAY 37 早停策略和模型权重的保存仍然是循序渐进,先复习之前的代码训练集的loss在下降,但是有可能出现过拟合现象:模型过度学习了训练集的信息,导致在测试集上表现不理想。所以很自然的,我们想同步打印测试集的loss,以判断是否出现过拟合现象。
2025-06-13 00:26:43
415
原创 【Python打卡Day36】信贷项目的神经网络训练@浙大疏锦行
2. 隐藏层维度(50)的确定 设计选择:这是可调整的超参数,没有固定答案 选择原则: 通常取输入维度和输出维度的中间值(31 → 50 → 10) 复杂问题可用更大维度(如128、256) 简单问题可用更小维度(如16、32) 经验公式:输入维度和输出维度的几何平均数 $\sqrt{31 \times 10} \approx 17.6$ → 取整为16-20,但实际常取2的幂次(32、64)3. 输出维度(10)的确定 由任务决定: 分类任务:等于类别数量。测试集准确率: 77.07%
2025-06-12 21:13:51
136
原创 【Python打卡Day35】模型可视化与推理@浙大疏锦行
nn.Linear(4, 10) 只定义了 “输入维度是 4,输出维度是 10”,但不知道输入的批量大小和其他维度,比如卷积层需要知道输入的通道数、高度、宽度等信息。Linear-1对应self.fc1 = nn.Linear(4, 10),表明前一层有4个神经元,这一层有10个神经元,每2个神经元之间靠着线相连,所有有4*10个权重参数+10个偏置参数=50个参数。因此,要生成模型摘要(如每层的输出形状、参数数量),必须提供一个示例输入形状,让 PyTorch “运行” 一次模型,从而推断出各层的信息。
2025-06-12 18:46:54
428
原创 【Python打卡Day34】GPU训练和call方法@浙大疏锦行
self.fc1是一个实例化的对象,为什么具备了函数一样的用法,这是因为nn.Linear继承了nn.Module类,nn.Module类中定义了__call__方法。可以注意到,self.fc1 = nn.Linear(4, 10) 此时,是实例化了一个nn.Linear(4, 10)对象,并把这个对象赋值给了MLP的初始化函数中的self.fc1变量。综上,数据传输和各种固定开销的总和,超过了 GPU 在这点计算量上通过并行处理所能节省的时间,导致了 GPU 比 CPU 慢的现象。
2025-06-12 00:06:30
585
原创 【Python打卡Day33】简单神经网络@浙大疏锦行
DAY33默认大家已经有一定的神经网络基础,该部分已经在复试班的深度学习部分介绍完毕,如果没有,你需要自行了解下MLP的概念。你需要知道梯度下降的思想激活函数的作用损失函数的作用优化器神经网络的概念神经网络由于内部比较灵活,所以封装的比较浅,可以对模型做非常多的改进,而不像机器学习三行代码固定。## 🧩* **核心思想:** 模仿人脑神经元的工作方式(尽管是极度简化的版本),从数据中学习复杂的模式和关系。* **结构:**
2025-06-11 16:26:00
848
原创 【Python打卡Day32】官方文档的阅读@浙大疏锦行
插件地址](https://microsoftedge.microsoft.com/addons/detail/%E6%B2%89%E6%B5%B8%E5%BC%8F%E7%BF%BB%E8%AF%91-%E7%BD%91%E9%A1%B5%E7%BF%BB%E8%AF%91%E6%8F%92%E4%BB%B6-pdf%E7%BF%BB%E8%AF%91-/amkbmndfnliijdhojkpoglbnaaahippg)1. 库的官方文档是用来知道这个库有什么方法的。
2025-05-27 16:13:34
742
原创 【Python打卡Day31】文件的拆分与使用@浙大疏锦行
**models/ 目录**:专门存放训练好的模型文件,根据模型保存格式不同,可能是 `.pkl`(Python pickle 格式,常用于保存 sklearn 模型 )、`.h5`(常用于保存 Keras 模型 )、`.joblib` 等。2. 另一个是pylance,用于代码提示和类型检查,这个插件会根据你的代码中的类型注解,给出相应的提示和检查,比如你定义了一个函数,参数类型是int,那么当你传入一个字符串时,它会提示你传入的参数类型不正确。** 这是最基本也是最有价值的一步。
2025-05-27 14:46:16
775
原创 【Python打卡Day30】模块与包的导入@浙大疏锦行
from math import *`:这种方法将 `math` 模块中的所有公开的函数和变量导入到当前的命名空间中,可以直接使用这些函数和变量而无需 `math.` 前缀。学习python本身就是个伪命题,就像你说学习科目一样,你没说清晰你学习的具体科目是什么,也没说学这个科目的哪些章节,毕竟每个科目都很大-----要有以终为始的思想。OpenCV的核心是用C++编写,并且已经编译成二进制文件,编译后的二进制文件可以在不同操作系统上运行,Python中的用户通常不能直接看到方法的源代码。
2025-05-23 22:08:33
764
原创 【Python打卡Day29】类的装饰器@浙大疏锦行
回顾一下,函数的装饰器是 :接收一个函数,返回一个修改后的函数。我们之前是用复用的思想来看装饰器的,换一个角度理解,当你想修改一个函数的时候,可以通过装饰器方法来修改而无需重新定义这个函数。注意到其中的cls.log = log_message 这行代码,他把外部的函数赋值给了类的新定义的属性,这里我们介绍这种写法。2. 在类定义外部定义方法,然后把方法赋值给类的属性---这是一种动态方法,常在装饰器中使用,可以再外部修改类的方法。类也有修饰器,他的逻辑类似:接收一个类,返回一个修改后的类。
2025-05-23 09:18:24
150
原创 【Python打卡Day28】类的定义与方法@浙大疏锦行
所以,当你需要一个语法上存在的代码块,但又暂时不想在其中放入任何实际的逻辑时,pass 就是一个完美的占位符,它告诉解释器:“这里有一个代码块,但它什么也不做。比如self.name,就代表着:“自己的名字”,self等于“自己”,这个self指向类的实例化地址,传入的self.xx是它的属性。作用:定义类的构造函数 __init__,用于初始化实例。普通方法和init方法的差别在于,init方法是类的构造方法,当创建对象时,会自动调用init方法----只要你创建这个类对象了,这个init函数就会执行。
2025-05-22 23:39:56
584
原创 【Python打卡Day27】函数专题2:装饰器@浙大疏锦行
装饰器函数返回的是wrapper函数,所以,在调用装饰器函数的时候,返回的还是wrapper函数,而不是被修饰的函数。4. **替换原函数**:`display_time` 返回 `wrapper` 函数,Python 用这个新函数**覆盖**了原来的 `prime_nums`。可以看到,上述这个写法的时候,prime_nums()没有传入参数,如果函数有参数,那么必须给外部函数传入参数,也就是需要给外部的装饰器函数传入参数。所以装饰器本身就是函数中调用其他函数,实现先拆分函数,再合并函数的功能。
2025-05-19 17:26:33
793
原创 【Python打卡Day26】函数专题1:函数定义与参数 @浙大疏锦行
DAY 26 函数专题1:函数定义与参数到目前为止,我们已经使用了许多Python内置的函数(如 print(), len(), sum(), range())以及各种库(如NumPy, Pandas)提供的函数。这些函数就像是别人为我们准备好的工具。今天,我们将学习如何创建自己的工具——自定义函数。## 函数的定义函数的基本写法如下所示:```python"""Docstring: 描述函数的功能、参数和返回值 (可选但强烈推荐)"""# 函数体: 实现功能的代码# ...
2025-05-19 16:49:35
956
原创 【Python打卡Day25】异常处理机制 @浙大疏锦行
如果找到匹配的,则执行该 except 块中的代码,然后继续执行整个 try-except 结构之后的代码(除非 except 块中又引发了新异常或执行了 return/break/continue 等)。else 块中的代码不会被同一个 try 块的 except 子句捕获。ai写代码的时候,经常会遇到try-except的异常处理模块,这是因为大部分大模型在后训练阶段都是经过强化学习训练的,为了确保结果的正确运行,只有采取 try-except的异常处理模块才能提高模型运行成功的概率。
2025-05-14 15:58:28
719
原创 【Python打卡Day24】元组和OS模块 @浙大疏锦行
os.walk 会首先访问起始目录 (my_project),然后它会选择第一个子目录 (data) 并深入进去,访问 data 目录本身,然后继续深入它的子目录 (processed -> raw)。只有当 data 分支下的所有内容都被访问完毕后,它才会回到 my_project 这一层,去访问下一个子目录 (src),并对 src 分支重复深度优先的探索。当前访问目录 (dirpath): my_project/src # <--- 回溯到 my_project,然后深入到 src。
2025-05-13 23:44:25
312
原创 【Python打卡Day23】管道/流水线工程 @浙大疏锦行
-所以说管道工程最大的优势,是把操作和参数分割开来,只要熟悉整个流程,不需要阅读完整的代码去找对应操作的部分了,只需要在参数列表中设置好参数,就可以完成整个流程。之前我们说有时候有的类不好记忆,用的时候想不起来,简单的函数也可以实现。之所以提到管道,是因为后续你在阅读一些经典的代码的时候,尤其是官方文档,非常喜欢用管道来构建代码,甚至深度学习中也有类似的代码,初学者往往看起来很吃力。在机器学习中,通常会按照一定的顺序对数据进行预处理、特征提取、模型训练和模型评估等步骤,以实现机器学习模型的训练和评估。
2025-05-12 17:42:18
922
原创 【Python打卡Day21】常见的降维算法 @浙大疏锦行
作为降维技术时,其核心目标是找到一个低维特征子空间(即原始特征的线性组合),使得在该子空间中,不同类别的数据点尽可能地分开(类间距离最大化),而同一类别的数据点尽可能地聚集(类内方差最小化)。PCA 的目标是保留数据的全局方差,而 t-SNE 的核心目标是在高维空间中相似的数据点,在降维后的低维空间中也应该保持相似(即彼此靠近),而不相似的点则应该相距较远。它们的目标是找到一个低维子空间,在这个子空间中,不同类别的数据点能够被更好地分离开,或者说,这个低维表示更有利于后续的分类(或回归)任务。
2025-05-11 11:37:30
658
原创 【Python打卡Day20】奇异值分解 @浙大疏锦行
总结:SVD 分解后原始矩阵是等价的,但通过筛选排序靠前的奇异值和对应的向量,我们可以实现降维,保留数据的主要信息,同时减少计算量和噪声影响。模型基于这 10 个特征进行训练。降维与近似:保留前 k 个奇异值后,我们只取 U矩阵的前 k 列(记为 Uk,尺寸为 m×k)、Σ 矩阵的前 k 个奇异值(记为 Σk,尺寸为 k×k)、以及 VT 矩阵的。奇异值分解(SVD)后,原始矩阵 A被分解为 A=UΣVT,这种分解是等价的,意味着通过 U、Σ 和 VT 的乘积可以完全重构原始矩阵 A,没有任何信息损失。
2025-05-10 00:04:15
635
原创 【Python打卡Day19】特征筛选 @浙大疏锦行
保留的特征: ['max_heart_rate_achieved', 'st_depression', 'num_major_vessels', 'sex_male', 'chest_pain_type_atypical angina', 'exercise_induced_angina_yes', 'st_slope_flat', 'st_slope_upsloping', 'thalassemia_fixed defect', 'thalassemia_reversable defect']
2025-05-09 16:14:20
702
原创 【Python打卡Day18】聚类 进一步推断类型 @浙大疏锦行
现在需要给这个簇赋予实际的含义,一般当你赋予实际含义的时候,你需要根据某几个特征来赋予,但是源数据特征很多,如何选择特征呢?**定义**:以**固定性心脏缺陷(fixed defect)为主的高风险群体**。**定义**:以**正常地中海贫血类型为主,ST段有异常的低风险群体**,总体可能是亚健康或轻度异常者。**定义**:以**可逆性缺陷为主的中风险群体**,可能为中期心脏病患者,部分存在 ST 段异常。***【上面这个思路好好学,这是真干货,构造具有价值的特征工程,妥妥的创新点和工作量】***
2025-05-08 21:38:22
668
原创 【Python打卡Day17】聚类一算法 @浙大疏锦行
距离越小,则差异越小。- 轮廓系数越接近 **-1**,表示样本与其所属簇内样本较远,与其他簇较近,聚类效果越差(可能被错误分类)。- **需预先指定 `k` 值**:对簇数量 `k` 的选择敏感,不合适的 `k` 会导致聚类效果较差。- 轮廓系数越接近 **1**,表示样本与其所属簇内其他样本很近,与其他簇很远,聚类效果越好。- **不适合非球形簇**:对非线性可分或形状复杂的簇效果较差,无法处理簇密度不均的情况。- **定义**:DB 指数衡量簇间距离与簇内分散度的比值,用于评估簇的分离度和紧凑度。
2025-05-08 19:39:50
622
原创 【Python打卡Day16】NumPy数组的创建 与 shap值的深入理解 @浙大疏锦行
在后续进行频繁的数学运算时,尤其是在深度学习领域,对 NumPy 数组的理解非常有帮助,因为 PyTorch 或 TensorFlow 中的 Tensor 张量本质上可以视为支持 GPU 加速和自动微分的 NumPy 数组。shap_values[:, :, 0] 的每一行代表的是 一个特定样本每个特征对于预测类别的贡献值(SHAP 值)。值得注意的是,二维数组不一定是正方形(即行数等于列数),它可以是任意的 n * m 形状,其中 n 是行数,m 是列数。
2025-05-06 20:43:45
868
原创 【Python打卡Day15】自定义项目 @浙大疏锦行
基于机器学习模型的地应力反演回归分析。2.1对方向信息进行独热编码。2.2对L1-L7进行标准化。
2025-05-05 23:44:32
224
原创 【Python打卡Day14】shap可解释性分析 @浙大疏锦行
3)特征 A 的边际贡献: 对于每一个特征组合,比较“包含特征 A 的组合的预测值”与“不包含特征 A 但包含其他相同特征的组合的预测值”之间的差异。列表的第 k 个元素是一个 (n_samples, n_features) 的数组,表示所有样本的所有特征对预测类别 k 的贡献。(5)SHAP 值之和: 对于任何一个样本的预测,所有特征的 SHAP 值加起来,再加上基准值,就精确地等于该样本的模型预测值。对 n_samples 个样本中的每一个,计算 n_features 个特征各自的 SHAP 值。
2025-05-03 11:13:57
519
原创 【Python打卡Day13】不平衡数据处理 @浙大疏锦行
在处理类别不平衡的数据集时,标准机器学习算法(如默认的随机森林)可能会过度偏向多数类,导致对少数类的预测性能很差。目的: 在不改变已训练好的模型的情况下,根据业务需求调整精确率(Precision)和召回率(Recall)之间的权衡。总之,修改权重旨在训练一个“更好”的模型,而修改阈值是在一个“已有”模型上调整其表现。当模型错误分类一个具有高权重的少数类样本时,会受到更大的惩罚(更高的损失值)。对于少数类中的每个样本,计算它与少数类中其他样本的距离,得到其k近邻(一般k取5或其他合适的值)。
2025-05-02 16:19:31
703
原创 【Python打卡Day12】启发式算法 @浙大疏锦行
表现好的个体(高验证分)更有机会“繁殖”(它们的参数组合会被借鉴和混合),并可能发生“变异”(参数随机小改动),产生下一代。简单理解: 从一个随机的超参数组合开始。应用感觉: 像一个有点“冲动”的探险家,初期愿意尝试一些看起来不太好的路径(为了跳出局部最优的小山谷),后期则越来越“保守”,专注于在当前找到的好区域附近精细搜索。也就是说,即使搞懂了这段代码,提升也微乎其微,因为你无法对他进行改进(他永远是别人的东西),而且就算背熟悉了他,也对学习其他的方法没什么帮助,即使学完遗传算法学粒子群,也没有帮助。
2025-05-01 23:03:40
964
原创 【Python打卡Day11】 调参:贝叶斯优化与网格搜索 @浙大疏锦行
核心优势: 它不是随机选择下一个点,而是根据先前评估的结果建立一个概率模型(通常是高斯过程),预测哪些参数组合可能产生更好的结果,并据此选择下一个评估点。这使得它在寻找最优解方面通常比随机搜索更高效(用更少的迭代次数达到相似或更好的性能),特别是当模型训练(单次评估)非常耗时的时候。只需要用好调参工具即可。有很多的方式可以实现贝叶斯优化,上面的代码比较简洁美观,贝叶斯优化和网格搜索的代码书写风格高度一致。需要定义参数的搜索空间,与随机搜索类似,当搜索空间非常大时,它通常比网格搜索和随机搜索更有效。
2025-04-30 21:18:27
390
原创 【Python打卡Day10】@浙大疏锦行 机器学习建模
print(f"召回率: {xgb_recall:.4f}")print(f"召回率: {lgb_recall:.4f}")print(f"召回率: {dt_recall:.4f}")print(f"召回率: {rf_recall:.4f}")print(f"F1 值: {xgb_f1:.4f}")print(f"F1 值: {lgb_f1:.4f}")print(f"F1 值: {dt_f1:.4f}")print(f"F1 值: {rf_f1:.4f}")
2025-04-29 20:33:27
829
原创 【Python打卡Day9】@浙大疏锦行
之所以这个函数很有用,是因为它允许我们同时迭代一个序列,并获取每个元素的索引和值。热力图本质上只能对连续值进行绘制,对于数值形的离散值其实是不合适用热力图的。iterable -- 迭代对象,迭代对象可以是列表、元组、字典、字符串等。enumerate()函数返回一个迭代对象,该对象包含索引和值。返回一个迭代对象,该对象包含索引和值。或者尝试enumerate()函数。2.enumerate()函数。start -- 索引的开始值。day9 热力图与子图的绘制。1.3多图合一输出(箱线图)
2025-04-28 14:25:04
223
原创 【Python打卡Day8】@浙大疏锦行
对于不存在顺序大小的离散特征,使用独热编码,函数为pd.get_dummies()。对于存在顺序大小关系的,做好标签编码,借助dataframe的map函数即可实现。将数据按比例缩放到特定范围(如[0,1]),消除量纲差异,使不同特征具有可比性。避免大范围数值特征主导模型(如距离类算法:KNN、聚类):需在整个数据集上计算最小/最大值,避免分段处理。:树模型(如随机森林)通常无需归一化。时(如图像像素值归一化到0~1)。定义:字典名={键:值,键:值}数据实际意义———— 绑定。提高梯度下降优化效率。
2025-04-27 21:16:31
248
原创 【Python打卡Day6】@浙大疏锦行
但是目前你的目标就是达到目的即可,所以你应该用最简单最直观的方法,这便于你读者一眼知道你在做什么。如果在执行复杂的项目,需要考虑到内存管理、运行效率、算法负责度,甚至是代码美观性。类型四 离散变量与特征的关系 countplot 计数图。2. 需要指定图的坐标轴,比如x轴和y轴,并且传入数据。3. 需要指定图的标题,比如x轴和y轴的标签,以及标题。1. 需要指定图的类型,比如折线图,散点图,柱状图等。标签是离散的,特征如果是连续的应该如何绘制?导入库和数据,并找到连续和离散的特征。
2025-04-25 21:33:20
328
原创 【Python打卡Day5】@浙大疏锦行
可以鼠标悬停来查看每个函数的参数,这里采用了类型注解写法,可以看到每个参数的要求类型,同时可以看到参数的默认值,如果没有默认值就是必填参数。注意:这里区分离散变量仅仅通过object类型,实际中还需要结合对数据的认识,这里为了方便没有考虑现实意义。注意是py文件中,所以每一步的输出是否正确需要你来使用debugger功能来逐步查看。可以看到所有类似的数据处理流程都是一致的。现在在py文件中 一次性处理data数据中所有的连续变量和离散变量。注意此时你可以借助下面的调试控制台 来进行值的查看。
2025-04-24 16:05:08
193
原创 【Python打卡Day4】@浙大疏锦行
完成后在py文件中独立完成一遍,并且利用debugger工具来查看属性(不借助函数显式查看)----养成利用debugger工具的习惯。# 按照示例代码的要求,去尝试补全信贷数据集中的数值型缺失值。# 1.打开数据(csv文件、excel文件)# 2.查看数据(尺寸信息、查看列名等方法)# 初识pandas库与缺失数据的补全。# 5.利用循环补全所有列的空值。# 4.众数、中位数填补空值。
2025-04-23 16:30:06
161
原创 【Python打卡Day3】@浙大疏锦行
创建一个包含三个字符串元素的列表 tech_list,元素分别为 “Python”, “Java”, “Go”。修改 tech_list 中的第二个元素(索引为 1),将其从 “Java” 更改为 “Ruby”。定义一个包含整数的列表 scores,赋值为 [85, 92, 78, 65, 95, 88]。计算当前 tech_list 的长度,并将结果存储在变量 current_length 中。- 28-35度:打印"黄色预警:天气炎热"- 20-27度:打印"绿色提示:适宜温度"
2025-04-22 11:41:20
255
原创 【Python打卡Day2】@浙大疏锦行
题目: 定义两个整数变量,score_a 赋值为 75,score_b 赋值为 90。比较 score_a 是否大于 score_b,将比较结果(布尔值)存储在变量 is_a_higher 中;比较 score_a 是否小于等于 score_b,将结果存储在变量 is_a_lower_or_equal 中;比较 score_a 是否不等于 score_b,将结果存储在变量 is_different 中。题目: 定义两个字符串变量,str1 赋值为 “Hello”,str2 赋值为 “Python”。
2025-04-21 13:17:54
236
原创 【Python打卡Day2】@浙大疏锦行
题目: 定义两个整数变量,score_a 赋值为 75,score_b 赋值为 90。比较 score_a 是否大于 score_b,将比较结果(布尔值)存储在变量 is_a_higher 中;比较 score_a 是否小于等于 score_b,将结果存储在变量 is_a_lower_or_equal 中;比较 score_a 是否不等于 score_b,将结果存储在变量 is_different 中。题目: 定义两个字符串变量,str1 赋值为 “Hello”,str2 赋值为 “Python”。
2025-04-21 13:10:53
218
原创 【Python打卡Day1】@浙大疏锦行
计算这两个变量的和,并将结果存储在一个新的变量 a 中;计算这两个变量的商,叫做b;计算这两个变量的余数,叫做c。然后,使用 f-string 打印出类似 “20 加 8 的结果是:28” 的信息,分成三行打印。创建两个变量name储存名字,city储存城市。使用f-string将两个变量合成一句话打印出来。赋值为 0.8 (表示 8 折)。计算折扣后的价格,并将结果存储在变量。计算节省了多少钱,存储在变量。分别定义三个变量并输出。定义两个浮点数变量,节省金额是: 3.98。(1)了解变量和输出。
2025-04-20 21:53:16
125
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人