Я группирую некоторые данные, используя scikit.
У меня самая простая задача: я знаю количество кластеров. И я знаю размер каждого кластера. Можно ли указать эту информацию и передать ее функции К-средних?
Я группирую некоторые данные, используя scikit.
У меня самая простая задача: я знаю количество кластеров. И я знаю размер каждого кластера. Можно ли указать эту информацию и передать ее функции К-средних?
K-means - это минимизация дисперсии, и кажется, что ваша цель - создать разделы предопределенного размера, а не минимальной дисперсии.
Однако вот учебник, в котором показано, как изменить k-средние для создавать кластеры одинакового размера. Вы можете легко расширить это, чтобы создавать кластеры желаемого размера вместо среднего размера. Модифицировать k-средние таким образом довольно легко. Но результаты будут еще более бессмысленными, чем результаты k-средних для большинства наборов данных. K-средние часто так же хороши, как случайные выпуклые разбиения.
Нет. Для этого вам нужен какой-то тип алгоритма кластеризации с ограничениями, и ни один из них не реализован в scikit-learn. (Это не «самая простая возможная задача», я бы даже не знал о принципиальном алгоритме, который это делает, кроме некоторого эвристического перемещения образцов из одного кластера в другой.)
Я могу думать только об алгоритме грубой силы. Если кластеры хорошо разделены, вы можете попробовать запустить кластеризацию несколько раз с разными случайными инициализациями, предоставляя в качестве входных данных только количество кластеров. После каждой итерации подсчитывайте размер каждого кластера, сортируйте его и сравнивайте с отсортированным списком известных размеров кластеров. Если они не совпадают, промойте и повторите.