Keplearn:几秒内从数据中提取方程
摘要
Keplearn 是一个用 Rust 编写的确定性符号回归引擎,可从表格数据中通过最佳优先递归归约在数秒内恢复闭式方程(如牛顿引力定律),并输出带 r² 评分的 JSON 候选方程,支持零依赖单二进制跨平台分发。
暂无内容
查看缓存全文
缓存时间: 2026/10/29 16:35
owls-on-wires/keplearn 来源:https://github.com/owls-on-wires/keplearn # Keplearn 数秒内完成符号回归。 Keplearn 以约翰内斯·开普勒命名,他通过研究第谷·布拉赫记录的天文观测数据表,推导出了行星运动定律。这正是本程序试图做到的:给定若干列测量数据,找出将它们联系起来的简洁定律。 text m1 | m2 | r | force ------+-------+------+------- 1.0 | 2.0 | 1.0 | 2.00 2.0 | 2.0 | 2.0 | 1.00 ┌──────────┐ 1.5 | 3.0 | 3.0 | 0.50 ──► │ keplearn │ ──► force = m1 * m2 / r**2 2.5 | 1.0 | 0.5 | 10.00 └──────────┘ 3.0 | 4.0 | 2.0 | 3.00 更正式地说,它是一个用 Rust 编写的确定性符号回归引擎,通过最优优先的递归约简,从表格数据中还原闭式方程。 - 从标准输入读取 TSV 或 CSV,将候选方程输出为 JSON - 单个二进制文件,零依赖(使用 musl 目标时完全静态链接) - 旨在数秒内给出答案:精确定律通常可在毫秒内求出,--timeout 可限制困难案例的运行时间 - 具有确定性;相同的输入会产生逐字节一致的输出 - 报告的 r2 根据输出的方程本身计算,绝不取自内部拟合阶段 - 拟合常数会吸附到有理数以及 pi、e 和 sqrt(2) 的倍数,每次吸附都经过验证后才会保留 ## 下载 macOS (https://github.com/owls-on-wires/keplearn/releases/latest/download/keplearn-macos-universal) Windows (https://github.com/owls-on-wires/keplearn/releases/latest/download/keplearn-windows-x86_64.exe) Linux (https://github.com/owls-on-wires/keplearn/releases/latest/download/keplearn-linux-x86_64) macOS(通用版:Apple Silicon 和 Intel) sh curl -L -o keplearn https://github.com/owls-on-wires/keplearn/releases/latest/download/keplearn-macos-universal chmod +x keplearn ./keplearn --help Windows(PowerShell) powershell curl.exe -L -o keplearn.exe https://github.com/owls-on-wires/keplearn/releases/latest/download/keplearn-windows-x86_64.exe .\keplearn.exe --help Linux(x86_64,完全静态链接) sh curl -L -o keplearn https://github.com/owls-on-wires/keplearn/releases/latest/download/keplearn-linux-x86_64 chmod +x keplearn ./keplearn --help ## 用法 使用 --target 指定要预测的列名(默认列名为 target),并通过管道输入带有表头行的 TSV 或 CSV。分隔符由表头决定:若存在制表符,则使用制表符,否则使用逗号。 sh $ ./keplearn --target force --top-k 1 --pretty --out laws.json < gravity.tsv $ cat laws.json { "results": [ { "expr": "((x1**(1))*(x2**(1))*(x3**(-2)))", "r2": 1.0000000000, "search_r2": 1.0000000000, "holdout_r2": 0.9999999999998754, "scale": 0.9999984680738088, "offset": 0.000011830325937959667, "columns": [ 0, 1, 2 ], "factor": "direct", "model": "((x1*x2)*((x3)**(-2)))" } ], "time_ms": 0, "n_expressions": 0, "n_evaluated": 0, "stopped_by": "exact_exit" } x1..xN 是按文件顺序排列的特征列,不包括目标列;此处 x1=m1、x2=m2、x3=r,因此还原出的定律为 m1*m2/r**2。候选结果按最优优先的顺序排列:results[0].model 就是答案,其 r2 根据所提供的数据计算。诊断信息输出到标准错误,因此标准输出始终只有一个 JSON 对象。常用选项: sh ./keplearn --target Tc --timeout 60000 < superconductors.csv # 将搜索时间限制为 60 秒 ./keplearn --top-k 3 < data.tsv # 输出最优的 3 个候选结果 ./keplearn --target y --sample 1000 < big.tsv # 使用更多行进行筛选 ./keplearn --help # 完整选项列表和输出结构 ## 方法 引擎在应用于目标列的可逆约简链中进行搜索:除去一个拟合因子,对 log、sqrt 或 arcsin 等变换求逆,拟合一个内部仿射节点,然后重复此过程,直到达到固定深度。在每个节点,它都会尝试对约简后的目标进行终端拟合,采用的形式包括:指数由对数线性回归得到的仿射单项式、稀疏的 k 项单项式组合,或少量复合形式之一(L2 范数、有理式、三角函数)。候选模型在内部留出的 25% 数据上评分,并施加 MDL 复杂度惩罚。拟合常数会吸附到附近的有理数以及 pi、e 和 sqrt(2) 的倍数。只有当验证过程表明模型在留出数据和完整数据上的评分均未变差时,才会保留该吸附结果。随后,对胜出的表达式进行代数化简,并基于完整数据集重新拟合缩放系数和偏移量,然后重新评分。输出中的 r2 来自对所输出模型字符串的求值;它并非沿用任何内部拟合阶段的结果。 ## 基准测试 Keplearn 是标准符号回归基准 SRBench (https://github.com/cavalab/srbench) 中的一种方法,通过 cavalab/srbench#223 (https://github.com/cavalab/srbench/pull/223) 加入。以下数据来自 SRBench 自身的容器化流程,由其 sympy 等价性检查判定,每个数据集进行一次试验,每次拟合的时间预算为 60 秒。 不同目标噪声水平下,恢复真实符号解的比例: | 测试集 | 噪声 0 | 0.001 | 0.01 | 0.1 | |—|—|—|—|—| | Feynman (116) | 75 (64.7%) | 65 (56.0%) | 51 (44.0%) | 10 (8.6%) | | Strogatz (14) | 6 (42.9%) | 6 (42.9%) | 3 (21.4%) | 1 (7.1%) | SRBench 上已发表的最高 Feynman 符号解恢复率为 AIFeynman 的 55.8%,其次一组约为 27%;Keplearn 仅使用它们一小部分的计算预算,就达到了 64.7%。在 138 个没有真实闭式表达式的黑盒数据集上,测试 R2 的中位数接近零(约为 -0.003)。Keplearn 面向的是精确解析定律,而非通用曲线拟合,这一结果体现了这种取舍。 在同样的 60 秒上限下,每次拟合使用一个核心的拟合时间: | 测试集 | 中位数 | 平均值 | 最大值 | 1 秒内完成的拟合数 | |—|—|—|—|—| | Feynman,噪声 0 | 1.3 秒 | 13.3 秒 | 60.7 秒 | 55/116 | | Feynman,噪声 0.001-0.1 | 11-14 秒 | 15-23 秒 | 60.7 秒 | 0/348 | | Strogatz,所有噪声水平 | 1.3 秒 | 1.5 秒 | 3.6 秒 | 8/56 | | 黑盒 | 60.0 秒 | 39.1 秒 | 65.8 秒 | 15/138 | 已求解的案例会提前退出。在噪声为 0 时,Feynman 测试集中有一半可在一秒内完成;存在噪声时,无法触发精确解退出机制,因此这些拟合会运行至时间上限。 ## 许可证 Keplearn 采用 MIT 许可证发布。由 Chandler Freeman (https://github.com/owls-on-wires) 创建。
相似文章
@QingQ77: 用纯 Rust 实现 LLM 推理引擎,针对每种硬件×模型×量化组合定制 CUDA 内核,跑出比 vLLM 和 TensorRT-LLM 更高的推理速度。 https://github.com/Avarok-Cybersecurity/a…
Atlas 是一个纯 Rust 实现的 LLM 推理引擎,通过为每种硬件×模型×量化组合定制 CUDA 内核,实现了比 vLLM 和 TensorRT-LLM 更快的推理速度。
纯Python符号回归:从8个数据点重新发现开普勒定律
GP_ELITE是一个基于遗传编程的符号回归纯Python库,能够从小型实验数据集中发现可解释的数学公式。0.2.0版本引入了莱文贝格-马夸尔特常数拟合、多重重启可靠性、帕累托前沿输出以及外推模式。
@FinanceYF5: https://x.com/FinanceYF5/status/2108757519690559912
OpenAI 发布了一个新仓库,收录其未公开内部模型产生的 719 篇数学手稿(归为 372 个结果族),涵盖黎曼 zeta 函数零点区域、Mahler 猜想、自由群因子同构等前沿问题,其中约 42% 的结果已用 Lean 形式化验证,并附带部分推理过程摘要。
PhysEvo:Astra 能行动,就让它行动
PhysEvo 提出一个围绕冻结模型的物理递归自我改进(RSI)框架,通过元智能体诊断失败并修订工具与技能,在 RoboDojo 任务上取得 62% 成功率,并在真实世界 AgileX PiPER 机器人任务上达到 84% 成功率。
吃掉你的精确率:精确率目标缓解基于评分标准的强化学习中的奖励黑客行为
FORK提出了一种联合优化召回率与精确率的奖励函数,通过评分准则驱动的必要性信用和事实正确性评分器来缓解基于评分准则的强化学习中的奖励破解问题,在多个基准上显著提升胜率并减少冗余输出。