@Override public JComponent learn() { JPanel pane = new JPanel(new GridLayout(2, 2)); double[][] data = dataset[datasetIndex].toArray(new double[dataset[datasetIndex].size()][]); String[] names = dataset[datasetIndex].toArray(new String[dataset[datasetIndex].size()]); if (names[0] == null) { names = null; } long clock = System.currentTimeMillis(); PCA pca = new PCA(data, true); System.out.format( "Learn PCA from %d samples in %dms\n", data.length, System.currentTimeMillis() - clock); pca.setProjection(2); double[][] y = pca.project(data); PlotCanvas plot = new PlotCanvas(Math.colMin(y), Math.colMax(y)); if (names != null) { plot.points(y, names); } else if (dataset[datasetIndex].response() != null) { int[] labels = dataset[datasetIndex].toArray(new int[dataset[datasetIndex].size()]); for (int i = 0; i < y.length; i++) { plot.point(pointLegend, Palette.COLORS[labels[i]], y[i]); } } else { plot.points(y, pointLegend); } plot.setTitle("PCA"); pane.add(plot); pca.setProjection(3); y = pca.project(data); plot = new PlotCanvas(Math.colMin(y), Math.colMax(y)); if (names != null) { plot.points(y, names); } else if (dataset[datasetIndex].response() != null) { int[] labels = dataset[datasetIndex].toArray(new int[dataset[datasetIndex].size()]); for (int i = 0; i < y.length; i++) { plot.point(pointLegend, Palette.COLORS[labels[i]], y[i]); } } else { plot.points(y, pointLegend); } plot.setTitle("PCA"); pane.add(plot); PPCA ppca = new PPCA(data, 2); y = ppca.project(data); plot = new PlotCanvas(Math.colMin(y), Math.colMax(y)); if (names != null) { plot.points(y, names); } else if (dataset[datasetIndex].response() != null) { int[] labels = dataset[datasetIndex].toArray(new int[dataset[datasetIndex].size()]); for (int i = 0; i < y.length; i++) { plot.point(pointLegend, Palette.COLORS[labels[i]], y[i]); } } else { plot.points(y, pointLegend); } plot.setTitle("PPCA"); pane.add(plot); clock = System.currentTimeMillis(); ppca = new PPCA(data, 3); System.out.format( "Learn PPCA from %d samples in %dms\n", data.length, System.currentTimeMillis() - clock); y = ppca.project(data); plot = new PlotCanvas(Math.colMin(y), Math.colMax(y)); if (names != null) { plot.points(y, names); } else if (dataset[datasetIndex].response() != null) { int[] labels = dataset[datasetIndex].toArray(new int[dataset[datasetIndex].size()]); for (int i = 0; i < y.length; i++) { plot.point(pointLegend, Palette.COLORS[labels[i]], y[i]); } } else { plot.points(y, pointLegend); } plot.setTitle("PPCA"); pane.add(plot); return pane; }