public PCA_MTJ_EVD_SymmMatrix(double[][] gramMatrix) { this.symmGramMatrix = new UpperSymmDenseMatrix(new DenseMatrix(gramMatrix)); runEVD(); }
private void runEVD() { int gramDimension = symmGramMatrix.numRows(); try { symmDenseEVD = no.uib.cipr.matrix.SymmDenseEVD.factorize(this.symmGramMatrix); } catch (NotConvergedException e) { throw new RuntimeException(e); } // initial eigenpairs eigenvalues = symmDenseEVD.getEigenvalues(); double[] Vt_1D = symmDenseEVD.getEigenvectors().getData(); eigenvectors = LinearAlgebraUtils.reshape1DArray(Vt_1D, gramDimension, gramDimension); // sort eigenpairs in descending order according to the magnitude of eigenvalues EigenPair[] eigenPairs = LinearAlgebraUtils.createReverseSortedEigenpairs(eigenvalues, eigenvectors); eigenvalues = LinearAlgebraUtils.extractEigenvaluesFromEigenpairs(eigenPairs); eigenvectors = ArrayUtils.transpose(LinearAlgebraUtils.extractEigenvectorsFromEigenpairs(eigenPairs)); } }
protected void fillCovariance() throws Exception { // just center the data or standardize it? if (m_center) { m_centerFilter = new Center(); m_centerFilter.setInputFormat(m_TrainInstances); m_TrainInstances = Filter.useFilter(m_TrainInstances, m_centerFilter); } else { m_standardizeFilter = new Standardize(); m_standardizeFilter.setInputFormat(m_TrainInstances); m_TrainInstances = Filter.useFilter(m_TrainInstances, m_standardizeFilter); } // now compute the covariance matrix m_Correlation = new UpperSymmDenseMatrix(m_NumAttribs); for (int i = 0; i < m_NumAttribs; i++) { for (int j = i; j < m_NumAttribs; j++) { double cov = 0; for (Instance inst: m_TrainInstances) { cov += inst.value(i) * inst.value(j); } cov /= m_TrainInstances.numInstances() - 1; m_Correlation.set(i, j, cov); } } }
Matrix scatter = new UpperSymmDenseMatrix(data[0].numRows()).rank1(data[0]). add(new UpperSymmDenseMatrix(data[1].numRows()).rank1(data[1])); for (int i = 0; i < scatter.numColumns(); i++) { scatter.add(i, i, m_Ridge);
@Override void copy(Matrix A) { for (MatrixEntry e : A) if (e.row() <= e.column()) set(e.row(), e.column(), e.get()); }
/** * Computes the eigenvalue decomposition of the given matrix * * @param A * Matrix to factorize. Overwritten on return * @return The current eigenvalue decomposition * @throws NotConvergedException */ public SymmDenseEVD factor(UpperSymmDenseMatrix A) throws NotConvergedException { if (uplo != UpLo.Upper) throw new IllegalArgumentException( "Eigenvalue computer configured for upper-symmetrical matrices"); return factor(A, A.getData()); }
protected void fillCovariance() throws Exception { // just center the data or standardize it? if (m_center) { m_centerFilter = new Center(); m_centerFilter.setInputFormat(m_TrainInstances); m_TrainInstances = Filter.useFilter(m_TrainInstances, m_centerFilter); } else { m_standardizeFilter = new Standardize(); m_standardizeFilter.setInputFormat(m_TrainInstances); m_TrainInstances = Filter.useFilter(m_TrainInstances, m_standardizeFilter); } // now compute the covariance matrix m_Correlation = new UpperSymmDenseMatrix(m_NumAttribs); for (int i = 0; i < m_NumAttribs; i++) { for (int j = i; j < m_NumAttribs; j++) { double cov = 0; for (Instance inst: m_TrainInstances) { cov += inst.value(i) * inst.value(j); } cov /= m_TrainInstances.numInstances() - 1; m_Correlation.set(i, j, cov); } } }
@Override void copy(Matrix A) { for (MatrixEntry e : A) if (e.row() <= e.column()) set(e.row(), e.column(), e.get()); }
/** * Computes the eigenvalue decomposition of the given matrix * * @param A * Matrix to factorize. Overwritten on return * @return The current eigenvalue decomposition * @throws NotConvergedException */ public SymmDenseEVD factor(UpperSymmDenseMatrix A) throws NotConvergedException { if (uplo != UpLo.Upper) throw new IllegalArgumentException( "Eigenvalue computer configured for upper-symmetrical matrices"); return factor(A, A.getData()); }
m_correlation = new UpperSymmDenseMatrix(m_numAttribs); for (int i = 0; i < m_numAttribs; i++) { for (int j = i; j < m_numAttribs; j++) { m_correlation.set(i, j, cov);
@Override public UpperSymmDenseMatrix copy() { return new UpperSymmDenseMatrix(this); }
private void runEVD() { int gramDimension = symmGramMatrix.numRows(); try { symmDenseEVD = no.uib.cipr.matrix.SymmDenseEVD.factorize(this.symmGramMatrix); } catch (NotConvergedException e) { throw new RuntimeException(e); } // initial eigenpairs eigenvalues = symmDenseEVD.getEigenvalues(); double[] Vt_1D = symmDenseEVD.getEigenvectors().getData(); eigenvectors = LinearAlgebraUtils.reshape1DArray(Vt_1D, gramDimension, gramDimension); // sort eigenpairs in descending order according to the magnitude of eigenvalues EigenPair[] eigenPairs = LinearAlgebraUtils.createReverseSortedEigenpairs(eigenvalues, eigenvectors); eigenvalues = LinearAlgebraUtils.extractEigenvaluesFromEigenpairs(eigenPairs); eigenvectors = ArrayUtils.transpose(LinearAlgebraUtils.extractEigenvectorsFromEigenpairs(eigenPairs)); } }
m_correlation = new UpperSymmDenseMatrix(m_numAttribs); for (int i = 0; i < m_numAttribs; i++) { for (int j = i; j < m_numAttribs; j++) { m_correlation.set(i, j, cov);
@Override public UpperSymmDenseMatrix copy() { return new UpperSymmDenseMatrix(this); }
/** * Convenience method for computing the full eigenvalue decomposition of the * given matrix * * @param A * Matrix to factorize. Upper part extracted, and the matrix is * not modified * @return Newly allocated decomposition * @throws NotConvergedException */ public static SymmDenseEVD factorize(Matrix A) throws NotConvergedException { return new SymmDenseEVD(A.numRows(), true) .factor(new UpperSymmDenseMatrix(A)); }
/** * Convenience method for computing the full eigenvalue decomposition of the * given matrix * * @param A * Matrix to factorize. Upper part extracted, and the matrix is * not modified * @return Newly allocated decomposition * @throws NotConvergedException */ public static SymmDenseEVD factorize(Matrix A) throws NotConvergedException { return new SymmDenseEVD(A.numRows(), true) .factor(new UpperSymmDenseMatrix(A)); }
public PCA_MTJ_EVD_SymmMatrix(double[][] gramMatrix) { this.symmGramMatrix = new UpperSymmDenseMatrix(new DenseMatrix(gramMatrix)); runEVD(); }
Matrix Cw = new UpperSymmDenseMatrix(m); for (Instance inst : inputFormat) { if (!inst.classIsMissing()) { Matrix Cb = new UpperSymmDenseMatrix(m); for (int i = 0; i < inputFormat.numClasses(); i++) { Vector diff = perClassMeans[i].copy(); Matrix D = new UpperSymmDenseMatrix(evs.length); for (int i = 0; i < evs.length; i++) { if (evs[i] > 0) { Matrix sqrtCwInverse = temp.mult(evCw.transpose(), new UpperSymmDenseMatrix(m)); Matrix symmMatrix = temp.mult(sqrtCwInverse, new UpperSymmDenseMatrix(m));