Neural Network Classification

HTML

<script src="http://www.numericjs.com/lib/numeric-1.2.3.min.js"></script>
<script src="http://underscorejs.org/underscore-min.js"></script>
<body>
    <div id="toolbar">Alpha:
        <input id="alpha" type="text" value="0.1" size="10" />Lambda:
        <input id="lambda" type="text" value="0.0" size="10" />Group:
        <select id="group">
            <option value="0">Blue</option>
            <option value="1">Orange</option>
        </select>
    </div>
    <div id="content">
        <canvas id="canvas"></canvas>
    </div>
</body>

CSS

#toolbar, #content {
    width: 400px;
    margin: 0;
    padding: 0;
    text-align: center;
}
body, input, select {
    font: bold 11px arial, sans-serif;
}

JavaScript

features = ["OL","EXT","INT"]
means = [16.798114754098364,12.08909836065574,7.3426229508196705]
stds = [9.265143061714943,6.831733573060062,4.4118474631566515]

Theta1 = [
    [7.020348739177122,5.877332193633846,-1.256338864235908],
    [7.132300667366502,4.69849440104046,-4.125962000621705],
    [-1.5814490219262287,10.243831873464481,10.278311226103114],
    [-7.00856641902047,-12.074712722703294,-6.434600596157294]
];

Theta2 = [
    [15.17136700444755],
    [-7.931065383676173],
    [-15.241630148029987],
    [6.856952260956779]
];

var sum = numeric.sum,
    mul = numeric.mul,
    div = numeric.div,
    dot = numeric.dot,
    add = numeric.add,
    sub = numeric.sub,
    neg = numeric.neg,
    log = numeric.log,
    pow = numeric.pow,
    sqrt = numeric.sqrt,
    abs = numeric.abs,
    min = numeric.min,
    max = numeric.max,
    transpose = numeric.transpose;

function fmincg(f, X, length) {
    var mul = numeric.mul,
        dot = numeric.dot,
        add = numeric.add,
        sub = numeric.sub,
        min = Math.min,
        max = Math.max,
        abs = Math.abs,
        sqrt = Math.sqrt,
        realmin = Number.MIN_VALUE,
        EXT = 3,
        RHO = 0.01,
        SIG = 0.5,
        INT = 0.1,
        MAX = 20,
        RATIO = 100,
        M = 0,
        i = 0,
        red = 1,
        ls_failed = 0,
        evaluateCost = f(X),
        f1 = evaluateCost.cost,
        df1 = evaluateCost.gradient;
    i = i + (length < 0 ? 1 : 0);
    var s = mul(df1, -1);
    var d1 = dot(mul(s, -1), s);
    var z1 = red / (1 - d1);
    while (i < abs(length)) {
        i = i + (length > 0 ? 1 : 0);
        var X0 = X;
        var f0 = f1;
        var df0 = df1;
        X = add(X, mul(s, z1));
        var evaluateCost2 = f(X);
        var f2 = evaluateCost2.cost;
        var df2 = evaluateCost2.gradient;
        i = i + (length < 0 ? 1 : 0);
        var d2 = dot(df2, s);
        var f3 = f1;
        var d3 = d1;
        var z3 = -z1;
        if (length > 0) {
   ...