@ai-on-browser/data-analysis-models
Version:
Data analysis model package without any dependencies
133 lines (132 loc) • 4.12 kB
TypeScript
/**
* Complete linkage agglomerative clustering
*/
export class CompleteLinkageAgglomerativeClustering extends AgglomerativeClustering {
}
/**
* Single linkage agglomerative clustering
*/
export class SingleLinkageAgglomerativeClustering extends AgglomerativeClustering {
}
/**
* Group average agglomerative clustering
*/
export class GroupAverageAgglomerativeClustering extends AgglomerativeClustering {
}
/**
* Ward's agglomerative clustering
*/
export class WardsAgglomerativeClustering extends AgglomerativeClustering {
}
/**
* Centroid agglomerative clustering
*/
export class CentroidAgglomerativeClustering extends AgglomerativeClustering {
}
/**
* Weighted average agglomerative clustering
*/
export class WeightedAverageAgglomerativeClustering extends AgglomerativeClustering {
}
/**
* Median agglomerative clustering
*/
export class MedianAgglomerativeClustering extends AgglomerativeClustering {
}
export type AgglomerativeClusterNode = {
/**
* Data point of leaf node
*/
point?: number[];
/**
* Data index of leaf node
*/
index?: number;
/**
* Distance between children nodes
*/
distance?: number;
/**
* Distances of leaf data and others
*/
distances?: number[];
/**
* Number of leaf nodes
*/
size: number;
/**
* Children nodes
*/
children?: AgglomerativeClusterNode[];
/**
* Leaf nodes
*/
leafs: AgglomerativeClusterNode[];
};
/**
* @typedef {object} AgglomerativeClusterNode
* @property {number[]} [point] Data point of leaf node
* @property {number} [index] Data index of leaf node
* @property {number} [distance] Distance between children nodes
* @property {number[]} [distances] Distances of leaf data and others
* @property {number} size Number of leaf nodes
* @property {AgglomerativeClusterNode[]} [children] Children nodes
* @property {AgglomerativeClusterNode[]} leafs Leaf nodes
*/
/**
* Agglomerative clustering
*/
declare class AgglomerativeClustering {
/**
* @param {'euclid' | 'manhattan' | 'chebyshev' | function (number[], number[]): number} metric Metric name
*/
constructor(metric?: 'euclid' | 'manhattan' | 'chebyshev' | ((arg0: number[], arg1: number[]) => number));
_root: {
distance: any;
size: any;
children: any[];
readonly leafs: any;
};
_metric: "euclid" | "manhattan" | "chebyshev" | ((arg0: number[], arg1: number[]) => number);
_d: (a: any, b: any) => any;
/**
* Fit model parameters.
* @param {Array<Array<number>>} points Training data
*/
fit(points: Array<Array<number>>): void;
/**
* Returns the specified number of clusters.
* @param {number} number Number of clusters
* @returns {AgglomerativeClusterNode[]} Cluster nodes
*/
getClusters(number: number): AgglomerativeClusterNode[];
/**
* Returns predicted categories.
* @param {number} k Number of clusters
* @returns {number[]} Predicted values
*/
predict(k: number): number[];
/**
* Returns a distance between two nodes.
* @abstract
* @param {AgglomerativeClusterNode} c1 Node
* @param {AgglomerativeClusterNode} c2 Node
* @returns {number} Distance
*/
distance(c1: AgglomerativeClusterNode, c2: AgglomerativeClusterNode): number;
_mean(d: any): number[];
_lanceWilliamsUpdater(ala: any, alb: any, bt: any, gm: any): (ka: any, kb: any, ab: any) => number;
/**
* Returns new distance.
* @abstract
* @param {number} ca Number of datas in a merging node A
* @param {number} cb Number of datas in a merging node B
* @param {number} ck Number of datas in a current node
* @param {number} ka Distance between node A and current node
* @param {number} kb Distance between node B and current node
* @param {number} ab Distance between node A and node B
* @returns {number} New distance between current node and merged node
*/
update(ca: number, cb: number, ck: number, ka: number, kb: number, ab: number): number;
}
export {};