Java非负多元线性回归库

时间:2013-11-26 11:12:22

标签: linear-regression java

我正在研究Java项目,我必须计算多元线性回归,但我希望得到的参数是非负的。是否有一个现有的商业友好许可库来做这样的事情?我一直在寻找Non-Negative Least Squares libs,但没有成功。

4 个答案:

答案 0 :(得分:2)

好吧,我找不到任何纯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.,&amp; Hanson,R。J.(1974)。解决最小二乘问题(第161卷)。恩格尔伍德悬崖,新泽西州:Prentice-hall。 [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和Robert J Plemmons:数值分析中的非负性约束。关于数值分析诞生的专题讨论会,第109-140页,2009年。http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.157.9203&rep=rep1&type=pdf

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

正如George Foreman指出你可以使用apache commons math。 特别是存在对象 OLSMultipleLinearRegression ,其提供用于执行多元回归分析的方法。

以下是一些有关如何操作的代码。

OLSMultipleLinearRegression ols = new OLSMultipleLinearRegression();

double [] data = new double [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