Sklearns paarweise Distanzergebnis ist unerwartet assymetral

Ich berechne den euklidischen paarweisen Abstand zwischen Elementen eines Vektors. Ich benutze die Funktion pairwise_distances aus sklearn Paket. Allerdings ist die resultierende Matrix für einige Elemente nur annähernd symmetrisch: Die Werte der Elemente, die gleich sein sollen, sind in einem Beispiel nur bis zu 15 Ziffern hinter dem Dezimalpunkt gleich.

Ich erkannte dies, da ich Fehler in der Downstream-Analyse bekam, die Symmetrie der Eingangsmatrizen übernahm. Ich weiß, ich kann Werte richten, aber was verursacht das ?!

  • Exception Traceback ist ausgeblendet, wenn nicht sofort aufgehoben
  • Wie man das übergeordnete HTML-Tag in Python extrahiert, indem du die Zeichenfolge übereinstimmst
  • Wie kann man die gestartete Ereignisdauer (Gantt Charts) mit Python Pandas erstellen?
  • Python und Mechanisierungs-Anmeldeskript
  • Python Paramiko Timeout mit langer Ausführung, braucht volle Ausgabe
  • Warum ist Python nicht sehr gut für die funktionale Programmierung?
  • Hier ist der Vektor, den ich versuche, das Paar weise Abstand zu berechnen (es ist eine Spalte eines Pandas Dataframe):

    lag_measure_data[['bios_level']].values array([[ 0.76881030949999995538490793478558771312236785888671875 ], [ 0. ], [ 0.67783090619999997183953155399649403989315032958984375 ], [ 0.3228176074999999922710003374959342181682586669921875 ], [ 0.75822395549999999087020796650904230773448944091796875 ], [ 0.469808621599999975959605080788605846464633941650390625], [ 0.989529862699999984698706612107343971729278564453125 ], [ 0. ], [ 0.5575436799999999859522858969285152852535247802734375 ], [ 0.9756440299999999954394525047973729670047760009765625 ], [ 0.66511863289999995085821637985645793378353118896484375 ], [ 0.978062709200000046649847718072123825550079345703125 ], [ 0.473957179800000016900440868994337506592273712158203125], [ 0.82409385540000001935112550199846737086772918701171875 ], [ 0.56548685279999999497846374651999212801456451416015625 ], [ 0.399505730399999980928527065771049819886684417724609375], [ 0.474232963900000026313819034839980304241180419921875 ], [ 0.34276307189999999369689476225175894796848297119140625 ], [ 0.9985316859999999739017084721126593649387359619140625 ], [ 0.9063241512999999915933813099400140345096588134765625 ], [ 0. ]]) 

    Hier ist der Befehl, den ich verwende, um die Distanzmatrix zu bekommen:

     d_matrix_lag = pairwise_distances(lag_measure_data[['bios_level']].values) 

    Ich drucke hier nicht die Ausgangsdistanzmatrix, da es zu chaotisch ist, aber als Beispiel in der ersten Zeile der Wert für die 4. Spalte ist

    0.445992701999999907602756366031826473772525787353515625

    Während der Wert der 4. Zeile und der ersten Spalte ist

    0.4459927019999998520916051347739994525909423828125

    One Solution collect form web for “Sklearns paarweise Distanzergebnis ist unerwartet assymetral”

    Ich könnte deinen Fehler reproduzieren, meine Prüfung auf Symmetrie:

     import numpy as np a = np.array([[ 0.76881030949999995538490793478558771312236785888671875 ], [ 0. ], [ 0.67783090619999997183953155399649403989315032958984375 ], [ 0.3228176074999999922710003374959342181682586669921875 ], [ 0.75822395549999999087020796650904230773448944091796875 ], [ 0.469808621599999975959605080788605846464633941650390625], [ 0.989529862699999984698706612107343971729278564453125 ], [ 0. ], [ 0.5575436799999999859522858969285152852535247802734375 ], [ 0.9756440299999999954394525047973729670047760009765625 ], [ 0.66511863289999995085821637985645793378353118896484375 ], [ 0.978062709200000046649847718072123825550079345703125 ], [ 0.473957179800000016900440868994337506592273712158203125], [ 0.82409385540000001935112550199846737086772918701171875 ], [ 0.56548685279999999497846374651999212801456451416015625 ], [ 0.399505730399999980928527065771049819886684417724609375], [ 0.474232963900000026313819034839980304241180419921875 ], [ 0.34276307189999999369689476225175894796848297119140625 ], [ 0.9985316859999999739017084721126593649387359619140625 ], [ 0.9063241512999999915933813099400140345096588134765625 ], [ 0. ]]) from sklearn.metrics.pairwise import pairwise_distances dist_sklearn = pairwise_distances(a) print((dist_sklearn.transpose() == dist_sklearn).all()) 

    Falsch als Ausgang bekommen. Versuchen Sie stattdessen scipy.spatial.distance zu verwenden. Sie erhalten einen Distanzvektor der paarweisen Distanzberechnung, können ihn aber in eine Distanzmatrix mit squareform () umwandeln

     from scipy.spatial.distance import pdist, squareform dist = pdist(a) sq = squareform(dist) print((sq.transpose() == sq).all()) 

    Das gab mir symmetrische Matrix. Hoffe das hilft

    Python ist die beste Programmiersprache der Welt.