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

Python训练打卡Day31

文件的规范拆分和写法

知识点回顾

  1. 规范的文件命名
  2. 规范的文件夹管理
  3. 机器学习项目的拆分
  4. 编码格式和类型注解

把一个文件,拆分成多个具有着独立功能的文件,然后通过import的方式,来调用这些文件。

1. 可以让项目文件变得更加规范和清晰

2. 可以让项目文件更加容易维护,修改某一个功能的时候,只需要修改一个文件,而不需要修改多个文件。

3. 文件变得更容易复用,部分通用的文件可以单独拿出来,进行其他项目的复用。

回顾机器学习的基本流程:

  • 数据加载:从文件、数据库、API 等获取原始数据。
    • 命名参考:load_data.py 、data_loader.py
  • 数据探索与可视化:了解数据特性,初期可用 Jupyter Notebook,成熟后固化绘图函数。
    • 命名参考:eda.py 、visualization_utils.py
  • 数据预处理:处理缺失值、异常值,进行标准化、归一化、编码等操作。
    • 命名参考:preprocess.py 、data_cleaning.py 、data_transformation.py
  • 特征工程:创建新特征,选择、优化现有特征。
    • 命名参考:feature_engineering.py
  • 模型训练:构建模型架构,设置超参数并训练,保存模型。
    • 命名参考:model.py 、train.py
  • 模型评估:用合适指标评估模型在测试集上的性能,生成报告。
    • 命名参考:evaluate.py
  • 模型预测:用训练好的模型对新数据预测。
    • 命名参考:predict.py 、inference.py

文件的组织

1. 项目核心代码组织
  • src/data/:放置与数据相关的代码。
    • src/data/load_data.py:负责从各类数据源(如文件系统、数据库、API 等)读取原始数据。
    • src/data/preprocess.py:进行数据清洗(处理缺失值、异常值)、数据转换(标准化、归一化、编码等)操作。
    • src/data/feature_engineering.py:根据业务和数据特点,创建新特征或对现有特征进行选择、优化。
  • src/models/:关于模型的代码。
    • src/models/model.py:定义模型架构,比如神经网络结构、机器学习算法模型设定等。
    • src/models/train.py:设置模型超参数,并执行训练过程,保存训练好的模型。
    • src/models/evaluate.py:使用合适的评估指标(如准确率、召回率、均方误差等),在测试集上评估模型性能,生成评估报告。
    • src/models/predict.py 或 src/models/inference.py:利用训练好的模型对新数据进行预测。
  • src/utils/:存放通用辅助函数代码,可进一步细分:
    • src/utils/io_utils.py:包含文件读写相关帮助函数,比如读取特定格式文件、保存数据到文件等。
    • src/utils/logging_utils.py:实现日志记录功能,方便记录项目运行过程中的信息,便于调试和监控。
    • src/utils/math_utils.py:特定的数值计算函数,像自定义的矩阵运算、统计计算等。
    • src/utils/plotting_utils.py:绘图工具函数,用于生成数据可视化图表(如绘制损失函数变化曲线、特征分布直方图等 )。
2. 配置文件管理

config/ 目录:集中存放项目的配置文件,方便管理和切换不同环境(开发、测试、生产)的配置。

  • config/config.py 或 config/settings.py:以 Python 代码形式定义配置参数。
  • config/config.yaml 或 config/config.json:采用 YAML 或 JSON 格式,清晰列出文件路径、模型超参数、随机种子、API 密钥等可配置参数。
  • .env 文件:通常放在项目根目录,用于存储敏感信息(如数据库密码、API 密钥等),在代码中通过环境变量的方式读取,一般会被 .gitignore 忽略,防止敏感信息泄露
3. 实验与探索代码

notebooks/ 或 experiments/ 目录:用于初期的数据探索、快速实验、模型原型验证。

  • notebooks/initial_eda.ipynb:在项目初期,使用 Jupyter Notebook 进行数据探索与可视化,了解数据特性,分析数据分布、相关性等。
  • experiments/model_experimentation.py:编写脚本对不同模型架构、超参数组合进行快速实验,对比实验结果,寻找最优模型设置。

这部分往往是最开始的探索阶段,后面跑通了后拆分成了完整的项目,留作纪念用。

4. 项目产出物管理

data/ 目录:存放项目相关数据。

  • data/raw/:放置从外部获取的未经处理的原始数据,保持数据原始状态。
  • data/processed/:存放经过预处理(清洗、转换、特征工程等操作)后的数据,供模型训练和评估使用。
  • data/interim/(可选):保存中间处理结果,比如数据清洗过程中生成的临时文件、特征工程中间步骤产生的数据等。

