KMeans ограничено разным размером кластераPython

Программы на Python
Anonymous
KMeans ограничено разным размером кластера

Сообщение Anonymous »

У меня есть фрейм данных с координатами магазина, и я хочу разделить их на кластеры в зависимости от дня, когда продавец должен посетить этот магазин. Например, предположим, что продавцу необходимо посетить 180 магазинов. Ему следует посетить 30-34 магазина с понедельника по пятницу, а в субботу он должен посетить 60% остальных дней.
Ребята, вы знаете, как мне это сделать? Используя kmeans-constrained, я могу разделить их только на кластеры одинакового размера. Возможно, мне нужно использовать какой-то решатель или перемещать точки между кластерами, чтобы получить нужные числа, но я не знаю, как это сделать.
Вот код, который делит их поровну. :
# Loop through the vendor clusters
for vendor in df["vendor"].unique():

# Number of shops for each vendor
n_shops = df.loc[df["vendor"] == vendor]["cod_shop"].count()

# Index
idx = df.loc[df["vendor"] == vendor].index

# Number of clusters for days of the week
num_clusters = 5 # Monday to Friday

# Average size for the cluster
avg_size = n_shops / (num_clusters + 0.6)

# Define limits
min_shops = round(avg_size - n_shops * pct, 0)
max_shops = math.ceil(avg_size + n_shops * pct)

# Model
kmeans = KMeansConstrained(n_clusters=num_clusters, size_min=min_shops, size_max=max_shops, random_state=42)
labels = kmeans.fit_predict(df.loc[df["vendor"] == vendor][["latitude", "longitude"]])

# Add labels to the dataframe
df.loc[idx, "visit_day"] = labels


Подробнее здесь: https://stackoverflow.com/questions/790 ... uster-size

Вернуться в «Python»