https://github.com/corybrunson/landmark
procedures to generate landmark sets from finite metric spaces
https://github.com/corybrunson/landmark
landmarks mapper maxmin topological-data-analysis
Last synced: 12 months ago
JSON representation
procedures to generate landmark sets from finite metric spaces
- Host: GitHub
- URL: https://github.com/corybrunson/landmark
- Owner: corybrunson
- Created: 2020-05-21T22:53:41.000Z (about 6 years ago)
- Default Branch: main
- Last Pushed: 2022-12-12T18:35:40.000Z (over 3 years ago)
- Last Synced: 2025-03-26T09:21:17.567Z (about 1 year ago)
- Topics: landmarks, mapper, maxmin, topological-data-analysis
- Language: R
- Homepage:
- Size: 208 KB
- Stars: 3
- Watchers: 2
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# landmark
Calculate landmark sets for finite metric spaces using the maxmin
procedure (for fixed-radius balls) or an adaptation of it for rank data
(for roughly fixed-cardinality nearest
neighborhoods).
``` r
(x <- matrix(c(-1, -.5, 0, .75, .875, 1), dimnames = list(letters[1:6], "x")))
#> x
#> a -1.000
#> b -0.500
#> c 0.000
#> d 0.750
#> e 0.875
#> f 1.000
plot(cbind(x, 0), asp = 1, pch = 16)
text(cbind(x, .05), labels = rownames(x))
```

## `maxmin` procedure
The original `maxmin` procedure produces a landmark set for covering a
point cloud with either of two minimal ball covers:
- a minimum number of balls of fixed uniform radius
- a fixed number of balls of minimum uniform radius
``` r
x[landmarks_maxmin(x, radius = 0.5, engine = "C++"), , drop = FALSE]
#> x
#> a -1
#> f 1
#> c 0
x[landmarks_maxmin(x, radius = 0.25, engine = "C++"), , drop = FALSE]
#> x
#> a -1.0
#> f 1.0
#> c 0.0
#> b -0.5
x[landmarks_maxmin(x, radius = 0.125, engine = "C++"), , drop = FALSE]
#> x
#> a -1.00
#> f 1.00
#> c 0.00
#> b -0.50
#> d 0.75
x[landmarks_maxmin(x, num = 6L, engine = "C++"), , drop = FALSE]
#> x
#> a -1.000
#> f 1.000
#> c 0.000
#> b -0.500
#> d 0.750
#> e 0.875
```
``` r
landmarks_maxmin(x, num = 4L, engine = "R", cover = TRUE)
#> landmark cover_set
#> 1 1 1
#> 2 6 4, 5, 6
#> 3 3 3
#> 4 2 2
landmarks_maxmin(x, radius = 0.5, engine = "R", cover = TRUE)
#> landmark cover_set
#> 1 1 1, 2
#> 2 6 4, 5, 6
#> 3 3 2, 3
landmarks_maxmin(x, radius = 1.5, engine = "R", cover = TRUE)
#> landmark cover_set
#> 1 1 1, 2, 3
#> 2 6 2, 3, 4,....
landmarks_maxmin(x, radius = 3.5, engine = "R", cover = TRUE)
#> landmark cover_set
#> 1 1 1, 2, 3,....
```
## `lastfirst` procedure
An adaptation of `maxmin` to ranked distances will produce a landmark
set for covering a point cloud with either of two minimal neighborhood
covers:
- a minimum number of neighborhoods of fixed (approximately) uniform
cardinality
- a fixed number of neighborhoods of minimal (approximately) uniform
cardinality
Cardinality is only exact up to ties, which may be handled different
ways and will result in cover sets of different
cardinalities.
``` r
x[landmarks_lastfirst(x, cardinality = 3L, seed_index = 6L), , drop = FALSE]
#> x
#> f 1
#> a -1
x[landmarks_lastfirst(x, cardinality = 2L, seed_index = 6L), , drop = FALSE]
#> x
#> f 1.00
#> a -1.00
#> c 0.00
#> d 0.75
x[landmarks_lastfirst(x, num = 4L, seed_index = 6L), , drop = FALSE]
#> x
#> f 1.00
#> a -1.00
#> c 0.00
#> d 0.75
x[landmarks_lastfirst(x, cardinality = 1L, seed_index = 6L), , drop = FALSE]
#> x
#> f 1.000
#> a -1.000
#> c 0.000
#> d 0.750
#> b -0.500
#> e 0.875
```
``` r
landmarks_lastfirst(x, cardinality = 1L, seed_index = 6L, engine = "C++", cover = TRUE)
#> landmark cover_set
#> 1 6 6
#> 2 1 1
#> 3 3 3
#> 4 4 4
#> 5 2 2
#> 6 5 5
landmarks_lastfirst(x, num = 4L, seed_index = 6L, engine = "C++", cover = TRUE)
#> landmark cover_set
#> 1 6 5, 6
#> 2 1 1, 2
#> 3 3 2, 3
#> 4 4 4, 5
landmarks_lastfirst(x, cardinality = 3L, seed_index = 6L, engine = "C++", cover = TRUE)
#> landmark cover_set
#> 1 6 4, 5, 6
#> 2 1 1, 2, 3
landmarks_lastfirst(x, cardinality = 5L, seed_index = 6L, engine = "C++", cover = TRUE)
#> landmark cover_set
#> 1 6 2, 3, 4,....
#> 2 1 1, 2, 3,....
```
# references
This package was spun off from [the Mapper
package](https://github.com/peekxc/Mapper/).
A rigorous mathematical treatment is underway at [this Overleaf
project](https://www.overleaf.com/read/fpjrtgfjstyx).