@Override protected void learnBasisNorm(Matrix norm) { inner.learnBasis(norm); }
/** * Learn the principal components of the given data list. Each item * corresponds to an observation with the number of dimensions equal to the * length of the array. * * @param data * the data */ public void learnBasis(List<double[]> data) { learnBasis(data.toArray(new double[data.size()][])); }
/** * Learn the principal components of the given data array. Each row * corresponds to an observation with the number of dimensions equal to the * number of columns. * * @param data * the data */ public void learnBasis(double[][] data) { learnBasis(new Matrix(data)); }
@Override public void learnBasis(double[][] data) { inner.learnBasis(data); this.basis = inner.getBasis(); this.eigenvalues = inner.getEigenValues(); this.mean = inner.getMean(); }
@Override public void train(List<? extends IndependentPair<?, FImage>> data) { width = data.get(0).secondObject().width; height = data.get(0).secondObject().height; final Map<Object, List<double[]>> mapData = new HashMap<Object, List<double[]>>(); final List<double[]> listData = new ArrayList<double[]>(); for (final IndependentPair<?, FImage> item : data) { List<double[]> fvs = mapData.get(item.firstObject()); if (fvs == null) mapData.put(item.firstObject(), fvs = new ArrayList<double[]>()); final double[] fv = FImage2DoubleFV.INSTANCE.extractFeature(item.getSecondObject()).values; fvs.add(fv); listData.add(fv); } final PrincipalComponentAnalysis pca = new ThinSvdPrincipalComponentAnalysis(numComponents); pca.learnBasis(listData); final List<double[][]> ldaData = new ArrayList<double[][]>(mapData.size()); for (final Entry<?, List<double[]>> e : mapData.entrySet()) { final List<double[]> vecs = e.getValue(); final double[][] classData = new double[vecs.size()][]; for (int i = 0; i < classData.length; i++) { classData[i] = pca.project(vecs.get(i)); } ldaData.add(classData); } final LinearDiscriminantAnalysis lda = new LinearDiscriminantAnalysis(numComponents); lda.learnBasis(ldaData); basis = pca.getBasis().times(lda.getBasis()); mean = pca.getMean(); }
@Override public void train(List<? extends IndependentPair<?, FImage>> data) { width = data.get(0).secondObject().width; height = data.get(0).secondObject().height; final Map<Object, List<double[]>> mapData = new HashMap<Object, List<double[]>>(); final List<double[]> listData = new ArrayList<double[]>(); for (final IndependentPair<?, FImage> item : data) { List<double[]> fvs = mapData.get(item.firstObject()); if (fvs == null) mapData.put(item.firstObject(), fvs = new ArrayList<double[]>()); final double[] fv = FImage2DoubleFV.INSTANCE.extractFeature(item.getSecondObject()).values; fvs.add(fv); listData.add(fv); } final PrincipalComponentAnalysis pca = new ThinSvdPrincipalComponentAnalysis(numComponents); pca.learnBasis(listData); final List<double[][]> ldaData = new ArrayList<double[][]>(mapData.size()); for (final Entry<?, List<double[]>> e : mapData.entrySet()) { final List<double[]> vecs = e.getValue(); final double[][] classData = new double[vecs.size()][]; for (int i = 0; i < classData.length; i++) { classData[i] = pca.project(vecs.get(i)); } ldaData.add(classData); } final LinearDiscriminantAnalysis lda = new LinearDiscriminantAnalysis(numComponents); lda.learnBasis(ldaData); basis = pca.getBasis().times(lda.getBasis()); mean = pca.getMean(); }
/** * Construct a {@link PointDistributionModel} from the given data and * {@link Constraint}. * * @param constraint * @param data */ public PointDistributionModel(Constraint constraint, List<PointList> data) { this.constraint = constraint; // align mean = GeneralisedProcrustesAnalysis.alignPoints(data, 5, 10); // build data matrix final Matrix m = buildDataMatrix(data); // perform pca this.pc = new SvdPrincipalComponentAnalysis(); pc.learnBasis(m); numComponents = this.pc.getEigenValues().length; }