У меня есть 9000 точек в США (то есть учетных записей) с множеством различных строковых и числовых столбцов/атрибутов. Я пытаюсь равномерно разделить эти баллы/счета на справедливые группы, которые сгруппированы как пространственно, так и взвешены (в смысле гравитации) по количеству сотрудников, которое является одним из столбцов/атрибутов. Я использовал кластеризацию K-средних sklearn для группировки, и, похоже, она работала нормально, но я заметил, что группировки не равны. У некоторых групп ~600, у некоторых ~70. Это в некоторой степени логично, поскольку в определенных областях данных больше. Проблема здесь в том, что мне нужно, чтобы эти группы были более равными. Вот код, который я использовал:
Код: Выделить всё
kmeans = KMeans(n_clusters = 30, max_iter=1000, init ='k-means++')
lat_long = dftobeclustered[dftobeclustered.columns[1:3]]
_employees = dftobeclustered[dftobeclustered.columns[3]]
weighted_kmeans_clusters = kmeans.fit(lat_long, sample_weight = _employees)
dftobeclustered['cluster_label'] = kmeans.predict(lat_long, sample_weight = _employees)
centers = kmeans.cluster_centers_
labels = dftobeclustered['cluster_label']
Можно ли разделить кластеры k-средних более равномерным образом? Я думаю, что основная проблема заключается в том, что районы с низкой численностью населения, такие как Монтана или Гавайи, разбиваются на отдельные группы, тогда как мне это действительно нужно, чтобы объединить эти районы в более крупные группы. Но я не знаю.
Подробнее здесь:
https://stackoverflow.com/questions/625 ... l-clusters