פרויקט מסכם — מסווג Naive Bayes
הגדרת הפרויקט
זהו הפרויקט המסכם של שלוש היחידות הראשונות של הקורס — OOP, SOLID, ו-Exceptions/IO/JSON/LINQ יחד: בונים מסווג טקסט פשוט (Naive Bayes) שקורא הודעות מתויגות מקובץ CSV (“ספאם”/“תקין”), לומד מהן תדירויות מילים לפי קטגוריה, ומסווג הודעה חדשה על סמך מה שלמד. זו הפעם הראשונה בקורס שבה כל הכלים שנלמדו — File I/O, LINQ, מחלקות, SOLID — צריכים להתחבר לפרויקט אחד שלם ואמיתי, בלי הדרכה שלב-אחר-שלב.
הרעיון של האלגוריתם: Naive Bayes מסווג הודעה חדשה לפי תדירויות המילים שראה בכל קטגוריה בזמן האימון — הנחת ה"תמימות" (Naive) היא שכל מילה בהודעה בלתי-תלויה בשאר, הנחה לא מדויקת לחלוטין אך שעובדת טוב בפועל במסנני ספאם אמיתיים.
מה צריך להיות מוכן בסוף
דרישות:
- קובץ CSV עם לפחות 20 הודעות מתויגות (
text,label, spam/ham), עם מגוון מילים חוזרות בכל קטגוריה - פונקציה שקוראת את ה-CSV לרשימת רשומות (טיפול נכון בשורת הכותרת)
- חישוב תדירויות מילים לכל קטגוריה מנתוני האימון, באמצעות LINQ (
GroupBy,SelectMany,ToDictionary) - מחלקת
NaiveBayesClassifierעם הפרדה ברורה לפי SRP — למשל מתודות נפרדות ל-Train(למידה) ול-Classify(חיזוי), ולא הכל בגוש אחד - סיווג 3 הודעות חדשות (לא מנתוני האימון) והדפסת התוצאה (
spam/ham) לכל אחת
קריטריוני הצלחה:
• הודעה עם מילים אופייניות ל-spam (כמו “חינם”, “זכית”) מסווגת כ-spam; הודעה רגילה מסווגת כ-ham
• מילה חדשה שלא הופיעה באימון כלל לא גורמת לציון כולו להתאפס (יש לחשוב על ברירת מחדל סבירה לתדירות לא-מוכרת)
• שינוי סדר השורות בקובץ ה-CSV לא משנה את תוצאת הסיווג הסופית
• קריאת ה-CSV, ספירת התדירויות והסיווג עצמו נמצאים בשלושה מקומות נפרדים וברורים בקוד — לא מעורבבים במתודה אחת