开发者社区> 问答> 正文

根据传入的模型计算mse

我正在尝试绘制数据的均方误差图,但是我很难弄清楚该怎么做。我知道您既需要“ 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

这将返回已训练的模型。

然后,我应该找到所述模型的均方误差。我不确定应该怎么做,因为模型已经过训练而没有返回预测值。现在,我计算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中使用的许多代码都是非常多余的。不幸的是,指导方针说这是我需要这样做的方式(使用mseXy模型

我认为还值得注意的是,我当前的“ mse”在大约13-14度之前都可以正常工作,此时它在图形上生成的答案与我给出的解决方案不符。我不确定为什么它不能完美运行,因为我认为这是正确的想法。

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 19:09:14 593 0
1 条回答
写回答
取消 提交回答
  • 事情应该以这种方式完成:

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

    希望能有所帮助。

    回答来源:stackoverflow

    2020-03-24 19:09:23
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
《MSE 微服务网关》 立即下载
微服务引擎 MSE 治理中心重磅发布 立即下载
阿里云微服务引擎 MSE 2.0 线上发布 立即下载