我有一个数据集,它有 10 个不同的组和一年中 3 周的销售额。我正在尝试运行一个聚类算法,该算法根据每个组中存在的项目数对每个组进行聚类。基本上,我想以不同的方式对待每一组。
我尝试了一种手动方法,并将每个组的集群设置为相对于具有最多项目数的组,但我想让代码找到每个组的 kmeans 的最佳 k。我不确定如何确定每个组的最佳 k
这是数据:
items_scaled =
PROD LOB_LABEL 1 2 3
100001 Books 0.022556 0.020326 0.020556
100002 Books 0.023756 0.080306 0.020656
100003 Candles 0.022966 0.020178 0.020291
100004 Shoes 0.021067 0.020485 0.019420
100005 Candles 0.020403 0.021067 0.020556
100006 Shoes 0.023634 0.026219 0.029357
100007 Books 0.022472 0.017218 0.016454
100008 Pens 0.023670 0.027971 0.029763
100009 Pens 0.037894 0.026664 0.031777
100010 Shoes 0.015929 0.015205 0.015446
....
这是我关于如何找到最佳 k 但运行时间非常高的试验。按照这个速度,运行可能需要一天或更长时间。我正在处理 3500 行数据。有没有更好/最佳的方法来实现我的结果?
silhouette = []
# count = 0
# K = range(2, len(items))
for lob in item_df['LOB_LABEL'].unique():
items = item_df[item_df['LOB_LABEL']==lob]
items_scaled = items.iloc[:, 2:54]
K = range(2, len(items))
for k in tqdm(K):
kmeanModel = TimeSeriesKMeans(n_clusters=k, metric="dtw", n_jobs=6, max_iter=10, n_init=5)
kmeanModel.fit(items_scaled)
silhouette.append(silhouette_score(items_scaled, kmeanModel.labels_, metric="dtw"))
print(lob,max(silhouette),k)
# if count == 0:
# break
# count += 1