2014-02-10 16 views
5

Ich muss die nächsten Nachbarn in Python anwenden, und ich bin auf der Suche nach den scikit-learn und scipy Bibliotheken, die beide die Daten als Eingabe benötigen, wird dann die Abstände berechnen und den Algorithmus anwenden.Nächste Nachbarn in Python gegeben die Distanz-Matrix

In meinem Fall musste ich einen nicht-konventionellen Abstand berechnen, daher würde ich gerne wissen, ob es eine Möglichkeit gibt, die Abstandsmatrix direkt zu speisen.

Antwort

5

Sie erhalten eine DistanceMetric Objekt erstellen möchten, eine eigene Funktion als Argument an:

metric = sklearn.neighbors.DistanceMetric.get_metric('pyfunc', func=func) 

Aus der Dokumentation:

Hier func ist eine Funktion, die zwei eindimensionalen nimmt numpy arrays, und gibt eine Entfernung zurück. Man beachte, dass, um innerhalb des BallTree verwendet werden soll, muss der Abstand eine echte Metrik sein: D (x, y)> = 0

  • Identität: dh es die folgenden Eigenschaften

    • Nichtnegativität erfüllen muss: d (x, y) = 0 wenn und nur wenn x == y
    • Symmetrie: d (x, y) = d (y, x)
    • Dreieck Ungleichung: d (x, y) + d (y , z)> = d (x, z)
  • Sie dann Ihren Klassifikator mit 01 erstellenals ein Schlüsselwortargument und es wird dies bei der Berechnung von Entfernungen verwenden.

    6

    Wie von Ford und entsprechend der Dokumentation http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html#sklearn.neighbors.KNeighborsClassifier gesagt, sollten Sie Ihre benutzerdefinierte Entfernung in ein DistanceMetric-Objekt konvertieren und als metrischen Parameter übergeben.

    +0

    Ich glaube nicht, dass das stimmt. Das Dokument sagt: '[Aufrufbar]: eine benutzerdefinierte Funktion, die ein Array von Abständen akzeptiert und ein Array der gleichen Form mit den Gewichten zurückgibt. – ford

    +0

    Ja, Sie haben Recht. Ich habe die Antwort bearbeitet. –

    0

    Möchten Fords Antwort, die Sie zu tun haben, wie diese

    metric = DistanceMetric.get_metric (‚pyfunc‘, func =/Ihre Funktion Name /)

    Sie können nicht nur setzen Sie Ihre eigene Funktion hinzufügen Als zweites Argument müssen Sie das Argument als "func" benennen.

    +0

    Guter Fang! Ich habe meine Antwort so bearbeitet, dass sie das Schlüsselwort vor dem Argument enthält. – ford

    Verwandte Themen