Author: Luke Morris
This project implements the ISUMAP manifold learning algorithm. It is based off of the LUK4s-B/IsUMap reference python implementation. UMPACT.jl extracts the relevant components of the code to just demonstrate the high-level flow of the ISUMAP algorithm:
- K-nearest neighbors is run.
- Distances are normalized so that the distance to the farthest neighbor is 1.
- These normalized distances are collated into a single matrix,
$$T$$ . - For nonzero entries,
$$v$$ , of this matrix, we perform$$exp(-v)$$ . - A "nice" means of symmetrizing the matrix is performed. Here, we take
$$T T'$$ , then take$$min(v, 1)$$ for nonzero elements$$v$$ of that matrix. - For nonzero entries,
$$v$$ , of this matrix, we take$$-log(v)$$ . - We find all shortest distances in this matrix, via Floyd-Warshall.
- Perform multi-dimensional scaling (MDS) to perform dimension reduction.
These first 7 steps constitute ISUMAP.
Mathematically, we say that step 4 converts from a "metric space" to a "fuzzy simplicial set", and step 6 converts from a fuzzy simplicial set to a metric space.
So as not to distract from the high-level flow of this algorithm, popular Julia libraries are used for pre- and post-processing where possible.
The t-conorm used is the "bounded sum".
The torus is an intuitive test case. The phenomena of interest that we want to preserve are the hole in the center and the roughly circular outline.
1000 points are generated on the hemisphere.
Uniformly random data are generated.





