使用LinearRegression时断言错误

时间:2016-05-31 19:08:52

标签: python-2.7 apache-spark pyspark linear-regression

我试图帮助一位试图在信号中使用LinearRegression的朋友。数据包含20,000条记录和两列(时间和脉冲),我在Databricks社区中运行它。我的方法非常简单且有偏见我知道,我试图添加更多人工功能,为此我创建了这个简单但有用的功能。

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:断言失败:lapack.dppsv返回5.

有什么方法可以解决这个问题吗?或者我做错了什么?

2 个答案:

答案 0 :(得分:3)

此错误通常意味着您传递了一个无法解决的矩阵。

所以实际上它与向量的长度无关

  

检查INFO代码:netlib.org/lapack/explore-html/d3/d62/dppsv_8f.html:A的顺序i的主要次要不是肯定的,因此无法完成分解,并且解决方案已经未计算

答案 1 :(得分:1)

使用线性回归的求解器参数可以解决此问题。

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

默认情况下是正常的。