我正在研究Java项目,必须计算多元线性回归,但是我希望得到的参数为非负数。是否存在现有的具有商业友好许可的图书馆来执行此操作?我一直在寻找非负最小二乘库,但没有成功。

最佳答案

好吧,我找不到任何纯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卷)。新泽西州恩格尔伍德悬崖(Englewood Cliffs):Prentice-hall。
[2] Rasmus Bro et Sijmen De Jong:快速的非负约束最小二乘
算法。化学计量杂志,1997年11(5):393-401。http://www.researchgate.net/publication/230554373_A_fast_non-negativity-constrained_least_squares_algorithm/file/79e41501a40da0224e.pdf
[3] Chen Donghui等人Robert J Plemmons:数值分析中的非负约束。在“数值分析的诞生研讨会”上,第109-140页,2009年。http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.157.9203&rep=rep1&type=pdf

10-07 13:03