Estoy tratando de calcular el Error cuadrático medio de las predicciones `y_train_actual` de mi sci-kit de aprender modelo con los valores originales `salaries`.

Problema: sin Embargo con `mean_squared_error(y_train_actual, salaries)`, estoy recibiendo el error `TypeError: unsupported operand type(s) for -: 'numpy.ndarray' and 'numpy.ndarray'`. El uso de `list(salaries)` en lugar de `salaries` como el 2do parámetro da el mismo error.

Con `mean_squared_error(y_train_actual, y_valid_actual)` estoy recibiendo el error `Found array with dim 40663. Expected 244768`

¿Cómo puedo convertir para el correcto tipos de matriz para `sklearn.netrucs.mean_squared_error()`?

Código

``````from sklearn.metrics import mean_squared_error

y_train_actual = [ np.exp(float(row)) for row in y_train ]
print mean_squared_error(y_train_actual, salaries)``````

Error

``````TypeError                                 Traceback (most recent call last)
<ipython-input-144-b6d4557ba9c5> in <module>()
3 y_valid_actual = [ np.exp(float(row)) for row in y_valid ]
4
----> 5 print mean_squared_error(y_train_actual, salaries)
6 print mean_squared_error(y_train_actual, y_valid_actual)

C:\Python27\lib\site-packages\sklearn\metrics\metrics.pyc in mean_squared_error(y_true, y_pred)
1462     """
1463     y_true, y_pred = check_arrays(y_true, y_pred)
-> 1464     return np.mean((y_pred - y_true) ** 2)
1465
1466

TypeError: unsupported operand type(s) for -: 'numpy.ndarray' and 'numpy.ndarray'``````

Código

``````y_train_actual = [ np.exp(float(row)) for row in y_train ]
y_valid_actual = [ np.exp(float(row)) for row in y_valid ]

print mean_squared_error(y_train_actual, y_valid_actual)``````

Error

``````ValueError                                Traceback (most recent call last)
<ipython-input-146-7fcd0367c6f1> in <module>()
4
5 #print mean_squared_error(y_train_actual, salaries)
----> 6 print mean_squared_error(y_train_actual, y_valid_actual)

C:\Python27\lib\site-packages\sklearn\metrics\metrics.pyc in mean_squared_error(y_true, y_pred)
1461
1462     """
-> 1463     y_true, y_pred = check_arrays(y_true, y_pred)
1464     return np.mean((y_pred - y_true) ** 2)
1465

C:\Python27\lib\site-packages\sklearn\utils\validation.pyc in check_arrays(*arrays, **options)
191         if size != n_samples:
192             raise ValueError("Found array with dim %d. Expected %d"
--> 193                              % (size, n_samples))
194
195         if not allow_lists or hasattr(array, "shape"):

ValueError: Found array with dim 40663. Expected 244768``````

Código

``````print type(y_train)
print type(y_train_actual)
print type(salaries)``````

``````<type 'list'>
<type 'list'>
<type 'tuple'>``````

de impresión y_train[:10]

`[10.126631103850338, 10.308952660644293, 10.308952660644293, 10.221941283654663, 10.126631103850338, 10.126631103850338, 11.225243392518447, 9.9987977323404529, 10.043249494911286, 11.350406535472453]`

impresión de salarios[:10]

`('25000', '30000', '30000', '27500', '25000', '25000', '75000', '22000', '23000', '85000')`

lista de impresión(salarios)[:10]

`['25000', '30000', '30000', '27500', '25000', '25000', '75000', '22000', '23000', '85000']`

print len(y_train)

``244768``

print len(salarios)

``244768``
• Puedes añadir la `shape` de y_train? Mi conjetura es que y_train_actual es un `list` de `ndarrays`, que podría terminar en un conflicto dentro de `mean_square_error()`.
• Obtengo el error `AttributeError: 'list' object has no attribute 'shape'`
• Cierto que. ¿Tiene usted una idea de las dimensiones de y_train?
• `len(y_train)` da `244768`
InformationsquelleAutor Nyxynyx | 2013-05-02

1 Comentario

1. La `TypeError` problema se deriva de los salarios está una lista de cadenas, mientras que y_train_actual es una lista de las carrozas. Aquellos que no se pueden sustraer.

Para su segundo error, usted debe asegurarse de que ambas matrices son del mismo tamaño, de lo contrario no se puede restar de ellos.

• He probado tu sugerencia y obtener el error `float() argument must be a string or a number`
• Se utiliza `np.float()`, que actúa en `numpy.ndarrays`?
• sí hice uso de `np.float()` en lugar de `float()`
• Ver mi revisión en la respuesta anterior. Usted realmente necesita para arrojar la lista como un `np.array()` con `np.float` como su `dtype`.
• Intentado eso y tengo el error `TypeError: unsupported operand type(s) for -: 'numpy.ndarray' and 'numpy.ndarray'`
• Ok, así que no hay dados. Tiempo para reagruparse.
• Estoy haciendo una conjetura que `mean_squared_error()` no tomar en una matriz creada por numpy
• Tal vez. Agregó que las dimensiones de la matriz es inesperado `mean_squared_error(y_train_actual, y_valid_actual)`. Podría ser que las dos listas no son de la misma longitud? Que va a hacer una resta tirar un error.
• Para `mean_squared_error(y_train_actual, y_valid_actual)`, sí tienes razón, ambas listas no son de la misma longitud, lo que provoca el error. Para el primer error que implique `mean_squared_error(y_train_actual, salaries)` su dar un error quejarse de la ndarray
• ¿Qué versión de `numpy` están en ejecución? Usted puede conseguir a través de `pip freeze` o similares.
• Me deshice de el primer error mediante el uso de `salaries = [ float(salary) for salary in salaries ]` para convertir las cadenas en la lista `salaries` en carrozas. `print np.__version__` da `1.7.1`
• Sí, restando las cuerdas y la flota que iba a ser duro. 😉
• 🙂 Para el segundo error, usted simplemente truncar la lista `y_train_actual[:40663]` y aún así obtener un significativo error cuadrático medio? Me estoy poniendo un MSE de 500 millones así que supongo que es el camino equivocado.
• Eso es mucho más difícil saber. Se puede explicar de qué y_train y y_valid, y sus contrapartes reales, representan?
• Tengo algo de trabajo anuncio de texto vectorizados como `X_train` y sus respectivos salarios como `y_train`. Estos se utilizan para ajustar un modelo de regresión lineal `rr = Ridge().fit(X_train, y_train)`. Este modelo `rr` es entonces utilizada para predecir los salarios de «validación» de la prueba de conjunto de anuncios de trabajo vectorizados como `X_valid`. Sus predicciones `y_valid` se calcula utilizando `y_valid = rr.predict(X_valid)`. Quiero una manera de evaluar el rendimiento del modelo de regresión y trató de MSE. Hay una manera mejor?
• Sí, para comparar dos señales a través de un `mean_square_error()` medida deben ser de las mismas dimensiones. De lo contrario, usted tendrá que manualmente comparar la menor señal a diferentes partes de la más larga con el fin de encontrar la parte con la menor MSE, suponiendo que es tu objetivo.
• permítanos continuar esta discusión en el chat
• Interesante enfoque para la búsqueda de empleo. Estás tratando de comparar la predicción de la y_valid valores a los reales de la prueba del conjunto de suelo verdad? Estoy un poco confundido con los nombres de variable. Es y_train_actual sus predicciones mientras y_valid_actual los valores reales que se utiliza para el MSE o viceversa?