Meine Daten enthalten binäre (numerische) und nominelle / kategoriale Umfrageantworten. Alle Antworten sind diskret und auf individueller Ebene.
Die Daten haben eine Form (n = 7219, p = 105).
Paar Dinge:
Ich versuche, eine Clustering-Technik mit einem Ähnlichkeitsmaß zu identifizieren, das für kategoriale und numerische Binärdaten funktioniert. Es gibt Techniken in R kmodes Clustering und kprototype, die für diese Art von Problem entwickelt wurden, aber ich verwende Python und benötige eine Technik aus sklearn Clustering, die bei dieser Art von Problemen gut funktioniert.
Ich möchte Profile von Segmenten von Individuen erstellen. Dies bedeutet, dass sich diese Gruppe von Personen mehr um diese Funktionen kümmert.
Antworten:
Einen Stich machen:
Gower Distance ist eine nützliche Entfernungsmetrik, wenn die Daten sowohl kontinuierliche als auch kategoriale Variablen enthalten.
Ich konnte keine Implementierung von Gower Distance in Python finden, als ich vor ungefähr 4-5 Monaten danach suchte. Also habe ich mir eine eigene Implementierung ausgedacht.
Der Link zum selben Code: https://github.com/matchado/Misc/blob/master/gower_dist.py
In Bezug auf die Clustering-Technik habe ich die von Ihnen erwähnten nicht verwendet. Aber ich habe in der Vergangenheit mit Erfolg hierarchisches Clustering in R zusammen mit Gower-Distanz verwendet.
Mit Blick auf die in scikit learn verfügbaren Clustering-Techniken scheint Agglomerative Clustering genau das Richtige für Sie zu sein. http://scikit-learn.org/stable/modules/clustering.html#hierarchical-clustering
Nachdem Sie jeder Zeile Ihrer Daten Cluster-Labels zugewiesen haben, überprüfen Sie für jeden Cluster die Verteilung der Features (Zusammenfassungsstatistiken für kontinuierliche Variablen und Häufigkeitsverteilungen für kategoriale Variablen). Dies ist einfacher visuell zu analysieren, wenn Ihre Anzahl von Funktionen verwaltbar ist (<20 vielleicht?).
Da Sie jedoch über 100 Funktionen verfügen, empfehle ich einen besser organisierten Ansatz. Erstellen Sie eine Matrix mit Cluster-Beschriftungen in den Spalten und der Zusammenfassung der Features in den Zeilen (ich empfehle, den Median für die kontinuierliche Variable und das prozentuale Auftreten des häufigsten Werts im Cluster für die kategoriale Variable zu verwenden).
Es könnte ungefähr so aussehen.
quelle
Ich habe meine Antwort auf diese Frage unten angehängt - ihr habt im Wesentlichen dasselbe gefragt.
Diese Frage scheint wirklich Repräsentation zu sein und nicht so sehr Clustering.
Kategoriale Daten sind ein Problem für die meisten Algorithmen beim maschinellen Lernen. Angenommen, Sie haben beispielsweise eine kategoriale Variable namens "Farbe", die die Werte Rot, Blau oder Gelb annehmen könnte. Wenn wir diese einfach numerisch als 1,2 bzw. 3 codieren, wird unser Algorithmus annehmen, dass Rot (1) tatsächlich näher an Blau (2) liegt als an Gelb (3). Wir müssen eine Darstellung verwenden, die dem Computer verständlich macht, dass diese Dinge tatsächlich alle gleich unterschiedlich sind.
Eine einfache Möglichkeit besteht darin, eine so genannte One-Hot-Darstellung zu verwenden, und genau das, was Sie sich vorgestellt haben. Anstatt eine Variable wie "Farbe" zu haben, die drei Werte annehmen kann, teilen wir sie in drei Variablen auf. Dies wären "Farbe-Rot", "Farbe-Blau" und "Farbe-Gelb", die alle nur den Wert 1 oder 0 annehmen können.
Dies erhöht die Dimensionalität des Raums, aber jetzt können Sie einen beliebigen Clustering-Algorithmus verwenden. Es ist manchmal sinnvoll, die Daten nach diesem Vorgang zu bewerten oder aufzuhellen, aber Ihre Idee ist definitiv vernünftig.
quelle
Die von @gregorymatchado implementierte Entfernungsmetrik weist einen Fehler auf. Bei numerischen Attributen gibt der Bereich durchgehend NaN für dieselben Werte an. Dafür brauchen wir
max(np.ptp(feature.values),1)
stattdessen eine Änderungsnutzungnp.ptp(feature.values)
. Vollständiger Code unten:quelle
Ich denke du hast auch einen Bug. Wenn der Merkmalsvektor einen sehr kleinen Maßstab hat. dann ist deine Entfernung nutzlos. Also würde ich wie folgt konvertieren:
quelle