Esempio n. 1
0
        public double CalcularDistanciaEuclidiana(ItemNormalizado item1, ItemNormalizado item2, bool xNumeric, bool yNumeric)
        {
            double distanciaX, distanciaY;

            //se os atributos forem numéricos, faz o calculo da distância entre eles
            //se não forem, verifica se são iguais ou diferentes
            if (!xNumeric)
            {
                distanciaX = item1.ItemOriginal.X.Valor.ToString() == item2.ItemOriginal.X.Valor.ToString() ? 0 : 1;
            }
            else
            {
                distanciaX = item1.ValorX - item2.ValorX;
            }

            if (!yNumeric)
            {
                distanciaY = item1.ItemOriginal.Y.Valor.ToString() == item2.ItemOriginal.Y.Valor.ToString() ? 0 : 1;
            }
            else
            {
                distanciaY = item1.ValorY - item2.ValorY;
            }

            //DISTANCIA EUCLIDIANA = RAIZ QUADRADA (SOMA (DISTANCIAS AO QUADRADO))
            return(Math.Sqrt(Math.Pow(distanciaX, 2) + Math.Pow(distanciaY, 2)));
        }
Esempio n. 2
0
        public ItemNormalizado Classificar(Item novoItem)
        {
            var calculadoraDistancia = new DistanciaEuclidiana();
            //Item a ser classificado é normalizado
            var             itemNormalizado    = Normalizar(novoItem);
            double?         menorDistancia     = null;
            ItemNormalizado itemMenorDistancia = null;

            //os itens do dataset são percorridos para acharmos o item que possui a menor distância
            //em relação ao item a ser classificado
            foreach (var item in _dataset.Itens)
            {
                //Calcula a distância euclidiana dos itens
                var distancia = calculadoraDistancia.CalcularDistanciaEuclidiana(
                    item, itemNormalizado, _dataset.XNumeric, _dataset.YNumeric
                    );

                if (menorDistancia == null)
                {
                    menorDistancia     = distancia;
                    itemMenorDistancia = item;
                    continue;
                }

                if (distancia < menorDistancia)
                {
                    menorDistancia     = distancia;
                    itemMenorDistancia = item;
                }
            }

            //retorna o item do dataset que possui a menor distância
            return(itemMenorDistancia);
        }