【问题标题】:Java Non-negative multiple linear regression libraryJava 非负多元线性回归库
【发布时间】:2018-04-09 16:40:06
【问题描述】:

我正在处理一个 Java 项目,我必须计算一个多元线性回归,但我希望得到的参数是非负的。是否有现有的商业友好许可库来做这样的事情?我一直在寻找非负最小二乘库,但没有成功。

【问题讨论】:

    标签: linear-regression java


    【解决方案1】:

    好吧,我找不到任何纯 Java 库,所以我根据 [1] 的文章自己构建了它,可以在 [2] 和 [3] 中找到。我给出算法:

    P, R 是主动集和被动集。 t() 是转置

    问题是在x>0条件下求解Ax = b

    P=null
    R = {1,2,...,m}
    x = 0
    w = t(A)*(b-A*x)
    while R<>null and max{wi|i in R}>0 do:
        j = argmax{wi|i in R}
        P = P U {j}
        R = R\{j}
        s[P] = invert[t(A[P])A[P]]t(A[P])b
        while sp<=0 do:
            a = -min{xi/(di-xi)|i in P and di<0}
            x = x + a*s -x
            update(P)
            update(R)
            sP = invert[t(A[P])A[P]]t(A[P])b
            sR = 0
        x = s
        w = t(A)*(b-A*x)
    return x
    

    对于其他定义,我强烈建议阅读在线论文 [2] 和 [3](请参阅下面的链接;))

    [1] Lawson, C. L. 和 Hanson, R. J. (1974)。解决最小二乘问题(第 161 卷)。新泽西州恩格尔伍德悬崖:普伦蒂斯霍尔。 [2] Rasmus Bro et Sijmen De Jong:一种快速的非负约束最小二乘法 算法。化学计量学杂志,11(5):393–401,1997。http://www.researchgate.net/publication/230554373_A_fast_non-negativity-constrained_least_squares_algorithm/file/79e41501a40da0224e.pdf [3] Donghui Chen et Robert J Plemmons:数值分析中的非负约束。在数值分析的诞生研讨会上,第 109-140 页,2009 年。http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.157.9203&rep=rep1&type=pdf

    【讨论】:

      【解决方案2】:

      您可以使用 Apache Commons Math,使您的约束成为目标函数的额外成本。请参阅此处的第 14.4 节:http://commons.apache.org/proper/commons-math/userguide/leastsquares.html

      【讨论】:

        【解决方案3】:

        你试过Weka吗?它是 Java 并且在 GNU 通用公共许可证下。它主要是一个用于实验的 GUI 工具,但您也可以将其用作库。它应该有线性回归的实现。

        【讨论】:

        • 感谢您的回答,但 Weka 似乎没有我需要的功能。我没有找到非负线性回归,也没有找到多元线性回归。也许我错过了什么?
        • 不知道“物流”是什么意思,但是weka.sourceforge.net/doc.packages/supervisedAttributeScaling/…呢?
        • 非常感谢。逻辑回归与线性回归不同,实际上相差甚远。它实际上是一个二元预测器。
        【解决方案4】:

        正如George Foreman 指出的那样,您可以使用 apache commons math。 特别是对象 OLSMultipleLinearRegression,它提供了执行多元回归分析的方法。

        这里有一些关于如何做到这一点的代码。

        OLSMultipleLinearRegression ols = new OLSMultipleLinearRegression();

        双[]数据=新双[75];

        int numberOfObservations = 25;

        int numberOfIndependentVariables = 3;

            try {
                ols.newSampleData(data, numberOfObservations, numberOfIndependentVariables);
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
                return;
            }
        

        这里是整个 github 项目,您可以从中下载有关如何在 Java 中使用多元回归的工作示例:https://github.com/tekrar/MultRegressionInJava

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-06-10
          • 1970-01-01
          • 2010-11-23
          • 2016-12-19
          • 1970-01-01
          • 2013-07-17
          • 2014-05-20
          相关资源
          最近更新 更多