Ejemplo n.º 1
0
        public virtual double ClassifyLearnSamples(KnowlegeBasePCRules Source) //attention only for multicore processor optimized
        {
            Requires(Source != null && LearnSamplesSet.DataRows != null);
            int sum = LearnSamplesSet.DataRows.AsParallel().WithExecutionMode(ParallelExecutionMode.ForceParallelism).Count(x => x.StringOutput.Equals(classifyBase(x.InputAttributeValue, Source), StringComparison.OrdinalIgnoreCase));

            return((double)sum / (double)LearnSamplesSet.CountSamples * 100.0);
        }
Ejemplo n.º 2
0
        public string classifyBase(double[] object_c, KnowlegeBasePCRules Source)
        {
            Requires(Source != null);
            Requires(object_c != null);

            double max_sum = 0;
            bool   correct_classificate = false;
            string result       = "";
            var    RulesOfClass = Source.RulesDatabase.GroupBy(x => x.LabelOfClass);

            foreach (var RulesOfOneClass in RulesOfClass)
            {
                double sum = 0;
                foreach (var Rule in RulesOfOneClass)
                {
                    double mul = Rule.ListTermsInRule.Where(x => AcceptedFeatures[x.NumVar]).Select(y => y.LevelOfMembership(object_c)).Aggregate(1.0, (p, n) => p * n);
                    sum += mul * Rule.CF;
                }
                if (max_sum < sum)
                {
                    correct_classificate = true;
                    max_sum = sum;
                    result  = RulesOfOneClass.Key;
                }
            }
            if (!correct_classificate)
            {
                return("nonResult");
                //throw (new ArgumentException(
                //  "Невозможно классифицировать объект скорее всего существуют не накрытые участи на признаках"));
            }
            return(result);
        }
Ejemplo n.º 3
0
        public virtual double ClassifyTestSamples(KnowlegeBasePCRules Source)
        {
            Requires(Source != null && TestSamplesSet.DataRows != null);

            int sum = TestSamplesSet.DataRows.AsParallel().WithExecutionMode(ParallelExecutionMode.ForceParallelism).Count(x => x.StringOutput.Equals(classifyBase(x.InputAttributeValue, Source), StringComparison.OrdinalIgnoreCase));

            return((double)sum / (double)TestSamplesSet.CountSamples * 100.0);
        }
Ejemplo n.º 4
0
 public KnowlegeBasePCRules(KnowlegeBasePCRules source, List <bool> used_rules = null)
 {
     for (int i = 0; i < source.TermsSet.Count; i++)
     {
         Term temp_term = new Term(source.TermsSet[i]);
         TermsSet.Add(temp_term);
     }
     for (int j = 0; j < source.RulesDatabase.Count; j++)
     {
         if ((used_rules == null) || (used_rules[j]))
         {
             int [] order = new int[source.RulesDatabase[j].ListTermsInRule.Count];
             for (int k = 0; k < source.RulesDatabase[j].ListTermsInRule.Count; k++)
             {
                 Term temp_term = source.RulesDatabase[j].ListTermsInRule[k];
                 order[k] = source.TermsSet.FindIndex(x => x == temp_term);
             }
             string temp_class_label = source.RulesDatabase[j].LabelOfClass;
             double temp_cf          = source.RulesDatabase[j].CF;
             PCRule temp_rule        = new PCRule(TermsSet, order, temp_class_label, temp_cf);
             RulesDatabase.Add(temp_rule);
         }
     }
 }