MATLAB在Python中的密度等价
我在网上查过,还没有找到一个答案或方法来解决以下问题 我正在将一些MATLAB代码翻译成Python,在MATLAB中,我希望通过函数找到内核密度估计:MATLAB在Python中的密度等价,python,matlab,numpy,scipy,Python,Matlab,Numpy,Scipy,我在网上查过,还没有找到一个答案或方法来解决以下问题 我正在将一些MATLAB代码翻译成Python,在MATLAB中,我希望通过函数找到内核密度估计: [p,x] = ksdensity(data) 其中p是分布中x点处的概率 Scipy有一个函数,但只返回p 有没有办法找到x值的概率 谢谢 另一个选项是Scikit学习Python包中的内核密度估计器 下面是一个类似于Matlab文档中关于高斯分布的ksdensity的小示例: import numpy as np import matpl
[p,x] = ksdensity(data)
其中p是分布中x点处的概率
Scipy有一个函数,但只返回p
有没有办法找到x值的概率
谢谢 另一个选项是Scikit学习Python包中的内核密度估计器 下面是一个类似于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()
由此生成的绘图如下所示:
这种形式的
ksdensity
调用会自动生成任意的x
scipy.stats.gaussian_kde()
返回一个可调用函数,该函数可以使用您选择的任何x
进行计算。等价的x
将是np.linspace(data.min(),data.max(),100)
在寻找最佳带宽时,Matlab比KernelDensity快几个数量级。你知道如何让KernelDenisty更快吗尤卡7月16日18日20:58
嗨,尤卡。matlab用于估计带宽,这很快,但需要来自正态分布的数据。有关更多信息,请参见此图。为了快速参考,我尝试了
scipy.stats.gaussian_kde()
和sklearn.neights.KernelDensity
,第一个是kerneldead
,第二个是有效的。在找到最佳带宽时,Matlab比KernelDensity快几个数量级。你知道如何让KernelDenisty更快吗?
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)