新的预测标签总是在 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 参数指定任何值。它使您的结果可重现。
我遇到一个问题,我正在尝试在 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 参数指定任何值。它使您的结果可重现。