【问题标题】:Calculating the mse from a model passed in从传入的模型计算 mse
【发布时间】:2020-03-11 07:10:49
【问题描述】:

我正在尝试绘制数据的均方误差,但我很难弄清楚如何去做。我知道您需要“真实”值和“预测”值才能获得 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 中使用的很多代码都非常多余。不幸的是,指导方针说这是我需要这样做的方式(mse 采用 Xydegreemodel

我认为还值得注意的是,我当前的 mse 工作正常,直到大约 13-14 度,它在图表上生成的答案与我给出的解决方案不匹配。我不确定为什么它不能完美运行,因为我认为这是正确的想法。

【问题讨论】:

    标签: python python-3.x machine-learning mse mean-square-error


    【解决方案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))
    

    希望对您有所帮助。

    【讨论】:

    • 这很有道理,谢谢!我对 train_test_split 函数感到非常困惑,所以我想如果没有它我可以做我想做的事。不过,你真的为我清理了它! :-) 谢谢!
    • 太棒了!而且我认为强调预处理(标准化、特征扩展)应该仅在X_train上拟合,但应用于 预测时的 X_test。否则,如果您将预处理步骤与完整的 X 相匹配,那么您基本上是在将信息从测试分布泄漏到训练分布……这就是作弊!
    猜你喜欢
    • 2021-07-11
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2021-02-02
    相关资源
    最近更新 更多