массивы — Как я могу получить кластеры из матрицы расстояний, используя PHP?

У меня есть матрица расстояний в виде двумерного массива, например:

матрица расстояний

Итак, мне нужно найти кластеры, элементы с его помощью. Я могу сделать это, используя иерархическую кластеризацию, например, k-means. Я нашел такой пример здесь PHP K-средства

Как я могу преобразовать мой двумерный массив в массив точек, перечисленных в этом примере?

$points = [
[80,55],[86,59],[19,85],[41,47],[57,58],
[76,22],[94,60],[13,93],[90,48],[52,54],
[62,46],[88,44],[85,24],[63,14],[51,40],
[75,31],[86,62],[81,95],[47,22],[43,95],
[71,19],[17,65],[69,21],[59,60],[59,12],
[15,22],[49,93],[56,35],[18,20],[39,59],
[50,15],[81,36],[67,62],[32,15],[75,65],
[10,47],[75,18],[13,45],[30,62],[95,79],
[64,11],[92,14],[94,49],[39,13],[60,68],
[62,10],[74,44],[37,42],[97,60],[47,73],
];

5

Решение

Первый: придирка: k-Means не является алгоритмом иерархической кластеризации, см. https://www.quora.com/What-is-the-difference-between-k-means-and-hierarchical-clustering для деталей o разница.

Второе: вы не хотите преобразовывать матрицу расстояний обратно в точки, из которых она возникла, когда вы делаете шаг назад. К сожалению, у реализации k-Means, которую вы связали, есть только API, который позволяет вам вводить необработанные координаты и предполагает евклидово расстояние, поэтому у вас есть некоторые возможности, в зависимости от ваших требований:

  1. Откуда вы получаете матрицу расстояний? Если это возможно, получите необработанные координаты (и убедитесь, что мера расстояния — это евклидово расстояние) и используйте библиотеку, которую вы связали.

  2. Переопределить Point класс в библиотеке, которую вы связали: в частности, getDistanceWith метод для возврата значений из вашей матрицы

  3. Если вам нужно рассчитать кластер только один раз, используйте python и sklearn. Эта библиотека делает именно то, что вы хотите. Особенно: https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.cluster.hierarchy.linkage.html

  4. Напишите свой собственный код: кластеризация — довольно простая тема, и поэтому это хорошее упражнение по программированию.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]