Python KMeans在sklearn中不返回可重复的结果,甚至修复随机_状态

Python KMeans在sklearn中不返回可重复的结果,甚至修复随机_状态,python,random,scikit-learn,cluster-analysis,k-means,Python,Random,Scikit Learn,Cluster Analysis,K Means,下面的代码测试了几个n_集群的KMeans,并试图通过惯性准则找到“最佳”n_集群。然而,它是不可复制的:即使固定随机_状态,每次我在同一数据集上调用kmeans(df)时,它都会生成不同的聚类,甚至不同的n_聚类。我是不是遗漏了什么 from sklearn.cluster import KMeans from tqdm import tqdm_notebook def kmeans(df): inertia = [] models = {} start = 3

下面的代码测试了几个n_集群的KMeans,并试图通过惯性准则找到“最佳”n_集群。然而,它是不可复制的:即使固定随机_状态,每次我在同一数据集上调用kmeans(df)时,它都会生成不同的聚类,甚至不同的n_聚类。我是不是遗漏了什么

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]

它并不总是一样的,这是这个算法的自然方式…,如果你的结果变化更大,那么这意味着它们可能不是可聚类的
gradient(gradient(
是实现已经很差且不可靠的肘部标准的一种糟糕且不可靠的方法。请不要这样做。特别是,不要重复检查您的结果。@PV8他设置了
随机状态,因此它应该是确定的。错误可能在其他地方,例如数据集准备。我不确定错误在数据中设置准备,正如@Anony Mousse所建议的。就像我在问题上说的,“每次我在同一个数据集上调用kmeans(df)(…)。”它并不总是一样的,这是这个算法的自然方式…,如果你的结果变化更大,那么这意味着它们可能不是可聚类的
gradient(gradient(
是实现已经很差且不可靠的肘部标准的一种糟糕且不可靠的方法。请不要这样做。特别是,不要重复检查您的结果。@PV8他设置了
随机状态,因此它应该是确定的。错误可能在其他地方,例如数据集准备。我不确定错误在数据中正如@anonymousse所建议的,设置准备。就像我在我的问题上说的,“每次我调用同一数据集上的kmeans(df)(…)。”