public void ComputeTest()
        {
            double[][] inputs = 
            {
                // Class 0
                new double[] {  4,  1 }, 
                new double[] {  2,  4 },
                new double[] {  2,  3 },
                new double[] {  3,  6 },
                new double[] {  4,  4 },

                // Class 1
                new double[] {  9, 10 },
                new double[] {  6,  8 },
                new double[] {  9,  5 },
                new double[] {  8,  7 },
                new double[] { 10,  8 }
            };

            int[] output = 
            {
                0, 0, 0, 0, 0, // The first five are from class 0
                1, 1, 1, 1, 1  // The last five are from class 1
            };

            // Then, we will create a LDA for the given instances.
            var mmdc = new MinimumMeanDistanceClassifier(inputs, output);

            double[][] projection = mmdc.Scores(inputs);

            // Or perform classification using:
            int[] results = mmdc.Decide(inputs);


            Assert.IsTrue(results.IsEqual(output));
            
            //string str = projection.ToCSharp();

            double[][] expected = new double[][] {
                new double[] { -7.76, -62.92 },
                new double[] { -1.16, -53.92 },
                new double[] { -1.36, -62.12 },
                new double[] { -5.76, -31.72 },
                new double[] { -1.16, -32.32 },
                new double[] { -76.96, -6.12 },
                new double[] { -28.36, -5.92 },
                new double[] { -37.96, -7.12 },
                new double[] { -36.56, -0.52 },
                new double[] { -68.36, -2.72 } 
            };

            Assert.IsTrue(expected.IsEqual(projection, 1e-6));
        }
예제 #2
0
파일: MainForm.cs 프로젝트: qusma/framework
        private void btnFeature_Click(object sender, EventArgs e)
        {
            if (pca == null)
            {
                MessageBox.Show("Please compute the analysis first!");
                return;
            }

            ImageToArray converter = new ImageToArray(min: -1, max: +1);

            int rows = dataGridView3.Rows.Count;
            double[][] inputs = new double[rows][];
            double[][] features = new double[rows][];
            int[] outputs = new int[rows];

            int index = 0;
            foreach (DataGridViewRow row in dataGridView3.Rows)
            {
                Bitmap image = row.Cells["colHand2"].Value as Bitmap;
                int label = (int)row.Cells["colLabel2"].Value;

                double[] input;
                converter.Convert(image, out input);

                double[] feature = pca.Transform(input);

                row.Cells["colProjection"].Value = feature.ToString("N2");

                row.Tag = feature;
                inputs[index] = input;
                features[index] = feature;
                outputs[index] = label;
                index++;
            }

            classifier = new MinimumMeanDistanceClassifier(features, outputs);

            btnClassify.Enabled = true;
        }
        public void new_method()
        {
            #region doc_learn
            // Create some sample input data instances. 

            double[][] inputs = 
            {
                // Class 0
                new double[] {  4,  1 }, 
                new double[] {  2,  4 },
                new double[] {  2,  3 },

                // Class 1
                new double[] {  5,  5 },
                new double[] {  5,  6 },

                // Class 2
                new double[] { 10,  8 }
            };

            int[] output = 
            {
                0, 0, 0, // The first three are from class 0
                1, 1,    // The second two are from class 1
                2        // The last is from class 2
            };

            // We will create a MMDC object for the data
            var mmdc = new MinimumMeanDistanceClassifier();

            // Compute the analysis and create a classifier
            mmdc.Learn(inputs, output);

            // Now we can project the data into mean distance space:
            double[][] projection = mmdc.Scores(inputs);

            // Or perform classification using:
            int[] results = mmdc.Decide(inputs);
            #endregion

            Assert.IsTrue(results.IsEqual(output));

            string str = projection.ToCSharp();

            double[][] expected = new double[][] 
            {
                new double[] { -4.55555555555556, -21.25, -85 },
                new double[] { -2.22222222222222, -11.25, -80 },
                new double[] { -0.555555555555555, -15.25, -89 },
                new double[] { -10.8888888888889, -0.25, -34 },
                new double[] { -16.5555555555556, -0.25, -29 },
                new double[] { -82.2222222222222, -31.25, 0 } 
            };

            Assert.IsTrue(expected.IsEqual(projection, 1e-6));
        }