import $ivy.`com.github.haifengl::smile-scala:3.1.0` import $ivy.`org.slf4j:slf4j-simple:2.0.13` import scala.language.postfixOps import smile._ import smile.math._ import smile.math.distance._ import smile.math.kernel._ import smile.math.matrix._ import smile.math.matrix.Matrix._ import smile.math.rbf._ import smile.stat.distribution._ import smile.data._ import smile.data.formula._ import smile.data.measure._ import smile.data.`type`._ import smile.manifold._ import java.awt.Color.{BLACK, BLUE, CYAN, DARK_GRAY, GRAY, GREEN, LIGHT_GRAY, MAGENTA, ORANGE, PINK, RED, WHITE, YELLOW} import smile.plot.swing.Palette.{DARK_RED, VIOLET_RED, DARK_GREEN, LIGHT_GREEN, PASTEL_GREEN, FOREST_GREEN, GRASS_GREEN, NAVY_BLUE, SLATE_BLUE, ROYAL_BLUE, CADET_BLUE, MIDNIGHT_BLUE, SKY_BLUE, STEEL_BLUE, DARK_BLUE, DARK_MAGENTA, DARK_CYAN, PURPLE, LIGHT_PURPLE, DARK_PURPLE, GOLD, BROWN, SALMON, TURQUOISE, BURGUNDY, PLUM} import smile.plot.swing._ import smile.plot.show import smile.plot.Render._ val swissroll = read.csv("../data/manifold/swissroll.txt", header=false, delimiter='\t').toArray show(plot(swissroll, '.', BLUE)) import scala.jdk.CollectionConverters._ val map = isomap(swissroll.slice(0, 2000), 7) val vertices = map.coordinates val edges = map.graph.getEdges().asScala.map(edge => Array(edge.v1, edge.v2)).toArray val canvas = wireframe(vertices, edges) canvas.setTitle("IsoMap"); show(canvas) val map = lle(swissroll.slice(0, 2000), 8) val vertices = map.coordinates val edges = map.graph.getEdges().asScala.map(edge => Array(edge.v1, edge.v2)).toArray val canvas = wireframe(vertices, edges) canvas.setTitle("LLE"); show(canvas) val map = laplacian(swissroll.slice(0, 1000), 10, 2, 25.0) val vertices = map.coordinates val edges = map.graph.getEdges().asScala.map(edge => Array(edge.v1, edge.v2)).toArray val canvas = wireframe(vertices, edges) canvas.setTitle("Laplacian Eigenmap"); show(canvas) val x = read.csv("../data/mnist/mnist2500_X.txt", header=false, delimiter=' ').toArray val y = read.csv("../data/mnist/mnist2500_labels.txt", header=false, delimiter=' ').column(0).toIntArray val pc = smile.projection.pca(x) pc.setProjection(50) val x50 = pc.project(x) val sne = tsne(x50, 3, 20, 200, 1000) show(plot(sne.coordinates, y, '@'))