Я хотел бы закодировать кластеризацию kmeans в python, используя pandas и scikit learn. Чтобы выбрать хороший k, я хотел бы закодировать статистику разрыва из Tibshirani и др. 2001 ( pdf ).
Я хотел бы знать, могу ли я использовать результат inertia_ от scikit и адаптировать формулу статистики разрыва без необходимости перекодировать все вычисления расстояний.
Кто-нибудь знает формулу инерции, используемую в scikit / знает простой способ перекодировать статистику разрыва, используя функции высокого уровня расстояния?
clustering
python
k-means
scikit-learn
metric
царапать
источник
источник
python
.Ответы:
Я думаю, я нашел свой ответ для кластеризации kmeans:
Просматривая исходный код git, я обнаружил, что для обучения scikit инерция вычисляется как сумма квадратов расстояния для каждой точки до ее ближайшего центроида, то есть назначенного ему кластера. Поэтому где c r - центр тяжести назначенного кластера, а d - квадрат расстояния.я= ∑я( д( я , с т ) ) с г d
Теперь формула статистики разрыва включает в себя гдеDr- сумма квадратов расстояний между всеми точками в кластереr.
Вводя , - c в формулу квадрата расстояния ( c является центроидом координат кластера r ), у меня есть термин, который соответствует инерции (как в scikit) + термин, который исчезает, если каждый c является барицентром каждого кластера. (который должен быть в kmeans). Так что я думаю, что W k на самом деле является инерцией.+ с - с с р с WК
У меня есть еще два вопроса:
источник