我正在使用cloudera库 com.cloudera.sparkts 对一组值执行时间序列预测。
var model = ARIMA.fitModel(1,0,2,mySeries)
model.forecast(newSeries,10)
执行此操作时,我收到例外情况,如下所示:
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)
在将系列传递给模型之前,我正在检查系列是否具有相同的值,如果值相同,我没有执行操作。
无论如何,我可以解决这个例外吗?
答案 0 :(得分:3)
我认为singular
这里意味着您的系列只有一个值,但解决方案是Matrix is Singular。
换句话说,你的等式(拟合)没有真正的解决方案。
答案 1 :(得分:0)
我试图将各种模型应用到多个系列中,其间,我得到了这个异常,我的执行工作正在破坏。
Cloudera时间序列库中没有可用的功能来检查模型是否适合时间序列集合。所以我通过捕获异常并忽略这些模型来控制此异常。因此,即使某些模型不适合该系列,我也能够通过忽略其他模型使其适合其他模型。
var model1Passed = true
try{
var model1 = ARIMA.fitModel(1,0,1,series)
}
catch{
case _: Throwable => model1Passed = false
}
创建模型后,您可以通过检查AIC(Akaike信息标准)值来检查模型兼容性,如下所示:
val AICval = model1.approxAIC(series)
较小的AIC值表明模型更好。