Published
Edited
Feb 26, 2019
3 stars
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
// define master shape
optimizeK = function(ss) {
var x1 = 0,
y1 = ss[x1],
x2 = ss.length - 1,
y2 = ss[x2],
m = (y2 - y1)/(x2 - x1),
distances = [];
// loop ratios
for (var x3 = 0; x3 < ss.length; x3++) {
var y3 = ss[x3],
x = (x3/m + y3 - y2 + x2 * m)/(m + 1/m),
y = (-1/m) * (x - x3) + y3,
distance = Math.sqrt(((x3 - x) ** 2) + ((y3 - y) ** 2));
distances.push(distance);
}
// find the index of the elbow, then add 2 because we start assessments at k=2
var optimalK = distances.indexOf(Math.max(...distances)) + 2;

return optimalK
}
Insert cell
Insert cell
optimizeK(ratio_ss)
Insert cell
Insert cell
Insert cell
Insert cell
optimizeKLA = function(ss) {
var x1 = 0,
y1 = ss[x1],
x2 = ss.length - 1,
y2 = ss[x2],
m = (y2 - y1)/(x2 - x1),
u = Math.sqrt((m * m) + 1),
distances = [];
// loop ratios
for (var x = 0; x < ss.length; x++) {
var distance = u * (ss[x] - (m * x))
distances.push(distance);
}
// find the index of the elbow, then add 2 because we start assessments at k=2
var optimalK = distances.indexOf(Math.max(...distances)) + 2;

return optimalK
}
Insert cell
Insert cell
optimalK = optimizeKLA(ratio_ss)
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more