计算模型传递的均方误差

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

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

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

神经网络反向传播代码不工作

我需要编写一个简单的由1个输出节点、1个包含3个节点的…

值错误:y 包含先前未见过的标签:

我使用了 决策树分类器,我想将我的 输入 作为 字符串…

使用不平衡数据集进行特征选择时遇到的问题

我正在使用不平衡数据集(54:38:7%)进行特征选择…

广义随机森林/因果森林在Python上的应用

我在寻找Python上的广义随机森林/因果森林算法,但…

如何用PyTorch仅用标量损失来训练神经网络?

假设我们有一个神经网络,我们希望它能根据输入预测三个值…

什么是RNN中间隐藏状态的良好用途?

我已经以三种不同的方式使用了RNN/LSTM: 多对多…

发表回复

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