UNPKG

k-medoids

Version:

Implementation of the k-mediods clustering algorithm

36 lines (35 loc) 1.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class Cluster { constructor(cluster) { this.getCost = () => { return this.Elements.map((e) => e.DistanceFromMedoid).reduce((a, b) => a + b, 0); }; this.findBestMedoidIdx = (distanceFn) => { const mapToCost = (e) => this.calcCostForGivenElementAsMedoid(e, distanceFn); const candidateNewMedoids = this.Elements .map(mapToCost); return candidateNewMedoids .reduce((iMin, e, idx, arr) => e.CostIfMadeMedoid < arr[iMin].CostIfMadeMedoid ? idx : iMin, 0); }; this.calcCostForGivenElementAsMedoid = (proposedMedoid, distanceFn) => { const clusterWithThisAsMedoid = new Cluster({ Elements: this.Elements.map((elem) => { const ret = { DistanceFromMedoid: distanceFn(elem.Element, proposedMedoid.Element), Element: elem.Element, }; return ret; }), Medoid: proposedMedoid.Element, }); return { CostIfMadeMedoid: clusterWithThisAsMedoid.getCost(), Element: proposedMedoid, }; }; this.Elements = cluster.Elements; this.Medoid = cluster.Medoid; } } exports.Cluster = Cluster;