LJ/www/trckr/js/emotion_classifier.js

72 lines
1.8 KiB
JavaScript

"use strict";
var emotionClassifier = function() {
var previousParameters = [];
var classifier = {};
var emotions = [];
var coefficient_length;
this.getEmotions = function() {
return emotions;
}
this.init = function(model) {
// load it
for (var m in model) {
emotions.push(m);
classifier[m] = {};
classifier[m]['bias'] = model[m]['bias'];
classifier[m]['coefficients'] = model[m]['coefficients'];
}
coefficient_length = classifier[emotions[0]]['coefficients'].length;
}
this.getBlank = function() {
var prediction = [];
for (var j = 0;j < emotions.length;j++) {
prediction[j] = {"emotion" : emotions[j], "value" : 0.0};
}
return prediction;
}
this.predict = function(parameters) {
var prediction = [];
for (var j = 0;j < emotions.length;j++) {
var e = emotions[j];
var score = classifier[e].bias;
for (var i = 0;i < coefficient_length;i++) {
score += classifier[e].coefficients[i]*parameters[i+6];
}
prediction[j] = {"emotion" : e, "value" : 0.0};
prediction[j]['value'] = 1.0/(1.0 + Math.exp(-score));
}
return prediction;
}
this.meanPredict = function (parameters) {
// store to array of 10 previous parameters
previousParameters.splice(0, previousParameters.length == 10 ? 1 : 0);
previousParameters.push(parameters.slice(0));
if (previousParameters.length > 9) {
// calculate mean of parameters?
var meanParameters = [];
for (var i = 0;i < parameters.length;i++) {
meanParameters[i] = 0;
}
for (var i = 0;i < previousParameters.length;i++) {
for (var j = 0;j < parameters.length;j++) {
meanParameters[j] += previousParameters[i][j];
}
}
for (var i = 0;i < parameters.length;i++) {
meanParameters[i] /= 10;
}
// calculate logistic regression
return this.predict(meanParameters);
} else {
return false;
}
}
}