all these changes

This commit is contained in:
Jake Kasper
2026-04-09 13:19:47 -05:00
parent e83a51a051
commit 65315f36d1
39102 changed files with 7932979 additions and 567 deletions

339
frontend/node_modules/skmeans/dist/browser/skmeans.js generated vendored Normal file
View File

@@ -0,0 +1,339 @@
"use strict";
(function e(t, n, r) {
function s(o, u) {
if (!n[o]) {
if (!t[o]) {
var a = typeof require == "function" && require;if (!u && a) return a(o, !0);if (i) return i(o, !0);var f = new Error("Cannot find module '" + o + "'");throw f.code = "MODULE_NOT_FOUND", f;
}var l = n[o] = { exports: {} };t[o][0].call(l.exports, function (e) {
var n = t[o][1][e];return s(n ? n : e);
}, l, l.exports, e, t, n, r);
}return n[o].exports;
}var i = typeof require == "function" && require;for (var o = 0; o < r.length; o++) {
s(r[o]);
}return s;
})({ 1: [function (require, module, exports) {
"use strict";
(function () {
var root = this;
var previous_skmeans = root.skmeans;
var skmeans = require('./main.js');
if (typeof exports !== 'undefined') {
if (typeof module !== 'undefined' && module.exports) {
exports = module.exports = skmeans;
}
exports.skmeans = skmeans;
}
if (typeof window !== 'undefined') {
window.skmeans = skmeans;
}
}).call(this);
}, { "./main.js": 4 }], 2: [function (require, module, exports) {
module.exports = {
/**
* Euclidean distance
*/
eudist: function eudist(v1, v2, sqrt) {
var len = v1.length;
var sum = 0;
for (var i = 0; i < len; i++) {
var d = (v1[i] || 0) - (v2[i] || 0);
sum += d * d;
}
// Square root not really needed
return sqrt ? Math.sqrt(sum) : sum;
},
mandist: function mandist(v1, v2, sqrt) {
var len = v1.length;
var sum = 0;
for (var i = 0; i < len; i++) {
sum += Math.abs((v1[i] || 0) - (v2[i] || 0));
}
// Square root not really needed
return sqrt ? Math.sqrt(sum) : sum;
},
/**
* Unidimensional distance
*/
dist: function dist(v1, v2, sqrt) {
var d = Math.abs(v1 - v2);
return sqrt ? d : d * d;
}
};
}, {}], 3: [function (require, module, exports) {
var Distance = require("./distance.js"),
eudist = Distance.eudist,
dist = Distance.dist;
module.exports = {
kmrand: function kmrand(data, k) {
var map = {},
ks = [],
t = k << 2;
var len = data.length;
var multi = data[0].length > 0;
while (ks.length < k && t-- > 0) {
var d = data[Math.floor(Math.random() * len)];
var key = multi ? d.join("_") : "" + d;
if (!map[key]) {
map[key] = true;
ks.push(d);
}
}
if (ks.length < k) throw new Error("Error initializating clusters");else return ks;
},
/**
* K-means++ initial centroid selection
*/
kmpp: function kmpp(data, k) {
var distance = data[0].length ? eudist : dist;
var ks = [],
len = data.length;
var multi = data[0].length > 0;
var map = {};
// First random centroid
var c = data[Math.floor(Math.random() * len)];
var key = multi ? c.join("_") : "" + c;
ks.push(c);
map[key] = true;
// Retrieve next centroids
while (ks.length < k) {
// Min Distances between current centroids and data points
var dists = [],
lk = ks.length;
var dsum = 0,
prs = [];
for (var i = 0; i < len; i++) {
var min = Infinity;
for (var j = 0; j < lk; j++) {
var _dist = distance(data[i], ks[j]);
if (_dist <= min) min = _dist;
}
dists[i] = min;
}
// Sum all min distances
for (var _i = 0; _i < len; _i++) {
dsum += dists[_i];
}
// Probabilities and cummulative prob (cumsum)
for (var _i2 = 0; _i2 < len; _i2++) {
prs[_i2] = { i: _i2, v: data[_i2], pr: dists[_i2] / dsum, cs: 0 };
}
// Sort Probabilities
prs.sort(function (a, b) {
return a.pr - b.pr;
});
// Cummulative Probabilities
prs[0].cs = prs[0].pr;
for (var _i3 = 1; _i3 < len; _i3++) {
prs[_i3].cs = prs[_i3 - 1].cs + prs[_i3].pr;
}
// Randomize
var rnd = Math.random();
// Gets only the items whose cumsum >= rnd
var idx = 0;
while (idx < len - 1 && prs[idx++].cs < rnd) {}
ks.push(prs[idx - 1].v);
/*
let done = false;
while(!done) {
// this is our new centroid
c = prs[idx-1].v
key = multi? c.join("_") : `${c}`;
if(!map[key]) {
map[key] = true;
ks.push(c);
done = true;
}
else {
idx++;
}
}
*/
}
return ks;
}
};
}, { "./distance.js": 2 }], 4: [function (require, module, exports) {
/*jshint esversion: 6 */
var Distance = require("./distance.js"),
ClusterInit = require("./kinit.js"),
eudist = Distance.eudist,
mandist = Distance.mandist,
dist = Distance.dist,
kmrand = ClusterInit.kmrand,
kmpp = ClusterInit.kmpp;
var MAX = 10000;
/**
* Inits an array with values
*/
function init(len, val, v) {
v = v || [];
for (var i = 0; i < len; i++) {
v[i] = val;
}return v;
}
function skmeans(data, k, initial, maxit) {
var ks = [],
old = [],
idxs = [],
dist = [];
var conv = false,
it = maxit || MAX;
var len = data.length,
vlen = data[0].length,
multi = vlen > 0;
var count = [];
if (!initial) {
var _idxs = {};
while (ks.length < k) {
var idx = Math.floor(Math.random() * len);
if (!_idxs[idx]) {
_idxs[idx] = true;
ks.push(data[idx]);
}
}
} else if (initial == "kmrand") {
ks = kmrand(data, k);
} else if (initial == "kmpp") {
ks = kmpp(data, k);
} else {
ks = initial;
}
do {
// Reset k count
init(k, 0, count);
// For each value in data, find the nearest centroid
for (var i = 0; i < len; i++) {
var min = Infinity,
_idx = 0;
for (var j = 0; j < k; j++) {
// Multidimensional or unidimensional
var dist = multi ? eudist(data[i], ks[j]) : Math.abs(data[i] - ks[j]);
if (dist <= min) {
min = dist;
_idx = j;
}
}
idxs[i] = _idx; // Index of the selected centroid for that value
count[_idx]++; // Number of values for this centroid
}
// Recalculate centroids
var sum = [],
old = [],
dif = 0;
for (var _j = 0; _j < k; _j++) {
// Multidimensional or unidimensional
sum[_j] = multi ? init(vlen, 0, sum[_j]) : 0;
old[_j] = ks[_j];
}
// If multidimensional
if (multi) {
for (var _j2 = 0; _j2 < k; _j2++) {
ks[_j2] = [];
} // Sum values and count for each centroid
for (var _i4 = 0; _i4 < len; _i4++) {
var _idx2 = idxs[_i4],
// Centroid for that item
vsum = sum[_idx2],
// Sum values for this centroid
vect = data[_i4]; // Current vector
// Accumulate value on the centroid for current vector
for (var h = 0; h < vlen; h++) {
vsum[h] += vect[h];
}
}
// Calculate the average for each centroid
conv = true;
for (var _j3 = 0; _j3 < k; _j3++) {
var ksj = ks[_j3],
// Current centroid
sumj = sum[_j3],
// Accumulated centroid values
oldj = old[_j3],
// Old centroid value
cj = count[_j3]; // Number of elements for this centroid
// New average
for (var _h = 0; _h < vlen; _h++) {
ksj[_h] = sumj[_h] / cj || 0; // New centroid
}
// Find if centroids have moved
if (conv) {
for (var _h2 = 0; _h2 < vlen; _h2++) {
if (oldj[_h2] != ksj[_h2]) {
conv = false;
break;
}
}
}
}
}
// If unidimensional
else {
// Sum values and count for each centroid
for (var _i5 = 0; _i5 < len; _i5++) {
var _idx3 = idxs[_i5];
sum[_idx3] += data[_i5];
}
// Calculate the average for each centroid
for (var _j4 = 0; _j4 < k; _j4++) {
ks[_j4] = sum[_j4] / count[_j4] || 0; // New centroid
}
// Find if centroids have moved
conv = true;
for (var _j5 = 0; _j5 < k; _j5++) {
if (old[_j5] != ks[_j5]) {
conv = false;
break;
}
}
}
conv = conv || --it <= 0;
} while (!conv);
return {
it: MAX - it,
k: k,
idxs: idxs,
centroids: ks
};
}
module.exports = skmeans;
}, { "./distance.js": 2, "./kinit.js": 3 }] }, {}, [1]);
//# sourceMappingURL=skmeans.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,3 @@
/*! skmeans 2017-08-03 */
"use strict";!function r(t,n,o){function a(i,f){if(!n[i]){if(!t[i]){var s="function"==typeof require&&require;if(!f&&s)return s(i,!0);if(e)return e(i,!0);var u=new Error("Cannot find module '"+i+"'");throw u.code="MODULE_NOT_FOUND",u}var v=n[i]={exports:{}};t[i][0].call(v.exports,function(r){var n=t[i][1][r];return a(n||r)},v,v.exports,r,t,n,o)}return n[i].exports}for(var e="function"==typeof require&&require,i=0;i<o.length;i++)a(o[i]);return a}({1:[function(r,t,n){(function(){this.skmeans;var o=r("./main.js");void 0!==n&&(void 0!==t&&t.exports&&(n=t.exports=o),n.skmeans=o),"undefined"!=typeof window&&(window.skmeans=o)}).call(this)},{"./main.js":4}],2:[function(r,t,n){t.exports={eudist:function(r,t,n){for(var o=r.length,a=0,e=0;e<o;e++){var i=(r[e]||0)-(t[e]||0);a+=i*i}return n?Math.sqrt(a):a},mandist:function(r,t,n){for(var o=r.length,a=0,e=0;e<o;e++)a+=Math.abs((r[e]||0)-(t[e]||0));return n?Math.sqrt(a):a},dist:function(r,t,n){var o=Math.abs(r-t);return n?o:o*o}}},{}],3:[function(r,t,n){var o=r("./distance.js"),a=o.eudist,e=o.dist;t.exports={kmrand:function(r,t){for(var n={},o=[],a=t<<2,e=r.length,i=r[0].length>0;o.length<t&&a-- >0;){var f=r[Math.floor(Math.random()*e)],s=i?f.join("_"):""+f;n[s]||(n[s]=!0,o.push(f))}if(o.length<t)throw new Error("Error initializating clusters");return o},kmpp:function(r,t){var n=r[0].length?a:e,o=[],i=r.length,f=r[0].length>0,s={},u=r[Math.floor(Math.random()*i)],v=f?u.join("_"):""+u;for(o.push(u),s[v]=!0;o.length<t;){for(var h=[],c=o.length,d=0,l=[],p=0;p<i;p++){for(var m=1/0,g=0;g<c;g++){var k=n(r[p],o[g]);k<=m&&(m=k)}h[p]=m}for(var M=0;M<i;M++)d+=h[M];for(var j=0;j<i;j++)l[j]={i:j,v:r[j],pr:h[j]/d,cs:0};l.sort(function(r,t){return r.pr-t.pr}),l[0].cs=l[0].pr;for(var x=1;x<i;x++)l[x].cs=l[x-1].cs+l[x].pr;for(var w=Math.random(),q=0;q<i-1&&l[q++].cs<w;);o.push(l[q-1].v)}return o}}},{"./distance.js":2}],4:[function(r,t,n){function o(r,t,n){n=n||[];for(var o=0;o<r;o++)n[o]=t;return n}var a=r("./distance.js"),e=r("./kinit.js"),i=a.eudist,f=(a.mandist,a.dist,e.kmrand),s=e.kmpp,u=1e4;t.exports=function(r,t,n,a){var e=[],v=[],h=[],c=[],d=!1,l=a||u,p=r.length,m=r[0].length,g=m>0,k=[];if(n)e="kmrand"==n?f(r,t):"kmpp"==n?s(r,t):n;else for(var M={};e.length<t;){var j=Math.floor(Math.random()*p);M[j]||(M[j]=!0,e.push(r[j]))}do{o(t,0,k);for(var x=0;x<p;x++){for(var w=1/0,q=0,b=0;b<t;b++)(c=g?i(r[x],e[b]):Math.abs(r[x]-e[b]))<=w&&(w=c,q=b);h[x]=q,k[q]++}for(var E=[],v=[],_=0;_<t;_++)E[_]=g?o(m,0,E[_]):0,v[_]=e[_];if(g){for(var y=0;y<t;y++)e[y]=[];for(var O=0;O<p;O++)for(var D=E[h[O]],N=r[O],U=0;U<m;U++)D[U]+=N[U];d=!0;for(var z=0;z<t;z++){for(var C=e[z],F=E[z],L=v[z],T=k[z],A=0;A<m;A++)C[A]=F[A]/T||0;if(d)for(var B=0;B<m;B++)if(L[B]!=C[B]){d=!1;break}}}else{for(var G=0;G<p;G++)E[h[G]]+=r[G];for(var H=0;H<t;H++)e[H]=E[H]/k[H]||0;d=!0;for(var I=0;I<t;I++)if(v[I]!=e[I]){d=!1;break}}d=d||--l<=0}while(!d);return{it:u-l,k:t,idxs:h,centroids:e}}},{"./distance.js":2,"./kinit.js":3}]},{},[1]);

15
frontend/node_modules/skmeans/dist/index.html generated vendored Normal file
View File

@@ -0,0 +1,15 @@
<!doctype html>
<html>
<head>
<script src="browser/skmeans.js"></script>
</head>
<body>
<script>
var data = [1,12,13,4,25,21,22,3,14,5,11,2,23,24,15];
var res = skmeans(data,3);
console.log(data);
console.log(res);
</script>
</body>
</html>

49
frontend/node_modules/skmeans/dist/node/Gruntfile.js generated vendored Normal file
View File

@@ -0,0 +1,49 @@
'use strict';
module.exports = function (grunt) {
require('load-grunt-tasks')(grunt);
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
browserify: {
dist: {
watch: true,
keepAlive: true,
files: {
'dist/browser/skmeans.js': ['browser.js']
}
}
},
babel: {
options: {
sourceMap: true,
presets: ['es2015']
},
dist: {
files: [{
expand: true,
src: ['*.js'],
dest: 'dist/node',
ext: '.js'
}, {
'dist/browser/skmeans.js': ['dist/browser/skmeans.js']
}]
}
},
uglify: {
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
},
dist: {
files: {
'dist/browser/skmeans.min.js': ['dist/browser/skmeans.js']
}
}
},
clean: ['dist/browser/*.js', 'dist/browser/*.map']
});
grunt.registerTask('default', ['browserify', 'babel', 'uglify']);
};
//# sourceMappingURL=Gruntfile.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../Gruntfile.js"],"names":["module","exports","grunt","require","initConfig","pkg","file","readJSON","browserify","dist","watch","keepAlive","files","babel","options","sourceMap","presets","expand","src","dest","ext","uglify","banner","clean","registerTask"],"mappings":";;AAAAA,OAAOC,OAAP,GAAiB,UAASC,KAAT,EAAgB;AAChCC,SAAQ,kBAAR,EAA4BD,KAA5B;;AAEA;AACAA,OAAME,UAAN,CAAiB;AACfC,OAAKH,MAAMI,IAAN,CAAWC,QAAX,CAAoB,cAApB,CADU;AAEhBC,cAAY;AACXC,SAAM;AACLC,WAAO,IADF;AAELC,eAAW,IAFN;AAGLC,WAAO;AACN,gCAA2B,CAAC,YAAD;AADrB;AAHF;AADK,GAFI;AAWhBC,SAAO;AACNC,YAAS;AACRC,eAAW,IADH;AAERC,aAAS,CAAC,QAAD;AAFD,IADH;AAKNP,SAAM;AACLG,WAAO,CACN;AACCK,aAAQ,IADT;AAECC,UAAK,CAAC,MAAD,CAFN;AAGCC,WAAM,WAHP;AAICC,UAAK;AAJN,KADM,EAON;AACC,gCAA2B,CAAC,yBAAD;AAD5B,KAPM;AADF;AALA,GAXS;AA8BfC,UAAQ;AACNP,YAAS;AACPQ,YAAQ;AADD,IADH;AAIRb,SAAO;AACNG,WAAO;AACN,oCAAgC,CAAC,yBAAD;AAD1B;AADD;AAJC,GA9BO;AAwChBW,SAAO,CAAC,mBAAD,EAAqB,oBAArB;AAxCS,EAAjB;;AA2CArB,OAAMsB,YAAN,CAAmB,SAAnB,EAA8B,CAAC,YAAD,EAAc,OAAd,EAAsB,QAAtB,CAA9B;AACA,CAhDD","file":"Gruntfile.js","sourcesContent":["module.exports = function(grunt) {\n\trequire('load-grunt-tasks')(grunt);\n\n\t// Project configuration.\n\tgrunt.initConfig({\n\t pkg: grunt.file.readJSON('package.json'),\n\t\tbrowserify: {\n\t\t\tdist: {\n\t\t\t\twatch: true,\n\t\t\t\tkeepAlive: true,\n\t\t\t\tfiles: {\n\t\t\t\t\t'dist/browser/skmeans.js': ['browser.js']\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tbabel: {\n\t\t\toptions: {\n\t\t\t\tsourceMap: true,\n\t\t\t\tpresets: ['es2015']\n\t\t\t},\n\t\t\tdist: {\n\t\t\t\tfiles: [\n\t\t\t\t\t{\n\t\t\t\t\t\texpand: true,\n\t\t\t\t\t\tsrc: ['*.js'],\n\t\t\t\t\t\tdest: 'dist/node',\n\t\t\t\t\t\text: '.js'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t'dist/browser/skmeans.js': ['dist/browser/skmeans.js'],\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t},\n\t uglify: {\n\t options: {\n\t banner: '/*! <%= pkg.name %> <%= grunt.template.today(\"yyyy-mm-dd\") %> */\\n'\n\t },\n\t\t\tdist : {\n\t\t\t\tfiles: {\n\t\t\t\t\t'dist/browser/skmeans.min.js' : ['dist/browser/skmeans.js']\n\t\t\t\t}\n\t\t\t}\n\t },\n\t\tclean: ['dist/browser/*.js','dist/browser/*.map']\n\t});\n\n\tgrunt.registerTask('default', ['browserify','babel','uglify']);\n};\n"]}

19
frontend/node_modules/skmeans/dist/node/browser.js generated vendored Normal file
View File

@@ -0,0 +1,19 @@
"use strict";
(function () {
var root = this;
var previous_skmeans = root.skmeans;
var skmeans = require('./main.js');
if (typeof exports !== 'undefined') {
if (typeof module !== 'undefined' && module.exports) {
exports = module.exports = skmeans;
}
exports.skmeans = skmeans;
}
if (typeof window !== 'undefined') {
window.skmeans = skmeans;
}
}).call(undefined);
//# sourceMappingURL=browser.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../browser.js"],"names":["root","previous_skmeans","skmeans","require","exports","module","window","call"],"mappings":"AAAA;;AAEA,CAAC,YAAW;AACV,MAAIA,OAAO,IAAX;AACA,MAAIC,mBAAmBD,KAAKE,OAA5B;AACD,MAAIA,UAAUC,QAAQ,WAAR,CAAd;;AAEA,MAAI,OAAOC,OAAP,KAAmB,WAAvB,EAAqC;AAClC,QAAI,OAAOC,MAAP,KAAkB,WAAlB,IAAiCA,OAAOD,OAA5C,EAAsD;AACpDA,gBAAUC,OAAOD,OAAP,GAAiBF,OAA3B;AACD;AACDE,YAAQF,OAAR,GAAkBA,OAAlB;AACD;;AAEF,MAAG,OAAOI,MAAP,KAAkB,WAArB,EAAkC;AAC/BA,WAAOJ,OAAP,GAAiBA,OAAjB;AACD;AAEF,CAhBD,EAgBGK,IAhBH","file":"browser.js","sourcesContent":["\"use strict\";\n\n(function() {\n var root = this\n var previous_skmeans = root.skmeans;\n\tvar skmeans = require('./main.js');\n\n\tif( typeof exports !== 'undefined' ) {\n if( typeof module !== 'undefined' && module.exports ) {\n exports = module.exports = skmeans;\n }\n exports.skmeans = skmeans;\n }\n\n\tif(typeof window !== 'undefined') {\n window.skmeans = skmeans;\n }\n\n}).call(this);\n"]}

39
frontend/node_modules/skmeans/dist/node/distance.js generated vendored Normal file
View File

@@ -0,0 +1,39 @@
"use strict";
module.exports = {
/**
* Euclidean distance
*/
eudist: function eudist(v1, v2, sqrt) {
var len = v1.length;
var sum = 0;
for (var i = 0; i < len; i++) {
var d = (v1[i] || 0) - (v2[i] || 0);
sum += d * d;
}
// Square root not really needed
return sqrt ? Math.sqrt(sum) : sum;
},
mandist: function mandist(v1, v2, sqrt) {
var len = v1.length;
var sum = 0;
for (var i = 0; i < len; i++) {
sum += Math.abs((v1[i] || 0) - (v2[i] || 0));
}
// Square root not really needed
return sqrt ? Math.sqrt(sum) : sum;
},
/**
* Unidimensional distance
*/
dist: function dist(v1, v2, sqrt) {
var d = Math.abs(v1 - v2);
return sqrt ? d : d * d;
}
};
//# sourceMappingURL=distance.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../distance.js"],"names":["module","exports","eudist","v1","v2","sqrt","len","length","sum","i","d","Math","mandist","abs","dist"],"mappings":";;AAAAA,OAAOC,OAAP,GAAiB;AAChB;;;AAGAC,OAJgB,kBAITC,EAJS,EAINC,EAJM,EAIHC,IAJG,EAIG;AAClB,MAAIC,MAAMH,GAAGI,MAAb;AACA,MAAIC,MAAM,CAAV;;AAEA,OAAI,IAAIC,IAAE,CAAV,EAAYA,IAAEH,GAAd,EAAkBG,GAAlB,EAAuB;AACtB,OAAIC,IAAI,CAACP,GAAGM,CAAH,KAAO,CAAR,KAAcL,GAAGK,CAAH,KAAO,CAArB,CAAR;AACAD,UAAOE,IAAEA,CAAT;AACA;AACD;AACA,SAAOL,OAAMM,KAAKN,IAAL,CAAUG,GAAV,CAAN,GAAuBA,GAA9B;AACA,EAde;AAgBhBI,QAhBgB,mBAgBRT,EAhBQ,EAgBLC,EAhBK,EAgBFC,IAhBE,EAgBI;AACnB,MAAIC,MAAMH,GAAGI,MAAb;AACA,MAAIC,MAAM,CAAV;;AAEA,OAAI,IAAIC,IAAE,CAAV,EAAYA,IAAEH,GAAd,EAAkBG,GAAlB,EAAuB;AACtBD,UAAOG,KAAKE,GAAL,CAAS,CAACV,GAAGM,CAAH,KAAO,CAAR,KAAcL,GAAGK,CAAH,KAAO,CAArB,CAAT,CAAP;AACA;;AAED;AACA,SAAOJ,OAAMM,KAAKN,IAAL,CAAUG,GAAV,CAAN,GAAuBA,GAA9B;AACA,EA1Be;;;AA4BhB;;;AAGAM,KA/BgB,gBA+BXX,EA/BW,EA+BRC,EA/BQ,EA+BLC,IA/BK,EA+BC;AAChB,MAAIK,IAAIC,KAAKE,GAAL,CAASV,KAAGC,EAAZ,CAAR;AACA,SAAOC,OAAMK,CAAN,GAAUA,IAAEA,CAAnB;AACA;AAlCe,CAAjB","file":"distance.js","sourcesContent":["module.exports = {\n\t/**\n\t * Euclidean distance\n\t */\n\teudist(v1,v2,sqrt) {\n\t\tvar len = v1.length;\n\t\tvar sum = 0;\n\n\t\tfor(let i=0;i<len;i++) {\n\t\t\tvar d = (v1[i]||0) - (v2[i]||0);\n\t\t\tsum += d*d;\n\t\t}\n\t\t// Square root not really needed\n\t\treturn sqrt? Math.sqrt(sum) : sum;\n\t},\n\n\tmandist(v1,v2,sqrt) {\n\t\tvar len = v1.length;\n\t\tvar sum = 0;\n\n\t\tfor(let i=0;i<len;i++) {\n\t\t\tsum += Math.abs((v1[i]||0) - (v2[i]||0));\n\t\t}\n\n\t\t// Square root not really needed\n\t\treturn sqrt? Math.sqrt(sum) : sum;\n\t},\n\n\t/**\n\t * Unidimensional distance\n\t */\n\tdist(v1,v2,sqrt) {\n\t\tvar d = Math.abs(v1-v2);\n\t\treturn sqrt? d : d*d;\n\t}\n\n}\n"]}

110
frontend/node_modules/skmeans/dist/node/kinit.js generated vendored Normal file
View File

@@ -0,0 +1,110 @@
"use strict";
var Distance = require("./distance.js"),
eudist = Distance.eudist,
dist = Distance.dist;
module.exports = {
kmrand: function kmrand(data, k) {
var map = {},
ks = [],
t = k << 2;
var len = data.length;
var multi = data[0].length > 0;
while (ks.length < k && t-- > 0) {
var d = data[Math.floor(Math.random() * len)];
var key = multi ? d.join("_") : "" + d;
if (!map[key]) {
map[key] = true;
ks.push(d);
}
}
if (ks.length < k) throw new Error("Error initializating clusters");else return ks;
},
/**
* K-means++ initial centroid selection
*/
kmpp: function kmpp(data, k) {
var distance = data[0].length ? eudist : dist;
var ks = [],
len = data.length;
var multi = data[0].length > 0;
var map = {};
// First random centroid
var c = data[Math.floor(Math.random() * len)];
var key = multi ? c.join("_") : "" + c;
ks.push(c);
map[key] = true;
// Retrieve next centroids
while (ks.length < k) {
// Min Distances between current centroids and data points
var dists = [],
lk = ks.length;
var dsum = 0,
prs = [];
for (var i = 0; i < len; i++) {
var min = Infinity;
for (var j = 0; j < lk; j++) {
var _dist = distance(data[i], ks[j]);
if (_dist <= min) min = _dist;
}
dists[i] = min;
}
// Sum all min distances
for (var _i = 0; _i < len; _i++) {
dsum += dists[_i];
}
// Probabilities and cummulative prob (cumsum)
for (var _i2 = 0; _i2 < len; _i2++) {
prs[_i2] = { i: _i2, v: data[_i2], pr: dists[_i2] / dsum, cs: 0 };
}
// Sort Probabilities
prs.sort(function (a, b) {
return a.pr - b.pr;
});
// Cummulative Probabilities
prs[0].cs = prs[0].pr;
for (var _i3 = 1; _i3 < len; _i3++) {
prs[_i3].cs = prs[_i3 - 1].cs + prs[_i3].pr;
}
// Randomize
var rnd = Math.random();
// Gets only the items whose cumsum >= rnd
var idx = 0;
while (idx < len - 1 && prs[idx++].cs < rnd) {}
ks.push(prs[idx - 1].v);
/*
let done = false;
while(!done) {
// this is our new centroid
c = prs[idx-1].v
key = multi? c.join("_") : `${c}`;
if(!map[key]) {
map[key] = true;
ks.push(c);
done = true;
}
else {
idx++;
}
}
*/
}
return ks;
}
};
//# sourceMappingURL=kinit.js.map

1
frontend/node_modules/skmeans/dist/node/kinit.js.map generated vendored Normal file

File diff suppressed because one or more lines are too long

161
frontend/node_modules/skmeans/dist/node/main.js generated vendored Normal file
View File

@@ -0,0 +1,161 @@
"use strict";
/*jshint esversion: 6 */
var Distance = require("./distance.js"),
ClusterInit = require("./kinit.js"),
eudist = Distance.eudist,
mandist = Distance.mandist,
dist = Distance.dist,
kmrand = ClusterInit.kmrand,
kmpp = ClusterInit.kmpp;
var MAX = 10000;
/**
* Inits an array with values
*/
function init(len, val, v) {
v = v || [];
for (var i = 0; i < len; i++) {
v[i] = val;
}return v;
}
function skmeans(data, k, initial, maxit) {
var ks = [],
old = [],
idxs = [],
dist = [];
var conv = false,
it = maxit || MAX;
var len = data.length,
vlen = data[0].length,
multi = vlen > 0;
var count = [];
if (!initial) {
var _idxs = {};
while (ks.length < k) {
var idx = Math.floor(Math.random() * len);
if (!_idxs[idx]) {
_idxs[idx] = true;
ks.push(data[idx]);
}
}
} else if (initial == "kmrand") {
ks = kmrand(data, k);
} else if (initial == "kmpp") {
ks = kmpp(data, k);
} else {
ks = initial;
}
do {
// Reset k count
init(k, 0, count);
// For each value in data, find the nearest centroid
for (var i = 0; i < len; i++) {
var min = Infinity,
_idx = 0;
for (var j = 0; j < k; j++) {
// Multidimensional or unidimensional
var dist = multi ? eudist(data[i], ks[j]) : Math.abs(data[i] - ks[j]);
if (dist <= min) {
min = dist;
_idx = j;
}
}
idxs[i] = _idx; // Index of the selected centroid for that value
count[_idx]++; // Number of values for this centroid
}
// Recalculate centroids
var sum = [],
old = [],
dif = 0;
for (var _j = 0; _j < k; _j++) {
// Multidimensional or unidimensional
sum[_j] = multi ? init(vlen, 0, sum[_j]) : 0;
old[_j] = ks[_j];
}
// If multidimensional
if (multi) {
for (var _j2 = 0; _j2 < k; _j2++) {
ks[_j2] = [];
} // Sum values and count for each centroid
for (var _i = 0; _i < len; _i++) {
var _idx2 = idxs[_i],
// Centroid for that item
vsum = sum[_idx2],
// Sum values for this centroid
vect = data[_i]; // Current vector
// Accumulate value on the centroid for current vector
for (var h = 0; h < vlen; h++) {
vsum[h] += vect[h];
}
}
// Calculate the average for each centroid
conv = true;
for (var _j3 = 0; _j3 < k; _j3++) {
var ksj = ks[_j3],
// Current centroid
sumj = sum[_j3],
// Accumulated centroid values
oldj = old[_j3],
// Old centroid value
cj = count[_j3]; // Number of elements for this centroid
// New average
for (var _h = 0; _h < vlen; _h++) {
ksj[_h] = sumj[_h] / cj || 0; // New centroid
}
// Find if centroids have moved
if (conv) {
for (var _h2 = 0; _h2 < vlen; _h2++) {
if (oldj[_h2] != ksj[_h2]) {
conv = false;
break;
}
}
}
}
}
// If unidimensional
else {
// Sum values and count for each centroid
for (var _i2 = 0; _i2 < len; _i2++) {
var _idx3 = idxs[_i2];
sum[_idx3] += data[_i2];
}
// Calculate the average for each centroid
for (var _j4 = 0; _j4 < k; _j4++) {
ks[_j4] = sum[_j4] / count[_j4] || 0; // New centroid
}
// Find if centroids have moved
conv = true;
for (var _j5 = 0; _j5 < k; _j5++) {
if (old[_j5] != ks[_j5]) {
conv = false;
break;
}
}
}
conv = conv || --it <= 0;
} while (!conv);
return {
it: MAX - it,
k: k,
idxs: idxs,
centroids: ks
};
}
module.exports = skmeans;
//# sourceMappingURL=main.js.map

1
frontend/node_modules/skmeans/dist/node/main.js.map generated vendored Normal file

File diff suppressed because one or more lines are too long