遗传编程,在线学习,gplearn

问题描述

我最近发现了GP,并发现它很有趣。显式学习数学表达式与隐式学习神经网络完全不同!我对GP如何与在线学习一起工作很感兴趣,并且我想既然有一个不断发展的过程,在线学习就变得很自然。但是,我不确定我是否已经掌握了所有细节,这使我怀疑自己的直觉是否正确。因此,我认为如果一次提供一个数据点,该算法应该更新数学表达式,也许一次提供几个数据点可能会产生更好的结果。我认为gplearn的max_samples参数允许我指定一次查看多少百分比的数据点,但是所有数据点都必须可用吗?如果所有数据点都不可用怎么办?下面的循环会做什么?

While data keeps coming:
   est_gp.fit(data[0],data[1])

每次运行est_gp.fit时,该方法都会遍历N个可能的函数,并在每次生成修改函数。但是,如果它针对一个数据点执行此操作,那么当引入一个新的数据点时,它将采用先前数据点的获胜模型并将其投放到新的总体中吗?

(注意:GitHub上的问题相同)。

解决方法

GP 非常强大且灵活。

与其他机器学习方法一样,当您拟合模型时,所有数据点都应该可用。适应度函数说明模型可用的当前训练集。可以将新数据点添加到您的训练数据中,然后用于继续演进。

您需要将“warm_start”变量设置为true以继续从当前进化状态中学习:

est_gp.set_params(generations=20,warm_start=True)

如果你只拟合一个数据点,进化将没有理由让旧模型保持活力。总体将很快收敛到只关心新数据点的模型。