38 lines
830 B
JavaScript
38 lines
830 B
JavaScript
function Utils() {
|
|
|
|
}
|
|
|
|
|
|
KMEANS.prototype.getRandomVector = function(extremes) {
|
|
var maxDim = extremes.length;
|
|
var x = [];
|
|
var r = 0;
|
|
|
|
// calculate radius of n-sphere which covers all points in dataset
|
|
var nSphereRadius = 0;
|
|
for (var i = 0; i < maxDim; i++) {
|
|
var extreme = extremes[i];
|
|
var er = Math.max(extreme.center - extreme.min, extreme.center - extreme.max);
|
|
if (er > nSphereRadius)
|
|
nSphereRadius = er;
|
|
}
|
|
|
|
for (var i = 0; i < maxDim; i++) {
|
|
var val = (Math.random() * 2) - 1;
|
|
// adjust to radius of n-sphere
|
|
x.push(val);
|
|
r += val * val;
|
|
}
|
|
|
|
r = Math.sqrt(r);
|
|
|
|
for (var i = 0; i < maxDim; i++) {
|
|
x[i] /= r;
|
|
// resize to fit n-sphere
|
|
x[i] *= nSphereRadius;
|
|
x[i] += extremes[i].center;
|
|
}
|
|
|
|
return x;
|
|
}
|