簡體   English   中英

Seaborn distplot:具有一些固定參數的擬合分布

[英]Seaborn distplot: fit distribution with some fixed parameres

我想為給定的數據數組x和 plot 擬合一些分布,比如伽瑪,相應的密度為 function。我可以通過seaborn.distplotscipy.stats輕松實現:

sns.distplot(x, fit = stats.gamma)

但是,假設我希望此分布的某些參數保持固定,例如loc 當我使用來自scipy.statsfit function 和 fixed loc時,我把它寫成

stats.gamma.fit(x, floc = 0)

有沒有辦法通過loc=0fit distplot function 並獲得相同的結果?

這是一個很好的問題。 要找到給定數據集的 Gamma 分布近似值,您可以使用 liklihood function。這是公式的鏈接。 https://en.wikipedia.org/wiki/Gamma_distribution在這里,我根據給定的伽瑪參數生成了一些隨機數。 然后我使用數據和最大似然來找到分布的參數。

import numpy as np
from scipy.special import psi
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.optimize import fsolve

# Generating Random variable based on Gamma dist:

shape, scale = 3., 5.  # 
s = np.random.gamma(shape, scale, 1000)

plt.hist(s, 50, density=True)


# Solving Liklihood:
Log_s=np.log(s)
Mean_s=np.mean(s)
Size_s=np.size(s)

k=fsolve(lambda k: np.log(k)-psi(k)-np.log(Mean_s)+(1/Size_s)*np.sum(Log_s),.1)
theta=Mean_s/k

sns.distplot(np.random.gamma(k, theta, 1000), hist=False, label='Gamma')

plt.show()

sns.distplot(x, fit = stats.gamma)確實顯示合理圖並且stats.gamma.fit(x, loc = 0)將給出所需統計量的情況下,可以通過fit_kws提供參數:

sns.distplot(x, fit = stats.gamma, fit_kws={"loc" : 0})

[此答案基於閱讀文檔而未經測試,因為問題中未提供用例。]

要做到這一點最簡單的方法是使用distplot的配合,但使用所描述的方法不積在這個崗位 提供的簡單示例:

import matplotlib.pyplot as plt
import pandas as pd
from scipy import stats
import numpy as np

df = pd.DataFrame(np.random.gamma(2, scale=2, size=5000),
                  columns=['samples'])

params = stats.gamma.fit(df.samples, loc=0)
xvals = np.linspace(0, df.samples.max())
pdf = lambda x: stats.gamma.pdf(xvals, *params)
yvals = pdf(xvals)

fig, ax1 = plt.subplots()

df.samples.hist(bins=20, ax=ax1, normed=True, label='Samples',
                grid=False, edgecolor='k')

plt.plot(xvals, yvals, axes=ax1, c='r', label='Fit')
ax1.legend()

這將導致類似... 沒有足夠的代表嵌入

暫無
暫無

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

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