예제 #1
0
        public void TestERTreesLetterRecognition()
        {
            Matrix <float> data, response;

            ReadLetterRecognitionData(out data, out response);

            int trainingSampleCount = (int)(data.Rows * 0.8);

            Matrix <Byte> varType = new Matrix <byte>(data.Cols + 1, 1);

            varType.SetValue((byte)MlEnum.VarType.Numerical);         //the data is numerical
            varType[data.Cols, 0] = (byte)MlEnum.VarType.Categorical; //the response is catagorical

            MCvRTParams param = new MCvRTParams();

            param.maxDepth           = 10;
            param.minSampleCount     = 10;
            param.regressionAccuracy = 0.0f;
            param.useSurrogates      = false;
            param.maxCategories      = 15;
            param.priors             = IntPtr.Zero;
            param.calcVarImportance  = true;
            param.nactiveVars        = 4;
            param.termCrit           = new MCvTermCriteria(100, 0.01f);
            param.termCrit.Type      = Emgu.CV.CvEnum.TermCritType.Iter;

            using (ERTrees forest = new ERTrees())
            {
                bool success = forest.Train(
                    data.GetRows(0, trainingSampleCount, 1),
                    Emgu.CV.ML.MlEnum.DataLayoutType.RowSample,
                    response.GetRows(0, trainingSampleCount, 1),
                    null,
                    null,
                    varType,
                    null,
                    param);

                if (!success)
                {
                    return;
                }

#if !NETFX_CORE
                String fileName = Path.Combine(Path.GetTempPath(), "ERTree.xml");
                forest.Save(fileName);
                if (File.Exists(fileName))
                {
                    File.Delete(fileName);
                }
#endif

                double trainDataCorrectRatio = 0;
                double testDataCorrectRatio  = 0;
                for (int i = 0; i < data.Rows; i++)
                {
                    using (Matrix <float> sample = data.GetRow(i))
                    {
                        double r = forest.Predict(sample, null);
                        r = Math.Abs(r - response[i, 0]);
                        if (r < 1.0e-5)
                        {
                            if (i < trainingSampleCount)
                            {
                                trainDataCorrectRatio++;
                            }
                            else
                            {
                                testDataCorrectRatio++;
                            }
                        }
                    }
                }

                trainDataCorrectRatio /= trainingSampleCount;
                testDataCorrectRatio  /= (data.Rows - trainingSampleCount);

                EmguAssert.WriteLine(String.Format("Prediction accuracy for training data :{0}%", trainDataCorrectRatio * 100));
                EmguAssert.WriteLine(String.Format("Prediction accuracy for test data :{0}%", testDataCorrectRatio * 100));
            }
        }
예제 #2
0
        public void TestERTreesLetterRecognition()
        {
            Matrix<float> data, response;
             ReadLetterRecognitionData(out data, out response);

             int trainingSampleCount = (int)(data.Rows * 0.8);

             Matrix<Byte> varType = new Matrix<byte>(data.Cols + 1, 1);
             varType.SetValue((byte)MlEnum.VAR_TYPE.NUMERICAL); //the data is numerical
             varType[data.Cols, 0] = (byte)MlEnum.VAR_TYPE.CATEGORICAL; //the response is catagorical

             MCvRTParams param = new MCvRTParams();
             param.maxDepth = 10;
             param.minSampleCount = 10;
             param.regressionAccuracy = 0.0f;
             param.useSurrogates = false;
             param.maxCategories = 15;
             param.priors = IntPtr.Zero;
             param.calcVarImportance = true;
             param.nactiveVars = 4;
             param.termCrit = new MCvTermCriteria(100, 0.01f);
             param.termCrit.type = Emgu.CV.CvEnum.TERMCRIT.CV_TERMCRIT_ITER;

             using (ERTrees forest = new ERTrees())
             {
            bool success = forest.Train(
               data.GetRows(0, trainingSampleCount, 1),
               Emgu.CV.ML.MlEnum.DATA_LAYOUT_TYPE.ROW_SAMPLE,
               response.GetRows(0, trainingSampleCount, 1),
               null,
               null,
               varType,
               null,
               param);

            forest.Save("ERTree.xml");

            if (!success) return;

            double trainDataCorrectRatio = 0;
            double testDataCorrectRatio = 0;
            for (int i = 0; i < data.Rows; i++)
            {
               using (Matrix<float> sample = data.GetRow(i))
               {
                  double r = forest.Predict(sample, null);
                  r = Math.Abs(r - response[i, 0]);
                  if (r < 1.0e-5)
                  {
                     if (i < trainingSampleCount)
                        trainDataCorrectRatio++;
                     else
                        testDataCorrectRatio++;
                  }
               }
            }

            trainDataCorrectRatio /= trainingSampleCount;
            testDataCorrectRatio /= (data.Rows - trainingSampleCount);

            Trace.WriteLine(String.Format("Prediction accuracy for training data :{0}%", trainDataCorrectRatio*100));
            Trace.WriteLine(String.Format("Prediction accuracy for test data :{0}%", testDataCorrectRatio*100));

             }
        }
예제 #3
0
        public void TestERTreesLetterRecognition()
        {
            Matrix <float> data, response;

            ReadLetterRecognitionData(out data, out response);

            int trainingSampleCount = (int)(data.Rows * 0.8);

            Matrix <Byte> varType = new Matrix <byte>(data.Cols + 1, 1);

            varType.SetValue((byte)MlEnum.VAR_TYPE.NUMERICAL);         //the data is numerical
            varType[data.Cols, 0] = (byte)MlEnum.VAR_TYPE.CATEGORICAL; //the response is catagorical

            MCvRTParams param = new MCvRTParams();

            param.maxDepth           = 10;
            param.minSampleCount     = 10;
            param.regressionAccuracy = 0.0f;
            param.useSurrogates      = false;
            param.maxCategories      = 15;
            param.priors             = IntPtr.Zero;
            param.calcVarImportance  = true;
            param.nactiveVars        = 4;
            param.termCrit           = new MCvTermCriteria(100, 0.01f);
            param.termCrit.type      = Emgu.CV.CvEnum.TERMCRIT.CV_TERMCRIT_ITER;

            using (ERTrees forest = new ERTrees())
            {
                bool success = forest.Train(
                    data.GetRows(0, trainingSampleCount, 1),
                    Emgu.CV.ML.MlEnum.DATA_LAYOUT_TYPE.ROW_SAMPLE,
                    response.GetRows(0, trainingSampleCount, 1),
                    null,
                    null,
                    varType,
                    null,
                    param);

                forest.Save("ERTree.xml");

                if (!success)
                {
                    return;
                }

                double trainDataCorrectRatio = 0;
                double testDataCorrectRatio  = 0;
                for (int i = 0; i < data.Rows; i++)
                {
                    using (Matrix <float> sample = data.GetRow(i))
                    {
                        double r = forest.Predict(sample, null);
                        r = Math.Abs(r - response[i, 0]);
                        if (r < 1.0e-5)
                        {
                            if (i < trainingSampleCount)
                            {
                                trainDataCorrectRatio++;
                            }
                            else
                            {
                                testDataCorrectRatio++;
                            }
                        }
                    }
                }

                trainDataCorrectRatio /= trainingSampleCount;
                testDataCorrectRatio  /= (data.Rows - trainingSampleCount);

                Trace.WriteLine(String.Format("Prediction accuracy for training data :{0}%", trainDataCorrectRatio * 100));
                Trace.WriteLine(String.Format("Prediction accuracy for test data :{0}%", testDataCorrectRatio * 100));
            }
        }