inn*_*neb 1 python statistics pandas
我想用我拥有的数据集做一个朴素的预测,但我正在努力这样做。
values = DataFrame(dataset.iloc[:, -1])
Y_naive = pd.concat([values.shift(24), values], axis=1)
Y_naive.columns = ['t', 't+1']
x = Y_naive.values
Run Code Online (Sandbox Code Playgroud)
我基本上拥有的是每小时数据,我想在其中比较关于其表现形式 {0,1} 的最后一列。由于我想将此天真的预测与其他日前预测器进行比较,因此我想使用前一天 (shift(24)) 的数据来预测实际表现。天真预测:
def naive_forecast(x):
return x
predictions = list()
for x in test_x:
yhat = naive_forecast(x)
predictions.append(yhat)
Run Code Online (Sandbox Code Playgroud)
对我来说,如何进行映射过程非常不清楚。这意味着如何放弃对于二进制分类测试我想使用 24 小时前的数据将其映射到现在迭代整个数据集的数据的论点。( https://en.wikipedia.org/wiki/Forecasting#Na.C3.AFve_approach )
如果没有更清晰地了解原始数据框的外观,这将很难回答。值的列和行是什么?
我会尽量回答你的问题。一个幼稚的预测只是前一时期的价值。假设您的原始数据框设置为
index 'original'
time1 x1
time2 x2
time3 x3
Run Code Online (Sandbox Code Playgroud)
朴素的预测列只是将原始值转移到适当的时间索引。用一个简单的 df 示例作为
index 'original'
2017-08-19 17:49:08.102868 0
2017-08-20 17:49:08.109869 1
2017-08-21 17:49:08.109869 2
2017-08-22 17:49:08.109869 3
Run Code Online (Sandbox Code Playgroud)
一天一换:
naive_prediction = df.shift(1, freq=datetime.timedelta(days=1))
naive_prediction.columns = ['naive_prediction']
Run Code Online (Sandbox Code Playgroud)
退货
index 'naive_prediction'
2017-08-20 17:49:08.102868 0
2017-08-21 17:49:08.109869 1
2017-08-22 17:49:08.109869 2
2017-08-23 17:49:08.109869 3
Run Code Online (Sandbox Code Playgroud)
现在我们只需要合并这两个数据帧,naive_prediction 列将包含每个索引位置的适当值。
final_df = df.merge(naive_prediction, how="outer", left_index=True, right_index=True)
Run Code Online (Sandbox Code Playgroud)
哪个应该返回一个 final_df
index 'original' 'naive_prediction'
2017-08-19 17:49:08.102868 0 NaN
2017-08-20 17:49:08.109869 1 0
2017-08-21 17:49:08.109869 2 1
2017-08-22 17:49:08.109869 3 2
2017-08-23 17:49:08.109869 NaN 3
Run Code Online (Sandbox Code Playgroud)
其中每个索引位置的值等于前一个索引位置的原始值。