java - 如何使用NNLS进行非负多元线性回归?

标签 java apache-spark linear-regression apache-spark-mllib

我正在尝试用Java解决非负多元线性回归问题。 我发现了一个求解器类 org.apache.spark.mllib.optimization.NNLS用 Scala 编写。 但是,我不知道如何使用它。

让我困惑的是下面这个方法的接口(interface)看起来很奇怪。 我认为 A 是一个 MxN 矩阵,b 是一个 M vector ,参数 ataatb应该分别是 NxN 矩阵和 N vector 。 然而,ata 的实际类型是 double[]

public static double[] solve(double[] ata, double[] atb, NNLS.Workspace ws)

我搜索了示例代码,但找不到。 谁能给我一个示例代码? 该库是用 Scala 编写的,但如果可能的话我想要 Java 代码。

最佳答案

免责声明我从未使用过NNLS,也不了解非负多元线性回归。

您查看 Spark 2.1.1 的 NNLS,它可以实现您想要的功能,但自从 the latest Spark 2.2.1 marked as private[spark] 以来这并不是可行的方法。 .

private[spark] object NNLS {

更重要的是,从 Spark 2.0 开始,org.apache.spark.mllib 包(包括org.apache.spark.mllib.optimizationNNLS 属于)在 maintenance mode :

The MLlib RDD-based API is now in maintenance mode.

As of Spark 2.0, the RDD-based APIs in the spark.mllib package have entered maintenance mode. The primary Machine Learning API for Spark is now the DataFrame-based API in the spark.ml package.

换句话说,您应该远离该包,尤其是 NNLS

那么还有什么替代方案呢?

你可以看看NNLS的测试,即NNLSSuite在那里你可以找到一些答案。

However, the actual type of ata is double[].

这是一个矩阵,因此元素再次变为 double 。事实上,ata 直接传递到 BLAS 的 dgemv( herehere ),如 LAPACK 中所述。文档:

DGEMV performs one of the matrix-vector operations

y := alpha*A*x + beta*y,   or   y := alpha*A**T*x + beta*y,

where alpha and beta are scalars, x and y are vectors and A is an m by n matrix.

这应该给你足够的答案。

<小时/>

另一个问题是 Spark MLlib 中用于类似 NNLS 计算的推荐方法是什么?

看起来像Spark MLLib的ALS算法uses NNLS 在幕后(这对于机器学习从业者来说可能并不奇怪)。

当 ALS 配置为使用 nonnegative 训练模型时,将使用这部分代码。参数已打开,即 true(默认情况下禁用)。

nonnegative Param for whether to apply nonnegativity constraints.

Default: false

whether to use nonnegative constraint for least squares

我建议您查看 Spark MLlib 的这一部分,以更深入地了解 NNLS 解决非负线性回归问题的用途。

关于java - 如何使用NNLS进行非负多元线性回归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48041254/

相关文章:

java - 如何在另一个方法上调用带有 ActionEvent 参数的方法

java - 为什么在 android studio 中看不到/添加文件 "java class"?

scala - 递归数据框操作

java - Android 不支持 wifi p2p (wifidirect)

JavaFx:如何实现动态 Gridpane?

apache-spark - 在ElasticSearch中将Spark DateType字段索引为日期

amazon-web-services - 配置单元查询抛出错误输入字符串: “__HIVE_D”不是整数

python - 回归运动损失巨大!使用批量输入进行测试?

R-多项式线性模型系数不符合模型的预测值

r - R 和 SPSS 线性模型结果之间的差异