2015-11-01 2 views
0

Я пытаюсь вычислить среднеквадратическую ошибку в квадрате из кадра данных pandas. Я проверил предыдущие ссылки на переполненный стоп, например Root mean square error in python и документацию по изучению scikit http://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_squared_error.html Я надеялся, что кто-то там прольет некоторый свет на то, что я делаю неправильно. Адрес dataset. Вот мой код.Поиск среднеквадратичной ошибки с Pandas dataframe

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) 

EDIT

Так это то, что работает для меня. Мне пришлось преобразовать значения тестового набора данных для жизни sqft из строки в столбец.

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) 

Новый код

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

1. train_data или test_data больше не являются фреймами данных pandas, они являются типами numpy.mdarray. – Zero

+0

Ваш код ничего не предсказывает: вы просто разбиваете данные на две части, а затем сравниваете метки. Поскольку части имеют разные размеры, '' mean_squared_error'' не может их сравнивать. Не могли бы вы описать, что вы ожидаете от этого кода? – jakevdp

+0

@jakevdp Я немного изменил свой код. Поэтому я создал модель линейной регрессии, основанную на данных обучения. И я хотел увидеть, насколько тесно данные теста предназначены для прогнозирования данных обучения. –

ответ

4

Вы сравнения тест-набор наклеек для учебно-набор наклеек. Я считаю, что то, что вы на самом деле хотите сделать, это сравнить тестовые метки с предсказанными ярлыками тестового набора.

Например:

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 

Обратите внимание, что scikit учиться могут вообще ручка панда DataFrames и входы серии без явного преобразования в Numpy массивов. Ошибка в фрагменте кода в вашем вопросе связана с тем, что два массива, переданные в mean_squared_error(), имеют разные размеры.

+0

Спасибо! Я немного подделал код, который вы разместили. Мне пришлось преобразовать X_test с помощью np.reshape. Также знаете ли вы значение использования двойных скобок в пандах. Я знаю, что вы используете их для выбора нескольких строк. –

+3

'' df [['col']] '' вернет DataFrame. '' df ['col'] '' вернет серию. – jakevdp

+0

Я ценю всю вашу помощь. благодаря –

Смежные вопросы