如何使用三个自变量拟合线性回归模型并使用 sklearn 计算均方误差?

How to fit a linear regression model using three independent variables and calculate the mean squared error using sklearn?

我正在尝试使用三个自变量拟合线性回归模型并使用 sklearn 计算均方误差,但我似乎无法正确完成。

我的数据是Boston Housing,三个自变量如下: 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)

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

尝试 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

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))