基于遗传编程(Genetic Programming)的符号回归(Symbolic Regression)简介

本学期加入了数学代数系统Mathumu协会的内核开发部。

Mathmu这个项目,简单地说,就是开发清华人(中国人)自己的Mathematica。

以Mathematica为目标可能显得有些不自量力。达到甚至超越Mathematica不可能是我们这几十个学生在段时间内就能够做到的,但谁知道呢?Linus Torvalds当初(1991)写Linux的时候难道也预计到如今Linux得到如此广泛的应用吗?

 

我加入协会的第一项工作,结合了我自己的兴趣和项目的愿景,是为Mathmu开发一个基于遗传编程(Genetic Programming)的符号回归(Symbolic Regression)模块。

 

这里有两个各位可能觉得陌生的术语:遗传编程和符号回归。

 

遗传编程,简而言之,就是让计算机程序,像生物一样,变异、交配、繁殖,最终演化成符合特定的需求的程序。

Wikiepedia是这样介绍的:“In artificial intelligence, genetic programming (GP) is an evolutionary algorithm-based methodology inspired by biological evolution to find computer programs that perform a user-defined task. It is a specialization of genetic algorithms (GA) where each individual is a computer program. It is a machine learning technique used to optimize a population of computer programs according to a fitness landscape determined by a program's ability to perform a given computational task.”

 

符号回归,是相对于“数值”回归(Numerical Regression)而言的,即统计中的回归分析,比如我们熟悉的线性回归。回归分析通常要首先假设问题所服从的函数的形式及其参数,然后根据数据求得最符合的一组参数,从而最终确定函数。可以看到,应用回归分析的人员需要对问题领域有比较深入的了解,这样才能给出一个“合理”的函数形式。而当问题很复杂或者研究人员对其认识程度有限时这往往是难以做到的。

 

这时符号回归就可以派上用处了。符号回归是遗传编程最早的一类应用之一。符号回归的终结符集合(terminal set)主要由运算符(比如+, -, *, /, sin, cos, log等等),随机数和变量(x0, x1, .., xn)组成。这里,演化的程序就是一串终结符(代表函数y=f(x0, x1, x2, ..., xn))。我们希望最终得到的程序,即y=f(x0, x1, ..., xn),能够尽量符合给定的数据集。注意,与回归分析不同的是符号回归完全没有假定函数的形式,实际上,符号回归(包括遗传编程,甚至整个计算智能(Computational Intelligence)和演化计算(Evolutionary computing)领域)的目标就是全自动地发现知识、模式和规律。

 

参考文献:

  • A field guide to genetic programming:一本入门的书,09年新出,基本介绍之后总结了该领域20多年的主要进展、方向和应用。
  • Genetic Programming系列:John Koza写的,他是这个领域的鼻祖级人物,目前已经出版4本。

网络资源:

  • Symbolic Regression:A Overview:对符号回归的一个简短的介绍
  • Example Run of Genetic Programming:John Koza书上的一个很好的例子,给你对遗传编程的直观感觉

 

你可能感兴趣的:(学术,编程,mathematica,terminal,linux,生物,出版)