Ejemplo n.º 1
0
        private string PreveClasse(Entrada entrada, Distancia distancia, Desempate desempate, Base baseDeTreinamento, int k)
        {
            var distancias = distancia.Calcular(entrada, baseDeTreinamento, k);
            var votos      = new Dictionary <string, int>();

            foreach (var voto in distancias)
            {
                if (votos.ContainsKey(voto.Classe))
                {
                    votos[voto.Classe] += 1;
                }
                else
                {
                    votos.Add(voto.Classe, 1);
                }
            }

            if (!MaisDeUmaClasseMaisProxima(votos))
            {
                return(votos.First().Key);
            }

            var votosOrdenados = votos.OrderByDescending(x => x.Value).ToList();

            if (!Empate(votosOrdenados))
            {
                return(votosOrdenados[0].Key);
            }

            return(desempate.Desempata(distancias, votos));
        }
Ejemplo n.º 2
0
        private MatrizDeConfusao ClassificaBaseDeDados(Base treinamento, Base testes, Distancia metodoDeDistancia, Desempate metodoDeDesempate, int k)
        {
            var matriz = new MatrizDeConfusao(treinamento.Classes);

            foreach (var entrada in testes.Dados)
            {
                var classePrevista = PreveClasse(entrada, metodoDeDistancia, metodoDeDesempate, k);

                if (AcertouPrevisao(classePrevista, entrada.Classe))
                {
                    matriz.AcertouPrevisao(classePrevista);
                }
                else
                {
                    matriz.ErrouPrevisao(classePrevista, entrada.Classe);
                }
            }

            return(matriz);
        }
Ejemplo n.º 3
0
        public void Treina(Base treinamento, Base testes, Distancia metodoDeDistancia, Desempate metodoDeDesempate, int k)
        {
            BaseDeDados = treinamento.Zip(testes);
            MelhorK     = k;

            var tempo = new Stopwatch();

            tempo.Start();

            MatrizDeConfusao = ClassificaBaseDeDados(treinamento, testes, metodoDeDistancia, metodoDeDesempate, k);

            tempo.Stop();
            TempoDeExecucao = tempo.Elapsed;
        }
Ejemplo n.º 4
0
        public void Treina(Base treinamento, Base testes, Distancia metodoDeDistancia, Desempate metodoDeDesempate)
        {
            var kMaximo = Math.Log(10, 2);
            var melhorK = 0;

            BaseDeDados = treinamento.Zip(testes);

            for (var k = 3; k <= kMaximo; k++)
            {
                var tempo = new Stopwatch();
                tempo.Start();

                var matriz = ClassificaBaseDeDados(treinamento, testes, metodoDeDistancia, metodoDeDesempate, k);

                tempo.Stop();

                if (MatrizDeConfusao == null || matriz.Acuracia() > MatrizDeConfusao.Acuracia())
                {
                    MelhorK          = k;
                    MatrizDeConfusao = matriz;
                    TempoDeExecucao  = tempo.Elapsed;
                }
            }
        }
Ejemplo n.º 5
0
        public string PreveClasse(Entrada entrada, Distancia metodoDeDistancia, Desempate metodoDeDesempate, int k)
        {
            var classePrevista = PreveClasse(entrada, metodoDeDistancia, metodoDeDesempate, BaseDeDados, k);

            return(classePrevista);
        }