首页 > 解决方案 > KMeans 不在 sklearn 中返回可重现的结果,甚至修复了 random_state

问题描述

以下代码测试几个 n_cluster 的 KMeans,并尝试通过惯性标准找到“最佳”n_cluster。但是,它是不可重现的:即使修复了 random_state,每次我在同一个数据集上调用 kmeans(df) 时,它都会生成不同的聚类——甚至是不同的 n_cluster。我在这里错过了什么吗?

from sklearn.cluster import KMeans
from tqdm import tqdm_notebook

def kmeans(df):
    inertia = []
    models = {}
    start = 3
    end = 40
    for i in tqdm_notebook(range (start, end)):
        k = KMeans(n_clusters=i, init='k-means++', n_init=50, random_state=10, n_jobs=-1).fit(df.values)        
        inertia.append(k.inertia_)
        models[i] = k
    ep = np.argmax(np.gradient(np.gradient(np.array(inertia)))) + start
    return models[ep]

标签: pythonrandomscikit-learncluster-analysisk-means

解决方案


推荐阅读