Beispiel #1
0
        // bpnn Training
        public void training(int epoch, string path, int Znode, int Ynode, double learningRate, double numberOfClasses)
        {
            Console.WriteLine("Training Result :");
            bpnn bp = new bpnn();

            bp.num       = 1;
            bp.inputNode = 0;
            bp.totalData = 0;

            //read data from txt file
            using (StreamReader myReader = new StreamReader(path))
            {
                string line = " ";
                string l    = "";
                while (line != null)
                {
                    line = myReader.ReadLine();
                    if (line != null)
                    {
                        l = line;
                        //Split data by comma
                        String[] value = l.Split(null);

                        //to get the number of input node
                        bp.inputNode = value.Length;
                        //to get the number of total iteration/ line of data(150 data)
                        bp.totalData = bp.totalData + 1;
                    }
                }
                myReader.Close();
            }
            //Read Input data
            bp.Inode  = bp.inputNode - 1;
            bp.data   = new double[bp.totalData, bp.Inode];
            bp.target = new double[bp.totalData];
            using (StreamReader myReader = new StreamReader(path))
            {
                string l    = "";
                int    a    = 0;
                string line = myReader.ReadLine();
                while (line != null)
                {
                    l = line;
                    //Split data by space
                    String[] value = l.Split(null);

                    for (int i = 0; i < bp.inputNode; i++)
                    {
                        if (i == bp.inputNode - 1)
                        {
                            bp.target[a] = Convert.ToDouble(value[i]);
                        }
                        else
                        {
                            bp.data[a, i] = Convert.ToDouble(value[i]);
                            // Console.WriteLine(bp.data[a, i]);
                        }
                    }
                    a++;

                    line = myReader.ReadLine();
                }
                myReader.Close();
            }
            bp.Vweight = new double[bp.Inode, Znode];
            bp.Wweight = new double[Znode, Ynode];

            //Step 0 Initilize random weight
            initializeWeight(bp.Inode, bp.Wweight, bp.Vweight, bp.inputNode, Znode, Ynode);

            bp.x             = new double[bp.Inode];
            bp.deltaKError   = new double[Ynode];
            bp.Z_in          = new double[Znode];
            bp.Z             = new double[Znode];
            bp.Y_in          = new double[Ynode];
            bp.Y             = new double[Ynode];
            bp.weightChangeV = new double[bp.Inode, Znode];
            bp.weightChangeW = new double[Znode, Ynode];
            bp.sum2          = 0.0;

            double benchmark = (1.0 / numberOfClasses) / 2.0;

            int[,] confusionMatrix = new int[(int)numberOfClasses, (int)numberOfClasses];
            while (bp.num <= epoch)
            {
                correctnessIrisSetosa        = 0;
                correctnessIrisVersicolour   = 0;
                correctnessIrisVirginica     = 0;
                incorrectnessIrisSetosa      = 0;
                incorrectnessIrisVersicolour = 0;
                incorrectnessIrisVirginica   = 0;
                for (int p = 0; p < bp.totalData; p++)
                {
                    for (int i = 0; i < bp.Inode; i++)
                    {
                        bp.x[i] = bp.data[p, i];
                    }

                    feedForward(bp.Inode, Znode, Ynode, bp.x, bp.Vweight, bp.Wweight, bp.Z_in, bp.Z, bp.Y_in, bp.Y, bp.target, p, numberOfClasses, benchmark, confusionMatrix);
                    bp.sum2 = bp.sum2 + backpropagationOfError(bp.Inode, Znode, Ynode, bp.deltaKError, bp.Vweight, bp.Wweight, bp.Y, bp.target, p, learningRate, bp.Z, bp.weightChangeW, bp.weightChangeV, bp.x);
                    updateWeight(bp.weightChangeV, bp.weightChangeW, bp.Vweight, bp.Wweight, bp.Inode, Znode, Ynode);
                }

                /*   if (bp.meanSquareError < 0.1)
                 *  {
                 *      break;
                 *  }*/
                bp.num++;
            }
            File.Create("C:/Users/Firdaus Samad/Documents/Visual Studio 2015/Projects/backpropagation2/backpropagation2/WeightV.txt").Close();
            File.Create("C:/Users/Firdaus Samad/Documents/Visual Studio 2015/Projects/backpropagation2/backpropagation2/WeightW.txt").Close();
            WriteTextWeight(bp.Vweight, bp.Inode, Znode, "C:/Users/Firdaus Samad/Documents/Visual Studio 2015/Projects/backpropagation2/backpropagation2/WeightV.txt");
            WriteTextWeight(bp.Wweight, Znode, Ynode, "C:/Users/Firdaus Samad/Documents/Visual Studio 2015/Projects/backpropagation2/backpropagation2/WeightW.txt");
            Console.WriteLine("===============================================");
            Console.WriteLine("Confusion Matrix");
            Console.WriteLine("===============================================");
            Console.WriteLine("a\tb\tc");
            for (int i = 0; i < ((int)numberOfClasses); i++)
            {
                for (int y = 0; y < numberOfClasses; y++)
                {
                    Console.Write(confusionMatrix[i, y] + "\t");
                }
                switch (i)
                {
                case 0:
                    Console.WriteLine("a - Iris-Setosa");
                    break;

                case 1:
                    Console.WriteLine("b - Iris Versicolour");
                    break;

                case 2:
                    Console.WriteLine("c - Iris-Virginica");
                    break;
                }
            }
            Console.WriteLine();

            Console.WriteLine("===============================================");
            //for()
            double correctness           = correctnessIrisVirginica + correctnessIrisVersicolour + correctnessIrisSetosa;
            double CorrectnessPercent    = (correctness / bp.totalData) * 100;
            double NotCorrectnessPercent = 100 - CorrectnessPercent;

            Console.WriteLine("Correctly Classified Instances\t\t:" + (int)correctness + "\t" + CorrectnessPercent + "%");
            Console.WriteLine("Incorrectly Classified Instances\t:" + (bp.totalData - (int)correctness) + "\t" + NotCorrectnessPercent + "%");

            // calAccuracy(numberOfClasses, bp.Y, Ynode, bp.target, bp.totalData);
            bp.meanSquareError = bp.sum2 / epoch;

            Console.WriteLine("MSE :" + bp.meanSquareError);
        }
