Я перешел по этой ссылке для применения оценки плотности ядра. Моя цель - создать две разные группы / кластеры или более для группы массивов. Приведенный ниже код работает для всех членов группы массивов, кроме этого массива:
X = np.array([[77788], [77793],[77798], [77803], [92886], [92891], [92896], [92901]])
Поэтому я ожидаю увидеть два разных кластера, таких как:
first_group = ([[77788], [77793 ], [77798], [77803]])
second_group = ([[92886], [92891], [92896], [92901]])
У меня есть динамика c список, поэтому я не могу исправить значение для 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)
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
bandwidth = 0.00002