问题描述
我遇到一个问题,我想在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参数指定任何值。它使您的结果可重复。