我看了网上和还没有找到答案或方法,以图下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