预测和比较不同月份的数据

Predict And Compare Data From Different Months

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

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

对于我来说,我是否需要将目标列(从二月数据框)合并到一月数据框和运行这样的模型:

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 月平均值吗? 这是解决这个问题的正确方法吗?有没有更简单或更有效的方法? 非常感谢任何帮助!

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

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

此处,LinearRegression 无需任何参数即可工作,因此没有真正需要拆分或打乱任何内容。

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

你在这里做什么

  1. 删除一月份的所有目标值:
january.drop('january_info_colum', axis=1, inplace=True)
  1. 将二月目标合并到一月特征:
df = pd.merge(january, february[['ID', 'february_info_colum']], 
              how="inner", on=["ID", "ID"])
  1. 将此数据集拆分为 80% train/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. 训练一月的特征和目标:
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))