public PCAModel buildModel(DataInfo dinfo, GramTask tsk) { logStart(); Matrix myGram = new Matrix(tsk._gram.getXX()); // X'X/n where n = num rows SingularValueDecomposition mySVD = myGram.svd(); // Extract eigenvalues and eigenvectors // Note: Singular values ordered in weakly descending order by algorithm double[] Sval = mySVD.getSingularValues(); double[][] eigVec = mySVD.getV().getArray(); // rows = features, cols = principal components assert Sval.length == eigVec.length; // DKV.put(EigenvectorMatrix.makeKey(input("source"), destination_key), new EigenvectorMatrix(eigVec)); // Compute standard deviation double[] sdev = new double[Sval.length]; double totVar = 0; double dfcorr = dinfo._adaptedFrame.numRows()/(dinfo._adaptedFrame.numRows() - 1.0); for(int i = 0; i < Sval.length; i++) { // if(standardize) Sval[i] = dfcorr*Sval[i]; // Correct since degrees of freedom = n-1 sdev[i] = Math.sqrt(Sval[i]); totVar += Sval[i]; } double[] propVar = new double[Sval.length]; // Proportion of total variance double[] cumVar = new double[Sval.length]; // Cumulative proportion of total variance for(int i = 0; i < Sval.length; i++) { propVar[i] = Sval[i]/totVar; cumVar[i] = i == 0 ? propVar[0] : cumVar[i-1] + propVar[i]; } Key dataKey = input("source") == null ? null : Key.make(input("source")); int ncomp = Math.min(getNumPC(sdev, tolerance), max_pc); return new PCAModel(this, destination_key, dataKey, dinfo, tsk, sdev, propVar, cumVar, eigVec, mySVD.rank(), ncomp); }
/** Matrix rank @return effective numerical rank, obtained from SVD. */ public int rank () { return new SingularValueDecomposition(this).rank(); }
final int rank = svd.rank();
private void setup(boolean brute) { if (brute) { this.mode = new ConvolveMode.BruteForce(this.kernel); return; } if (this.kernel.width == 1 || this.kernel.height == 1) { this.mode = new ConvolveMode.OneD(kernel); } else { final SingularValueDecomposition svd = new SingularValueDecomposition( MatrixUtils.matrixFromFloat(this.kernel.pixels)); if (svd.rank() == 1) this.mode = new ConvolveMode.Separable(svd); else this.mode = new ConvolveMode.BruteForce(this.kernel); } }
private void setup(boolean brute) { if (brute) { this.mode = new ConvolveMode.BruteForce(this.kernel); return; } if (this.kernel.width == 1 || this.kernel.height == 1) { this.mode = new ConvolveMode.OneD(kernel); } else { final SingularValueDecomposition svd = new SingularValueDecomposition( MatrixUtils.matrixFromFloat(this.kernel.pixels)); if (svd.rank() == 1) this.mode = new ConvolveMode.Separable(svd); else this.mode = new ConvolveMode.BruteForce(this.kernel); } }
svd = new SingularValueDecomposition(covm); s = svd.getSingularValues(); rang = svd.rank(); for (int i = 0; i < rang; i++) { pot *= 2.0 * Math.PI;
final int rank = svd.rank();