Как можно использовать оценку плотности ядра в качестве одномерного метода кластеризации в обучении scikit?

Мне нужно сгруппировать простой одномерный набор данных в заданное количество кластеров. Технически это было бы ближе к разбивке или сортировке данных, поскольку это всего лишь 1D, но мой начальник называет это кластеризацией, поэтому я буду придерживаться этого имени. Текущий метод, используемый системой, на которой я работаю, - это K-means, но это кажется излишним.

Есть ли лучший способ выполнить эту задачу?

В ответах на некоторые другие посты упоминается KDE (оценка плотности ядра), но как это работает, как оценивать плотность?

Я вижу, как KDE возвращает плотность, но как мне сказать, чтобы она разбивала данные на корзины?

Как у меня есть фиксированное количество бинов, не зависящих от данных (это одно из моих требований)?

Точнее, как можно было бы научиться этому с помощью Scikit?

Мой входной файл выглядит так:

 str ID     sls
 1           10
 2           11 
 3            9
 4           23
 5           21
 6           11  
 7           45
 8           20
 9           11
 10          12

Я хочу сгруппировать номер sls в кластеры или бины, чтобы:

Cluster 1: [10 11 9 11 11 12] 
Cluster 2: [23 21 20] 
Cluster 3: [45] 

И мой выходной файл будет выглядеть так:

 str ID     sls    Cluster ID  Cluster centroid
    1        10       1               10.66
    2        11       1               10.66
    3         9       1               10.66 
    4        23       2               21.33   
    5        21       2               21.33
    6        11       1               10.66
    7        45       3               45
    8        20       2               21.33
    9        11       1               10.66 
    10       12       1               10.66

Ответы на вопрос(1)

Ваш ответ на вопрос