neurex
Version:
A trainable neural network in NodeJS. Designed for ease of implementation and ANN modelling
109 lines (95 loc) • 2.56 kB
JavaScript
/**
House pricing dataset for regression task
credits to: Patrick Metzdorf for the dataset
https://medium.com/@pat_metzdorf/building-a-basic-neural-net-using-javascript-1f554780dc60
*/
const normalize = (value, min, max) => (value - min) / (max - min);
function denormalize(value, min, max) {
if ([value, min, max].some(v => typeof v !== 'number' || isNaN(v))) {
console.error("Bad denormalize input:", value, min, max);
return NaN;
}
return value * (max - min) + min;
}
// [size (sq ft), bedrooms, price ($)]
const raw = [
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
];
const newHouses = [
[],
[],
[]
];
const sizeMin = Math.min(...raw.map(d => d[0]));
const sizeMax = Math.max(...raw.map(d => d[0]));
const bedMin = Math.min(...raw.map(d => d[1]));
const bedMax = Math.max(...raw.map(d => d[1]));
const priceMin = Math.min(...raw.map(d => d[2]));
const priceMax = Math.max(...raw.map(d => d[2]));
const trainX = raw.map(([size, bed]) => [normalize(size, sizeMin, sizeMax), normalize(bed, bedMin, bedMax)]);
const trainY = raw.map(([_, __, price]) => normalize(price, priceMin, priceMax));
const testX = newHouses.map(([size, bed]) => [
normalize(size, sizeMin, sizeMax),
normalize(bed, bedMin, bedMax)
]);
module.exports = {
trainX,
trainY,
testX,
priceMin,
priceMax,
normalize,
denormalize
};