in src/dataset.ts [95:134]
export function regressGaussian(numSamples: number, noise: number):
Example2D[] {
let points: Example2D[] = [];
let labelScale = d3.scale.linear()
.domain([0, 2])
.range([1, 0])
.clamp(true);
let gaussians = [
[-4, 2.5, 1],
[0, 2.5, -1],
[4, 2.5, 1],
[-4, -2.5, -1],
[0, -2.5, 1],
[4, -2.5, -1]
];
function getLabel(x, y) {
// Choose the one that is maximum in abs value.
let label = 0;
gaussians.forEach(([cx, cy, sign]) => {
let newLabel = sign * labelScale(dist({x, y}, {x: cx, y: cy}));
if (Math.abs(newLabel) > Math.abs(label)) {
label = newLabel;
}
});
return label;
}
let radius = 6;
for (let i = 0; i < numSamples; i++) {
let x = randUniform(-radius, radius);
let y = randUniform(-radius, radius);
let noiseX = randUniform(-radius, radius) * noise;
let noiseY = randUniform(-radius, radius) * noise;
let label = getLabel(x + noiseX, y + noiseY);
points.push({x, y, label});
};
return points;
}