从传入的模型计算 mse
Calculating the mse from a model passed in
我正在尝试绘制数据的均方误差图,但我在弄清楚如何做时遇到了一些困难。我知道您需要 "true" 值和 "predicted" 值才能获得 mse,但我的项目布局方式非常混乱。
我有一种生成模型的方法,如下所示:
def fit_curve(X, y, degree):
poly_features = PolynomialFeatures(degree = degree)
x_poly = poly_features.fit_transform(X)
linreg = LinearRegression()
model = linreg.fit(x_poly, y)
return model
这个 returns 一个已经训练过的模型。
然后,我应该找到所述模型的均方误差。我不确定我应该怎么做,因为模型已经在没有返回预测值的情况下进行了训练。
现在我计算 mse 的方法是:
def mse(X, y, degree, model):
poly_features = PolynomialFeatures(degree = degree)
linreg = LinearRegression()
x_poly = poly_features.fit_transform(X)
linreg.fit(x_poly, y)
y_predict = linreg.predict(x_poly)
mse = mean_squared_error(y_predict, y)
return mse
我觉得与 fit_curve
相比,我在 mse
中使用的很多代码都非常多余。不幸的是,指导方针说这是我需要做的方式(mse
取 X
、y
、degree
和 model
。
我认为还值得注意的是,我当前的 mse
可以正常工作,直到大约 13-14 度,它在图表上生成的答案与我给出的解决方案不匹配。我不确定为什么它不能完美运行,因为我认为这是正确的想法。
事情应该那样做:
1) 将 X 和 y 分成训练集和测试集。您可以为此使用 train_test_split。您可以选择 test_size(我以 0.33 为例)和 random_state(这有助于再现性)。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
2) 使用 X_train 和 y_train 拟合您的模型(在此为线性回归)。您有一些特征生成方法(多项式方法),这很棒。将其与训练数据一起使用。
poly_features = PolynomialFeatures(degree=degree)
linreg = LinearRegression()
X_train_poly = poly_features.fit_transform(X_train)
linreg.fit(X_train_poly, y_train)
3) 通过查看它是否可以正确预测看不见的数据来评估您的拟合模型 (X_test)。为此,您确实可以将 mean_squared_error 与 model.predict(X_test) 和 y_test 一起使用。注意,您必须对 X_test 应用与对 X_train 相同的转换(这就是我们首先使用 poly_features.transform)
的原因
X_test_poly = poly_features.transform(X_test)
print(mean_squared_error(linreg.predict(X_test_poly), y_test))
希望对您有所帮助。
我正在尝试绘制数据的均方误差图,但我在弄清楚如何做时遇到了一些困难。我知道您需要 "true" 值和 "predicted" 值才能获得 mse,但我的项目布局方式非常混乱。
我有一种生成模型的方法,如下所示:
def fit_curve(X, y, degree):
poly_features = PolynomialFeatures(degree = degree)
x_poly = poly_features.fit_transform(X)
linreg = LinearRegression()
model = linreg.fit(x_poly, y)
return model
这个 returns 一个已经训练过的模型。
然后,我应该找到所述模型的均方误差。我不确定我应该怎么做,因为模型已经在没有返回预测值的情况下进行了训练。 现在我计算 mse 的方法是:
def mse(X, y, degree, model):
poly_features = PolynomialFeatures(degree = degree)
linreg = LinearRegression()
x_poly = poly_features.fit_transform(X)
linreg.fit(x_poly, y)
y_predict = linreg.predict(x_poly)
mse = mean_squared_error(y_predict, y)
return mse
我觉得与 fit_curve
相比,我在 mse
中使用的很多代码都非常多余。不幸的是,指导方针说这是我需要做的方式(mse
取 X
、y
、degree
和 model
。
我认为还值得注意的是,我当前的 mse
可以正常工作,直到大约 13-14 度,它在图表上生成的答案与我给出的解决方案不匹配。我不确定为什么它不能完美运行,因为我认为这是正确的想法。
事情应该那样做:
1) 将 X 和 y 分成训练集和测试集。您可以为此使用 train_test_split。您可以选择 test_size(我以 0.33 为例)和 random_state(这有助于再现性)。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
2) 使用 X_train 和 y_train 拟合您的模型(在此为线性回归)。您有一些特征生成方法(多项式方法),这很棒。将其与训练数据一起使用。
poly_features = PolynomialFeatures(degree=degree)
linreg = LinearRegression()
X_train_poly = poly_features.fit_transform(X_train)
linreg.fit(X_train_poly, y_train)
3) 通过查看它是否可以正确预测看不见的数据来评估您的拟合模型 (X_test)。为此,您确实可以将 mean_squared_error 与 model.predict(X_test) 和 y_test 一起使用。注意,您必须对 X_test 应用与对 X_train 相同的转换(这就是我们首先使用 poly_features.transform)
的原因X_test_poly = poly_features.transform(X_test)
print(mean_squared_error(linreg.predict(X_test_poly), y_test))
希望对您有所帮助。