如何在sklearn的python代码中使用SwarmPackagePy进行回归?

Posted

技术标签:

【中文标题】如何在sklearn的python代码中使用SwarmPackagePy进行回归?【英文标题】:How to use SwarmPackagePy in regression in python code of sklearn? 【发布时间】:2018-10-03 03:09:28 【问题描述】:

我可以使用 SwarmPackagePy 库绘制 Firefly 算法的 3D 动画。

我想用这个算法来优化高斯过程回归(GPR)中的超参数。为此,我将 GPR 的优化器定义为:

alh = SwarmPackagePy.fa(50, tf.easom_function, 0, 16, 2, 10, 1, 1, 1, 0.1, 0, 0.1)

animation3D(alh.get_agents(),tf.easom_function, 10,-10)

然后我在 GPR 中使用了这个优化器(alh),如下所示:

gp = GaussianProcessRegressor(kernel=kernel, alpha=1.5, optimizer=alh, n_restarts_optimizer=5)

但是,运行python代码后,我得到如下错误:

ValueError: Unknown optimizer <SwarmPackagePy.fa.fa object at 0x0982A3B0>.

我做错了吗?错误的原因可能是什么?

谢谢!

【问题讨论】:

【参考方案1】:

正如 sklearn 的 documentation 所说,optimizer 参数需要一个可调用的。但是,SwarmPackagePy.fa 不是可调用的。因为它既不是方法,也不是实现__call__方法的类,从这里可以看出:

https://github.com/SISDevelop/SwarmPackagePy/blob/master/SwarmPackagePy/fa.py

您可以在该文件中编写自己的__call__ 方法,使用与以下相同的签名:

def __call__(obj_func, initial_theta, bounds):
# you need to write
# * 'obj_func' is the objective function to be maximized, which
#   takes the hyperparameters theta as parameter and an
#   optional flag eval_gradient, which determines if the
#   gradient is returned additionally to the function value
# * 'initial_theta': the initial value for theta, which can be
#   used by local optimizers
# * 'bounds': the bounds on the values of theta
....
# Returned are the best found hyperparameters theta and
# the corresponding value of the target function.
    return theta_opt, func_min

【讨论】:

以上是关于如何在sklearn的python代码中使用SwarmPackagePy进行回归?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 的 sklearn 中使用交叉验证执行 SMOTE

如何在 python 中的 sklearn 中的不同管道中获取特征名称

如何在 python 中的 sklearn 中获取 GridSearchCV 中的选定功能

如何在 sklearn/python 中修复“ValueError: Expected 2D array, got 1D array”?

如何用 Python 和 sklearn 编写多元对数回归?

如何使用 sklearn python 预测未来的数据帧?