2016-08-04 3 views
1

cloudera 라이브러리 com.cloudera.sparkts을 사용하여 값 집합에 대한 시계열 예측을 수행하고 있습니다. 이 작업을 수행하는 동안 아래와 같이org.apache.commons.math3.linear.SingularMatrixException : 매트릭스가 단수

var model = ARIMA.fitModel(1,0,2,mySeries) 
model.forecast(newSeries,10) 

, I 예외를 얻고있다 : 모델에 직렬로 전달하기 전에

ERROR Executor: Managed memory leak detected; size = 5255488 bytes, TID = 12 
ERROR Executor: Exception in task 0.0 in stage 17.0 (TID 12) 
org.apache.commons.math3.linear.SingularMatrixException: matrix is singular 
at org.apache.commons.math3.linear.QRDecomposition$Solver.solve(QRDecomposition.java:354) 

, I는 일련의 동일한 값을 구비하고 있는지 여부를 검사하고 값하다면 동일하다, 나는 수술을 수행하지 않고있다.

어쨌든 나는이 예외를 해결할 수 있습니까?

답변

2

여기서는 singular은 시리즈에 하나의 값이 있음을 의미하지만 그 해결책은 Matrix is Singular입니다.

즉, 방정식 (fitting)은 실제 해결책이 없습니다.

+0

모델이 시리즈에서 평가되는 첫 번째 명령문 자체는 실행 중에 손상됩니다. 어쨌든 시리즈를 확인하여이를 피할 수 있습니까? – rvp

+0

@rvp 저는'ARIMA'에 익숙하지 않습니다. 계열 길이를 더 큰 숫자로 제한하려고하거나 ARIMA.isModelFittable'과 비슷한 메서드를 검색하려고합니다. –

0

일련의 여러 모델에 여러 모델을 적용하려고 시도했지만이 예외가 발생하고 실행이 중단되었습니다.

모델이 시계열 컬렉션에 적합 할 수 있는지 확인하기 위해 Cloudera 시계열 라이브러리에서 사용할 수있는 기능이 없습니다. 그래서 예외를 잡아 내고 그 모델을 무시함으로써이 예외를 제어했습니다. 그래서 일부 모델이 시리즈에 맞지 않더라도, 나는 깨진 모델을 무시함으로써 다른 모델에 적합하게 만들 수있었습니다. 당신이 모델을 작성하면 아래 그림과 같이

var model1Passed = true 
try{ 
    var model1 = ARIMA.fitModel(1,0,1,series) 
    } 
catch{ 
    case _: Throwable => model1Passed = false 
    } 

, 당신은 AIC (아카 이케 정보 기준) 값을 확인하여 모델의 호환성을 확인할 수 있습니다 AIC의

val AICval = model1.approxAIC(series) 

작은 값이 더 나은 모델을 나타냅니다.

관련 문제