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); } }
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); }