【问题标题】:Predict And Compare Data From Different Months预测和比较不同月份的数据
【发布时间】:2021-07-07 18:14:18
【问题描述】:

我正在对 2021 年 1 月结束的数据框进行线性回归。目标变量是月平均值,因此它将预测 2 月。

我在不同的数据集中拥有在 1 月底和 2 月底结束的信息。我想用 1 月的数据训练模型,然后将预测结果与 2 月底结束的数据帧的数据进行比较。

对于我来说,我是否需要将目标列(来自 2 月数据框)合并到 1 月数据框并像这样运行模型:

january.drop('january_avg_colum', axis=1, inplace=True)
df = pd.merge(january, february[['ID', 'february_avg_colum']], how="inner", on=["ID", "ID"])

X = df.drop('february_avg_colum', axis=1)
y = df['february_avg_colum']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

model = LinearRegression().fit(X_train, y_train)

y_preds = model.predict((X_test))

print('RMSE:', metrics.mean_squared_error(y_test, y_preds, squared=False))

在合并之前我是否需要降低 1 月平均值? 这是解决这个问题的正确方法吗?有没有更简单或更有效的方法? 非常感谢任何帮助!

【问题讨论】:

    标签: python pandas numpy jupyter-notebook regression


    【解决方案1】:

    如果您已经知道要在 1 月训练数据并在 2 月进行测试,则无需拆分,您已经准备好训练和测试数据集。

    如果您必须微调模型的参数或测试其他模型,您可能希望将训练数据拆分为虚拟训练和测试数据集。然后对您的训练数据执行train_test_split 会很有用,或者更好的是,进行多次拆分并在所有这些运行中找到最佳模型+参数,但仍然没有看到 2 月份的数据(这是 非常 重要)。

    在这里,LinearRegression 无需任何参数即可工作,因此实际上不需要拆分或洗牌。

    现在让我向您展示您的代码的作用,以及如果我们将您想要实现的目标转换为代码会是什么样子:

    你在这里做什么

    1. 删除任何存在的一月目标值:
    january.drop('january_info_colum', axis=1, inplace=True)
    
    1. 将 2 月目标合并到 1 月功能:
    df = pd.merge(january, february[['ID', 'february_info_colum']], 
                  how="inner", on=["ID", "ID"])
    
    1. 将此数据集拆分为 80% 训练/20% 测试:
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    
    1. 拟合和预测:
    model = LinearRegression().fit(X_train, y_train)
    y_preds = model.predict((X_test))
    
    1. 打印公制
    print('RMSE:', metrics.mean_squared_error(y_test, y_preds, squared=False))
    

    什么与您描述的目标相对应

    1. 1 月份的培训功能和目标:
    model = LinearRegression().fit(january.drop('january_info_colum', axis=1), january['january_info_colum'])
    
    1. 2 月特征预测:
    y_preds = model.predict(february.drop('february_info_colum', axis=1))
    
    1. 打印公制
    print('RMSE:', metrics.mean_squared_error(february['february_info_colum'], y_preds, squared=False))
    

    【讨论】:

    • 所以我不需要拆分数据?
    • 不,因为您已经决定要训练哪些数据以及要预测哪些数据。我在答案的开头添加了一些解释。
    • 例如,两个数据集都有很多特征。所以我正在探索特征选择方法。因此,我按照上述步骤探索预测目标(2 月)的最佳特征,对吗?在 1 月数据集上训练特征,然后在 2 月进行线性回归。也许使用 train_test_split 来提高模型性能?
    • 在实践中,该方法返回 selected_features。那我要这样做吗?模型 = LinearRegression().fit(january[filtered_features], january['january_info_colum']); y_preds = model.predict(二月[filtered_features]);计算错误(二月['february_info_colum'],y_preds)
    • 我建议您将此作为 Stackoverflow 的一个新问题提出,关于线性回归的特征选择,我一定会看看!
    猜你喜欢
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 2013-12-26
    • 1970-01-01
    • 2016-02-09
    相关资源
    最近更新 更多