Releases: dillondaudert/UMAP.jl
v0.2.0
UMAP v0.2.0
Release Notes: UMAP.jl v0.2.0
Version 0.2 is a major redesign focused on generality, extensibility, and multi-modal data support. This release contains breaking changes.
New Features
- Multi-view UMAP: Native support for multi-modal data via
NamedTupleinputs - Configuration System: Explicit types for all algorithm parameters with full control over each stage
- Result Objects:
UMAPResultandUMAPTransformResultthat encapsulate configuration and intermediate results - Flexible Input: Support for matrices, vectors of points, and multi-view data
- Extensibility: Multiple dispatch-based extension points for custom KNN search, initialization, and manifolds
- Better Transform: Automatic parameter inheritance from fit configuration
Breaking Changes
Function Names and Exports
-
umap()→UMAP.fit(): Main function renamed; returnsUMAPResultinstead of embedding matrix# Old embedding = umap(X, 2) # New result = UMAP.fit(X, 2) embedding = result.embedding
-
UMAP_→UMAPResult: Result struct renamed and restructured# Old model = UMAP_(X, 2) # New result = UMAP.fit(X, 2)
-
export→public: Functions now usepublickeyword- Call as
UMAP.fit()orusing UMAP: fit
- Call as
Transform Function
- Signature change:
transform(model::UMAP_, Q; kwargs...)→transform(result::UMAPResult, queries) - Automatic parameter inheritance: No need to re-specify parameters; inherited from
result.config# Old Q_embed = transform(model, Q; n_neighbors=15, n_epochs=100) # New Q_result = UMAP.transform(result, Q) # Params inherited Q_embed = Q_result.embedding
Parameters
-
initparameter: Changed fromSymbolto typed objects# Old UMAP_(X, 2; init=:spectral) # New UMAP.fit(X, 2; init=UMAP.SpectralInitialization())
-
aandbparameters removed: Now computed automatically frommin_distandspread
Result Structure
- Field changes:
model.knnsandmodel.dists→result.knns_dists(tuple)- Added
result.configfield storing configuration - Added
result.fs_setsfield for fuzzy simplicial sets
Migration
Minimal changes for basic usage:
# v0.1.11
using UMAP
embedding = umap(X, 2; n_neighbors=15)
# v0.2
using UMAP: fit
result = fit(X, 2; n_neighbors=15)
embedding = result.embeddingTransform usage:
# v0.1.11
model = UMAP_(X, 2)
Q_embed = transform(model, Q; n_neighbors=15, n_epochs=100)
# v0.2
result = UMAP.fit(X, 2)
Q_result = UMAP.transform(result, Q) # Simpler!
Q_embed = Q_result.embeddingDependencies
- Added:
Accessors.jl - Updated: Minimum versions of existing dependencies may have changed
Documentation
- New comprehensive architecture guide in landing page
- Multi-view UMAP examples
- Mathematical documentation for loss function
- Complete API reference for all configuration types
Performance
Performance characteristics are similar to v0.1.11 with improved type stability through explicit configuration types.
Merged pull requests:
- V0.2 dev (#55) (@dillondaudert)
Closed issues:
v0.1.11
UMAP v0.1.11
Merged pull requests:
v0.1.10
v0.1.9
UMAP v0.1.9
Closed issues:
- ERROR: MethodError: Cannot
convertan object of type (#34)
Merged pull requests:
v0.1.8
v0.1.7
v0.1.6
UMAP v0.1.6
Merged pull requests:
- CompatHelper: bump compat for "LsqFit" to "0.9" (#23) (@github-actions[bot])
- CompatHelper: bump compat for "LsqFit" to "0.10" (#24) (@github-actions[bot])
- Install TagBot as a GitHub Action (#25) (@JuliaTagBot)
- add transform data functionality (#26) (@sanjmohan)
- CompatHelper: bump compat for "Distances" to "0.9" (#28) (@github-actions[bot])
v0.1.5
v0.1.5 (2019-12-27)
Closed issues:
- Error in spectral layout on master (#16)
Merged pull requests:
- Reduce mem usage in optimize_embedding; eigs which=:SM (fix) (#22) (dillondaudert)
- Fix broadcast bug in initialize_embedding (#21) (baggepinnen)
- CompatHelper: bump compat for "Arpack" to "0.4" (#15) (github-actions[bot])
- CompatHelper: bump compat for "LsqFit" to "0.8" (#14) (github-actions[bot])
- V0.1.5dev (#12) (dillondaudert)
v0.1.4
v0.1.4 (2019-06-14)
Closed issues:
Merged pull requests:
- Relax type constraints; fix Float32 bug; which=:SR (#11) (dillondaudert)
v0.1.3
Bump version 0.1.3