计算模型传递的均方误差

我正在尝试绘制我的数据的均方误差,但不太确定如何操作。我知道要计算均方误差需要“真实”值和“预测”值,但我的项目结构相当混乱,难以理解。

我有一个生成模型的方法,如下所示:

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

这会返回一个已经训练好的模型。

然后,我需要为该模型计算均方误差。我不确定该如何操作,因为模型已经在不返回预测值的情况下训练好了。目前我计算均方误差的方法是这样的:

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

我觉得在mse方法中使用的很多代码与fit_curve方法相比是多余的。不幸的是,根据指导方针,我必须按照这种方式操作(mse需要接收Xydegreemodel)。

我还注意到,我的当前mse方法在13到14度的范围内工作正常,但在图表上生成的答案与我得到的解决方案不匹配。我不确定为什么它不能完美工作,因为我认为这是正确的思路。


回答:

事情应该这样做:

1) 将您的X和y数据分割成训练集和测试集。您可以使用train_test_split来完成此操作。您可以选择测试集大小(我以0.33为例)和随机状态(这有助于重现性)。

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

希望这对您有帮助。

Related Posts

如何从数据集中移除EXIF数据?

我在尝试从数据集中的图像中移除EXIF数据(这些数据将…

用于Python中的“智能点”游戏的遗传算法不工作

过去几天我一直在尝试实现所谓的“智能点”游戏。我第一次…

哪个R平方得分更有帮助?

data.drop(‘Movie Title’, ax…

使用线性回归预测GRE分数对录取率的影响

我正在学习线性回归,并尝试在Jupyter笔记本中用P…

使用mlrMBO贝叶斯优化进行SVM超参数调优时出现错误

我试图针对一个分类任务优化SVM,这个方法在许多其他模…

Keras模型的二元交叉熵准确率未发生变化

我在网上看到了很多关于这个问题的提问,但没有找到明确的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注