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)

Resultado

<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. 9

    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?

Dejar respuesta

Please enter your comment!
Please enter your name here