Ich verwende das GA-Paket und mein Ziel ist es, die optimale Initiale zu finden Zentroid-Positionen für den K-Means-Clustering-Algorithmus. Meine Daten sind eine spärliche Matrix aus Wörtern im TF-IDF-Score und können hier hier heruntergeladen werden. Im Folgenden finden Sie einige Beispiele Stufen, die ich implementiert habe:
%Vor%0. Bibliotheken und Dataset
%Vor%1. Binärcodierung und Generierung der Anfangspopulation.
%Vor%2. Fitness-Funktion Minimiert Davies-Bouldin (DB) Index. Wo ich DBI für jede aus
initial_population
generierte Lösung auswerte.
%Vor%3. GA ausführen. Mit diesen Einstellungen.
4. Das Problem. Fehler in kmeans (corpus [-1], initial_centroid): Anfangszentren sind nicht verschieden '.
Ich habe ein ähnliches Problem hier gefunden, bei dem der Benutzer auch einen Parameter verwenden musste, um die Anzahl dynamisch zu übergeben zu verwendende Cluster. Es wurde gelöst, indem die Anzahl der Cluster hart codiert wurde. Für meinen Fall muss ich jedoch die Anzahl der Cluster dynamisch übergeben, da sie von einem zufällig generierten binären Vektor kommt, wobei diese 1's
die anfänglichen Zentroide darstellen.
Überprüfung mit dem kmeans()
Code , I bemerkte, dass der Fehler durch doppelte Zentren verursacht wurde:
Ich habe die Funktion kmeans
mit trace
bearbeitet, um die duplizierten Zentren auszudrucken. Die Ausgabe:
Das zeigt keine Duplizierung in der zufällig ausgewählten initial_centroids
und ich habe keine Ahnung, warum dieser Fehler weiterhin auftritt. Gibt es noch etwas, das zu diesem Fehler führen würde?
P / S: Ich verstehe, dass einige vorschlagen, GA + K-Mittel ist keine gute Idee. Aber ich hoffe zu Ende, was ich angefangen habe. Es ist besser, dieses Problem als K-Means-Problem zu betrachten (zumindest beim Lösen des initial centers are not distinct
-Fehlers).
Genetische Algorithmen sind aufgrund der Art des Problems nicht gut geeignet, um k-Mittel zu optimieren - Initialisierungskeime interagieren zu sehr, ga ist nicht besser als eine Stichprobe aller möglichen Samen zu nehmen.
Mein Hauptanliegen ist also, hier keine genetischen Algorithmen zu verwenden!
Wenn Sie darauf bestehen, müssen Sie die schlechten Parameter erkennen und dann einfach eine schlechte Bewertung für eine schlechte Initialisierung zurückgeben, damit sie nicht "überleben".
Um Ihre Frage zu beantworten, tun Sie einfach:
%Vor% Ihre 520 und 564 Zeilen von corpus
sind identisch, mit dem einzigen Unterschied in einem Attribut row.names
, siehe:
Bezüglich der GA und k-Mittel, siehe z.B.:
Tags und Links optimization r sparse-matrix genetic-algorithm k-means