k-medoids
Version:
Implementation of the k-mediods clustering algorithm
36 lines (35 loc) • 1.43 kB
JavaScript
;
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;