/** @import {InputType} from "../index.js" */ /** @import {Metric} from "../metrics/index.js" */ /** @import {ParametersSQDMDS} from "./index.js" */ /** * SQuadMDS (Stochastic Quartet MDS) * * A lean Stochastic Quartet MDS improving global structure preservation in * neighbor embedding like t-SNE and UMAP. * * @class * @template {InputType} T * @extends DR * @category Dimensionality Reduction */ export class SQDMDS extends DR { /** * @template {InputType} T * @param {T} X * @param {Partial} [parameters] * @returns {T} */ static transform(X: T_1, parameters?: Partial): T_1; /** * @template {InputType} T * @param {T} X * @param {Partial} [parameters] * @returns {Generator} */ static generator( X: T_1, parameters?: Partial, ): Generator; /** * @template {InputType} T * @param {T} X * @param {Partial} [parameters] * @returns {Promise} */ static transform_async( X: T_1, parameters?: Partial, ): Promise; /** * SQuadMDS: a lean Stochastic Quartet MDS improving global structure preservation in neighbor embedding like t-SNE * and UMAP. * * @param {T} X * @param {Partial} [parameters] * @see {@link https://arxiv.org/pdf/2202.12087.pdf} */ constructor(X: T, parameters?: Partial); init(): void; _add: ((...summands: Float64Array[]) => Float64Array) | undefined; _sub_div: | (( x: Float64Array, y: Float64Array, div: number, ) => Float64Array) | undefined; _minus: | ((a: Float64Array, b: Float64Array) => Float64Array) | undefined; _mult: ((a: Float64Array, v: number) => Float64Array) | undefined; _LR_init: number | undefined; _LR: number | undefined; _offset: number | undefined; _momentums: Matrix | undefined; _grads: Matrix | undefined; _indices: number[] | undefined; /** @type {(i: number, j: number, X: Matrix) => number} */ _HD_metric: ((i: number, j: number, X: Matrix) => number) | undefined; /** @type {(i: number, j: number, X: Matrix) => number} */ _HD_metric_exaggeration: ((i: number, j: number, X: Matrix) => number) | undefined; /** * Computes the projection. * * @param {number} [iterations=500] - Number of iterations. Default is `500` * @returns {T} The projection. */ transform(iterations?: number): T; _decay_start: number | undefined; /** * Computes the projection. * * @param {number} [iterations=500] - Number of iterations. Default is `500` * @returns {Generator} The intermediate steps of the projection. */ generator(iterations?: number): Generator; /** * Performs an optimization step. * * @private * @param {number} i - Acutal iteration. * @param {number} iterations - Number of iterations. */ private _step; _distance_exaggeration: boolean | undefined; /** * Creates quartets of non overlapping indices. * * @private * @returns {Uint32Array[]} */ private __quartets; /** * Computes and applies gradients, and updates momentum. * * @private * @param {boolean} distance_exaggeration */ private _nestrov_iteration; /** * Computes the gradients. * * @param {Matrix} Y - The Projection. * @param {Matrix} grads - The gradients. * @param {boolean} [exaggeration=false] - Whether or not to use early exaggeration. Default is `false` * @param {boolean} [zero_grad=true] - Whether or not to reset the gradient in the beginning. Default is `true` * @returns {Matrix} The gradients. */ _fill_MDS_grads(Y: Matrix, grads: Matrix, exaggeration?: boolean, zero_grad?: boolean): Matrix; /** * Quartet gradients for a projection. * * @private * @param {Matrix} Y - The acutal projection. * @param {number[]} quartet - The indices of the quartet. * @param {Float64Array} D_hd - The high-dimensional distances of the quartet. * @returns {Float64Array[]} The gradients for the quartet. */ private _compute_quartet_grads; /** * Gradients for one element of the loss function's sum. * * @private * @param {Float64Array} a * @param {Float64Array} b * @param {Float64Array} c * @param {Float64Array} d * @param {number} d_ab * @param {number} d_ac * @param {number} d_ad * @param {number} d_bc * @param {number} d_bd * @param {number} d_cd * @param {number} p_ab * @param {number} sum_LD_dist * @returns {Float64Array[]} */ private _ABCD_grads; /** * Inline! * * @param {number} d */ __minus( d: number, ): (a: Float64Array, b: Float64Array) => Float64Array; /** * Inline! * * @param {number} d */ __add(d: number): (...summands: Float64Array[]) => Float64Array; /** * Inline! * * @param {number} d */ __mult(d: number): (a: Float64Array, v: number) => Float64Array; /** * Creates a new array `(x - y) / div`. * * @param {number} d */ __sub_div( d: number, ): ( x: Float64Array, y: Float64Array, div: number, ) => Float64Array; } import type { InputType } from "../index.js"; import type { ParametersSQDMDS } from "./index.js"; import { DR } from "./DR.js"; import { Matrix } from "../matrix/index.js"; //# sourceMappingURL=SQDMDS.d.ts.map