示例#1
0
        /**
         * Extract statistics from the confusion matrices.
         */
        public ResultT Results()
        {
            // aggregate confusion matrix
            Vector cm = new Vector(0.0, 4);

            for (int ii = 0; ii < confusion_matrices.Count; ii++)
            {
                cm += confusion_matrices[ii];
            }

            ResultT ret = new ResultT();

            ret.Recall  = cm[(int)ConfusionMatrixEntry.TRUE_POSITIVE];
            ret.Recall /= (cm[(int)ConfusionMatrixEntry.TRUE_POSITIVE] + cm[(int)ConfusionMatrixEntry.FALSE_NEGATIVE]);

            ret.Precision  = cm[(int)ConfusionMatrixEntry.TRUE_POSITIVE];
            ret.Precision /= (cm[(int)ConfusionMatrixEntry.TRUE_POSITIVE] + cm[(int)ConfusionMatrixEntry.FALSE_POSITIVE]);

            ret.FallOut  = cm[(int)ConfusionMatrixEntry.FALSE_POSITIVE];
            ret.FallOut /= (cm[(int)ConfusionMatrixEntry.FALSE_POSITIVE] + cm[(int)ConfusionMatrixEntry.TRUE_NEGATIVE]);

            ret.F1  = 2.0 * cm[(int)ConfusionMatrixEntry.TRUE_POSITIVE];
            ret.F1 /= (2.0 * cm[(int)ConfusionMatrixEntry.TRUE_POSITIVE] + cm[(int)ConfusionMatrixEntry.FALSE_POSITIVE] + cm[(int)ConfusionMatrixEntry.FALSE_NEGATIVE]);

            return(ret);
        }
示例#2
0
        /**
         * Evaluate all user study sessions for a given device type.
         */
        public static void evaluate_sessions(DeviceType device)
        {
            List <ConfusionMatrices> confusion_matrices = new List <ConfusionMatrices>();

            int[] participants = get_participant_list(device);

            for (int i = 0; i < participants.Length - 1; i++)
            {
                ConfusionMatrices cm = evaluate_session(
                    device,
                    participants[i]);

                confusion_matrices.Add(cm);

                int idx = confusion_matrices.Count - 1;

                Console.WriteLine("Participant: " + participants[i]);

                ResultT resultss = confusion_matrices[idx].Results();
                resultss.Print();
                Console.WriteLine();
            }


            // put all results into first confusion
            // matrix
            for (int ii = 1; ii < confusion_matrices.Count; ii++)
            {
                confusion_matrices[0].AddResult(confusion_matrices[ii]);
            }

            Console.WriteLine("Aggregate results:");

            ResultT result = confusion_matrices[0].Results();

            result.Print();
            Console.WriteLine();
        }
示例#3
0
        /**
         * A simple user independent test.
         */
        public static void user_indepedent_test(DeviceType device)
        {
            // First, load all training data for one device type.
            string path = "";

            if (device == DeviceType.KINECT)
            {
                path = Global.GetRootDirectory() + "datasets/jk2017/kinect/training/";
            }
            else if (device == DeviceType.LEAP_MOTION)
            {
                path = Global.GetRootDirectory() + "datasets/jk2017/leap_motion/training/";
            }


            Dataset ds = Dataset.LoadDataset(path);

            int subject_cnt      = ds.Subjects.Count;
            int sample_cnt       = ds.Samples.Count;
            ConfusionMatrices cm = new ConfusionMatrices(ds);

            // iterate through all subjects
            for (int subject_id = 0; subject_id < subject_cnt; subject_id++)
            {
                ConfusionMatrices cm_individual = new ConfusionMatrices(ds);

                Console.WriteLine("Participant: " + subject_id);

                // train a recognizer with the selected subject
                JackknifeBlades blades = new JackknifeBlades();

                blades.SetIPDefaults();

                Jackknife jk = new Jackknife(blades);

                for (int sample_id = 0; sample_id < sample_cnt; sample_id++)
                {
                    Sample sample = ds.Samples[sample_id];

                    if (sample.SubjectId != subject_id)
                    {
                        continue;
                    }

                    jk.AddTemplate(ds.Samples[sample_id]);
                }

                // only train the recognize if you need

                // test the recognizer with all other samples
                for (int sample_id = 0; sample_id < sample_cnt; sample_id++)
                {
                    Sample sample = ds.Samples[sample_id];

                    if (sample.SubjectId == subject_id)
                    {
                        continue;
                    }

                    int gid = jk.Classify(sample);

                    cm_individual.AddResult(
                        sample.GestureId,
                        gid);
                }

                cm.AddResult(cm_individual);

                ResultT resultss = cm_individual.Results();
                resultss.Print();
            }

            Console.WriteLine("Aggregate Results: ");
            ResultT results = cm.Results();

            results.Print();
        }