Beispiel #1
0
        public static string[,] NowaTabela(string[,] tablica, int nrAtrybutu, string wartosc)
        {
            int iloscWierszy = Metody.IleWystapien(Metody.Kolumna(tablica, nrAtrybutu), wartosc);

            string[,] nowaTab = new string[iloscWierszy, tablica.GetLength(1)];
            int wierszNowej = 0;

            for (int i = 0; i < tablica.GetLength(0); i++)
            {
                if (tablica[i, nrAtrybutu] == wartosc)
                {
                    for (int j = 0; j < tablica.GetLength(1); j++)
                    {
                        nowaTab[wierszNowej, j] = tablica[i, j];
                    }
                    wierszNowej++;
                }
            }
            return(nowaTab);
        }
Beispiel #2
0
        public static double Info2(string[,] tablica, int nrKolumny)
        {
            double suma = 0;

            string[] wartAtrybutu = Metody.Kolumna(tablica, nrKolumny);
            Dictionary <string, int> tabWystapien = Metody.Wystapienia(wartAtrybutu);

            for (int i = 0; i < tabWystapien.Count; i++)
            {
                List <string> podzial = new List <string>();
                for (int j = 0; j < wartAtrybutu.Length; j++)
                {
                    if (wartAtrybutu[j] == tabWystapien.ElementAt(i).Key)
                    {
                        podzial.Add(tablica[j, tablica.GetLength(1) - 1]);
                    }
                }
                suma += ((double)tabWystapien.ElementAt(i).Value / wartAtrybutu.Length) * Entropia(podzial.ToArray());
            }
            return(suma);
        }
Beispiel #3
0
 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;
 }
Beispiel #4
0
 public static double Entropia(string[,] tablica, int nrKolumny)
 {
     return(Entropia(Metody.Kolumna(tablica, nrKolumny)));
 }
Beispiel #5
0
 public static double SplitInfo(string[,] tablica, int nrAtrybutu)
 {
     return(Entropia(Metody.Kolumna(tablica, nrAtrybutu)));
 }