2017-12-05 11 views
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 
+0

목적 함수에서'인쇄 (베타) '할 때 무엇을 볼 수 있습니까? –

+0

@NilsWerner 항상 [0.03935521 0.45679144 0.45673816 0.56107001] – Munichong

+0

@NilsWerner obj 함수에서 정규화를 제거했습니다. 그것은 잘 작동합니다. 비정상 화를 추가하는 것이 왜 효과가 없는지는 이상합니다. – Munichong

답변

0

난 그냥 normalization = weighted_spread.sum()normalization = W.sum()을해야한다고 알아낼. 수학 문제.