static void Main(string[] args) { Atributo risco = new Atributo("risco", new ArrayList { "alto", "moderado", "baixo" }); Atributo historico_credito = new Atributo("historico_credito", new ArrayList { "ruim", "desconhecida", "boa" }); Atributo divida = new Atributo("divida", new ArrayList { "alta", "baixa" }); Atributo garantia = new Atributo("garantia", new ArrayList { "nenhuma", "adequada" }); Atributo renda = new Atributo("renda", new ArrayList { "$0 a $15 mil", "$15 a $35 mil", "acima de $35 mil" }); Atributo[] atributos = new Atributo[] { historico_credito, divida, garantia, renda }; DataTable amostras = GetDataTable(); ArvoreDecisao id3 = new ArvoreDecisao(); No raiz = id3.montarArvore(amostras, "risco", atributos); print(raiz, ""); Console.ReadKey(); }
private No montarArvoreInterna(DataTable amostras, string rotulo, Atributo[] atributos) { if (verificaSeTodosPertecemAMesmaClasse(amostras, rotulo).Count == 1) { return(new No(new Atributo(amostras.Rows[0]))); } if (atributos.Length == 0) { return(new No(new Atributo(getValorMaisComum(amostras, rotulo)))); } this.Total = amostras.Rows.Count; this.RotuloAtributo = rotulo; this.TotalAltos = totalRisco(amostras, "alto"); this.TotalBaixos = totalRisco(amostras, "baixo"); this.TotalModerados = totalRisco(amostras, "moderado"); this.Entropia = calcularEntropia(this.TotalAltos, this.TotalBaixos, this.TotalModerados); Atributo melhorAtributo = getMelhorAtributo(amostras, atributos); No raiz = new No(melhorAtributo); DataTable amostra = amostras.Clone(); foreach (var item in melhorAtributo.Valores) { #region Seleciona todas os elementos com o valor deste atributo amostra.Rows.Clear(); DataRow[] rows = amostras.Select(melhorAtributo.Nome + " = " + "'" + item.ToString() + "'"); foreach (DataRow row in rows) { amostra.Rows.Add(row.ItemArray); } #endregion #region Cria uma nova lista de atributos menos o atributo corrente que é o melhor atributo ArrayList atrbts = new ArrayList(atributos.Length - 1); for (int i = 0; i < atributos.Length; i++) { if (atributos[i].Nome != melhorAtributo.Nome) { atrbts.Add(atributos[i]); } } #endregion if (amostra.Rows.Count == 0) { return(new No(new Atributo(getValorMaisComum(amostra, rotulo)))); } else { ArvoreDecisao id3 = new ArvoreDecisao(); No noFilho = id3.montarArvore(amostra, rotulo, (Atributo[])atrbts.ToArray(typeof(Atributo))); raiz.AdicionarNo(noFilho, item.ToString()); } } return(raiz); }