news 2026/10/20 10:27:01

如何用PySR快速发现数据中的数学规律:科学家都在用的符号回归神器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何用PySR快速发现数据中的数学规律:科学家都在用的符号回归神器

如何用PySR快速发现数据中的数学规律:科学家都在用的符号回归神器

【免费下载链接】PySRSymbolic Learning in Python and Julia项目地址: https://gitcode.com/GitHub_Trending/py/PySR

PySR是一款结合Python易用性与Julia高性能的符号回归工具,能够自动从数据中发现简洁而精确的数学公式。无论是科研人员探索物理规律,还是工程师构建预测模型,PySR都能通过强大的搜索算法找到隐藏在数据背后的数学关系,让复杂数据分析变得简单高效。

什么是符号回归?为什么选择PySR?

符号回归是一种从数据中自动发现数学公式的机器学习方法,与传统的黑盒模型(如神经网络)不同,它能输出人类可解释的数学表达式。PySR作为该领域的领先工具,具有三大核心优势:

  • 双语言架构:前端Python接口简单易用,后端Julia引擎确保运算速度
  • 智能搜索算法:结合遗传编程与梯度优化,高效探索公式空间
  • 广泛适用性:支持从简单函数到复杂物理方程的发现过程

图1:PySR自动发现物理定律的示例,不同颜色代表不同复杂度的公式及其得分

快速上手:PySR的安装与基础使用

一键安装步骤

PySR支持多种安装方式,推荐使用conda或pip:

# 使用conda安装(推荐) conda install -c conda-forge pysr # 或使用pip安装 pip install pysr

如果需要从源码构建最新版本,可以克隆仓库后安装:

git clone https://gitcode.com/gh_mirrors/py/PySR.git cd PySR pip install .

第一个符号回归示例

以下是使用PySR寻找数据关系的简单示例:

import numpy as np from pysr import PySRRegressor # 生成示例数据:y = 2sin(x) + x^2 X = np.random.randn(100, 1) y = 2 * np.sin(X[:, 0]) + X[:, 0]**2 # 创建模型并训练 model = PySRRegressor( niterations=100, # 搜索迭代次数 binary_operators=["+", "-", "*", "/"], unary_operators=["sin", "cos", "exp", "log", "square"] ) model.fit(X, y) # 查看发现的最佳公式 print(model.sympy())

运行这段代码后,PySR会自动搜索可能的数学表达式,最终找到与生成数据匹配的公式。

图2:PySR预测值与真实值的对比,蓝色点表示预测结果

高级应用:从天文数据到物理定律

PySR在科学研究中有着广泛应用,特别是在发现新物理规律方面表现出色。下面展示一个天体物理学的实际案例:

星系质量预测模型

研究人员使用PySR分析星系观测数据,自动发现了星系总质量(M_tot)与速度弥散度(σ)和半径(R)之间的关系:

图3:PySR从CAMELS-IllustrisTNG模拟数据中发现的星系质量公式,解释率达97.67%

该案例中,PySR自动发现的公式为:M_tot = Aσ^α R^β,其中A、α、β为模型参数。这个结果与天文学家长期研究得出的结论高度一致,展示了PySR在科学发现中的潜力。

PySR核心功能详解

自定义运算符与约束条件

PySR允许用户根据研究需求自定义运算符集合,例如添加物理中常用的特殊函数:

