从数据序列中导出函数
Deriving functions from data series
我正在尝试在 python 中编写一个程序,该程序使用遗传算法来提取与一组数据相匹配的函数。
例如,如果我输入:
3, 5, 7, 9, 11
输出应该是这样的:
2x + 1
问题是,我正在尝试在 Python 中执行此操作,但我不知道如何在 Python 中对数学函数建模。我需要神经网络之类的东西吗?
我已经编写了一个通用的遗传算法,一旦我弄清楚如何开始就可以修改。
非常感谢。
您要找的是symbolic regression。
由于您已经在遗传算法的道路上,您可以进一步尝试 genetic programming。
通过遗传编程,每个个体都是一个“程序”,使用终端和原始函数(构建块)表示。
例如,对于符号回归:
terminal set = {x, 1, 2, 3, 4, 5, 6, 7, 8, 9}
function set = {+, -, *, /, exp, log, sin}
一个“简单”的程序(2x + 1
):
+
/ \
2 +
/ \
* \
/ \ \
10 x \
-
/ \
* 1
/ \
- x
/ \
3 11
这表示为树结构,但非树表示已成功实现。
GP 的缺点是必须探索大型搜索 space,而且计算成本非常高。这可以通过根据生成数据的系统的现有知识限制提供给算法的构建块集来减弱。
不过符号回归的这个特性也有优点:因为进化算法需要多样性才能有效探索搜索space.
如果你的项目是一个学习项目,python是一种在相对较短的时间内开发一个简单框架的好语言。
否则你可以看看DEAP(一个很好的基于Python的进化计算框架,包括遗传编程)。
我正在尝试在 python 中编写一个程序,该程序使用遗传算法来提取与一组数据相匹配的函数。
例如,如果我输入:
3, 5, 7, 9, 11
输出应该是这样的:
2x + 1
问题是,我正在尝试在 Python 中执行此操作,但我不知道如何在 Python 中对数学函数建模。我需要神经网络之类的东西吗?
我已经编写了一个通用的遗传算法,一旦我弄清楚如何开始就可以修改。
非常感谢。
您要找的是symbolic regression。
由于您已经在遗传算法的道路上,您可以进一步尝试 genetic programming。
通过遗传编程,每个个体都是一个“程序”,使用终端和原始函数(构建块)表示。
例如,对于符号回归:
terminal set = {x, 1, 2, 3, 4, 5, 6, 7, 8, 9}
function set = {+, -, *, /, exp, log, sin}
一个“简单”的程序(2x + 1
):
+
/ \
2 +
/ \
* \
/ \ \
10 x \
-
/ \
* 1
/ \
- x
/ \
3 11
这表示为树结构,但非树表示已成功实现。
GP 的缺点是必须探索大型搜索 space,而且计算成本非常高。这可以通过根据生成数据的系统的现有知识限制提供给算法的构建块集来减弱。
不过符号回归的这个特性也有优点:因为进化算法需要多样性才能有效探索搜索space.
如果你的项目是一个学习项目,python是一种在相对较短的时间内开发一个简单框架的好语言。
否则你可以看看DEAP(一个很好的基于Python的进化计算框架,包括遗传编程)。