Формула формулы инерции в скиките учиться

9

Я хотел бы закодировать кластеризацию kmeans в python, используя pandas и scikit learn. Чтобы выбрать хороший k, я хотел бы закодировать статистику разрыва из Tibshirani и др. 2001 ( pdf ).

Я хотел бы знать, могу ли я использовать результат inertia_ от scikit и адаптировать формулу статистики разрыва без необходимости перекодировать все вычисления расстояний.

Кто-нибудь знает формулу инерции, используемую в scikit / знает простой способ перекодировать статистику разрыва, используя функции высокого уровня расстояния?

царапать
источник
Я думаю, что этот вопрос имеет достаточное статистическое содержание, чтобы быть актуальным для CV, но учтите, что он также требует довольно сложного программирования и знаний Python. Может быть трудно получить хороший ответ. Вы можете попросить / быть готовым согласиться и на псевдокод , и / или вам может потребоваться разделить этот вопрос на 2 части: 1 здесь о статистических аспектах и ​​1 часть о переполнении стека об аспектах программирования на Python. (Или, может быть, нет, я не знаю наверняка, но я просто хочу дать вам справедливое предупреждение; мы посмотрим, как это будет.)
gung - Восстановить Монику
1
Этот вопрос требует определения термина «инерция». Похоже, это придумано внутри python.
ttnphns

Ответы:

6

Я думаю, я нашел свой ответ для кластеризации kmeans:

Просматривая исходный код git, я обнаружил, что для обучения scikit инерция вычисляется как сумма квадратов расстояния для каждой точки до ее ближайшего центроида, то есть назначенного ему кластера. Поэтому где c r - центр тяжести назначенного кластера, а d - квадрат расстояния. язнак равноΣя(d(я,ср))срd

Теперь формула статистики разрыва включает в себя гдеDr- сумма квадратов расстояний между всеми точками в кластереr.

WКзнак равноΣрзнак равно1К1(2*Nр)Dр
Dрр

Вводя , - c в формулу квадрата расстояния ( c является центроидом координат кластера r ), у меня есть термин, который соответствует инерции (как в scikit) + термин, который исчезает, если каждый c является барицентром каждого кластера. (который должен быть в kmeans). Так что я думаю, что W k на самом деле является инерцией.+с-ссрсWК

У меня есть еще два вопроса:

  1. Как вы думаете, мое исчисление правильно? (Например, я не знаю, верно ли это для иерархической кластеризации.)
  2. Если я прав, как указано выше, я закодировал статистику разрыва (как разность логарифмических инерций между оценкой и кластеризацией), и она плохо работает, особенно на наборе данных iris, кто-нибудь пробовал?
царапать
источник
2
Лучше не ставить вопросы в своих ответах. Если на самом деле это не ответ на ваш вопрос, а лишь частичное решение для выяснения реального вопроса, было бы лучше отредактировать ваш вопрос и вставить в него эту информацию.
gung - Восстановить Монику
1
@ Scratch, вы когда-нибудь получали на Python реализацию статистики разрыва для работы с набором данных Iris? Я борюсь с той же проблемой.
Zelazny7
Да, я закодировал один несколько месяцев назад. Как я могу отправить тебе это?
Царапина
1
WКзнак равноΣрзнак равно1КDр(2*Nр)