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?

soleado
fuente

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.

Yul
fuente
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 ().

usuario24981
fuente
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']])
xilef
fuente
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)
Anish
fuente
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)))

Josh Grinberg
fuente
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]
Yuanxu Xu
fuente
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.

Shivam Agrawal
fuente
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]
Ricardo
fuente
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

Andy J.
fuente
0

Algunos días me enfrenté al mismo problema. La razón fue matrices de diferentes tamaños.

Ing Saliheen Afridi
fuente
-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)
naveen
fuente