为内核密度估计选择带宽和线性空间。 (为什么我的带宽不起作用?)] <<

问题描述 投票:1回答:1
我遵循this link进行核密度估计的应用。我的目标是为一个阵列组创建两个不同的组/集群。以下代码适用于该数组以外的数组组的每个成员:

X = np.array([[77788], [77793],[77798], [77803], [92886], [92891], [92896], [92901]])

所以我期望看到两个不同的集群,例如:

first_group =([[77788],[77793],[77798],[77803]])

second_group =([[92886],[92891],[92896],[92901]])

我有一个动态列表,所以我无法固定linspace的值。因为此数组可能是0到10或100000到2000000。这就是为什么我将数组的最大和最小点放在linspace中的原因。

毕竟,即使尝试了各种带宽,我也无法获得不同的群集。我的代码可以在下面看到:

a = X.reshape(-1,1) kde = KernelDensity(kernel='gaussian', bandwidth=8).fit(a) s = linspace(min(a),max(a)) e = kde.score_samples(s.reshape(-1,1)) plot(s, e)

enter image description here

mi, ma = argrelextrema(e, np.less)[0], argrelextrema(e, np.greater)[0] print("Minima:", s[mi]) # output: [] print("Maxima:", s[ma]) # output: []

s [mi]和s [ma]的值为空,这意味着此数组没有两个不同的簇。在可视化中可以看到,我们至少有一个最小点。为什么看不到s [mi]输出的此值? 

而且我将相同的代码应用于不同的带宽,如下所示,但是,此群集没有最小值或最大值。所以知道我在做什么错吗?

bandwidth=0.008

enter image description here

bandwidth = 0.00002

enter image description here

我已遵循此链接进行内核密度估计的应用。我的目标是为一个阵列组创建两个不同的组/集群。以下代码适用于数组的每个成员...

python machine-learning scikit-learn cluster-analysis kernel-density
1个回答
0
投票
尝试使用10000的带宽,或尝试依靠启发式方法选择带宽。
© www.soinside.com 2019 - 2024. All rights reserved.