2016-05-31 6 views
3

LinearRegressionを信号に使用しようとしている友人を手助けしようとしていました。データには2万のレコードと2つの列(時間とパルス)が含まれており、Databricksのコミュニティで実行しています。私のアプローチはかなりシンプルで偏っていますが、私はもっと人工的な機能を追加しようとしました。このために、このシンプルで便利な機能を作成しました。LinearRegressionの使用中にアサーションエラーが発生しました

def featuresCreator(x, grad, acc): 
    if (grad > 0): 
    return [x ** grad] 
    else: 
    return [x ** grad] + featuresCreator(x, grad - acc, acc) 

featuresUDF = udf(lambda x, grad, acc: DenseVector(featuresCreator(x, grad, acc)), VectorUDT()) 

私は機能に電力を供給し、数回と値の範囲内にすることはオーバーフィット回帰に私を助けるだろうと思った、これは私がこれを実行した理由です。

xf = df.select(featuresUDF(col("tiempo"), lit(12), lit(0.1)).alias("features"), col(" pulso").alias("label")) 

すべてがDataFrameのみ2列、ラベルの特徴の一つと他を持っていた大丈夫でした。この問題は、データの上にLinearRegressionを使用しようとすると後で発生します。

lr = LinearRegression().setFeaturesCol("features").setLabelCol("label").setMaxIter(200) 
lrm = lr.fit(xf) 

ここでは、プログラムが爆発し、以下の例外が示されています。

java.lang.AssertionError: assertion failed: lapack.dppsv returned 5.

これを解決する方法はありますか?または私は何か間違っているのですか?

+1

このエラーは通常、解決できない行列を渡したことを意味します。 – zero323

+0

ベクトルの長さには関係ありませんか? –

+1

いいえINFOコードを確認してください:http://www.netlib.org/lapack/explore-html/d3/d62/dppsv_8f.html:Aの次数iの先頭が ではないので、分解はできませんでした。 が完了し、解決策が計算されていません_ – zero323

答えて

3

このエラーは通常、解決できない行列を渡したことを意味します。

だから、実際には、ベクトルの長さ

Check INFO codes: netlib.org/lapack/explore-html/d3/d62/dppsv_8f.html: the leading minor of order i of A is not positive definite, so the factorization could not be completed, and the solution has not been computed

1

に関連していないこの問題は、線形回帰のためのソルバーパラメータを使用して解決することができます。

val lf=new LinearRegression().setSolver("l-bfgs") 

デフォルトでは正常です。

関連する問題