我正在尝试绘制我的数据的均方误差,但不太确定如何操作。我知道要计算均方误差需要“真实”值和“预测”值,但我的项目结构相当混乱,难以理解。
我有一个生成模型的方法,如下所示:
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
需要接收X
、y
、degree
和model
)。
我还注意到,我的当前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))
希望这对您有帮助。