Проблема на самом деле не определена, но, возможно, это поможет вам.
KMeans - это способ группировки предметов по расстоянию. Scikit-learn имеет реализацию, которая довольно проста в использовании. См. Пример http://scikit-learn.org/stable/auto_examples/cluster/plot_kmeans_digits.html#example-cluster-plot-kmeans-digits-py.
Это позволит вам определить количество кластеров, которые вы хотите найти. Однако вы не можете знать, сколько очков будет в каждом кластере. Во всяком случае, вот небольшой пример:
from sklearn.cluster import KMeans
data = [[1200, 1210], [1212, 1222], [1190, 1200], [300, 310], [800, 810]]
centers = [[sum(x)/len(x)] for x in data]
clf = KMeans(n_clusters=3)
clf.fit(centers)
for points in data:
center = sum(points)/len(points)
print points, center, clf.predict([center])
Выход:
[1200, 1210] 1205 [1]
[1212, 1222] 1217 [1]
[1190, 1200 ] 1195 [1]
[300, 310] 305 [0]
[800, 810] 805 [2]
EDIT: Еще один алгоритм, предоставляемый в SKLearn, - это Affinity Propagation, который не требует, чтобы количество кластеров было задано перед рукой. Я не знаю, как это работает, но вы можете найти информацию об этом самостоятельно.
Пример:
from sklearn.cluster import AffinityPropagation
import numpy as np
data = [[1200, 1210], [1212, 1222], [1190, 1200], [300, 310], [800, 810]]
centers = np.array([[sum(x)/len(x)] for x in data])
clf = AffinityPropagation()
for (points, cluster) in zip(data, clf.fit_predict(centers)):
center = sum(points)/len(points)
print points, center, cluster
Выход:
[1200, 1210] 1205 0
[1212, 1222] 1217 0
[1190, 1200] 1 195 0
[300, 310] 305 1
[800, 810] 805 2
Определите вашу проблему более точно. Что такое горячая точка? Без хорошего математического определения, как вы теперь «ставите все в одну группу» или «вкладываете все в отдельную группу» - это не правильное или оптимальное решение? Задайте проблему как «разделить« n »сегменты на« k »дизъюнктные множества, чтобы ... минимизировать». –
это хорошее начало.Я думаю, что мне нужно свести к минимуму расстояние между сегментами, но все еще не уверен, как объяснить это более точно –
«положить все в отдельную группу» позволяет свести к минимуму расстояние между сегментами. Пока у вас есть ограничение или более высокая стоимость, вы не можете помочь. –