2015-09-09 75 views
2

對於時間序列數據集,我想做一些分析並創建預測模型。通常,我們將數據(通過整個數據集中的隨機採樣)分成訓練集和測試集,並使用具有隨機森林功能的訓練集。並保持測試部分檢查模型的行爲。將隨機森林用於時間序列數據集

但是,我被告知不可能通過對時間序列數據進行隨機採樣來分割數據。

如果有人解釋如何將數據分割爲時間序列數據的訓練和測試,我將不勝感激。或者如果有任何替代做時間序列隨機森林。 Regards

回答

2

我們生活在一個「未來到過去的因果關係」只出現在酷科幻電影中的世界。因此,建模時間序列時,我們希望避免用未來事件解釋過去的事件。此外,我們想驗證我們的模型,嚴格訓練過去的事件,可以解釋未來的事件。

使用RF滾動建模時間序列T.對於第t天,值T [t]是目標,值T [t-k]其中k = {1,2,...,h},其中h是過去的水平線將用於形成特徵。對於非平穩時間序列,T被轉換爲例如相對變化Trel。 =(T [t + 1] -T [t])/ T [t]。

爲了評估性能,我建議檢查RF的袋外交叉驗證度量。要知道,有一些缺陷可能會使得過於樂觀這項措施:

  1. 未知的未來,以過去的污染 - 莫名其妙的滾動出現故障,使用未來事件的模型訓練集內解釋一樣的未來。非獨立抽樣:如果您要提前預測的時間間隔短於時間間隔,則計算相對變化,您的抽樣不是獨立的。

  2. 其他可能的錯誤,我不知道的還

最後,每個人都可以對上面有一些潛在的方法錯誤。要檢查沒有發生,你需要通過反向測試來驗證你的模型。哪裏每天都是由一個嚴格訓練過去事件的模型預測的。

當OOB-CV和反向測試瘋狂地不同意時,這可能暗示了代碼中的一些錯誤。

要進行回溯測試,請在T [t-1到t-traindays]上滾動。對此訓練數據進行建模並預測T [t]。然後將t加1,t ++,然後重複。

爲了加速你可能只訓練你的模型一次或在每一個n的增量t。

0
閱讀銷售文件
Sales<-read.csv("Sales.csv") 
查找訓練集的長度。
train_len=round(nrow(Sales)*0.8) 
test_len=nrow(Sales) 
將您的數據分割爲訓練和測試設置在這裏我已經考慮過80-20分割你可以改變它。確保您的數據按升序排序。 訓練集
training<-slice(SubSales,1:train_len) 
測試集
testing<-slice(SubSales,train_len+1:test_len)