hierarchical-clustering

Agglomerative Hierarchical clustering based on How to Explain Hierarchical Clustering.
Example
From clusterfck:
var cluster = require('hierarchical-clustering');
var colors = [
[20, 20, 80],
[22, 22, 90],
[250, 255, 253],
[100, 54, 255]
];
function distance(a, b) {
var d = 0;
for (var i = 0; i < a.length; i++) {
d += Math.pow(a[i] - b[i], 2);
}
return Math.sqrt(d);
}
function linkage(distances) {
return Math.min.apply(null, distances);
}
var levels = cluster({
input: colors,
distance: distance,
linkage: linkage,
minClusters: 2,
});
var clusters = levels[levels.length - 1].clusters;
console.log(clusters);
clusters = clusters.map(function (cluster) {
return cluster.map(function (index) {
return colors[index];
});
});
console.log(clusters);
API
var cluster = require('hierarchical-clustering')
var levels = cluster(options)
Options:
.input <Array> (required)
- input array
.distance <Function> (required)
- distance function
.linkage <Function> (required)
- linkage function or string of 'single', 'complete or 'average'
.minClusters <Integer> (1)
- number of clusters you want to iterate to
.maxLinkage <Integer> (Infinity)
- maximum linkage until you stop iteration
Function definitions:
function distance(a, b) {
return <Number>
}
function linkage(distances) {
return <Number>
}
The output is an array of level
s, each which have the property:
.linkage <Number>
- the linkage of this level
.cluster <Array>
- the clusters at this level
.from <Integer>
- index of the last cluster which got merged and deleted
.to <Integer>
- index of the last cluster which got merged and appended