1

에 맞게 새로운 데이터를 예측하기 위해 적합한 매개 변수를 사용하십시오. I는 모두 다양한 데이터 군에이 모델을 실행의 그것을 eq_m 부르 자 내가 모델 방정식을

opt_parms, parm_cov = o.curve_fit(eq_m, x, y,maxfev=50000) 
lamb , mu, sigm = opt_parms 

:

그러나이 eq_m 비 선형 따라서 I가 다음 코드를 사용하여, 람다, 뮤 시그마 파라미터 값을 얻을 scipy의 curve_fit 사용되고 이 모델을 따르기로되어 있고, 55/60은 큰 결과를 얻었지만 나머지 5 개 그룹은 매우 적합하고 높은 양수 값을 가진 매개 변수를 예측했습니다. scuffy/numpy 또는 scikit-learn을 사용하여 커브 피트를 정규화하고 높은 강도 매개 변수 값을 처벌 할 수있는 방법이 있습니까?

내 상사가 공진 예비역을 사용하도록 제안했으나 여기서 어떻게 해야할지 잘 모릅니다.

아무도 도와 줄 수 있습니까? 이 문제를 해결하기위한 추측을 제공해야한다면 누군가이 추측을 계산하는 방법을 말해 줄 수 있습니까?

답변

2

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의 규칙을 사용하여 결합하여 후위 우도를 얻습니다. 그러면 최종 확률을 최대화합니다.