繁体   English   中英

org.apache.commons.math3.linear.SingularMatrixException:矩阵是奇异的

[英]org.apache.commons.math3.linear.SingularMatrixException: matrix is singular

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

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

无论如何,我可以解决此异常吗?

我不认为这里的singular意味着您的序列只有一个值,但是解决方案Matrix是Singular

换句话说,您的方程式(拟合)没有实际解。

我试图将各种模型应用到多个系列之间,在这期间,我遇到了这个异常,执行中断了。

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的值越小,表示模型越好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM