R кластеризация часто немного ограничена. Это конструктивное ограничение R, поскольку оно сильно зависит от низкоуровневого кода C для производительности. Быстрая реализация kmeans, включенная в R, является примером такого низкоуровневого кода, который, в свою очередь, связан с использованием евклидова расстояния.
Существует множество расширений и альтернатив, доступных в сообществе вокруг R. Например, есть PAM, CLARA и CLARANS. Они не точно k-средства, но тесно связаны. Где-то должно быть «сферическое k-среднее», разумное для косинусного расстояния. Существует целое семейство иерархических кластеров (которые масштабируются довольно плохо - обычно O(n^3)
, с O(n^2)
в нескольких исключениях - но очень легко понять концептуально).
Если вы хотите изучить еще несколько вариантов кластеризации, взгляните на ELKI , он должен позволять кластеризацию (с различными методами, включая k-средних) по расстояниям, основанным на корреляции (и он также включает такое расстояние функции). Это не R , но Java. Так что, если вы обязаны использовать R, он не будет работать для вас.