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