我看了網上和還沒有找到答案或方法,以圖下MATLAB ksdensity相當於在Python
我翻譯一些MATLAB代碼到Python其中MATLAB即時通訊尋求找到核密度估計具有以下功能:
[p,x] = ksdensity(data)
其中p是分佈中點x處的概率。
scipy有一個函數,但只返回p。
有沒有辦法找到x值的概率?
謝謝!
我看了網上和還沒有找到答案或方法,以圖下MATLAB ksdensity相當於在Python
我翻譯一些MATLAB代碼到Python其中MATLAB即時通訊尋求找到核密度估計具有以下功能:
[p,x] = ksdensity(data)
其中p是分佈中點x處的概率。
scipy有一個函數,但只返回p。
有沒有辦法找到x值的概率?
謝謝!
的的那個形式電話自動生成任意x
。 scipy.stats.gaussian_kde()
返回可調用的函數,可以用您選擇的任何x
進行評估。相當於x
將是np.linspace(data.min(), data.max(), 100)
。
import numpy as np
from scipy import stats
data = ...
kde = stats.gaussian_kde(data)
x = np.linspace(data.min(), data.max(), 100)
p = kde(x)
另一種選擇是在Scikit-學習Python包的內核密度估計,sklearn.neighbors.KernelDensity
這裏是類似於Matlab的文檔ksdensity對於高斯分佈的小例子:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import KernelDensity
np.random.seed(12345)
# similar to MATLAB ksdensity example x = [randn(30,1); 5+randn(30,1)];
Vecvalues=np.concatenate((np.random.normal(0,1,30), np.random.normal(5,1,30)))[:,None]
Vecpoints=np.linspace(-8,12,100)[:,None]
kde = KernelDensity(kernel='gaussian', bandwidth=0.5).fit(Vecvalues)
logkde = kde.score_samples(Vecpoints)
plt.plot(Vecpoints,np.exp(logkde))
plt.show()
情節這產生的樣子:
只是一個快速參考,我都嘗試'scipy.stats.gaussian_kde()'和'sklearn.neighbors.KernelDensity',第一我'內核dead',第二個作品。 – cqcn1991 2015-09-06 08:31:30