ml-som
Version:
Self-organizing map (SOM) / Kohonen network
77 lines (61 loc) • 1.38 kB
JavaScript
var SOM = require('../');
function rnd(n) {
return Math.floor(Math.random()*n);
}
function rndColors(n) {
var i = 0,
a = new Array(n),
o;
for(; i < n; i++) {
o = {
r: rnd(256),
g: rnd(256),
b: rnd(256)
};
a[i] = o;
}
return a;
}
function getChart(theSet, prediction) {
var chart = {
x: [],
y: [],
info: []
};
var result = {
type: 'chart',
value: {
data: [chart]
}
};
var i = 0,
l = theSet.length;
for (; i < l; i++) {
chart.x[i] = prediction[i][0] + prediction[i][2][0];
chart.y[i] = prediction[i][1] + prediction[i][2][1];
chart.info[i] = theSet[i]
}
return result;
}
var trainingSet = rndColors(10000);
var testSet = rndColors(1000);
var som = new SOM(20, 20, {
iterations: 10,
fields: [{
name: 'r',
range: [0, 255]
}, {
name: 'g',
range: [0, 255]
}, {
name: 'b',
range: [0, 255]
}]
});
som.train(trainingSet);
//var predTraining = som.predict(true);
var predTest = som.predict(testSet, true);
var model = som.export();
var fs = require('fs');
fs.writeFileSync('./model.json', JSON.stringify(model));
fs.writeFileSync('./test.json', JSON.stringify(getChart(testSet, predTest)));