# Manifold Mapping with ISOMAP

## Summary

This repository contains the `Manifold`

class which uses the ISOMAP method (Tenenbaum, 2000) to characterize manifolds and extract latent variables. This latter component is accomplished with multidimensional scaling, though other methods such as locally linear embedding may be substituted. The notable drawback to ISOMAP is that it may be easily broken with outlier datapoints owing to its reliance on accurate geodesic distance calculation. However, ISOMAP remains an impressively accurate method of manifold mapping with few prior assumptions placed on the data. Other drawbacks include that the algorithm has O(N^3) complexity and that the manifold is defined by the downsampled graph rather than a set of equations that could be used to generate more points conforming to the underlying dynamics captured by the manifold.

## How to Use

To use this class, we first initialize the `Manifold`

object using `manifold = Manifold("Description")`

and load the data using `manifold = manifold.createGraph(data)`

. The resulting graph may be visualized with the function `manifold.plotGraph()`

. To implement the ISOMAP algorithm, we must first compute the geodesic distances between all nodes in the graph using the function `manifold = manifold.shortestPath()`

, followed by latent variable extraction via `manifold = manifold.scale()`

, which performs multidimensional scaling.

The data should be formatted as a MxN matrix with M observations and N dimensions.

### Member Functions

| Function | Purpose |
| — | — |
| `createGraph()`

| Create adjacency graph for performing ISOMAP |
| `latent()`

| Function returning latent variables and corresponding original datapoints |
| `map()`

| Map new datapoints to learned manifold |
| `plotGraph()`

| Plot datapoints on adjacency graph |
| `scale()`

| Perform multidimensional scaling using dissimilarity matrix |
| `shortestPath()`

| Computing geodesic distances between points in adjacency graph |

## References

This repository was used in the linked paper, which contains a more detailed explanation of ISOMAP and its drawbacks.