2017-05-02 9 views
3

나는 문제로 어려움을 겪고있다. 저는 SparkR을 사용하여 시계열 예측을하고 있지만이 시나리오는 일반 R 환경으로도 이전 될 수 있습니다. ARIMA 모델을 사용하는 대신 무작위 포레스트 회귀 분석과 같은 회귀 모델을 사용하여 하루 앞당겨 짐을 예측하고 싶습니다. 또한 다른 매개 변수 조합과 관련하여 회귀 분석기의 성능을 평가하는 슬라이딩 윈도우 접근법에 대해서도 읽었습니다. 그래서 내 데이터 세트의 구조의 예입니다 이해 효율적으로 활용하려면 다음,일기 예보 예측 모델 - 슬라이딩 윈도우

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 

다음 단계는 기능을 추출하고 읽을 수있는 형식으로 그들을 변환하는 것입니다 회귀의 어떤 종류를 사용하려면를 때문에 이러한 회귀 할 수 없습니다 타임 스탬프 읽기 :

Year Month Day Hour Minute UsageCPU UsageMemory Indicator Delay 
2014 1  3 21  50  3123  1231   1  123 
2014 1  3 22  00  5123  2355   1  322 
2014 1  3 22  10  3121  1233   2  321 
2114 1  3 22  20  2111  1234   2  211 

다음 단계는 모델에 대한 교육 및 테스트 세트를 만드는 것입니다.

model <- spark.randomForest(train, UsageCPU ~ ., type = "regression", maxDepth = 5, maxBins = 16) 
predictions <- predict(model, test) 

그래서 나는이 모든 단계를 알고 실제와 예측 데이터를 플로팅하여 :

trainTest <-randomSplit(SparkDF,c(0.7,0.3), seed=42) 
train <- trainTest[[1]] 
test <- trainTest[[2]] 

그런 다음 모델 + 예측합니다 (랜덤 포레스트의 설정이 우선 관련이 없습니다)를 만들 수 있습니다 데이터가 상당히 좋아 보인다. 그러나이 회귀 모델은 역동적이지 않습니다. 즉 하루 앞당길 수는 없습니다. UsageCPU, UsageMemory 등의 기능이 없기 때문에 역사적인 가치를 다음 날로 예측하고 싶습니다. 슬라이딩 윈도우 접근 방식은 처음에 언급했듯이 여기에서 작동 할 수 있지만 적용 방법을 잘 모르겠습니다 (전체 데이터 세트에 대해서만 교육 또는 테스트 세트에서만).

이 구현은 shabbychef'smbq에서였다 창 크기에 대한

slideMean<-function(x,windowsize=3,slide=2){ 
idx1<-seq(1,length(x),by=slide); 
idx1+windowsize->idx2; 
idx2[idx2>(length(x)+1)]<-length(x)+1; 
c(0,cumsum(x))->cx; 
return((cx[idx2]-cx[idx1])/windowsize); 
} 

마지막 질문을 다룬다. 다음 날을시 (00,01,02,03 ...)로 예측하고 싶지만 시간 소인의 간격은 10 분이므로 계산시 창 크기는 144 (10 * 60 * 24) 여야합니다./10).

누군가 나를 도울 수 있다면 너무 좋을 것입니다. 감사!

답변

1

신경망을 사용한 시계열 예측에서도 동일한 문제가있었습니다. 나는 많은 모델을 구현했으며 가장 잘 작동하는 것은 슬라이딩 윈도우와 신경망을 결합한 것입니다. 나는 또한 현장의 다른 연구원으로부터 확인을 받았다. 이것으로부터 우리는 당신이 1 일 앞당겨 (24 개의 수평선) 한 번 단계를 예측하기를 원한다면 훈련이 시스템에 요구 될 것이라고 결론을 짓습니다. 다음과 같이 진행했습니다.

1. We had a sliding window of 24 hours. e.g lets use [1,2,3] here 
2. Then use ML model to predict the [4]. Meaning use value 4 as target. 
# As illustration we had 
x = [1,2,3] 
# then set target as 
y=[4]. 
# We had a function that returns the x=[1,2,3] and y =[4] and 
# shift the window in the next training step. 
3.To the: 
x =[1,2,3] 
we can add further features that are important to the model. 
x=[1,2,3,feature_x] 

4. Then we minimise error and shift the window to have: 
x = [2,3,4,feature_x] and y = [5]. 
5. You could also predict two values ahead. e.g [4,5] . 
6. Use a list to collect output and plot 
7. Make prediction after the training. 
+0

멋진 답변입니다. 올바른 해석을위한 몇 가지 질문은, 귀하의 경우, 1-24 시간의 시간으로 표현 된 데이터 세트를 가지며 변수 x에서만 나타났습니다 (모든 h 열에 해당하는 것은 아닙니다). 몇 분 간 갈 수 있다면 더 정확할까요? 따라서 x 값은 x [15,30,45,60, ..., 1440]와 수평선 1440이됩니다. 그러나 y [4]로 무엇을 의미하는지 모르겠습니다. 예측하고자하는 y 목표 값 (UsageCPU)입니까? 위에서 슬라이딩 윈도우 함수를 사용하여 통합 할 수 있습니까? 아니면 설명대로 다시 코딩해야합니까? – Daniel

+0

데이터 크기가 14440 이상인 경우. 나는 24의 창을 선택했다 (그것은 24 x 값을 포함한다). 그런 다음 첫 번째 반복을 위해 창 24를 가져 와서 25 번째 값을 예측합니다. 25 번째 값이 내 목표가됩니다. 이 후 창에서 25 번째 값을 추가하면서 첫 번째 값을 창에서 이동하고 26 번째 값을 예측합니다. x [15 ...... 1440]이라면 1441 번째 값만 예측할 수 있습니다. 그런 다음 창을 이동 즉 15 드롭, 1441 추가 및 예측 1442.이처럼 많은 시간 단계를 미리 예측할 수 있습니다. – user29120

+0

그리고 물건을 더 분명하게하기 위해. 몇 분이나 몇 시간 동안 당신과 상관 없다. 목표는 대상 (UseCPU)에 창을 정의하는 것입니다. 그런 다음 UsageCPU = [1,2,3,4] 창 크기. 그런 다음 각 반복마다 x로 Usage [1], 대상으로 Usage [5]와 같은 입력/출력 쌍을 얻습니다. 이것은 내가 앞으로 5 단계를 예측한다는 것을 의미합니다. 그런 다음 창을 옮깁니다. Usage [1]을 버리고 Usage [2]를 사용하고 Uage [6]를 예측하십시오. 각 반복에서 x 값을 사용하면 예측을 돕기 위해 다른 정보를 추가합니다. 예 x [1, 시간, 월, 연도, uageMemory, 지연] ---> – user29120