sklearn: se encontraron matrices con números inconsistentes de muestras al llamar a LinearRegression.fit ()


102

Solo intento hacer una regresión lineal simple, pero este error me desconcierta por:

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

que produce:

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

Estas selecciones deben tener las mismas dimensiones y deben ser matrices numerosas, entonces, ¿qué me estoy perdiendo?

Respuestas:


116

Parece que sklearn requiere la forma de datos de (número de fila, número de columna). Si la forma de sus datos es (número de fila) (999, ), no funciona. Al usar numpy.reshape(), debe cambiar la forma de la matriz a (999, 1), por ejemplo, usando

data=data.reshape((999,1))

En mi caso, funcionó con eso.


6
mi forma de datos es (10L,), ¿cómo la convierto a (10L, 1)? Cuando uso data = data.reshape (len (data), 1), la forma resultante es (10L, 1L) no (10L, 1)
user3841581

@ user3841581, consulte esta publicación .
George Liu

1
@Boern Gracias por el comentario. También descubrí que X_train debería ser de tamaño (N, 1) pero y_train debería ser de tamaño (N,) no (N, 1), de lo contrario no funciona, al menos no para mí.
CrossEntropy

data.reshape (...) puede mostrar una advertencia de abandono si los datos son un objeto Serie. Utilice data.values.reshape (...)
NightFurry

data = data.reshape (-1,1)
Itachi

24

Parece que está utilizando pandas dataframe (del nombre df2).

También puede hacer lo siguiente:

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

NOTA: He eliminado los "valores" ya que eso convierte la serie pandas en numpy.ndarray y numpy.ndarray no tiene el atributo to_frame ().


11

Visto en el curso básico de aprendizaje profundo de Udacity:

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

2
¡Gracias! ¡Este es realmente el más simple y fácil de entender!
Juan A. Navarro

En realidad, se espera que el parámetro Y tenga una forma (de longitud). ¡Gracias!
Michael_Zhang

5

Creo que el argumento "X" de regr.fit debe ser una matriz, por lo que lo siguiente debería funcionar.

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

4

Encontré este error porque convertí mis datos a np.array. Solucioné el problema convirtiendo mis datos en an np.matrixy tomando la transposición.

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

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


2
expects X(feature matrix)

Intente poner sus características en una tupla como esta:

características = ['TV', 'Radio', 'Periódico']
X = datos [características]

1

Enfrenté un problema similar. El problema en mi caso fue que el número de filas en X no era igual al número de filas en y.

es decir, el número de entradas en las columnas de características no era igual al número de entradas en la variable de destino ya que había eliminado algunas filas de las columnas de características.


0

Para analizar dos matrices (matriz1 y matriz2), deben cumplir los dos requisitos siguientes:

1) Deben ser un numpy.ndarray

Comprueba con

type(array1)
# and
type(array2)

Si ese no es el caso, al menos uno de ellos realiza

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

2) Las dimensiones deben ser las siguientes:

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

N es el número de elementos que hay en la matriz. Para proporcionar array1 con el número correcto de ejes, realice:

array1 = array1[:, numpy.newaxis]

0

Como se mencionó anteriormente, el argumento X debe ser una matriz o una matriz numérica con dimensiones conocidas. Entonces probablemente puedas usar esto:

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

Por lo tanto, su marco de datos se convertiría en una matriz con dimensiones conocidas y no necesitará remodelarlo



-1

durante la división de prueba de tren, es posible que haya cometido un error

x_train,x_test,y_train,y_test=sklearn.model_selection.train_test_split(X,Y,test_size)

El código anterior es correcto

Es posible que haya hecho lo siguiente, lo que está mal

x_train,y_train,x_test,y_test=sklearn.model_selection.train_test_split(X,Y,test_size)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.