/// <summary> /// Calcula o centróide geral do seus dados pegando a medias de todos os campos /// </summary> public void CalculaCentroideGeral() { for (int i = 0; i <= numeroDeAtributos - 1; i++) { CentroideGeral.Add( Dados.AsEnumerable().Average(x => Convert.ToDouble(x[i])) ); } Tela.Escrever("Centróide Geral : "); Tela.Escrever(CentroideGeral); }
/// <summary> /// Calculo da separação - n * d(Ck,C) /// n = numero de registros do grupo /// d = calculo distancia /// Ck = centroide do grupo /// C = centroide geral /// </summary> public void CalculoSeparacao() { Separacoes.Clear(); for (int i = 0; i <= Centroides.Count - 1; i++) { //Pega o total de registro que tem de determinado grupo var reg = Dados.AsEnumerable().Where(x => x.Field <int>("Grupo") == i).Count(); Separacoes.Add(reg * Formulas.Distancia(Centroides[i], CentroideGeral)); } }
/// <summary> /// Responsavel por iniciar o processo de agrupamento /// </summary> public void Processamento() { Agrupa(Centroides); //imprime os grupos e a quantidade de registro que tem em cada um deles Tela.Escrever("\n Grupo : Itens : Coesão : Separação"); for (int i = 0; i <= NumeroGrupos - 1; i++) { Tela.Escrever("Grupo " + i + " : " + Dados.AsEnumerable().Where(x => x.Field <int>("Grupo") == i).Count() + " : " + Coesoes[i] + " : " + Separacoes[i]); } }
/// <summary> /// Calculo da Coesao /// soma da distancia de todos os itens do grupo para seu centroide /// </summary> public void CalculoCoesao() { Coesoes.Clear(); for (int i = 0; i <= Centroides.Count - 1; i++) { Coesoes.Add( Dados.AsEnumerable() .Where(x => x.Field <int>("Grupo") == i) .Sum(x => x.Field <double>("DistanciaMin")) ); } }
/// <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()); } }