gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:48:32 24 4
gpt4 key购买 nike

我正在尝试用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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com