我试图在我的直方图上执行核密度估计,该直方图是在图像上计算的:
我使用scikit学习使用高斯核计算核密度估计:
histogram = np.histogram(img, bins=256, range=(0,255), normed=False)
X = histogram[0][:, np.newaxis]
X_plot = np.linspace(0,255,256,)[:, np.newaxis]
kde = KernelDensity(kernel='gaussian', bandwidth=0.5).fit(X)
log_dens = kde.score_samples(X_plot)
res = np.exp(log_dens)
然而,当我绘制' res'时,我只得到它的前3/4值不同于0.我不明白为什么我没有得到一个很好的估计,而我遵循给出的指示这里:
http://scikit-learn.org/stable/auto_examples/neighbors/plot_kde_1d.html
答案 0 :(得分:1)
正如您所提到的,您不需要执行直方图步骤。函数KernelDensity.fit估计给定一组样本的密度。然后,您只需在预定义的网格上绘制密度估计值。
plt.figure()
X_plot = np.arange(255)[:, None] # predefined grid
# estimate density on samples
kde = KernelDensity(kernel='gaussian', bandwidth=0.2).fit(X.ravel()[:, None])
log_dens = kde.score_samples(X_plot) # evaluate the density model on the data.
plt.plot(np.exp(log_dens))
plt.show()