org.apache.commons.math3.linear.SingularMatrixException:matrix是单数

时间:2016-08-04 15:18:44

标签: scala apache-spark cloudera

我正在使用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)

在将系列传递给模型之前,我正在检查系列是否具有相同的值,如果值相同,我没有执行操作。

无论如何,我可以解决这个例外吗?

2 个答案:

答案 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值表明模型更好。