Scipy/python中分段函数的优化

Posted

技术标签:

【中文标题】Scipy/python中分段函数的优化【英文标题】:Optimization of a piecewise function in Scipy/python 【发布时间】:2016-07-24 14:56:37 【问题描述】:

我一直在尝试通过 scipy 优化器传递分段函数。我在下面构建的示例显示了问题:

args = (6,6,7,1,2,4,6,6)
def _alpha(params, *args):
    knot = params[0]
    rate = np.asarray(args)
    where_knot = np.where(rate>knot, 1, 0)
    return np.sum(where_knot)
​
seed_vals = (5,)
bounds = ((1,7), )
res1 = optimize.minimize(_alpha, seed_vals, args=args, method='L-BFGS-B', bounds=bounds)
res1.x
>>> array([ 5.])

但是,这显然不是解决方案:

print _alpha((5,), args)
>>> 5
print _alpha((7,), args)
>>> 0

有没有办法做到这一点?

编辑:我也尝试了 numpy 分段函数并得到相同的结果。

【问题讨论】:

optimize.minimize 是本地优化器,而不是全局优化器。如果您在平台期开始优化过程,它不会有任何进展。 【参考方案1】:

您需要使用以下方法调整近似步长:http://docs.scipy.org/doc/scipy/reference/optimize.minimize-lbfgsb.html#optimize-minimize-lbfgsb

默认值类似于 .0000001,因此它会估计节的 0 梯度

【讨论】:

以上是关于Scipy/python中分段函数的优化的主要内容,如果未能解决你的问题,请参考以下文章

启用优化时的g ++分段错误

深度学习的损失函数优化方法

优化理论20---插值法: Hermite插值法龙格现象分段插值样条插值

TCP协议(包括TCP的连接过程,数据分段,TCP有关服务器优化)

clickhouse 在order by非常慢的情况下优化(引擎+分段sql)

多库取数的性能优化方案