预测和比较不同月份的数据
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
无需任何参数即可工作,因此没有真正需要拆分或打乱任何内容。
现在让我向您展示您的代码的作用,以及如果我们将您想要实现的目标转化为代码会是什么样子:
你在这里做什么
- 删除一月份的所有目标值:
january.drop('january_info_colum', axis=1, inplace=True)
- 将二月目标合并到一月特征:
df = pd.merge(january, february[['ID', 'february_info_colum']],
how="inner", on=["ID", "ID"])
- 将此数据集拆分为 80% train/20% 测试:
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))
与您描述的目标相对应的内容
- 训练一月的特征和目标:
model = LinearRegression().fit(january.drop('january_info_colum', axis=1), january['january_info_colum'])
- 预测 2 月的特征:
y_preds = model.predict(february.drop('february_info_colum', axis=1))
- 打印指标
print('RMSE:', metrics.mean_squared_error(february['february_info_colum'], y_preds, squared=False))
我正在对结束于 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
无需任何参数即可工作,因此没有真正需要拆分或打乱任何内容。
现在让我向您展示您的代码的作用,以及如果我们将您想要实现的目标转化为代码会是什么样子:
你在这里做什么
- 删除一月份的所有目标值:
january.drop('january_info_colum', axis=1, inplace=True)
- 将二月目标合并到一月特征:
df = pd.merge(january, february[['ID', 'february_info_colum']],
how="inner", on=["ID", "ID"])
- 将此数据集拆分为 80% train/20% 测试:
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))
与您描述的目标相对应的内容
- 训练一月的特征和目标:
model = LinearRegression().fit(january.drop('january_info_colum', axis=1), january['january_info_colum'])
- 预测 2 月的特征:
y_preds = model.predict(february.drop('february_info_colum', axis=1))
- 打印指标
print('RMSE:', metrics.mean_squared_error(february['february_info_colum'], y_preds, squared=False))