docs: private SingularValueDecomposition getSVD(DataSet dataSet)
      {
          Matrix cov = covarianceMatrix(meanVector(dataSet), dataSet);
          for(int i = 0; i < cov.rows(); i++)//force it to be symmetric
              for(int j = 0; j < i; j++)
                  cov.set(j, i, cov.get(i, j));
          EigenValueDecomposition evd = new EigenValueDecomposition(cov);
          //Sort form largest to smallest
          evd.sortByEigenValue(new Comparator<Double>() 
          {
              @Override
              public int compare(Double o1, Double o2)
              {
                  return -Double.compare(o1, o2);
              }
          });
          return new SingularValueDecomposition(evd.getVRaw(), evd.getVRaw(), evd.getRealEigenvalues());
      }