Hierarchisches clustering von Zeitreihen in Python-scipy/numpy/pandas?
Ich habe einen DataFrame mit einigen Zeitreihen. Ich erstellte eine Korrelationsmatrix aus jener Zeit, der Serie und ich würde gerne zum erstellen einer hierarchischen clustering auf dieser Korrelations-matrix. Wie kann ich das tun?
#
# let't pretend this DataFrame contains some time series
#
df = pd.DataFrame((np.random.randn(150)).reshape(10,15))
0 1 2 13 14
0 0.369746 0.093882 -0.656211 .... -0.596936 0 0.095960
1 0.641457 1.120405 -0.468639 .... -2.070802 1 -1.254159
2 0.360756 -0.222554 0.367893 .... 0.566299 2 0.932898
3 0.733130 0.666270 -0.624351 .... -0.377017 3 0.340360
4 -0.263967 1.143818 0.554947 .... 0.220406 4 -0.585353
5 0.082964 -0.311667 1.323161 .... -1.190672 5 -0.828039
6 0.173685 0.719818 -0.881854 .... -1.048066 6 -1.388395
7 0.118301 -0.268945 0.909022 .... 0.094301 7 1.111376
8 -1.341381 0.599435 -0.318425 .... 1.053272 8 -0.763416
9 -1.146692 0.453125 0.150241 .... 0.454584 9 1.506249
#
# I can create a correlation matrix like this
#
correlation_matrix = df.corr(method='spearman')
0 1 ... 13 14
0 1.000000 -0.139394 ... 0.090909 0.309091
1 -0.139394 1.000000 ... -0.636364 0.115152
2 0.175758 0.733333 ... -0.515152 -0.163636
3 0.309091 0.163636 ... -0.248485 -0.127273
4 0.600000 -0.103030 ... 0.151515 0.175758
5 -0.078788 0.054545 ... -0.296970 -0.187879
6 -0.175758 -0.272727 ... 0.151515 -0.139394
7 0.163636 -0.042424 ... 0.187879 0.248485
8 0.030303 0.915152 ... -0.430303 0.296970
9 -0.696970 0.321212 ... -0.236364 -0.151515
10 0.163636 0.115152 ... -0.163636 0.381818
11 0.321212 -0.236364 ... -0.127273 -0.224242
12 -0.054545 -0.200000 ... 0.078788 0.236364
13 0.090909 -0.636364 ... 1.000000 0.381818
14 0.309091 0.115152 ... 0.381818 1.000000
Nun, wie bauen die Hierarchischen clustering auf dieser matrix?
- Ich denke, diese Frage ist teilweise verwandt stackoverflow.com/questions/2907919/..., aber ich habe nicht ganz verstanden, die Antwort
- Sie müssen um genauer zu sein über das, was Sie Fragen, die nicht beantwortet, die andere Frage.
- Danke BrenBarn. Lesen Sie die Antwort der verlinkten Frage, ist das richtig, wenn ich "Z=Verknüpfung(correlation_matrix, 'single', 'Korrelations -')" um das clustering?
- Wie die Antwort auf die andere Frage, die sagt, Sie würde anrufen
linkage
auf Ihre ursprüngliche DF, nicht auf die Korrelationsmatrix. (Durch die übergabe der'correlation'
argument, Sie sagen, dass die Korrelation Metrik als Teil der Berechnung der Cluster.) - Dank BrenBarn, jetzt macht es Sinn.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Schritt-für-Schritt-Anleitung, wie zu bauen, die Hierarchisches Clustering und das dendrogramm aus unserer Zeit-Serie über SciPy. Bitte beachten Sie, dass auch scikit-learn (eine leistungsfähige Daten-Analyse-Bibliothek baut auf der SciPY) hat viele andere clustering-algorithmen umgesetzt.
Zuerst bauen wir einige synthetische Zeitreihen mit zu arbeiten. Wir bauen 6 Gruppen korrelierter Zeitreihen und wir erwarten, dass das hierarchische clustering zu erkennen, diese sechs Gruppen.
Jetzt machen wir das clustering und zeichnen Sie es:
wenn wir wollen, zu entscheiden, welche Art von Korrelation anwenden oder verwenden Sie ein anderes Distanz-Metrik, dann können wir eine benutzerdefinierte Metrik-Funktion:
Abrufen Clustern können wir die fcluster Funktion. Es können mehrere Möglichkeiten (prüfen der Dokumentation) aber in diesem Beispiel geben wir als Ziel die Anzahl der Cluster, die wir wollen:
Ausgabe: