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

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

②文件组织 

存放项目的核心源代码:src/(source的缩写),包括:

  • src/data/:放置与数据相关的代码。
  • src/models/:关于模型的代码
  • src/utils/:存放通用辅助函数代码

配置文件管理 :

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

实验与探索代码:

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

项目产出管理: 

  • data/ 目录:存放项目相关数据
  • models/ 目录:专门存放训练好的模型文件,根据模型保存格式不同,可能是 .pkl(Python pickle 格式,常用于保存 sklearn 模型 )、.h5(常用于保存 Keras 模型 )、.joblib 等。
  • reports/ 或 output/ 目录:存储项目运行产生的各类报告和输出文件。

总结通用拆分思路:

  1. 首先,按照机器学习的主要工作流程(数据处理、训练、评估等)将代码分离到不同的 .py 文件中。 这是最基本也是最有价值的一步。
  2. 然后,创建一个 utils.py 来存放通用的辅助函数。
  3. 考虑将所有配置参数集中到一个 config.py 文件中。
  4. 为你的数据和模型产出物创建专门的顶层目录,如 data/ 和 models/,将它们与你的源代码(通常放在 src/ 目录)分开。

③注意点: 

#if name == "main"写法的好处

  1. 明确程序起点:一个 Python 项目往往由多个模块组成。if name == “main” 可清晰界定程序执行的起始位置。比如一个包含数据处理模块 data_processing.py、模型训练模块 model_training.py 的机器学习项目,在 model_training.py 中用 if name == “main” 包裹训练相关的主逻辑代码,运行该文件时就知道需要从这里开始执行(其他文件都是附属文件),让项目结构和执行流程更清晰。(大多时候如此)

  2. 避免执行:python遵从模块导入即执行机制,当你使用 import xxx 导入一个模块时,Python 会执行该模块中的所有顶层代码(即不在任何函数或类内部的代码)。如果顶层代码中定义了全局变量或执行了某些操作(如读取文件、初始化数据库连接),这些操作会在导入时立即生效,并可能影响整个程序的状态。为了避免执行不必要的代码,我们可以使用 if name == “main” 来避免在导入时执行不必要的代码。这样,只有当模块被直接运行时(即被执行 python xxx.py),才会执行顶层代码,而导入时则不会执行。这样,我们就可以确保在导入模块时,不会执行不必要的代码,从而提高程序的性能和可维护性。

  3. 合理的资源管理:if name == “main” 与定义 main 函数结合使用,函数内变量在函数执行完这些变量被释放,能及时回收内存资源,避免内存泄漏,保证程序高效运行。

#编码格式:

        通常在首行注明# -*- coding: utf-8 -*-显式声明文件的编码格式,确保 Python 解释器能正确读取和解析文件中的非 ASCII 字符(如中文、日文、特殊符号等)。

#类型注解

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

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

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

# 定义一个矩形类
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

#pyc文件的介绍:

pyc文件是Python的"编译后"文件,其中的"pyc"代表"Python compiled"。当你运行一个Python程序(比如你的机器学习脚本)时,Python解释器会做两件事:

  1. 首先把你的.py源代码文件编译成字节码(bytecode)

  2. 然后执行这些字节码

pyc文件就是存储这些字节码的文件,它的作用是让Python程序下次运行时可以更快启动,因为不需要重新编译源代码。

当在做机器学习项目时:

  1. 导入的各种库(如numpy, pandas, sklearn)都有对应的pyc文件

  2. 写的Python模块(如data_preprocessing.py)也会生成pyc文件

  3. 这些文件让机器学习代码加载更快

(二)作业

作业:尝试针对之前的心脏病项目,准备拆分的项目文件,思考下哪些部分可以未来复用。

