K 表示运行时间较长

问题描述 投票:0回答:1

我有一个包含 300 万条记录和 15 列的数据集,我用它来进行客户细分。 我使用过 KMeans 和 MiniBatchKMeans,但它甚至在 45 小时后仍在运行(没有并行运行它们)。代码如下:

kmeans_set = {"init":"random", "max_iter":50, "random_state":42}

inertias = []
silhouette_coefficients = []

for k in range(4,10):
    kmeans = KMeans(n_clusters=k, **kmeans_set)    # open dictionary
    kmeans.fit(df)
    inertias.append(kmeans.inertia_)
    score=silhouette_score(df, kmeans.labels_)
    silhouette_coefficients.append(score)

该系统是 i5-10400,运行频率为 4GHz,配备 16GB RAM。代码运行时,12GB RAM 和大约 30%-40% 的 CPU 利用率。 我减少了迭代次数以使其运行得更快,但仍然没有任何改进。 你能给出一个让它运行得更快的解决方案吗?

我减少了迭代次数以使其运行得更快,但仍然没有任何改进。我已经使用 MiniBatchKMeans 运行了相同的代码,但它仍然没有显示输出。 我应该使用 PCA 降低维度还是 N-K 均值有效?

python performance scikit-learn k-means large-data
1个回答
0
投票

要提高 KMeans 和 MiniBatchKMeans 聚类的性能,您可以考虑以下策略:

  1. 降维(检查PCA)
  2. 使用更高效的初始化:将
    kmeans_set = {"init":"random", "max_iter":50, "random_state":42}
    替换为
    kmeans_set = {"init":"k-means++", "max_iter":50, "random_state":42}
  3. 使用 MiniBatch 方法:
    kmeans = MiniBatchKMeans(n_clusters=k, batch_size=10000, **kmeans_set)
  4. 并行处理
© www.soinside.com 2019 - 2024. All rights reserved.