2017-08-28 131 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其中每個索引位置的值等於前一個索引位置的原始值。