heart_disease_project/
├── config/                  # 配置文件
│   ├── config.yaml         # 超参数、路径配置
│   └── .env                # 敏感信息(如API密钥)
├── data/                   # 数据管理
│   ├── raw/                # 原始数据(如heart.csv)
│   ├── processed/          # 处理后的数据
│   └── interim/            # 中间数据(可选)
├── src/                    # 核心代码
│   ├── data/               # 数据相关模块
│   │   ├── load_data.py    # 数据加载(可复用)
│   │   ├── preprocess.py   # 数据预处理(可复用)
│   │   └── feature_engineering.py  # 特征工程(可复用)
│   ├── models/             # 模型相关模块
│   │   ├── model.py        # 模型定义(可复用)
│   │   ├── train.py        # 训练逻辑(可复用)
│   │   └── evaluate.py     # 评估逻辑(可复用)
│   └── utils/              # 通用工具
│       ├── io_utils.py     # 文件读写(高度复用)
│       ├── logging_utils.py# 日志管理(高度复用)
│       └── plotting_utils.py # 可视化工具(高度复用)
├── notebooks/              # 探索性分析
│   └── initial_eda.ipynb   # 初步数据分析
├── models/                 # 保存训练好的模型
│   └── model.pkl
├── reports/                # 输出报告
│   ├── evaluation_report.txt
│   └── visualizations/     # 可视化结果
└── requirements.txt        # 依赖库列表 

① 可复用部分

  • load_data.py
#示例代码
# src/data/load_data.py
import pandas as pd
from typing import Optional
from config import DATA_PATH  # 从配置读取路径def load_csv(file_path: str = DATA_PATH) -> Optional[pd.DataFrame]:try:return pd.read_csv(file_path)except FileNotFoundError:print(f"文件 {file_path} 不存在!")return None
  •  preprocess.py
    # src/data/preprocess.py
    from sklearn.preprocessing import StandardScaler
    from pandas import DataFramedef normalize_data(df: DataFrame, columns: list) -> DataFrame:scaler = StandardScaler()df[columns] = scaler.fit_transform(df[columns])return df

  • model.py
    # src/models/model.py
    from sklearn.ensemble import RandomForestClassifier
    from typing import Dict, Anydef build_model(config: Dict[str, Any]):return RandomForestClassifier(n_estimators=config["n_estimators"],max_depth=config["max_depth"])

  • train.py
    # src/models/train.py
    from sklearn.model_selection import train_test_split
    import joblibdef train_model(model, X, y, test_size=0.2):X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_size)model.fit(X_train, y_train)joblib.dump(model, "models/trained_model.pkl")return X_test, y_test

    ②总结复用性

  1. 数据模块:数据加载、预处理、特征工程代码可通过参数化和配置文件适配新数据集。

  2. 模型模块:模型定义和训练逻辑可扩展为通用框架(如支持PyTorch或TensorFlow)。

  3. 工具模块:日志、文件操作、可视化工具可跨项目直接复用。

  4. 配置文件:集中管理参数,避免硬编码,提升灵活性。

http://www.xdnf.cn/news/7672.html

相关文章:

  • 现代计算机图形学Games101入门笔记(十七)
  • Python Pandas库简介及常见用法
  • Nature 子刊排名(2025 版)
  • Java从入门到精通 - 案例专题
  • nRF Connect SDK开发之(1)环境搭建
  • 一文掌握 LoRA 常见变体
  • SpringBoot集成Jasypt对数据库连接密码进行加密、解密
  • vue2的项目登录逻辑
  • Java核心基础知识点全解析:从语法到应用实践
  • python-leetcode 69.最小栈
  • 【华为OD- B卷 - 增强的strstr 100分(python、java、c++、js、c)】
  • 连接Redis数据库
  • 初识Linux · 数据链路层
  • PyTorch图像识别模型和图像分割模型体验
  • 【Java 反射的使用】
  • (T_T),不小心删掉RabbitMQ配置文件数据库及如何恢复
  • Python训练营---Day31
  • 大模型幻觉
  • CAN总线
  • mbed驱动st7789屏幕-硬件选择及连接(1)
  • TDengine 更多安全策略
  • (二十四)Java网络编程全面解析:从基础到实践
  • 基于python的花卉识别系统
  • Playwright+Next.js:实例演示服务器端 API 模拟新方法
  • 从私有化到容器云:iVX 研发基座的高校智慧校园部署运维全解析
  • 多头注意力机制和单注意力头多输出的区别
  • 大型商业综合体AI智能保洁管理系统:开启智能保洁新时代
  • 麒麟系统编译osg —— 扩展篇
  • 02 if...else,switch,do..while,continue,break
  • DevExpressWinForms-XtraMessageBox-定制和汉化