Пример #1
0
        public MatrixData GetRightOrWrongMatrix(MatrixData input)
        {
            MatrixData output = new MatrixData(input.NumberOfRows, 4);

            output.ChangeHeader(0, "#");
            output.ChangeHeader(1, "Actual");
            output.ChangeHeader(2, "Predict");
            output.ChangeHeader(3, "Correct?");



            double[][] dataSet = input.Data.ToJagged().ToDoubleArray();
            // percentage correct using winner-takes all
            bool result;
            int  numCorrect = 0;
            int  numWrong   = 0;

            double[] xValues = new double[numInput];  // inputs
            double[] tValues = new double[numOutput]; // targets
            double[] yValues;                         // computed Y
            confusionMatrix = new int[numOutput, numOutput];
            //confusionMatrixCnt = 0;
            for (int i = 0; i < dataSet.Length; ++i)
            {
                Array.Copy(dataSet[i], xValues, numInput); // parse test data into x-values and t-values
                Array.Copy(dataSet[i], numInput, tValues, 0, numOutput);
                yValues = this.ComputeOutputs(xValues);
                int maxIndexOut      = MaxIndex(yValues); // which cell in yValues has largest value?
                int maxIndexExpected = MaxIndex(tValues); // which cell in yValues has largest value?
                if (maxIndexOut == maxIndexExpected)
                {
                    numCorrect++; result = true;
                }
                else
                {
                    numWrong++; result = false;
                }

                output.SetValue(i, 0, input.GetRowName(i));
                output.SetValue(i, 1, maxIndexOut);
                output.SetValue(i, 2, maxIndexExpected);
                output.SetValue(i, 3, (result)? "Y":"N");
            }
            return(output);
        }