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); }