문제

Scipy 'Leastsq'최적화 루틴에 문제가 있습니다. 다음 프로그램을 실행하면

    raise errors[info][1], errors[info][0]
TypeError: Improper input parameters.

그리고 어떨 때에는 index out of range for an array...

from scipy import *
import numpy
from scipy import optimize
from numpy import asarray
from math import *

def func(apar):
  apar = numpy.asarray(apar)
  x = apar[0]
  y = apar[1]
  eqn = abs(x-y)
  return eqn

Init = numpy.asarray([20.0, 10.0])
x = optimize.leastsq(func, Init, full_output=0, col_deriv=0, factor=100, diag=None, warning=True)
print 'optimized parameters: ',x
print '******* The End ******'

내 FUNC OPTIMIZE.LEASTSQ () 전화의 문제가 무엇인지 모르겠습니다.

도움이 되었습니까?

해결책

leastsq 잔류 기능을 통해 벡터와 함께 작동합니다. func, 길이의 벡터를 최소 2 개 이상 반환해야합니다. 따라서 교체하면 return eqn ~와 함께 return [eqn, 0.], 당신의 예가 작동합니다. 실행 :

optimized parameters:  (array([10., 10.]), 2)

절대적인 차이의 최소값에 대한 많은 정답 중 하나입니다.

스칼라 함수를 최소화하려면 fmin 가는 길입니다. optimize.fmin(func, Init).

여기서 문제는 스칼라에서 동일하게 보이지만이 두 기능은 다른 목표를 목표로한다는 것입니다. leastsq 일반적으로 이상화 된 곡선 세트에서 가장 적은 제곱 오류를 발견하며 "가장 적합한"방법 중 하나 일뿐입니다. 반면에 fmin 스칼라 함수의 최소값을 찾습니다.

분명히 당신은 장난감의 예입니다. 이들 중 어느 것도 실제로 의미가없는 장난감 예제입니다. 그래서 당신이가는 길에 어떤 방법이 당신의 최종 목표에 달려있을 것입니다.

다른 팁

간단한 스칼라 함수를 최소화하려면 (func() 값 목록이 아닌 단일 값을 반환), scipy.optimize.leastsq() 중 하나에 대한 호출로 대체해야합니다. fmin 기능 (적절한 인수 포함) :

x = optimize.fmin(func, Init)

올바르게 작동합니다!

사실로, leastsq() 값 목록의 사각형의 합을 최소화합니다. 예제에서와 같이 (이론적으로는) 단일 값을 포함하는 목록에서 작동하지 않는 것 같습니다.

그냥보고 있습니다 최소 제곱 문서, 그것은 당신의 기능 일 수 있습니다 func 잘못 정의됩니다. 당신은 항상 최소한 길이 2의 배열을 수신한다고 가정하지만 최적화 함수는받을 배열의 길이에 대해 엄청나게 모호합니다. 당신은 무엇이든 스크리닝하기 위해 글을 쓰려고 할 수도 있습니다 apar 당신이 실제로 얻는 것을 보는 것입니다.

당신이 같은 것을 사용하는 경우 ipython 또는 파이썬 쉘, 당신은 오류가 발생하는 줄을 정확하게 보여주는 스택 추적을 가져와야하므로 시작하십시오. 당신이 거기에서 그것을 알아낼 수 없다면, 스택 추적을 게시하면 아마도 우리에게 도움이 될 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top