我正在为图像处理编写一个多元回归(类似于线性系统)算法。考虑到我的图像生成了“高度*宽度”的数据矩阵,我最终可能会得到非常大的结构。
多元回归算法是:
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内存,但这还不够。
有什么建议吗?