2017-08-28 112 views
0

我想用我拥有的数据集做一个天真的预测,我正在努力做一点。天真的天气预报

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 

我基本上有什么是每小时数据,我想比较最后一列有关其表现{0,1}。由于我想比较这个天真的预测与其他日前​​预测因子,我想使用前一天的数据(shift(24))来预测实际的表现。 天真预测:

def naive_forecast(x): 
     return x 
    predictions = list() 
    for x in test_x: 
     yhat = naive_forecast(x) 
     predictions.append(yhat) 

对我来说是很清楚该怎么做映射过程。这意味着如何放弃关于二进制分类测试的观点,我想用24小时前的数据来迭代地将它映射到整个数据集的数据上。 (https://en.wikipedia.org/wiki/Forecasting#Na.C3.AFve_approach

回答

2

如果没有您的原始数据框看起来像什么更清晰的图片,这将是非常难以回答。什么是列和行的值?

我会尽我所能回答你的问题。天真的预测只是前一时期的价值。假设你的原始数据帧的设置类似于

index 'original' 
    time1  x1 
    time2  x2 
    time3  x3 

朴素预测列也只是值在原来的转移到了适当的时候指数。随着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 

移动由有一天,一个简单的例子:

naive_prediction = df.shift(1, freq=datetime.timedelta(days=1)) 
    naive_prediction.columns = ['naive_prediction'] 

返回

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 

现在我们只需要merge这两个dataframes和naive_prediction列将包含每个索引位置的适当值。

final_df = df.merge(naive_prediction, how="outer", left_index=True, right_index=True) 

应返回的

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 

一个final_df其中每个索引位置的值等于前一个索引位置的原始值。