Может кто-нибудь указать мне реализацию k-средних (было бы лучше, если бы в Matlab), который может принимать матрицу расстояний на входе? Для стандартной реализации Matlab требуется матрица наблюдения на входе, и пользовательское изменение меры подобия невозможно.
clustering
matlab
k-means
Eugenio
источник
источник
Ответы:
Так как k-means должен иметь возможность находить средние значения различных подмножеств точек, которые вы хотите сгруппировать, на самом деле не имеет смысла запрашивать версию k-средних, которая принимает матрицу расстояний в качестве входных данных.
Вместо этого вы можете попробовать k-medoids . Есть несколько доступных реализаций Matlab .
источник
Вы можете превратить свою матрицу расстояний в необработанные данные и ввести их в кластеризацию K-Means. Шаги будут следующими:
1) Расстояния между вашими N точками должны быть квадратами евклидова. Выполните « двойное центрирование » матрицы: вычтите среднее значение строки для каждого элемента; в результате столбец вычитания означает от каждого элемента; в результате добавьте среднее значение матрицы для каждого элемента; разделите на минус 2. Теперь у вас есть матрица SSCP (сумма квадратов и кросс-произведение) между вашими точками, в которой начало координат находится в геометрическом центре облака из N точек. (Прочитайте объяснение двойного центрирования здесь .)
2) Выполнить PCA (анализ главных компонентов) на этой матрице и получить матрицу загрузки компонентов NxN . Некоторые из последних столбцов могут быть равны 0, поэтому обрежьте их. То, с чем вы остаетесь сейчас, это на самом деле оценки главных компонентов, координаты ваших N точек на главных компонентах, которые проходят в виде осей через ваше облако. Эти данные могут рассматриваться как необработанные данные, подходящие для ввода K-средних.
PS Если ваши расстояния не являются геометрически правильными квадратами евклидова, вы можете столкнуться с проблемой: матрица SSCP может быть не положительной (полу) определенной. С этой проблемой можно справиться несколькими способами, но с потерей точности.
источник
X
(скажем , N * N) будет симметричными, такcolMeans(X) =rowMeans(X)
и как только вы вычитаете строки или Col средства:Y=X-rowMeans(X)
,mean(Y)
0.You could turn your matrix of distances into raw data
(пункты 1 и 2), я имею в виду, по существу, многомерное масштабирование (MDS) Торгерсона , в котором двойное центрирование является начальным шагом. Пожалуйста, поищите на этом сайте (и в Google тоже) об этой процедуре. «Двойное центрирование» - это преобразование (возведенных в квадрат) расстояний в соответствующую матрицу скалярных произведений, определенную для начала координат, помещенного в центроид облака точек.Пожалуйста, смотрите эту статью, написанную одним из моих знакомых;)
http://arxiv.org/abs/1304.6899
Речь идет об обобщенной реализации k-средних, которая принимает матрицу произвольного расстояния в качестве входных данных. Это может быть любая симметричная неотрицательная матрица с нулевой диагональю. Обратите внимание, что это может не дать ощутимых результатов для странных матриц расстояний. Программа написана на C #.
Исходный код можно получить, перейдя по указанной выше ссылке, затем щелкнув «Другие форматы», а затем «Загрузить исходный код». Тогда вы получите .tar.gz, содержащий Program.cs. Кроме того, исходный код также можно скопировать из PDF.
источник
Вы можете использовать библиотеку машинного обучения Java. У них есть реализация K-Means. Один из конструкторов принимает три аргумента
Можно легко расширить класс DistanceMeasure для достижения желаемого результата. Идея состоит в том, чтобы возвращать значения из пользовательской матрицы расстояний в методе меры (Instance x, Instance y) этого класса.
K-средние гарантированы, чтобы сходиться, предполагая определенные свойства метрики расстояния. Евклидово расстояние, манхэттенское расстояние или другие стандартные метрики удовлетворяют этим предположениям. Так как пользовательская метрика расстояния может не удовлетворять этим предположениям, у конструктора есть третий параметр, указывающий количество итераций, которые нужно выполнить для построения кластеризатора.
источник