2017-12-29 4 views
0

내가 로그 정규 분포를 맞게하기 위해 노력하고있어 작동하지 맞게 :파이썬 scipy 곡선은

import numpy as np 
import scipy.stats as sp 
from scipy.optimize import curve_fit 


def pdf(x, mu, sigma): 
    return (np.exp(-(np.log(x) - mu)**2/(2 * sigma**2))/(x * sigma * np.sqrt(2 * np.pi))) 


x_axis = [5e5,1e6,2e6,5e6,6e6] 
y_axis = [0,0.2,0.4,0.6,0.8] 
curve_fit(pdf,x_axis,y_axis,maxfev=10000,) 

이 다음 반환

C:\Anaconda3\Lib\site-packages\scipy\optimize\minpack.py:604: OptimizeWarning: Covariance of the parameters could not be estimated 
    category=OptimizeWarning) 
Out[66]: 
(array([ 1., 1.]), array([[ inf, inf], 
     [ inf, inf]])) 

이러한 결과는 정말 대단한 적합하지 않는 것 같아요. 데이터 포인트가 5 개 밖에 없다는 것을 압니다.하지만 solver를 Excel에서 사용할 때 0.1536과 3.1915의 매개 변수를 얻습니다. 완벽하지는 않지만 훨씬 더 가깝습니다.

편집합니다 CDF

def cdf(x,mu,sigma): 
    return sp.norm.cdf((np.log(x)-mu)/sigma) 

curve_fit(cdf,x_axis,y_axis,) 

이 당신이 데이터를 시각화 적이

답변

2

상기와 같은 오류를 반환 이것을 시도? x_axis에 대한

주어진 값과 같은 y_axis보기 : 당신이 다음 mu=0.1536sigma=3.1915와의 주어진 x_axis 값과 엑셀 해결사 값을 사용하는 경우

x- and y-data

는 당신이 얻을 pdf를 시각화 :

fit

은 그래서 뭐 궁금해 당신이 얻길 원하는 결과는 무엇입니까?

실제로 첫 번째 그림의 데이터는 Log-normal pdf와 같지 않습니까?

+0

아니요 -하지만 내 질문에 어떻게 파이썬 비슷한 결과를 재현 할 수 있습니다. 나는이 단계에서 적합성이 얼마나 좋은지 관심이 없다. – user33484

+0

'curve_fit' 메소드 (https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html)는 적합 매개 변수의 시작 값을 제공하기 위해 매개 변수'p0 '을 취할 수 있습니다. 유사한 결과를 원한다면'p0 = [0.1536, 3.1915]'를 시도해 볼 수있다. 편집 : 실제로 시도하면 'In [39] : curve_fit (pdf, x_axis, y_axis, [0.1536, 3.1915]) Out [39] : (배열 ([1.52130172e-01, 1.) 내 생각 엔 Excel 적합성이 너무 잘못되었다고 생각합니다. (예 : e-02)) 배열 ([[6.04181760e + 24, 7.43184344e + 22], [7.43184344e + 22, 2.99493671e + 그것은 scipy fit에 의해 재현 될 수 없다는 것이다. – lebenlechzer

+0

맞아요.하지만 그건 커브를 맞추려고하는 목적을 이깁니다. 기본 곡선이 curve_fit 인 것처럼 Excel에서 solver에 제공 한 초기 매개 변수는 1,1입니다. – user33484