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