Grundstück das dendrogramm mit sklearn.AgglomerativeClustering
Ich versuche zu bauen, das dendrogramm mit der children_
- Attribut zur Verfügung gestellt von AgglomerativeClustering
, aber bisher bin ich aus Glück. Ich kann nicht mit scipy.cluster
seit agglomerative clustering in scipy
fehlen einige Optionen, die mir wichtig sind (wie die option zum angeben der Anzahl von Clustern). Ich wäre wirklich dankbar für irgendwelche Ratschläge gibt.
import sklearn.cluster
clstr = cluster.AgglomerativeClustering(n_clusters=2)
clusterer.children_
- Poste bitte ein code-Beispiel, um zu vergrößern die Chancen auf gute Antworten
- Ist deine Frage damit beantwortet? link
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein einfache Funktion für die Aufnahme eines hierarchischen clustering Modell aus sklearn und Plotten Sie mit Hilfe der scipy
dendrogram
Funktion. Scheint, wie die Grafik-Funktionen werden oft nicht direkt unterstützt sklearn. Sie finden hier eine interessante Diskussion, die im Zusammenhang mit der pull-request für dieseplot_dendrogram
code-snippet hier.Ich würde klären, dass die Verwendung Fall, dass Sie beschreiben (definieren der Anzahl von Clustern) ist in scipy: nachdem Sie ausgeführt haben, die hierarchischen clustering mit scipy ist
linkage
Sie können schneiden Sie die Hierarchie an beliebige Anzahl von Clustern, die Sie wollen mitfcluster
mit der Anzahl der Cluster angegeben, in dert
argument undcriterion='maxclust'
argument.Verwenden Sie die scipy Umsetzung der agglomerative clustering statt. Hier ist ein Beispiel.
Finden Sie Dokumentation für
linkage
hier und Dokumentation fürdendrogram
hier.Stieß ich auf genau das gleiche problem vor einiger Zeit. Die Art und Weise habe ich es geschafft, um den Verlauf der verdammt dendogram wurde mit dem software-Paket ete3. Dieses Paket ist in der Lage, flexibel plot Bäume mit verschiedenen Optionen. Die einzige Schwierigkeit war, zu konvertieren
sklearn
'schildren_
Ausgabe der Newick-Baum-format, die gelesen und verstanden werden können, indemete3
. Außerdem muss ich mich manuell berechnen die Dendriten der span, da diese Informationen nicht zur Verfügung gestellt wurde mit derchildren_
. Hier ist ein Ausschnitt von dem code, den ich verwendet. Er berechnet das Newick-Baum und zeigt dann dieete3
Tree-datastructure. Für weitere details zum Grundstück, werfen Sie einen Blick hierFür jene, die bereit sind, einen Schritt aus Python und verwenden das robuste D3-Bibliothek, es ist nicht super schwierig zu benutzen, die
d3.cluster()
(oder, denke ich,d3.tree()
) APIs zum erreichen einer schönen, anpassbare Ergebnis.Sehen die jsfiddle für eine demo.
Den
children_
array zum Glück Funktionen einfach als JS-array, und das nur Zwischenschritt ist die Verwendungd3.stratify()
zu drehen, Sie in eine hierarchische Darstellung. Konkret brauchen wir jeden Knoten, um eineid
und einparentId
:Dass Sie am Ende mit mindestens O(n^2) Verhalten hier aufgrund der
findIndex
Linie, aber es wahrscheinlich egal, bis Ihre n_samples wird riesig, in diesem Fall, könnte man vorausberechnen ein effizienter index.Darüber hinaus, es ist ziemlich viel plug-and-chug Einsatz von
d3.cluster()
. Sehen mbostock ist canonical block oder mein JSFiddle.N. B. Für meinen Anwendungsfall reicht es lediglich zu zeigen, nicht-Blatt-Knoten; es ist ein bisschen schwieriger zu visualisieren Muster/Blätter, da diese möglicherweise nicht alle werden in der
children_
array explizit.