我正在研究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