Closed mbruhns closed 3 years ago
Danke dir! Das hilft.
Mit der Louvain Variante erhalte ich für die drei Distanzmatrizen folgendes:
BLOSUM45
------------------- ------------
num communities 2
min community size 2250
max community size 8461
avg. community size 5355.5
modularity 0.0575446
------------------- ------------
BLOSUM80
------------------- ------------
# communities 3
min community size 2244
max community size 5684
avg. community size 3570.33
modularity 0.0606794
------------------- ------------
GONNET1992
------------------- ------------
# communities 2
min community size 2444
max community size 8267
avg. community size 5355.5
modularity 0.0481457
------------------- ------------
Hat es einen Grund, außer Laufzeitreduktion, dass du mit mask_x, mask_y = np.mask_indices(m, np.tril, -1)
nur die Dreiecksmatrix berechnest?
2 bzw. 3 Communites scheint sehr wenig zu sein und ich frage mich, ob das an der Dreiecksmatrix liegen kann?
Hier mal die UMAPs für alle Sequenzen
Hat es einen Grund, außer Laufzeitreduktion, dass du mit mask_x, mask_y = np.mask_indices(m, np.tril, -1) nur die Dreiecksmatrix berechnest?
Die CSV-Dateien enthalten doch sowieso nur die unteren Dreiecksmatrizen, oder? Dann erhalten wir ja keine weiteren Informationen, wenn wir die Null-Einträge einbeziehen.
2 bzw. 3 Communites scheint sehr wenig zu sein und ich frage mich, ob das an der Dreiecksmatrix liegen kann?
Schau dafür am besten in die Dokumentation der Louvain-Implementierung welches Eingabeformat erwartet wird. Bei Louvain kann man typischerweise die Distanzmetrik sowie die Anzahl der nächsten Nachbarn für den Graphen auswählen, das hat dann entsprechende Auswirkungen auf die Anzahl der Communities.
Die CSV-Dateien enthalten doch sowieso nur die unteren Dreiecksmatrizen, oder? Dann erhalten wir ja keine weiteren Informationen, wenn wir die Null-Einträge einbeziehen.
Ich hab die großen DMs als volle Matrix laufen lassen. Gibt es np.mask_indices(m, np.tril, -1)
auch für die komplette Matrix? Ich habe da leider nichts verlgeichbares finden können und habe mich deshalb mit nested for loops zufrieden gegeben, um das ganze mal gegenzuckecken.
Schau dafür am besten in die Dokumentation der Louvain-Implementierung welches Eingabeformat erwartet wird.
In der Networkit-Doku konnte ich nichts dergleichen finden. Steht nur drin, dass es einen Graphen braucht.
Es hat jetzt mit networkx und der darauf laufenden Version des Louvain Algorithmus geklappt. Die Bilder sind in dem plots Ordner 👍
Hast du das Problem mit dem MemoryError lösen können? Mit einem naiven Networkit-Ansatz dauert die Konvertierung einer 15.000x15.000 Matrix zwar knapp 200 Sekunden, wirft dafür aber keinen Fehler:
Ich konnte in deinem Code nicht sicher nachvollziehen, welches Verhalten du von der Funktion erwartest, passt das so?