Jvm堆被多重回归算法炸毁

时间:2014-11-05 01:18:17

标签: java algorithm matrix jvm heap

我正在为图像处理编写一个多元回归(类似于线性系统)算法。考虑到我的图像生成了“高度*宽度”的数据矩阵,我最终可能会得到非常大的结构。

多元回归算法是:

x = inv(A'*A)*A'*b

其中X是系数的数组,A是矩阵,B是矢量。

我的实现是:

public RealVector multipleRegression(double[][] coordinates, double[] data){
     RealMatrix m1 = new Array2DRowRealMatrix(coordinates);
     RealVector v1 = new ArrayRealVector(data);

     // A = (m1'*m1)
     RealMatrix A = m1.multiply(m1.transpose());

     // B = A^-1 -> Matrix inversion
     RealMatrix B = new Array2DRowRealMatrix();
     B = A.power(-1);

     // C = A*B -> inv(A'*A)*A
     RealMatrix C = new Array2DRowRealMatrix();
     C = A.multiply(B);

     // result = C*b -> result holds my coeficients
     RealVector result = new ArrayRealVector();
     DecompositionSolver solver = new LUDecomposition(C).getSolver();
     result = solver.solve(v1);

     return result;
 }

我已经尝试删除除RealMatrix A = m1.multiply(m1.transpose());之外的所有内容,但这也无法正常工作。鉴于此,我尝试在乘法运算之前进行转置操作,并且堆也被吹了。

我尝试为我的JVM分配14GB内存,但这还不够。

有什么建议吗?

0 个答案:

没有答案