파이썬에서 벡터를 취하여 실수를 반환하는 함수가 있습니다. scipy.optimize fmin 및 fmin_bfgs 함수를 사용하여 함수에 대략적인 최소값을 제공하는 인수를 찾습니다. 그러나, 내가 fmin_bfgs로 전환했을 때, 나는 (아주 천천히) 괜찮은 대답을 얻었지만, 나는 "매트릭스가 정렬되지 않았다"라는 에러 메시지를 받는다. 나는 그것이 잘 작동 FMIN 호출 할 때파이썬에서의 최소화 문제, fmin_bfgs는 작동하지 않지만 fmin은 '매트릭스 정렬되지 않음'
fmin_bfgs(norm, b_guess,fprime=None,
args=(),gtol=0.0001,norm=0.00000000001,
epsilon=1.4901161193847656e-08,maxiter=None,
full_output=0, disp=1, retall=0, callback=None)
, 너무 느리게 (나는 몇 시간을 최적화 할 필요) 유용하게 :
def norm(b_):
b_ = b_.reshape(int(M),1) #M already given elsewhere
Yb = np.dot(Y,b_) #Y already given elsewhere
B = np.zeros((int(M),int(M)))
for j in xrange(int(M)):
B[j][j] = -t[j+1]*np.exp(-t[j+1]*Yb[j]) #The t[j] are already known
P = np.zeros((int(M),1))
for j in xrange(int(M)):
P[j][0] = np.exp(-t[j+1]*Yb[j])
diff = np.zeros((int(M),1)) #Functions d(i,b) are known
for i in xrange(1,int(M)-1):
diff[i][0] = d(i+1,b_) - d(i,b_)
diff[0][0] = d(1,b_)
diff[int(M)-1][0] = -d(int(M)-1,b_)
term1_ = (1.0/N)*(np.dot((V - np.dot(c,P)).transpose(),W))
term2_ = np.dot(W,V - np.dot(c,P)) #V,c,P,W already known
term1_ = np.dot(term1_,term2_)
term2_ = lambd*np.dot(Yb.transpose(),diff)
return term1_ + term2_
는 여기에 내가 fmin_bfgs를 호출하는 방법은 다음과 같습니다 여기 내 기능입니다. 하지만 fmin_bfgs 시도하면이 오류가 발생합니다 :
추적 (가장 최근 호출 마지막) : "C : \ Program Files \ Wing IDE 101 4.0 \ src \ debug \ tserver_sandbox.py"줄 287, 모듈의 파일 파일 "C : \ Python27 \ Lib \ site-packages \ scipy \ optimize \ optimize.py", 491 행, fmin_bfgs old_fval, old_old_fval) 파일 "C : \ Python27 \ Lib \ site-packages \ scipy \ optimize \ line search.py ", line 239, line_search_wolfe2 derphi0, c1, c2, amax) 파일"C : \ Python27 \ Lib \ site-packages \ scipy \ optimize \ linesearch.py ", 339 행, scalar_search_wolfe2에서 phi0, derphi0,파일 "C : \ Python27 \ Lib \ site-packages \ scipy \ optimize \ linesearch.py", 줄 471, _zoom derphi_aj = derphi (a_j) 파일 "C : \ Python27 \ Lib \ site- packages \ scipy \ optimize \ linesearch.py ", 233 행, Derphi에서 np.dot가 반환됩니다. ValueError : 행렬이 정렬되지 않았습니다.
왜 이런 일이 일어날 수 있으십니까? 함수를 제공 한 모든 행렬은 올바르게 정렬됩니다 (함수는 fmin이 작동 한 이후로 작동합니다). 많은 도움을 주셨습니다!
내가 전화를 걸었을 때 어떤 숫자가 너무 커서 커지거나 너무 작아 졌다고 생각합니다. 어쨌든 해결 방법이 있으므로 답변 할 필요가 없습니다. – Derek