2015-06-12 5 views
75

Nur versuchen, eine einfache lineare Regression zu tun, aber ich bin von diesem Fehler verwirre für:sklearn: Gefunden Arrays mit inkonsistenter Anzahl von Proben, wenn LinearRegression.fit() aufrufen

regr = LinearRegression() 
regr.fit(df2.iloc[1:1000, 5].values, df2.iloc[1:1000, 2].values) 

, die produziert:

ValueError: Found arrays with inconsistent numbers of samples: [ 1 999] 

Diese Auswahlen müssen die gleichen Dimensionen haben, und sie sollten numpy Arrays sein, also was fehlt mir?

Antwort

100

Es sieht so aus, als ob sklearn die Datenform von (Zeilennummer, Spaltennummer) benötigt. Wenn Ihre Datenform (Zeilennummer) wie (999,) ist, funktioniert es nicht. Unter Verwendung von numpy.reshape() sollten Sie zu (999, 1), z. mit

data.reshape((999,1)) 

In meinem Fall, es hat damit gearbeitet.

+5

meine Datenform ist (10L,), wie konvertiere ich es (10L, 1). Wenn ich data = data.reshape (len (data), 1) verwende, ist die resultierende Form (10L, 1L) nicht (10L, 1) – user3841581

+0

@ user3841581, bitte beziehen Sie sich auf diese [post] (http://stackoverflow.com/q/40440997/4896087). –

+0

@Boern Danke für den Kommentar. Ich entdeckte auch, dass X_train von der Größe (N, 1) sein sollte, aber y_train sollte von der Größe (N,) nicht (N, 1) sein, sonst funktioniert es nicht, zumindest nicht für mich. – CrossEntropy

6

Ich denke, das "X" Argument von regr.fit muss eine Matrix sein, also sollte folgendes funktionieren.

regr = LinearRegression() 
regr.fit(df2.iloc[1:1000, [5]].values, df2.iloc[1:1000, 2].values) 
3
expects X(feature matrix) 

Versuchen Sie, Ihre Funktionen in einem Tupel wie folgt setzen:

features = ['TV', 'Radio', 'Newspaper'] 
X = data[features]
18

Sieht aus wie Sie Pandas Datenrahmen verwenden (vom Namen DF2).

Sie könnten auch folgendes tun:

regr = LinearRegression() 
regr.fit(df2.iloc[1:1000, 5].to_frame(), df2.iloc[1:1000, 2].to_frame()) 

ANMERKUNG: Ich habe entfernt „Werte“ wie die Pandas Serie umwandelt numpy.ndarray und numpy.ndarray nicht über Attribut to_frame().

5

Ich habe diesen Fehler festgestellt, weil ich meine Daten in eine np.array konvertiert habe. Ich habe das Problem behoben, indem ich meine Daten stattdessen in eine np.matrix konvertiert habe und die Transponierung übernommen habe.

Valueerror: regr.fit(np.array(x_list), np.array(y_list))

Richtig: regr.fit(np.transpose(np.matrix(x_list)), np.transpose(np.matrix(y_list)))

-2

zwei Arrays zu analysieren (array1 und array2) sie die beiden folgenden Anforderungen erfüllen müssen:

1) Sie brauchen eine sein numpy.tarray

Mit

überprüfen
type(array1) 
# and 
type(array2) 

Wenn das nicht der Fall ist, mindestens einer von ihnen

array1 = numpy.ndarray(array1) 
# or 
array2 = numpy.ndarray(array2) 

2 durchführen) Die Abmessungen werden müssen, wie folgt:

array1.shape #shall give (N, 1) 
array2.shape #shall give (N,) 

N ist die Anzahl der Elemente, die sich in dem Array befinden. Um array1 mit der richtigen Anzahl von Achsen zu liefern auszuführen:

array1 = array1[:, numpy.newaxis] 
1

Wie oben erwähnt wurde Argument X muss eine Matrix oder ein Array numpy mit bekannten Abmessungen. So könnten Sie wahrscheinlich verwenden:

df2.iloc[1:1000, 5:some_last_index].values 

so Ihr Datenrahmen würde mit bekannten Dimensionen in ein Array umgewandelt werden und Sie werden nicht neu gestalten müssen, um es

2

auf dem tiefen Lerngrundkurs Udacity gesehen:

df = pd.read_csv('my.csv') 
... 
regr = LinearRegression() 
regr.fit(df[['column x']], df[['column y']]) 
Verwandte Themen