/** * Computes the Moore-Penrose pseudoinverse. This is just a convenience wrapper * around {@link PseudoInverse#pseudoInverse(Matrix)}. * * @param matrix * the matrix to invert. * @return the inverted matrix * @see PseudoInverse#pseudoInverse(Matrix) */ public static Matrix pseudoInverse(Matrix matrix) { return PseudoInverse.pseudoInverse(matrix); }
/** * 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(Matrix matrix, int rank) { return pseudoInverse(new JamaDenseMatrix(matrix), rank); }
@Override public void train(List<? extends Annotated<OBJECT, ANNOTATION>> data) { final Set<ANNOTATION> termsSet = new HashSet<ANNOTATION>(); for (final Annotated<OBJECT, ANNOTATION> d : data) termsSet.addAll(d.getAnnotations()); terms = new ArrayList<ANNOTATION>(termsSet); final int termLen = terms.size(); final int trainingLen = data.size(); final Annotated<OBJECT, ANNOTATION> first = data.get(0); final double[] fv = extractor.extractFeature(first.getObject()).asDoubleVector(); final int featureLen = fv.length; final Matrix F = new Matrix(trainingLen, featureLen); final Matrix W = new Matrix(trainingLen, termLen); addRow(F, W, 0, fv, first.getAnnotations()); for (int i = 1; i < trainingLen; i++) { addRow(F, W, i, data.get(i)); } final Matrix pinvF = PseudoInverse.pseudoInverse(F, k); transform = pinvF.times(W); }
final Matrix mInv = PseudoInverse.pseudoInverse(m); final Point2dImpl cI2 = new Point2dImpl(); cI2.x = (float) (current.x + mInv.get(0, 0) * bb1 + mInv.get(0, 1) * bb2);
final Matrix mInv = PseudoInverse.pseudoInverse(m); final Point2dImpl cI2 = new Point2dImpl(); cI2.x = (float) (current.x + mInv.get(0, 0) * bb1 + mInv.get(0, 1) * bb2);
final Matrix I = PseudoInverse.pseudoInverse(G).times(c);
final Matrix I = PseudoInverse.pseudoInverse(G).times(c);