Python中的MATLAB ksdensity等价物

Dat*_*aTx 7 python matlab numpy scipy

我已经在线查看并且尚未找到答案或方法来计算以下内容

我正在将一些MATLAB代码翻译成Python,在MATLAB中我希望用函数找到内核密度估计:

[p,x] = ksdensity(data)
Run Code Online (Sandbox Code Playgroud)

其中p是分布中x点的概率.

Scipy有一个函数,但只返回p.

有没有办法找到x值的概率?

谢谢!

Rob*_*ern 6

这种形式的ksdensity呼叫会自动生成任意形式x.scipy.stats.gaussian_kde()返回一个可调用的函数,可以使用x您选择的任何函数进行评估.等效xnp.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)
Run Code Online (Sandbox Code Playgroud)


pai*_*nco 5

另一种选择是 Scikit-Learn Python 包中的内核密度估计器sklearn.neighbors.KernelDensity

这是一个类似于高斯分布的 ks密度的 Matlab 文档的小例子:

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()
Run Code Online (Sandbox Code Playgroud)

这产生的情节看起来像:

在此处输入图片说明