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(); }
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."); } }