0
아래는 베타 벡터를 업데이트하는 데 사용한 코드입니다. 무작위로 초기화됩니다. 그러나 여러 번 반복 한 후에는 베타 벡터가 업데이트되지 않습니다. 비용도 줄어들지 않습니다. 내가 놓친 게 있니?scipy.optimize.minimize가 가중치 매개 변수를 업데이트하지 않습니다.
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
목적 함수에서'인쇄 (베타) '할 때 무엇을 볼 수 있습니까? –
@NilsWerner 항상 [0.03935521 0.45679144 0.45673816 0.56107001] – Munichong
@NilsWerner obj 함수에서 정규화를 제거했습니다. 그것은 잘 작동합니다. 비정상 화를 추가하는 것이 왜 효과가 없는지는 이상합니다. – Munichong