新的预测标签总是在 Kmeans 之后随 PCA 变化

The new prediction label is always changing with PCA after Kmean

我遇到一个问题,我正在尝试在 PCA 之后进行 Kmean 聚类,当我想对新数据进行聚类时,预测标签总是在变化(即 [2] 到 [3] 到 [1] ....)

     #X is pre-defined dataset
        pca = PCA(n_components=2)
        reduced_data = pca.fit_transform(X)
        kmeans = KMeans(n_clusters=4)
        kmeans.fit_transform(reduced_data)

for filename in os.listdir(directoryName):
    if filename.endswith('.wav'): 
        (fs,rate)=wav.read(directoryName + "/" +filename)
        mfcc_feat = mfcc(rate,fs,nfft=1200)
        fbank_feat = logfbank(rate,fs,nfft=1200)
        features = mean_features(mfcc_feat)
        reduced_data = pca.transform([features])
        y = kmeans.predict(reduced_data)
        print (y)

输出为:

[1]
[1]
[1]

但是当我运行第二次没有修改代码时:

[2]
[2]
[2]

而且一直在变

很难说没有可运行的例子,但你必须记住 K-means 不是确定性算法,而是随机初始化的随机算法,这意味着你每次都可以获得不同的集群(或 相同的集群但具有不同的标签 ) - 您首先随机初始化集群中心,然后迭代地将中心移动到更好的位置 - 请参阅 https://en.wikipedia.org/wiki/K-means_clustering 处的可视化和描述.

您的代码似乎存在问题,即 k-means 每次都会随机初始化质心,这就是您的结果不断变化的原因。要修复它,请查看下面给出的一段代码:

kmeans = KMeans(n_clusters=n, random_state=42)

您可以为 random_state 参数指定任何值。它使您的结果可重现。