Подход, который дает более согласованные результаты, - это K-means ++ . Этот подход признает, что, вероятно, лучший выбор исходных местоположений центроидов, чем простое случайное распределение. В частности, K-средства имеют тенденцию работать лучше, когда центроиды высеваются таким образом, что они не слипаются в пространстве.
Короче говоря, метод заключается в следующем:
- Выберите одну из ваших точек данных случайным образом в качестве начального центроида.
- Рассчитайте , расстояние между вашим исходным центроидом и всеми другими точками данных, .Д ( х )Икс
- Выберите свой следующий центр тяжести из оставшихся точек данных с вероятностью, пропорциональнойД ( х )2
- Повторяйте, пока все центроиды не будут назначены.
Примечание: следует обновить по мере добавления новых центроидов. Должно быть установлено расстояние между точкой данных и ближайшим центроидом.Д ( х )
Вам также может быть интересно прочитать этот документ, в котором предлагается метод и описываются его общие ожидаемые результаты.
Обычный подход к этой проблеме состоит в том, чтобы повторно запустить алгоритм K-средних несколько раз с различными случайными инициализациями центроидов и сохранить лучшее решение. Вы можете сделать это, оценивая результаты по вашим данным обучения или путем перекрестной проверки.
Есть много других способов инициализации центроидов, но ни один из них не будет наилучшим для каждой проблемы. Вы можете оценить эти подходы вместе со случайной инициализацией для вашей конкретной проблемы.
источник
Я согласен с сюжетом Elbow / Scree. Я нашел это более интуитивно понятным, чем случайное семя. Вот пример кода, чтобы попробовать это.
источник