나는 문제로 어려움을 겪고있다. 저는 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's 및 mbq에서였다 창 크기에 대한
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-24 시간의 시간으로 표현 된 데이터 세트를 가지며 변수 x에서만 나타났습니다 (모든 h 열에 해당하는 것은 아닙니다). 몇 분 간 갈 수 있다면 더 정확할까요? 따라서 x 값은 x [15,30,45,60, ..., 1440]와 수평선 1440이됩니다. 그러나 y [4]로 무엇을 의미하는지 모르겠습니다. 예측하고자하는 y 목표 값 (UsageCPU)입니까? 위에서 슬라이딩 윈도우 함수를 사용하여 통합 할 수 있습니까? 아니면 설명대로 다시 코딩해야합니까? – Daniel
데이터 크기가 14440 이상인 경우. 나는 24의 창을 선택했다 (그것은 24 x 값을 포함한다). 그런 다음 첫 번째 반복을 위해 창 24를 가져 와서 25 번째 값을 예측합니다. 25 번째 값이 내 목표가됩니다. 이 후 창에서 25 번째 값을 추가하면서 첫 번째 값을 창에서 이동하고 26 번째 값을 예측합니다. x [15 ...... 1440]이라면 1441 번째 값만 예측할 수 있습니다. 그런 다음 창을 이동 즉 15 드롭, 1441 추가 및 예측 1442.이처럼 많은 시간 단계를 미리 예측할 수 있습니다. – user29120
그리고 물건을 더 분명하게하기 위해. 몇 분이나 몇 시간 동안 당신과 상관 없다. 목표는 대상 (UseCPU)에 창을 정의하는 것입니다. 그런 다음 UsageCPU = [1,2,3,4] 창 크기. 그런 다음 각 반복마다 x로 Usage [1], 대상으로 Usage [5]와 같은 입력/출력 쌍을 얻습니다. 이것은 내가 앞으로 5 단계를 예측한다는 것을 의미합니다. 그런 다음 창을 옮깁니다. Usage [1]을 버리고 Usage [2]를 사용하고 Uage [6]를 예측하십시오. 각 반복에서 x 값을 사용하면 예측을 돕기 위해 다른 정보를 추가합니다. 예 x [1, 시간, 월, 연도, uageMemory, 지연] ---> – user29120