簡體   English   中英

python scipy曲線擬合不起作用

[英]python scipy curve fit not working

我正在嘗試擬合對數正態分布:

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]]))

這些結果似乎不太合適。 我知道只有五個數據點,但是當我在excel中使用solver時,得到的參數為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,)

這將返回與上面相同的錯誤

您是否可視化了數據?

x_axisy_axis的給定值如下所示:

x和y數據

如果您使用給定的x_axis值和mu=0.1536sigma=3.1915 Excel求解器值,然后可視化pdf則會得到以下信息:

適合

所以我想知道您想要得到什么結果?

實際上,第一張圖片中的數據看起來並不像Log-normal pdf,不是嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM