PySR项目参数调优与工作流程指南
引言
PySR是一个基于符号回归的机器学习工具,能够从数据中发现简洁的数学表达式。本文将详细介绍如何调优PySR参数以及优化工作流程,帮助用户更高效地使用这一工具。
基础调优策略
1. 运算符选择原则
在PySR中,运算符的选择至关重要。遵循以下原则可以显著提高搜索效率:
- 避免冗余运算符:例如
pow
可以替代square
,二元运算符-
与一元运算符neg
功能相似 - 只保留必要的运算符:运算符数量越少越好
- 优先选择基础运算符:如加减乘除等基本运算
2. 运行环境配置
对于高性能计算环境:
- 推荐使用IPython而非Jupyter Notebook(后者缺少进度条和早期停止功能)
- 在Slurm集群上运行时,设置
cluster_manager="slurm"
- 将
procs
参数设置为整个分配的核心总数
高级调优参数详解
1. 种群与迭代设置
populations
:建议设置为3*num_cores
ncycles_per_iteration
:- 单机运行时保持默认值
- 在约100核心的集群上,建议设置为5000左右,使主节点占用率低于10%
- 值越大,工作节点间通信频率越低
2. 约束条件优化
constraints
:尽可能严格设置- 使用
pow
时,可设置为{"pow": (9, 1)}
,限制指数只能是变量或常量
- 使用
nested_constraints
:防止函数过度嵌套- 例如限制sin和cos不能相互嵌套
3. 表达式复杂度控制
maxsize
:比目标表达式大小稍大- 如目标size=30,可设为35
maxdepth
:可选参数- 如需限制深度为5,可设为6-7
4. 其他关键参数
parsimony
:设为预期最小损失的1/5-1/10weight_optimize
:建议设为0.001turbo
:设为True可提升约20%性能niterations
:最终运行时设为较大值
实验技巧与最佳实践
1. 数据集处理
- 数据点超过1000时:
- 低维低噪声:子采样
- 高维高噪声:设置
batching=True
- 大型数据集:随机采样约1000点
2. 损失函数选择
L2DistLoss()
:标准均方误差L1DistLoss()
:对异常值更鲁棒- 可自定义权重参数
weights
3. 数值精度控制
对复杂表达式,可设置precision=64
确保数值精度
进阶调优技巧
- 运算符复杂度调整:通过
complexity_of_operators
调整不喜欢的运算符复杂度 - 自适应简约性缩放:尝试增大
adaptive_parsimony_scaling
至1000 - 渐进式复杂度增长:使用
warmup_maxsize_by
防止过早陷入复杂表达式 - 变异权重调优:高级用户可以尝试调整变异权重和交叉概率
结果分析与后处理
- 使用
PySRRegressor.from_file
加载保存的搜索结果 - 探索发现的方程
- 转换为LaTeX格式
- 绘制输出结果
注意事项
- 避免使用
denoise
和select_k_features
功能 - 修改某些参数(如
maxsize
)后不能使用warm_start
- 在IPython中可按q+Enter停止任务并调整参数
通过以上调优策略和工作流程优化,用户可以更高效地使用PySR进行符号回归分析,发现数据背后简洁而精确的数学表达式。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考