Beispiel #2
0
        //Testing
        public void testing(string path, int Znode, int Ynode, double learningRate, double numberOfClasses)
        {
            Console.WriteLine("\n\nTesting Result :");
            bpnn bp = new bpnn();

            bp.num       = 1;
            bp.inputNode = 0;
            bp.totalData = 0;

            //read data from txt file
            using (StreamReader myReader = new StreamReader(path))
            {
                string line = " ";
                string l    = "";
                while (line != null)
                {
                    line = myReader.ReadLine();
                    if (line != null)
                    {
                        l = line;
                        //Split data by comma
                        String[] value = l.Split(null);

                        //to get the number of input node
                        bp.inputNode = value.Length;
                        //to get the number of total iteration/ line of data(150 data)
                        bp.totalData = bp.totalData + 1;
                    }
                }
                myReader.Close();
            }
            //Read Input data
            bp.Inode  = bp.inputNode - 1;
            bp.data   = new double[bp.totalData, bp.Inode];
            bp.target = new double[bp.totalData];
            using (StreamReader myReader = new StreamReader(path))
            {
                string l    = "";
                int    a    = 0;
                string line = myReader.ReadLine();
                while (line != null)
                {
                    l = line;
                    //Split data by space
                    String[] value = l.Split(null);

                    for (int i = 0; i < bp.inputNode; i++)
                    {
                        if (i == bp.inputNode - 1)
                        {
                            bp.target[a] = Convert.ToDouble(value[i]);
                        }
                        else
                        {
                            bp.data[a, i] = Convert.ToDouble(value[i]);
                        }
                    }
                    a++;

                    line = myReader.ReadLine();
                }
                myReader.Close();
            }
            bp.Vweight = new double[bp.Inode, Znode];
            bp.Wweight = new double[Znode, Ynode];

            bp.x             = new double[bp.Inode];
            bp.deltaKError   = new double[Ynode];
            bp.Z_in          = new double[Znode];
            bp.Z             = new double[Znode];
            bp.Y_in          = new double[Ynode];
            bp.Y             = new double[Ynode];
            bp.weightChangeV = new double[bp.Inode, Znode];
            bp.weightChangeW = new double[Znode, Ynode];
            bp.sum2          = 0.0;

            double benchmark = (1.0 / numberOfClasses) / 2.0;

            int[,] confusionMatrix = new int[(int)numberOfClasses, (int)numberOfClasses];
            readWeight(Znode, bp.Inode, Ynode, bp.Wweight, bp.Vweight);
            correctnessIrisSetosa        = 0;
            correctnessIrisVersicolour   = 0;
            correctnessIrisVirginica     = 0;
            incorrectnessIrisSetosa      = 0;
            incorrectnessIrisVersicolour = 0;
            incorrectnessIrisVirginica   = 0;
            for (int p = 0; p < bp.totalData; p++)
            {
                for (int i = 0; i < bp.Inode; i++)
                {
                    bp.x[i] = bp.data[p, i];
                }

                feedForward(bp.Inode, Znode, Ynode, bp.x, bp.Vweight, bp.Wweight, bp.Z_in, bp.Z, bp.Y_in, bp.Y, bp.target, p, numberOfClasses, benchmark, confusionMatrix);
            }

            /*   if (bp.meanSquareError < 0.1)
             *  {
             *      break;
             *  }*/
            bp.num++;
            Console.WriteLine("===============================================");
            Console.WriteLine("Confusion Matrix");
            Console.WriteLine("===============================================");
            Console.WriteLine("a\tb\tc");
            for (int i = 0; i < ((int)numberOfClasses); i++)
            {
                for (int y = 0; y < numberOfClasses; y++)
                {
                    Console.Write(confusionMatrix[i, y] + "\t");
                }
                switch (i)
                {
                case 0:
                    Console.WriteLine("a - Iris-Setosa");
                    break;

                case 1:
                    Console.WriteLine("b - Iris Versicolour");
                    break;

                case 2:
                    Console.WriteLine("c - Iris-Virginica");
                    break;
                }
            }
            Console.WriteLine();

            Console.WriteLine("===============================================");
            //for()
            double correctness           = correctnessIrisVirginica + correctnessIrisVersicolour + correctnessIrisSetosa;
            double CorrectnessPercent    = (correctness / bp.totalData) * 100;
            double NotCorrectnessPercent = 100 - CorrectnessPercent;

            Console.WriteLine("Correctly Classified Instances\t\t:" + (int)correctness + "\t" + CorrectnessPercent + "%");
            Console.WriteLine("Incorrectly Classified Instances\t:" + (bp.totalData - (int)correctness) + "\t" + NotCorrectnessPercent + "%");
        }