Me enfrento a un problema de que estoy tratando de hacer un agrupamiento Kmean después de PCA, cuando quiero agrupar nuevos datos, la etiqueta de predicción siempre cambia (es decir, [2] a [3] a [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)

Y la salida es:

[1]
[1]
[1]

Pero cuando ejecuté el código por segunda vez sin modificaciones:

[2]
[2]
[2]

Y sigue cambiando todo el tiempo

0
夏思阳 25 ago. 2020 a las 14:57

2 respuestas

La mejor respuesta

El problema que parece tener con su código es que k-means se inicializan el centroide de forma aleatoria cada vez, por eso sus resultados son variados. Para solucionarlo, eche un vistazo a la siguiente pieza de código:

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

Puede especificar cualquier valor para el parámetro random_state. Hace que su resultado sea reproducible.

1
Muhammad Hamza Sabir 25 ago. 2020 a las 12:12

Es difícil decirlo sin un ejemplo ejecutable, pero debe tener en cuenta que K-means no es un algoritmo determinista sino uno estocástico con inicialización aleatoria, lo que significa que puede obtener diferentes clústeres cada vez (o los mismos clústeres pero con etiquetas diferentes ): comienza inicializando aleatoriamente los centros del clúster y luego mueve de manera iterativa los centros a mejores ubicaciones; consulte la visualización y la descripción en https://en.wikipedia.org/wiki/K-means_clustering.

1
Vladimír Kunc 25 ago. 2020 a las 12:04