This example uses a database of a complete set of possible board configurations at the end of tic-tac-toe games, where "x" is assumed to have played first. The target concept is "win for x" (i.e., true when "x" has one of 8 possible ways to create a "three-in-a-row").
There are nine nominal input attributes for each square on the tic-tac-toe board and are encoded such that 0=player x has taken, 1=player o has taken, 2=blank.
The predicted atribute is a win or loose at tic-tac-toe. For this example the first 626 observations are a win and the next 332 are loss.
The structure of the network consists of 27 input nodes and three layers, with five perceptrons in the first hidden layer, three perceptrons in the second hidden layer, and one perceptron in the output layer.
There are a total of 162 weights in this network. The activations functions are logistic for all layers. Since the target output is binary classification the logistic activation function must be used in the output layer. Training is conducted using the quasi-newton trainer using the binary entropy error function provided by the BinaryClassification
class.
import com.imsl.datamining.neural.*;
import java.io.*;
import java.util.logging.*;
import com.imsl.math.*;
import com.imsl.stat.Random;
//***************************************************************************
// Three Layer Feed-Forward Network with 4 inputs, all
// continuous, and 2 classification categories.
//
// new classification training_ex4.c
//
// Three Layer Feed-Forward Network with 4 inputs, all
// continuous, and 2 classification categories.
//
// This database encodes the complete set of possible board configurations
// at the end of tic-tac-toe games, where "x" is assumed to have played
// first. The target concept is "win for x" (i.e., true when "x" has one
// of 8 possible ways to create a "three-in-a-row").
//
// Predicted attribute: win or loose at tic-tac-toe
// First 626 obs are positive (win) and the next 332 are negative (loss)
//
// Input Attributes (10 categorical Attributes)
// Attribute Information:
// (0=player x has taken, 1=player o has taken, 2=blank)
//
// 1. top-left-square: {x,o,b}
// 2. top-middle-square: {x,o,b}
// 3. top-right-square: {x,o,b}
// 4. middle-left-square: {x,o,b}
// 5. middle-middle-square: {x,o,b}
// 6. middle-right-square: {x,o,b}
// 7. bottom-left-square: {x,o,b}
// 8. bottom-middle-square: {x,o,b}
// 9. bottom-right-square: {x,o,b}
// 10. Class: {positive,negative}
//***************************************************************************
public class BinaryClassificationEx2 implements Serializable {
private static int nObs = 958; // number of training patterns
private static int nInputs = 27; // 9 nominal coded as 0=x, 1=O, 2=blank
private static int nCategorical = 27;// seven categorical attributes
private static int nContinuous = 0; // two continuous input attribute
private static int nOutputs = 1; // one continuous output (nClasses=2)
private static int nLayers = 3; // number of perceptron layers
private static int nPerceptrons1 = 5;// perceptrons in 1st hidden layer
private static int nPerceptrons2 = 3;// perceptrons in 2nd hidden layer
private static boolean trace = true; // Turns on/off training log
private static Activation hiddenLayerActivation = Activation.LOGISTIC;
private static Activation outputLayerActivation = Activation.LOGISTIC;
private static int[][] data = {
{0, 0, 0, 0, 1, 1, 0, 1, 1}, {0, 0, 0, 0, 1, 1, 1, 0, 1},
{0, 0, 0, 0, 1, 1, 1, 1, 0}, {0, 0, 0, 0, 1, 1, 1, 2, 2},
{0, 0, 0, 0, 1, 1, 2, 1, 2}, {0, 0, 0, 0, 1, 1, 2, 2, 1},
{0, 0, 0, 0, 1, 2, 1, 1, 2}, {0, 0, 0, 0, 1, 2, 1, 2, 1},
{0, 0, 0, 0, 1, 2, 2, 1, 1}, {0, 0, 0, 0, 2, 1, 1, 1, 2},
{0, 0, 0, 0, 2, 1, 1, 2, 1}, {0, 0, 0, 0, 2, 1, 2, 1, 1},
{0, 0, 0, 1, 0, 1, 0, 1, 1}, {0, 0, 0, 1, 0, 1, 1, 0, 1},
{0, 0, 0, 1, 0, 1, 1, 1, 0}, {0, 0, 0, 1, 0, 1, 1, 2, 2},
{0, 0, 0, 1, 0, 1, 2, 1, 2}, {0, 0, 0, 1, 0, 1, 2, 2, 1},
{0, 0, 0, 1, 0, 2, 1, 1, 2}, {0, 0, 0, 1, 0, 2, 1, 2, 1},
{0, 0, 0, 1, 0, 2, 2, 1, 1}, {0, 0, 0, 1, 1, 0, 0, 1, 1},
{0, 0, 0, 1, 1, 0, 1, 0, 1}, {0, 0, 0, 1, 1, 0, 1, 1, 0},
{0, 0, 0, 1, 1, 0, 1, 2, 2}, {0, 0, 0, 1, 1, 0, 2, 1, 2},
{0, 0, 0, 1, 1, 0, 2, 2, 1}, {0, 0, 0, 1, 1, 2, 0, 1, 2},
{0, 0, 0, 1, 1, 2, 0, 2, 1}, {0, 0, 0, 1, 1, 2, 1, 0, 2},
{0, 0, 0, 1, 1, 2, 1, 2, 0}, {0, 0, 0, 1, 1, 2, 2, 0, 1},
{0, 0, 0, 1, 1, 2, 2, 1, 0}, {0, 0, 0, 1, 1, 2, 2, 2, 2},
{0, 0, 0, 1, 2, 0, 1, 1, 2}, {0, 0, 0, 1, 2, 0, 1, 2, 1},
{0, 0, 0, 1, 2, 0, 2, 1, 1}, {0, 0, 0, 1, 2, 1, 0, 1, 2},
{0, 0, 0, 1, 2, 1, 0, 2, 1}, {0, 0, 0, 1, 2, 1, 1, 0, 2},
{0, 0, 0, 1, 2, 1, 1, 2, 0}, {0, 0, 0, 1, 2, 1, 2, 0, 1},
{0, 0, 0, 1, 2, 1, 2, 1, 0}, {0, 0, 0, 1, 2, 1, 2, 2, 2},
{0, 0, 0, 1, 2, 2, 0, 1, 1}, {0, 0, 0, 1, 2, 2, 1, 0, 1},
{0, 0, 0, 1, 2, 2, 1, 1, 0}, {0, 0, 0, 1, 2, 2, 1, 2, 2},
{0, 0, 0, 1, 2, 2, 2, 1, 2}, {0, 0, 0, 1, 2, 2, 2, 2, 1},
{0, 0, 0, 2, 0, 1, 1, 1, 2}, {0, 0, 0, 2, 0, 1, 1, 2, 1},
{0, 0, 0, 2, 0, 1, 2, 1, 1}, {0, 0, 0, 2, 1, 0, 1, 1, 2},
{0, 0, 0, 2, 1, 0, 1, 2, 1}, {0, 0, 0, 2, 1, 0, 2, 1, 1},
{0, 0, 0, 2, 1, 1, 0, 1, 2}, {0, 0, 0, 2, 1, 1, 0, 2, 1},
{0, 0, 0, 2, 1, 1, 1, 0, 2}, {0, 0, 0, 2, 1, 1, 1, 2, 0},
{0, 0, 0, 2, 1, 1, 2, 0, 1}, {0, 0, 0, 2, 1, 1, 2, 1, 0},
{0, 0, 0, 2, 1, 1, 2, 2, 2}, {0, 0, 0, 2, 1, 2, 0, 1, 1},
{0, 0, 0, 2, 1, 2, 1, 0, 1}, {0, 0, 0, 2, 1, 2, 1, 1, 0},
{0, 0, 0, 2, 1, 2, 1, 2, 2}, {0, 0, 0, 2, 1, 2, 2, 1, 2},
{0, 0, 0, 2, 1, 2, 2, 2, 1}, {0, 0, 0, 2, 2, 1, 0, 1, 1},
{0, 0, 0, 2, 2, 1, 1, 0, 1}, {0, 0, 0, 2, 2, 1, 1, 1, 0},
{0, 0, 0, 2, 2, 1, 1, 2, 2}, {0, 0, 0, 2, 2, 1, 2, 1, 2},
{0, 0, 0, 2, 2, 1, 2, 2, 1}, {0, 0, 0, 2, 2, 2, 1, 1, 2},
{0, 0, 0, 2, 2, 2, 1, 2, 1}, {0, 0, 0, 2, 2, 2, 2, 1, 1},
{0, 0, 1, 0, 0, 1, 1, 1, 0}, {0, 0, 1, 0, 1, 0, 0, 1, 1},
{0, 0, 1, 0, 1, 1, 0, 1, 0}, {0, 0, 1, 0, 1, 1, 0, 2, 2},
{0, 0, 1, 0, 1, 2, 0, 1, 2}, {0, 0, 1, 0, 1, 2, 0, 2, 1},
{0, 0, 1, 0, 2, 1, 0, 1, 2}, {0, 0, 1, 0, 2, 2, 0, 1, 1},
{0, 0, 1, 1, 0, 0, 1, 0, 1}, {0, 0, 1, 1, 0, 0, 1, 1, 0},
{0, 0, 1, 1, 0, 1, 0, 1, 0}, {0, 0, 1, 1, 0, 1, 1, 0, 0},
{0, 0, 1, 1, 0, 1, 2, 0, 2}, {0, 0, 1, 1, 0, 1, 2, 2, 0},
{0, 0, 1, 1, 0, 2, 1, 0, 2}, {0, 0, 1, 1, 0, 2, 1, 2, 0},
{0, 0, 1, 1, 0, 2, 2, 0, 1}, {0, 0, 1, 1, 0, 2, 2, 1, 0},
{0, 0, 1, 2, 0, 1, 1, 0, 2}, {0, 0, 1, 2, 0, 1, 1, 2, 0},
{0, 0, 1, 2, 0, 1, 2, 1, 0}, {0, 0, 1, 2, 0, 2, 1, 0, 1},
{0, 0, 1, 2, 0, 2, 1, 1, 0}, {0, 0, 2, 0, 1, 1, 0, 1, 2},
{0, 0, 2, 0, 1, 1, 0, 2, 1}, {0, 0, 2, 0, 1, 2, 0, 1, 1},
{0, 0, 2, 0, 2, 1, 0, 1, 1}, {0, 0, 2, 1, 0, 1, 1, 0, 2},
{0, 0, 2, 1, 0, 1, 1, 2, 0}, {0, 0, 2, 1, 0, 1, 2, 0, 1},
{0, 0, 2, 1, 0, 1, 2, 1, 0}, {0, 0, 2, 1, 0, 2, 1, 0, 1},
{0, 0, 2, 1, 0, 2, 1, 1, 0}, {0, 0, 2, 2, 0, 1, 1, 0, 1},
{0, 0, 2, 2, 0, 1, 1, 1, 0}, {0, 1, 0, 0, 0, 1, 0, 1, 1},
{0, 1, 0, 0, 0, 1, 1, 1, 0}, {0, 1, 0, 0, 1, 1, 0, 0, 1},
{0, 1, 0, 0, 1, 1, 0, 2, 2}, {0, 1, 0, 0, 1, 2, 0, 2, 1},
{0, 1, 0, 0, 2, 1, 0, 1, 2}, {0, 1, 0, 0, 2, 1, 0, 2, 1},
{0, 1, 0, 0, 2, 2, 0, 1, 1}, {0, 1, 0, 1, 0, 0, 0, 1, 1},
{0, 1, 0, 1, 0, 0, 1, 1, 0}, {0, 1, 0, 1, 0, 1, 0, 0, 1},
{0, 1, 0, 1, 0, 1, 0, 1, 0}, {0, 1, 0, 1, 0, 1, 0, 2, 2},
{0, 1, 0, 1, 0, 1, 1, 0, 0}, {0, 1, 0, 1, 0, 1, 2, 2, 0},
{0, 1, 0, 1, 0, 2, 0, 1, 2}, {0, 1, 0, 1, 0, 2, 0, 2, 1},
{0, 1, 0, 1, 0, 2, 1, 2, 0}, {0, 1, 0, 1, 0, 2, 2, 1, 0},
{0, 1, 0, 1, 1, 0, 1, 0, 0}, {0, 1, 0, 1, 1, 0, 2, 2, 0},
{0, 1, 0, 1, 2, 0, 1, 2, 0}, {0, 1, 0, 1, 2, 0, 2, 1, 0},
{0, 1, 0, 2, 0, 1, 0, 1, 2}, {0, 1, 0, 2, 0, 1, 0, 2, 1},
{0, 1, 0, 2, 0, 1, 1, 2, 0}, {0, 1, 0, 2, 0, 1, 2, 1, 0},
{0, 1, 0, 2, 0, 2, 0, 1, 1}, {0, 1, 0, 2, 0, 2, 1, 1, 0},
{0, 1, 0, 2, 1, 0, 1, 2, 0}, {0, 1, 0, 2, 2, 0, 1, 1, 0},
{0, 1, 1, 0, 0, 0, 0, 1, 1}, {0, 1, 1, 0, 0, 0, 1, 0, 1},
{0, 1, 1, 0, 0, 0, 1, 1, 0}, {0, 1, 1, 0, 0, 0, 1, 2, 2},
{0, 1, 1, 0, 0, 0, 2, 1, 2}, {0, 1, 1, 0, 0, 0, 2, 2, 1},
{0, 1, 1, 0, 0, 1, 0, 1, 0}, {0, 1, 1, 0, 0, 1, 0, 2, 2},
{0, 1, 1, 0, 0, 1, 1, 0, 0}, {0, 1, 1, 0, 0, 1, 2, 2, 0},
{0, 1, 1, 0, 0, 2, 0, 1, 2}, {0, 1, 1, 0, 0, 2, 0, 2, 1},
{0, 1, 1, 0, 0, 2, 1, 2, 0}, {0, 1, 1, 0, 0, 2, 2, 1, 0},
{0, 1, 1, 0, 1, 0, 0, 0, 1}, {0, 1, 1, 0, 1, 0, 0, 2, 2},
{0, 1, 1, 0, 1, 1, 0, 0, 0}, {0, 1, 1, 0, 1, 2, 0, 0, 2},
{0, 1, 1, 0, 1, 2, 0, 2, 0}, {0, 1, 1, 0, 2, 0, 0, 1, 2},
{0, 1, 1, 0, 2, 0, 0, 2, 1}, {0, 1, 1, 0, 2, 1, 0, 0, 2},
{0, 1, 1, 0, 2, 1, 0, 2, 0}, {0, 1, 1, 0, 2, 2, 0, 0, 1},
{0, 1, 1, 0, 2, 2, 0, 1, 0}, {0, 1, 1, 0, 2, 2, 0, 2, 2},
{0, 1, 1, 1, 0, 0, 0, 1, 0}, {0, 1, 1, 1, 0, 0, 1, 0, 0},
{0, 1, 1, 1, 0, 0, 2, 2, 0}, {0, 1, 1, 1, 0, 1, 0, 0, 0},
{0, 1, 1, 1, 0, 2, 0, 2, 0}, {0, 1, 1, 1, 0, 2, 2, 0, 0},
{0, 1, 1, 1, 1, 0, 0, 0, 0}, {0, 1, 1, 1, 2, 2, 0, 0, 0},
{0, 1, 1, 2, 0, 0, 1, 2, 0}, {0, 1, 1, 2, 0, 0, 2, 1, 0},
{0, 1, 1, 2, 0, 1, 0, 2, 0}, {0, 1, 1, 2, 0, 1, 2, 0, 0},
{0, 1, 1, 2, 0, 2, 0, 1, 0}, {0, 1, 1, 2, 0, 2, 1, 0, 0},
{0, 1, 1, 2, 0, 2, 2, 2, 0}, {0, 1, 1, 2, 1, 2, 0, 0, 0},
{0, 1, 1, 2, 2, 1, 0, 0, 0}, {0, 1, 2, 0, 0, 0, 1, 1, 2},
{0, 1, 2, 0, 0, 0, 1, 2, 1}, {0, 1, 2, 0, 0, 0, 2, 1, 1},
{0, 1, 2, 0, 0, 1, 0, 1, 2}, {0, 1, 2, 0, 0, 1, 0, 2, 1},
{0, 1, 2, 0, 0, 1, 1, 2, 0}, {0, 1, 2, 0, 0, 1, 2, 1, 0},
{0, 1, 2, 0, 0, 2, 0, 1, 1}, {0, 1, 2, 0, 0, 2, 1, 1, 0},
{0, 1, 2, 0, 1, 0, 0, 2, 1}, {0, 1, 2, 0, 1, 1, 0, 0, 2},
{0, 1, 2, 0, 1, 1, 0, 2, 0}, {0, 1, 2, 0, 1, 2, 0, 0, 1},
{0, 1, 2, 0, 1, 2, 0, 2, 2}, {0, 1, 2, 0, 2, 0, 0, 1, 1},
{0, 1, 2, 0, 2, 1, 0, 0, 1}, {0, 1, 2, 0, 2, 1, 0, 1, 0},
{0, 1, 2, 0, 2, 1, 0, 2, 2}, {0, 1, 2, 0, 2, 2, 0, 1, 2},
{0, 1, 2, 0, 2, 2, 0, 2, 1}, {0, 1, 2, 1, 0, 0, 1, 2, 0},
{0, 1, 2, 1, 0, 0, 2, 1, 0}, {0, 1, 2, 1, 0, 1, 0, 2, 0},
{0, 1, 2, 1, 0, 1, 2, 0, 0}, {0, 1, 2, 1, 0, 2, 0, 1, 0},
{0, 1, 2, 1, 0, 2, 1, 0, 0}, {0, 1, 2, 1, 0, 2, 2, 2, 0},
{0, 1, 2, 1, 1, 2, 0, 0, 0}, {0, 1, 2, 1, 2, 1, 0, 0, 0},
{0, 1, 2, 2, 0, 0, 1, 1, 0}, {0, 1, 2, 2, 0, 1, 0, 1, 0},
{0, 1, 2, 2, 0, 1, 1, 0, 0}, {0, 1, 2, 2, 0, 1, 2, 2, 0},
{0, 1, 2, 2, 0, 2, 1, 2, 0}, {0, 1, 2, 2, 0, 2, 2, 1, 0},
{0, 1, 2, 2, 1, 1, 0, 0, 0}, {0, 2, 0, 0, 1, 1, 0, 1, 2},
{0, 2, 0, 0, 1, 1, 0, 2, 1}, {0, 2, 0, 0, 1, 2, 0, 1, 1},
{0, 2, 0, 0, 2, 1, 0, 1, 1}, {0, 2, 0, 1, 0, 1, 0, 1, 2},
{0, 2, 0, 1, 0, 1, 0, 2, 1}, {0, 2, 0, 1, 0, 1, 1, 2, 0},
{0, 2, 0, 1, 0, 1, 2, 1, 0}, {0, 2, 0, 1, 0, 2, 0, 1, 1},
{0, 2, 0, 1, 0, 2, 1, 1, 0}, {0, 2, 0, 1, 1, 0, 1, 2, 0},
{0, 2, 0, 1, 1, 0, 2, 1, 0}, {0, 2, 0, 1, 2, 0, 1, 1, 0},
{0, 2, 0, 2, 0, 1, 0, 1, 1}, {0, 2, 0, 2, 0, 1, 1, 1, 0},
{0, 2, 0, 2, 1, 0, 1, 1, 0}, {0, 2, 1, 0, 0, 0, 1, 1, 2},
{0, 2, 1, 0, 0, 0, 1, 2, 1}, {0, 2, 1, 0, 0, 0, 2, 1, 1},
{0, 2, 1, 0, 0, 1, 0, 1, 2}, {0, 2, 1, 0, 0, 1, 1, 2, 0},
{0, 2, 1, 0, 0, 1, 2, 1, 0}, {0, 2, 1, 0, 0, 2, 0, 1, 1},
{0, 2, 1, 0, 0, 2, 1, 1, 0}, {0, 2, 1, 0, 1, 0, 0, 1, 2},
{0, 2, 1, 0, 1, 0, 0, 2, 1}, {0, 2, 1, 0, 1, 1, 0, 0, 2},
{0, 2, 1, 0, 1, 1, 0, 2, 0}, {0, 2, 1, 0, 1, 2, 0, 0, 1},
{0, 2, 1, 0, 1, 2, 0, 1, 0}, {0, 2, 1, 0, 1, 2, 0, 2, 2},
{0, 2, 1, 0, 2, 0, 0, 1, 1}, {0, 2, 1, 0, 2, 1, 0, 1, 0},
{0, 2, 1, 0, 2, 1, 0, 2, 2}, {0, 2, 1, 0, 2, 2, 0, 1, 2},
{0, 2, 1, 0, 2, 2, 0, 2, 1}, {0, 2, 1, 1, 0, 0, 1, 2, 0},
{0, 2, 1, 1, 0, 0, 2, 1, 0}, {0, 2, 1, 1, 0, 1, 0, 2, 0},
{0, 2, 1, 1, 0, 1, 2, 0, 0}, {0, 2, 1, 1, 0, 2, 0, 1, 0},
{0, 2, 1, 1, 0, 2, 1, 0, 0}, {0, 2, 1, 1, 0, 2, 2, 2, 0},
{0, 2, 1, 1, 1, 2, 0, 0, 0}, {0, 2, 1, 1, 2, 1, 0, 0, 0},
{0, 2, 1, 2, 0, 0, 1, 1, 0}, {0, 2, 1, 2, 0, 1, 0, 1, 0},
{0, 2, 1, 2, 0, 1, 1, 0, 0}, {0, 2, 1, 2, 0, 1, 2, 2, 0},
{0, 2, 1, 2, 0, 2, 1, 2, 0}, {0, 2, 1, 2, 0, 2, 2, 1, 0},
{0, 2, 1, 2, 1, 1, 0, 0, 0}, {0, 2, 2, 0, 0, 1, 0, 1, 1},
{0, 2, 2, 0, 0, 1, 1, 1, 0}, {0, 2, 2, 0, 1, 0, 0, 1, 1},
{0, 2, 2, 0, 1, 1, 0, 0, 1}, {0, 2, 2, 0, 1, 1, 0, 1, 0},
{0, 2, 2, 0, 1, 1, 0, 2, 2}, {0, 2, 2, 0, 1, 2, 0, 1, 2},
{0, 2, 2, 0, 1, 2, 0, 2, 1}, {0, 2, 2, 0, 2, 1, 0, 1, 2},
{0, 2, 2, 0, 2, 1, 0, 2, 1}, {0, 2, 2, 0, 2, 2, 0, 1, 1},
{0, 2, 2, 1, 0, 0, 1, 1, 0}, {0, 2, 2, 1, 0, 1, 0, 1, 0},
{0, 2, 2, 1, 0, 1, 1, 0, 0}, {0, 2, 2, 1, 0, 1, 2, 2, 0},
{0, 2, 2, 1, 0, 2, 1, 2, 0}, {0, 2, 2, 1, 0, 2, 2, 1, 0},
{0, 2, 2, 2, 0, 1, 1, 2, 0}, {0, 2, 2, 2, 0, 1, 2, 1, 0},
{0, 2, 2, 2, 0, 2, 1, 1, 0}, {1, 0, 0, 0, 0, 1, 0, 1, 1},
{1, 0, 0, 0, 0, 1, 1, 0, 1}, {1, 0, 0, 0, 1, 0, 1, 1, 0},
{1, 0, 0, 1, 0, 0, 0, 1, 1}, {1, 0, 0, 1, 0, 1, 0, 0, 1},
{1, 0, 0, 1, 0, 1, 0, 1, 0}, {1, 0, 0, 1, 0, 1, 0, 2, 2},
{1, 0, 0, 1, 0, 1, 2, 0, 2}, {1, 0, 0, 1, 0, 2, 0, 1, 2},
{1, 0, 0, 1, 0, 2, 0, 2, 1}, {1, 0, 0, 1, 0, 2, 2, 0, 1},
{1, 0, 0, 1, 1, 0, 0, 1, 0}, {1, 0, 0, 1, 1, 0, 2, 2, 0},
{1, 0, 0, 1, 2, 0, 2, 1, 0}, {1, 0, 0, 2, 0, 1, 0, 1, 2},
{1, 0, 0, 2, 0, 1, 0, 2, 1}, {1, 0, 0, 2, 0, 1, 1, 0, 2},
{1, 0, 0, 2, 0, 1, 2, 0, 1}, {1, 0, 0, 2, 0, 2, 0, 1, 1},
{1, 0, 0, 2, 0, 2, 1, 0, 1}, {1, 0, 0, 2, 1, 0, 1, 2, 0},
{1, 0, 0, 2, 1, 0, 2, 1, 0}, {1, 0, 0, 2, 2, 0, 1, 1, 0},
{1, 0, 1, 0, 0, 0, 0, 1, 1}, {1, 0, 1, 0, 0, 0, 1, 0, 1},
{1, 0, 1, 0, 0, 0, 1, 1, 0}, {1, 0, 1, 0, 0, 0, 1, 2, 2},
{1, 0, 1, 0, 0, 0, 2, 1, 2}, {1, 0, 1, 0, 0, 0, 2, 2, 1},
{1, 0, 1, 0, 0, 1, 1, 0, 0}, {1, 0, 1, 0, 0, 1, 2, 0, 2},
{1, 0, 1, 0, 0, 2, 1, 0, 2}, {1, 0, 1, 0, 0, 2, 2, 0, 1},
{1, 0, 1, 0, 1, 1, 0, 0, 0}, {1, 0, 1, 1, 0, 0, 0, 0, 1},
{1, 0, 1, 1, 0, 0, 2, 0, 2}, {1, 0, 1, 1, 0, 1, 0, 0, 0},
{1, 0, 1, 1, 0, 2, 0, 0, 2}, {1, 0, 1, 1, 0, 2, 2, 0, 0},
{1, 0, 1, 1, 1, 0, 0, 0, 0}, {1, 0, 1, 1, 2, 2, 0, 0, 0},
{1, 0, 1, 2, 0, 0, 1, 0, 2}, {1, 0, 1, 2, 0, 0, 2, 0, 1},
{1, 0, 1, 2, 0, 1, 0, 0, 2}, {1, 0, 1, 2, 0, 1, 2, 0, 0},
{1, 0, 1, 2, 0, 2, 0, 0, 1}, {1, 0, 1, 2, 0, 2, 1, 0, 0},
{1, 0, 1, 2, 0, 2, 2, 0, 2}, {1, 0, 1, 2, 1, 2, 0, 0, 0},
{1, 0, 1, 2, 2, 1, 0, 0, 0}, {1, 0, 2, 0, 0, 0, 1, 1, 2},
{1, 0, 2, 0, 0, 0, 1, 2, 1}, {1, 0, 2, 0, 0, 0, 2, 1, 1},
{1, 0, 2, 0, 0, 1, 1, 0, 2}, {1, 0, 2, 0, 0, 1, 2, 0, 1},
{1, 0, 2, 0, 0, 2, 1, 0, 1}, {1, 0, 2, 1, 0, 0, 2, 0, 1},
{1, 0, 2, 1, 0, 1, 0, 0, 2}, {1, 0, 2, 1, 0, 1, 2, 0, 0},
{1, 0, 2, 1, 0, 2, 0, 0, 1}, {1, 0, 2, 1, 0, 2, 2, 0, 2},
{1, 0, 2, 1, 1, 2, 0, 0, 0}, {1, 0, 2, 1, 2, 1, 0, 0, 0},
{1, 0, 2, 2, 0, 0, 1, 0, 1}, {1, 0, 2, 2, 0, 1, 0, 0, 1},
{1, 0, 2, 2, 0, 1, 1, 0, 0}, {1, 0, 2, 2, 0, 1, 2, 0, 2},
{1, 0, 2, 2, 0, 2, 1, 0, 2}, {1, 0, 2, 2, 0, 2, 2, 0, 1},
{1, 0, 2, 2, 1, 1, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 0, 1, 1},
{1, 1, 0, 0, 0, 0, 1, 0, 1}, {1, 1, 0, 0, 0, 0, 1, 1, 0},
{1, 1, 0, 0, 0, 0, 1, 2, 2}, {1, 1, 0, 0, 0, 0, 2, 1, 2},
{1, 1, 0, 0, 0, 0, 2, 2, 1}, {1, 1, 0, 0, 0, 1, 0, 0, 1},
{1, 1, 0, 0, 0, 1, 0, 1, 0}, {1, 1, 0, 0, 0, 1, 0, 2, 2},
{1, 1, 0, 0, 0, 2, 0, 1, 2}, {1, 1, 0, 0, 0, 2, 0, 2, 1},
{1, 1, 0, 0, 1, 0, 1, 0, 0}, {1, 1, 0, 0, 1, 0, 2, 2, 0},
{1, 1, 0, 0, 1, 1, 0, 0, 0}, {1, 1, 0, 0, 2, 0, 1, 2, 0},
{1, 1, 0, 0, 2, 0, 2, 1, 0}, {1, 1, 0, 1, 0, 0, 0, 0, 1},
{1, 1, 0, 1, 0, 0, 0, 1, 0}, {1, 1, 0, 1, 0, 0, 0, 2, 2},
{1, 1, 0, 1, 0, 0, 2, 2, 0}, {1, 1, 0, 1, 0, 1, 0, 0, 0},
{1, 1, 0, 1, 0, 2, 0, 0, 2}, {1, 1, 0, 1, 0, 2, 0, 2, 0},
{1, 1, 0, 1, 1, 0, 0, 0, 0}, {1, 1, 0, 1, 2, 0, 0, 2, 0},
{1, 1, 0, 1, 2, 0, 2, 0, 0}, {1, 1, 0, 1, 2, 2, 0, 0, 0},
{1, 1, 0, 2, 0, 0, 0, 1, 2}, {1, 1, 0, 2, 0, 0, 0, 2, 1},
{1, 1, 0, 2, 0, 0, 1, 2, 0}, {1, 1, 0, 2, 0, 0, 2, 1, 0},
{1, 1, 0, 2, 0, 1, 0, 0, 2}, {1, 1, 0, 2, 0, 1, 0, 2, 0},
{1, 1, 0, 2, 0, 2, 0, 0, 1}, {1, 1, 0, 2, 0, 2, 0, 1, 0},
{1, 1, 0, 2, 0, 2, 0, 2, 2}, {1, 1, 0, 2, 1, 0, 0, 2, 0},
{1, 1, 0, 2, 1, 0, 2, 0, 0}, {1, 1, 0, 2, 1, 2, 0, 0, 0},
{1, 1, 0, 2, 2, 0, 0, 1, 0}, {1, 1, 0, 2, 2, 0, 1, 0, 0},
{1, 1, 0, 2, 2, 0, 2, 2, 0}, {1, 1, 0, 2, 2, 1, 0, 0, 0},
{1, 1, 2, 0, 0, 0, 0, 1, 2}, {1, 1, 2, 0, 0, 0, 0, 2, 1},
{1, 1, 2, 0, 0, 0, 1, 0, 2}, {1, 1, 2, 0, 0, 0, 1, 2, 0},
{1, 1, 2, 0, 0, 0, 2, 0, 1}, {1, 1, 2, 0, 0, 0, 2, 1, 0},
{1, 1, 2, 0, 0, 0, 2, 2, 2}, {1, 1, 2, 0, 1, 2, 0, 0, 0},
{1, 1, 2, 0, 2, 1, 0, 0, 0}, {1, 1, 2, 1, 0, 2, 0, 0, 0},
{1, 1, 2, 1, 2, 0, 0, 0, 0}, {1, 1, 2, 2, 0, 1, 0, 0, 0},
{1, 1, 2, 2, 1, 0, 0, 0, 0}, {1, 1, 2, 2, 2, 2, 0, 0, 0},
{1, 2, 0, 0, 0, 0, 1, 1, 2}, {1, 2, 0, 0, 0, 0, 1, 2, 1},
{1, 2, 0, 0, 0, 0, 2, 1, 1}, {1, 2, 0, 0, 0, 1, 0, 1, 2},
{1, 2, 0, 0, 0, 1, 0, 2, 1}, {1, 2, 0, 0, 0, 2, 0, 1, 1},
{1, 2, 0, 0, 1, 0, 1, 2, 0}, {1, 2, 0, 0, 1, 0, 2, 1, 0},
{1, 2, 0, 0, 2, 0, 1, 1, 0}, {1, 2, 0, 1, 0, 0, 0, 1, 2},
{1, 2, 0, 1, 0, 0, 0, 2, 1}, {1, 2, 0, 1, 0, 0, 2, 1, 0},
{1, 2, 0, 1, 0, 1, 0, 0, 2}, {1, 2, 0, 1, 0, 1, 0, 2, 0},
{1, 2, 0, 1, 0, 2, 0, 0, 1}, {1, 2, 0, 1, 0, 2, 0, 1, 0},
{1, 2, 0, 1, 0, 2, 0, 2, 2}, {1, 2, 0, 1, 1, 0, 0, 2, 0},
{1, 2, 0, 1, 1, 0, 2, 0, 0}, {1, 2, 0, 1, 1, 2, 0, 0, 0},
{1, 2, 0, 1, 2, 0, 0, 1, 0}, {1, 2, 0, 1, 2, 0, 2, 2, 0},
{1, 2, 0, 1, 2, 1, 0, 0, 0}, {1, 2, 0, 2, 0, 0, 0, 1, 1},
{1, 2, 0, 2, 0, 0, 1, 1, 0}, {1, 2, 0, 2, 0, 1, 0, 0, 1},
{1, 2, 0, 2, 0, 1, 0, 1, 0}, {1, 2, 0, 2, 0, 1, 0, 2, 2},
{1, 2, 0, 2, 0, 2, 0, 1, 2}, {1, 2, 0, 2, 0, 2, 0, 2, 1},
{1, 2, 0, 2, 1, 0, 0, 1, 0}, {1, 2, 0, 2, 1, 0, 1, 0, 0},
{1, 2, 0, 2, 1, 0, 2, 2, 0}, {1, 2, 0, 2, 1, 1, 0, 0, 0},
{1, 2, 0, 2, 2, 0, 1, 2, 0}, {1, 2, 0, 2, 2, 0, 2, 1, 0},
{1, 2, 1, 0, 0, 0, 0, 1, 2}, {1, 2, 1, 0, 0, 0, 0, 2, 1},
{1, 2, 1, 0, 0, 0, 1, 0, 2}, {1, 2, 1, 0, 0, 0, 1, 2, 0},
{1, 2, 1, 0, 0, 0, 2, 0, 1}, {1, 2, 1, 0, 0, 0, 2, 1, 0},
{1, 2, 1, 0, 0, 0, 2, 2, 2}, {1, 2, 1, 0, 1, 2, 0, 0, 0},
{1, 2, 1, 0, 2, 1, 0, 0, 0}, {1, 2, 1, 1, 0, 2, 0, 0, 0},
{1, 2, 1, 1, 2, 0, 0, 0, 0}, {1, 2, 1, 2, 0, 1, 0, 0, 0},
{1, 2, 1, 2, 1, 0, 0, 0, 0}, {1, 2, 1, 2, 2, 2, 0, 0, 0},
{1, 2, 2, 0, 0, 0, 0, 1, 1}, {1, 2, 2, 0, 0, 0, 1, 0, 1},
{1, 2, 2, 0, 0, 0, 1, 1, 0}, {1, 2, 2, 0, 0, 0, 1, 2, 2},
{1, 2, 2, 0, 0, 0, 2, 1, 2}, {1, 2, 2, 0, 0, 0, 2, 2, 1},
{1, 2, 2, 0, 1, 1, 0, 0, 0}, {1, 2, 2, 1, 0, 1, 0, 0, 0},
{1, 2, 2, 1, 1, 0, 0, 0, 0}, {1, 2, 2, 1, 2, 2, 0, 0, 0},
{1, 2, 2, 2, 1, 2, 0, 0, 0}, {1, 2, 2, 2, 2, 1, 0, 0, 0},
{2, 0, 0, 1, 0, 1, 0, 1, 2}, {2, 0, 0, 1, 0, 1, 0, 2, 1},
{2, 0, 0, 1, 0, 1, 1, 0, 2}, {2, 0, 0, 1, 0, 1, 2, 0, 1},
{2, 0, 0, 1, 0, 2, 0, 1, 1}, {2, 0, 0, 1, 0, 2, 1, 0, 1},
{2, 0, 0, 1, 1, 0, 1, 2, 0}, {2, 0, 0, 1, 1, 0, 2, 1, 0},
{2, 0, 0, 1, 2, 0, 1, 1, 0}, {2, 0, 0, 2, 0, 1, 0, 1, 1},
{2, 0, 0, 2, 0, 1, 1, 0, 1}, {2, 0, 0, 2, 1, 0, 1, 1, 0},
{2, 0, 1, 0, 0, 0, 1, 1, 2}, {2, 0, 1, 0, 0, 0, 1, 2, 1},
{2, 0, 1, 0, 0, 0, 2, 1, 1}, {2, 0, 1, 0, 0, 1, 1, 0, 2},
{2, 0, 1, 0, 0, 2, 1, 0, 1}, {2, 0, 1, 1, 0, 0, 1, 0, 2},
{2, 0, 1, 1, 0, 0, 2, 0, 1}, {2, 0, 1, 1, 0, 1, 0, 0, 2},
{2, 0, 1, 1, 0, 1, 2, 0, 0}, {2, 0, 1, 1, 0, 2, 0, 0, 1},
{2, 0, 1, 1, 0, 2, 1, 0, 0}, {2, 0, 1, 1, 0, 2, 2, 0, 2},
{2, 0, 1, 1, 1, 2, 0, 0, 0}, {2, 0, 1, 1, 2, 1, 0, 0, 0},
{2, 0, 1, 2, 0, 0, 1, 0, 1}, {2, 0, 1, 2, 0, 1, 1, 0, 0},
{2, 0, 1, 2, 0, 1, 2, 0, 2}, {2, 0, 1, 2, 0, 2, 1, 0, 2},
{2, 0, 1, 2, 0, 2, 2, 0, 1}, {2, 0, 1, 2, 1, 1, 0, 0, 0},
{2, 0, 2, 0, 0, 1, 1, 0, 1}, {2, 0, 2, 1, 0, 0, 1, 0, 1},
{2, 0, 2, 1, 0, 1, 0, 0, 1}, {2, 0, 2, 1, 0, 1, 1, 0, 0},
{2, 0, 2, 1, 0, 1, 2, 0, 2}, {2, 0, 2, 1, 0, 2, 1, 0, 2},
{2, 0, 2, 1, 0, 2, 2, 0, 1}, {2, 0, 2, 2, 0, 1, 1, 0, 2},
{2, 0, 2, 2, 0, 1, 2, 0, 1}, {2, 0, 2, 2, 0, 2, 1, 0, 1},
{2, 1, 0, 0, 0, 0, 1, 1, 2}, {2, 1, 0, 0, 0, 0, 1, 2, 1},
{2, 1, 0, 0, 0, 0, 2, 1, 1}, {2, 1, 0, 0, 0, 1, 0, 1, 2},
{2, 1, 0, 0, 0, 1, 0, 2, 1}, {2, 1, 0, 0, 0, 2, 0, 1, 1},
{2, 1, 0, 0, 1, 0, 1, 2, 0}, {2, 1, 0, 0, 2, 0, 1, 1, 0},
{2, 1, 0, 1, 0, 0, 0, 1, 2}, {2, 1, 0, 1, 0, 0, 0, 2, 1},
{2, 1, 0, 1, 0, 0, 1, 2, 0}, {2, 1, 0, 1, 0, 0, 2, 1, 0},
{2, 1, 0, 1, 0, 1, 0, 0, 2}, {2, 1, 0, 1, 0, 1, 0, 2, 0},
{2, 1, 0, 1, 0, 2, 0, 0, 1}, {2, 1, 0, 1, 0, 2, 0, 1, 0},
{2, 1, 0, 1, 0, 2, 0, 2, 2}, {2, 1, 0, 1, 1, 0, 0, 2, 0},
{2, 1, 0, 1, 1, 0, 2, 0, 0}, {2, 1, 0, 1, 1, 2, 0, 0, 0},
{2, 1, 0, 1, 2, 0, 0, 1, 0}, {2, 1, 0, 1, 2, 0, 1, 0, 0},
{2, 1, 0, 1, 2, 0, 2, 2, 0}, {2, 1, 0, 1, 2, 1, 0, 0, 0},
{2, 1, 0, 2, 0, 0, 0, 1, 1}, {2, 1, 0, 2, 0, 0, 1, 1, 0},
{2, 1, 0, 2, 0, 1, 0, 0, 1}, {2, 1, 0, 2, 0, 1, 0, 1, 0},
{2, 1, 0, 2, 0, 1, 0, 2, 2}, {2, 1, 0, 2, 0, 2, 0, 1, 2},
{2, 1, 0, 2, 0, 2, 0, 2, 1}, {2, 1, 0, 2, 1, 0, 1, 0, 0},
{2, 1, 0, 2, 1, 0, 2, 2, 0}, {2, 1, 0, 2, 1, 1, 0, 0, 0},
{2, 1, 0, 2, 2, 0, 1, 2, 0}, {2, 1, 0, 2, 2, 0, 2, 1, 0},
{2, 1, 1, 0, 0, 0, 0, 1, 2}, {2, 1, 1, 0, 0, 0, 0, 2, 1},
{2, 1, 1, 0, 0, 0, 1, 0, 2}, {2, 1, 1, 0, 0, 0, 1, 2, 0},
{2, 1, 1, 0, 0, 0, 2, 0, 1}, {2, 1, 1, 0, 0, 0, 2, 1, 0},
{2, 1, 1, 0, 0, 0, 2, 2, 2}, {2, 1, 1, 0, 1, 2, 0, 0, 0},
{2, 1, 1, 0, 2, 1, 0, 0, 0}, {2, 1, 1, 1, 0, 2, 0, 0, 0},
{2, 1, 1, 1, 2, 0, 0, 0, 0}, {2, 1, 1, 2, 0, 1, 0, 0, 0},
{2, 1, 1, 2, 1, 0, 0, 0, 0}, {2, 1, 1, 2, 2, 2, 0, 0, 0},
{2, 1, 2, 0, 0, 0, 0, 1, 1}, {2, 1, 2, 0, 0, 0, 1, 0, 1},
{2, 1, 2, 0, 0, 0, 1, 1, 0}, {2, 1, 2, 0, 0, 0, 1, 2, 2},
{2, 1, 2, 0, 0, 0, 2, 1, 2}, {2, 1, 2, 0, 0, 0, 2, 2, 1},
{2, 1, 2, 0, 1, 1, 0, 0, 0}, {2, 1, 2, 1, 0, 1, 0, 0, 0},
{2, 1, 2, 1, 1, 0, 0, 0, 0}, {2, 1, 2, 1, 2, 2, 0, 0, 0},
{2, 1, 2, 2, 1, 2, 0, 0, 0}, {2, 1, 2, 2, 2, 1, 0, 0, 0},
{2, 2, 0, 0, 0, 1, 0, 1, 1}, {2, 2, 0, 0, 1, 0, 1, 1, 0},
{2, 2, 0, 1, 0, 0, 0, 1, 1}, {2, 2, 0, 1, 0, 0, 1, 1, 0},
{2, 2, 0, 1, 0, 1, 0, 0, 1}, {2, 2, 0, 1, 0, 1, 0, 1, 0},
{2, 2, 0, 1, 0, 1, 0, 2, 2}, {2, 2, 0, 1, 0, 2, 0, 1, 2},
{2, 2, 0, 1, 0, 2, 0, 2, 1}, {2, 2, 0, 1, 1, 0, 0, 1, 0},
{2, 2, 0, 1, 1, 0, 1, 0, 0}, {2, 2, 0, 1, 1, 0, 2, 2, 0},
{2, 2, 0, 1, 2, 0, 1, 2, 0}, {2, 2, 0, 1, 2, 0, 2, 1, 0},
{2, 2, 0, 2, 0, 1, 0, 1, 2}, {2, 2, 0, 2, 0, 1, 0, 2, 1},
{2, 2, 0, 2, 0, 2, 0, 1, 1}, {2, 2, 0, 2, 1, 0, 1, 2, 0},
{2, 2, 0, 2, 1, 0, 2, 1, 0}, {2, 2, 0, 2, 2, 0, 1, 1, 0},
{2, 2, 1, 0, 0, 0, 0, 1, 1}, {2, 2, 1, 0, 0, 0, 1, 0, 1},
{2, 2, 1, 0, 0, 0, 1, 1, 0}, {2, 2, 1, 0, 0, 0, 1, 2, 2},
{2, 2, 1, 0, 0, 0, 2, 1, 2}, {2, 2, 1, 0, 0, 0, 2, 2, 1},
{2, 2, 1, 0, 1, 1, 0, 0, 0}, {2, 2, 1, 1, 0, 1, 0, 0, 0},
{2, 2, 1, 1, 1, 0, 0, 0, 0}, {2, 2, 1, 1, 2, 2, 0, 0, 0},
{2, 2, 1, 2, 1, 2, 0, 0, 0}, {2, 2, 1, 2, 2, 1, 0, 0, 0},
{2, 2, 2, 0, 0, 0, 1, 1, 2}, {2, 2, 2, 0, 0, 0, 1, 2, 1},
{2, 2, 2, 0, 0, 0, 2, 1, 1}, {2, 2, 2, 1, 1, 2, 0, 0, 0},
{2, 2, 2, 1, 2, 1, 0, 0, 0}, {2, 2, 2, 2, 1, 1, 0, 0, 0},
{0, 0, 1, 0, 0, 1, 1, 2, 1}, {0, 0, 1, 0, 0, 1, 2, 1, 1},
{0, 0, 1, 0, 0, 2, 1, 1, 1}, {0, 0, 1, 0, 1, 0, 1, 1, 2},
{0, 0, 1, 0, 1, 0, 1, 2, 1}, {0, 0, 1, 0, 1, 1, 1, 0, 2},
{0, 0, 1, 0, 1, 1, 1, 2, 0}, {0, 0, 1, 0, 1, 1, 2, 0, 1},
{0, 0, 1, 0, 1, 2, 1, 0, 1}, {0, 0, 1, 0, 1, 2, 1, 1, 0},
{0, 0, 1, 0, 1, 2, 1, 2, 2}, {0, 0, 1, 0, 2, 0, 1, 1, 1},
{0, 0, 1, 0, 2, 1, 1, 0, 1}, {0, 0, 1, 0, 2, 1, 2, 2, 1},
{0, 0, 1, 1, 0, 1, 0, 2, 1}, {0, 0, 1, 1, 1, 0, 1, 0, 2},
{0, 0, 1, 1, 1, 0, 1, 2, 0}, {0, 0, 1, 1, 1, 1, 0, 0, 2},
{0, 0, 1, 1, 1, 1, 0, 2, 0}, {0, 0, 1, 1, 1, 1, 2, 0, 0},
{0, 0, 1, 1, 1, 2, 1, 0, 0}, {0, 0, 1, 1, 2, 1, 0, 0, 1},
{0, 0, 1, 2, 0, 0, 1, 1, 1}, {0, 0, 1, 2, 0, 1, 0, 1, 1},
{0, 0, 1, 2, 0, 1, 2, 2, 1}, {0, 0, 1, 2, 1, 0, 1, 0, 1},
{0, 0, 1, 2, 1, 0, 1, 1, 0}, {0, 0, 1, 2, 1, 0, 1, 2, 2},
{0, 0, 1, 2, 1, 1, 0, 0, 1}, {0, 0, 1, 2, 1, 1, 1, 0, 0},
{0, 0, 1, 2, 1, 2, 1, 0, 2}, {0, 0, 1, 2, 1, 2, 1, 2, 0},
{0, 0, 1, 2, 2, 1, 0, 2, 1}, {0, 0, 1, 2, 2, 1, 2, 0, 1},
{0, 0, 2, 0, 0, 1, 1, 1, 1}, {0, 0, 2, 0, 1, 0, 1, 1, 1},
{0, 0, 2, 0, 2, 2, 1, 1, 1}, {0, 0, 2, 1, 0, 0, 1, 1, 1},
{0, 0, 2, 1, 1, 1, 0, 0, 1}, {0, 0, 2, 1, 1, 1, 0, 1, 0},
{0, 0, 2, 1, 1, 1, 0, 2, 2}, {0, 0, 2, 1, 1, 1, 1, 0, 0},
{0, 0, 2, 1, 1, 1, 2, 0, 2}, {0, 0, 2, 1, 1, 1, 2, 2, 0},
{0, 0, 2, 2, 0, 2, 1, 1, 1}, {0, 0, 2, 2, 2, 0, 1, 1, 1},
{0, 1, 0, 0, 0, 2, 1, 1, 1}, {0, 1, 0, 0, 1, 0, 1, 1, 2},
{0, 1, 0, 0, 1, 0, 2, 1, 1}, {0, 1, 0, 0, 1, 1, 2, 1, 0},
{0, 1, 0, 0, 1, 2, 1, 1, 0}, {0, 1, 0, 0, 1, 2, 2, 1, 2},
{0, 1, 0, 0, 2, 0, 1, 1, 1}, {0, 1, 0, 1, 1, 0, 0, 1, 2},
{0, 1, 0, 1, 1, 1, 0, 0, 2}, {0, 1, 0, 1, 1, 1, 0, 2, 0},
{0, 1, 0, 1, 1, 1, 2, 0, 0}, {0, 1, 0, 1, 1, 2, 0, 1, 0},
{0, 1, 0, 2, 0, 0, 1, 1, 1}, {0, 1, 0, 2, 1, 0, 0, 1, 1},
{0, 1, 0, 2, 1, 0, 2, 1, 2}, {0, 1, 0, 2, 1, 1, 0, 1, 0},
{0, 1, 0, 2, 1, 2, 0, 1, 2}, {0, 1, 0, 2, 1, 2, 2, 1, 0},
{0, 1, 1, 0, 0, 1, 2, 0, 1}, {0, 1, 1, 0, 1, 0, 1, 0, 2},
{0, 1, 1, 0, 1, 0, 1, 2, 0}, {0, 1, 1, 0, 1, 0, 2, 1, 0},
{0, 1, 1, 0, 1, 2, 1, 0, 0}, {0, 1, 1, 2, 0, 1, 0, 0, 1},
{0, 1, 1, 2, 1, 0, 0, 1, 0}, {0, 1, 1, 2, 1, 0, 1, 0, 0},
{0, 1, 2, 0, 1, 0, 1, 1, 0}, {0, 1, 2, 0, 1, 0, 2, 1, 2},
{0, 1, 2, 0, 1, 2, 2, 1, 0}, {0, 1, 2, 1, 1, 0, 0, 1, 0},
{0, 1, 2, 2, 1, 0, 0, 1, 2}, {0, 1, 2, 2, 1, 0, 2, 1, 0},
{0, 1, 2, 2, 1, 2, 0, 1, 0}, {0, 2, 0, 0, 0, 1, 1, 1, 1},
{0, 2, 0, 0, 1, 0, 1, 1, 1}, {0, 2, 0, 0, 2, 2, 1, 1, 1},
{0, 2, 0, 1, 0, 0, 1, 1, 1}, {0, 2, 0, 1, 1, 1, 0, 0, 1},
{0, 2, 0, 1, 1, 1, 0, 1, 0}, {0, 2, 0, 1, 1, 1, 0, 2, 2},
{0, 2, 0, 1, 1, 1, 1, 0, 0}, {0, 2, 0, 1, 1, 1, 2, 0, 2},
{0, 2, 0, 1, 1, 1, 2, 2, 0}, {0, 2, 0, 2, 0, 2, 1, 1, 1},
{0, 2, 0, 2, 2, 0, 1, 1, 1}, {0, 2, 1, 0, 0, 1, 1, 0, 1},
{0, 2, 1, 0, 0, 1, 2, 2, 1}, {0, 2, 1, 0, 1, 0, 1, 0, 1},
{0, 2, 1, 0, 1, 0, 1, 1, 0}, {0, 2, 1, 0, 1, 0, 1, 2, 2},
{0, 2, 1, 0, 1, 1, 1, 0, 0}, {0, 2, 1, 0, 1, 2, 1, 0, 2},
{0, 2, 1, 0, 1, 2, 1, 2, 0}, {0, 2, 1, 0, 2, 1, 2, 0, 1},
{0, 2, 1, 1, 0, 1, 0, 0, 1}, {0, 2, 1, 1, 1, 0, 1, 0, 0},
{0, 2, 1, 2, 0, 1, 0, 2, 1}, {0, 2, 1, 2, 0, 1, 2, 0, 1},
{0, 2, 1, 2, 1, 0, 1, 0, 2}, {0, 2, 1, 2, 1, 0, 1, 2, 0},
{0, 2, 1, 2, 1, 2, 1, 0, 0}, {0, 2, 1, 2, 2, 1, 0, 0, 1},
{0, 2, 2, 0, 0, 2, 1, 1, 1}, {0, 2, 2, 0, 2, 0, 1, 1, 1},
{0, 2, 2, 1, 1, 1, 0, 0, 2}, {0, 2, 2, 1, 1, 1, 0, 2, 0},
{0, 2, 2, 1, 1, 1, 2, 0, 0}, {0, 2, 2, 2, 0, 0, 1, 1, 1},
{1, 0, 0, 0, 0, 2, 1, 1, 1}, {1, 0, 0, 0, 1, 0, 1, 2, 1},
{1, 0, 0, 0, 1, 0, 2, 1, 1}, {1, 0, 0, 0, 1, 1, 0, 2, 1},
{1, 0, 0, 0, 1, 1, 2, 0, 1}, {1, 0, 0, 0, 1, 2, 0, 1, 1},
{1, 0, 0, 0, 1, 2, 1, 0, 1}, {1, 0, 0, 0, 1, 2, 2, 2, 1},
{1, 0, 0, 0, 2, 0, 1, 1, 1}, {1, 0, 0, 1, 0, 0, 1, 1, 2},
{1, 0, 0, 1, 0, 0, 1, 2, 1}, {1, 0, 0, 1, 0, 1, 1, 2, 0},
{1, 0, 0, 1, 0, 2, 1, 1, 0}, {1, 0, 0, 1, 0, 2, 1, 2, 2},
{1, 0, 0, 1, 1, 0, 0, 2, 1}, {1, 0, 0, 1, 1, 0, 1, 0, 2},
{1, 0, 0, 1, 1, 0, 2, 0, 1}, {1, 0, 0, 1, 1, 1, 0, 0, 2},
{1, 0, 0, 1, 1, 1, 0, 2, 0}, {1, 0, 0, 1, 1, 1, 2, 0, 0},
{1, 0, 0, 1, 1, 2, 0, 0, 1}, {1, 0, 0, 1, 1, 2, 1, 0, 0},
{1, 0, 0, 1, 2, 0, 1, 0, 1}, {1, 0, 0, 1, 2, 0, 1, 2, 2},
{1, 0, 0, 1, 2, 1, 1, 0, 0}, {1, 0, 0, 1, 2, 2, 1, 0, 2},
{1, 0, 0, 1, 2, 2, 1, 2, 0}, {1, 0, 0, 2, 0, 0, 1, 1, 1},
{1, 0, 0, 2, 1, 0, 0, 1, 1}, {1, 0, 0, 2, 1, 0, 1, 0, 1},
{1, 0, 0, 2, 1, 0, 2, 2, 1}, {1, 0, 0, 2, 1, 1, 0, 0, 1},
{1, 0, 0, 2, 1, 2, 0, 2, 1}, {1, 0, 0, 2, 1, 2, 2, 0, 1},
{1, 0, 1, 0, 0, 1, 0, 2, 1}, {1, 0, 1, 0, 1, 0, 0, 2, 1},
{1, 0, 1, 0, 1, 0, 1, 0, 2}, {1, 0, 1, 0, 1, 0, 1, 2, 0},
{1, 0, 1, 0, 1, 0, 2, 0, 1}, {1, 0, 1, 0, 1, 2, 0, 0, 1},
{1, 0, 1, 0, 1, 2, 1, 0, 0}, {1, 0, 1, 0, 2, 1, 0, 0, 1},
{1, 0, 1, 1, 0, 0, 1, 2, 0}, {1, 0, 1, 1, 2, 0, 1, 0, 0},
{1, 0, 1, 2, 1, 0, 0, 0, 1}, {1, 0, 1, 2, 1, 0, 1, 0, 0},
{1, 0, 2, 0, 1, 0, 0, 1, 1}, {1, 0, 2, 0, 1, 0, 1, 0, 1},
{1, 0, 2, 0, 1, 0, 2, 2, 1}, {1, 0, 2, 0, 1, 1, 0, 0, 1},
{1, 0, 2, 0, 1, 2, 0, 2, 1}, {1, 0, 2, 0, 1, 2, 2, 0, 1},
{1, 0, 2, 1, 0, 0, 1, 1, 0}, {1, 0, 2, 1, 0, 0, 1, 2, 2},
{1, 0, 2, 1, 0, 2, 1, 2, 0}, {1, 0, 2, 1, 1, 0, 0, 0, 1},
{1, 0, 2, 1, 1, 0, 1, 0, 0}, {1, 0, 2, 1, 2, 0, 1, 0, 2},
{1, 0, 2, 1, 2, 0, 1, 2, 0}, {1, 0, 2, 1, 2, 2, 1, 0, 0},
{1, 0, 2, 2, 1, 0, 0, 2, 1}, {1, 0, 2, 2, 1, 0, 2, 0, 1},
{1, 0, 2, 2, 1, 2, 0, 0, 1}, {1, 1, 0, 0, 1, 0, 0, 1, 2},
{1, 1, 0, 0, 1, 0, 0, 2, 1}, {1, 1, 0, 0, 1, 0, 2, 0, 1},
{1, 1, 0, 0, 1, 2, 0, 0, 1}, {1, 1, 0, 0, 1, 2, 0, 1, 0},
{1, 1, 0, 1, 0, 0, 1, 0, 2}, {1, 1, 0, 1, 0, 2, 1, 0, 0},
{1, 1, 0, 2, 1, 0, 0, 0, 1}, {1, 1, 1, 0, 0, 1, 0, 0, 2},
{1, 1, 1, 0, 0, 1, 0, 2, 0}, {1, 1, 1, 0, 0, 1, 2, 0, 0},
{1, 1, 1, 0, 0, 2, 0, 0, 1}, {1, 1, 1, 0, 0, 2, 0, 1, 0},
{1, 1, 1, 0, 0, 2, 0, 2, 2}, {1, 1, 1, 0, 0, 2, 1, 0, 0},
{1, 1, 1, 0, 0, 2, 2, 0, 2}, {1, 1, 1, 0, 0, 2, 2, 2, 0},
{1, 1, 1, 0, 1, 0, 0, 0, 2}, {1, 1, 1, 0, 1, 0, 0, 2, 0},
{1, 1, 1, 0, 1, 0, 2, 0, 0}, {1, 1, 1, 0, 2, 0, 0, 0, 1},
{1, 1, 1, 0, 2, 0, 0, 1, 0}, {1, 1, 1, 0, 2, 0, 0, 2, 2},
{1, 1, 1, 0, 2, 0, 1, 0, 0}, {1, 1, 1, 0, 2, 0, 2, 0, 2},
{1, 1, 1, 0, 2, 0, 2, 2, 0}, {1, 1, 1, 0, 2, 2, 0, 0, 2},
{1, 1, 1, 0, 2, 2, 0, 2, 0}, {1, 1, 1, 0, 2, 2, 2, 0, 0},
{1, 1, 1, 1, 0, 0, 0, 0, 2}, {1, 1, 1, 1, 0, 0, 0, 2, 0},
{1, 1, 1, 1, 0, 0, 2, 0, 0}, {1, 1, 1, 2, 0, 0, 0, 0, 1},
{1, 1, 1, 2, 0, 0, 0, 1, 0}, {1, 1, 1, 2, 0, 0, 0, 2, 2},
{1, 1, 1, 2, 0, 0, 1, 0, 0}, {1, 1, 1, 2, 0, 0, 2, 0, 2},
{1, 1, 1, 2, 0, 0, 2, 2, 0}, {1, 1, 1, 2, 0, 2, 0, 0, 2},
{1, 1, 1, 2, 0, 2, 0, 2, 0}, {1, 1, 1, 2, 0, 2, 2, 0, 0},
{1, 1, 1, 2, 2, 0, 0, 0, 2}, {1, 1, 1, 2, 2, 0, 0, 2, 0},
{1, 1, 1, 2, 2, 0, 2, 0, 0}, {1, 1, 2, 0, 1, 0, 0, 0, 1},
{1, 1, 2, 0, 1, 0, 0, 1, 0}, {1, 1, 2, 1, 0, 0, 1, 0, 0},
{1, 2, 0, 0, 1, 0, 0, 1, 1}, {1, 2, 0, 0, 1, 0, 1, 0, 1},
{1, 2, 0, 0, 1, 0, 2, 2, 1}, {1, 2, 0, 0, 1, 1, 0, 0, 1},
{1, 2, 0, 0, 1, 2, 0, 2, 1}, {1, 2, 0, 0, 1, 2, 2, 0, 1},
{1, 2, 0, 1, 0, 0, 1, 0, 1}, {1, 2, 0, 1, 0, 0, 1, 2, 2},
{1, 2, 0, 1, 0, 1, 1, 0, 0}, {1, 2, 0, 1, 0, 2, 1, 0, 2},
{1, 2, 0, 1, 0, 2, 1, 2, 0}, {1, 2, 0, 1, 1, 0, 0, 0, 1},
{1, 2, 0, 1, 2, 0, 1, 0, 2}, {1, 2, 0, 1, 2, 2, 1, 0, 0},
{1, 2, 0, 2, 1, 0, 0, 2, 1}, {1, 2, 0, 2, 1, 0, 2, 0, 1},
{1, 2, 0, 2, 1, 2, 0, 0, 1}, {1, 2, 1, 0, 0, 1, 0, 0, 1},
{1, 2, 1, 0, 1, 0, 0, 0, 1}, {1, 2, 1, 0, 1, 0, 1, 0, 0},
{1, 2, 1, 1, 0, 0, 1, 0, 0}, {1, 2, 2, 0, 1, 0, 0, 2, 1},
{1, 2, 2, 0, 1, 0, 2, 0, 1}, {1, 2, 2, 0, 1, 2, 0, 0, 1},
{1, 2, 2, 1, 0, 0, 1, 0, 2}, {1, 2, 2, 1, 0, 0, 1, 2, 0},
{1, 2, 2, 1, 0, 2, 1, 0, 0}, {1, 2, 2, 1, 2, 0, 1, 0, 0},
{1, 2, 2, 2, 1, 0, 0, 0, 1}, {2, 0, 0, 0, 0, 1, 1, 1, 1},
{2, 0, 0, 0, 1, 0, 1, 1, 1}, {2, 0, 0, 0, 2, 2, 1, 1, 1},
{2, 0, 0, 1, 0, 0, 1, 1, 1}, {2, 0, 0, 1, 1, 1, 0, 0, 1},
{2, 0, 0, 1, 1, 1, 0, 1, 0}, {2, 0, 0, 1, 1, 1, 0, 2, 2},
{2, 0, 0, 1, 1, 1, 1, 0, 0}, {2, 0, 0, 1, 1, 1, 2, 0, 2},
{2, 0, 0, 1, 1, 1, 2, 2, 0}, {2, 0, 0, 2, 0, 2, 1, 1, 1},
{2, 0, 0, 2, 2, 0, 1, 1, 1}, {2, 0, 1, 0, 0, 1, 0, 1, 1},
{2, 0, 1, 0, 0, 1, 2, 2, 1}, {2, 0, 1, 0, 1, 0, 1, 0, 1},
{2, 0, 1, 0, 1, 0, 1, 1, 0}, {2, 0, 1, 0, 1, 0, 1, 2, 2},
{2, 0, 1, 0, 1, 1, 0, 0, 1}, {2, 0, 1, 0, 1, 1, 1, 0, 0},
{2, 0, 1, 0, 1, 2, 1, 0, 2}, {2, 0, 1, 0, 1, 2, 1, 2, 0},
{2, 0, 1, 0, 2, 1, 0, 2, 1}, {2, 0, 1, 0, 2, 1, 2, 0, 1},
{2, 0, 1, 1, 1, 0, 1, 0, 0}, {2, 0, 1, 2, 0, 1, 0, 2, 1},
{2, 0, 1, 2, 1, 0, 1, 0, 2}, {2, 0, 1, 2, 1, 0, 1, 2, 0},
{2, 0, 1, 2, 1, 2, 1, 0, 0}, {2, 0, 1, 2, 2, 1, 0, 0, 1},
{2, 0, 2, 0, 0, 2, 1, 1, 1}, {2, 0, 2, 0, 2, 0, 1, 1, 1},
{2, 0, 2, 1, 1, 1, 0, 0, 2}, {2, 0, 2, 1, 1, 1, 0, 2, 0},
{2, 0, 2, 1, 1, 1, 2, 0, 0}, {2, 0, 2, 2, 0, 0, 1, 1, 1},
{2, 1, 0, 0, 1, 0, 0, 1, 1}, {2, 1, 0, 0, 1, 0, 2, 1, 2},
{2, 1, 0, 0, 1, 1, 0, 1, 0}, {2, 1, 0, 0, 1, 2, 0, 1, 2},
{2, 1, 0, 0, 1, 2, 2, 1, 0}, {2, 1, 0, 2, 1, 0, 0, 1, 2},
{2, 1, 0, 2, 1, 2, 0, 1, 0}, {2, 1, 1, 0, 0, 1, 0, 0, 1},
{2, 1, 1, 0, 1, 0, 0, 1, 0}, {2, 1, 1, 0, 1, 0, 1, 0, 0},
{2, 1, 2, 0, 1, 0, 0, 1, 2}, {2, 1, 2, 0, 1, 0, 2, 1, 0},
{2, 1, 2, 0, 1, 2, 0, 1, 0}, {2, 1, 2, 2, 1, 0, 0, 1, 0},
{2, 2, 0, 0, 0, 2, 1, 1, 1}, {2, 2, 0, 0, 2, 0, 1, 1, 1},
{2, 2, 0, 1, 1, 1, 0, 0, 2}, {2, 2, 0, 1, 1, 1, 0, 2, 0},
{2, 2, 0, 1, 1, 1, 2, 0, 0}, {2, 2, 0, 2, 0, 0, 1, 1, 1},
{2, 2, 1, 0, 0, 1, 0, 2, 1}, {2, 2, 1, 0, 0, 1, 2, 0, 1},
{2, 2, 1, 0, 1, 0, 1, 0, 2}, {2, 2, 1, 0, 1, 0, 1, 2, 0},
{2, 2, 1, 0, 1, 2, 1, 0, 0}, {2, 2, 1, 0, 2, 1, 0, 0, 1},
{2, 2, 1, 2, 0, 1, 0, 0, 1}, {2, 2, 1, 2, 1, 0, 1, 0, 0},
{0, 0, 1, 1, 0, 0, 0, 1, 1}, {0, 0, 1, 1, 1, 0, 0, 0, 1},
{0, 0, 1, 1, 1, 0, 0, 1, 0}, {0, 1, 0, 0, 0, 1, 1, 0, 1},
{0, 1, 0, 0, 1, 0, 1, 0, 1}, {0, 1, 0, 0, 1, 1, 1, 0, 0},
{0, 1, 0, 1, 0, 0, 1, 0, 1}, {0, 1, 0, 1, 1, 0, 0, 0, 1},
{0, 1, 1, 1, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 1, 1, 1, 0},
{1, 0, 0, 0, 1, 1, 0, 1, 0}, {1, 0, 0, 0, 1, 1, 1, 0, 0},
{1, 0, 1, 0, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0, 0, 1, 0},
{1, 0, 1, 1, 0, 0, 0, 1, 0}, {1, 1, 0, 0, 0, 1, 1, 0, 0}
};
private static double weights[] = {
-0.00000000000000063401, 0.00000000000000055700, 0.00000000000000012769,
-0.52573653474162341000, 0.43427498705107342000, 0.09146154769055023200,
0.00000000000000138130, -0.00000000000000118053, -0.00000000000000050631,
0.52573653474162607000, -0.43427498705107603000, -0.09146154769055094000,
-0.00000000000000057743, 0.00000000000000037314, -0.00000000000000023441,
0.52573653474162907000, -0.43427498705107787000, -0.09146154769055155100,
-0.00000000000000405476, 0.00000000000000339568, 0.00000000000000053496,
-0.52573653474162763000, 0.43427498705107587000, 0.09146154769055155100,
-0.00000000000000116499, 0.00000000000000111960, 0.00000000000000004464,
0.59181480684449950000, -0.48617039139374285000, -0.10564441545075645000,
0.33659693927260309000, -0.28023189914604213000, -0.05636504012656110000,
-0.00000000000000339401, 0.00000000000000312093, 0.00000000000000057542,
0.33659693927260292000, -0.28023189914604213000, -0.05636504012656087800,
0.00000000000000099480, -0.00000000000000067295, -0.00000000000000003901,
-0.33659693927260537000, 0.28023189914604435000, 0.05636504012656118300,
-0.00000000000000284785, 0.00000000000000269180, 0.00000000000000026089,
-0.33659693927260426000, 0.28023189914604330000, 0.05636504012656121800,
-0.59181480684449039000, 0.48617039139373414000, 0.10564441545075609000,
0.00000000000000098567, -0.00000000000000095474, -0.00000000000000021207,
-0.33659693927260698000, 0.28023189914604579000, 0.05636504012656142600,
-0.59181480684449372000, 0.48617039139373774000, 0.10564441545075645000,
0.33659693927260514000, -0.28023189914604435000, -0.05636504012656100300,
-0.00000000000000010012, 0.00000000000000001702, 0.00000000000000012437,
-0.33659693927260204000, 0.28023189914604152000, 0.05636504012656010100,
0.59181480684449428000, -0.48617039139373813000, -0.10564441545075638000,
0.33659693927260081000, -0.28023189914603991000, -0.05636504012656074600,
0.00000000000000216976, -0.00000000000000195478, -0.00000000000000023527,
0.39961448116107012000, -0.35734834346184241000, -0.04226613769922773400,
-0.33634249144114892000, 0.28239332896420155000, 0.05394916247694748300,
0.39961448116106396000, -0.35734834346183769000, -0.04226613769922723400,
-0.33634249144114703000, 0.28239332896420027000, 0.05394916247694724100,
-0.21667948075941171000, 0.12935693076722185000, 0.08732254999219028800,
-0.33634249144114398000, 0.28239332896419722000, 0.05394916247694688700,
0.39961448116106157000, -0.35734834346183453000, -0.04226613769922710200,
-0.33634249144114919000, 0.28239332896420105000, 0.05394916247694810100,
0.39961448116107307000, -0.35734834346184485000, -0.04226613769922824700,
-0.54188833749531484000, 0.49456532031183192000, 0.04732301718348254400,
0.00000000000000042643, -0.00000000000000052416, -0.00000000000000028161,
0.54188833749532672000, -0.49456532031184147000, -0.04732301718348516700,
0.00000000000000208148, -0.00000000000000170526, -0.00000000000000039120,
-0.00000000000001165642, 0.00000000000000998830, 0.00000000000000133016,
-0.00000000000000389738, 0.00000000000000286692, 0.00000000000000081238,
0.54188833749532805000, -0.49456532031184208000, -0.04732301718348581200,
-0.00000000000000308117, 0.00000000000000212213, 0.00000000000000117840,
-0.54188833749532439000, 0.49456532031183975000, 0.04732301718348420900,
0.20000000000000001000, 0.20000000000000001000, 0.20000000000000001000,
0.20000000000000001000, 0.20000000000000001000, 0.20000000000000001000,
0.20000000000000001000, 0.20000000000000001000, 0.20000000000000001000,
0.20000000000000001000, 0.20000000000000001000, 0.20000000000000001000,
0.20000000000000001000, 0.20000000000000001000, 0.20000000000000001000,
0.33333333333333331000, 0.33333333333333331000, 0.33333333333333331000,
0.00000000000000093850, -0.00000000000000054323, -0.00000000000000011761,
-0.03290466729806285100, 0.00000000000000063771, 0.00000000000000000000,
0.00000000000000000000, 0.00000000000000000000, 0.00000000000000000000};
// **********************************************************************
// MAIN
// **********************************************************************
public static void main(String[] args) throws Exception {
double xData[][]; // Input Attributes for Trainer
int yData[]; // Output Attributes for Trainer
int i, j; // array indicies
String trainLogName = "BinaryClassificationNetworkEx2.log";
int[][] z;
// ******************************************************************
// PREPROCESS TRAINING PATTERNS
// ******************************************************************
long t0 = System.currentTimeMillis();
xData = new double[nObs][nInputs];
yData = new int[nObs];
/* Perform Binary Filtering. */
for (i = 0; i < data.length; i++) {
for (j = 0; j < data[0].length; j++) {
data[i][j]++;
}
}
int xx[] = new int[nObs];
UnsupervisedNominalFilter filter = new UnsupervisedNominalFilter(3);
for (i = 0; i < 9; i++) {
// Copy each variable to a temp var
for (j = 0; j < nObs; j++) {
xx[j] = data[j][i];
}
// Perform binary filter on temp var
z = filter.encode(xx);
// Copy binary encoded var to xData
for (j = 0; j < nObs; j++) {
for (int k = 0; k < 3; k++) {
xData[j][k + (i * 3)] = (double) z[j][k];
}
}
}
for (i = 0; i < nObs; i++) {
yData[i] = (i >= 626 ? 0 : 1);
}
// ******************************************************************
// CREATE FEEDFORWARD NETWORK
// ******************************************************************
FeedForwardNetwork network = new FeedForwardNetwork();
network.getInputLayer().createInputs(nInputs);
network.createHiddenLayer().createPerceptrons(nPerceptrons1);
network.createHiddenLayer().createPerceptrons(nPerceptrons2);
network.getOutputLayer().createPerceptrons(nOutputs);
network.linkAll();
network.setWeights(weights);
Perceptron perceptrons[] = network.getPerceptrons();
for (i = 0; i < perceptrons.length - 1; i++) {
perceptrons[i].setActivation(hiddenLayerActivation);
}
// ******************************************************************
// SET OUTPUT LAYER ACTIVATION FUNCTION TO LOGISTIC
// FOR BINARY CLASSIFICATION
// ******************************************************************
perceptrons[perceptrons.length - 1].
setActivation(outputLayerActivation);
BinaryClassification classification
= new BinaryClassification(network);
QuasiNewtonTrainer stageITrainer = new QuasiNewtonTrainer();
QuasiNewtonTrainer stageIITrainer = new QuasiNewtonTrainer();
stageITrainer.setError(classification.getError());
stageIITrainer.setError(classification.getError());
stageITrainer.setMaximumTrainingIterations(8000);
stageITrainer.setMaximumStepsize(10.0);
stageIITrainer.setMaximumStepsize(10.0);
stageITrainer.setRelativeTolerance(10e-20);
stageIITrainer.setRelativeTolerance(10e-20);
stageIITrainer.setMaximumTrainingIterations(8000);
EpochTrainer trainer = new EpochTrainer(stageITrainer, stageIITrainer);
// Set Training Parameters
trainer.setNumberOfEpochs(20);
trainer.setEpochSize(nObs);
// Set random number seeds to produce repeatable output
trainer.setRandom(new Random(5555));
trainer.setRandomSamples(new Random(5555), new Random(5555));
// If tracing is requested setup training logger
if (trace) {
try {
Handler handler = new FileHandler(trainLogName);
Logger logger = Logger.getLogger("com.imsl.datamining.neural");
logger.setLevel(Level.FINEST);
logger.addHandler(handler);
handler.setFormatter(QuasiNewtonTrainer.getFormatter());
System.out.println("--> Training Log Created in "
+ trainLogName);
} catch (Exception e) {
System.out.println("--> Cannot Create Training Log.");
}
}
classification.train(trainer, xData, yData);
System.out.println("trainer.getErrorValue = "
+ trainer.getErrorValue());
System.out.println("StageITrainer.getErrorValue = "
+ stageITrainer.getErrorValue());
System.out.println("StageIITrainer.getErrorValue = "
+ stageIITrainer.getErrorValue());
// ******************************************************************
// DISPLAY TRAINING STATISTICS
// ******************************************************************
double stats[] = classification.computeStatistics(xData, yData);
System.out.println("***********************************************");
System.out.println("--> Cross-entropy error: "
+ (float) stats[0]);
System.out.println("--> Classification error rate: "
+ (float) stats[1]);
System.out.println("***********************************************");
System.out.println("");
// ******************************************************************
// OBTAIN AND DISPLAY NETWORK WEIGHTS AND GRADIENTS
// ******************************************************************
double weight[] = network.getWeights();
double gradient[] = trainer.getErrorGradient();
double wg[][] = new double[weight.length][2];
for (i = 0; i < weight.length; i++) {
wg[i][0] = weight[i];
wg[i][1] = gradient[i];
}
PrintMatrixFormat pmf = new PrintMatrixFormat();
pmf.setNumberFormat(new java.text.DecimalFormat("0.000000"));
pmf.setColumnLabels(new String[]{"Weights", "Gradients"});
new PrintMatrix().print(pmf, wg);
// ******************************************************************
// forecast the network
// ******************************************************************
double report[][] = new double[nObs][2];
for (i = 0; i < 50; i++) {
report[i][0] = yData[i];
report[i][1] = classification.predictedClass(xData[i]);
}
pmf = new PrintMatrixFormat();
pmf.setColumnLabels(new String[]{"Expected", "Predicted"});
new PrintMatrix("Forecast").print(pmf, report);
long t1 = System.currentTimeMillis();
double time = t1 - t0;
time = time / 1000;
System.out.println("****************Time: " + time);
System.out.println("trainer.getErrorValue = "
+ trainer.getErrorValue());
System.out.println("StageITrainer.getErrorValue = "
+ stageITrainer.getErrorValue());
System.out.println("StageIITrainer.getErrorValue = "
+ stageIITrainer.getErrorValue());
}
}
--> Training Log Created in BinaryClassificationNetworkEx2.log
trainer.getErrorValue = 1.4521421559936876
StageITrainer.getErrorValue = 482.27809835973795
StageIITrainer.getErrorValue = 1.4521421559936876
***********************************************
--> Cross-entropy error: 1.4521421
--> Classification error rate: 0.0020876827
***********************************************
Weights Gradients
0 2.794812 -0.000037
1 11.881356 -0.000066
2 -11.053385 0.002202
3 19.260234 0.359990
4 28.373581 -0.000341
5 -13.253239 -0.027393
6 -7.082690 0.015784
7 13.221642 0.003962
8 -23.283604 -1.405288
9 -30.615046 -0.000000
10 11.737416 0.000001
11 3.299586 -0.000000
12 -10.950633 0.000203
13 2.016166 -0.000140
14 -20.363654 -0.000000
15 -8.838920 -0.027421
16 -12.499779 0.000510
17 -6.608869 0.006352
18 17.696999 -1.106129
19 28.843672 -0.000341
20 8.045185 -0.000000
21 10.177528 0.000000
22 -0.954535 0.000000
23 -23.413666 -0.000000
24 -39.003675 0.000000
25 3.247172 -0.000008
26 9.765645 0.015208
27 0.018801 0.000015
28 4.576900 0.060691
29 -12.150770 0.000000
30 -11.276935 -0.000000
31 18.142833 0.015712
32 -4.480160 0.001997
33 21.404600 -1.312999
34 -43.192160 -0.000379
35 12.501761 -0.027452
36 -14.572506 0.000006
37 -13.945651 0.004352
38 -25.733512 0.267603
39 30.022170 0.000038
40 0.869418 0.000023
41 4.846458 -0.000000
42 7.585565 0.000018
43 3.099542 -0.000042
44 -9.807495 -0.000000
45 -18.722817 -0.000026
46 7.144900 0.015791
47 -10.414587 0.003950
48 18.917071 -2.248996
49 1.892356 0.000000
50 12.926283 -0.027369
51 -2.409669 -0.000072
52 5.131728 0.002344
53 -23.509053 1.200103
54 -11.747324 -0.000341
55 6.533518 -0.000034
56 3.184332 0.000000
57 -4.375824 0.000073
58 2.806478 0.003455
59 -12.541122 0.000000
60 28.572629 -0.027369
61 58.397173 -0.000000
62 -1.683803 0.004585
63 21.994267 0.417573
64 -8.148093 -0.000000
65 -28.281093 -0.000060
66 -42.698239 0.015791
67 -5.212427 0.001782
68 -24.822189 -1.463011
69 3.390353 -0.000341
70 1.738623 -0.000000
71 -6.313312 -0.000072
72 -1.223654 0.000000
73 0.774095 -0.000000
74 -18.669978 -0.000000
75 -26.851295 -0.027369
76 -12.628134 0.015201
77 -6.891812 0.002198
78 20.327156 1.260888
79 -24.811981 -0.000341
80 21.850027 -0.000022
81 -0.353371 0.000511
82 4.425916 0.004020
83 -23.040663 -2.306232
84 5.876584 0.000000
85 8.143971 -0.000038
86 21.663435 0.000007
87 -6.285839 0.000148
88 -0.355297 -0.000094
89 -4.267329 -0.000000
90 -7.707898 -0.027393
91 10.756301 0.000583
92 -42.148634 -0.000000
93 19.135975 -0.673146
94 10.182175 0.000000
95 4.003089 -0.000036
96 -22.043461 -0.000066
97 33.052701 0.006367
98 -23.321219 -0.429493
99 8.738982 -0.000341
100 5.451673 -0.000000
101 20.219032 0.015201
102 0.676898 -0.000000
103 2.691869 0.057201
104 -41.170953 0.000000
105 -8.584660 -0.000036
106 1.630423 0.000006
107 -3.854815 0.006352
108 16.548650 -0.579643
109 45.844790 -0.000379
110 2.217830 -0.027393
111 4.890955 0.000583
112 2.642988 0.000015
113 -23.801442 -0.526478
114 -38.698959 0.000000
115 8.331494 -0.000000
116 1.005177 0.015129
117 -8.016478 0.000000
118 5.529196 0.060684
119 -28.818014 0.000038
120 3.604061 -0.027419
121 4.143800 0.000511
122 -10.174349 0.003961
123 20.432096 -1.465940
124 -3.479734 0.000038
125 -5.448064 0.000023
126 -3.779805 0.015201
127 10.354714 0.002390
128 -23.042045 0.420524
129 -8.400539 -0.000379
130 2.973240 -0.000034
131 8.433972 0.000007
132 -11.045431 0.000016
133 1.312826 -0.000023
134 -10.385525 -0.000000
135 -54.999564 -0.019621
136 5.476551 -0.000000
137 -7.417770 0.000000
138 42.092030 -0.018658
139 13.732960 -0.000000
140 23.967486 0.000000
141 -21.369439 -0.031979
142 3.040890 0.000000
143 -3.357516 -0.000000
144 97.218390 -0.039325
145 4.920216 0.000000
146 34.621998 -0.000012
147 62.555082 -0.907987
148 3.421771 0.000000
149 4.222951 -0.006693
150 183.127735 -0.011089
151 -48.952878 -0.020804
152 13.720097 -0.020303
153 1.395545 -0.027429
154 8.430987 0.015718
155 -9.235164 0.006367
156 -2.045833 -1.045438
157 -22.715138 -0.000341
158 -62.659356 -0.949897
159 13.949309 0.000000
160 -0.675295 -0.006693
161 -60.351363 -0.020804
Forecast
Expected Predicted
0 1 1
1 1 1
2 1 1
3 1 1
4 1 1
5 1 1
6 1 1
7 1 1
8 1 1
9 1 1
10 1 1
11 1 1
12 1 1
13 1 1
14 1 1
15 1 1
16 1 1
17 1 1
18 1 1
19 1 1
20 1 1
21 1 1
22 1 1
23 1 1
24 1 1
25 1 1
26 1 1
27 1 1
28 1 1
29 1 1
30 1 1
31 1 1
32 1 1
33 1 1
34 1 1
35 1 1
36 1 1
37 1 1
38 1 1
39 1 1
40 1 1
41 1 1
42 1 1
43 1 1
44 1 1
45 1 1
46 1 1
47 1 1
48 1 1
49 1 1
50 0 0
51 0 0
52 0 0
53 0 0
54 0 0
55 0 0
56 0 0
57 0 0
58 0 0
59 0 0
60 0 0
61 0 0
62 0 0
63 0 0
64 0 0
65 0 0
66 0 0
67 0 0
68 0 0
69 0 0
70 0 0
71 0 0
72 0 0
73 0 0
74 0 0
75 0 0
76 0 0
77 0 0
78 0 0
79 0 0
80 0 0
81 0 0
82 0 0
83 0 0
84 0 0
85 0 0
86 0 0
87 0 0
88 0 0
89 0 0
90 0 0
91 0 0
92 0 0
93 0 0
94 0 0
95 0 0
96 0 0
97 0 0
98 0 0
99 0 0
100 0 0
101 0 0
102 0 0
103 0 0
104 0 0
105 0 0
106 0 0
107 0 0
108 0 0
109 0 0
110 0 0
111 0 0
112 0 0
113 0 0
114 0 0
115 0 0
116 0 0
117 0 0
118 0 0
119 0 0
120 0 0
121 0 0
122 0 0
123 0 0
124 0 0
125 0 0
126 0 0
127 0 0
128 0 0
129 0 0
130 0 0
131 0 0
132 0 0
133 0 0
134 0 0
135 0 0
136 0 0
137 0 0
138 0 0
139 0 0
140 0 0
141 0 0
142 0 0
143 0 0
144 0 0
145 0 0
146 0 0
147 0 0
148 0 0
149 0 0
150 0 0
151 0 0
152 0 0
153 0 0
154 0 0
155 0 0
156 0 0
157 0 0
158 0 0
159 0 0
160 0 0
161 0 0
162 0 0
163 0 0
164 0 0
165 0 0
166 0 0
167 0 0
168 0 0
169 0 0
170 0 0
171 0 0
172 0 0
173 0 0
174 0 0
175 0 0
176 0 0
177 0 0
178 0 0
179 0 0
180 0 0
181 0 0
182 0 0
183 0 0
184 0 0
185 0 0
186 0 0
187 0 0
188 0 0
189 0 0
190 0 0
191 0 0
192 0 0
193 0 0
194 0 0
195 0 0
196 0 0
197 0 0
198 0 0
199 0 0
200 0 0
201 0 0
202 0 0
203 0 0
204 0 0
205 0 0
206 0 0
207 0 0
208 0 0
209 0 0
210 0 0
211 0 0
212 0 0
213 0 0
214 0 0
215 0 0
216 0 0
217 0 0
218 0 0
219 0 0
220 0 0
221 0 0
222 0 0
223 0 0
224 0 0
225 0 0
226 0 0
227 0 0
228 0 0
229 0 0
230 0 0
231 0 0
232 0 0
233 0 0
234 0 0
235 0 0
236 0 0
237 0 0
238 0 0
239 0 0
240 0 0
241 0 0
242 0 0
243 0 0
244 0 0
245 0 0
246 0 0
247 0 0
248 0 0
249 0 0
250 0 0
251 0 0
252 0 0
253 0 0
254 0 0
255 0 0
256 0 0
257 0 0
258 0 0
259 0 0
260 0 0
261 0 0
262 0 0
263 0 0
264 0 0
265 0 0
266 0 0
267 0 0
268 0 0
269 0 0
270 0 0
271 0 0
272 0 0
273 0 0
274 0 0
275 0 0
276 0 0
277 0 0
278 0 0
279 0 0
280 0 0
281 0 0
282 0 0
283 0 0
284 0 0
285 0 0
286 0 0
287 0 0
288 0 0
289 0 0
290 0 0
291 0 0
292 0 0
293 0 0
294 0 0
295 0 0
296 0 0
297 0 0
298 0 0
299 0 0
300 0 0
301 0 0
302 0 0
303 0 0
304 0 0
305 0 0
306 0 0
307 0 0
308 0 0
309 0 0
310 0 0
311 0 0
312 0 0
313 0 0
314 0 0
315 0 0
316 0 0
317 0 0
318 0 0
319 0 0
320 0 0
321 0 0
322 0 0
323 0 0
324 0 0
325 0 0
326 0 0
327 0 0
328 0 0
329 0 0
330 0 0
331 0 0
332 0 0
333 0 0
334 0 0
335 0 0
336 0 0
337 0 0
338 0 0
339 0 0
340 0 0
341 0 0
342 0 0
343 0 0
344 0 0
345 0 0
346 0 0
347 0 0
348 0 0
349 0 0
350 0 0
351 0 0
352 0 0
353 0 0
354 0 0
355 0 0
356 0 0
357 0 0
358 0 0
359 0 0
360 0 0
361 0 0
362 0 0
363 0 0
364 0 0
365 0 0
366 0 0
367 0 0
368 0 0
369 0 0
370 0 0
371 0 0
372 0 0
373 0 0
374 0 0
375 0 0
376 0 0
377 0 0
378 0 0
379 0 0
380 0 0
381 0 0
382 0 0
383 0 0
384 0 0
385 0 0
386 0 0
387 0 0
388 0 0
389 0 0
390 0 0
391 0 0
392 0 0
393 0 0
394 0 0
395 0 0
396 0 0
397 0 0
398 0 0
399 0 0
400 0 0
401 0 0
402 0 0
403 0 0
404 0 0
405 0 0
406 0 0
407 0 0
408 0 0
409 0 0
410 0 0
411 0 0
412 0 0
413 0 0
414 0 0
415 0 0
416 0 0
417 0 0
418 0 0
419 0 0
420 0 0
421 0 0
422 0 0
423 0 0
424 0 0
425 0 0
426 0 0
427 0 0
428 0 0
429 0 0
430 0 0
431 0 0
432 0 0
433 0 0
434 0 0
435 0 0
436 0 0
437 0 0
438 0 0
439 0 0
440 0 0
441 0 0
442 0 0
443 0 0
444 0 0
445 0 0
446 0 0
447 0 0
448 0 0
449 0 0
450 0 0
451 0 0
452 0 0
453 0 0
454 0 0
455 0 0
456 0 0
457 0 0
458 0 0
459 0 0
460 0 0
461 0 0
462 0 0
463 0 0
464 0 0
465 0 0
466 0 0
467 0 0
468 0 0
469 0 0
470 0 0
471 0 0
472 0 0
473 0 0
474 0 0
475 0 0
476 0 0
477 0 0
478 0 0
479 0 0
480 0 0
481 0 0
482 0 0
483 0 0
484 0 0
485 0 0
486 0 0
487 0 0
488 0 0
489 0 0
490 0 0
491 0 0
492 0 0
493 0 0
494 0 0
495 0 0
496 0 0
497 0 0
498 0 0
499 0 0
500 0 0
501 0 0
502 0 0
503 0 0
504 0 0
505 0 0
506 0 0
507 0 0
508 0 0
509 0 0
510 0 0
511 0 0
512 0 0
513 0 0
514 0 0
515 0 0
516 0 0
517 0 0
518 0 0
519 0 0
520 0 0
521 0 0
522 0 0
523 0 0
524 0 0
525 0 0
526 0 0
527 0 0
528 0 0
529 0 0
530 0 0
531 0 0
532 0 0
533 0 0
534 0 0
535 0 0
536 0 0
537 0 0
538 0 0
539 0 0
540 0 0
541 0 0
542 0 0
543 0 0
544 0 0
545 0 0
546 0 0
547 0 0
548 0 0
549 0 0
550 0 0
551 0 0
552 0 0
553 0 0
554 0 0
555 0 0
556 0 0
557 0 0
558 0 0
559 0 0
560 0 0
561 0 0
562 0 0
563 0 0
564 0 0
565 0 0
566 0 0
567 0 0
568 0 0
569 0 0
570 0 0
571 0 0
572 0 0
573 0 0
574 0 0
575 0 0
576 0 0
577 0 0
578 0 0
579 0 0
580 0 0
581 0 0
582 0 0
583 0 0
584 0 0
585 0 0
586 0 0
587 0 0
588 0 0
589 0 0
590 0 0
591 0 0
592 0 0
593 0 0
594 0 0
595 0 0
596 0 0
597 0 0
598 0 0
599 0 0
600 0 0
601 0 0
602 0 0
603 0 0
604 0 0
605 0 0
606 0 0
607 0 0
608 0 0
609 0 0
610 0 0
611 0 0
612 0 0
613 0 0
614 0 0
615 0 0
616 0 0
617 0 0
618 0 0
619 0 0
620 0 0
621 0 0
622 0 0
623 0 0
624 0 0
625 0 0
626 0 0
627 0 0
628 0 0
629 0 0
630 0 0
631 0 0
632 0 0
633 0 0
634 0 0
635 0 0
636 0 0
637 0 0
638 0 0
639 0 0
640 0 0
641 0 0
642 0 0
643 0 0
644 0 0
645 0 0
646 0 0
647 0 0
648 0 0
649 0 0
650 0 0
651 0 0
652 0 0
653 0 0
654 0 0
655 0 0
656 0 0
657 0 0
658 0 0
659 0 0
660 0 0
661 0 0
662 0 0
663 0 0
664 0 0
665 0 0
666 0 0
667 0 0
668 0 0
669 0 0
670 0 0
671 0 0
672 0 0
673 0 0
674 0 0
675 0 0
676 0 0
677 0 0
678 0 0
679 0 0
680 0 0
681 0 0
682 0 0
683 0 0
684 0 0
685 0 0
686 0 0
687 0 0
688 0 0
689 0 0
690 0 0
691 0 0
692 0 0
693 0 0
694 0 0
695 0 0
696 0 0
697 0 0
698 0 0
699 0 0
700 0 0
701 0 0
702 0 0
703 0 0
704 0 0
705 0 0
706 0 0
707 0 0
708 0 0
709 0 0
710 0 0
711 0 0
712 0 0
713 0 0
714 0 0
715 0 0
716 0 0
717 0 0
718 0 0
719 0 0
720 0 0
721 0 0
722 0 0
723 0 0
724 0 0
725 0 0
726 0 0
727 0 0
728 0 0
729 0 0
730 0 0
731 0 0
732 0 0
733 0 0
734 0 0
735 0 0
736 0 0
737 0 0
738 0 0
739 0 0
740 0 0
741 0 0
742 0 0
743 0 0
744 0 0
745 0 0
746 0 0
747 0 0
748 0 0
749 0 0
750 0 0
751 0 0
752 0 0
753 0 0
754 0 0
755 0 0
756 0 0
757 0 0
758 0 0
759 0 0
760 0 0
761 0 0
762 0 0
763 0 0
764 0 0
765 0 0
766 0 0
767 0 0
768 0 0
769 0 0
770 0 0
771 0 0
772 0 0
773 0 0
774 0 0
775 0 0
776 0 0
777 0 0
778 0 0
779 0 0
780 0 0
781 0 0
782 0 0
783 0 0
784 0 0
785 0 0
786 0 0
787 0 0
788 0 0
789 0 0
790 0 0
791 0 0
792 0 0
793 0 0
794 0 0
795 0 0
796 0 0
797 0 0
798 0 0
799 0 0
800 0 0
801 0 0
802 0 0
803 0 0
804 0 0
805 0 0
806 0 0
807 0 0
808 0 0
809 0 0
810 0 0
811 0 0
812 0 0
813 0 0
814 0 0
815 0 0
816 0 0
817 0 0
818 0 0
819 0 0
820 0 0
821 0 0
822 0 0
823 0 0
824 0 0
825 0 0
826 0 0
827 0 0
828 0 0
829 0 0
830 0 0
831 0 0
832 0 0
833 0 0
834 0 0
835 0 0
836 0 0
837 0 0
838 0 0
839 0 0
840 0 0
841 0 0
842 0 0
843 0 0
844 0 0
845 0 0
846 0 0
847 0 0
848 0 0
849 0 0
850 0 0
851 0 0
852 0 0
853 0 0
854 0 0
855 0 0
856 0 0
857 0 0
858 0 0
859 0 0
860 0 0
861 0 0
862 0 0
863 0 0
864 0 0
865 0 0
866 0 0
867 0 0
868 0 0
869 0 0
870 0 0
871 0 0
872 0 0
873 0 0
874 0 0
875 0 0
876 0 0
877 0 0
878 0 0
879 0 0
880 0 0
881 0 0
882 0 0
883 0 0
884 0 0
885 0 0
886 0 0
887 0 0
888 0 0
889 0 0
890 0 0
891 0 0
892 0 0
893 0 0
894 0 0
895 0 0
896 0 0
897 0 0
898 0 0
899 0 0
900 0 0
901 0 0
902 0 0
903 0 0
904 0 0
905 0 0
906 0 0
907 0 0
908 0 0
909 0 0
910 0 0
911 0 0
912 0 0
913 0 0
914 0 0
915 0 0
916 0 0
917 0 0
918 0 0
919 0 0
920 0 0
921 0 0
922 0 0
923 0 0
924 0 0
925 0 0
926 0 0
927 0 0
928 0 0
929 0 0
930 0 0
931 0 0
932 0 0
933 0 0
934 0 0
935 0 0
936 0 0
937 0 0
938 0 0
939 0 0
940 0 0
941 0 0
942 0 0
943 0 0
944 0 0
945 0 0
946 0 0
947 0 0
948 0 0
949 0 0
950 0 0
951 0 0
952 0 0
953 0 0
954 0 0
955 0 0
956 0 0
957 0 0
****************Time: 4.649
trainer.getErrorValue = 1.4521421559936876
StageITrainer.getErrorValue = 482.27809835973795
StageIITrainer.getErrorValue = 1.4521421559936876
Link to Java source.