// TESTOWANIE private void testToolStripMenuItem_Click(object sender, EventArgs e) { ekranRTB.Text = ""; for (int i = 0; i < d.dane.GetLength(1) - 1; i++) { ekranRTB.Text += "Kolumna " + i + " zysk: " + Metody.GainRatio(d.dane, i).ToString() + "\n"; } }
public void BudujDrzewo(string[,] dane, int idWezlaNadrzednego) { // brak obiektów (koniec budowania drzewa) if (dane.GetLength(0) == 0) { return; } // wszystkie obiekty mają tą samej klasy decyzyjnej (tworzenie liścia / decyzji) else if (Metody.Entropia(dane, dane.GetLength(1) - 1) == 0) { wezly.Add(new Wezel(idWezlaNadrzednego, typ.decyzja, dane[0, dane.GetLength(1) - 1].ToString())); return; } else { List <double> gainRatios = new List <double>(); for (int i = 0; i < dane.GetLength(1) - 1; i++) { gainRatios.Add(Metody.GainRatio(dane, i)); } int maxGainAt = gainRatios.IndexOf(gainRatios.Max()); if (gainRatios.Max() == 0) { // dane są sprzeczne to decyzja jest losowa wezly.Add(new Wezel(idWezlaNadrzednego, typ.decyzja, dane[0, dane.GetLength(1) - 1].ToString())); return; } Wezel w = new Wezel(idWezlaNadrzednego, typ.atrybut, maxGainAt.ToString()); wezly.Add(w); string[] wybranaKolumna = Metody.Kolumna(dane, maxGainAt); List <string> mozliwosci = wybranaKolumna.Distinct().ToList(); for (int i = 0; i < mozliwosci.Count; i++) { Wezel wDziecko = new Wezel(w.id, typ.wartosc, mozliwosci[i].ToString()); wezly.Add(wDziecko); BudujDrzewo(Metody.NowaTabela(dane, maxGainAt, mozliwosci[i]), wDziecko.id); } } return; }