@Override public void learnBasisNorm(Matrix data) { ThinSingularValueDecomposition svd = new ThinSingularValueDecomposition(data, ndims); basis = svd.Vt.transpose(); eigenvalues = svd.S; double normEig = 1.0 / (data.getRowDimension() - 1); for (int i=0; i<eigenvalues.length; i++) eigenvalues[i] = eigenvalues[i] * eigenvalues[i] * normEig; } }
/** * Reduce the rank of the input matrix using the thin SVD to get a lower * rank least-squares estimate of the input. * * @param m * matrix to reduce the rank of * @param rank * the desired rank * @return the rank-reduced matrix */ public static Matrix reduceRank(Matrix m, int rank) { if (rank > Math.min(m.getColumnDimension(), m.getRowDimension())) { return m; } final ThinSingularValueDecomposition t = new ThinSingularValueDecomposition(m, rank); return t.U.times(t.getSmatrix()).times(t.Vt); } }
private void factorise(Matrix w) { final ThinSingularValueDecomposition svd = new ThinSingularValueDecomposition(w, 3); final Matrix s_sqrt = svd.getSmatrixSqrt(); this.R = svd.U.times(s_sqrt); this.S = s_sqrt.times(svd.Vt); }
S = reverse(sv.value); U = vectorArrayToMatrix(sv.vectorLeft, false); Vt = vectorArrayToMatrix(sv.vectorRight, true);
public static void main(String[] args) { final Matrix m = new Matrix(new double[][] { { 0.5, 0.4 }, { 0.1, 0.7 } }); final GD_SVD2 gdsvd = new GD_SVD2(m, 2); // m.print(5, 5); // gdsvd.UprimeM.print(5, 5); // gdsvd.UprimeM.times(gdsvd.VprimeM.transpose()).print(5, 5); // gdsvd.UM.times(gdsvd.SM.times(gdsvd.VM)).print(5, 5); // gdsvd.UM.print(5, 5); gdsvd.SM.print(5, 5); // gdsvd.VM.print(5, 5); final ThinSingularValueDecomposition tsvd = new ThinSingularValueDecomposition(m, 2); // tsvd.U.print(5, 5); System.out.println(Arrays.toString(tsvd.S)); } }
private void factorise(Matrix w) { final ThinSingularValueDecomposition svd = new ThinSingularValueDecomposition(w, 3); final Matrix s_sqrt = svd.getSmatrixSqrt(); this.R = svd.U.times(s_sqrt); this.S = s_sqrt.times(svd.Vt); }
public static void main(String[] args) { final Matrix m = new Matrix(new double[][] { { 0.5, 0.4 }, { 0.1, 0.7 } }); final GD_SVD2 gdsvd = new GD_SVD2(m, 2); // m.print(5, 5); // gdsvd.UprimeM.print(5, 5); // gdsvd.UprimeM.times(gdsvd.VprimeM.transpose()).print(5, 5); // gdsvd.UM.times(gdsvd.SM.times(gdsvd.VM)).print(5, 5); // gdsvd.UM.print(5, 5); gdsvd.SM.print(5, 5); // gdsvd.VM.print(5, 5); final ThinSingularValueDecomposition tsvd = new ThinSingularValueDecomposition(m, 2); // tsvd.U.print(5, 5); System.out.println(Arrays.toString(tsvd.S)); } }
ThinSingularValueDecomposition A1SVD = new ThinSingularValueDecomposition(A1, incSVD.updateK); A1SVD.U.print(5, 5); MatrixUtils.diag(A1SVD.S).print(5, 5); incSVD.Sdiag.print(5, 5); System.out.println("From Thinsvd: "); ThinSingularValueDecomposition A1A2SVD = new ThinSingularValueDecomposition(MatrixUtils.hstack(A1,A2), incSVD.updateK); A1A2SVD.U.print(5, 5); MatrixUtils.diag(A1A2SVD.S).print(5, 5); incSVD.Sdiag.print(5, 5); System.out.println("From Thinsvd: "); ThinSingularValueDecomposition ASVD = new ThinSingularValueDecomposition(A, incSVD.updateK); ASVD.U.print(5, 5); MatrixUtils.diag(ASVD.S).print(5, 5);
ThinSingularValueDecomposition A1SVD = new ThinSingularValueDecomposition(A1, incSVD.updateK); A1SVD.U.print(5, 5); MatrixUtils.diag(A1SVD.S).print(5, 5); incSVD.Sdiag.print(5, 5); System.out.println("From Thinsvd: "); ThinSingularValueDecomposition A1A2SVD = new ThinSingularValueDecomposition(MatrixUtils.hstack(A1,A2), incSVD.updateK); A1A2SVD.U.print(5, 5); MatrixUtils.diag(A1A2SVD.S).print(5, 5); incSVD.Sdiag.print(5, 5); System.out.println("From Thinsvd: "); ThinSingularValueDecomposition ASVD = new ThinSingularValueDecomposition(A, incSVD.updateK); ASVD.U.print(5, 5); MatrixUtils.diag(ASVD.S).print(5, 5);
/** * Compute the lower-rank approximation of the Moore-Penrose Pseudo-Inverse. * * @param matrix * The matrix to invert. * @param rank * the desired rank. * @return the pseudo-inverse. */ public static Matrix pseudoInverse(ch.akuhn.matrix.Matrix matrix, int rank) { final ThinSingularValueDecomposition tsvd = new ThinSingularValueDecomposition(matrix, rank); final Matrix Sinv = new Matrix(tsvd.S.length, tsvd.S.length); for (int i = 0; i < tsvd.S.length; i++) { if (tsvd.S[i] != 0) Sinv.set(i, i, 1.0 / tsvd.S[i]); } final Matrix pinv = tsvd.Vt.transpose().times(Sinv).times(tsvd.U.transpose()); return pinv; } }
ThinSingularValueDecomposition inputSVD = new ThinSingularValueDecomposition(m, updateK); Matrix U2 = inputSVD.U; double[] S2 = inputSVD.S; ThinSingularValueDecomposition rWorkspaceSVD = new ThinSingularValueDecomposition(this.Rworkspace, updateK); S = rWorkspaceSVD.S; Sdiag = MatrixUtils.diag(S);
ThinSingularValueDecomposition inputSVD = new ThinSingularValueDecomposition(m, updateK); Matrix U2 = inputSVD.U; double[] S2 = inputSVD.S; ThinSingularValueDecomposition rWorkspaceSVD = new ThinSingularValueDecomposition(this.Rworkspace, updateK); S = rWorkspaceSVD.S; Sdiag = MatrixUtils.diag(S);