【发布时间】:2018-04-09 16:40:06
【问题描述】:
我正在处理一个 Java 项目,我必须计算一个多元线性回归,但我希望得到的参数是非负的。是否有现有的商业友好许可库来做这样的事情?我一直在寻找非负最小二乘库,但没有成功。
【问题讨论】:
我正在处理一个 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 卷)。新泽西州恩格尔伍德悬崖:普伦蒂斯霍尔。 [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
【讨论】:
您可以使用 Apache Commons Math,使您的约束成为目标函数的额外成本。请参阅此处的第 14.4 节:http://commons.apache.org/proper/commons-math/userguide/leastsquares.html
【讨论】:
你试过Weka吗?它是 Java 并且在 GNU 通用公共许可证下。它主要是一个用于实验的 GUI 工具,但您也可以将其用作库。它应该有线性回归的实现。
【讨论】:
正如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
【讨论】: