示例#1
0
        private void bgw_DoWork(object sender, DoWorkEventArgs e)
        {
            var data = (List <object>)e.Argument;

            Metrics.metric metric        = data[0] as Metrics.metric;
            string         choosedMetric = data[1] as string;
            double         precision;
            int            maxK = KChecker.maxK(sampleColection);

            for (int i = 1; i < maxK; i++)
            {
                precision = OneVsRest.precision(sampleColection, i, metric, p);
                kResults.Add("K: " + i + " Metric: " + choosedMetric + "\nPrecision: " + Math.Round(Convert.ToDecimal(precision), 2) + "%\n----------\n");
                double procentage = (double)i / (maxK - 1) * 100;
                bgw.ReportProgress((int)procentage);
            }
        }
示例#2
0
        public static double precision(SampleColection sampleColection, int k, Metrics.metric choosedMetric, int p)
        {
            SampleColection newSampleColection = sampleColection.copy();
            int             probes             = 0;
            int             correct            = 0;
            var             samples            = newSampleColection.samples;
            Sample          tmp;

            for (int i = 0; i < samples.Count; i++)
            {
                probes++;
                tmp = newSampleColection.samples.First();
                newSampleColection.removeSample(tmp);
                int?result = Algorithm.chooseDecision(tmp.attributes, newSampleColection, k, choosedMetric, p);
                if (result == tmp.decision)
                {
                    correct++;
                }
                newSampleColection.addSample(tmp);
            }
            return((double)correct / probes * 100);
        }
        static Dictionary <int, double> countSumOfKminDistances(List <double> sampleToCheck, SampleColection data, int k, Metrics.metric choosedMetric, int p)
        {
            var distances = new Dictionary <int, List <double> >();

            distances = countDistances(sampleToCheck, data, choosedMetric, p);
            double sumOfKminDistances = 0;
            var    minDistances       = new Dictionary <int, double>();

            foreach (var item in distances)
            {
                item.Value.Sort();
                for (int i = 0; i < k; i++)
                {
                    sumOfKminDistances += item.Value[i];
                }
                minDistances.Add(item.Key, sumOfKminDistances);
                sumOfKminDistances = 0;
            }
            return(minDistances);
        }
        public static int?chooseDecision(List <double> attributesToCheck, SampleColection sampleColection, int k, Metrics.metric choosedMetric, int p)
        {
            var normalizedAttributes      = Normalization.normalizeAttributes(sampleColection, attributesToCheck);
            var normalizedSampleColection = Normalization.normalizeSampleColection(sampleColection);
            var minDistances = new Dictionary <int, double>();

            minDistances = countSumOfKminDistances(normalizedAttributes, normalizedSampleColection, k, choosedMetric, p);
            double min      = minDistances.First().Value;
            int    decision = minDistances.First().Key;

            foreach (var item in minDistances)
            {
                if (item.Value < min)
                {
                    min      = item.Value;
                    decision = item.Key;
                }
            }
            if (isOnlyOneMin(minDistances, min))
            {
                return(decision);
            }
            return(null);
        }
        static Dictionary <int, List <double> > countDistances(List <double> sampleToCheck, SampleColection data, Metrics.metric choosedMetric, int p)
        {
            var    distances = new Dictionary <int, List <double> >();
            double distance;

            foreach (Sample sample in data.samples)
            {
                distance = choosedMetric(sampleToCheck, sample.attributes, p);
                if (!distances.ContainsKey(sample.decision))
                {
                    distances.Add(sample.decision, new List <double> {
                        distance
                    });
                }
                else
                {
                    distances[sample.decision].Add(distance);
                }
            }
            return(distances);
        }