neataptic
Version:
Architecture-free neural network library with genetic algorithm implementations
74 lines (65 loc) • 2.17 kB
JavaScript
/*******************************************************************************
COST FUNCTIONS
*******************************************************************************/
// https://en.wikipedia.org/wiki/Loss_function
var cost = {
// Cross entropy error
CROSS_ENTROPY: function (target, output) {
var error = 0;
for (var i = 0; i < output.length; i++) {
// Avoid negative and zero numbers, use 1e-15 http://bit.ly/2p5W29A
error -= target[i] * Math.log(Math.max(output[i], 1e-15)) + (1 - target[i]) * Math.log(1 - Math.max(output[i], 1e-15));
}
return error / output.length;
},
// Mean Squared Error
MSE: function (target, output) {
var error = 0;
for (var i = 0; i < output.length; i++) {
error += Math.pow(target[i] - output[i], 2);
}
return error / output.length;
},
// Binary error
BINARY: function (target, output) {
var misses = 0;
for (var i = 0; i < output.length; i++) {
misses += Math.round(target[i] * 2) !== Math.round(output[i] * 2);
}
return misses;
},
// Mean Absolute Error
MAE: function (target, output) {
var error = 0;
for (var i = 0; i < output.length; i++) {
error += Math.abs(target[i] - output[i]);
}
return error / output.length;
},
// Mean Absolute Percentage Error
MAPE: function (target, output) {
var error = 0;
for (var i = 0; i < output.length; i++) {
error += Math.abs((output[i] - target[i]) / Math.max(target[i], 1e-15));
}
return error / output.length;
},
// Mean Squared Logarithmic Error
MSLE: function (target, output) {
var error = 0;
for (var i = 0; i < output.length; i++) {
error += Math.log(Math.max(target[i], 1e-15)) - Math.log(Math.max(output[i], 1e-15));
}
return error;
},
// Hinge loss, for classifiers
HINGE: function (target, output) {
var error = 0;
for (var i = 0; i < output.length; i++) {
error += Math.max(0, 1 - target[i] * output[i]);
}
return error;
}
};
/* Export */
module.exports = cost;