2016-04-27 1 views
0

Ich versuche, einer Beschriftung, die auf den bekannten Koordinaten basiert, Koordinaten mithilfe von SciKit-learns Linear Discriminant Analysis-Paket zuzuweisen. Training Koordinaten und Label in einem Pandas Datenrahmen gespeichert, Zielkoordinaten in einem anderen. Die beiden Datenfelder sind in der Zeilenlänge nicht gleich, der Trainingssatz ist größer. Ich möchte die Beschriftung auf die Koordinaten im ursprünglichen Datenrahmen anwenden, um sie als Schlüssel mit pd.merge zu verwenden.Anpassen oder Vorhersagen der Funktion für LinearDiscriminantAnalysis

Ich weiß, ich könnte dieses Problem mit Matplot Punkt in Polygon oder Shapely nähern, aber es auf diese Weise testen möchten. Hier ist, was ich auf dem docs

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis 
from sklearn.preprocessing import LabelEncoder 
le = LabelEncoder() 
labels_fea = le.fit_transform(Spatial_index['Postcode']) 
trainingdata=df1[['xcoord','ycoord']].values 
targetvalues=df2[['xcoord','ycoord']].values 
clf = LinearDiscriminantAnalysis(solver='svd', shrinkage=None, priors=None,  
n_components=None, store_covariance=False, tol=0.0001) 
Basis haben

dann, wie unten ausgeführt,

clf.fit(trainingdata,targetvalues) 

Dies führt den folgenden Fehler,

ValueError: bad input shape (8860, 2) 
+0

können Sie umfassen die Linie wo du 'fit' nennst? – maxymoo

+0

danke für die Suche nach max, haben hinzugefügt, dass jetzt –

Antwort

0

Ich glaube, du bist von Ziel verwirrt und Prüfung. Der Fehler tritt auf, weil der Klassifikator ein eindimensionales Array von Labels erwartet - in Ihrem Fall die Postleitzahlen. Ohne Ihre Daten zu sehen, kann ich nicht sicher sagen, aber Sie wollen wahrscheinlich

clf.fit(trainingdata, labels_fea) 

und dann Umbenennung targetdata-testdata tun, würden Sie Ihre Vorhersagen erhalten zu Ihrem Modell zu testen mit clf.predict(testdata)

+0

Dank max, habe ich diese Anpassungen gemacht.Es dreht sich für lange Zeit (es gibt ~ 80k Etiketten, ganz London), aber dann den folgenden Fehler bekommen 'ZeroDivisionError: float division by null Ich dachte, ich könnte das Match verbessern, indem ich eine weitere Datenspalte hinzufüge, die beiden gemeinsam ist ("Distrikt"), aber es mag nicht, dass es ein str-Wert ist. Ich bin nicht sicher, was hinter dem Code passiert, aber angenommen, dies würde helfen, da der Bezirk die Anzahl der Postleitzahlen auf 11.640 begrenzt. –

+0

es ist zu schwer zu sagen, was das verursacht, ohne die Daten zu sehen, können Sie versuchen, eine minimale Teilmenge von Daten zu finden, wo dieser Fehler auftritt ... erhalten Sie den Fehler, wenn Sie nur auf die ersten Zeilen Ihres Datasets beschränken? – maxymoo