models/ 目录:专门存放训练好的模型文件,根据模型保存格式不同,可能是 .pkl(Python pickle 格式,常用于保存 sklearn 模型)、.h5(常用于保存 Keras 模型)、.joblib 等。

reports/ 或 output/ 目录:存储项目运行产生的各类报告和输出文件。

  • reports/evaluation_report.txt:记录模型评估的详细结果,包括各项评估指标数值、模型性能分析等。
  • reports/visualizations/:存放数据可视化图片,如损失函数收敛图、预测结果对比图等。
  • output/logs/:保存项目运行日志文件,记录项目从开始到结束过程中的关键信息,如训练开始时间、训练过程中的损失值变化、预测时间等。

通用的机器学习项目拆分起步思路总结如下:

  1. 按工作流程分离代码:将数据处理、模型训练、评估等阶段的代码分别写入不同 .py 文件(如 load_data.pytrain.pyevaluate.py),实现逻辑模块化。
  2. 创建通用辅助函数文件:新建 utils.py 存放可复用的工具函数(如文件读写、日志记录、绘图等),避免代码冗余。
  3. 集中管理配置参数:通过 config.py 或 config.yaml/json 统一存储项目配置(如文件路径、超参数、环境变量等),方便维护和切换环境。
  4. 分离数据、模型与源代码
    • data/ 目录:存放原始数据(raw/)、处理后数据(processed/)及中间结果(interim/ 可选)。
    • models/ 目录:保存训练好的模型文件(如 .pkl.h5 等)。
    • src/ 目录:放置核心源代码,按阶段细分(如 src/data/src/models/src/utils/),保持结构清晰。

类型注解

Python 的类型注解是在 Python 3.5+ 引入的特性,用于为变量、函数参数、返回值和类属性等添加类型信息。虽然 Python 仍是动态类型语言,但类型注解可以提高代码可读性、可维护性,并支持静态类型检查工具(如 mypy)。

其次你在安装python插件的时候,附带安装了2个插件

1. 一个是python debugger用于断点调试

2. 另一个是pylance,用于代码提示和类型检查,这个插件会根据你的代码中的类型注解,给出相应的提示和检查,比如你定义了一个函数,参数类型是int,那么当你传入一个字符串时,它会提示你传入的参数类型不正确。

变量类型注解语法为 变量名: 类型

# 变量的类型注解
name: str = "Alice"
age: int = 30
height: float = 1.75
is_student: bool = False

函数类型注解为函数参数和返回值指定类型,语法为 def 函数名(参数: 类型) -> 返回类型。

def add(a: int, b: int) -> int:return a + bdef greet(name: str) -> None:print(f"Hello, {name}")

类属性与方法的类型注解:为类的属性和方法添加类型信息。

# 定义一个矩形类
class Rectangle:width: float      # 矩形宽度(浮点数),类属性的类型注解(不初始化值)height: float     # 矩形高度(浮点数)def __init__(self, width: float, height: float):self.width = widthself.height = heightdef area(self) -> float:# 计算面积(宽度 × 高度)return self.width * self.height

@浙大疏锦行

相关文章:

  • 8天Python从入门到精通【itheima】-29~31
  • [Memory] 01.QEMU 内存虚拟化概览
  • czml数据以及应用
  • 5.22打卡
  • 5.22学习日记 ssh远程加密、非对称加密、对称加密与中间人攻击的原理
  • HarmonyOS NEXT~React Native 在鸿蒙系统上的应用与实践
  • Netty学习专栏(二):Netty快速入门及重要组件详解(EventLoop、Channel、ChannelPipeline)
  • Nginx 代理Https服务
  • 关于pgSQL配置后Navicat连接不上的解决方法
  • vue页面目录菜单有些属性是根据缓存读取的。如果缓存更新了。希望这个菜单也跟着更新。
  • 第二十二次博客打卡
  • 前端vscode学习
  • 关于如何在Springboot项目中通过excel批量导入数据
  • CentOS安装最新Elasticsearch8支持向量数据库
  • openEuler 22.03 LTS-SP3 系统安装 docker 26.1.3、docker-compose
  • 大队项目流程
  • 关于WPS修改默认打开设置
  • scikit-learn pytorch transformers 区别与联系
  • 推荐一个Excel与实体映射导入导出的C#开源库
  • C++(28):容器类 <map>
  • 织梦网站栏目管理空白/seo网站推广方法
  • 网站开发者的常用工具/建站优化公司
  • 哔哩哔哩推广网站/企业微信营销管理软件
  • 个人网站做交易类的赚钱吗/苏州网站建设费用
  • 安徽和城乡建设厅网站/seo搜索优化是什么呢
  • 网站seo优化很好徐州百度网络点赞/推广码怎么填