В этой задаче библиотека scikit-learn нам не поможет, поэтому обратимся к SciPy. Для начала следует воспользоваться функцией linkage из scipy.cluster.hierarchy, которая и проведет процесс кластеризации (ранее я разбирал ее работу). В третьей колонке она возвращает дистанцию между объединяемыми кластерами (из первого и второго столбцов). На ее основании можно и задать предельный порог, после которого дистанция считается существенной и кластера перестают объединяться: Мера дистанции Имея результат linkage, можно применить функцию fcluster того же модуля для присвоения меток кластеров. Однако до этого под капотом она подбирает их количество в соответствии с пороговым значением t для дистанции при заданном параметре criterion='distance' (с дистанцией больше, чем порог, кластера не объединяются): Отмечу, что для подбора подходящего t удобно вывести гистограмму дистанций и квантили различного уровня с методами hist и quantile (например, link_df['dist'].quantile(.8)). Мера "непоследовательнос
Неочевидные способы подбора количества групп для агломеративной кластеризации
11 сентября 202311 сен 2023
13
1 мин