Пример #1
0
        private Classifier ClassifyCustom()
        {
            List <ObjectModel> objectsToRemove = new List <ObjectModel>();

            var dbTrain = new Database();
            var dbTest  = new Database();

            foreach (var obj in _database.Objects)
            {
                dbTrain.AddObject(obj);
            }

            dbTrain.FeaturesIDs = _database.FeaturesIDs;

            dbTest.AddObject(new ObjectModel("A", new List <float> {
                1, 1
            }));

            _classifier = new Classifier(dbTrain, dbTest);

            _classifier.ClassifyNearestNeighbour();
            _classifier.ClassifyKNearestNeighbour(uint.Parse(TextBoxNeighbours.Text));
            _classifier.ClassifyNearesMean();
            _classifier.ClassifyKNearestMean(int.Parse(TextBoxMeans.Text));

            return(_classifier);
        }
Пример #2
0
        private Classifier ClassifyGiven()
        {
            List <ObjectModel> objectsToRemove = new List <ObjectModel>();

            var dbTrain = new Database();;
            var dbTest  = new Database();

            foreach (var obj in _database.Objects)
            {
                dbTrain.AddObject(obj);
            }

            int objectsQuant = dbTrain.Objects.Count * int.Parse(TextBoxTestObjects.Text) / 100;

            dbTrain.FeaturesIDs = _database.FeaturesIDs;

            for (int i = 0; i < objectsQuant; i++)
            {
                int r = _random.Next(objectsQuant);
                dbTest.AddObject(_database.Objects[r]);
                objectsToRemove.Add(_database.Objects[r]);
            }

            foreach (var obj in objectsToRemove)
            {
                dbTrain.RemoveObject(obj);
            }

            _classifier = new Classifier(dbTrain, dbTest);

            _classifier.ClassifyNearestNeighbour();
            _classifier.ClassifyKNearestNeighbour(uint.Parse(TextBoxNeighbours.Text));
            _classifier.ClassifyNearesMean();
            _classifier.ClassifyKNearestMean(int.Parse(TextBoxMeans.Text));

            return(_classifier);
        }
Пример #3
0
        private void ButtonClassify2_Click(object sender, RoutedEventArgs e)
        {
            int k = int.Parse(TextBoxParts.Text);

            List <ObjectModel> objectsToRemove = new List <ObjectModel>();

            var dbTrain = new Database();
            var dbTest  = new Database();

            foreach (var obj in _database.Objects)
            {
                dbTrain.AddObject(obj);
            }

            int objectsQuant = dbTrain.Objects.Count;

            int partQuantity = objectsQuant / k;

            IList <List <ObjectModel> > parts = new List <List <ObjectModel> >();

            var classAobjects = dbTrain.Objects.Where(o => o.ClassName.Equals(dbTrain.ClassNames[0])).ToList();
            var classBobjects = dbTrain.Objects.Where(o => o.ClassName.Equals(dbTrain.ClassNames[1])).ToList();

            for (int i = 0; i < k; i++)
            {
                var part        = new List <ObjectModel>();
                var objAforPart = classAobjects.Skip(classAobjects.Count / k * i).Take(classAobjects.Count / k).ToList();
                var objBforPart = classBobjects.Skip(classBobjects.Count / k * i).Take(classBobjects.Count / k).ToList();

                foreach (var obj in objAforPart)
                {
                    part.Add(obj);
                }

                foreach (var obj in objBforPart)
                {
                    part.Add(obj);
                }

                parts.Add(part);
            }

            float tempResultNN = 0f, tempResultKNN = 0f, tempResultNM = 0f, tempResultKNM = 0f;

            foreach (var part in parts)
            {
                dbTest              = new Database();
                dbTrain             = new Database();
                dbTrain.FeaturesIDs = _database.FeaturesIDs;
                dbTrain.ClassNames  = _database.ClassNames;

                foreach (var obj in part)
                {
                    dbTest.Objects.Add(obj);
                }

                var trainingParts = parts.Where(p => p != part).ToList();

                foreach (var trainingPart in trainingParts)
                {
                    foreach (var obj in trainingPart)
                    {
                        dbTrain.Objects.Add(obj);
                    }
                }

                _classifier = new Classifier(dbTrain, dbTest);

                _classifier.ClassifyNearestNeighbour();
                _classifier.ClassifyKNearestNeighbour(uint.Parse(TextBoxNeighbours.Text));
                _classifier.ClassifyNearesMean();
                _classifier.ClassifyKNearestMean(int.Parse(TextBoxMeans.Text));

                tempResultNN  += _classifier.NearestNeighbourResult.Effectiveness;
                tempResultKNN += _classifier.KNearestNeighbourResult.Effectiveness;
                tempResultNM  += _classifier.NearestMeanResult.Effectiveness;
                tempResultKNM += _classifier.KNearestMeanResult.Effectiveness;
            }

            float finalResultNN  = tempResultNN / k;
            float finalResultKNN = tempResultKNN / k;
            float finalResultNM  = tempResultNM / k;
            float finalResultKNM = tempResultKNM / k;

            List <MethodResult2> results = new List <MethodResult2>();

            results.Add(new MethodResult2 {
                MethodName = "NN", Effectiveness = finalResultNN
            });
            results.Add(new MethodResult2 {
                MethodName = "KNN", Effectiveness = finalResultKNN
            });
            results.Add(new MethodResult2 {
                MethodName = "NM", Effectiveness = finalResultNM
            });
            results.Add(new MethodResult2 {
                MethodName = "KNM", Effectiveness = finalResultKNM
            });

            DataGridClassification2.ItemsSource = results;
        }