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.
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:
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.df[['col']]
devolverá un DataFrame.df['col']
devolverá una Serie.