model = PySRRegressor( unary_operators=["sin", "cos", "tanh", "sqrt"], binary_operators=["+", "-", "*", "/", "pow"], constraints={"pow": (2, 1)}, # 限制指数函数的使用 maxsize=30 # 限制公式最大复杂度 )

多目标优化与公式选择

PySR内置多目标优化功能,可以在公式精度和复杂度之间找到最佳平衡:

# 获取所有候选公式及其指标 print(model.equations_) # 按复杂度排序 for eq in sorted(model.equations_, key=lambda x: x.complexity): print(f"复杂度: {eq.complexity}, 得分: {eq.score}, 公式: {eq.sympy_expr}")

实战案例:用PySR解决实际科学问题

案例1:气候数据分析

在气候研究中,研究人员使用PySR分析云量数据,发现了温度、湿度与云覆盖率之间的非线性关系:

图4:PySR分析气候数据发现的云量预测模型,帮助理解气候变化机制

相关代码和数据可参考项目中的examples/pysr_demo.ipynb示例文件。

案例2:经济学规律发现

经济学家使用PySR分析国际贸易数据,自动发现了类似引力模型的经济规律:

图5:PySR从经济数据中发现的贸易流量公式,与经典引力模型高度吻合

高级配置与性能优化

关键参数调优指南

PySR提供了丰富的配置选项,以下是几个关键参数的优化建议:

  • niterations:迭代次数,建议从100开始,复杂问题可增加到1000
  • population_size:种群大小,默认50,大数据集可增加到200
  • maxdepth:公式最大深度,控制公式复杂度,建议3-7之间
  • optimizer_iter:梯度优化迭代次数,默认10,提高精度可增加到100

详细参数说明可参考官方文档docs/src/options.md。

加速计算的实用技巧

对于大规模数据集,可通过以下方法提高PySR的运行效率:

  1. 数据降维:先用PCA等方法减少特征数量
  2. 分阶段搜索:先使用简单运算符集合,再逐步增加复杂度
  3. 并行计算:启用多线程加速搜索过程
model = PySRRegressor( niterations=500, num_threads=8, # 使用8个线程并行计算 batch_size=1000, # 批处理大小 warm_start=True # 增量训练 )

总结:PySR如何改变你的数据分析方式

PySR作为一款强大的符号回归工具,正在改变科研人员和数据分析师处理复杂数据的方式。它不仅能自动发现数学规律,还能输出可解释的公式,为科学发现和工程应用提供有力支持。

无论你是处理实验数据的科研人员,还是需要构建可解释模型的数据科学家,PySR都能帮助你:

  • 从复杂数据中提取简洁的数学规律
  • 避免"黑盒模型"带来的解释性难题
  • 加速科学发现过程,发现未知的数学关系

立即尝试PySR,开启你的数据驱动公式发现之旅吧!更多资源和详细文档可访问项目仓库获取。

【免费下载链接】PySRSymbolic Learning in Python and Julia项目地址: https://gitcode.com/GitHub_Trending/py/PySR

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 10:24:41

ESP32应用商店:多分区固件管理与OTA远程升级实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/20 10:23:49

MATLAB降维工具箱深度解析:从PCA到t-SNE的可解释降维实践

简介:Matlab数据降维工具箱是一套面向机器学习与模式识别研究者的专业级算法集成包,适用于高维数据分析、特征提取、可视化预处理等典型场景,尤其适合具备Matlab基础的研究生、算法工程师及科研人员快速验证各类降维方法。资源共84个文件&…

作者头像 李华
网站建设 2026/10/20 10:22:52

高并发发卡系统设计:券码生成、库存扣减与核销闭环

简介:这是一套面向电商运营者与PHP开发者的一站式发卡平台源码,聚焦团购营销与虚拟商品二级交易场景,解决传统发卡系统缺乏用户自流转、活动运营弱、资金监管缺位等痛点。资源共2000个文件,主体为507个PHP后端逻辑文件、304个HTML…

作者头像 李华
网站建设 2026/10/20 10:22:42

文件夹.EXE病毒专杀工具:Windows资源管理器劫持急救方案

简介:这是一款专为清除“文件夹.EXE”类伪装型病毒设计的轻量级杀毒工具,面向普通电脑用户及初级系统维护人员,解决因误点伪装文件夹导致的恶意代码执行、文件隐藏、系统异常等典型感染问题。压缩包共4个文件(443KB)&a…

作者头像 李华
网站建设 2026/10/20 10:21:08

C++ std::ranges多线程同步:视图并发安全与管线编排实践

项目标题是“C的std::ranges多线程同步”,这组合我第一次看到时就想笑——多半是哪位兄弟把ranges用顺手之后,直接被多线程教做人了。std::ranges在C20正式进标准,filter、transform、take一路管道式点过去,单线程确实赏心悦目&am…

作者头像 李华
网站建设 2026/10/20 10:21:01

Lombok原理:如何在javac编译期修改AST生成代码

简介:围绕 Lombok 注解处理器与编译期字节码操作的代码资源,面向具备 Java 基础的后端开发者,旨在讲清 Lombok 如何借助编译阶段的注解处理能力,自动生成 getter、setter、构造器、equals、hashCode 等样板代码,并提示…

作者头像 李华