Я пытаюсь использовать k-medoids для кластеризации некоторых данных о траекториях, с которыми я работаю (несколько точек вдоль траектории полета самолета). Я хочу объединить их в определенное количество кластеров (поскольку я знаю, сколько типов путей должно быть).
Я обнаружил, что k-medoids реализован внутри пакета pyclustering, и пытаюсь это использовать. Технически я могу получить его в кластер, но я не знаю, как контролировать количество кластеров. Сначала я думал, что это напрямую связано с количеством элементов внутри того, что я назвал initial_medoids, но эксперименты показывают, что это сложнее, чем это. Мой соответствующий фрагмент кода ниже.
Обратите внимание, что D содержит список списков. Каждый список соответствует одной траектории.
def hausdorff( u, v):
d = max(directed_hausdorff(u, v)[0], directed_hausdorff(v, u)[0])
return d
traj_count = len(traj_lst)
D = np.zeros((traj_count, traj_count))
for i in range(traj_count):
for j in range(i + 1, traj_count):
distance = hausdorff(traj_lst[i], traj_lst[j])
D[i, j] = distance
D[j, i] = distance
from pyclustering.cluster.kmedoids import kmedoids
initial_medoids = [104, 345, 123, 1]
kmedoids_instance = kmedoids(traj_lst, initial_medoids)
kmedoids_instance.process()
cluster_lst = kmedoids_instance.get_clusters()[0]
num_clusters = len(np.unique(cluster_lst))
print('There were %i clusters found' %num_clusters)
У меня всего 1900 траекторий, и вышеуказанный код находит 1424 кластера. Я ожидал, что смогу контролировать количество кластеров по длине initial_medoids, так как я не видел никакой опции для ввода количества кластеров в программу, но это, похоже, не связано. Может ли кто-нибудь наставить меня на ошибку, которую я совершаю? Как выбрать количество кластеров?