2017-12-29 14 views
0

を働いていないフィット:Pythonの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つしかないことを知っていますが、ソルバーを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値とExcelのソルバー値を使用している場合

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]: (array([1.52130172e-01、1.62769369 E + 02])、 配列([[6.04181760e + 24、+ 22 7.43184344e]、 [7.43184344e + 22、+ 21 2.99493671e]])) ' だから私の推測では、Excelのフィット感がとても間違っているということですシフィフィットでは再現できないということです。 – lebenlechzer

+0

右ですが、カーブに合わせようとする目的に反するものです。私がソルバーに与えた最初のパラメータは、デフォルトはcurve_fitと同じように1,1です。 – user33484

関連する問題