Exemple #1
0
        static void Main(string[] args)
        {
            List <WarunkiPogodowe> zbior = Klasyfikator.InicjujZbior();

            Klasyfikator.PokazZbiorTreningowy(zbior);

            // PRZYKŁAD 2 Z PREZENTACJI
            WarunkiPogodowe nowyprzypadek1 = new WarunkiPogodowe("deszczowo", 21, "słaby", null);

            Console.WriteLine("\n Obecne warunki: " + nowyprzypadek1.ToString());
            Klasyfikator.Zdecyduj(zbior, nowyprzypadek1);

            // PRZYKŁAD 3 Z PREZENTACJI - PROBLEM CZĘSTOŚCI ZERA
            Console.WriteLine("\n");
            WarunkiPogodowe nowyprzypadek2 = new WarunkiPogodowe("pochmurno", 14, "mocny", null);

            Console.WriteLine("\n Obecne warunki: " + nowyprzypadek2.ToString());
            Klasyfikator.Zdecyduj(zbior, nowyprzypadek2);

            Console.ReadKey();
        }
Exemple #2
0
        public static void Zdecyduj(List <WarunkiPogodowe> zbior, WarunkiPogodowe przypadek)
        {
            string pogodaTeraz = przypadek.Pogoda, tempTeraz = przypadek.Temp, wiatrTeraz = przypadek.Wiatr;
            int    lambda = 1;                 // współczynnik korekcyjny

            int[] rozneatrybuty = { 3, 3, 3 }; //liczba różnych wartości danego atrybutu

            //Budowa "klas" C1 i C2
            List <WarunkiPogodowe> zbiorTAK = new List <WarunkiPogodowe>(); //C1
            List <WarunkiPogodowe> zbiorNIE = new List <WarunkiPogodowe>(); //C2

            for (int i = 0; i < zbior.Count; i++)
            {
                if (zbior[i].Decyzja == "tak")
                {
                    zbiorTAK.Add(zbior[i]);
                }
                else
                {
                    zbiorNIE.Add(zbior[i]);
                }
            }

            //Prawdopodobieństwo, że ten przypadek należy do C1:
            double C1 = (double)zbiorTAK.Count / zbior.Count;
            double pogoda = 0, temperatura = 0, wiatr = 0;

            for (int i = 0; i < zbiorTAK.Count; i++)
            {
                if (zbiorTAK[i].Pogoda == pogodaTeraz)
                {
                    pogoda += 1;
                }
                if (zbiorTAK[i].Temp == tempTeraz)
                {
                    temperatura += 1;
                }
                if (zbiorTAK[i].Wiatr == wiatrTeraz)
                {
                    wiatr += 1;
                }
            }

            // If-else'y w przypadku wystąpienia problemu częstości zera
            if (pogoda == 0)
            {
                pogoda = (pogoda + lambda) / (zbiorTAK.Count + lambda * rozneatrybuty[0]);
            }
            else
            {
                pogoda /= zbiorTAK.Count;
            }
            if (temperatura == 0)
            {
                temperatura = (temperatura + lambda) / (zbiorTAK.Count + lambda * rozneatrybuty[1]);
            }
            else
            {
                temperatura /= zbiorTAK.Count;
            }
            if (wiatr == 0)
            {
                wiatr = (wiatr + lambda) / (zbiorTAK.Count + lambda * rozneatrybuty[2]);
            }
            else
            {
                wiatr /= zbiorTAK.Count;
            }
            double razemC1 = C1 * pogoda * temperatura * wiatr;

            //Prawdopodobieństwo, że ten przypadek należy do C2:
            double C2 = (double)zbiorNIE.Count / zbior.Count; pogoda = 0; temperatura = 0; wiatr = 0;

            for (int i = 0; i < zbiorNIE.Count; i++)
            {
                if (zbiorNIE[i].Pogoda == pogodaTeraz)
                {
                    pogoda += 1;
                }
                if (zbiorNIE[i].Temp == tempTeraz)
                {
                    temperatura += 1;
                }
                if (zbiorNIE[i].Wiatr == wiatrTeraz)
                {
                    wiatr += 1;
                }
            }

            // If-else'y w przypadku wystąpienia problemu częstości zera
            if (pogoda == 0)
            {
                pogoda = (pogoda + lambda) / (zbiorNIE.Count + lambda * rozneatrybuty[0]);
            }
            else
            {
                pogoda /= zbiorNIE.Count;
            }
            if (temperatura == 0)
            {
                temperatura = (temperatura + lambda) / (zbiorNIE.Count + lambda * rozneatrybuty[1]);
            }
            else
            {
                temperatura /= zbiorNIE.Count;
            }
            if (wiatr == 0)
            {
                wiatr = (wiatr + lambda) / (zbiorNIE.Count + lambda * rozneatrybuty[2]);
            }
            else
            {
                wiatr /= zbiorNIE.Count;
            }
            double razemC2 = C2 * pogoda * temperatura * wiatr;

            Console.WriteLine("\n C1 (TAK): " + razemC1 + ", C2 (NIE): " + razemC2);
            Console.Write(" Decyzja: ");
            if (razemC1 > razemC2)
            {
                Console.Write("Warto wyjść na spacer.");
            }
            else
            {
                Console.Write("Nie powinieneś wychodzić na spacer.");
            }
        }