Python训练打卡Day31
文件的规范拆分和写法
知识点回顾
- 规范的文件命名
- 规范的文件夹管理
- 机器学习项目的拆分
- 编码格式和类型注解
把一个文件,拆分成多个具有着独立功能的文件,然后通过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/:保存项目运行日志文件,记录项目从开始到结束过程中的关键信息,如训练开始时间、训练过程中的损失值变化、预测时间等。
通用的机器学习项目拆分起步思路总结如下:
- 按工作流程分离代码:将数据处理、模型训练、评估等阶段的代码分别写入不同
.py
文件(如load_data.py
、train.py
、evaluate.py
),实现逻辑模块化。 - 创建通用辅助函数文件:新建
utils.py
存放可复用的工具函数(如文件读写、日志记录、绘图等),避免代码冗余。 - 集中管理配置参数:通过
config.py
或config.yaml/json
统一存储项目配置(如文件路径、超参数、环境变量等),方便维护和切换环境。 - 分离数据、模型与源代码:
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
@浙大疏锦行