PySR符号回归工具核心配置与功能详解
概述
PySR是一个基于Julia后端的符号回归工具,它通过进化算法自动发现数据背后的数学表达式。本文将深入解析PySR的核心配置选项和功能特性,帮助用户更好地掌握这一强大工具的使用方法。
核心配置选项
1. 模型选择策略
PySR提供了两种模型选择策略:
model_selection='best'
(默认):基于准确性和复杂度的平衡选择最佳模型model_selection='accuracy'
:仅考虑准确性选择模型
在输出结果中,pick
列会标识出被选中的模型。
2. 运算符配置
PySR支持丰富的运算符配置,包括:
- 二元运算符:如加减乘除等基本运算
- 一元运算符:如三角函数、对数等
- 自定义运算符:用户可以定义自己的特殊运算符
PySRRegressor(
binary_operators=["mult", "plus", "special(x, y) = x^2 + y"],
extra_sympy_mappings={'special': lambda x, y: x**2 + y},
unary_operators=["cos"]
)
3. 迭代参数控制
niterations
:控制总迭代次数ncycles_per_iteration
:控制每次迭代中的循环次数,影响搜索多样性和效率
4. 并行计算配置
通过procs
参数可以设置使用的CPU核心数,建议设置为可用核心数。
5. 种群设置
populations
:控制种群数量,默认15个- 种群数量与核心数的关系:通常建议
populations > procs
高级功能
1. 加权数据回归
PySR支持为数据点分配权重,适用于存在不同测量精度的情况:
sigma = ... # 测量误差
weights = 1/sigma**2 # 权重计算
model = PySRRegressor()
model.fit(X, y, weights=weights)
2. 表达式复杂度控制
maxsize
:限制表达式的最大大小(运算符、常数、变量的总数)maxdepth
:限制表达式的最大深度warmupMaxsize
:逐步增加maxsize,鼓励从简单表达式开始
3. 批量处理
对于大数据集,可以启用mini-batch处理:
batching=True
:启用批量处理batch_size
:设置批量大小
4. 变量命名
可以通过两种方式指定变量名:
- 传递变量名列表
- 直接使用pandas DataFrame的列名
5. 运算符使用约束
可以限制特定运算符的使用方式:
constraints={
'pow': (-1, 1), # 幂运算的基和指数复杂度限制
'mult': (3, 3), # 乘法运算的左右操作数复杂度限制
'cos': 5 # 余弦函数的参数复杂度限制
}
输出与导出功能
1. 数学表达式输出
PySR支持多种数学表达式输出格式:
- LaTeX格式:
model.latex()
- SymPy表达式:
model.sympy()
- 可调用函数:
model.equations_
中的lambda_format
列
2. 深度学习框架导出
PySR支持将发现的表达式导出到主流深度学习框架:
PyTorch导出
torch_model = model.pytorch()
torch_output = torch_model(X_tensor) # X_tensor是PyTorch张量
JAX导出
jax_model = model.jax()
jax_output = jax_model['callable'](X_array, jax_model['parameters'])
3. 自定义损失函数
PySR支持多种自定义损失函数:
# 绝对值损失
PySRRegressor(..., elementwise_loss="f(x, y) = abs(x - y)^1.5")
# 带权重的损失
model = PySRRegressor(..., elementwise_loss="myloss(x, y, w) = w * abs(x - y)")
model.fit(..., weights=weights)
# 内置Lp范数损失
PySRRegressor(..., elementwise_loss="LPDistLoss{3}()")
模型持久化
PySR自动保存模型状态:
- 搜索开始前保存一次
- 搜索完成后保存一次
- 文件格式为
.pkl
加载已保存模型:
model = PySRRegressor.from_file(pickle_filename)
最佳实践建议
- 对于大型数据集,启用
batching
可以显著提高性能 - 使用
warmupMaxsize
从简单表达式开始,逐步增加复杂度 - 合理设置
constraints
可以获得更可解释的表达式 - 多利用并行计算(
procs
)提高搜索效率 - 对于物理约束问题,使用运算符约束确保表达式符合物理规律
通过合理配置这些选项,用户可以充分发挥PySR的强大功能,从数据中发现有意义且可解释的数学表达式。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考