2017-02-23 151 views
1

我想使用三个独立变量来拟合线性回归模型,并使用sklearn来计算均方误差,但我似乎无法把它弄清楚。如何使用三个独立变量拟合线性回归模型并使用sklearn计算均方误差?

我的数据是波士顿房屋,以及三名独立变量如下:1。 CRIM(人均由镇犯罪率) 2. RM 3. PTRATIO(每个房间居住的平均数)(光瞳通过城镇教师的比例)

拟合模型:

import numpy as np 
import pandas as pd 
import matplotlib as mpl 
import matplotlib.pyplot as plt 
import sklearn 
lm = LinearRegression() 
lm.fit(X[['CRIM']['RM'], ['PTRATIO']], boston_df.PRICE) 

计算均方误差

from sklearn.metrics import mean_squared_error 
y_true = ['CRIM', 'RM', 'PTRATIO'] 
y_pred = ['PRICE'] 
mean_squared_error(y_true, y_pred) 

任何意见或提示都非常感谢!

+0

会发生什么情况?你忘了提及什么问题 – iled

+0

我无法拟合线性回归模型并计算均方误差。感谢您的回复!! –

+0

我的意思是,请发布实际的错误信息 – iled

回答

0

尝试X[['CRIM', 'RM', 'PRTATIO']]代替X[['CRIM']['RM'], ['PTRATIO']]拟合模型

对于预测你需要这两个向量比较:

y_true = boston_df.PRICE 
y_pred = lm.predict(X[['CRIM', 'RM', 'PRTATIO']]) 
mean_squared_error(y_true, y_pred) 

基本上你y_pred应该从你的模型,它是lm在此预测值案件。

+0

埃米尔,非常感谢! –

0

sklearn有很棒的文档。下面是一个完整的示例数据集的完整示例:http://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html

您遇到的最大问题是您的数据集。就像你的代码在这里:

y_true = ['CRIM', 'RM', 'PTRATIO'] 
y_pred = ['PRICE'] 

这甚至不是真正的数据,它仅仅是2串标签的列表,所以这当然是行不通的:

mean_squared_error(y_true, y_pred) 

从我张贴的例子,您可以尝试使用“hello world”类型的代码(使用现有的数据集)来确保代码正常工作,然后您只需将数据集替换为您自己的数据即可。正如您所看到的,大部分代码都是专门用于准备数据的,因此它将正确加载到线性回归函数中:

import matplotlib.pyplot as plt 
import numpy as np 
from sklearn import datasets, linear_model 

# Load the diabetes dataset 
diabetes = datasets.load_diabetes() 

# Use only one feature 
diabetes_X = diabetes.data[:, np.newaxis, 2] 

# Split the data into training/testing sets 
diabetes_X_train = diabetes_X[:-20] 
diabetes_X_test = diabetes_X[-20:] 

# Split the targets into training/testing sets 
diabetes_y_train = diabetes.target[:-20] 
diabetes_y_test = diabetes.target[-20:] 

# Create linear regression object 
regr = linear_model.LinearRegression() 

# Train the model using the training sets 
regr.fit(diabetes_X_train, diabetes_y_train) 

print("Mean squared error: %.2f" % np.mean((regr.predict(diabetes_X_test) - diabetes_y_test) ** 2)) 
+0

真棒!非常感谢!!! –

+0

在这种情况下,你分割数据集,但是做一些类似'regr = linear_model.LinearRegression()'然后'regr.fit(diabetes_X,diabetes.target)'然后最后'np.mean((regr .predict(diabetes_X,diabetes.target)** 2)'?这是否合理?因为我想看看错误的适合程度有多好,所以我想我可以使用相同的整个数据集......这是一个好方法吗? –

+1

@Euler_Salter @Euler_Salter一般来说,如果您使用相同的数据来训练模型,然后测试一个模型,那么您并没有真正预测任何事情,因为模型已经“知道”每个输入的正确答案,所以这样做并不真的合理。尽管你可以自由尝试,但当然可以试试看。由于这是一个线性回归,根据您的数据,它可能仍然无法做出完美的预测。再仔细检查一下我的例子中的均方误差线,你似乎误解了它。 –

相关问题