我试图帮助一位试图在信号中使用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.
有什么方法可以解决这个问题吗?或者我做错了什么?
答案 0 :(得分:3)
此错误通常意味着您传递了一个无法解决的矩阵。
所以实际上它与向量的长度无关
检查INFO代码:netlib.org/lapack/explore-html/d3/d62/dppsv_8f.html:A的顺序i的主要次要不是肯定的,因此无法完成分解,并且解决方案已经未计算
答案 1 :(得分:1)
使用线性回归的求解器参数可以解决此问题。
val lf=new LinearRegression().setSolver("l-bfgs")
默认情况下是正常的。