Ejemplo n.º 1
0
        /// <summary>
        /// recalcula o centroide
        /// com base na medias dos registros do seu grupo
        /// </summary>
        public void RecalculaCentroides()
        {
            Centroides.Clear();
            var centroide = new List <double>();

            for (int i = 0; i <= NumeroGrupos - 1; i++)
            {
                centroide.Clear();
                for (int j = 0; j <= numeroDeAtributos - 1; j++)
                {
                    var total = Dados.AsEnumerable()
                                .Where(x => x.Field <int>("Grupo") == i)
                                .Average(x => Convert.ToDouble(x[j]));

                    centroide.Add(total);
                }

                Centroides.Add(centroide.ToList());
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// captura aleatoriamente k centroides dos dados
        /// </summary>
        public void CentroidesIniciais()
        {
            var rdn = new Random();
            var aux = new List <int>();

            for (int i = 0; i <= NumeroGrupos - 1; i++)
            {
                var reg = rdn.Next(Dados.Rows.Count);
                //operação para evitar dois centroides iguais
                while (aux.IndexOf(reg) >= 0)
                {
                    reg = rdn.Next(Dados.Rows.Count);
                }
                aux.Add(reg);

                Centroides.Add(
                    Dados.Rows[reg].ItemArray.Select(x => Convert.ToDouble(x)).Take(numeroDeAtributos).ToList()
                    );
            }
        }