Skip to content

Releases: dillondaudert/UMAP.jl

v0.2.0

08 Jan 22:07

Choose a tag to compare

UMAP v0.2.0

Diff since v0.1.11

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 NamedTuple inputs
  • Configuration System: Explicit types for all algorithm parameters with full control over each stage
  • Result Objects: UMAPResult and UMAPTransformResult that 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; returns UMAPResult instead 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)
  • exportpublic: Functions now use public keyword

    • Call as UMAP.fit() or using UMAP: fit

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

  • init parameter: Changed from Symbol to typed objects

    # Old
    UMAP_(X, 2; init=:spectral)
    # New
    UMAP.fit(X, 2; init=UMAP.SpectralInitialization())
  • a and b parameters removed: Now computed automatically from min_dist and spread

Result Structure

  • Field changes:
    • model.knns and model.distsresult.knns_dists (tuple)
    • Added result.config field storing configuration
    • Added result.fs_sets field 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.embedding

Transform 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.embedding

Dependencies

  • 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:

Closed issues:

  • Seg fault upon @pyimport umap as py_umap; (#6)
  • UMAP performance (#13)
  • Arbitrary data support (#27)
  • Example Notebook not working - Julia 1.6.1 (#43)
  • julia> @time e = UMAP.umap(X, 2); ERROR: InexactError: Int64(... (#50)
  • Project status? (#53)
  • Tag a release? (#58)

v0.1.11

30 Jan 00:55
b738d5e

Choose a tag to compare

UMAP v0.1.11

Diff since v0.1.10

Merged pull requests:

  • CompatHelper: bump compat for "LsqFit" to "0.14" (#56) (@github-actions[bot])
  • CompatHelper: bump compat for "LsqFit" to "0.15" (#57) (@github-actions[bot])

v0.1.10

16 May 15:24

Choose a tag to compare

UMAP v0.1.10

Diff since v0.1.9

Closed issues:

  • upgrade dependencies (#46)

v0.1.9

03 Jan 18:52

Choose a tag to compare

UMAP v0.1.9

Diff since v0.1.8

Closed issues:

  • ERROR: MethodError: Cannot convert an object of type (#34)

Merged pull requests:

  • CompatHelper: bump compat for "LsqFit" to "0.12" (#38) (@github-actions[bot])
  • CompatHelper: bump compat for "Arpack" to "0.5" (#39) (@github-actions[bot])

v0.1.8

13 Oct 15:14
1d93fd2

Choose a tag to compare

UMAP v0.1.8

Diff since v0.1.7

Closed issues:

  • Isn't the input data row-major? (#32)

Merged pull requests:

  • modified _knn_from_dists to enable very large distance matrices (#33) (@kragol)
  • CompatHelper: bump compat for "Distances" to "0.10" (#35) (@github-actions[bot])

v0.1.7

20 Aug 16:09
e893b89

Choose a tag to compare

UMAP v0.1.7

Diff since v0.1.6

Closed issues:

  • DescentGraph not defined (#30)

Merged pull requests:

  • CompatHelper: bump compat for "LsqFit" to "0.11" (#31) (@github-actions[bot])

v0.1.6

29 May 19:05

Choose a tag to compare

UMAP v0.1.6

Diff since v0.1.5

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

29 Dec 03:30
v0.1.5
6adc138

Choose a tag to compare

v0.1.5 (2019-12-27)

Diff since v0.1.4

Closed issues:

  • Error in spectral layout on master (#16)

Merged pull requests:

v0.1.4

15 Jun 09:31
v0.1.4
53f05f2

Choose a tag to compare

v0.1.4 (2019-06-14)

Diff since v0.1.3

Closed issues:

  • Float32 (#10)
  • UMAP from distance matrix? (#8)

Merged pull requests:

v0.1.3

29 Apr 16:11
74a1d5e

Choose a tag to compare

Bump version 0.1.3