Estoy tratando de calcular la raíz del error cuadrático medio de un pandas marco de datos. He comprobado las anteriores enlaces en apiladas de desbordamiento como Root mean square error en python
y el scikit aprender documentación http://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_squared_error.html tenía la esperanza de que hay alguien que arroje algo de luz sobre lo que estoy haciendo mal.
Aquí está el conjunto de datos. Aquí está mi código.

import pandas as pd
import numpy as np
sales = pd.read_csv("home_data.csv")

from sklearn.cross_validation import train_test_split
train_data,test_data = train_test_split(sales,train_size=0.8)

from sklearn.linear_model import LinearRegression
X = train_data[['sqft_living']]
y=train_data.price
#build the linear regression object
lm=LinearRegression()
# Train the model using the training sets
lm.fit(X,y)
#print the y intercept
print(lm.intercept_)
#print the coefficents
print(lm.coef_)

lm.predict(300)



from math import sqrt
from sklearn.metrics import mean_squared_error
y_true=train_data.price.loc[0:5,]
test_data=test_data[['price']].reset_index()
y_pred=test_data.price.loc[0:5,]
predicted =y_pred.as_matrix()
actual= y_true.as_matrix()
mean_squared_error(actual, predicted)

EDITAR

Así que esto es lo que ha funcionado para mí. He tenido que transformar el conjunto de datos de prueba los valores de pies cuadrados de vida de filas a columnas.

from sklearn.linear_model import LinearRegression
X = train_data[['sqft_living']]
y=train_data.price
#build the linear regression object
lm=LinearRegression()
# Train the model using the training sets
lm.fit(X,y)

Nuevo código

test_X = test_data.sqft_living.values
print(test_X)
print(np.shape(test_X))
print(len(test_X))
test_X = np.reshape(test_X, [4323, 1])
print(test_X)
from sklearn.metrics import mean_squared_error
from sklearn.metrics import explained_variance_score
MSE = mean_squared_error(y_true = test_data.price.values, y_pred = lm.predict(test_X))
MSE
MSE**(0.5)
  • 1. train_data o test_data no son pandas dataframes más, ellos son numpy.mdarray tipos.
  • El código no es la predicción de cualquier cosa: usted es simplemente dividir los datos en dos partes y, a continuación, comparar las etiquetas. Porque las porciones son de diferentes tamaños, mean_squared_error no se puede comparar. Podría usted describir lo que se espera que este código a hacer?
  • He editado mi código un poco. Así que he creado un modelo de regresión lineal basada en los datos de entrenamiento. Y yo quería ver cómo de cerca los datos de prueba para la predicción de los datos de entrenamiento.
InformationsquelleAutor Zaynaib Giwa | 2015-11-01

1 Comentario

  1. 8

    Usted está comparando los test-set de etiquetas para la formación de conjunto de etiquetas. Yo creo que lo que realmente quieres hacer es comparar test-set de etiquetas para predijo test-set de etiquetas.

    Por ejemplo:

    import pandas as pd
    import numpy as np
    from sklearn.metrics import mean_squared_error
    from sklearn.linear_model import LinearRegression
    from sklearn.cross_validation import train_test_split
    
    sales = pd.read_csv("home_data.csv")
    train_data, test_data = train_test_split(sales,train_size=0.8)
    
    # Train the model
    X = train_data[['sqft_living']]
    y = train_data.price
    lm = LinearRegression()
    lm.fit(X, y)
    
    # Predict on the test data
    X_test = test_data[['sqft_living']]
    y_test = test_data.price
    y_pred = lm.predict(X_test)
    
    # Compute the root-mean-square
    rms = np.sqrt(mean_squared_error(y_test, y_pred))
    print(rms)
    # 260435.511036

    Nota que scikit-learn puede, en general, manejar los Pandas DataFrames y la Serie de entradas sin conversión explícita a arrays de numpy. El error en el fragmento de código en su pregunta tiene que ver con el hecho de que las dos matrices pasa a mean_squared_error() son de diferentes tamaños.

    • Gracias! Hice una ligera modificación en el código que has publicado. He tenido que transformar X_test el uso de np.remodelar. También sabe usted la importancia del uso de los corchetes dobles en los pandas. Sé que usted use para seleccionar varias filas.
    • df[['col']] devolverá un DataFrame. df['col'] devolverá una Serie.
    • Agradezco toda su ayuda. Gracias

Dejar respuesta

Please enter your comment!
Please enter your name here