Skip to main content
 首页 » 编程设计

python之使用 Pandas 数据框查找均方根误差

2025年05月04日12mfryf

我正在尝试从 Pandas 数据框中计算均方根误差。我已经检查了以前关于堆叠溢出的链接,例如 Root mean square error in python 和 scikit 学习文档 http://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_squared_error.html我希望有人能阐明我做错了什么。 这是 dataset .这是我的代码。

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) 

编辑

所以这对我有用。我必须将 sqft living 的测试数据集值从行转换为列。

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) 

请您参考如下方法:

您正在将测试集标签与训练集标签进行比较。我相信您真正想要做的是将测试集标签与预测测试集标签进行比较。

例如:

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-learn 通常可以处理 Pandas DataFrames 和 Series 输入,而无需显式转换为 numpy 数组。您问题中代码片段中的错误与传递给 mean_squared_error() 的两个数组大小不同有关。