Выбор полосы пропускания и пространства для оценки плотности ядра. (почему моя пропускная способность не работает?) - PullRequest
1 голос
/ 22 февраля 2020

Я перешел по этой ссылке для применения оценки плотности ядра. Моя цель - создать две разные группы / кластеры или более для группы массивов. Приведенный ниже код работает для всех членов группы массивов, кроме этого массива:

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)

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

1 Ответ

0 голосов
/ 24 февраля 2020

Попробуйте полосу пропускания 10000 или попробуйте полагаться на эвристику при выборе полосы пропускания.

Чтобы сделать ваш код более устойчивым, также разбивайте кластеры на последовательных минимумах. Потому что ваша проблема в том, что здесь нет единственного минимума, а есть интервал.

...