You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python遗传编程从DataFrame的x、y数据推导未知函数公式?

用Python遗传编程推导DataFrame中x与y的函数关联

1. 选择合适的遗传编程库

Python中针对符号回归(从数据推导函数公式)的常用遗传编程(GP)库有两个方向:

  • gplearn:封装度高,API简洁,专门为符号回归场景设计,适合快速实现需求
  • deap:灵活性极强,支持自定义遗传逻辑,适合需要深度定制的场景

这里以gplearn为例展开,它能直接输出可读的函数表达式,上手成本低。

2. 数据预处理

确保你的DataFrame满足以下基础要求:

  • 自变量x和因变量y均为数值型,无缺失值、异常值(可提前用df.dropna()、df.describe()做校验)
  • 将x转换为二维特征矩阵(即使只有单个自变量,也需保持二维格式,匹配模型输入要求)
  • 将y转换为一维目标数组

3. 配置并运行遗传编程模型

使用gplearn的SymbolicRegressor类,核心参数可按需调整:

  • generations:遗传迭代的代数,数值越大越可能找到更优公式,但耗时更长
  • population_size:每一代的种群规模,规模越大搜索空间越广
  • function_set:允许使用的数学操作符,例如['add', 'sub', 'mul', 'div', 'pow', 'sqrt']
  • metric:适应度评估指标,默认用均方误差(MSE),也可指定r2等

4. 完整示例代码

import pandas as pd
from gplearn.symbolic import SymbolicRegressor
from sklearn.model_selection import train_test_split

# 替换为你的实际DataFrame
df = pd.DataFrame({
    'x': [0.5, 1.2, 2.0, 3.1, 4.5, 5.8],
    'y': [1.25, 2.44, 5.0, 10.61, 21.25, 34.64]  # 对应y = x² + 1
})

# 数据格式转换
X = df[['x']].values
y = df['y'].values

# 可选:划分训练/测试集验证泛化能力
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 初始化GP模型
gp_model = SymbolicRegressor(
    generations=25,
    population_size=800,
    function_set=['add', 'sub', 'mul', 'pow'],
    metric='mse',
    random_state=42
)

# 拟合数据
gp_model.fit(X_train, y_train)

# 输出推导的函数公式
print("推导的函数表达式:", gp_model._program)

# 可选:评估模型性能
print("训练集R²得分:", gp_model.score(X_train, y_train))
print("测试集R²得分:", gp_model.score(X_test, y_test))

5. 结果优化建议

  • 如果推导公式不够准确,可尝试增大generations或population_size,扩展function_set加入更多数学操作(如log、sin)
  • 若数据存在噪声,可在模型参数中设置max_samples,用部分数据训练提升鲁棒性
  • 如需完全自定义遗传规则(如选择、交叉、变异逻辑),可切换到deap库,通过定义个体、适应度函数等实现定制化GP流程

内容的提问来源于stack exchange,提问作者José Lorente López

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 18:10:36