如何使 KernelDensity 归一化为 1?

问题描述 投票:0回答:2

我正在使用

KernelDensity
中的
sklearn.neighbors
模块,但 y 轴值很奇怪。有谁知道我该如何解决这个问题?我希望 y 轴对应于百分比概率。

enter image description here

X = data[:, np.newaxis]   
X_plot = np.linspace(0, 20, 1000)[:, np.newaxis]
kde = KernelDensity(kernel='gaussian', bandwidth=0.15).fit(X)
log_dens = kde.score_samples(X_plot)
axis.plot(X_plot[:, 0], np.exp(log_dens), '-',
            label="kernel = '{0}'".format('pft'))
python scikit-learn kernel-density
2个回答
3
投票

上图中的 y 轴已经标准化,并且对应于 概率密度(即曲线下的积分是统一的)。这确实是对连续变量有意义的唯一归一化,因为连续分布中任何特定值的“百分比概率”恰好为零。


0
投票

根据@cel的问题推断,百分比概率的概念不是很清楚。尽管如此,有时我发现用相对术语来表示密度很有用。也许这就是你多年前询问过的问题。

def get_density_ratio_at_zero(values, val):
    dens = scipy.stats.gaussian_kde(values)
    samp_range = np.linspace(np.min(values), np.max(values), 100)
   dens_range = dens(samp_range)
   return ((dens(val) - np.min(dens_range)) / 
            (np.max(dens_range) -  np.min(dens_range)))[0]

这将为您提供

val
处的密度,以最大和最小密度之间范围的百分比形式表示

© www.soinside.com 2019 - 2024. All rights reserved.