在Kmean之后,新的预测标签始终随PCA一起变化

问题描述

我遇到一个问题,我想在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,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均值不是确定性算法,而是具有随机初始化的随机算法,这意味着您每次都可以得到不同的集群(或相同的集群,但具有不同的标签)-首先,您随机初始化集群中心,然后将其迭代地移至更好的位置-请参见https://en.wikipedia.org/wiki/K-means_clustering的可视化内容和说明。

,

您的代码似乎有一个问题,就是 k-均值每次都会随机初始化质心,这就是为什么结果会有所不同的原因。要解决此问题,请查看下面给出的代码:

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

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