curve_fit
은 정규화를 지원하지 않습니다. 항상 최소 제곱 비용 함수를 사용합니다. 적합성을 정규화하려면 scipy.optimize.minimize
으로 최소화하는 사용자 정의 비용 함수를 작성해야합니다. 이 희망 curve_fit
당신에게 유사한 결과를 얻을 수
def eq_m(x, lamb, mu, sigm): # assumed signature of eq_m
pass
def cost(params): # simply use globally defined x and y
lamb, mu, sigm = params
model = eq_m(x, lamb, mu, sigm)
return np.mean((model - y)**2) # quadratic cost function
p0 = [1, 0, 1] # initial guess for lambda, mu, and sigma
res = o.minimize(cost, p0)
print(res) # see if minimization succeeded.
lamb, mu, sigm = res.x
:
하자 먼저 최소화 문제에 피팅 곡선을 번역합니다. (그렇지 않은 경우는 디버깅을 시작할 시간이다.)
이제 우리는 정규화를 구현하는 비용 함수와 함께 재생할 수 있습니다 :
def cost(params):
lamb, mu, sigm = params
model = eq_m(x, lamb, mu, sigm)
reg = lamb**2 + mu**2 + sigm**2 # very simple: higher parameters -> higher cost
regweight = 1.0 # determines relative importance of regularization vs goodness of fit
return np.mean((model - y)**2) + reg * regweight
차적으로 매개 변수를 처벌하는 엄격한 필요가 없습니다. 기본적으로 아무 것도 할 수 있습니다. 매개 변수가 커지면 비용이 증가합니다. 결과는 달라질 수 있습니다 :-)
이 모든 것은 엄격한 이론적 근거가 부족한 매우 ad-hoc 방식입니다. 감독자가 제안한 공역 사전사 사용 제안은 베이지안 추정 기술을 사용하기를 기대하는 것처럼 들립니다. 특정 전임자가 정규화와 동등한 것으로 간주 될 수 있지만 접근 방식은 완전히 다르며 수학적으로 참여할 수 있습니다. 비용 함수 대신에 우도 함수를 정의하고 매개 변수에 대해 사전을 정의하고 Bayes의 규칙을 사용하여 결합하여 후위 우도를 얻습니다. 그러면 최종 확률을 최대화합니다.