【问题标题】:scipy.optimize.minimize does not update weight parametersscipy.optimize.minimize 不更新权重参数
【发布时间】:2017-12-05 16:17:23
【问题描述】:

下面是我用来更新 beta 向量的代码。它是随机初始化的。但是,经过几次迭代后,beta 向量并未更新。成本也不会降低。我错过了什么吗?

def objective_func(beta, features, spread, target):
    res = 0
    for i, feats in enumerate(features):
        W = feats.dot(beta)  # Series
        weighted_spread = W * spread[i]  # Series
        normalization = weighted_spread.sum()
        res += (target[i] - (weighted_spread / normalization).sum()) ** 2
    print(res)  # It always prints the same value
    return res

initial_beta = np.array([random() for _ in range(features[0].shape[1])])
print(initial_beta)
res = optimize.minimize(objective_func, x0=initial_beta,
                        args=(list(compress(features, training_mask)),
                              list(compress(spread, training_mask)),
                              list(compress(target, training_mask))),
                        method='L-BFGS-B',
                        callback=True)
print(initial_beta)
print(res.x)
print(res.success)
print(res.status)
print(res.message)
print(res.nit)

控制台:

[ 0.03935521  0.45679144  0.45673816  0.56107001]  # initial_beta before minimizing
228.625  # res
228.625
228.625
228.625
228.625
[ 0.03935521  0.45679144  0.45673816  0.56107001]  # initial_beta after minimizing
[ 0.03935521  0.45679144  0.45673816  0.56107001]  # res.x
True  # res.success
0  # res.status
b'CONVERGENCE: NORM_OF_PROJECTED_GRADIENT_<=_PGTOL'  # res.message
0  # res.nit

【问题讨论】:

  • 当您在目标函数中print(beta) 时看到了什么?
  • @NilsWerner 它总是 [ 0.03935521 0.45679144 0.45673816 0.56107001]
  • @NilsWerner 我刚刚删除了 obj func 中的规范化。它工作正常。奇怪的是为什么添加规范化不起作用。

标签: python numpy optimization scipy


【解决方案1】:

我只是发现 normalization = weighted_spread.sum() 应该是 normalization = W.sum() 。数学问题。

【讨论】:

    猜你喜欢
    • 2019-03-31
    • 2017-04-06
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多