2017-05-20 180 views
1

我試圖找出如何處理我的預測問題,我不確定我的理解是否正確,所以如果有人能幫助我,這將是非常好的。首先,我的目標是預測迴歸的時間序列。除了使用ARIMA模型或其他啓發式車型我想專注於機器學習技術,如迴歸,如隨機森林迴歸,K近鄰迴歸等。這裏是數據集的概述:迴歸 - 樣本外預測

Timestamp   UsageCPU  UsageMemory Indicator Delay 
2014-01-03 21:50:00 3123   1231   1  123 
2014-01-03 22:00:00 5123   2355   1  322 
2014-01-03 22:10:00 3121   1233   2  321 
2014-01-03 22:20:00 2111   1234   2  211 
2014-01-03 22:30:00 1000   2222   2   0 
2014-01-03 22:40:00 4754   1599   1   0 

的時間戳以10分鐘爲單位增加,我想用自變量UsageMemory,Indicator等預測獨立變量UsageCPU。此時我將解釋我對預測部分的一般知識。所以對於預測來說,有必要將數據集分成訓練集,驗證集和測試集。爲此,我的數據集包含2個整週,分爲60%培訓,20%驗證和20%測試。這意味着對於訓練集我有第一個8天包括和驗證和我每3天的測試集。之後,我可以在SparkR中訓練模型(設置不重要)。

model <- spark.randomForest(train, UsageMemory ~ UsageMemory, Indicator, Delay, 
         type = "regression", maxDepth = 30, maxBins = 50, numTrees=50, 
         impurity="variance", featureSubsetStrategy="all") 

所以在這之後,我可以確認與驗證組的結果,並計算RMSE看到模型和點在我的模型構建部分調整的精度。如果完成我可以預測的測試數據集:

predictions <- predict(model, test) 

因此預測工作正常,但這只是一個樣本內的預測,不能用於預測例如第二天。根據我的理解,樣本內只能用於預測數據集中的數據,而不能預測未來可能發生的值。因此,真的很想預測第二天或僅接下來的10分鐘/ 1小時,這隻有通過樣本外預測才能成功。我也對隨機森林的預測值進行了類似的嘗試(滾動迴歸),但在我的情況中,滾動迴歸僅用於評估不同迴歸因子對不同參數組合的表現。所以這是我的理解沒有樣本外預測。

t <- bind(prediction, RollingRegression3 = rollApply(prediction, fun=function(x) mean(UsageCPU), window=6, align='right')) 

所以,在我的理解我需要的東西(也許滯後值?),建模過程開始之前。我還閱讀了很多不同的論文和書籍,但沒有清楚的方法來解決問題,關鍵是什麼。只有t + 1,t + n這樣的東西,但現在我甚至不知道該怎麼做。如果有人能夠幫助我,那真的很不錯,因爲我從三個月起就試圖解決這個問題,謝謝。

+0

只是爲了澄清我的理解:你建立了一個隨機森林模型,但你不知道如何使用它來預測未來的CPU使用率,對吧?這可能與「樣本外」數據無關,如果我錯了,請糾正我。因爲「樣本外」數據是未用於模型訓練的數據,與未來(未知)數據相反? –

+0

是的,我想用我的模型來預測下一個12/24小時的例子(樣本中)。正如我所提到的,數據集分爲訓練,驗證和測試集,但對我而言,只能預測此測試和驗證集。我的目標是將上週的數據納入預測,並在此基礎上預測未來12/24小時。哦,好吧,對不起,我認爲對於我而言,「樣本外」這個詞有一個誤解。 – Daniel

+0

好的,有一些想法可能不是解決方案:爲了預測接下來的12/24小時,隨機森林模型需要知道在接下來的12/24小時內UsageMemory,Indicator和Delay的值,而我們沒有。因此,您可以嘗試構建其他模型來預測這些變量,然後預測CPU使用情況。就我個人而言,我想用時間序列來解決這類問題。 ML不是解決所有問題的瑞士刀。 –

回答

0

讓我們看看我的問題是否正確。我想,給定一個時間窗口,例如UsageCPU,UsageMemory,Indicator和Delay的最後一次觀察(一天),你想要預測UsageCPU的'n'個下一個觀察值。你可以用隨機森林做這樣的事情的一種方法是爲每個你想要預測的下一次觀察分配一個模型。所以,如果你想預測10個UsageCPU觀察值,你應該訓練10個隨機森林模型。

使用我開始的例子,你可以將你擁有的數據分成154個觀測值。在每個中,您將使用前144個觀察值來預測UsageCPU的最後10個值。有很多方法可以使用特徵工程從這些前144個觀測值中提取信息,以便用您的模型進行訓練。對每個變量均值,每個變量的最後一次觀察值,每個變量的全局平均值。因此,對於每個塊,您將得到一個包含一堆預測變量和10個目標值的向量。

綁定您爲每個塊獲得的矢量,並且您將獲得一個矩陣,其中第一列是預測變量,最後10列是目標。用n個預測變量列和1個目標列訓練每個隨機森林。現在,您可以將模型應用於從包含144個觀察值的任何數據塊中提取的要素。爲目標第1列訓練的模型將「預測」前一個觀測值,爲目標第2列訓練的模型將「預測」兩個觀測值,爲目標第3列訓練的模型將「預測」前面三個觀測值...

+0

嗯,我不知道這應該如何工作,因爲現在我的訓練集包含1008個觀察值(1周)。根據我的理解,用於訓練的數據越多,獲得模型的準確性越高。按照你所說的將數據分割爲154個觀測數據將是相同的輸出,但只有一天。用10次隨機森林迴歸做這10次我會得到類似的結果,而且由於少量的訓練數據,準確度也很差。也許我理解你的解決方案是錯誤的,但在我看來,它是不同大小訓練長度的相同方法。 – Daniel