Пример #1
0
        //The Least Squares algorithm
        //It uses a PartialLeastSquaresAnalysis library object using a non-linear iterative partial least squares algorithm
        //and runs on the mean-centered and standardized data
        private ConfusionMatrix RunLS(Double[,] trainingSet, Double[,] trainingOutput, Double[,] testSet, int[] expected)
        {
            //Create an analysis
            PartialLeastSquaresAnalysis pls = new PartialLeastSquaresAnalysis(trainingSet, trainingOutput,
                                                                        AnalysisMethod.Standardize, PartialLeastSquaresAlgorithm.NIPALS);
            pls.Compute();

            //After computing the analysis
            //create a linear model to predict new variables
            MultivariateLinearRegression regression = pls.CreateRegression();

            //This will hold the result of the classifications
            var predictedLifted = new int[testSet.GetLength(0)][];

            for (int i = 0; i < predictedLifted.Length; ++i)
            {

                predictedLifted[i] = regression
                                .Compute(testSet.GetRow(i)) //Retrieve the row vector of the test set
                                .Select(x => Convert.ToInt32(x))// Convert the result to int
                                .ToArray();
            }

            //Unlift the prediction vector
            var predicted = predictedLifted
                            .SelectMany(x => x)
                            .ToArray();

            //For test, assume 1 as positive and 0 as negative
            int positive = 0;
            int negative = 1;

            //Create a new confusion matrix with the calculated parameters
            ConfusionMatrix cmatrix = new ConfusionMatrix(predicted, expected, positive, negative);
            return cmatrix;
        }