Sie haben die Bedeutung der "vollständigen" Methode missverstanden. Es bedeutet nur, dass der Abstand zwischen zwei Punktclustern, z. B. {A, B} und {C, D}, als das Maximum der paarweisen Abstände AC, AD, BC, BD genommen wird. Dies ändert nichts an der Tatsache, dass hierarchisches Clustering Cluster in der Nähe von Cluster mit dem geringsten Abstand voneinander kombiniert. Es gibt keine Clustering-Methode für "kombinieren Punkte, wenn sie sehr weit voneinander entfernt sind".
Wenn Sie große Einträge in Ihrer Entfernungsmatrix (nennen wir D) wollen, die heißen "diese sind ähnlich", dann müssen Sie D transformieren, um die Ordnungsrelation zwischen den Entfernungen zu invertieren. Mit anderen Worten, die Matrix misst die Ähnlichkeit von Objekten und Sie benötigen ein Maß von Dis Ähnlichkeit.
Am einfachsten ist es, das Zeichen zu ändern; linkage
erfordert eigentlich keine Abstände, um positiv zu sein.
from scipy.cluster.hierarchy import linkage
from scipy.spatial.distance import squareform
linkage(-squareform(D), 'complete')
kehrt
array([[ 0., 1., -40., 2.],
[ 2., 4., -33., 3.],
[ 3., 5., -28., 4.]])
Gestänge ((0-1) -2) -3.
Wenn negative Werte ein Problem sind, gibt es andere Transformationen, die nicht produzieren negative Zahlen:
linkage(D.max() - squareform(D), 'complete')
oder
linkage(squareform(D)**(-1), 'complete')
All dies wird die gleiche Hierarchie zurückkehren, solange ‚vollständig "ist die Methode".
Nun, da Sie wissen, dass "vollständig" nicht unbedingt das ist, was Sie brauchen, können Sie auch andere Methoden in Erwägung ziehen, und dann kann der Effekt der Transformation auf D das Ergebnis verändern. Machen Sie das, was in Ihrem Kontext Sinn macht, wenn Sie bedenken, was D tatsächlich darstellt.
FYI: Das erste Argument für 'linkage' muss entweder das 1-D Array von * condensed * (aka * compressed *) Distanzdaten sein (siehe zB https://stackoverflow.com/questions/13079563/how- does-condensed-distance-matrix-work-pdist/13079806 # 13079806) oder das ursprüngliche Array von Punkten. Um ein symmetrisches Distanz-Array in die komprimierte Form zu konvertieren, verwenden Sie 'squareform (distArray)', wobei 'squareform' aus' scipy.spatial.distance' importiert wird. –