1

我正在尝试使用三个自变量拟合线性回归模型并使用 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)

非常感谢任何建议或提示!

4

2 回答 2

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

于 2017-02-23T06:45:41.957 回答
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))
于 2017-02-23T06:57:17.897 回答