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