2016-08-04 8 views
1

clouderaライブラリcom.cloudera.sparktsを使用して、値のセットの時系列予測を実行しています。org.apache.commons.math3.linear.SingularMatrixException:行列が特異です

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

singularここでは、あなたのシリーズには1つの値があることを意味しますが、その解決策はMatrix is Singularです。

つまり、方程式(フィッティング)には実際の解決策はありません。

+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) 

小さめ。

関連する問題