Neural Network Classification
by wybiral
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
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) {
M = MAX;
} else {
M = min(MAX, -length - i);
}
var success = 0;
var limit = -1;
while (true) {
while (((f2 > f1 + z1 * RHO * d1) | (d2 > -SIG * d1)) && (M > 0)) {
limit = z1;
var z2 = 0;
var A = 0;
var B = 0;
if (f2 > f1) {
z2 = z3 - (0.5 * d3 * z3 * z3) / (d3 * z3 + f2 - f3);
} else {
A = 6 * (f2 - f3) / z3 + 3 * (d2 + d3);
...