From f9e9c997fcdff601d557e46913e07eda675c6f80 Mon Sep 17 00:00:00 2001 From: "localizeflow[bot]" Date: Sun, 26 Apr 2026 20:07:19 +0000 Subject: [PATCH] chore(i18n): sync translations with latest source changes (chunk 1/1, 12 changes) --- translations/he/.co-op-translator.json | 14 +- .../4-techniques-of-ML/README.md | 110 +++--- .../he/2-Regression/3-Linear/README.md | 315 ++++++++++-------- .../3-Linear/solution/notebook.ipynb | 71 ++-- translations/nl/.co-op-translator.json | 14 +- .../4-techniques-of-ML/README.md | 100 +++--- .../nl/2-Regression/3-Linear/README.md | 250 +++++++------- .../3-Linear/solution/notebook.ipynb | 69 ++-- translations/vi/.co-op-translator.json | 14 +- .../4-techniques-of-ML/README.md | 102 +++--- .../vi/2-Regression/3-Linear/README.md | 276 ++++++++------- .../3-Linear/solution/notebook.ipynb | 63 ++-- 12 files changed, 746 insertions(+), 652 deletions(-) diff --git a/translations/he/.co-op-translator.json b/translations/he/.co-op-translator.json index b795d30e0..c7c3f9e08 100644 --- a/translations/he/.co-op-translator.json +++ b/translations/he/.co-op-translator.json @@ -36,8 +36,8 @@ "language_code": "he" }, "1-Introduction/4-techniques-of-ML/README.md": { - "original_hash": "9d91f3af3758fdd4569fb410575995ef", - "translation_date": "2025-09-05T19:35:07+00:00", + "original_hash": "84b1715a6be62ef1697351dcc5d7b567", + "translation_date": "2026-04-26T20:05:57+00:00", "source_file": "1-Introduction/4-techniques-of-ML/README.md", "language_code": "he" }, @@ -90,8 +90,8 @@ "language_code": "he" }, "2-Regression/3-Linear/README.md": { - "original_hash": "26c53a922f1f1e8542b0ea41ff52221a", - "translation_date": "2026-04-20T20:51:40+00:00", + "original_hash": "8b776e731c35b171d316d01d0e7b1369", + "translation_date": "2026-04-26T20:05:31+00:00", "source_file": "2-Regression/3-Linear/README.md", "language_code": "he" }, @@ -107,6 +107,12 @@ "source_file": "2-Regression/3-Linear/solution/Julia/README.md", "language_code": "he" }, + "2-Regression/3-Linear/solution/notebook.ipynb": { + "original_hash": "6781223ffbe8cfdaa38d0200f08e1288", + "translation_date": "2026-04-26T20:02:53+00:00", + "source_file": "2-Regression/3-Linear/solution/notebook.ipynb", + "language_code": "he" + }, "2-Regression/4-Logistic/README.md": { "original_hash": "abf86d845c84330bce205a46b382ec88", "translation_date": "2025-09-05T18:46:04+00:00", diff --git a/translations/he/1-Introduction/4-techniques-of-ML/README.md b/translations/he/1-Introduction/4-techniques-of-ML/README.md index 8ad70384d..7dc290732 100644 --- a/translations/he/1-Introduction/4-techniques-of-ML/README.md +++ b/translations/he/1-Introduction/4-techniques-of-ML/README.md @@ -1,123 +1,125 @@ -# טכניקות בלמידת מכונה +# טכניקות של למידת מכונה -תהליך הבנייה, השימוש והתחזוקה של מודלים בלמידת מכונה והנתונים שהם משתמשים בהם שונה מאוד מתהליכי פיתוח אחרים. בשיעור זה, נבאר את התהליך ונפרט את הטכניקות המרכזיות שעליכם להכיר. אתם תלמדו: +תהליך בניית, שימוש ותחזוקה של מודלים ללמידת מכונה והנתונים שהם משתמשים בהם הוא תהליך שונה מאוד מהרבה תהליכים אחרים בפיתוח. בשיעור זה, נמיר את המסתורין סביב התהליך, ונסקור את הטכניקות העיקריות שעליך להכיר. תלמדו: -- להבין את התהליכים שמניעים למידת מכונה ברמה גבוהה. -- לחקור מושגים בסיסיים כמו 'מודלים', 'תחזיות' ו'נתוני אימון'. +- להבין את התהליכים הבסיסיים של למידת מכונה ברמה גבוהה. +- לחקור מושגים בסיסיים כמו 'מודלים', 'תחזיות', ו'נתוני אימון'. -## [שאלון לפני השיעור](https://ff-quizzes.netlify.app/en/ml/) +## [מבחן טרום-הרצאה](https://ff-quizzes.netlify.app/en/ml/) -[![ML למתחילים - טכניקות בלמידת מכונה](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML למתחילים - טכניקות בלמידת מכונה") +[![למידת מכונה למתחילים - טכניקות של למידת מכונה](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "למידת מכונה למתחילים - טכניקות של למידת מכונה") -> 🎥 לחצו על התמונה למעלה לצפייה בסרטון קצר שמסביר את השיעור. +> 🎥 לחצו על התמונה למעלה כדי לצפות בסרטון קצר שעובר על השיעור הזה. ## מבוא ברמה גבוהה, מלאכת יצירת תהליכי למידת מכונה (ML) מורכבת ממספר שלבים: -1. **הגדרת השאלה**. רוב תהליכי ML מתחילים בשאלה שלא ניתן לענות עליה באמצעות תוכנית מותנית פשוטה או מנוע מבוסס חוקים. שאלות אלו לרוב עוסקות בתחזיות המבוססות על אוסף נתונים. -2. **איסוף והכנת נתונים**. כדי לענות על השאלה שלכם, אתם זקוקים לנתונים. איכות ולעיתים גם כמות הנתונים שלכם יקבעו עד כמה תוכלו לענות על השאלה הראשונית שלכם. ויזואליזציה של נתונים היא חלק חשוב בשלב זה. שלב זה כולל גם חלוקת הנתונים לקבוצת אימון ובדיקה לצורך בניית מודל. -3. **בחירת שיטת אימון**. בהתאם לשאלה שלכם ולאופי הנתונים, עליכם לבחור כיצד לאמן מודל שייצג בצורה הטובה ביותר את הנתונים ויבצע תחזיות מדויקות. זהו החלק בתהליך ML שדורש מומחיות ספציפית ולעיתים ניסוי רב. -4. **אימון המודל**. באמצעות נתוני האימון שלכם, תשתמשו באלגוריתמים שונים כדי לאמן מודל שיזהה דפוסים בנתונים. המודל עשוי להשתמש במשקלים פנימיים שניתן להתאים כדי להעדיף חלקים מסוימים של הנתונים על פני אחרים לצורך בניית מודל טוב יותר. -5. **הערכת המודל**. תשתמשו בנתונים שלא נראו בעבר (נתוני הבדיקה שלכם) מתוך הסט שנאסף כדי לראות כיצד המודל מתפקד. -6. **כיוונון פרמטרים**. בהתבסס על ביצועי המודל שלכם, תוכלו לחזור על התהליך עם פרמטרים או משתנים שונים שמכוונים את התנהגות האלגוריתמים ששימשו לאימון המודל. -7. **תחזית**. השתמשו בקלט חדש כדי לבדוק את דיוק המודל שלכם. +1. **החלטה על השאלה**. רוב תהליכי ה-ML מתחילים עם שאלה שלא ניתן לענות עליה באמצעות תוכנית פשוטה מבוססת תנאים או מנוע כללים. השאלות האלו בדרך כלל מתמקדות בתחזיות המבוססות על אוסף נתונים. +2. **איסוף והכנת נתונים**. כדי שתוכל לענות על שאלתך, אתה זקוק לנתונים. איכות וכמות הנתונים שלך יקבעו עד כמה תוכל לענות על השאלה הראשונית. ויזואליזציה של נתונים היא היבט חשוב של שלב זה. שלב זה כולל גם חלוקה של הנתונים לקבוצת אימון וקבוצת בדיקה כדי לבנות מודל. +3. **בחירת שיטת אימון**. בהתאם לשאלה שלך וטיב הנתונים, עליך לבחור כיצד לאמן את המודל כך שישקף בצורה הטובה ביותר את הנתונים שלך ויעשה תחזיות מדויקות. זהו חלק מתהליך ה-ML שדורש מומחיות ספציפית ולעיתים גם הרבה ניסוי וטעייה. +4. **אימון המודל**. באמצעות נתוני האימון תשתמש באלגוריתמים שונים כדי לאמן מודל שיזהה דפוסים בנתונים. המודל יכול לנצל משקלים פנימיים שניתן לכוונם כדי להעדיף חלקים מסוימים בנתונים על פני אחרים כדי לבנות מודל טוב יותר. +5. **הערכת המודל**. אתה משתמש בנתונים שטרם נראו (נתוני הבדיקה) מתוך האוסף שלך כדי לראות כיצד המודל מתפקד. +6. **כוונון פרמטרים**. בהתבסס על ביצועי המודל, אתה יכול לחזור על התהליך עם פרמטרים שונים או משתנים שבוחנים את התנהגות האלגוריתמים לאימון המודל. +7. **חיזוי**. השתמש בקלטים חדשים כדי לבדוק את דיוק המודל שלך. ## איזו שאלה לשאול -מחשבים מצטיינים במיוחד בגילוי דפוסים נסתרים בנתונים. יכולת זו מועילה מאוד לחוקרים שיש להם שאלות בתחום מסוים שלא ניתן לענות עליהן בקלות באמצעות יצירת מנוע חוקים מותנה. לדוגמה, במשימה אקטוארית, מדען נתונים עשוי להיות מסוגל לבנות חוקים מותאמים אישית סביב תמותת מעשנים לעומת לא מעשנים. +מחשבים מיומנים במיוחד בגילוי דפוסים נסתרים בנתונים. תכונה זו מועילה מאוד לחוקרים שיש להם שאלות בתחום נתון שקשה לענות עליהן על ידי יצירת מנוע כללים מבוסס תנאים. לדוגמה, מטלה אקטוארית, מדען נתונים יכול לבנות כללים ידניים סביב תמותה של מעשנים מול לא מעשנים. -כאשר משתנים רבים נוספים למשוואה, מודל ML עשוי להיות יעיל יותר בתחזית שיעורי תמותה עתידיים בהתבסס על היסטוריית בריאות קודמת. דוגמה משמחת יותר עשויה להיות תחזיות מזג אוויר לחודש אפריל במיקום מסוים בהתבסס על נתונים הכוללים קו רוחב, קו אורך, שינויי אקלים, קרבה לים, דפוסי זרם סילון ועוד. +כאשר נכנסות למערכת משתנים רבים נוספים, ייתכן שמודל למידת מכונה יהיה יעיל יותר לחיזוי שיעורי תמותה עתידיים על סמך היסטוריית בריאות קודמת. דוגמה יותר עליזה יכולה להיות חיזוי מזג אוויר לחודש אפריל במקום מסוים בהתבסס על נתונים הכוללים רוחב, אורך, שינויי אקלים, קרבה לאוקיינוס, דפוסי זרם ג'ט ועוד. -✅ מצגת זו [מצגת](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) על מודלים של מזג אוויר מציעה פרספקטיבה היסטורית לשימוש ב-ML בניתוח מזג אוויר. +✅ מצגת זו על מודלים של מזג אוויר מציעה פרספקטיבה היסטורית על שימוש בלמידת מכונה לניתוח מזג אוויר. -## משימות לפני בנייה +## משימות לפני הבנייה -לפני שתתחילו לבנות את המודל שלכם, ישנם מספר משימות שעליכם להשלים. כדי לבדוק את השאלה שלכם ולגבש השערה המבוססת על תחזיות המודל, עליכם לזהות ולהגדיר מספר אלמנטים. +לפני שתתחיל לבנות את המודל שלך, יש מספר משימות שעליך להשלים. כדי לבדוק את שאלתך וליצור היפותזה בהתבסס על תחזיות המודל, עליך לזהות ולהגדיר כמה אלמנטים. ### נתונים -כדי לענות על השאלה שלכם בוודאות כלשהי, אתם זקוקים לכמות מספקת של נתונים מהסוג הנכון. ישנם שני דברים שעליכם לעשות בשלב זה: +כדי שתוכל לענות על השאלה שלך בוודאות מסוימת, אתה זקוק לכמות טובה של נתונים מסוג מתאים. יש שתי פעולות שעליך לבצע בשלב זה: -- **איסוף נתונים**. תוך שמירה על השיעור הקודם בנושא הוגנות בניתוח נתונים, אספו את הנתונים שלכם בזהירות. היו מודעים למקורות הנתונים, להטיות מובנות שהם עשויים להכיל, ותעדו את מקורם. -- **הכנת נתונים**. ישנם מספר שלבים בתהליך הכנת הנתונים. ייתכן שתצטרכו לאחד נתונים ולנרמל אותם אם הם מגיעים ממקורות מגוונים. תוכלו לשפר את איכות וכמות הנתונים באמצעות שיטות שונות כמו המרת מחרוזות למספרים (כפי שעשינו ב[Clustering](../../5-Clustering/1-Visualize/README.md)). ייתכן שתייצרו נתונים חדשים בהתבסס על המקור (כפי שעשינו ב[Classification](../../4-Classification/1-Introduction/README.md)). תוכלו לנקות ולערוך את הנתונים (כפי שנעשה לפני השיעור על [אפליקציות אינטרנט](../../3-Web-App/README.md)). לבסוף, ייתכן שתצטרכו גם לערבב ולשנות את סדר הנתונים, בהתאם לטכניקות האימון שלכם. +- **איסוף נתונים**. תוך התחשבות בשיעור הקודם על הוגנות בניתוח הנתונים, אסוף את הנתונים שלך בזהירות. היה מודע למקורות הנתונים, ההטיות הטבועות בהם, ותעד את מקורם. +- **הכנת נתונים**. ישנם מספר שלבים בתהליך הכנת הנתונים. ייתכן שתצטרך לאסוף את הנתונים ולנרמל אותם אם הם מגיעים ממקורות מגוונים. ניתן לשפר את איכות וכמות הנתונים בשיטות שונות, כגון המרת מחרוזות למספרים (כפי שאנו עושים ב-[Clustering](../../5-Clustering/1-Visualize/README.md)). ייתכן גם שתיצור נתונים חדשים על בסיס המקוריים (כפי שאנו עושים ב-[Classification](../../4-Classification/1-Introduction/README.md)). ניתן לנקות ולערוך את הנתונים (כפי שנעשה לפני השיעור [Web App](../../3-Web-App/README.md)). לבסוף, ייתכן שתצטרך גם לשרשר ולערבב אותם, בהתאם לטכניקות האימון שלך. -✅ לאחר איסוף ועיבוד הנתונים, הקדישו רגע לבדוק אם הצורה שלהם תאפשר לכם להתמודד עם השאלה המיועדת. ייתכן שהנתונים לא יתפקדו היטב במשימה שלכם, כפי שגילינו בשיעורי [Clustering](../../5-Clustering/1-Visualize/README.md)! +✅ לאחר איסוף ועיבוד הנתונים שלך, עצור לרגע וראה אם צורתם תאפשר לך לטפל בשאלה שלך. ייתכן שהנתונים לא יתפקדו היטב במשימה הנתונה, כפי שאנו מגלים בשיעורי [Clustering](../../5-Clustering/1-Visualize/README.md)! -### מאפיינים ומטרה +### תכונות ויעד -[מאפיין](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) הוא תכונה מדידה של הנתונים שלכם. בהרבה מערכי נתונים הוא מתבטא ככותרת עמודה כמו 'תאריך', 'גודל' או 'צבע'. משתנה המאפיין שלכם, שמיוצג בדרך כלל כ-`X` בקוד, מייצג את משתנה הקלט שישמש לאימון המודל. +[feature](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) היא תכונה שניתנת למדידה של הנתונים שלך. ברבים ממאגרי הנתונים היא מבוטאת כתואר עמודה כמו 'תאריך', 'גודל' או 'צבע'. משתנה התכונה שלך, המיוצג בדרך כלל כ-`X` בקוד, מייצג את משתנה הקלט שישמש לאימון המודל. -מטרה היא הדבר שאתם מנסים לחזות. המטרה, שמיוצגת בדרך כלל כ-`y` בקוד, מייצגת את התשובה לשאלה שאתם מנסים לשאול מהנתונים שלכם: בחודש דצמבר, איזה **צבע** דלעות יהיה הזול ביותר? בסן פרנסיסקו, אילו שכונות יהיו בעלות **מחיר** הנדל"ן הטוב ביותר? לעיתים המטרה מכונה גם תכונת תווית. +היעד הוא הדבר שאתה מנסה לחזות. היעד, המיוצג בדרך כלל כ-`y` בקוד, מייצג את התשובה לשאלה שאתה שואל את הנתונים: בדצמבר, אילו דלעות יהיו בצבע הזול ביותר? בסן פרנסיסקו, באילו שכונות יהיה המחיר הנדל"ני הטוב ביותר? לפעמים היעד מכונה גם תכונת תווית. -### בחירת משתנה המאפיין שלכם +### בחירת משתנה התכונה -🎓 **בחירת מאפיינים והפקת מאפיינים** איך תדעו איזה משתנה לבחור בעת בניית מודל? סביר להניח שתעברו תהליך של בחירת מאפיינים או הפקת מאפיינים כדי לבחור את המשתנים הנכונים למודל הביצועי ביותר. עם זאת, הם אינם אותו הדבר: "הפקת מאפיינים יוצרת מאפיינים חדשים מפונקציות של המאפיינים המקוריים, בעוד שבחירת מאפיינים מחזירה תת-קבוצה של המאפיינים." ([מקור](https://wikipedia.org/wiki/Feature_selection)) +🎓 **בחירת תכונה וחילוץ תכונה** איך תדע איזה משתנה לבחור בונה מודל? ככל הנראה תעבור תהליך של בחירת תכונה או חילוץ תכונה כדי לבחור את המשתנים הנכונים למודל היעיל ביותר. עם זאת, הם לא אותו דבר: "חילוץ תכונה יוצר תכונות חדשות מפונקציות של התכונות המקוריות, בעוד שבחירת תכונה מחזירה תת-קבוצה של התכונות." ([מקור](https://wikipedia.org/wiki/Feature_selection)) -### ויזואליזציה של הנתונים שלכם +### ויזואליזציה של הנתונים שלך -היבט חשוב בארגז הכלים של מדען הנתונים הוא היכולת לייצג נתונים באופן חזותי באמצעות ספריות מצוינות כמו Seaborn או MatPlotLib. ייצוג הנתונים שלכם באופן חזותי עשוי לאפשר לכם לחשוף קשרים נסתרים שתוכלו לנצל. הוויזואליזציות שלכם עשויות גם לעזור לכם לחשוף הטיות או נתונים לא מאוזנים (כפי שגילינו ב[Classification](../../4-Classification/2-Classifiers-1/README.md)). +היבט חשוב בערכת הכלים של מדען הנתונים הוא היכולת ליצור ויזואליזציות של הנתונים באמצעות כמה ספריות מצוינות כמו Seaborn או MatPlotLib. ייצוג הנתונים ויזואלית עשוי לאפשר לך לחשוף מתאמים נסתרים שניתן לנצל. הוויזואליזציות עשויות גם לסייע לך לחשוף הטיה או נתונים לא מאוזנים (כפי שאנו מגלים ב-[Classification](../../4-Classification/2-Classifiers-1/README.md)). -### חלוקת מערך הנתונים שלכם +### חלוקת מאגר הנתונים -לפני האימון, עליכם לחלק את מערך הנתונים שלכם לשני חלקים או יותר בגודל לא שווה שעדיין מייצגים את הנתונים היטב. +לפני האימון, עליך לחלק את מאגר הנתונים שלך לשני חלקים או יותר בגודל שונה אך שמייצגים היטב את הנתונים. -- **אימון**. חלק זה של מערך הנתונים מותאם למודל שלכם כדי לאמן אותו. סט זה מהווה את רוב מערך הנתונים המקורי. -- **בדיקה**. מערך בדיקה הוא קבוצה עצמאית של נתונים, לעיתים נאספת מהנתונים המקוריים, שבה אתם משתמשים כדי לאשר את ביצועי המודל שנבנה. -- **אימות**. סט אימות הוא קבוצה עצמאית קטנה יותר של דוגמאות שבה אתם משתמשים לכוונון ההיפר-פרמטרים של המודל או הארכיטקטורה שלו כדי לשפר את המודל. בהתאם לגודל הנתונים שלכם ולשאלה שאתם שואלים, ייתכן שלא תצטרכו לבנות את הסט השלישי הזה (כפי שאנו מציינים ב[תחזיות סדרות זמן](../../7-TimeSeries/1-Introduction/README.md)). +- **אימון**. חלק זה של מאגר הנתונים מתאים למודל שלך כדי לאמן אותו. סט זה מהווה את רוב מאגר הנתונים המקורי. +- **בדיקה**. קבוצת בדיקה היא קבוצת נתונים עצמאית, שלעתים נאספה מתוך הנתונים המקוריים, שבה תשתמש כדי לאשר את ביצועי המודל. +- **אימות**. קבוצת אימות היא קבוצה עצמאית קטנה של דוגמאות שבה תשתמש כדי לכוונן את ההיפרפרמטרים או את הארכיטקטורה של המודל לשיפורו. בהתאם לגודל הנתונים והשאלה שאתה שואל, ייתכן שלא תצטרך לבנות קבוצה שלישית זו (כפי שמצויין ב-[Time Series Forecasting](../../7-TimeSeries/1-Introduction/README.md)). ## בניית מודל -באמצעות נתוני האימון שלכם, המטרה שלכם היא לבנות מודל, או ייצוג סטטיסטי של הנתונים שלכם, באמצעות אלגוריתמים שונים כדי **לאמן** אותו. אימון מודל חושף אותו לנתונים ומאפשר לו לבצע הנחות לגבי דפוסים שהוא מגלה, מאמת ומקבל או דוחה. +באמצעות נתוני האימון שלך, המטרה היא לבנות מודל, או ייצוג סטטיסטי של הנתונים שלך, באמצעות אלגוריתמים שונים להנחת **אימון** עליו. אימון מודל חושף אותו לנתונים ומאפשר לו להניח הנחות לגבי דפוסים שהוא מגלה, מאמת, ומקבל או דוחה. ### החלטה על שיטת אימון -בהתאם לשאלה שלכם ולאופי הנתונים, תבחרו שיטה לאמן אותם. מעבר על [התיעוד של Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - שבו אנו משתמשים בקורס זה - תוכלו לחקור דרכים רבות לאמן מודל. בהתאם לניסיונכם, ייתכן שתצטרכו לנסות מספר שיטות שונות כדי לבנות את המודל הטוב ביותר. סביר להניח שתעברו תהליך שבו מדעני נתונים מעריכים את ביצועי המודל על ידי הזנת נתונים שלא נראו בעבר, בדיקת דיוק, הטיה ונושאים אחרים שמפחיתים את האיכות, ובחירת שיטת האימון המתאימה ביותר למשימה. +בהתאם לשאלה שלך וטיב הנתונים, תבחר שיטה לאימון המודל. על ידי מעבר על [התיעוד של Scikit-learn](https://scikit-learn.org/stable/user_guide.html) – שאותו אנו משתמשים בקורס זה – תוכל לחקור דרכים רבות לאימון מודל. בהתאם לניסיונך, ייתכן שתצטרך לנסות מספר שיטות שונות כדי לבנות את המודל הטוב ביותר. סביר שתעבור תהליך שבו מדעני נתונים מעריכים את ביצועי המודל על ידי הזנת נתונים שטרם נראו, בדיקת דיוק, הטיה ובעיות אחרות שמשחיתות איכות, ובחירת שיטת האימון המתאימה ביותר למשימה. ### אימון מודל -מצוידים בנתוני האימון שלכם, אתם מוכנים 'להתאים' אותם כדי ליצור מודל. תבחינו שבספריות ML רבות תמצאו את הקוד 'model.fit' - זהו הזמן שבו אתם שולחים את משתנה המאפיין שלכם כמערך ערכים (בדרך כלל 'X') ומשתנה מטרה (בדרך כלל 'y'). +מצויד בנתוני האימון שלך, אתה מוכן 'להתאים' אותו כדי ליצור מודל. תבחין שבספריות למידת מכונה רבות תראה את הקוד 'model.fit' – בשלב זה אתה מזין את משתנה התכונה כמערך ערכים (בדרך כלל 'X') ואת משתנה היעד (בדרך כלל 'y'). ### הערכת המודל -לאחר שתהליך האימון הושלם (זה יכול לקחת מספר איטרציות, או 'epochs', כדי לאמן מודל גדול), תוכלו להעריך את איכות המודל באמצעות נתוני בדיקה כדי למדוד את ביצועיו. נתונים אלו הם תת-קבוצה של הנתונים המקוריים שהמודל לא ניתח בעבר. תוכלו להדפיס טבלה של מדדים על איכות המודל שלכם. +לאחר תהליך האימון הושלם (הוא יכול לקחת מספר רב של איטרציות, או 'אפיקים', לאימון מודל גדול), תוכל להעריך את איכות המודל על ידי שימוש בנתוני בדיקה למדידת ביצועיו. נתונים אלו הם תת-קבוצה של הנתונים המקוריים שהמודל טרם ניתח. תוכל להדפיס טבלת מדדים על איכות המודל שלך. 🎓 **התאמת מודל** -בהקשר של למידת מכונה, התאמת מודל מתייחסת לדיוק הפונקציה הבסיסית של המודל כשהוא מנסה לנתח נתונים שאינם מוכרים לו. +בהקשר של למידת מכונה, התאמת מודל מתייחסת לדיוק הפונקציה הבסיסית של המודל כשהיא מנסה לנתח נתונים שהיא לא מכירה. -🎓 **התאמה חסרה** ו**התאמה יתרה** הן בעיות נפוצות שמפחיתות את איכות המודל, כאשר המודל מתאים או לא מספיק טוב או יותר מדי טוב. זה גורם למודל לבצע תחזיות שמותאמות או קרובות מדי או רחוקות מדי לנתוני האימון שלו. מודל מותאם יתר על המידה חוזה נתוני אימון טוב מדי מכיוון שהוא למד את הפרטים והרעש של הנתונים טוב מדי. מודל מותאם חסר אינו מדויק מכיוון שהוא לא יכול לנתח בצורה מדויקת את נתוני האימון שלו או נתונים שהוא עדיין לא 'ראה'. +🎓 **Underfitting** ו-**overfitting** הן בעיות נפוצות שמורידות את איכות המודל, מאחר שהמודל מתאים לא טוב מספיק או מתאים מדי. זה גורם למודל לחזות באופן הדוק מדי או רופף מדי בהתאם לנתוני האימון שלו. מודל עם overfit חוזה טוב מדי את נתוני האימון כי למד את הפרטים והרעש בנתונים לעומק. מודל עם underfit אינו מדויק, כיוון שאינו מסוגל לנתח בצורה מדויקת את נתוני האימון שלו או את הנתונים שטרם 'ראה'. -![מודל מותאם יתר](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png) +![מודל עם התאמה יתרה](../../../../translated_images/he/overfitting.1c132d92bfd93cb6.webp) > אינפוגרפיקה מאת [Jen Looper](https://twitter.com/jenlooper) -## כיוונון פרמטרים +## כוונון פרמטרים -לאחר שהאימון הראשוני שלכם הושלם, התבוננו באיכות המודל ושקלו לשפר אותו על ידי כיוונון 'היפר-פרמטרים' שלו. קראו עוד על התהליך [בתיעוד](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). +לאחר סיום האימון הראשוני, בחן את איכות המודל וחשב לשפר אותו על ידי כוונון 'היפרפרמטרים'. קרא עוד על התהליך [בתיעוד](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). -## תחזית +## חיזוי -זהו הרגע שבו תוכלו להשתמש בנתונים חדשים לחלוטין כדי לבדוק את דיוק המודל שלכם. בהקשר של ML 'מופעל', שבו אתם בונים נכסי אינטרנט לשימוש המודל בייצור, תהליך זה עשוי לכלול איסוף קלט משתמש (לחיצה על כפתור, למשל) כדי להגדיר משתנה ולשלוח אותו למודל לצורך הסקה או הערכה. +זהו הרגע שבו תוכל להשתמש בנתונים חדשים לגמרי כדי לבדוק את דיוק המודל שלך. בסביבת ML 'מיושמת', שבה בונים נכסי רשת לשימוש במודל בפרודקשן, תהליך זה עשוי לכלול איסוף קלט משתמש (לדוגמה לחצן), הגדרת משתנה ושליחתו למודל להסקת מסקנות או הערכה. -בשיעורים אלו, תגלו כיצד להשתמש בשלבים אלו כדי להכין, לבנות, לבדוק, להעריך ולחזות - כל המחוות של מדען נתונים ועוד, ככל שתתקדמו במסע שלכם להפוך ל'מהנדס ML מלא'. +בשיעורים אלה תגלו כיצד להשתמש בשלבים אלה כדי להכין, לבנות, לבדוק, להעריך ולחזות – כל המהלכים של מדען נתונים ועוד, ככל שתתקדם במסעך להפוך למהנדס ML 'פול סטאק'. --- -## 🚀אתגר +## 🚀 אתגר -ציירו תרשים זרימה שמייצג את שלבי העבודה של מומחה ML. היכן אתם רואים את עצמכם כרגע בתהליך? היכן אתם צופים שתתקלו בקשיים? מה נראה לכם קל? +צייר תרשים זרימה שמשקף את השלבים של מומחה למידת מכונה. איפה אתה רואה את עצמך כרגע בתהליך? היכן אתה חושב שתיתקל בקושי? מה נראה לך קל? -## [שאלון לאחר השיעור](https://ff-quizzes.netlify.app/en/ml/) +## [מבחן לאחר ההרצאה](https://ff-quizzes.netlify.app/en/ml/) ## סקירה ולימוד עצמי -חפשו באינטרנט ראיונות עם מדעני נתונים שמדברים על עבודתם היומיומית. הנה [אחד](https://www.youtube.com/watch?v=Z3IjgbbCEfs). +חפש באינטרנט ראיונות עם מדעני נתונים שמספרים על עבודתם היומית. הנה [ראיון אחד](https://www.youtube.com/watch?v=Z3IjgbbCEfs). -## משימה +## מטלה -[ראיינו מדען נתונים](assignment.md) +[ראיין מדען נתונים](assignment.md) --- + **כתב ויתור**: -מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור הסמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדייק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. יש להתייחס למסמך המקורי בשפת המקור כמקור המוסמך. עבור מידע קריטי, מומלץ תרגום מקצועי על ידי אדם. אנו איננו אחראים לכל אי הבנה או פרשנות מוטעית הנובעים מהשימוש בתרגום זה. + \ No newline at end of file diff --git a/translations/he/2-Regression/3-Linear/README.md b/translations/he/2-Regression/3-Linear/README.md index 8324f50a7..89ec1550c 100644 --- a/translations/he/2-Regression/3-Linear/README.md +++ b/translations/he/2-Regression/3-Linear/README.md @@ -1,136 +1,137 @@ -# לבנות מודל רגרסיה באמצעות Scikit-learn: רגרסיה בארבע דרכים +# לבנות מודל רגרסיה בעזרת Scikit-learn: רגרסיה בארבע דרכים ## הערת מתחילים -רגרסיה ליניארית משמשת כאשר אנו רוצים לחזות **ערך מספרי** (לדוגמה, מחיר בית, טמפרטורה, או מכירות). -היא פועלת על ידי מציאת קו ישר המייצג בצורה הטובה ביותר את הקשר בין תכונות הקלט לפלט. +רגרסיה ליניארית משמשת כאשר רוצים לחזות **ערך מספרי** (למשל, מחיר דירה, טמפרטורה, או מכירות). +היא פועלת על ידי מציאת קו ישר המייצג בצורה הטובה ביותר את הקשר בין תכונות קלט לפלט. -בשיעור זה, נתמקד בהבנת המושג לפני שנחפש טכניקות רגרסיה מתקדמות יותר. -![רגרסיה ליניארית לעומת פולינומית אינפוגרפיקה](../../../../translated_images/he/linear-polynomial.5523c7cb6576ccab.webp) -> אינפוגרפיקה מאת [דאסאני מדיפאלי](https://twitter.com/dasani_decoded) -## [חידון לפני השיעור](https://ff-quizzes.netlify.app/en/ml/) +בשיעור זה נתמקד בהבנת המושג לפני שנחקור טכניקות רגרסיה מתקדמות יותר. +![Linear vs polynomial regression infographic](../../../../translated_images/he/linear-polynomial.5523c7cb6576ccab.webp) +> אינפוגרפיקה מאת [Dasani Madipalli](https://twitter.com/dasani_decoded) +## [מבחן טרום-הרצאה](https://ff-quizzes.netlify.app/en/ml/) -> ### [שיעור זה זמין ב-R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) +> ### [השיעור זמין גם ב-R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) ### מבוא -עד כה חקרתם מהי רגרסיה באמצעות דוגמת נתונים שנלקחה ממאגר הנתונים למחירי דלעות שבו נשתמש לאורך כל השיעור. גם הצגתם זאת באמצעות Matplotlib. +עד כה חקרתם מהי רגרסיה עם דוגמת נתונים שנאספה ממאגר מחירי דלעות שבו נשתמש לאורך כל השיעור. גם ויזואליתם זאת בעזרת Matplotlib. -כעת אתם מוכנים לצלול לעומק אל עולם הרגרסיה ללמידת מכונה. בעוד שהויזואליזציה מאפשרת לכם להבין נתונים, הכוח האמיתי של למידת מכונה מגיע מ_מודלים מאומנים_. מודלים מאומנים על נתונים היסטוריים כדי ללכוד באופן אוטומטי תלות בין הנתונים, ומאפשרים לכם לחזות תוצאות עבור נתונים חדשים, אותם המודל לא ראה קודם. +עכשיו אתם מוכנים לעומק נוסף לגבי רגרסיה בלמידת מכונה. בעוד שויזואליזציה מאפשרת להבין את הנתונים, הכוח האמיתי בלמידת מכונה מגיע מ_הכשרת מודלים_. מודלים מאומנים על נתונים היסטוריים כדי ללכוד אוטומטית תלות בנתונים, ומאפשרים לחזות תוצאות עבור נתונים חדשים שהמודל לא ראה בעבר. -בשיעור הזה תלמדו על שני סוגים של רגרסיה: _רגרסיה ליניארית בסיסית_ ו_רגרסיה פולינומית_, יחד עם חלק מהמתמטיקה שמאחורי הטכניקות האלה. המודלים האלה יאפשרו לנו לחזות מחירי דלעות בהתאם לנתוני קלט שונים. +בשיעור זה תלמדו עוד על שני סוגי רגרסיה: _רגרסיה ליניארית בסיסית_ ו_רגרסיה פולינומית_, יחד עם מתמטיקה בסיסית מאחורי הטכניקות האלו. מודלים אלה יאפשרו לנו לחזות מחירי דלעות בהתאם לנתוני קלט שונים. -[![למידת מכונה למתחילים - הבנת רגרסיה ליניארית](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "למידת מכונה למתחילים - הבנת רגרסיה ליניארית") +[![ML for beginners - Understanding Linear Regression](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML for beginners - Understanding Linear Regression") -> 🎥 לחצו על התמונה למעלה לסרטון קצר המסביר רגרסיה ליניארית. +> 🎥 לחצו על התמונה למעלה לסרטון קצר על רגרסיה ליניארית. -> לאורך כל התכנית אנו מניחים ידע מינימלי במתמטיקה, ושואפים להפוך את התוכן לנגיש לסטודנטים ממקצועות אחרים, לכן שימו לב להערות, 🧮 קריאות, דיאגרמות, וכלי למידה נוספים שיעזרו לכם בהבנה. +> לאורך כל התכנית אנו מניחים ידע מתמטי מינימלי, ומנסים להפוך את החומר לזמין לסטודנטים מתחומים אחרים, לכן שימו לב להערות, 🧮 קריאות, דיאגרמות וכלי לימוד נוספים המסייעים בהבנה. -### דרישות מקדימות +### דרישות מוקדמות -עד כה עליכם להיות מוכרים עם מבנה נתוני הדלעות שאנו בודקים. ניתן למצוא אותם טעונים ומנוקים מראש בקובץ _notebook.ipynb_ של השיעור הזה. בקובץ, מחיר הדלעות מוצג לפי באושל במסגרת מסגרת נתונים חדשה. וודאו שניתן להריץ קבצים אלה ב-kernels של Visual Studio Code. +כעת אתם אמורים להיות מכירים את מבנה נתוני הדלעות אותם אנו בוחנים. ניתן למצוא אותם טעונים ומנוקים מראש בקובץ ה_ notebook.ipynb_ של השיעור. בקובץ, מחיר הדלעות מוצג לאשכול בדף נתונים חדש. +ודאו שאתם יכולים להריץ מחברות אלה בסביבות בקוד של Visual Studio. ### הכנה -לתזכורת, אתם טוענים את הנתונים האלה כדי לשאול עליהם שאלות. +כתזכורת, אתם טוענים את הנתונים כדי שתוכלו לשאול שאלות לגביהם. -- מתי הזמן הטוב ביותר לקנות דלעות? -- איזה מחיר אפשר לצפות עבור קופסת דלעות מיני? -- האם כדאי לקנות בסלים של חצי באושל או בקופסה של 1 1/9 באושל? -נמשיך לחפור בנתונים האלה. +- מתי הזמן הטוב ביותר לקנות דלעות? +- איזה מחיר אוכל לצפות עבור קרטון דלעות מיניאטוריות? +- האם כדאי לקנות בסלי חצי אשכול או בקרטון 1 1/9 אשכול? +נמשיך לחפש תשובות בנתונים אלו. -בשיעור הקודם יצרתם מסגרת נתונים של Pandas ומילאתם אותה בחלק מן הנתונים המקוריים, כשהמחיר מתוקנן לפי הבאושל. עם זאת, בדרך זו הצלחתם לאסוף רק כ-400 נקודות מידע ורק לחודשי הסתיו. +בשיעור הקודם יצרתם DataFrame ב-Pandas ומילאתם אותו בחלק מנתוני המקור תוך סטנדרטיזציה של המחיר לפי אשכול. עם זאת, עשיתם זאת רק ל-400 נקודות נתונים בלבד ולחודשים של הסתיו. -תסתכלו על הנתונים הטעונים מראש במחברת המצורפת לשיעור זה. הנתונים טעונים מראש ויצרנו גרף פיזור ראשוני שמראה את נתוני החודשים. אולי נוכל לקבל פרטים נוספים על אופי הנתונים על ידי ניקוי נוסף. +עיינו בנתונים שנטענו מראש במחברת הנלווית לשיעור זה. הנתונים נטענים מראש וגרף פיזור ראשוני מוצג להראות נתוני חודשים. אולי נוכל לקבל פרטים מדויקים יותר על טיב הנתונים על ידי ניקוי נוסף. -## קו רגרסיה ליניארית +## קו רגרסיה ליניארי -כפי שלמדתם בשיעור 1, המטרה של תרגיל רגרסיה ליניארית היא להיות מסוגלים לשרטט קו כדי: +כפי שלמדתם בשיעור 1, המטרה של תרגיל רגרסיה ליניארית היא להיות מסוגלים לצייר קו ש: -- **להראות קשר בין משתנים**. להראות את הקשר בין המשתנים. -- **לעשות תחזיות**. לבצע תחזיות מדויקות לגבי מיקום נקודת נתונים חדשה ביחס לקו זה. +- **מראה יחסים בין משתנים**. מציג את הקשר בין משתנים +- **מבצע תחזיות**. מבצע תחזיות מדויקות לגבי היכן תפול נקודת נתונים חדשה ביחס לקו. -מקובל להשתמש ב**רגרסיית הריבועים הפחותים** לציור קו כזה. המונח "ריבועים הפחותים" מתייחס לתהליך של מזעור השגיאה הכוללת במודל שלנו. עבור כל נקודת נתונים, אנו מודדים את המרחק האנכי (נקרא שארית) בין הנקודה האמיתית לקו הרגרסיה. +זה טיפוסי ל**רגרסיה בריבועי המינימום** לשרטט קו כזה. המונח "ריבועי המינימום" מתייחס לתהליך המיזעור של השגיאה הכוללת במודל שלנו. עבור כל נקודת נתונים, אנו מודדים את המרחק האנכי (נקרא שארית) בין הנקודה בפועל לקו הרגרסיה שלנו. -אנו מוכפלים את המרחקים האלה בריבוע משתי סיבות עיקריות: +אנו מרובעים את המרחקים הללו משני סיבות עיקריות: -1. **גודל ולא כיוון:** אנו רוצים להתייחס לשגיאה של -5 באותו אופן כמו לשגיאה של +5. הכפלה בריבוע הופכת את כל הערכים לחיוביים. +1. **גודל במקום כיוון:** אנו רוצים להתייחס לשגיאה של -5 באותה צורה כמו לשגיאה של +5. ריבוע הופך את כל הערכים לחיוביים. -2. **עונש לחריגות:** ריבוע נותן משקל גבוה יותר לשגיאות גדולות, ומכריח את הקו להישאר קרוב יותר לנקודות הרחוקות. +2. **עונש לאאוטליירים:** ריבוע נותן משקל גדול יותר לשגיאות גדולות, מה שמאלץ את הקו להתקרב לנקודות המרוחקות יותר. -אחרי זה אנו מוסיפים את כל הערכים בריבוע יחד. המטרה שלנו היא למצוא את הקו הספציפי שבו סכום זה הוא הנמוך ביותר (הערך הקטן ביותר האפשרי) — ומכאן השם "ריבועים הפחותים". +לאחר מכן נסכום את כל הערכים המרובעים יחד. המטרה היא למצוא את הקו הספציפי שבו הסכום הזה מינימלי (הערך הקטן ביותר האפשרי) - hence השם "ריבועי המינימום". -> **🧮 הראה לי את המתמטיקה** -> -> קו זה, שנקרא _קו ההתאמה הטובה ביותר_ ניתן לתאר באמצעות [משוואה](https://en.wikipedia.org/wiki/Simple_linear_regression): -> +> **🧮 תציג לי את המתמטיקה** +> +> הקו הזה, הנקרא _קו ההתאמה הטובה ביותר_, ניתן לביטוי ב[משוואה](https://en.wikipedia.org/wiki/Simple_linear_regression): +> > ``` > Y = a + bX > ``` -> -> `X` הוא 'משתנה מסביר'. `Y` הוא 'משתנה תלוי'. השיפוע של הקו הוא `b` ו-`a` הוא נקודת החיתוך עם ציר ה-Y, שמתאר את ערך `Y` כאשר `X = 0`. -> ->![חישוב השיפוע](../../../../translated_images/he/slope.f3c9d5910ddbfcf9.webp) -> -> תחילה, חשבו את השיפוע `b`. אינפוגרפיקה מאת [ג'ן לופר](https://twitter.com/jenlooper) -> -> במילים אחרות, ובמתייחס לשאלה המקורית של נתוני הדלעות שלנו: "לחזות את מחיר הדלעת ליחידת באושל לפי חודש", `X` יהיה מחיר ו-`Y` יהיה חודש המכירה. -> ->![השלים את המשוואה](../../../../translated_images/he/calculation.a209813050a1ddb1.webp) -> -> חשבו את ערך Y. אם אתם משלמים כ־4 דולר, חייב להיות שזה אפריל! אינפוגרפיקה מאת [ג'ן לופר](https://twitter.com/jenlooper) -> -> המתמטיקה המחושבת את הקו חייבת להראות את השיפוע של הקו, שתלוי גם בנקודת החיתוך, או היכן ש-`Y` נמצא כאשר `X = 0`. -> -> ניתן לראות את שיטת החישוב עבור הערכים האלה באתר [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). בקרו גם במחשבון [ריבועים הפחותים הזה](https://www.mathsisfun.com/data/least-squares-calculator.html) כדי לראות איך ערכי המספרים משפיעים על הקו. +> +> `X` הוא ה'משתנה המסביר'. `Y` הוא ה'משתנה התלוי'. השיפוע של הקו הוא `b` ו-`a` הוא החיתוך ב-y, שמתייחס לערך של `Y` כאשר `X = 0`. +> +>![calculate the slope](../../../../translated_images/he/slope.f3c9d5910ddbfcf9.webp) +> +> ראשית, חשבו את השיפוע `b`. אינפוגרפיקה מאת [Jen Looper](https://twitter.com/jenlooper) +> +> במילים אחרות, ובהתייחס לשאלת נתוני הדלעות שלנו: "לחזות את מחיר דלעת לאשכול לפי חודש", `X` יהיה המחיר ו-`Y` יהיה חודש המכירה. +> +>![complete the equation](../../../../translated_images/he/calculation.a209813050a1ddb1.webp) +> +> חשבו את ערך Y. אם אתם משלמים סביב 4$, זה בטח אפריל! אינפוגרפיקה מאת [Jen Looper](https://twitter.com/jenlooper) +> +> המתמטיקה שמחשבת את הקו חייבת להראות את שיפוע הקו, שהוא גם תלוי בחתך, כלומר היכן ש-`Y` ממוקם כאשר `X = 0`. +> +> ניתן לצפות בשיטת החישוב בערכים אלו באתר [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). בקרו גם ב[מחשבון ריבועי המינימום](https://www.mathsisfun.com/data/least-squares-calculator.html) כדי לראות כיצד ערכי המספרים משפיעים על הקו. ## קורלציה -עוד מונח שיש להבין הוא **מקדם המתאם** בין משתני X ו-Y נתונים. בעזרת גרף פיזור ניתן להמחיש במהירות מקדם זה. גרף עם נקודות מפוזרות לאורך קו נקי הוא בעל קורלציה גבוהה, אך גרף עם נקודות מפוזרות בכל מקום בין X ל-Y הוא בעל קורלציה נמוכה. +מונח נוסף שיש להבין הוא **מקדם הקורלציה** בין משתני X ו-Y נתונים. בעזרת גרף פיזור ניתן לראות במהרה את המקדם הזה. גרף עם נקודות מפוזרות על קו מסודר מראה קורלציה גבוהה, וגרף עם נקודות מפוזרות בכל מקום בין X ו-Y מראה קורלציה נמוכה. -מודל רגרסיה ליניארית טוב יהיה כזה שיביא למקדם מתאם גבוה (קרוב ל-1 יותר מאשר ל-0) באמצעות שיטת ריבועי השגיאות הפחותים עם קו רגרסיה. +מודל רגרסיה ליניארית טוב יהיה כזה שמקדם הקורלציה שלו גבוה (קרוב יותר ל-1 ולא ל-0) בשיטת ריבועי המינימום עם קו רגרסיה. -✅ הריצו את המחברת המצורפת לשיעור זה וצפו בגרף פיזור מחיר לפי חודש. האם הנתונים הקושרים בין חודש למחיר מכירות דלעות נראים בעלי קורלציה גבוהה או נמוכה, לפי הפרשנות הויזואלית שלכם לגרף הפיזור? האם זה משתנה אם משתמשים במדד מדויק יותר במקום `Month`, למשל *יום בשנה* (כלומר מספר הימים מאז תחילת השנה)? +✅ הרץ את המחברת המצורפת לשיעור זה והסתכל על גרף פיזור של חודש מול מחיר. האם הנתונים המקשרים בין חודש למחיר למכירת דלעות נראים עם קורלציה גבוהה או נמוכה, לפי הפרשנות הויזואלית שלך לגרף הפיזור? האם זה משתנה אם תשתמש במדידה מדויקת יותר במקום `חודש`, למשל *יום בשנה* (כלומר מספר הימים מאז תחילת השנה)? -בקוד למטה נניח שניקינו את הנתונים, וקיבלנו מסגרת נתונים בשם `new_pumpkins`, דומה לטבלה הבאה: +בקוד למטה, נניח שניקינו את הנתונים וקיבלנו את ה-DataFrame בשם `new_pumpkins`, דומה לטבלה הבאה: -ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price ----|-------|-----------|---------|------|---------|-----------|------------|------- -70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364 -71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636 -72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636 -73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545 -74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364 +| ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price | +|---|---|---|---|---|---|---|---|---| +| 70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364 | +| 71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636 | +| 72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636 | +| 73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545 | +| 74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364 | -> הקוד לניקוי הנתונים זמין ב-[`notebook.ipynb`](notebook.ipynb). ביצענו את אותם צעדי ניקוי כמו בשיעור הקודם, וחישבנו את העמודה `DayOfYear` באמצעות הביטוי הבא: +> הקוד לניקוי הנתונים זמין ב-[`notebook.ipynb`](notebook.ipynb). ביצענו את אותם שלבי ניקוי כפי בשיעור הקודם, וחישבנו את עמודת `DayOfYear` בעזרת הביטוי הבא: ```python day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) ``` - -עכשיו כשיש לכם הבנה של המתמטיקה שמאחורי רגרסיה ליניארית, בואו ניצור מודל רגרסיה כדי לבדוק אם נוכל לחזות איזו חבילה של דלעות תכיל את מחירי הדלעות הטובים ביותר. מישהו שקונה דלעות לחג עלול לרצות מידע זה כדי למקסם את רכישת חבילות הדלעות שלו עבור החג. + +כעת כשיש לכם הבנה של המתמטיקה מאחורי רגרסיה ליניארית, נבנה מודל רגרסיה כדי לבדוק האם נוכל לחזות איזו חבילת דלעות תציע את המחירים הטובים ביותר. מישהו שרוכש דלעות לפעילות של חג עשוי לרצות מידע זה כדי לייעל את רכישות הפריטים לחג. ## מחפשים קורלציה -[![למידת מכונה למתחילים - מחפשים קורלציה: המפתח לרגרסיה ליניארית](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "למידת מכונה למתחילים - מחפשים קורלציה: המפתח לרגרסיה ליניארית") +[![ML for beginners - Looking for Correlation: The Key to Linear Regression](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML for beginners - Looking for Correlation: The Key to Linear Regression") -> 🎥 לחצו על התמונה למעלה לסרטון קצר המסביר קורלציה. +> 🎥 לחצו על התמונה למעלה לסרטון קצר על קורלציה. -בשיעור הקודם כנראה ראיתם שהמחיר הממוצע לפי חודשים נראה כך: +מהשיעור הקודם כנראה ראיתם שמחיר ממוצע לפי חודשים נראה כך: -מחיר ממוצע לפי חודש +Average price by month -הדבר מצביע על כך שצריכה להיות קורלציה, ואפשר לנסות לאמן מודל רגרסיה ליניארית לחזות את הקשר בין `Month` ל-`Price`, או בין `DayOfYear` ל-`Price`. להלן גרף הפיזור שמראה את הקשר האחרון: +זה מרמז שבעצם יש קורלציה מסוימת, וניתן לנסות לאמן מודל רגרסיה ליניארית כדי לחזות את הקשר בין `Month` ל-`Price`, או בין `DayOfYear` ל-`Price`. להלן גרף פיזור שמראה את הקשר האחרון: -גרף פיזור של מחיר מול יום בשנה +Scatter plot of Price vs. Day of Year -נבדוק אם קיימת קורלציה באמצעות הפונקציה `corr`: +נראה אם יש קורלציה באמצעות פונקציית `corr`: ```python print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) ``` - -נראה שהקורלציה יחסית נמוכה, -0.15 לפי `Month` ו- -0.17 לפי `DayOfMonth`, אך ייתכן שקיים קשר חשוב אחר. נראה שישנם אשכולות שונים של מחירים התואמים לזני דלעות שונים. כדי לאשר השערה זו, נשרטט כל קטגוריית דלעות בצבע שונה. על ידי העברת פרמטר `ax` לפונקציית הפריטה `scatter` נוכל להראות את כל הנקודות באותה גרף: + +נראה שהקורלציה יחסית קטנה, -0.15 לפי `Month` ו- -0.17 לפי `DayOfYear`, אבל יכול להיות שיש קשר חשוב אחר. נראה שיש אשכולות שונים של מחירים בהתאם לסוגים שונים של דלעות. לאישור השערה זו, נשרטט כל קטגוריה בצבע שונה. כאשר מעבירים פרמטר `ax` לפונקציית ה-`scatter` ניתן להציג את כל הנקודות באותו הגרף: ```python ax=None @@ -139,75 +140,76 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()): df = new_pumpkins[new_pumpkins['Variety']==var] ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var) ``` + +Scatter plot of Price vs. Day of Year -גרף פיזור של מחיר מול יום בשנה בצבעים - -החקירה שלנו מצביעה על כך שלזן יש השפעה גדולה יותר על המחיר הכולל מאשר על תאריך המכירה בפועל. נוכל לראות זאת באמצעות תרשים עמודות: +החקירה שלנו מרמזת שלזן יש יותר השפעה על המחיר הכולל מאשר תאריך המכירה בפועל. ניתן לראות זאת בעזרת גרף עמודות: ```python new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') ``` + +Bar graph of price vs variety -תרשים עמודות של מחיר מול זן - -נקדיש כרגע תשומת לב לזן אחד בלבד, 'pie type', ונראה מה השפעת התאריך על המחיר: +נתמקד כעת רק בסוג דלעת אחד, 'pie type', ונראה מה ההשפעה של התאריך על המחיר: ```python pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] pie_pumpkins.plot.scatter('DayOfYear','Price') ``` -גרף פיזור של מחיר מול יום בשנה 粒 görnüş + +Scatter plot of Price vs. Day of Year -עכשיו אם נחשב את הקורלציה בין `Price` ל-`DayOfYear` באמצעות הפונקציה `corr`, נקבל משהו בסביבות `-0.27` - מה שאומר שאימון מודל ניבוי הגיוני. +אם נחשב כעת את הקורלציה בין `Price` ל-`DayOfYear` בעזרת פונקציית `corr`, נקבל משהו בסביבות `-0.27` - מה שאומר שאימון מודל תחזית הגיוני. -> לפני אימון מודל רגרסיה ליניארית, חשוב לוודא שהנתונים שלנו נקיים. רגרסיה ליניארית אינה עובדת טוב עם ערכים חסרים, לכן כדאי להיפטר מכל התאים הריקים: +> לפני אימון מודל רגרסיה ליניארית, חשוב לוודא שהנתונים שלנו נקיים. רגרסיה ליניארית לא פועלת טוב עם ערכים חסרים, ולכן כדאי להיפטר מכל התאים הריקים: ```python pie_pumpkins.dropna(inplace=True) pie_pumpkins.info() ``` - -גישה נוספת תהיה למלא את הערכים החסרים בערכים ממוצעים מתוך העמודה המתאימה. + +גישה נוספת תהיה למלא ערכים ריקים אלו בערך הממוצע מהעמודה המתאימה. ## רגרסיה ליניארית פשוטה -[![למידת מכונה למתחילים - רגרסיה ליניארית ופולינומית באמצעות Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "למידת מכונה למתחילים - רגרסיה ליניארית ופולינומית באמצעות Scikit-learn") +[![ML for beginners - Linear and Polynomial Regression using Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML for beginners - Linear and Polynomial Regression using Scikit-learn") -> 🎥 לחצו על התמונה למעלה לסרטון קצר המסביר רגרסיה ליניארית ופולינומית. +> 🎥 לחצו על התמונה למעלה לסרטון קצר על רגרסיה ליניארית ופולינומית. -לאימון מודל הרגרסיה הליניארית שלנו נשתמש בספריית **Scikit-learn**. +לאימון מודל הרגרסיה הליניארית שלנו, נשתמש בספריית **Scikit-learn**. ```python from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error from sklearn.model_selection import train_test_split ``` - -נתחיל בהפרדת ערכי הקלט (תכונות) והתוצאה המצופה (תווית) למערכי numpy נפרדים: + +נתחיל מלהפריד את ערכי הקלט (התכונות) ואת הפלט הצפוי (התיוג) למערכי numpy נפרדים: ```python X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) y = pie_pumpkins['Price'] ``` + +> שימו לב שנאלצנו לבצע `reshape` על נתוני הקלט כדי שחבילת הרגרסיה הליניארית תבין אותם נכון. רגרסיה ליניארית מצפה לקבל מערך דו-ממדי כקלט, שבו כל שורה היא וקטור של תכונות קלט. במקרה שלנו, שכן יש לנו רק תכונה אחת, אנו זקוקים למערך בצורת N×1, כאשר N הוא גודל המערך. -> שימו לב שנאלצנו לבצע `reshape` על נתוני הקלט כדי שהחבילה Linear Regression תוכל להבין אותם כראוי. רגרסיה ליניארית מצפה לקבל מערך דו-ממדי כקלט, שבו כל שורה במערך מייצגת וקטור של תכונות הקלט. במקרה שלנו, מכיוון שיש לנו רק קלט אחד - דרוש מערך בצורת N×1, כאשר N הוא גודל מאגר הנתונים. - -לאחר מכן, נצטרך לחלק את הנתונים למאגר אימון ומאגר בדיקה כדי שנוכל לאמת את המודל לאחר האימון: +לאחר מכן, נחלק את הנתונים למערכי אימון ובדיקה, כדי שנוכל לאמת את המודל לאחר האימון: ```python X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) ``` - -לבסוף, אימון מודל הרגרסיה הליניארית בפועל לוקח רק שתי שורות קוד. אנו מגדירים את האובייקט `LinearRegression`, ומתאימים אותו לנתונים שלנו באמצעות השיטה `fit`: + +לבסוף, אימון מודל הרגרסיה הליניארית בפועל דורש רק שתי שורות קוד. נכין את האובייקט `LinearRegression`, ונאמן אותו על הנתונים בעזרת המתודה `fit`: ```python lin_reg = LinearRegression() lin_reg.fit(X_train,y_train) ``` -אובייקט `LinearRegression` לאחר ביצוע `fit` מכיל את כל המקדמים של הרגרסיה, אליהם ניתן לגשת באמצעות המאפיין `.coef_`. במקרה שלנו, יש רק מקדם אחד, שצריך להיות סביב `-0.017`. המשמעות היא שמחירי הדלעות נראים יורדים מעט עם הזמן, אבל לא יותר מדי, בסביבות 2 סנט ליום. ניתן גם לגשת לנקודת המפגש של הרגרסיה עם ציר ה-Y באמצעות `lin_reg.intercept_` - היא תהיה סביב `21` במקרה שלנו, מציינת את המחיר בתחילת השנה. +אובייקט `LinearRegression` לאחר ביצוע `fit` מכיל את כל המקדמים של הרגרסיה, אליהם ניתן לגשת באמצעות הפרופרטי `.coef_`. במקרה שלנו, יש רק מקדם אחד, אשר אמור להיות בערך `-0.017`. משמעות הדבר היא שהמחירים נראים כמי שמצטמצמים קצת עם הזמן, אבל לא הרבה, בערך 2 סנט ליום. ניתן גם לגשת לנקודת החיתוך של הרגרסיה עם ציר Y בעזרת `lin_reg.intercept_` - היא תהיה בסביבות `21` במקרה שלנו, מציינת את המחיר בתחילת השנה. -כדי לראות כמה המודל שלנו מדויק, נוכל לחזות מחירים על סט נתוני בדיקה, ואז למדוד כמה החזויים שלנו קרובים לערכים הצפויים. אפשר לעשות זאת באמצעות מדד שגיאת השורש הממוצעת המרובעת (RMSE), שהוא השורש של ממוצע כל ההפרשים בריבוע בין הערך הצפוי והערך החזוי. +כדי לראות עד כמה המודל מדויק, נוכל לנבא מחירים על קבוצת בדיקה, ואז למדוד כמה קרובות ההתפלגויות שלנו לערכים הצפויים. זאת ניתן לעשות באמצעות מדד שורש ממוצע הריבועים (RMSE), שהוא השורש של ממוצע כל ההבדלים המרובעים בין הערך הצפוי לערך החזוי. ```python pred = lin_reg.predict(X_test) @@ -216,16 +218,15 @@ rmse = np.sqrt(mean_squared_error(y_test,pred)) print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)') ``` -השגיאה שלנו נראית באזור של כ-2 נקודות, שזה בערך ~17%. לא כל כך טוב. מדד נוסף לאיכות המודל הוא **מקדם הקביעה**, שניתן לקבל כך: +שגיאתנו נראית בסביבות 2 נקודות, שזה ~17%. לא טוב מדי. אינדיקטור נוסף לאיכות המודל הוא **מקדם הקביעה**, אותו ניתן לקבל כך: ```python score = lin_reg.score(X_train,y_train) print('Model determination: ', score) ``` +אם הערך הוא 0, זה אומר שהמודל לא לוקח את נתוני הקלט בחשבון, ופועל כ-*התחזית הקווית הגרועה ביותר*, שהיא פשוט ממוצע הערכים. הערך 1 אומר שניתן לנבא בצורה מושלמת את כל הפלטים הצפויים. במקרה שלנו, המקדם הוא בסביבות 0.06, שזה די נמוך. -אם הערך הוא 0, זה אומר שהמודל אינו מתחשב בנתוני הקלט ופועל כ-*התחזית הלינארית הגרועה ביותר*, שהיא פשוט ערך ממוצע של התוצאה. הערך 1 מצביע על כך שניתן לחזות במדויק את כל הערכים הצפויים. במקרה שלנו, המקדמה היא סביב 0.06, שזה יחסית נמוך. - -נוכל גם לשרטט את נתוני הבדיקה יחד עם קו הרגרסיה כדי לראות טוב יותר איך הרגרסיה עובדת במקרה שלנו: +ניתן גם לשרטט את נתוני הבדיקה יחד עם קו הרגרסיה כדי לראות טוב יותר איך הרגרסיה פועלת אצלנו: ```python plt.scatter(X_test,y_test) @@ -234,19 +235,19 @@ plt.plot(X_test,pred) Linear regression -## רגרסיה פולינומית +## רגרסיה פולינומיאלית -סוג נוסף של רגרסיה לינארית הוא רגרסיה פולינומית. לפעמים יש קשר לינארי בין משתנים - למשל, ככל שהדלעת גדולה יותר בנפח, המחיר גבוה יותר - אבל לפעמים הקשרים האלה לא ניתנים לייצוג כמישור או כקו ישר. +סוג נוסף של רגרסיה קווית הוא רגרסיה פולינומיאלית. בעוד שלפעמים יש קשר לינארי בין משתנים - ככל שהדלעת גדולה יותר בנפח, כך המחיר גבוה יותר - לעיתים קשרים אלו לא ניתנים לשרטוט כמישור או קו ישר. -✅ הנה [כמה דוגמאות נוספות](https://online.stat.psu.edu/stat501/lesson/9/9.8) לנתונים שיכולים להשתמש ברגרסיה פולינומית +✅ הנה [כמה דוגמאות נוספות](https://online.stat.psu.edu/stat501/lesson/9/9.8) של נתונים שיכולים להשתמש ברגרסיה פולינומיאלית. -הסתכלו שוב על הקשר בין תאריך למחיר. האם הפיזור הזה נראה כמו משהו שצריך בהכרח לנתח באמצעות קו ישר? האם המחירים לא עשויים להשתנות? במצב כזה, אפשר לנסות רגרסיה פולינומית. +תסתכל שוב על הקשר בין תאריך למחיר. האם נראה שהתפלגות הנקודות הזו חייבת להיות מנותחת על ידי קו ישר? האם המחירים לא יכולים להשתנות? במקרה כזה, ניתן לנסות רגרסיה פולינומיאלית. -✅ פולינומים הם ביטויים מתמטיים שעשויים לכלול משתנה או יותר ומקדמים +✅ פולינומים הם ביטויים מתמטיים שעשויים לכלול אחד או יותר משתנים ומקדמים. -רגרסיה פולינומית יוצרת קו מעוקל שיתאים טוב יותר לנתונים לא לינאריים. במקרה שלנו, אם נכלול את המשתנה הרבוע `DayOfYear` בתוך נתוני הקלט, נוכל לנסות להתאים את הנתונים שלנו בעקומה פרבולית, שתכלול נקודת מינימום מסוימת בתוך השנה. +רגרסיה פולינומיאלית יוצרת קו מעוקל כדי להתאים טוב יותר לנתונים לא לינאריים. במקרה שלנו, אם נכלול משתנה `DayOfYear` בריבוע בתור נתון, נוכל להתאים את הנתונים שלנו בעזרת עקומה פרבולית, שתהיה לה מינימום בנקודה מסוימת בתוך השנה. -סייקיט-לרן כוללת API נוח בשם [pipeline](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) שמשלב ביחד כמה שלבי עיבוד של הנתונים. **פייפליין** הוא שרשרת של **אמדנים**. במקרה שלנו, ניצור פייפליין שמוסיף תחילה תכונות פולינומיות למודל, ואחר כך מאמן את הרגרסיה: +ספריית Scikit-learn כוללת [API של צינור](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) מועיל לשילוב שלבים שונים בעיבוד הנתונים יחד. **צינור** הוא שרשרת של **מנחשים (Estimators)**. במקרה שלנו, ניצור צינור שמוסיף תחילה תכונות פולינומיאליות למודל, ואז מאמן את הרגרסיה: ```python from sklearn.preprocessing import PolynomialFeatures @@ -257,36 +258,58 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train,y_train) ``` -שימוש ב-`PolynomialFeatures(2)` משמעותו שנכליל את כל הפולינומים ממעלה שנייה מתוך נתוני הקלט. במקרה שלנו זה יהיה רק `DayOfYear`2, אבל אם יש לנו שני משתנים קלט, X ו-Y, זה יכלול את X2, XY ו-Y2. אפשר גם להשתמש בפולינומים ממעלה גבוהה יותר אם רוצים. +השימוש ב-`PolynomialFeatures(2)` פירושו שנכליל את כל הפולינומים מדרגה שנייה מהנתונים. במקרה שלנו זה פשוט אומר `DayOfYear`2, אך אם יהיו שני משתנים קלט X ו-Y, זה יוסיף X2, XY ו-Y2. נוכל גם להשתמש בפולינומים מדרגות גבוהות יותר אם נרצה. + +ניתן להשתמש בצינורות באותה צורה כמו האובייקט המקורי `LinearRegression`, כלומר ניתן לבצע `fit` על הצינור, ואז להשתמש ב-`predict` לקבלת תוצאות החיזוי: + +```python +pred = pipeline.predict(X_test) + +rmse = np.sqrt(mean_squared_error(y_test,pred)) +print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)') + +score = pipeline.score(X_train,y_train) +print('Model determination: ', score) +``` + +כדי לשרטט את העקומה החלקה, אנו משתמשים ב-`np.linspace` כדי ליצור טווח אחיד של ערכי קלט, במקום לשרטט ישירות על נתוני הבדיקה הלא מסודרים (מה שהיה מייצר קו זיגזג): + +```python +X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1) +y_range = pipeline.predict(X_range) + +plt.scatter(X_test, y_test) +plt.plot(X_range, y_range) +``` -ניתן להשתמש בפייפליינים באותה צורה שבה השתמשנו באובייקט `LinearRegression` המקורי, כלומר נבצע `fit` לפייפליין, ואז נשתמש ב-`predict` לקבלת התוצאות. הנה הגרף שמראה את נתוני הבדיקה ואת עקומת ההתאמה: +הנה הגרף שמציג את נתוני הבדיקה ואת עקומת האפרוקסימציה: Polynomial regression -באמצעות רגרסיה פולינומית נוכל לקבל מעט פחות שגיאה ממוצעת מרובעת ומקדמת קביעה גבוהה יותר, אך לא משמעותית. צריך לקחת בחשבון תכונות נוספות! +באמצעות רגרסיה פולינומיאלית, ניתן לקבל RMSE נמוך יותר במעט וקביעות גבוהה יותר, אך לא משמעותית. צריך לקחת בחשבון תכונות נוספות! -> אפשר לראות שמחירי הדלעות הנמוכים ביותר נצפים בערך סביב הלואווין. איך אתה מסביר את זה? +> ניתן לראות שהמחירים המינימליים לדלעות מתרחשים בערך סביב ליל כל הקדושים. איך תסבירו זאת? -🎃 מזל טוב, רק יצרת מודל שיכול לעזור לחזות את מחירי דלעות הפאי. כנראה שתוכל לחזור על אותה פעולה עבור כל סוגי הדלעות, אבל זה יהיה משעמם. בוא נלמד עכשיו כיצד לקחת את סוג הדלעת בחשבון במודל שלנו! +🎃 כל הכבוד, יצרתם זה עתה מודל שיכול לעזור לנבא את מחיר דלעות הפאי. כנראה תוכלו לחזור על אותה פעולה עבור כל סוגי הדלעות, אך זה יהיה מייגע. בואו עכשיו נלמד כיצד לקחת בחשבון את זני הדלעת במודל שלנו! ## תכונות קטגוריאליות -בעולם האידיאלי, היינו רוצים לחזות מחירים עבור סוגים שונים של דלעות תוך שימוש באותו מודל. עם זאת, עמודת `Variety` שונה במקצת מעמודות כמו `Month`, כי היא מכילה ערכים שאינם מספריים. עמודות כאלה נקראות **קטגוריאליות**. +בעולם האידיאלי, נרצה להיות מסוגלים לנבא מחירים של זני דלעות שונים באמצעות אותו מודל. עם זאת, עמודת `Variety` שונה במקצת מעמודות כמו `Month`, כי היא מכילה ערכים לא נומריים. עמודות כאלה נקראות **קטגוריאליות**. -[![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression") +[![ML למתחילים - תחזיות עם תכונה קטגוריאלית ברגרסיה ליניארית](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML למתחילים - תחזיות עם תכונה קטגוריאלית ברגרסיה ליניארית") -> 🎥 לחצו על התמונה למעלה לסרטון קצר שמסביר על שימוש בתכונות קטגוריאליות. +> 🎥 לחצו על התמונה למעלה לסרטון קצר שמסביר את השימוש בתכונות קטגוריאליות. -כאן נראה איך המחיר הממוצע תלוי בסוג: +כאן ניתן לראות איך המחיר הממוצע משתנה בהתאם לזן: Average price by variety -כדי לקחת בחשבון את הסוג, אנחנו צריכים קודם להמיר אותו לצורה מספרית, כלומר **לקודד** אותו. יש כמה דרכים לעשות זאת: +כדי לקחת את הזן בחשבון, עלינו תחילה להמיר אותו לצורת מספרית, או **לקודד** אותו. יש מספר דרכים לעשות זאת: -* **הקידוד המספרי הפשוט** יבנה טבלה של סוגים שונים, ואז יחליף את שם הסוג עם אינדקס בטבלה הזו. זו לא רעיון טוב במיוחד עבור רגרסיה לינארית, כי הרגרסיה הלינארית מתייחסת לערך המספרי הממשי של האינדקס ומוסיפה אותו לתוצאה, כפול מקדם מסוים. במקרה שלנו, הקשר בין מספר האינדקס למחיר אינו לינארי, אפילו אם נסדר את האינדקסים בסדר כלשהו. -* **קידוד one-hot** יחליף את העמודה `Variety` בארבעה עמודות שונות, אחת לכל סוג. כל עמודה תכיל `1` אם השורה המקבילה שייכת לסוג זה, ו-`0` אחרת. המשמעות היא שיהיו ארבעה מקדמים ברגרסיה הלינארית, אחד לכל סוג דלעת, שאחראים על "מחיר התחלתי" (או יותר נכון המחיר הנוסף) עבור הסוג המסוים הזה. +* **קידוד מספרי** פשוט יבנה טבלה של זנים שונים, ואז יחליף את שם הזן באינדקס בטבלה. זו לא הרעיון הטוב ביותר לרגרסיה קווית, כי הרגרסיה הקווית לוקחת את הערך המספרי של האינדקס ומוסיפה אותו לתוצאה, מכפילה במקדם כלשהו. במקרה שלנו, הקשר בין מספר האינדקס למחיר ברור שאיננו לינארי, אפילו אם נוודא שהאינדקסים מסודרים בדרך מסוימת. +* **קידוד One-hot** יחליף את עמודת `Variety` ב-4 עמודות שונות, אחת לכל זן. כל עמודה תכיל `1` אם השורה המתאימה היא מהזן הזה, ו-`0` אחרת. משמעות הדבר היא שיהיו ארבעה מקדמים ברגרסיה קווית, אחד לכל זן דלעת, שאחראים על "מחיר התחלתי" (או יותר נכון "מחיר נוסף") לאותו זן מסוים. -הקוד מטה מראה איך לקודד את הסוג ב-one-hot: +הקוד הבא מראה איך ניתן לקודד זן בקידוד One-hot: ```python pd.get_dummies(new_pumpkins['Variety']) @@ -303,14 +326,14 @@ pd.get_dummies(new_pumpkins['Variety']) 1741 | 0 | 1 | 0 | 0 1742 | 0 | 1 | 0 | 0 -כדי לאמן רגרסיה לינארית עם סוג מקודד ב-one-hot כקלט, פשוט צריך לאתחל את הנתונים `X` ו-`y` בצורה נכונה: +כדי לאמן רגרסיה לינארית באמצעות זן שנקודד בתכונת one-hot, פשוט צריך לאתחל את נתוני `X` ו-`y` נכון: ```python X = pd.get_dummies(new_pumpkins['Variety']) y = new_pumpkins['Price'] ``` -שאר הקוד זהה לזה שבו השתמשנו למעלה כדי לאמן רגרסיה לינארית. אם תנסו זאת, תראו שהשגיאה הממוצעת המרובעת דומה, אבל מקדם הקביעה גבוה משמעותית (~77%). כדי לקבל תחזיות מדויקות יותר, נוכל לקחת בחשבון יותר תכונות קטגוריאליות, וגם תכונות מספריות, כגון `Month` או `DayOfYear`. כדי לקבל מערך אחד גדול של תכונות, נוכל להשתמש ב-`join`: +שאר הקוד זהה למה שהשתמשנו למעלה לאימון רגרסיה לינארית. אם תנסו זאת, תראו ששגיאת הריבועים הממוצעת כמעט זהה, אך מקדם הקביעה גבוה בהרבה (~77%). כדי לקבל תחזיות מדויקות עוד יותר, ניתן לקחת בחשבון יותר תכונות קטגוריאליות, כמו גם תכונות מספריות, כגון `Month` או `DayOfYear`. כדי לקבל מערך תכונות אחד גדול אפשר להשתמש ב-`join`: ```python X = pd.get_dummies(new_pumpkins['Variety']) \ @@ -320,11 +343,11 @@ X = pd.get_dummies(new_pumpkins['Variety']) \ y = new_pumpkins['Price'] ``` -כאן אנחנו גם לוקחים בחשבון את `City` ואת סוג `Package`, מה שמביא אותנו ל-MSE של 2.84 (10%), ומקדם קביעה של 0.94! +כאן אנחנו גם לוקחים בחשבון את `City` וסוג `Package`, מה שמביא ל-RMSE של 2.84 (10.5%), וקביעות של 0.94! -## לשלב את הכול ביחד +## לשלב את הכל ביחד -כדי ליצור את המודל הטוב ביותר, נוכל להשתמש בנתונים משולבים (קטגוריאליים המקודדים ב-one-hot + מספריים) מהדוגמה שלמעלה יחד עם רגרסיה פולינומית. הנה הקוד המלא לנוחותכם: +כדי ליצור את המודל הטוב ביותר, נוכל להשתמש בנתוני משולבים (קטגוריאליים בקידוד one-hot + מספריים) מהדוגמה למעלה יחד עם רגרסיה פולינומיאלית. הנה הקוד המלא לנוחיותכם: ```python # להגדיר את נתוני האימון @@ -334,7 +357,7 @@ X = pd.get_dummies(new_pumpkins['Variety']) \ .join(pd.get_dummies(new_pumpkins['Package'])) y = new_pumpkins['Price'] -# לבצע חלוקה לאימון ובדיקה +# לבצע פיצול של אימון-בדיקה X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) # להגדיר ולאמן את צינור העיבוד @@ -344,44 +367,44 @@ pipeline.fit(X_train,y_train) # לחזות תוצאות עבור נתוני הבדיקה pred = pipeline.predict(X_test) -# לחשב שגיאת ממוצע ריבועי ויחס ההסבר -mse = np.sqrt(mean_squared_error(y_test,pred)) -print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') +# לחשב שגיאת שורש ממוצעת והחלטה +rmse = mean_squared_error(y_test, pred, squared=False) +print(f'RMSE: {rmse:3.3} ({rmse/pred.mean()*100:3.3}%)') score = pipeline.score(X_train,y_train) print('Model determination: ', score) ``` -זה אמור לתת לנו את מקדם הקביעה הטוב ביותר, כמעט 97%, ו-MSE=2.23 (~8% שגיאת תחזית). +זה אמור לתת לנו את מקדם הקביעה הטוב ביותר של כמעט 97%, ו-RMSE=2.23 (~8% שגיאת חיזוי). -| מודל | MSE | מקדם קביעה | +| מודל | RMSE | מקדם קביעה | |-------|-----|---------------| -| רגרסיה לינארית עם `DayOfYear` | 2.77 (17.2%) | 0.07 | -| רגרסיה פולינומית עם `DayOfYear` | 2.73 (17.0%) | 0.08 | -| רגרסיה לינארית עם `Variety` | 5.24 (19.7%) | 0.77 | -| רגרסיה לינארית עם כל התכונות | 2.84 (10.5%) | 0.94 | -| רגרסיה פולינומית עם כל התכונות | 2.23 (8.25%) | 0.97 | +| `DayOfYear` לינארי | 2.77 (17.2%) | 0.07 | +| `DayOfYear` פולינומיאלי | 2.73 (17.0%) | 0.08 | +| `Variety` לינארי | 5.24 (19.7%) | 0.77 | +| כל התכונות לינארי | 2.84 (10.5%) | 0.94 | +| כל התכונות פולינומיאלי | 2.23 (8.25%) | 0.97 | -🏆 כל הכבוד! יצרתם ארבעה מודלי רגרסיה בשיעור אחד, ושיפרתם את האיכות של המודל ל-97%. בסעיף הסופי ברגרסיה תלמדו על רגרסיה לוגיסטית כדי לקבוע קטגוריות. +🏆 כל הכבוד! יצרתם ארבעה מודלי רגרסיה בשיעור אחד, ושיפרתם את איכות המודל ל-97%. בקטע הסופי על רגרסיות, תלמדו על רגרסיה לוגיסטית לקביעת קטגוריות. --- ## 🚀אתגר -נסו משתנים שונים במחברת זו כדי לראות כיצד הקורלציה מתיישבת עם דיוק המודל. +בדקו מספר משתנים שונים במחברת הזו כדי לראות כיצד מתאם מתייחס לדיוק המודל. -## [מבחן אחרי ההרצאה](https://ff-quizzes.netlify.app/en/ml/) +## [מבחן לאחר ההרצאה](https://ff-quizzes.netlify.app/en/ml/) ## סקירה ולמידה עצמית -בשיעור זה למדנו על רגרסיה לינארית. ישנם סוגים חשובים אחרים של רגרסיה. קראו על טכניקות Stepwise, Ridge, Lasso ו-Elasticnet. קורס טוב ללמוד ממנו עוד הוא [קורס למידה סטטיסטית של סטנפורד](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) +בשיעור זה למדנו על רגרסיה לינארית. קיימים סוגים חשובים נוספים של רגרסיות. קראו על טכניקות Stepwise, Ridge, Lasso ו-Elasticnet. קורס טוב ללמוד בו עוד הוא קורס הסטטיסטיקה באוניברסיטת סטנפורד [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) -## מטלה +## מטלה -[בנו מודל](assignment.md) +[לבנות מודל](assignment.md) --- -**כתב ויתור**: -מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). אמנם אנו שואפים לדיוק, אך יש לקחת בחשבון שתירגומים אוטומטיים עלולים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפת המקור שלו הוא המקור הסמכותי. למידע קריטי מומלץ תרגום מקצועי ובידי אדם. איננו אחראים לכל אי הבנה או פרשנות שגויה הנובעים מהשימוש בתרגום זה. +**הצהרת אחריות**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס AI [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל טעויות או אי-דיוקים. המסמך המקורי בשפה המקורית שלו צריך להיחשב כמקור האוטוריטטיבי. למידע קריטי מומלץ להשתמש בתרגום אנושי מקצועי. איננו אחראים לכל אי הבנה או פרשנות שגויה הנובעת משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/2-Regression/3-Linear/solution/notebook.ipynb b/translations/he/2-Regression/3-Linear/solution/notebook.ipynb index cb4eede29..a0053a09f 100644 --- a/translations/he/2-Regression/3-Linear/solution/notebook.ipynb +++ b/translations/he/2-Regression/3-Linear/solution/notebook.ipynb @@ -4,14 +4,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## רגרסיה לינארית ופולינומית לתמחור דלעות - שיעור 3\n", + "## רגרסיה ליניארית ופולינומית לתמחור דלועים - שיעור 3\n", "\n", - "טענו את הספריות והנתונים הנדרשים. המירו את הנתונים למסגרת נתונים המכילה תת-קבוצה של הנתונים:\n", + "טען את הספריות והמערך הנתונים הנדרשים. המר את הנתונים למסגרת נתונים המכילה תת-קבוצה של הנתונים:\n", "\n", - "- קבלו רק דלעות שמתומחרות לפי יחידת \"בושל\"\n", - "- המירו את התאריך לחודש\n", - "- חשבו את המחיר כממוצע של המחיר הגבוה והנמוך\n", - "- המירו את המחיר כך שישקף תמחור לפי כמות בושל\n" + "- קבל רק דלועים המתומחרים לפי בושל\n", + "- המר את התאריך לחודש\n", + "- חשב את המחיר להיות ממוצע של המחירים הגבוהים והנמוכים\n", + "- המר את המחיר כך שישקף את התמחור לפי כמות הבושל\n" ] }, { @@ -377,7 +377,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "פיזור נקודות מזכיר לנו שיש לנו נתוני חודשים רק מאוגוסט עד דצמבר. כנראה שאנחנו צריכים יותר נתונים כדי להיות מסוגלים להסיק מסקנות בצורה ליניארית.\n" + "תרשים הפיזור מזכיר לנו שיש לנו רק נתוני חודש מאוגוסט ועד דצמבר. ככל הנראה, אנחנו זקוקים ליותר נתונים כדי להיות מסוגלים להסיק מסקנות בצורה ליניארית.\n" ] }, { @@ -474,7 +474,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "נראה שהמתאם די קטן, אבל יש קשר אחר חשוב יותר - כי נקודות המחיר בגרף למעלה נראות כאילו יש כמה קבוצות מובחנות. בואו ניצור גרף שיציג זני דלעת שונים:\n" + "נראה כי המתאם קטן למדי, אך קיימת קשר אחר חשוב יותר - מכיוון שנקודות המחיר בגרף למעלה נראות כבעלות מספר אשכולות מובחנים. בואו נעשה גרף שיציג זני דלעת שונים:\n" ] }, { @@ -537,7 +537,9 @@ { "cell_type": "markdown", "metadata": {}, - "source": [] + "source": [ + "לעת עתה, בוא נתרכז רק בסוג אחד - **סוג פאי**.\n" + ] }, { "cell_type": "code", @@ -584,9 +586,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### רגרסיה לינארית\n", + "### רגרסיה ליניארית\n", "\n", - "נשתמש ב-Scikit Learn כדי לאמן מודל רגרסיה לינארית:\n" + "נשתמש ב-Scikit Learn לאימון מודל רגרסיה ליניארית:\n" ] }, { @@ -664,7 +666,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "ניתן לקבוע את שיפוע הקו ממקדמי הרגרסיה הליניארית:\n" + "השיפוע של הקו יכול להיות נקבע מהמקדם של רגרסיה ליניארית:\n" ] }, { @@ -691,7 +693,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "אנחנו יכולים להשתמש במודל המאומן כדי לחזות מחיר:\n" + "אנו יכולים להשתמש במודל שהוכשר כדי לחזות את המחיר:\n" ] }, { @@ -720,11 +722,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### רגרסיה פולינומית\n", + "### רגרסיה פולינומיאלית\n", "\n", - "לפעמים הקשר בין המאפיינים לתוצאות הוא באופן טבעי לא ליניארי. לדוגמה, מחירי דלעת עשויים להיות גבוהים בחורף (חודשים 1,2), ואז לרדת בקיץ (חודשים 5-7), ולעלות שוב. רגרסיה ליניארית אינה מסוגלת לזהות את הקשר הזה בצורה מדויקת.\n", + "לפעמים הקשר בין התכונות לתוצאות הוא במהותו לא ליניארי. לדוגמה, מחירי דלעת עשויים להיות גבוהים בחורף (חודשים=1,2), ואז לרדת בקיץ (חודשים=5-7), ואז לעלות שוב. רגרסיה ליניארית אינה מסוגלת למצוא קשר זה במדויק.\n", "\n", - "במקרה כזה, ניתן לשקול להוסיף מאפיינים נוספים. דרך פשוטה היא להשתמש בפולינומים של מאפייני הקלט, מה שיוביל ל**רגרסיה פולינומית**. ב-Scikit Learn, ניתן לחשב מראש באופן אוטומטי מאפיינים פולינומיים באמצעות pipelines:\n" + "במקרה זה, נוכל לשקול להוסיף תכונות נוספות. דרך פשוטה היא להשתמש בפולינומים מתכונות הקלט, מה שיביא ל-**רגרסיה פולינומיאלית**. ב-Scikit Learn, ניתן לחשב מראש תכונות פולינומיאליות באופן אוטומטי באמצעות צינורות:\n" ] }, { @@ -779,22 +781,25 @@ "score = pipeline.score(X_train,y_train)\n", "print('Model determination: ', score)\n", "\n", - "plt.scatter(X_test,y_test)\n", - "plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))" + "X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)\n", + "y_range = pipeline.predict(X_range)\n", + "\n", + "plt.scatter(X_test, y_test)\n", + "plt.plot(X_range, y_range)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### קידוד סוגים\n", + "### וריאציות קידוד\n", "\n", - "בעולם האידיאלי, אנחנו רוצים להיות מסוגלים לחזות מחירים עבור סוגים שונים של דלעות באמצעות אותו מודל. כדי לקחת בחשבון את הסוג, קודם כל עלינו להמיר אותו לצורה מספרית, או **לקודד**. יש כמה דרכים לעשות זאת:\n", + "בעולם האידיאלי, אנו רוצים להיות מסוגלים לחזות מחירים עבור וריאציות שונות של דלעת באמצעות אותו המודל. כדי לקחת את הווריאציה בחשבון, עלינו תחילה להמיר אותה לצורה מספרית, או **לקדד**. ישנן כמה דרכים שבהן נוכל לעשות זאת:\n", "\n", - "* קידוד מספרי פשוט שיבנה טבלה של סוגים שונים, ואז יחליף את שם הסוג באינדקס מתוך הטבלה. זו לא הבחירה הטובה ביותר עבור רגרסיה ליניארית, מכיוון שרגרסיה ליניארית מתייחסת לערך המספרי של האינדקס, והערך המספרי כנראה לא יתאם בצורה מספרית עם המחיר.\n", - "* קידוד One-hot, שיחליף את עמודת `Variety` בארבע עמודות שונות, אחת לכל סוג, שיכילו 1 אם השורה המתאימה היא מהסוג הנתון, ו-0 אחרת.\n", + "* קידוד מספרי פשוט שיבנה טבלה של וריאציות שונות, ואז יחליף את שם הווריאציה באינדקס בטבלה זו. זו לא הרעיון הטוב ביותר לרגרסיה ליניארית, כיוון שרגרסיה ליניארית לוקחת בחשבון את הערך המספרי של האינדקס, והערך המספרי סביר שלא להיות מתואם מספרית עם המחיר.\n", + "* קידוד one-hot, שיחליף את עמודת `Variety` בארבעה עמודות שונות, אחת עבור כל וריאציה, שיכילו 1 אם השורה המתאימה היא מהווריאציה הנתונה, ו-0 אחרת.\n", "\n", - "הקוד הבא מראה כיצד ניתן לקודד סוג באמצעות קידוד One-hot:\n" + "הקוד למטה מראה כיצד נוכל לקודד וריאציה בצורה one-hot:\n" ] }, { @@ -942,9 +947,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### רגרסיה ליניארית על זנים\n", + "### רגרסיה ליניארית על זן\n", "\n", - "כעת נשתמש באותו קוד כמו קודם, אך במקום `DayOfYear` נשתמש בזן המקודד בשיטת one-hot כקלט:\n" + "כעת נשתמש באותו הקוד כמו למעלה, אך במקום `DayOfYear` נשתמש בזן המקודד באחת- חם כקלט:\n" ] }, { @@ -992,7 +997,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "אנחנו יכולים גם לנסות להשתמש בתכונות אחרות באותו אופן, ולשלב אותן עם תכונות מספריות, כמו `Month` או `DayOfYear`:\n" + "אנו יכולים גם לנסות להשתמש בתכונות אחרות באותו אופן, ולשלב אותן עם תכונות מספריות, כגון `Month` או `DayOfYear`:\n" ] }, { @@ -1023,9 +1028,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### רגרסיה פולינומית\n", + "### רגרסיה פולינומיאלית\n", "\n", - "ניתן להשתמש ברגרסיה פולינומית גם עם מאפיינים קטגוריים שעברו קידוד one-hot. הקוד לאימון רגרסיה פולינומית יהיה למעשה זהה למה שראינו קודם.\n" + "אפשר להשתמש ברגרסיה פולינומיאלית גם עם תכונות קטגוריאליות שמקודדות באופן one-hot. הקוד לאימון רגרסיה פולינומיאלית יהיה באופן מהותי זהה למה שראינו למעלה.\n" ] }, { @@ -1072,7 +1077,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**כתב ויתור**: \nמסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי-דיוקים. המסמך המקורי בשפתו המקורית נחשב למקור הסמכותי. למידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי בני אדם. איננו נושאים באחריות לכל אי-הבנה או פרשנות שגויה הנובעת משימוש בתרגום זה. \n" + "---\n\n\n**הצהרת ויתור**: \nמסמך זה תורגם בעזרת שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עלולים להכיל טעויות או אי-דיוקים. המסמך המקורי בשפת המקור שלו נחשב כמקור הסמכותי. למידע קריטי מומלץ להיעזר בתרגום מקצועי על ידי מתרגם אנושי. אנו לא נישא באחריות לכל אי-הבנה או פרשנות שגויה שתיגרם כתוצאה משימוש בתרגום זה.\n\n" ] } ], @@ -1102,13 +1107,7 @@ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" } }, - "orig_nbformat": 2, - "coopTranslator": { - "original_hash": "d77bd89ae7e79780c68c58bab91f13f8", - "translation_date": "2025-09-04T06:20:46+00:00", - "source_file": "2-Regression/3-Linear/solution/notebook.ipynb", - "language_code": "he" - } + "orig_nbformat": 2 }, "nbformat": 4, "nbformat_minor": 2 diff --git a/translations/nl/.co-op-translator.json b/translations/nl/.co-op-translator.json index bc6a59801..c1d12b58d 100644 --- a/translations/nl/.co-op-translator.json +++ b/translations/nl/.co-op-translator.json @@ -36,8 +36,8 @@ "language_code": "nl" }, "1-Introduction/4-techniques-of-ML/README.md": { - "original_hash": "9d91f3af3758fdd4569fb410575995ef", - "translation_date": "2025-09-05T19:34:36+00:00", + "original_hash": "84b1715a6be62ef1697351dcc5d7b567", + "translation_date": "2026-04-26T20:04:39+00:00", "source_file": "1-Introduction/4-techniques-of-ML/README.md", "language_code": "nl" }, @@ -90,8 +90,8 @@ "language_code": "nl" }, "2-Regression/3-Linear/README.md": { - "original_hash": "26c53a922f1f1e8542b0ea41ff52221a", - "translation_date": "2026-04-20T20:47:43+00:00", + "original_hash": "8b776e731c35b171d316d01d0e7b1369", + "translation_date": "2026-04-26T20:04:09+00:00", "source_file": "2-Regression/3-Linear/README.md", "language_code": "nl" }, @@ -107,6 +107,12 @@ "source_file": "2-Regression/3-Linear/solution/Julia/README.md", "language_code": "nl" }, + "2-Regression/3-Linear/solution/notebook.ipynb": { + "original_hash": "6781223ffbe8cfdaa38d0200f08e1288", + "translation_date": "2026-04-26T20:02:20+00:00", + "source_file": "2-Regression/3-Linear/solution/notebook.ipynb", + "language_code": "nl" + }, "2-Regression/4-Logistic/README.md": { "original_hash": "abf86d845c84330bce205a46b382ec88", "translation_date": "2025-09-05T18:44:22+00:00", diff --git a/translations/nl/1-Introduction/4-techniques-of-ML/README.md b/translations/nl/1-Introduction/4-techniques-of-ML/README.md index 54165a200..48bbdadbc 100644 --- a/translations/nl/1-Introduction/4-techniques-of-ML/README.md +++ b/translations/nl/1-Introduction/4-techniques-of-ML/README.md @@ -1,123 +1,125 @@ # Technieken van Machine Learning -Het proces van het bouwen, gebruiken en onderhouden van machine learning-modellen en de gegevens die ze gebruiken, verschilt sterk van veel andere ontwikkelworkflows. In deze les zullen we het proces verduidelijken en de belangrijkste technieken bespreken die je moet kennen. Je zult: +Het proces van het bouwen, gebruiken en onderhouden van machine learning-modellen en de data die ze gebruiken is een heel ander proces dan veel andere ontwikkelingsworkflows. In deze les zullen we het proces ontrafelen en de belangrijkste technieken schetsen die je moet kennen. Je zult: -- Begrijpen welke processen ten grondslag liggen aan machine learning op een hoog niveau. -- Basisconcepten verkennen zoals 'modellen', 'voorspellingen' en 'trainingsdata'. +- Het proces achter machine learning op een hoog niveau begrijpen. +- Basisbegrippen zoals 'modellen', 'voorspellingen' en 'trainingsdata' verkennen. -## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) +## [Voorleesspelquiz](https://ff-quizzes.netlify.app/en/ml/) [![ML voor beginners - Technieken van Machine Learning](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML voor beginners - Technieken van Machine Learning") -> 🎥 Klik op de afbeelding hierboven voor een korte video over deze les. +> 🎥 Klik op de afbeelding hierboven voor een korte video waarin deze les wordt behandeld. ## Introductie -Op een hoog niveau bestaat het vak van het creëren van machine learning (ML)-processen uit een aantal stappen: +Op een hoog niveau bestaat het vakmanschap van het creëren van machine learning (ML)-processen uit een aantal stappen: -1. **Bepaal de vraag**. De meeste ML-processen beginnen met het stellen van een vraag die niet kan worden beantwoord met een eenvoudig conditioneel programma of een op regels gebaseerde engine. Deze vragen draaien vaak om voorspellingen op basis van een verzameling gegevens. -2. **Verzamel en bereid gegevens voor**. Om je vraag te kunnen beantwoorden, heb je gegevens nodig. De kwaliteit en soms de hoeveelheid van je gegevens bepalen hoe goed je je oorspronkelijke vraag kunt beantwoorden. Het visualiseren van gegevens is een belangrijk aspect van deze fase. Deze fase omvat ook het splitsen van de gegevens in een trainings- en testgroep om een model te bouwen. -3. **Kies een trainingsmethode**. Afhankelijk van je vraag en de aard van je gegevens moet je kiezen hoe je een model wilt trainen om je gegevens het beste te weerspiegelen en nauwkeurige voorspellingen te doen. Dit is het deel van je ML-proces dat specifieke expertise vereist en vaak een aanzienlijke hoeveelheid experimenten. -4. **Train het model**. Met behulp van je trainingsgegevens gebruik je verschillende algoritmen om een model te trainen dat patronen in de gegevens herkent. Het model kan interne gewichten gebruiken die kunnen worden aangepast om bepaalde delen van de gegevens te bevoordelen boven andere om een beter model te bouwen. -5. **Evalueer het model**. Je gebruikt gegevens die het model nog niet eerder heeft gezien (je testgegevens) uit je verzamelde set om te zien hoe het model presteert. -6. **Parameterafstemming**. Op basis van de prestaties van je model kun je het proces opnieuw uitvoeren met verschillende parameters of variabelen die het gedrag van de algoritmen bepalen die worden gebruikt om het model te trainen. +1. **Bepaal de vraag**. De meeste ML-processen beginnen met het stellen van een vraag die niet beantwoord kan worden met een eenvoudig conditioneel programma of op regels gebaseerd systeem. Deze vragen draaien vaak om voorspellingen op basis van een verzameling data. +2. **Verzamel en bereid data voor**. Om je vraag te kunnen beantwoorden, heb je data nodig. De kwaliteit en soms ook de hoeveelheid van je data bepaalt hoe goed je je oorspronkelijke vraag kunt beantwoorden. Het visualiseren van data is een belangrijk onderdeel van deze fase. Deze fase omvat ook het splitsen van de data in een trainings- en testgroep om een model te bouwen. +3. **Kies een trainingsmethode**. Afhankelijk van je vraag en de aard van je data, moet je kiezen hoe je een model wilt trainen om je data het best te weerspiegelen en nauwkeurige voorspellingen te maken. Dit is het gedeelte van je ML-proces dat specifieke expertise vereist en vaak een aanzienlijke hoeveelheid experimenteren. +4. **Train het model**. Met je trainingsdata gebruik je verschillende algoritmen om een model te trainen dat patronen in de data herkent. Het model kan interne gewichten gebruiken die kunnen worden aangepast om bepaalde delen van de data voorrang te geven om zo een beter model te bouwen. +5. **Evalueer het model**. Je gebruikt nooit eerder geziene data (je testdata) uit je verzamelde set om te zien hoe het model presteert. +6. **Parameterafstemming**. Op basis van de prestaties van je model kun je het proces opnieuw doorlopen met andere parameters, of variabelen, die het gedrag van de algoritmen die het model trainen aansturen. 7. **Voorspel**. Gebruik nieuwe invoer om de nauwkeurigheid van je model te testen. -## Welke vraag stel je? +## Welke vraag te stellen -Computers zijn bijzonder goed in het ontdekken van verborgen patronen in gegevens. Deze eigenschap is erg nuttig voor onderzoekers die vragen hebben over een bepaald domein die niet gemakkelijk kunnen worden beantwoord door een op regels gebaseerde engine te maken. Bij een actuarieel vraagstuk kan een datawetenschapper bijvoorbeeld handgemaakte regels opstellen over de sterfte van rokers versus niet-rokers. +Computers zijn bijzonder goed in het ontdekken van verborgen patronen in data. Deze bruikbaarheid is heel handig voor onderzoekers die vragen hebben over een bepaald domein die niet makkelijk beantwoord kunnen worden door een op voorwaardelijke regels gebaseerd systeem te maken. Bij een actuariele taak, bijvoorbeeld, kan een data scientist handgemaakte regels construeren rond de sterfte van rokers versus niet-rokers. -Wanneer veel andere variabelen in de vergelijking worden gebracht, kan een ML-model echter efficiënter zijn om toekomstige sterftecijfers te voorspellen op basis van eerdere gezondheidsgegevens. Een vrolijker voorbeeld zou het maken van weersvoorspellingen voor de maand april op een bepaalde locatie kunnen zijn, gebaseerd op gegevens zoals breedtegraad, lengtegraad, klimaatverandering, nabijheid van de oceaan, patronen van de straalstroom en meer. +Wanneer veel andere variabelen in de vergelijking worden gebracht, kan een ML-model echter efficiënter blijken te zijn bij het voorspellen van toekomstige sterftecijfers op basis van eerdere gezondheidsgeschiedenis. Een vrolijker voorbeeld is het maken van weersvoorspellingen voor de maand april op een gegeven locatie op basis van data die latitude, longitude, klimaatverandering, nabijheid van de oceaan, patronen van de straalstroom en meer bevat. -✅ Deze [presentatie](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) over weermodellen biedt een historisch perspectief op het gebruik van ML in weersanalyse. +✅ Deze [slide deck](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) over weermodellen biedt een historisch perspectief op het gebruik van ML in weeranalyse. ## Taken vóór het bouwen -Voordat je begint met het bouwen van je model, zijn er verschillende taken die je moet voltooien. Om je vraag te testen en een hypothese te vormen op basis van de voorspellingen van een model, moet je verschillende elementen identificeren en configureren. +Voordat je begint met het bouwen van je model, moet je verschillende taken voltooien. Om je vraag te testen en een hypothese te vormen op basis van de voorspellingen van een model, moet je verschillende elementen identificeren en configureren. -### Gegevens +### Data -Om je vraag met enige zekerheid te kunnen beantwoorden, heb je een goede hoeveelheid gegevens van het juiste type nodig. Er zijn twee dingen die je op dit punt moet doen: +Om je vraag met enige zekerheid te kunnen beantwoorden, heb je voldoende data van het juiste type nodig. Er zijn twee dingen die je op dit punt moet doen: -- **Gegevens verzamelen**. Houd rekening met de vorige les over eerlijkheid in data-analyse en verzamel je gegevens zorgvuldig. Wees je bewust van de bronnen van deze gegevens, eventuele inherente vooroordelen en documenteer de oorsprong ervan. -- **Gegevens voorbereiden**. Er zijn verschillende stappen in het proces van gegevensvoorbereiding. Je moet mogelijk gegevens samenvoegen en normaliseren als ze uit diverse bronnen komen. Je kunt de kwaliteit en kwantiteit van de gegevens verbeteren via verschillende methoden, zoals het converteren van strings naar getallen (zoals we doen in [Clustering](../../5-Clustering/1-Visualize/README.md)). Je kunt ook nieuwe gegevens genereren op basis van de oorspronkelijke gegevens (zoals we doen in [Classificatie](../../4-Classification/1-Introduction/README.md)). Je kunt de gegevens opschonen en bewerken (zoals we doen voorafgaand aan de [Web App](../../3-Web-App/README.md) les). Tot slot kun je de gegevens willekeurig maken en schudden, afhankelijk van je trainingstechnieken. +- **Verzamel data**. Houd rekening met de eerdere les over eerlijkheid in data-analyse en verzamel je data zorgvuldig. Wees je bewust van de bronnen van deze data, eventuele inherente vooroordelen die het kan bevatten, en documenteer de oorsprong. +- **Bereid data voor**. Er zijn verschillende stappen in het voorbereidingsproces van data. Je moet mogelijk data samenvoegen en normaliseren als het uit diverse bronnen komt. Je kunt de kwaliteit en kwantiteit van de data verbeteren door verschillende methoden zoals het omzetten van strings naar getallen (zoals we doen in [Clustering](../../5-Clustering/1-Visualize/README.md)). Je kunt ook nieuwe data genereren op basis van de originele (zoals we doen in [Classificatie](../../4-Classification/1-Introduction/README.md)). Je kunt de data schoonmaken en bewerken (zoals we zullen doen voorafgaand aan de [Web App](../../3-Web-App/README.md) les). Ten slotte moet je het mogelijk randomizen en schudden, afhankelijk van je trainingsmethoden. -✅ Nadat je je gegevens hebt verzameld en verwerkt, neem een moment om te zien of de vorm ervan je in staat stelt je beoogde vraag te beantwoorden. Het kan zijn dat de gegevens niet goed presteren in je gegeven taak, zoals we ontdekken in onze [Clustering](../../5-Clustering/1-Visualize/README.md) lessen! +✅ Na het verzamelen en verwerken van je data, neem even de tijd om te controleren of de vorm ervan je in staat stelt je bedoelde vraag te beantwoorden. Het kan zijn dat de data niet goed presteert voor jouw gegeven taak, zoals we ontdekken in onze [Clustering](../../5-Clustering/1-Visualize/README.md) lessen! -### Kenmerken en Doel +### Features en target -Een [kenmerk](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) is een meetbare eigenschap van je gegevens. In veel datasets wordt dit uitgedrukt als een kolomkop zoals 'datum', 'grootte' of 'kleur'. Je kenmerkvariabelen, meestal weergegeven als `X` in code, vertegenwoordigen de invoervariabelen die worden gebruikt om het model te trainen. +Een [feature](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) is een meetbare eigenschap van je data. In veel datasets wordt het uitgedrukt als een kolomkop zoals 'datum', 'grootte' of 'kleur'. Je featurevariabele, meestal weergegeven als `X` in code, vertegenwoordigt de invoervariabele die gebruikt zal worden om een model te trainen. -Een doel is datgene wat je probeert te voorspellen. Het doel, meestal weergegeven als `y` in code, vertegenwoordigt het antwoord op de vraag die je probeert te stellen over je gegevens: in december, welke **kleur** pompoenen zullen het goedkoopst zijn? In San Francisco, welke buurten zullen de beste vastgoed**prijzen** hebben? Soms wordt het doel ook wel labelattribuut genoemd. +Een target is iets dat je probeert te voorspellen. Target, meestal weergegeven als `y` in code, is het antwoord op de vraag die je aan je data stelt: in december, welke **kleur** pompoenen zullen het goedkoopst zijn? In San Francisco, welke buurten zullen de beste vastgoed**prijs** hebben? Soms wordt target ook wel een labelattribuut genoemd. -### Selecteer je kenmerkvariabelen +### Je featurevariabele kiezen -🎓 **Kenmerkselectie en Kenmerkextractie** Hoe weet je welke variabelen je moet kiezen bij het bouwen van een model? Je zult waarschijnlijk een proces van kenmerkselectie of kenmerkextractie doorlopen om de juiste variabelen te kiezen voor het meest presterende model. Ze zijn echter niet hetzelfde: "Kenmerkextractie creëert nieuwe kenmerken uit functies van de oorspronkelijke kenmerken, terwijl kenmerkselectie een subset van de kenmerken retourneert." ([bron](https://wikipedia.org/wiki/Feature_selection)) +🎓 **Feature selectie en feature extractie** Hoe weet je welke variabele je moet kiezen bij het bouwen van een model? Je zult waarschijnlijk door een proces van feature selectie of feature extractie gaan om de juiste variabelen te kiezen voor het best presterende model. Ze zijn echter niet hetzelfde: "Feature extractie creëert nieuwe features uit functies van de originele features, terwijl feature selectie een subset van de features teruggeeft." ([bron](https://wikipedia.org/wiki/Feature_selection)) -### Visualiseer je gegevens +### Visualiseer je data -Een belangrijk aspect van de toolkit van een datawetenschapper is de kracht om gegevens te visualiseren met behulp van verschillende uitstekende bibliotheken zoals Seaborn of MatPlotLib. Het visueel weergeven van je gegevens kan je in staat stellen verborgen correlaties te ontdekken die je kunt benutten. Je visualisaties kunnen je ook helpen om vooroordelen of onevenwichtige gegevens te ontdekken (zoals we ontdekken in [Classificatie](../../4-Classification/2-Classifiers-1/README.md)). +Een belangrijk aspect van het gereedschap van de data scientist is de mogelijkheid om data te visualiseren met behulp van verschillende uitstekende bibliotheken zoals Seaborn of MatPlotLib. Het visueel weergeven van je data kan je in staat stellen verborgen correlaties te ontdekken die je kunt benutten. Je visualisaties kunnen je ook helpen vooroordelen of onevenwichtige data te ontdekken (zoals we ontdekken in [Classificatie](../../4-Classification/2-Classifiers-1/README.md)). ### Splits je dataset -Voordat je gaat trainen, moet je je dataset splitsen in twee of meer delen van ongelijke grootte die de gegevens nog steeds goed vertegenwoordigen. +Voor het trainen moet je je dataset splitsen in twee of meer ongelijkwaardige delen die de data toch goed representeren. -- **Training**. Dit deel van de dataset wordt gebruikt om je model te trainen. Dit deel vormt het grootste deel van de oorspronkelijke dataset. -- **Testen**. Een testdataset is een onafhankelijke groep gegevens, vaak verzameld uit de oorspronkelijke gegevens, die je gebruikt om de prestaties van het gebouwde model te bevestigen. -- **Valideren**. Een validatieset is een kleinere onafhankelijke groep voorbeelden die je gebruikt om de hyperparameters of architectuur van het model af te stemmen om het model te verbeteren. Afhankelijk van de grootte van je gegevens en de vraag die je stelt, hoef je deze derde set mogelijk niet te bouwen (zoals we opmerken in [Tijdreeksvoorspelling](../../7-TimeSeries/1-Introduction/README.md)). +- **Training**. Dit deel van de dataset is geschikt voor je model om het te trainen. Deze set vormt het grootste deel van de originele dataset. +- **Testen**. Een testdataset is een onafhankelijke groep data, vaak verzameld uit de originele data, die je gebruikt om de prestaties van het gebouwde model te bevestigen. +- **Valideren**. Een validatieset is een kleinere onafhankelijke groep voorbeelden die je gebruikt om de hyperparameters, of architectuur, van het model af te stemmen om het te verbeteren. Afhankelijk van de omvang van je data en de vraag die je stelt heb je dit derde deel mogelijk niet nodig (zoals we opmerken in [Time Series Forecasting](../../7-TimeSeries/1-Introduction/README.md)). ## Een model bouwen -Met behulp van je trainingsgegevens is je doel om een model te bouwen, of een statistische representatie van je gegevens, met behulp van verschillende algoritmen om het te **trainen**. Het trainen van een model stelt het bloot aan gegevens en stelt het in staat aannames te doen over waargenomen patronen die het ontdekt, valideert en accepteert of afwijst. +Met behulp van je trainingsdata is het je doel om een model te bouwen, of een statistische weergave van je data, met behulp van verschillende algoritmes om het te **trainen**. Het trainen van een model stelt het bloot aan data en stelt het in staat aannames te maken over waargenomen patronen die het ontdekt, valideert en accepteert of verwerpt. ### Kies een trainingsmethode -Afhankelijk van je vraag en de aard van je gegevens kies je een methode om het te trainen. Door [Scikit-learn's documentatie](https://scikit-learn.org/stable/user_guide.html) door te nemen - die we in deze cursus gebruiken - kun je veel manieren verkennen om een model te trainen. Afhankelijk van je ervaring moet je mogelijk verschillende methoden proberen om het beste model te bouwen. Je zult waarschijnlijk een proces doorlopen waarbij datawetenschappers de prestaties van een model evalueren door het ongeziene gegevens te voeren, te controleren op nauwkeurigheid, vooroordelen en andere kwaliteitsverminderende problemen, en de meest geschikte trainingsmethode voor de taak te selecteren. +Afhankelijk van je vraag en de aard van je data kies je een methode om het te trainen. Door de documentatie van [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - die we in deze cursus gebruiken - te doorlopen, kun je vele manieren verkennen om een model te trainen. Afhankelijk van je ervaring moet je mogelijk verschillende methoden proberen om het beste model te bouwen. Je zult waarschijnlijk een proces doorlopen waarbij data scientists de prestaties van een model evalueren door het onzichtbare data te voeren, te controleren op nauwkeurigheid, vooringenomenheid en andere kwaliteitsverminderende problemen, en de meest geschikte trainingsmethode voor de taak te kiezen. ### Train een model -Met je trainingsgegevens ben je klaar om ze te 'fitten' om een model te creëren. Je zult merken dat in veel ML-bibliotheken de code 'model.fit' voorkomt - op dit moment stuur je je kenmerkvariabelen als een array van waarden (meestal 'X') en een doelvariabele (meestal 'y'). +Met je trainingsdata ben je klaar om het te 'fitten' om een model te creëren. Je zult merken dat in veel ML-bibliotheken de code 'model.fit' voorkomt - dit is het moment dat je je featurevariabele als een array van waarden (meestal 'X') en een targetvariabele (meestal 'y') verstuurt. ### Evalueer het model -Zodra het trainingsproces is voltooid (het kan veel iteraties, of 'epochs', duren om een groot model te trainen), kun je de kwaliteit van het model evalueren door testgegevens te gebruiken om de prestaties te meten. Deze gegevens zijn een subset van de oorspronkelijke gegevens die het model nog niet eerder heeft geanalyseerd. Je kunt een tabel met statistieken over de kwaliteit van je model afdrukken. +Zodra het trainingsproces voltooid is (het kan vele iteraties, of 'epochs', duren om een groot model te trainen), kun je de kwaliteit van het model evalueren door testdata te gebruiken om de prestaties te beoordelen. Deze data is een subset van de oorspronkelijke data die het model nog niet eerder heeft geanalyseerd. Je kunt een tabel met metrics over de kwaliteit van je model printen. -🎓 **Model fitten** +🎓 **Model fitting** -In de context van machine learning verwijst model fitten naar de nauwkeurigheid van de onderliggende functie van het model terwijl het probeert gegevens te analyseren waarmee het niet bekend is. +In de context van machine learning verwijst model fitting naar de nauwkeurigheid van de onderliggende functie van het model terwijl het probeert data te analyseren waar het niet mee vertrouwd is. -🎓 **Underfitting** en **overfitting** zijn veelvoorkomende problemen die de kwaliteit van het model verminderen, omdat het model ofwel niet goed genoeg past of te goed past. Dit zorgt ervoor dat het model voorspellingen doet die ofwel te nauw aansluiten of te los aansluiten bij de trainingsgegevens. Een overfit model voorspelt trainingsgegevens te goed omdat het de details en ruis van de gegevens te goed heeft geleerd. Een underfit model is niet nauwkeurig omdat het noch zijn trainingsgegevens noch gegevens die het nog niet heeft 'gezien' nauwkeurig kan analyseren. +🎓 **Onderfitting** en **overfitting** zijn veelvoorkomende problemen die de kwaliteit van het model verminderen, doordat het model het niet goed genoeg of juist te goed past. Dit veroorzaakt dat het model voorspellingen maakt die te nauw aansluiten bij of juist te los zijn ten opzichte van de trainingsdata. Een overfit model voorspelt trainingsdata te goed omdat het de details en ruis van de data te goed heeft geleerd. Een underfit model is niet nauwkeurig omdat het noch zijn trainingsdata, noch data die het nog niet heeft 'gezien', nauwkeurig kan analyseren. -![overfitting model](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png) +![overfitting model](../../../../translated_images/nl/overfitting.1c132d92bfd93cb6.webp) > Infographic door [Jen Looper](https://twitter.com/jenlooper) ## Parameterafstemming -Zodra je eerste training is voltooid, observeer de kwaliteit van het model en overweeg het te verbeteren door de 'hyperparameters' aan te passen. Lees meer over het proces [in de documentatie](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). +Zodra je initiële training voltooid is, observeer je de kwaliteit van het model en overweeg je het te verbeteren door de 'hyperparameters' aan te passen. Lees meer over dit proces [in de documentatie](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). ## Voorspelling -Dit is het moment waarop je volledig nieuwe gegevens kunt gebruiken om de nauwkeurigheid van je model te testen. In een 'toegepaste' ML-instelling, waar je webassets bouwt om het model in productie te gebruiken, kan dit proces het verzamelen van gebruikersinvoer omvatten (bijvoorbeeld een druk op een knop) om een variabele in te stellen en deze naar het model te sturen voor inferentie of evaluatie. +Dit is het moment waarop je compleet nieuwe data kunt gebruiken om de nauwkeurigheid van je model te testen. In een 'toegepaste' ML-omgeving, waar je webassets bouwt om het model in productie te gebruiken, kan dit proces het verzamelen van gebruikersinvoer inhouden (bijvoorbeeld een druk op een knop) om een variabele in te stellen en naar het model te sturen voor inferentie, of evaluatie. -In deze lessen ontdek je hoe je deze stappen kunt gebruiken om voor te bereiden, te bouwen, te testen, te evalueren en te voorspellen - alle handelingen van een datawetenschapper en meer, terwijl je vordert in je reis om een 'full stack' ML-engineer te worden. +In deze lessen ontdek je hoe je deze stappen gebruikt om voor te bereiden, bouwen, testen, evalueren en voorspellen - alle handelingen van een data scientist en meer, terwijl je vordert in je reis om een 'full stack' ML-engineer te worden. --- ## 🚀Uitdaging -Teken een stroomdiagram dat de stappen van een ML-practitioner weergeeft. Waar zie je jezelf op dit moment in het proces? Waar denk je dat je moeilijkheden zult ondervinden? Wat lijkt je gemakkelijk? +Teken een stroomdiagram dat de stappen van een ML-praktijker weergeeft. Waar zie je jezelf nu in het proces? Waar verwacht je moeilijkheden? Wat lijkt je makkelijk? -## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) +## [Nabespreking quiz](https://ff-quizzes.netlify.app/en/ml/) ## Review & Zelfstudie -Zoek online naar interviews met datawetenschappers die hun dagelijkse werk bespreken. Hier is [een](https://www.youtube.com/watch?v=Z3IjgbbCEfs). +Zoek online naar interviews met data scientists die hun dagelijkse werk bespreken. Hier is [één](https://www.youtube.com/watch?v=Z3IjgbbCEfs). ## Opdracht -[Interview een datawetenschapper](assignment.md) +[Interview een data scientist](assignment.md) --- + **Disclaimer**: -Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we streven naar nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in de oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file +Dit document is vertaald met behulp van de AI-vertalingsdienst [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we streven naar nauwkeurigheid, dient u er rekening mee te houden dat automatische vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in de oorspronkelijke taal moet als de gezaghebbende bron worden beschouwd. Voor kritieke informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor enige misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. + \ No newline at end of file diff --git a/translations/nl/2-Regression/3-Linear/README.md b/translations/nl/2-Regression/3-Linear/README.md index 34286f55a..c79a26260 100644 --- a/translations/nl/2-Regression/3-Linear/README.md +++ b/translations/nl/2-Regression/3-Linear/README.md @@ -1,113 +1,113 @@ # Bouw een regressiemodel met Scikit-learn: regressie op vier manieren -## Notitie voor beginners +## Aantekening voor beginners -Lineaire regressie wordt gebruikt wanneer we een **numerieke waarde** willen voorspellen (bijvoorbeeld huisprijs, temperatuur, of verkoop). +Lineaire regressie wordt gebruikt wanneer we een **numerieke waarde** willen voorspellen (bijvoorbeeld huisprijs, temperatuur of verkoop). Het werkt door een rechte lijn te vinden die de relatie tussen invoerkenmerken en de uitvoer het beste weergeeft. In deze les richten we ons op het begrijpen van het concept voordat we meer geavanceerde regressietechnieken verkennen. -![Lineaire versus polynoom regressie infographic](../../../../translated_images/nl/linear-polynomial.5523c7cb6576ccab.webp) +![Lineaire vs polynomiale regressie infographic](../../../../translated_images/nl/linear-polynomial.5523c7cb6576ccab.webp) > Infographic door [Dasani Madipalli](https://twitter.com/dasani_decoded) ## [Voorcollege quiz](https://ff-quizzes.netlify.app/en/ml/) -> ### [Deze les is beschikbaar in R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) -### Inleiding +> ### [Deze les is ook beschikbaar in R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) +### Introductie -Tot nu toe heb je onderzocht wat regressie is met voorbeelddata verzameld uit de pompoenprijs dataset die we gedurende deze les zullen gebruiken. Je hebt het ook gevisualiseerd met Matplotlib. +Tot nu toe heb je onderzocht wat regressie is met voorbeeldgegevens verzameld uit de pompoenprijzenset die we door deze les heen zullen gebruiken. Je hebt het ook gevisualiseerd met Matplotlib. -Nu ben je klaar om dieper in regressie voor ML te duiken. Terwijl visualisatie je in staat stelt om data te begrijpen, komt de echte kracht van Machine Learning van het _trainen van modellen_. Modellen worden getraind op historische data om automatisch afhankelijkheden te vangen, en ze stellen je in staat om uitkomsten te voorspellen voor nieuwe data die het model nog niet eerder heeft gezien. +Nu ben je klaar om dieper in regressie voor ML te duiken. Terwijl visualisatie je helpt om gegevens te begrijpen, komt de echte kracht van Machine Learning van het _trainen van modellen_. Modellen worden getraind op historische gegevens om automatisch afhankelijkheden te leren, en ze maken het mogelijk voorspellingen te doen voor nieuwe gegevens die het model nog niet eerder heeft gezien. -In deze les leer je meer over twee types regressie: _basis lineaire regressie_ en _polynomiale regressie_, samen met wat van de onderliggende wiskunde van deze technieken. Deze modellen stellen ons in staat om pompoenprijzen te voorspellen afhankelijk van verschillende invoerdata. +In deze les leer je meer over twee types regressie: _basis lineaire regressie_ en _polynomiale regressie_, samen met enige wiskunde die deze technieken ten grondslag ligt. Deze modellen stellen ons in staat pompoenprijzen te voorspellen afhankelijk van verschillende invoergegevens. -[![ML voor beginners - Begrijpen van lineaire regressie](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML voor beginners - Begrijpen van lineaire regressie") +[![ML voor beginners - Begrip van lineaire regressie](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML voor beginners - Begrip van lineaire regressie") -> 🎥 Klik op de afbeelding hierboven voor een korte video-overzicht van lineaire regressie. +> 🎥 Klik op de bovenstaande afbeelding voor een korte video-overzicht van lineaire regressie. -> Gedurende deze cursus veronderstellen we minimale wiskundige kennis, en streven we ernaar om het toegankelijk te maken voor studenten uit andere vakgebieden, let daarom op notities, 🧮 uitleg, diagrammen en andere leermiddelen ter ondersteuning van het begrip. +> Door deze curriculum heen gaan we uit van minimale wiskundige kennis en willen we het toegankelijk maken voor studenten uit andere vakgebieden, dus let op notities, 🧮 uitleg, diagrammen en andere leermiddelen ter ondersteuning van begrip. ### Vereisten -Je zou inmiddels bekend moeten zijn met de structuur van de pompoendata die we onderzoeken. Je kunt het voorbeladen en schoongemaakt terugvinden in het _notebook.ipynb_ bestand van deze les. In dit bestand is de pompoenprijs per bushel weergegeven in een nieuw data frame. Zorg ervoor dat je deze notebooks kunt draaien in kernels in Visual Studio Code. +Je zou nu vertrouwd moeten zijn met de structuur van de pompoengegevens die we analyseren. Je kunt ze vooraf geladen en schoon aangetroffen vinden in het _notebook.ipynb_ bestand bij deze les. In het bestand wordt de pompoenprijs per boerentas weergegeven in een nieuw dataframe. Zorg dat je deze notebooks kunt uitvoeren binnen kernels in Visual Studio Code. ### Voorbereiding -Als herinnering, je laadt deze data om er vragen over te kunnen stellen. +Ter herinnering, je laadt deze gegevens om er vragen over te stellen. -- Wanneer is de beste tijd om pompoenen te kopen? -- Welke prijs kan ik verwachten voor een kist miniatuurpompoenen? -- Moet ik ze kopen in halve bushel manden of per 1 1/9 bushel doos? -Laten we dieper graven in deze data. +- Wanneer is de beste tijd om pompoenen te kopen? +- Welke prijs kan ik verwachten voor een kistje miniatuurpompoenen? +- Moet ik ze kopen in half-boerentas manden of per doos van 1 1/9 boerentas? +Laten we verder graven in deze data. -In de vorige les heb je een Pandas data frame gemaakt en gevuld met een deel van de originele dataset, waarbij de prijzen zijn genormaliseerd per bushel. Door dat te doen was je echter maar in staat ongeveer 400 datapunten te verzamelen en alleen voor de herfstmaanden. +In de vorige les heb je een Pandas dataframe gemaakt en gevuld met een deel van de originele dataset, waarbij de prijzen werden gestandaardiseerd per boerentas. Door dat te doen, kon je echter slechts ongeveer 400 data punten verzamelen en alleen voor de herfstmaanden. -Bekijk de data die we voorbeladen hebben in de bijbehorende notebook van deze les. De data is voorbeladen en er is een initiële scatterplot gemaakt om maanddata te tonen. Misschien kunnen we iets meer detail krijgen over de aard van de data door het verder te schonen. +Bekijk de gegevens die we vooraf geladen hebben in het bijbehorende notebook van deze les. De gegevens zijn al ingeladen en er is een eerste scatterplot gemaakt om maandgegevens te tonen. Misschien kunnen we meer details over de aard van de data vinden door het beter schoon te maken. ## Een lineaire regressielijn -Zoals je hebt geleerd in Les 1, is het doel van een lineaire regressie-oefening om in staat te zijn een lijn te plotten om: +Zoals je in Les 1 hebt geleerd, is het doel van een lineaire regressie-oefening om een lijn te tekenen om: -- **Variabelenrelaties te tonen**. Toon het verband tussen variabelen -- **Voorspellingen te doen**. Maak nauwkeurige voorspellingen waar een nieuw datapunt zou vallen ten opzichte van die lijn. +- **Variable relaties weergeven**. Toon de relatie tussen variabelen +- **Voorspellingen doen**. Maak nauwkeurige voorspellingen over waar een nieuw datapunt zich zou bevinden ten opzichte van die lijn. -Het is typisch voor **Kleinstekwadratenregressie** om dit type lijn te tekenen. De term "Kleinstekwadraten" verwijst naar het proces van het minimaliseren van de totale fout in ons model. Voor elk datapunt meten we de verticale afstand (genaamd residu) tussen het werkelijke punt en onze regressielijn. +Het is typisch voor de **Least-Squares Regression** om dit soort lijn te tekenen. De term “Least-Squares” verwijst naar het proces van het minimaliseren van de totale fout in ons model. Voor elk datapunt meten we de verticale afstand (genoemd residu) tussen het werkelijke punt en onze regressielijn. -We kwadrateren deze afstanden om twee hoofdredenen: +Deze afstanden kwadrateren we om twee hoofdredenen: -1. **Grootte boven Richting:** We willen een fout van -5 hetzelfde behandelen als een fout van +5. Kwadrateren maakt alle waarden positief. +1. **Grootte boven Richting:** We willen een fout van -5 hetzelfde behandelen als een fout van +5. Door kwadrateren worden alle waarden positief. -2. **Straffen van Uitbijters:** Kwadrateren geeft meer gewicht aan grotere fouten, waardoor de lijn dichter bij punten die ver weg liggen blijft. +2. **Straffen van Uitschieters:** Kwadrateren geeft meer gewicht aan grotere fouten, waardoor de lijn dichter bij verafgelegen punten blijft. -We tellen vervolgens al deze gekwadrateerde waarden bij elkaar op. Ons doel is om de specifieke lijn te vinden waarbij deze eind-som het kleinst is (de kleinste mogelijke waarde)—vandaar de naam "Kleinstekwadraten". +Dan tellen we al deze gekwadrateerde waarden bij elkaar op. Ons doel is om die specifieke lijn te vinden waarbij deze uiteindelijke som het kleinst is (de kleinst mogelijke waarde)—vandaar de naam "Least-Squares". -> **🧮 Laat me de wiskunde zien** -> -> Deze lijn, genaamd de _beste fit lijn_, kan worden uitgedrukt door [een vergelijking](https://en.wikipedia.org/wiki/Simple_linear_regression): -> +> **🧮 Toon mij de wiskunde** +> +> Deze lijn, de _best passende lijn_ genoemd, kan worden uitgedrukt door [een vergelijking](https://en.wikipedia.org/wiki/Simple_linear_regression): +> > ``` > Y = a + bX > ``` > -> `X` is de 'verklarende variabele'. `Y` is de 'afhankelijke variabele'. De helling van de lijn is `b` en `a` is het snijpunt op de y-as, dat verwijst naar de waarde van `Y` wanneer `X = 0`. +> `X` is de 'verklarende variabele'. `Y` is de 'afhankelijke variabele'. De helling van de lijn is `b` en `a` is het snijpunt met de Y-as, wat verwijst naar de waarde van `Y` wanneer `X = 0`. > >![bereken de helling](../../../../translated_images/nl/slope.f3c9d5910ddbfcf9.webp) > > Bereken eerst de helling `b`. Infographic door [Jen Looper](https://twitter.com/jenlooper) > -> Met andere woorden, en verwijzend naar onze originele vraag over pompoendata: "voorspel de prijs van een pompoen per bushel op maand", zou `X` verwijzen naar de prijs en `Y` naar de maand van verkoop. +> Met andere woorden, en verwijzend naar onze pompoengegevens en de oorspronkelijke vraag: "voorspel de prijs van een pompoen per boerentas per maand", zou `X` verwijzen naar de prijs en `Y` naar de maand van verkoop. > ->![vul de vergelijking in](../../../../translated_images/nl/calculation.a209813050a1ddb1.webp) +>![maak de vergelijking af](../../../../translated_images/nl/calculation.a209813050a1ddb1.webp) > > Bereken de waarde van Y. Als je ongeveer $4 betaalt, moet het april zijn! Infographic door [Jen Looper](https://twitter.com/jenlooper) > -> De wiskunde die de lijn berekent moet de helling van de lijn aantonen, die ook afhankelijk is van het intercept, of waar `Y` ligt wanneer `X = 0`. +> De wiskunde die de lijn berekent moet de helling van de lijn aantonen, die ook afhankelijk is van het intercept, oftewel waar `Y` gelegen is als `X = 0`. > -> Je kunt de methode van berekening voor deze waarden bekijken op de [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) website. Bezoek ook [deze Kleinstekwadraten calculator](https://www.mathsisfun.com/data/least-squares-calculator.html) om te zien hoe de getallen de lijn beïnvloeden. +> Je kunt de berekeningsmethode voor deze waarden bekijken op de [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) website. Bezoek ook [deze Least-squares calculator](https://www.mathsisfun.com/data/least-squares-calculator.html) om te zien hoe de waarde van getallen de lijn beïnvloedt. ## Correlatie -Een andere term om te begrijpen is de **correlatiecoëfficiënt** tussen gegeven X en Y variabelen. Met een scatterplot kun je deze coëfficiënt snel visualiseren. Een plot met datapunten netjes verspreid in een lijn heeft een hoge correlatie, maar een plot met datapunten verspreid over het hele vlak tussen X en Y heeft een lage correlatie. +Een andere term die begrepen moet worden is de **Correlatiecoëfficiënt** tussen de gegeven X en Y variabelen. Met een scatterplot kun je deze coëfficiënt snel visualiseren. Een plot met datapoints netjes op een lijn heeft een hoge correlatie, terwijl een plot met punten verspreid over het veld tussen X en Y een lage correlatie heeft. -Een goed lineair regressiemodel zal een hoge (meer dichtbij 1 dan 0) correlatiecoëfficiënt hebben met behulp van de Kleinstekwadratenregressie methode met een regressielijn. +Een goed lineair regressiemodel is er een met een hoge (dichterbij 1 dan 0) Correlatiecoëfficiënt, gebruikmakend van de Least-Squares Regression-methode met een regressielijn. -✅ Voer het notebook uit dat bij deze les hoort en bekijk de scatterplot van Maand tegen Prijs. Lijkt de data die maand aan prijs koppelt voor pompoenverkoop een hoge of lage correlatie te hebben volgens jouw visuele interpretatie van de scatterplot? Verandert dat als je een fijnere maat gebruikt in plaats van `Maand`, bijvoorbeeld *dag van het jaar* (i.e. aantal dagen sinds het begin van het jaar)? +✅ Voer de bij deze les behorende notebook uit en bekijk de scatterplot van Maand tot Prijs. Lijkt de data die Maand koppelt aan Prijs voor pompoenverkopen een hoge of lage correlatie te hebben, volgens jouw visuele interpretatie van de scatterplot? Verandert dit als je een fijnmaziger maat gebruikt in plaats van `Month`, bijvoorbeeld *dag van het jaar* (dus het aantal dagen sinds het begin van het jaar)? -In onderstaande code gaan we ervan uit dat we de data hebben opgeschoond, en een data frame verkregen genaamd `new_pumpkins`, vergelijkbaar met het volgende: +In de hieronder volgende code gaan we ervan uit dat we de data hebben opgeschoond en een dataframe `new_pumpkins` hebben verkregen, vergelijkbaar met het volgende: ID | Maand | DagVanHetJaar | Variëteit | Stad | Verpakking | Laagste Prijs | Hoogste Prijs | Prijs ----|-------|---------------|-----------|-------|------------|---------------|---------------|------- -70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel kratjes | 15.0 | 15.0 | 13.636364 -71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel kratjes | 18.0 | 18.0 | 16.363636 -72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel kratjes | 18.0 | 18.0 | 16.363636 -73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel kratjes | 17.0 | 17.0 | 15.454545 -74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel kratjes | 15.0 | 15.0 | 13.636364 +---|-------|--------------|-----------|------|------------|---------------|---------------|------- +70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 boerentas kartonnen doos | 15.0 | 15.0 | 13.636364 +71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 boerentas kartonnen doos | 18.0 | 18.0 | 16.363636 +72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 boerentas kartonnen doos | 18.0 | 18.0 | 16.363636 +73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 boerentas kartonnen doos | 17.0 | 17.0 | 15.454545 +74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 boerentas kartonnen doos | 15.0 | 15.0 | 13.636364 -> De code om de data schoon te maken is beschikbaar in [`notebook.ipynb`](notebook.ipynb). We hebben dezelfde schoonmaakstappen uitgevoerd als in de vorige les, en de kolom `DagVanHetJaar` berekend met de volgende uitdrukking: +> De code om de data op te schonen is te vinden in [`notebook.ipynb`](notebook.ipynb). We hebben dezelfde schoonmaakstappen uitgevoerd als in de vorige les en hebben de kolom `DayOfYear` berekend met de volgende uitdrukking: ```python day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) ``` -Nu je inzicht hebt in de wiskunde achter lineaire regressie, laten we een regressiemodel maken om te zien of we kunnen voorspellen welke verpakking pompoenen de beste prijzen zal hebben. Iemand die pompoenen koopt voor een feestelijke pompoen-perk wil mogelijk deze informatie om hun aankopen van pompoenverpakkingen voor het perk te optimaliseren. +Nu je een begrip hebt van de wiskunde achter lineaire regressie, laten we een regressiemodel maken om te zien of we kunnen voorspellen welke verpakking pompoenen de beste pompoenprijzen zal hebben. Iemand die pompoenen koopt voor een pompoenpatch op vakantie zou deze informatie willen om zijn aankopen van pompoenverpakkingen voor de patch te optimaliseren. ## Op zoek naar correlatie @@ -115,22 +115,22 @@ Nu je inzicht hebt in de wiskunde achter lineaire regressie, laten we een regres > 🎥 Klik op de afbeelding hierboven voor een korte video-overzicht van correlatie. -Uit de vorige les heb je waarschijnlijk gezien dat de gemiddelde prijs voor verschillende maanden er ongeveer zo uitziet: +Uit de vorige les heb je waarschijnlijk gezien dat de gemiddelde prijs voor verschillende maanden er zo uitziet: Gemiddelde prijs per maand -Dit suggereert dat er enige correlatie zou moeten zijn, en we kunnen proberen een lineair regressiemodel te trainen om de relatie tussen `Maand` en `Prijs` te voorspellen, of tussen `DagVanHetJaar` en `Prijs`. Hier is de scatterplot die de laatste relatie toont: +Dit suggereert dat er enige correlatie moet zijn, en we kunnen proberen een lineair regressiemodel te trainen om de relatie tussen `Month` en `Price` te voorspellen, of tussen `DayOfYear` en `Price`. Hier is de scatterplot die de laatste relatie toont: -Scatterplot van Prijs versus Dag van het Jaar +Scatterplot van Prijs vs. Dag van het Jaar -Laten we kijken of er een correlatie is met de `corr` functie: +Laten we kijken of er correlatie is met de functie `corr`: ```python print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) ``` -Het lijkt erop dat de correlatie vrij klein is, -0.15 bij `Maand` en -0.17 bij de `DagVanHetJaar`, maar er kan een andere belangrijke relatie zijn. Het lijkt alsof er verschillende clusters prijzen zijn die overeenkomen met verschillende pompoenvariëteiten. Om deze hypothese te bevestigen, laten we elke pompoencategorie met een andere kleur plotten. Door een `ax` parameter door te geven aan de `scatter` plotfunctie kunnen we alle punten op dezelfde grafiek plotten: +Het lijkt erop dat de correlatie vrij klein is, -0.15 voor `Month` en -0.17 voor `DayOfYear`, maar er kan een andere belangrijke relatie zijn. Het lijkt erop dat er verschillende clusters van prijzen zijn die overeenkomen met verschillende pompoenvariëteiten. Om deze hypothese te bevestigen, laten we elke pompoencategorie in een andere kleur plotten. Door een `ax`-parameter mee te geven aan de `scatter` functie kunnen we alle punten op dezelfde grafiek weergeven: ```python ax=None @@ -140,34 +140,34 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()): ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var) ``` -Scatterplot van Prijs versus Dag van het Jaar +Scatterplot van Prijs vs. Dag van het Jaar -Ons onderzoek suggereert dat variëteit meer effect heeft op de prijs dan de daadwerkelijke verkoopdatum. Dit kunnen we zien met een staafdiagram: +Ons onderzoek suggereert dat variëteit een grotere invloed heeft op de algehele prijs dan de daadwerkelijke verkoopdatum. We kunnen dit zien met een staafdiagram: ```python new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') ``` -Staafdiagram van prijs versus variëteit +Staafdiagram van prijs vs variëteit -Laten we ons voor nu alleen richten op één pompoenvariëteit, de 'pie type', en kijken welk effect de datum heeft op de prijs: +Laten we ons voor dit moment alleen richten op één pompoenvariëteit, het 'pie type', en zien wat het effect van de datum op de prijs is: ```python pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] pie_pumpkins.plot.scatter('DayOfYear','Price') ``` -Scatterplot van Prijs versus Dag van het Jaar +Scatterplot van Prijs vs. Dag van het Jaar -Als we nu de correlatie tussen `Prijs` en `DagVanHetJaar` berekenen met de `corr` functie, krijgen we iets als `-0.27` - wat betekent dat het zinvol is om een voorspellend model te trainen. +Als we nu de correlatie tussen `Price` en `DayOfYear` berekenen met de functie `corr`, krijgen we iets als `-0.27` - wat betekent dat het zinvol is een voorspellend model te trainen. -> Voordat je een lineair regressiemodel traint is het belangrijk ervoor te zorgen dat onze data schoon is. Lineaire regressie werkt niet goed met ontbrekende waarden, dus het is zinvol om alle lege cellen te verwijderen: +> Voordat we een lineair regressiemodel trainen, is het belangrijk ervoor te zorgen dat onze data schoon is. Lineaire regressie werkt niet goed met ontbrekende waarden, dus het is zinvol om alle lege cellen te verwijderen: ```python pie_pumpkins.dropna(inplace=True) pie_pumpkins.info() ``` -Een andere benadering is om die lege waarden te vullen met gemiddelde waardes uit de betreffende kolom. +Een andere aanpak zou zijn om die lege waarden te vullen met gemiddelde waarden uit de overeenkomstige kolom. ## Eenvoudige lineaire regressie @@ -175,7 +175,7 @@ Een andere benadering is om die lege waarden te vullen met gemiddelde waardes ui > 🎥 Klik op de afbeelding hierboven voor een korte video-overzicht van lineaire en polynomiale regressie. -Om ons lineaire regressiemodel te trainen gebruiken we de **Scikit-learn** bibliotheek. +Om ons lineaire regressiemodel te trainen, gebruiken we de **Scikit-learn** bibliotheek. ```python from sklearn.linear_model import LinearRegression @@ -183,31 +183,31 @@ from sklearn.metrics import mean_squared_error from sklearn.model_selection import train_test_split ``` -We beginnen met het scheiden van invoerwaarden (features) en verwachte uitvoer (label) in afzonderlijke numpy-arrays: +We beginnen met het scheiden van invoerwaarden (features) en de verwachte uitvoer (label) in aparte numpy-arrays: ```python X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) y = pie_pumpkins['Price'] ``` -> Let op dat we `reshape` moesten uitvoeren op de invoerdata zodat het Linear Regression-pakket het correct kan begrijpen. Lineaire regressie verwacht een 2D-array als invoer waarbij elke rij van de array overeenkomt met een vector van invoerkenmerken. In ons geval, omdat we slechts één invoer hebben, hebben we een array nodig met de vorm N×1, waarbij N de grootte van de dataset is. +> Merk op dat we `reshape` moesten toepassen op de invoergegevens zodat het Linear Regression-pakket het correct kan begrijpen. Lineaire regressie verwacht een 2D-array als invoer, waarin elke rij overeenkomt met een vector van invoerkenmerken. In ons geval, omdat we maar één invoer hebben, hebben we een array nodig met de vorm N×1, waarbij N de grootte van de dataset is. -Dan moeten we de data splitsen in train- en testdatasets, zodat we ons model na het trainen kunnen valideren: +Daarna moeten we de data splitsen in train- en testdatasets, zodat we ons model kunnen valideren na het trainen: ```python X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) ``` -Tenslotte kost het trainen van het eigenlijke lineaire regressiemodel maar twee regels code. We definiëren het `LinearRegression` object en passen het toe op onze data met de `fit` methode: +Ten slotte kost het trainen van het eigenlijke lineaire regressiemodel slechts twee regels code. We definiëren het `LinearRegression` object en passen het toe op onze data met de `fit`-methode: ```python lin_reg = LinearRegression() lin_reg.fit(X_train,y_train) ``` -Het `LinearRegression` object bevat na het fitten alle coëfficiënten van de regressie, die toegankelijk zijn via de `.coef_` eigenschap. In ons geval is er slechts één coëfficiënt, die ongeveer `-0.017` zou moeten zijn. Dit betekent dat prijzen enigszins lijken te dalen in de tijd, maar niet te veel, ongeveer 2 cent per dag. We kunnen ook het snijpunt van de regressie met de Y-as benaderen via `lin_reg.intercept_` - dit zal rond `21` liggen in ons geval, wat de prijs aan het begin van het jaar aangeeft. +Het `LinearRegression`-object bevat na het `fit`-ten alle coëfficiënten van de regressie, die kunnen worden benaderd via de `.coef_`-eigenschap. In ons geval is er maar één coëfficiënt, die ongeveer `-0.017` zou moeten zijn. Dit betekent dat de prijzen met de tijd lijken te dalen, maar niet teveel, ongeveer 2 cent per dag. We kunnen ook het snijpunt van de regressie met de Y-as benaderen met `lin_reg.intercept_` - dit zal in ons geval rond de `21` liggen, wat de prijs aan het begin van het jaar aangeeft. -Om te zien hoe nauwkeurig ons model is, kunnen we prijzen voorspellen op een testdataset, en vervolgens meten hoe dicht onze voorspellingen bij de verwachte waarden liggen. Dit kan worden gedaan met root mean square error (RMSE) metrics, wat de wortel van het gemiddelde van alle gekwadrateerde verschillen tussen de verwachte en voorspelde waarde is. +Om te zien hoe nauwkeurig ons model is, kunnen we prijzen voorspellen op een testdataset, en dan meten hoe dicht onze voorspellingen bij de verwachte waarden liggen. Dit kan worden gedaan met behulp van root mean square error (RMSE) metriek, wat de wortel is van het gemiddelde van alle gekwadrateerde verschillen tussen verwachte en voorspelde waarden. ```python pred = lin_reg.predict(X_test) @@ -216,36 +216,36 @@ rmse = np.sqrt(mean_squared_error(y_test,pred)) print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)') ``` -Onze fout lijkt rond de 2 punten te liggen, wat ongeveer 17% is. Niet zo goed. Een andere indicator van de modelkwaliteit is de **bepalingscoëfficiënt**, die als volgt kan worden verkregen: +Onze fout lijkt ongeveer 2 punten te zijn, wat ~17% is. Niet al te best. Een andere indicator van modelkwaliteit is de **coëfficiënt van determinatie**, die op de volgende manier kan worden verkregen: ```python score = lin_reg.score(X_train,y_train) print('Model determination: ', score) ``` -Als de waarde 0 is, betekent dit dat het model geen rekening houdt met de invoergegevens en fungeert als de *slechtste lineaire voorspeller*, die simpelweg de gemiddelde waarde van het resultaat is. Een waarde van 1 betekent dat we perfect alle verwachte uitkomsten kunnen voorspellen. In ons geval is de coëfficiënt ongeveer 0.06, wat vrij laag is. +Als de waarde 0 is, betekent dit dat het model geen rekening houdt met de invoergegevens en functioneert als de *slechtste lineaire voorspeller*, wat simpelweg een gemiddelde waarde van het resultaat is. Een waarde van 1 betekent dat we perfect alle verwachte uitkomsten kunnen voorspellen. In ons geval is de coëfficiënt ongeveer 0.06, wat vrij laag is. -We kunnen ook de testdata plotten samen met de regressielijn om beter te zien hoe de regressie in ons geval werkt: +We kunnen ook de testgegevens samen met de regressielijn plotten om beter te zien hoe regressie in ons geval werkt: ```python plt.scatter(X_test,y_test) plt.plot(X_test,pred) ``` -Lineaire regressie +Linear regression ## Polynomiale Regressie -Een ander type lineaire regressie is polynomiale regressie. Hoewel er soms een lineair verband is tussen variabelen - hoe groter de pompoen in volume, hoe hoger de prijs - kunnen deze relaties soms niet als een vlak of rechte lijn worden geplot. +Een ander type Lineaire Regressie is Polynomiale Regressie. Hoewel er soms een lineair verband is tussen variabelen - hoe groter de pompoen in volume, hoe hoger de prijs - kunnen deze verbanden soms niet worden uitgezet als een vlak of rechte lijn. -✅ Hier zijn [nog enkele voorbeelden](https://online.stat.psu.edu/stat501/lesson/9/9.8) van data die polynomiale regressie kunnen gebruiken +✅ Hier zijn [nog wat meer voorbeelden](https://online.stat.psu.edu/stat501/lesson/9/9.8) van data die gebruik zouden kunnen maken van Polynomiale Regressie -Bekijk nogmaals de relatie tussen Datum en Prijs. Lijkt deze spreidingsgrafiek er echt op dat het noodzakelijk via een rechte lijn geanalyseerd moet worden? Kunnen prijzen niet fluctueren? In dat geval kun je polynomiale regressie proberen. +Kijk nog eens goed naar het verband tussen Datum en Prijs. Lijkt deze scatterplot echt zo dat het noodzakelijk is deze met een rechte lijn te analyseren? Kunnen prijzen niet fluctueren? In dat geval kun je polynomiale regressie proberen. -✅ Polynomen zijn wiskundige expressies die kunnen bestaan uit een of meer variabelen en coëfficiënten +✅ Polynomen zijn wiskundige uitdrukkingen die uit één of meer variabelen en coëfficiënten kunnen bestaan -Polynomiale regressie creëert een gekromde lijn om niet-lineaire data beter te passen. In ons geval, als we een gekwadrateerde `DayOfYear` variabele opnemen in de invoerdata, zouden we onze data moeten kunnen passen met een parabolische curve die een minimum heeft op een bepaald punt binnen het jaar. +Polynomiale regressie maakt een gebogen lijn om beter niet-lineaire data te modelleren. In ons geval, als we een gekwadrateerde `DayOfYear`-variabele opnemen in de invoergegevens, zouden we onze data moeten kunnen benaderen met een parabolische kromme, die een minimum heeft op een bepaald punt in het jaar. -Scikit-learn bevat een handige [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) om verschillende stappen van dataverwerking te combineren. Een **pipeline** is een keten van **estimators**. In ons geval maken we een pipeline die eerst polynomiale kenmerken toevoegt aan ons model, en vervolgens de regressie traint: +Scikit-learn bevat een handige [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) om verschillende stappen van dataverwerking te combineren. Een **pipeline** is een keten van **estimatoren**. In ons geval maken we een pipeline die eerst polynoomkenmerken toevoegt aan ons model, en daarna de regressie traint: ```python from sklearn.preprocessing import PolynomialFeatures @@ -256,36 +256,58 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train,y_train) ``` -Door `PolynomialFeatures(2)` te gebruiken, nemen we alle tweede-graads polynomen van de invoerdata op. In ons geval betekent dit alleen `DayOfYear`2, maar met twee invoervariabelen X en Y voegt dit X2, XY en Y2 toe. We kunnen ook hogere graads polynomen gebruiken als we willen. +Het gebruik van `PolynomialFeatures(2)` betekent dat we alle tweedegraads polynomen van de invoergegevens meenemen. In ons geval betekent dit alleen `DayOfYear`2, maar met twee invoervariabelen X en Y zal dit X2, XY en Y2 toevoegen. We kunnen ook hogere graad polynomen gebruiken indien gewenst. + +Pipelines kunnen op dezelfde manier worden gebruikt als het originele `LinearRegression`-object, d.w.z. we kunnen de pipeline `fit`-ten en daarna `predict` gebruiken om voorspellingen te krijgen: + +```python +pred = pipeline.predict(X_test) + +rmse = np.sqrt(mean_squared_error(y_test,pred)) +print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)') + +score = pipeline.score(X_train,y_train) +print('Model determination: ', score) +``` + +Om de vloeiende benaderingskromme te plotten, gebruiken we `np.linspace` om een uniforme reeks invoerwaarden aan te maken, in plaats van direct te plotten op de ongeordende testdata (wat een zigzaglijn zou opleveren): + +```python +X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1) +y_range = pipeline.predict(X_range) + +plt.scatter(X_test, y_test) +plt.plot(X_range, y_range) +``` -Pipelines kunnen op dezelfde manier worden gebruikt als het originele `LinearRegression` object, d.w.z. we kunnen de pipeline `fitten` en vervolgens `predict` gebruiken om de resultaten te krijgen. Hier is de grafiek met testdata en de benaderingscurve: +Hier is de grafiek die de testdata en de benaderingskromme toont: -Polynomiale regressie +Polynomial regression -Met polynomiale regressie krijgen we iets lagere MSE en hogere bepalingscoëfficiënt, maar niet significant. We moeten rekening houden met andere kenmerken! +Met Polynomiale Regressie kunnen we iets lagere RMSE en hogere determinatie bereiken, maar niet significant. We moeten ook andere kenmerken in overweging nemen! -> Je ziet dat de minimale pompoenprijzen ergens rond Halloween zijn. Hoe kun je dat verklaren? +> Je kunt zien dat de minimale pompoenprijzen ergens rond Halloween voorkomen. Hoe kun je dat verklaren? -🎃 Gefeliciteerd, je hebt zojuist een model gemaakt dat kan helpen de prijs van taartpompoenen te voorspellen. Waarschijnlijk kun je dezelfde procedure voor alle pompoentypes herhalen, maar dat zou saai zijn. Laten we nu leren hoe we pompoensoorten rekening kunnen laten houden in ons model! +🎃 Gefeliciteerd, je hebt zojuist een model gemaakt dat kan helpen de prijs van taartpompoenen te voorspellen. Waarschijnlijk kun je dezelfde procedure herhalen voor alle pompoentypes, maar dat zou tijdrovend zijn. Laten we nu leren hoe we pompoenvariëteit kunnen meenemen in ons model! ## Categorische Kenmerken -In de ideale wereld willen we prijzen kunnen voorspellen voor verschillende pompoenrassen met hetzelfde model. De kolom `Variety` is echter anders dan kolommen zoals `Month`, omdat deze niet-numerieke waarden bevat. Zulke kolommen heten **categorisch**. +In de ideale wereld willen we prijzen voor verschillende pompoenvariëteiten kunnen voorspellen met hetzelfde model. De kolom `Variety` is echter anders dan kolommen zoals `Month`, omdat deze niet-numerieke waarden bevat. Zulke kolommen worden **categorisch** genoemd. -[![ML voor beginners - Categorische Kenmerken voorspellen met Lineaire Regressie](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML voor beginners - Categorische Kenmerken voorspellen met Lineaire Regressie") +[![ML voor beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML voor beginners - Categorical Feature Predictions with Linear Regression") -> 🎥 Klik op de afbeelding hierboven voor een korte video-overzicht van het gebruik van categorische kenmerken. +> 🎥 Klik op de afbeelding hierboven voor een korte video-overzicht over het gebruik van categorische kenmerken. Hier zie je hoe de gemiddelde prijs afhangt van de variëteit: -Gemiddelde prijs per variëteit +Average price by variety -Om variëteit mee te nemen, moeten we het eerst omzetten naar numerieke vorm, oftewel **encoderen**. We kunnen dat op verschillende manieren doen: +Om variëteit mee te nemen moeten we deze eerst omzetten naar numerieke vorm, oftewel **encoder**. Er zijn verschillende manieren om dat te doen: -* Eenvoudige **numerieke codering** maakt een tabel van verschillende variëteiten en vervangt dan de variëteitnaam door een index in die tabel. Dit is niet de beste methode voor lineaire regressie, omdat lineaire regressie de daadwerkelijke numerieke waarde van de index neemt en toevoegt aan het resultaat, vermenigvuldigd met een coëfficiënt. In ons geval is de relatie tussen het indexnummer en de prijs duidelijk niet-lineair, zelfs als we zorgen dat indices op bepaalde orde staan. -* **One-hot encoding** vervangt de kolom `Variety` door 4 verschillende kolommen, één voor elke variëteit. Elke kolom bevat `1` als de overeenkomstige rij van die variëteit is, en `0` anders. Dit betekent dat er vier coëfficiënten in de lineaire regressie zijn, één per pompoenvariëteit, verantwoordelijk voor de "startprijs" (of beter gezegd "extra prijs") voor die specifieke variëteit. +* Eenvoudige **numerieke codering** bouwt een tabel van verschillende variëteiten en vervangt daarna de variëteitsnaam door een index in die tabel. Dit is niet ideaal voor lineaire regressie, omdat lineaire regressie de numerieke waarde van de index gebruikt en deze vermenigvuldigt met een coëfficiënt om op te tellen bij het resultaat. In ons geval is het verband tussen indexnummer en prijs duidelijk niet-lineair, ook al zorgen we ervoor dat indices op een specifieke manier worden geordend. +* **One-hot encoding** vervangt de `Variety`-kolom door 4 verschillende kolommen, één voor elke variëteit. Elke kolom bevat `1` als de betreffende rij die variëteit heeft, en anders `0`. Dit betekent dat er vier coëfficiënten in de lineaire regressie zijn, één voor elke pompoenvariëteit, verantwoordelijk voor de "startprijs" (of beter gezegd "extra prijs") voor die specifieke variëteit. -De volgende code laat zien hoe we variëteit one-hot encoderen: +De onderstaande code laat zien hoe je een variëteit one-hot kunt encoderen: ```python pd.get_dummies(new_pumpkins['Variety']) @@ -302,14 +324,14 @@ pd.get_dummies(new_pumpkins['Variety']) 1741 | 0 | 1 | 0 | 0 1742 | 0 | 1 | 0 | 0 -Om lineaire regressie te trainen met one-hot encoded variëteit als invoer, hoeven we `X` en `y` alleen correct te initialiseren: +Om lineaire regressie te trainen met one-hot encoded variëteit als input, hoeven we alleen `X` en `y` correct te initialiseren: ```python X = pd.get_dummies(new_pumpkins['Variety']) y = new_pumpkins['Price'] ``` -De rest van de code is hetzelfde als wat we eerder gebruikten om lineaire regressie te trainen. Als je dit probeert, zie je dat de mean squared error ongeveer hetzelfde is, maar we krijgen veel een hogere bepalingscoëfficiënt (~77%). Om nog nauwkeurigere voorspellingen te krijgen, kunnen we meer categorische kenmerken meenemen, evenals numerieke kenmerken zoals `Month` of `DayOfYear`. Om één grote array van kenmerken te verkrijgen, kunnen we `join` gebruiken: +De rest van de code is hetzelfde als wat we hierboven gebruikten om Lineaire Regressie te trainen. Als je dit probeert, zul je zien dat de mean squared error ongeveer hetzelfde is, maar we krijgen een veel hogere coëfficiënt van determinatie (~77%). Om nog nauwkeurigere voorspellingen te krijgen kunnen we meer categorische kenmerken meenemen, evenals numerieke kenmerken zoals `Month` of `DayOfYear`. Om één grote features-array te krijgen, kunnen we `join` gebruiken: ```python X = pd.get_dummies(new_pumpkins['Variety']) \ @@ -319,11 +341,11 @@ X = pd.get_dummies(new_pumpkins['Variety']) \ y = new_pumpkins['Price'] ``` -Hier houden we ook rekening met `City` en `Package` type, wat ons een MSE van 2.84 (10%) en een bepalingscoëfficiënt van 0.94 geeft! +Hier nemen we ook `City` en het type `Package` mee, wat ons RMSE 2.84 (10.5%) en determinatie 0.94 geeft! ## Alles samenvoegen -Om het beste model te maken, kunnen we gecombineerde (one-hot encoded categorische + numerieke) data van het bovenstaande voorbeeld samen met polynomiale regressie gebruiken. Hier is de complete code voor jouw gemak: +Om het beste model te maken kunnen we gecombineerde (one-hot encoded categorisch + numeriek) data van het bovenstaande voorbeeld samen met Polynomiale Regressie gebruiken. Hier is de complete code voor je gemak: ```python # stel trainingsgegevens in @@ -343,44 +365,44 @@ pipeline.fit(X_train,y_train) # voorspel resultaten voor testgegevens pred = pipeline.predict(X_test) -# bereken MSE en determinatie -mse = np.sqrt(mean_squared_error(y_test,pred)) -print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') +# bereken RMSE en bepaling +rmse = mean_squared_error(y_test, pred, squared=False) +print(f'RMSE: {rmse:3.3} ({rmse/pred.mean()*100:3.3}%)') score = pipeline.score(X_train,y_train) print('Model determination: ', score) ``` -Dit zou ons de beste bepalingscoëfficiënt van bijna 97% moeten geven, en MSE=2.23 (~8% voorspellingsfout). +Dit zou ons de beste determinatiecoëfficiënt van bijna 97% moeten geven, en RMSE=2.23 (~8% voorspellingsfout). -| Model | MSE | Bepalingscoëfficiënt | -|-------|-----|----------------------| -| `DayOfYear` Lineair | 2.77 (17.2%) | 0.07 | -| `DayOfYear` Polynomiaal | 2.73 (17.0%) | 0.08 | -| `Variety` Lineair | 5.24 (19.7%) | 0.77 | -| Alle kenmerken Lineair | 2.84 (10.5%) | 0.94 | -| Alle kenmerken Polynomiaal | 2.23 (8.25%) | 0.97 | +| Model | RMSE | Determinatie | +|-------|-----|--------------| +| `DayOfYear` Linear | 2.77 (17.2%) | 0.07 | +| `DayOfYear` Polynomial | 2.73 (17.0%) | 0.08 | +| `Variety` Linear | 5.24 (19.7%) | 0.77 | +| Alle kenmerken Linear | 2.84 (10.5%) | 0.94 | +| Alle kenmerken Polynomial | 2.23 (8.25%) | 0.97 | -🏆 Goed gedaan! Je maakte vier regressiemodellen in één les en verbeterde de modelkwaliteit tot 97%. In de laatste sectie over regressie leer je over logistieke regressie om categorieën te bepalen. +🏆 Goed gedaan! Je hebt vier Regressiemodellen in één les gemaakt en de modelkwaliteit verbeterd tot 97%. In het laatste gedeelte over Regressie leer je over Logistische Regressie om categorieën te bepalen. --- ## 🚀Uitdaging -Test verschillende variabelen in dit notebook om te zien hoe correlatie overeenkomt met modelnauwkeurigheid. +Test verschillende variabelen in dit notebook om te zien hoe correlatie correspondeert met modelnauwkeurigheid. ## [Quiz na de les](https://ff-quizzes.netlify.app/en/ml/) -## Review & Zelfstudie +## Herziening & Zelfstudie -In deze les leerden we over lineaire regressie. Er zijn andere belangrijke typen regressie. Lees over Stepwise, Ridge, Lasso en Elasticnet technieken. Een goede cursus om meer te leren is de [Stanford Statistical Learning cursus](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) +In deze les leerden we over Lineaire Regressie. Er zijn andere belangrijke soorten Regressie. Lees over Stepwise, Ridge, Lasso en Elasticnet technieken. Een goede cursus om meer te leren is de [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) ## Opdracht -[Maak een model](assignment.md) +[Maak een Model](assignment.md) --- -**Disclaimer**: -Dit document is vertaald met behulp van de AI-vertalingsdienst [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we streven naar nauwkeurigheid, moet u er rekening mee houden dat geautomatiseerde vertalingen fouten of onjuistheden kunnen bevatten. Het originele document in de oorspronkelijke taal dient als de gezaghebbende bron te worden beschouwd. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties voortvloeiend uit het gebruik van deze vertaling. +**Disclaimer**: +Dit document is vertaald met behulp van de AI vertaaldienst [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we streven naar nauwkeurigheid, dient u er rekening mee te houden dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in de oorspronkelijke taal moet als de gezaghebbende bron worden beschouwd. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor enige misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/2-Regression/3-Linear/solution/notebook.ipynb b/translations/nl/2-Regression/3-Linear/solution/notebook.ipynb index c1729361a..4e6b2284f 100644 --- a/translations/nl/2-Regression/3-Linear/solution/notebook.ipynb +++ b/translations/nl/2-Regression/3-Linear/solution/notebook.ipynb @@ -4,14 +4,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Lineaire en Polynomiale Regressie voor Pompoenprijzen - Les 3\n", + "## Lineaire en polynomiale regressie voor pompoenprijzen - Les 3\n", "\n", - "Laad de benodigde bibliotheken en dataset. Zet de gegevens om naar een dataframe met een subset van de gegevens:\n", + "Laad de benodigde bibliotheken en dataset. Zet de gegevens om naar een dataframe met een subset van de data:\n", "\n", - "- Selecteer alleen pompoenen die per schepel geprijsd zijn\n", - "- Converteer de datum naar een maand\n", - "- Bereken de prijs als het gemiddelde van de hoge en lage prijzen\n", - "- Pas de prijs aan om de prijs per schepelhoeveelheid weer te geven\n" + "- Haal alleen pompoenen op die per bushel geprijsd zijn\n", + "- Zet de datum om naar een maand\n", + "- Bereken de prijs als een gemiddelde van hoge en lage prijzen\n", + "- Zet de prijs om zodat deze de prijs per bushel hoeveelheid weergeeft\n" ] }, { @@ -377,7 +377,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Een spreidingsdiagram herinnert ons eraan dat we alleen maandgegevens hebben van augustus tot en met december. We hebben waarschijnlijk meer gegevens nodig om conclusies op een lineaire manier te kunnen trekken.\n" + "Een spreidingsdiagram herinnert ons eraan dat we alleen maandgegevens hebben van augustus tot en met december. Waarschijnlijk hebben we meer gegevens nodig om op een lineaire manier conclusies te kunnen trekken.\n" ] }, { @@ -447,7 +447,9 @@ { "cell_type": "markdown", "metadata": {}, - "source": [] + "source": [ + "Laten we eens kijken of er een correlatie is:\n" + ] }, { "cell_type": "code", @@ -472,7 +474,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Het lijkt erop dat de correlatie vrij klein is, maar er is een andere, belangrijkere relatie - omdat de prijsgegevens in de bovenstaande plot lijken te bestaan uit verschillende duidelijke clusters. Laten we een plot maken die verschillende pompoenvariëteiten laat zien:\n" + "Het lijkt erop dat de correlatie vrij klein is, maar er is een andere, belangrijkere relatie - omdat de prijsniveaus in de bovenstaande grafiek meerdere duidelijke clusters lijken te hebben. Laten we een grafiek maken die verschillende pompoenrassen laat zien:\n" ] }, { @@ -535,7 +537,9 @@ { "cell_type": "markdown", "metadata": {}, - "source": [] + "source": [ + "Laten we ons voorlopig alleen concentreren op één soort - **taarttype**.\n" + ] }, { "cell_type": "code", @@ -582,9 +586,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Lineaire regressie\n", + "### Lineaire Regressie\n", "\n", - "We gebruiken Scikit Learn om een lineair regressiemodel te trainen:\n" + "We zullen Scikit Learn gebruiken om een lineair regressiemodel te trainen:\n" ] }, { @@ -662,7 +666,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "De helling van de lijn kan worden bepaald aan de hand van lineaire regressiecoëfficiënten:\n" + "De helling van de lijn kan worden bepaald uit de coëfficiënten van de lineaire regressie:\n" ] }, { @@ -718,11 +722,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Polynomiale regressie\n", + "### Polynomiale Regressie\n", "\n", - "Soms is de relatie tussen kenmerken en de resultaten van nature niet-lineair. Bijvoorbeeld, pompoenprijzen kunnen hoog zijn in de winter (maanden=1,2), vervolgens dalen in de zomer (maanden=5-7), en daarna weer stijgen. Lineaire regressie kan deze relatie niet nauwkeurig vinden.\n", + "Soms is de relatie tussen kenmerken en resultaten van nature niet-lineair. Bijvoorbeeld, pompoenprijzen kunnen hoog zijn in de winter (maanden=1,2), vervolgens dalen in de zomer (maanden=5-7), en daarna weer stijgen. Lineaire regressie kan deze relatie niet nauwkeurig vinden.\n", "\n", - "In dit geval kunnen we overwegen om extra kenmerken toe te voegen. Een eenvoudige manier is om polynomen van invoerkenmerken te gebruiken, wat resulteert in **polynomiale regressie**. In Scikit Learn kunnen we automatisch polynomiale kenmerken vooraf berekenen met behulp van pipelines:\n" + "In dit geval kunnen we overwegen extra kenmerken toe te voegen. Een eenvoudige manier is om polynomen van de invoerkenmerken te gebruiken, wat zou resulteren in **polynomiale regressie**. In Scikit Learn kunnen we polynomiale kenmerken automatisch vooraf berekenen met behulp van pipelines: \n" ] }, { @@ -777,22 +781,25 @@ "score = pipeline.score(X_train,y_train)\n", "print('Model determination: ', score)\n", "\n", - "plt.scatter(X_test,y_test)\n", - "plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))" + "X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)\n", + "y_range = pipeline.predict(X_range)\n", + "\n", + "plt.scatter(X_test, y_test)\n", + "plt.plot(X_range, y_range)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Verschillende manieren van coderen\n", + "### Codering variëteiten\n", "\n", - "In een ideale wereld willen we prijzen voor verschillende pompoenvariëteiten kunnen voorspellen met hetzelfde model. Om rekening te houden met de variëteit, moeten we deze eerst omzetten naar een numerieke vorm, ofwel **coderen**. Er zijn verschillende manieren om dit te doen:\n", + "In de ideale wereld willen we prijzen voor verschillende pompoenvariëteiten kunnen voorspellen met hetzelfde model. Om rekening te houden met variëteit, moeten we deze eerst omzetten naar numerieke vorm, of **coderen**. Er zijn verschillende manieren om dit te doen:\n", "\n", - "* Eenvoudige numerieke codering, waarbij een tabel wordt gemaakt van verschillende variëteiten, en de variëteitsnaam wordt vervangen door een index in die tabel. Dit is niet de beste aanpak voor lineaire regressie, omdat lineaire regressie de numerieke waarde van de index meeneemt, en die numerieke waarde waarschijnlijk niet numeriek correleert met de prijs.\n", - "* One-hot encoding, waarbij de kolom `Variety` wordt vervangen door 4 verschillende kolommen, één voor elke variëteit. Deze kolommen bevatten een 1 als de betreffende rij van die specifieke variëteit is, en een 0 anders.\n", + "* Eenvoudige numerieke codering die een tabel van verschillende variëteiten opbouwt, en vervolgens de variëteitsnaam vervangt door een index in die tabel. Dit is niet de beste keuze voor lineaire regressie, omdat lineaire regressie de numerieke waarde van de index meeneemt, en de numerieke waarde waarschijnlijk niet numeriek correleert met de prijs.\n", + "* One-hot codering, die de `Variety` kolom vervangt door 4 verschillende kolommen, één voor elke variëteit, die 1 bevatten als de overeenkomende rij de gegeven variëteit heeft, en 0 anders.\n", "\n", - "De onderstaande code laat zien hoe we een variëteit kunnen one-hot encoderen:\n" + "De onderstaande code laat zien hoe we een variëteit one-hot kunnen coderen:\n" ] }, { @@ -942,7 +949,7 @@ "source": [ "### Lineaire regressie op variëteit\n", "\n", - "We zullen nu dezelfde code als hierboven gebruiken, maar in plaats van `DayOfYear` gebruiken we onze one-hot-gecodeerde variëteit als invoer:\n" + "We zullen nu dezelfde code gebruiken als hierboven, maar in plaats van `DayOfYear` gebruiken we onze one-hot-gecodeerde variëteit als invoer:\n" ] }, { @@ -990,7 +997,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We kunnen ook proberen andere functies op dezelfde manier te gebruiken en ze te combineren met numerieke functies, zoals `Month` of `DayOfYear`:\n" + "We kunnen ook proberen andere kenmerken op dezelfde manier te gebruiken en deze te combineren met numerieke kenmerken, zoals `Month` of `DayOfYear`:\n" ] }, { @@ -1023,7 +1030,7 @@ "source": [ "### Polynomiale regressie\n", "\n", - "Polynomiale regressie kan ook worden gebruikt met categorische kenmerken die one-hot-encoded zijn. De code om polynomiale regressie te trainen zou in wezen hetzelfde zijn als wat we hierboven hebben gezien.\n" + "Polynomiale regressie kan ook worden gebruikt met categorische kenmerken die one-hot-gecodeerd zijn. De code om polynomiale regressie te trainen zou in feite hetzelfde zijn als wat we hierboven hebben gezien.\n" ] }, { @@ -1070,7 +1077,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Disclaimer**: \nDit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we streven naar nauwkeurigheid, willen we u erop wijzen dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in de oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor kritieke informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling.\n" + "---\n\n\n**Disclaimer**: \nDit document is vertaald met behulp van de AI-vertalingsdienst [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we streven naar nauwkeurigheid, dient u er rekening mee te houden dat geautomatiseerde vertalingen fouten of onjuistheden kunnen bevatten. Het oorspronkelijke document in de oorspronkelijke taal moet als gezaghebbende bron worden beschouwd. Voor kritieke informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling.\n\n" ] } ], @@ -1100,13 +1107,7 @@ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" } }, - "orig_nbformat": 2, - "coopTranslator": { - "original_hash": "d77bd89ae7e79780c68c58bab91f13f8", - "translation_date": "2025-09-06T11:31:07+00:00", - "source_file": "2-Regression/3-Linear/solution/notebook.ipynb", - "language_code": "nl" - } + "orig_nbformat": 2 }, "nbformat": 4, "nbformat_minor": 2 diff --git a/translations/vi/.co-op-translator.json b/translations/vi/.co-op-translator.json index 219a6947e..86e8960ec 100644 --- a/translations/vi/.co-op-translator.json +++ b/translations/vi/.co-op-translator.json @@ -36,8 +36,8 @@ "language_code": "vi" }, "1-Introduction/4-techniques-of-ML/README.md": { - "original_hash": "9d91f3af3758fdd4569fb410575995ef", - "translation_date": "2025-09-05T19:35:41+00:00", + "original_hash": "84b1715a6be62ef1697351dcc5d7b567", + "translation_date": "2026-04-26T20:07:09+00:00", "source_file": "1-Introduction/4-techniques-of-ML/README.md", "language_code": "vi" }, @@ -90,8 +90,8 @@ "language_code": "vi" }, "2-Regression/3-Linear/README.md": { - "original_hash": "26c53a922f1f1e8542b0ea41ff52221a", - "translation_date": "2026-04-20T20:56:30+00:00", + "original_hash": "8b776e731c35b171d316d01d0e7b1369", + "translation_date": "2026-04-26T20:06:44+00:00", "source_file": "2-Regression/3-Linear/README.md", "language_code": "vi" }, @@ -107,6 +107,12 @@ "source_file": "2-Regression/3-Linear/solution/Julia/README.md", "language_code": "vi" }, + "2-Regression/3-Linear/solution/notebook.ipynb": { + "original_hash": "6781223ffbe8cfdaa38d0200f08e1288", + "translation_date": "2026-04-26T20:03:21+00:00", + "source_file": "2-Regression/3-Linear/solution/notebook.ipynb", + "language_code": "vi" + }, "2-Regression/4-Logistic/README.md": { "original_hash": "abf86d845c84330bce205a46b382ec88", "translation_date": "2025-09-05T18:46:57+00:00", diff --git a/translations/vi/1-Introduction/4-techniques-of-ML/README.md b/translations/vi/1-Introduction/4-techniques-of-ML/README.md index c6d518d26..394261856 100644 --- a/translations/vi/1-Introduction/4-techniques-of-ML/README.md +++ b/translations/vi/1-Introduction/4-techniques-of-ML/README.md @@ -1,117 +1,117 @@ -# Kỹ thuật Học Máy +# Kỹ thuật của Máy học -Quy trình xây dựng, sử dụng và duy trì các mô hình học máy cùng dữ liệu mà chúng sử dụng là một quy trình rất khác biệt so với nhiều quy trình phát triển khác. Trong bài học này, chúng ta sẽ làm rõ quy trình này và phác thảo các kỹ thuật chính mà bạn cần biết. Bạn sẽ: +Quá trình xây dựng, sử dụng và duy trì các mô hình máy học cùng dữ liệu mà chúng sử dụng là một quy trình rất khác biệt so với nhiều quy trình phát triển khác. Trong bài học này, chúng ta sẽ làm sáng tỏ quy trình và phác thảo các kỹ thuật chính mà bạn cần biết. Bạn sẽ: -- Hiểu các quy trình nền tảng của học máy ở mức độ cao. +- Hiểu được các quy trình làm nền tảng cho máy học ở mức cao. - Khám phá các khái niệm cơ bản như 'mô hình', 'dự đoán', và 'dữ liệu huấn luyện'. -## [Câu hỏi trước bài giảng](https://ff-quizzes.netlify.app/en/ml/) +## [Bài kiểm tra trước bài giảng](https://ff-quizzes.netlify.app/en/ml/) -[![Học máy cho người mới bắt đầu - Kỹ thuật Học Máy](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "Học máy cho người mới bắt đầu - Kỹ thuật Học Máy") +[![ML for beginners - Techniques of Machine Learning](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML for beginners - Techniques of Machine Learning") -> 🎥 Nhấp vào hình ảnh trên để xem video ngắn về bài học này. +> 🎥 Nhấn vào hình ảnh ở trên để xem video ngắn hướng dẫn qua bài học này. ## Giới thiệu -Ở mức độ cao, việc tạo ra các quy trình học máy (ML) bao gồm một số bước: +Ở mức độ tổng quát, công việc tạo ra các quy trình máy học (ML) bao gồm một số bước: -1. **Xác định câu hỏi**. Hầu hết các quy trình ML bắt đầu bằng việc đặt ra một câu hỏi mà không thể trả lời bằng một chương trình điều kiện đơn giản hoặc một hệ thống dựa trên quy tắc. Những câu hỏi này thường xoay quanh việc dự đoán dựa trên một tập hợp dữ liệu. -2. **Thu thập và chuẩn bị dữ liệu**. Để có thể trả lời câu hỏi của bạn, bạn cần dữ liệu. Chất lượng và, đôi khi, số lượng dữ liệu của bạn sẽ quyết định mức độ bạn có thể trả lời câu hỏi ban đầu. Việc trực quan hóa dữ liệu là một khía cạnh quan trọng của giai đoạn này. Giai đoạn này cũng bao gồm việc chia dữ liệu thành nhóm huấn luyện và kiểm tra để xây dựng mô hình. -3. **Chọn phương pháp huấn luyện**. Tùy thuộc vào câu hỏi của bạn và bản chất của dữ liệu, bạn cần chọn cách huấn luyện mô hình để phản ánh tốt nhất dữ liệu và đưa ra dự đoán chính xác. Đây là phần của quy trình ML yêu cầu chuyên môn cụ thể và thường cần một lượng lớn thử nghiệm. -4. **Huấn luyện mô hình**. Sử dụng dữ liệu huấn luyện của bạn, bạn sẽ sử dụng các thuật toán khác nhau để huấn luyện mô hình nhận diện các mẫu trong dữ liệu. Mô hình có thể sử dụng các trọng số nội bộ có thể được điều chỉnh để ưu tiên một số phần của dữ liệu hơn các phần khác nhằm xây dựng mô hình tốt hơn. -5. **Đánh giá mô hình**. Bạn sử dụng dữ liệu chưa từng thấy trước đây (dữ liệu kiểm tra của bạn) từ tập dữ liệu đã thu thập để xem mô hình hoạt động như thế nào. -6. **Điều chỉnh tham số**. Dựa trên hiệu suất của mô hình, bạn có thể thực hiện lại quy trình bằng cách sử dụng các tham số hoặc biến khác nhau để kiểm soát hành vi của các thuật toán được sử dụng để huấn luyện mô hình. -7. **Dự đoán**. Sử dụng các đầu vào mới để kiểm tra độ chính xác của mô hình. +1. **Xác định câu hỏi**. Hầu hết các quy trình ML bắt đầu bằng việc đặt ra một câu hỏi không thể trả lời bằng một chương trình điều kiện đơn giản hoặc một công cụ dựa trên quy tắc. Những câu hỏi này thường xoay quanh các dự đoán dựa trên một tập hợp dữ liệu. +2. **Thu thập và chuẩn bị dữ liệu**. Để có thể trả lời câu hỏi, bạn cần dữ liệu. Chất lượng và, đôi khi, số lượng dữ liệu của bạn sẽ quyết định mức độ tốt bạn có thể trả lời câu hỏi ban đầu. Việc trực quan hóa dữ liệu là một khía cạnh quan trọng của giai đoạn này. Giai đoạn này cũng bao gồm chia dữ liệu thành nhóm huấn luyện và kiểm tra để xây dựng mô hình. +3. **Chọn phương pháp huấn luyện**. Tùy vào câu hỏi và tính chất của dữ liệu, bạn cần chọn cách huấn luyện một mô hình tốt nhất để phản ánh dữ liệu và đưa ra dự đoán chính xác với nó. Đây là phần trong quy trình ML của bạn đòi hỏi chuyên môn cụ thể và thường là một lượng lớn thử nghiệm. +4. **Huấn luyện mô hình**. Sử dụng dữ liệu huấn luyện, bạn sẽ sử dụng nhiều thuật toán khác nhau để huấn luyện một mô hình nhận diện các mô hình trong dữ liệu. Mô hình có thể sử dụng các trọng số nội bộ có thể điều chỉnh để ưu tiên phần dữ liệu nào đó nhằm xây dựng mô hình tốt hơn. +5. **Đánh giá mô hình**. Bạn sử dụng dữ liệu chưa từng thấy trước đây (dữ liệu kiểm tra) từ bộ dữ liệu đã thu thập để xem mô hình hoạt động ra sao. +6. **Điều chỉnh tham số**. Dựa trên hiệu suất của mô hình, bạn có thể thực hiện lại quy trình sử dụng các tham số khác nhau, hoặc biến số, kiểm soát hành vi của các thuật toán được dùng để huấn luyện mô hình. +7. **Dự đoán**. Sử dụng dữ liệu đầu vào mới để kiểm tra độ chính xác của mô hình. ## Câu hỏi cần đặt ra -Máy tính đặc biệt giỏi trong việc khám phá các mẫu ẩn trong dữ liệu. Tiện ích này rất hữu ích cho các nhà nghiên cứu có câu hỏi về một lĩnh vực nhất định mà không thể dễ dàng trả lời bằng cách tạo một hệ thống dựa trên quy tắc điều kiện. Ví dụ, trong một nhiệm vụ tính toán bảo hiểm, một nhà khoa học dữ liệu có thể xây dựng các quy tắc thủ công về tỷ lệ tử vong của người hút thuốc so với người không hút thuốc. +Máy tính đặc biệt giỏi trong việc phát hiện các mẫu ẩn trong dữ liệu. Khả năng này rất hữu ích cho các nhà nghiên cứu có câu hỏi về một lĩnh vực nhất định mà không thể dễ dàng trả lời bằng cách tạo ra một công cụ quy tắc dựa trên điều kiện. Ví dụ, với một nhiệm vụ thống kê bảo hiểm, một nhà khoa học dữ liệu có thể xây dựng các quy tắc thủ công xoay quanh tỷ lệ tử vong của người hút thuốc so với người không hút thuốc. -Tuy nhiên, khi nhiều biến khác được đưa vào phương trình, một mô hình ML có thể chứng minh hiệu quả hơn trong việc dự đoán tỷ lệ tử vong trong tương lai dựa trên lịch sử sức khỏe trước đây. Một ví dụ vui vẻ hơn có thể là dự đoán thời tiết cho tháng Tư tại một địa điểm cụ thể dựa trên dữ liệu bao gồm vĩ độ, kinh độ, biến đổi khí hậu, khoảng cách đến đại dương, các mẫu luồng khí, và nhiều yếu tố khác. +Tuy nhiên, khi nhiều biến số khác được đưa vào phép tính, một mô hình ML có thể chứng minh hiệu quả hơn trong việc dự đoán tỷ lệ tử vong tương lai dựa trên lịch sử sức khỏe trong quá khứ. Một ví dụ vui hơn có thể là đưa ra dự đoán thời tiết cho tháng Tư tại một vị trí nhất định dựa trên dữ liệu gồm vĩ độ, kinh độ, biến đổi khí hậu, vị trí gần biển, các mẫu của dòng jet stream, và nhiều yếu tố khác. -✅ Bộ [slide này](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) về các mô hình thời tiết cung cấp một góc nhìn lịch sử về việc sử dụng ML trong phân tích thời tiết. +✅ Bộ slide này [slide deck](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) về mô hình thời tiết cung cấp một góc nhìn lịch sử về việc sử dụng ML trong phân tích thời tiết. -## Nhiệm vụ trước khi xây dựng +## Các nhiệm vụ trước khi xây dựng -Trước khi bắt đầu xây dựng mô hình của bạn, có một số nhiệm vụ bạn cần hoàn thành. Để kiểm tra câu hỏi của bạn và hình thành giả thuyết dựa trên dự đoán của mô hình, bạn cần xác định và cấu hình một số yếu tố. +Trước khi bắt đầu xây dựng mô hình, có một số nhiệm vụ bạn cần hoàn thành. Để kiểm tra câu hỏi và hình thành giả thuyết dựa trên dự đoán của mô hình, bạn cần xác định và cấu hình một số yếu tố. ### Dữ liệu -Để có thể trả lời câu hỏi của bạn với bất kỳ mức độ chắc chắn nào, bạn cần một lượng dữ liệu tốt và đúng loại. Có hai điều bạn cần làm tại thời điểm này: +Để có thể trả lời câu hỏi của bạn với bất kỳ độ chắc chắn nào, bạn cần một lượng dữ liệu đủ tốt và đúng loại. Có hai việc bạn cần làm ở giai đoạn này: -- **Thu thập dữ liệu**. Ghi nhớ bài học trước về tính công bằng trong phân tích dữ liệu, hãy thu thập dữ liệu của bạn một cách cẩn thận. Hãy nhận thức về nguồn gốc của dữ liệu này, bất kỳ thiên kiến nào mà nó có thể mang theo, và ghi lại nguồn gốc của nó. -- **Chuẩn bị dữ liệu**. Có một số bước trong quy trình chuẩn bị dữ liệu. Bạn có thể cần tổng hợp dữ liệu và chuẩn hóa nó nếu nó đến từ các nguồn khác nhau. Bạn có thể cải thiện chất lượng và số lượng dữ liệu thông qua các phương pháp khác nhau như chuyển đổi chuỗi thành số (như chúng ta làm trong [Phân cụm](../../5-Clustering/1-Visualize/README.md)). Bạn cũng có thể tạo dữ liệu mới dựa trên dữ liệu gốc (như chúng ta làm trong [Phân loại](../../4-Classification/1-Introduction/README.md)). Bạn có thể làm sạch và chỉnh sửa dữ liệu (như chúng ta sẽ làm trước bài học [Ứng dụng Web](../../3-Web-App/README.md)). Cuối cùng, bạn cũng có thể cần ngẫu nhiên hóa và xáo trộn dữ liệu, tùy thuộc vào kỹ thuật huấn luyện của bạn. +- **Thu thập dữ liệu**. Ghi nhớ bài học trước về sự công bằng trong phân tích dữ liệu, hãy thu thập dữ liệu cẩn thận. Hiểu rõ nguồn gốc của dữ liệu này, bất kỳ thành kiến tiềm ẩn nào có thể tồn tại, và ghi chép nguồn gốc của nó. +- **Chuẩn bị dữ liệu**. Có một số bước trong quy trình chuẩn bị dữ liệu. Bạn có thể cần tổng hợp dữ liệu và chuẩn hóa nếu nó đến từ nhiều nguồn khác nhau. Bạn có thể cải thiện chất lượng và số lượng dữ liệu thông qua các phương pháp khác nhau như chuyển đổi chuỗi thành số (như chúng ta làm trong [Clustering](../../5-Clustering/1-Visualize/README.md)). Bạn cũng có thể tạo ra dữ liệu mới, dựa trên dữ liệu gốc (như chúng ta làm trong [Classification](../../4-Classification/1-Introduction/README.md)). Bạn có thể làm sạch và chỉnh sửa dữ liệu (như chúng ta sẽ làm trước bài học [Web App](../../3-Web-App/README.md)). Cuối cùng, bạn có thể cần làm ngẫu nhiên và trộn dữ liệu, tùy thuộc vào kỹ thuật huấn luyện của bạn. -✅ Sau khi thu thập và xử lý dữ liệu của bạn, hãy dành một chút thời gian để xem liệu hình dạng của nó có cho phép bạn giải quyết câu hỏi dự định hay không. Có thể dữ liệu sẽ không hoạt động tốt trong nhiệm vụ của bạn, như chúng ta phát hiện trong các bài học [Phân cụm](../../5-Clustering/1-Visualize/README.md)! +✅ Sau khi thu thập và xử lý dữ liệu, hãy dành chút thời gian để xem liệu hình dạng dữ liệu có cho phép bạn giải quyết câu hỏi dự định hay không. Có thể dữ liệu sẽ không hoạt động tốt trong nhiệm vụ của bạn, như chúng ta phát hiện trong các bài học [Clustering](../../5-Clustering/1-Visualize/README.md)! -### Đặc trưng và Mục tiêu +### Thuộc tính và Mục tiêu -Một [đặc trưng](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) là một thuộc tính có thể đo lường của dữ liệu. Trong nhiều tập dữ liệu, nó được biểu diễn dưới dạng tiêu đề cột như 'ngày', 'kích thước' hoặc 'màu sắc'. Biến đặc trưng của bạn, thường được biểu diễn là `X` trong mã, đại diện cho biến đầu vào sẽ được sử dụng để huấn luyện mô hình. +Một [feature](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) là một thuộc tính có thể đo lường của dữ liệu. Trong nhiều bộ dữ liệu, nó được biểu thị dưới dạng tiêu đề cột như 'date' 'size' hoặc 'color'. Biến đặc trưng của bạn, thường được biểu diễn là `X` trong mã, biểu thị biến đầu vào sẽ được dùng để huấn luyện mô hình. -Mục tiêu là điều bạn đang cố gắng dự đoán. Mục tiêu, thường được biểu diễn là `y` trong mã, đại diện cho câu trả lời cho câu hỏi bạn đang cố gắng hỏi từ dữ liệu: vào tháng 12, **màu sắc** của bí ngô nào sẽ rẻ nhất? ở San Francisco, khu vực nào sẽ có **giá** bất động sản tốt nhất? Đôi khi mục tiêu cũng được gọi là thuộc tính nhãn. +Một mục tiêu là một thứ mà bạn đang cố gắng dự đoán. Mục tiêu, thường biểu diễn là `y` trong mã, biểu thị câu trả lời cho câu hỏi bạn đặt ra với dữ liệu của mình: vào tháng Mười Hai, quả bí ngô có **màu sắc** nào sẽ rẻ nhất? ở San Francisco, khu vực nào sẽ có **giá** bất động sản tốt nhất? Đôi khi mục tiêu cũng được gọi là thuộc tính nhãn. ### Chọn biến đặc trưng của bạn -🎓 **Lựa chọn đặc trưng và Trích xuất đặc trưng** Làm thế nào để bạn biết biến nào cần chọn khi xây dựng mô hình? Bạn có thể sẽ trải qua một quy trình lựa chọn đặc trưng hoặc trích xuất đặc trưng để chọn các biến phù hợp nhất cho mô hình hiệu quả nhất. Tuy nhiên, chúng không giống nhau: "Trích xuất đặc trưng tạo ra các đặc trưng mới từ các hàm của các đặc trưng gốc, trong khi lựa chọn đặc trưng trả về một tập hợp con của các đặc trưng." ([nguồn](https://wikipedia.org/wiki/Feature_selection)) +🎓 **Chọn lựa thuộc tính và Trích xuất thuộc tính** Làm thế nào để biết biến nào nên chọn khi xây dựng mô hình? Bạn có thể sẽ trải qua một quy trình chọn thuộc tính hoặc trích xuất thuộc tính để chọn các biến đúng cho mô hình hiệu quả nhất. Tuy nhiên, chúng không giống nhau: "Trích xuất thuộc tính tạo ra các thuộc tính mới từ các hàm của thuộc tính gốc, trong khi chọn thuộc tính trả về một tập con các thuộc tính." ([nguồn](https://wikipedia.org/wiki/Feature_selection)) ### Trực quan hóa dữ liệu của bạn -Một khía cạnh quan trọng trong bộ công cụ của nhà khoa học dữ liệu là khả năng trực quan hóa dữ liệu bằng cách sử dụng một số thư viện xuất sắc như Seaborn hoặc MatPlotLib. Việc biểu diễn dữ liệu của bạn một cách trực quan có thể cho phép bạn khám phá các mối tương quan ẩn mà bạn có thể tận dụng. Các biểu đồ trực quan của bạn cũng có thể giúp bạn phát hiện thiên kiến hoặc dữ liệu không cân bằng (như chúng ta phát hiện trong [Phân loại](../../4-Classification/2-Classifiers-1/README.md)). +Một khía cạnh quan trọng trong bộ công cụ của nhà khoa học dữ liệu là khả năng trực quan hóa dữ liệu bằng nhiều thư viện tuyệt vời như Seaborn hoặc MatPlotLib. Biểu diễn dữ liệu của bạn một cách trực quan có thể giúp bạn phát hiện các mối tương quan ẩn mà bạn có thể tận dụng. Các trực quan hóa của bạn cũng có thể giúp bạn phát hiện thành kiến hoặc dữ liệu không cân bằng (như chúng ta khám phá trong [Classification](../../4-Classification/2-Classifiers-1/README.md)). -### Chia tập dữ liệu của bạn +### Chia bộ dữ liệu -Trước khi huấn luyện, bạn cần chia tập dữ liệu của mình thành hai hoặc nhiều phần có kích thước không bằng nhau nhưng vẫn đại diện tốt cho dữ liệu. +Trước khi huấn luyện, bạn cần chia bộ dữ liệu thành hai hoặc nhiều phần có kích thước không đều nhưng vẫn đại diện tốt cho dữ liệu. -- **Huấn luyện**. Phần này của tập dữ liệu được sử dụng để huấn luyện mô hình của bạn. Tập này chiếm phần lớn của tập dữ liệu gốc. -- **Kiểm tra**. Tập dữ liệu kiểm tra là một nhóm dữ liệu độc lập, thường được thu thập từ dữ liệu gốc, mà bạn sử dụng để xác nhận hiệu suất của mô hình đã xây dựng. -- **Xác thực**. Tập xác thực là một nhóm nhỏ các ví dụ độc lập mà bạn sử dụng để điều chỉnh các siêu tham số hoặc kiến trúc của mô hình nhằm cải thiện mô hình. Tùy thuộc vào kích thước dữ liệu của bạn và câu hỏi bạn đang hỏi, bạn có thể không cần xây dựng tập thứ ba này (như chúng ta lưu ý trong [Dự báo chuỗi thời gian](../../7-TimeSeries/1-Introduction/README.md)). +- **Huấn luyện**. Phần này của bộ dữ liệu được dùng để phù hợp với mô hình, huấn luyện nó. Phần này chiếm đa số trong bộ dữ liệu gốc. +- **Kiểm tra**. Một bộ dữ liệu kiểm tra là một nhóm dữ liệu độc lập, thường lấy từ dữ liệu gốc, mà bạn dùng để xác nhận hiệu suất của mô hình đã xây dựng. +- **Xác thực**. Bộ dữ liệu xác thực là một nhóm mẫu độc lập nhỏ hơn mà bạn dùng để điều chỉnh các siêu tham số, hoặc kiến trúc của mô hình, nhằm cải thiện mô hình. Tùy thuộc vào kích thước dữ liệu và câu hỏi bạn đang đặt ra, bạn có thể không cần xây dựng bộ thứ ba này (như chúng ta lưu ý trong [Dự báo chuỗi thời gian](../../7-TimeSeries/1-Introduction/README.md)). ## Xây dựng mô hình -Sử dụng dữ liệu huấn luyện của bạn, mục tiêu của bạn là xây dựng một mô hình, hoặc một biểu diễn thống kê của dữ liệu, bằng cách sử dụng các thuật toán khác nhau để **huấn luyện** nó. Việc huấn luyện mô hình cho phép nó tiếp xúc với dữ liệu và đưa ra các giả định về các mẫu mà nó phát hiện, xác nhận, và chấp nhận hoặc từ chối. +Sử dụng dữ liệu huấn luyện, mục tiêu của bạn là xây dựng một mô hình, hoặc một biểu diễn thống kê của dữ liệu, sử dụng các thuật toán khác nhau để **huấn luyện** nó. Việc huấn luyện mô hình đưa nó vào tiếp xúc với dữ liệu và cho phép nó đưa ra giả định về các mẫu được nhận diện, xác nhận, và chấp nhận hoặc từ chối. -### Quyết định phương pháp huấn luyện +### Chọn phương pháp huấn luyện -Tùy thuộc vào câu hỏi của bạn và bản chất của dữ liệu, bạn sẽ chọn một phương pháp để huấn luyện nó. Khi xem qua [tài liệu của Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - mà chúng ta sử dụng trong khóa học này - bạn có thể khám phá nhiều cách để huấn luyện mô hình. Tùy thuộc vào kinh nghiệm của bạn, bạn có thể phải thử nhiều phương pháp khác nhau để xây dựng mô hình tốt nhất. Bạn có khả năng trải qua một quy trình mà các nhà khoa học dữ liệu đánh giá hiệu suất của mô hình bằng cách cung cấp cho nó dữ liệu chưa từng thấy, kiểm tra độ chính xác, thiên kiến, và các vấn đề làm giảm chất lượng khác, và chọn phương pháp huấn luyện phù hợp nhất cho nhiệm vụ hiện tại. +Tùy vào câu hỏi và tính chất của dữ liệu, bạn sẽ chọn một phương pháp để huấn luyện. Khi xem qua [tài liệu của Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - thư viện chúng ta sử dụng trong khóa học này - bạn có thể khám phá nhiều cách huấn luyện mô hình. Tùy vào kinh nghiệm, bạn có thể phải thử nhiều phương pháp khác nhau để xây dựng mô hình tốt nhất. Bạn có thể sẽ trải qua một quy trình mà các nhà khoa học dữ liệu đánh giá hiệu suất của mô hình bằng cách cho mô hình thấy dữ liệu chưa từng nhìn thấy, kiểm tra độ chính xác, thành kiến, và các vấn đề làm giảm chất lượng khác, rồi chọn phương pháp huấn luyện phù hợp nhất với nhiệm vụ. ### Huấn luyện mô hình -Với dữ liệu huấn luyện của bạn, bạn đã sẵn sàng 'fit' nó để tạo ra một mô hình. Bạn sẽ nhận thấy rằng trong nhiều thư viện ML, bạn sẽ thấy mã 'model.fit' - đây là lúc bạn gửi biến đặc trưng của mình dưới dạng một mảng giá trị (thường là 'X') và một biến mục tiêu (thường là 'y'). +Với dữ liệu huấn luyện, bạn sẵn sàng 'fit' nó để tạo ra mô hình. Bạn sẽ nhận thấy rằng trong nhiều thư viện ML thường có dòng mã 'model.fit' - đó chính là lúc bạn gửi vào biến đặc trưng dưới dạng mảng các giá trị (thường là 'X') và biến mục tiêu (thường là 'y'). ### Đánh giá mô hình -Khi quá trình huấn luyện hoàn tất (nó có thể mất nhiều lần lặp lại, hoặc 'epochs', để huấn luyện một mô hình lớn), bạn sẽ có thể đánh giá chất lượng của mô hình bằng cách sử dụng dữ liệu kiểm tra để đo lường hiệu suất của nó. Dữ liệu này là một tập hợp con của dữ liệu gốc mà mô hình chưa từng phân tích trước đó. Bạn có thể in ra một bảng các chỉ số về chất lượng của mô hình. +Khi quy trình huấn luyện hoàn tất (có thể mất nhiều lần lặp, hoặc 'epoch', để huấn luyện một mô hình lớn), bạn có thể đánh giá chất lượng mô hình bằng việc sử dụng dữ liệu kiểm tra đo hiệu suất của nó. Dữ liệu này là một phần nhỏ của dữ liệu gốc mà mô hình chưa từng phân tích trước đây. Bạn có thể in ra một bảng các chỉ số về chất lượng mô hình. -🎓 **Fit mô hình** +🎓 **Fitting mô hình** -Trong bối cảnh học máy, fit mô hình đề cập đến độ chính xác của hàm cơ bản của mô hình khi nó cố gắng phân tích dữ liệu mà nó không quen thuộc. +Trong ngữ cảnh máy học, fitting mô hình đề cập đến độ chính xác của hàm số cơ sở của mô hình khi nó cố gắng phân tích dữ liệu mà nó chưa quen thuộc. -🎓 **Underfitting** và **overfitting** là các vấn đề phổ biến làm giảm chất lượng của mô hình, khi mô hình fit không đủ tốt hoặc quá tốt. Điều này khiến mô hình đưa ra dự đoán quá sát hoặc quá lỏng lẻo với dữ liệu huấn luyện của nó. Một mô hình overfit dự đoán dữ liệu huấn luyện quá tốt vì nó đã học quá kỹ các chi tiết và nhiễu của dữ liệu. Một mô hình underfit không chính xác vì nó không thể phân tích chính xác dữ liệu huấn luyện của nó hoặc dữ liệu mà nó chưa 'thấy'. +🎓 **Underfitting** và **overfitting** là những vấn đề phổ biến làm giảm chất lượng mô hình, khi mô hình fit không đủ tốt hoặc quá tốt. Điều này khiến mô hình đưa ra dự đoán quá sát hoặc quá lỏng với dữ liệu huấn luyện. Mô hình overfit dự đoán dữ liệu huấn luyện quá tốt vì nó đã học quá kỹ các chi tiết và nhiễu của dữ liệu. Mô hình underfit không chính xác vì nó không thể phân tích chính xác dữ liệu huấn luyện hoặc dữ liệu chưa từng thấy. -![mô hình overfitting](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png) +![overfitting model](../../../../translated_images/vi/overfitting.1c132d92bfd93cb6.webp) > Đồ họa thông tin bởi [Jen Looper](https://twitter.com/jenlooper) ## Điều chỉnh tham số -Khi quá trình huấn luyện ban đầu hoàn tất, hãy quan sát chất lượng của mô hình và cân nhắc cải thiện nó bằng cách điều chỉnh các 'siêu tham số' của nó. Đọc thêm về quy trình này [trong tài liệu](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). +Khi huấn luyện ban đầu hoàn tất, quan sát chất lượng mô hình và cân nhắc cải thiện nó bằng cách điều chỉnh các 'siêu tham số' của nó. Đọc thêm về quy trình này [trong tài liệu](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). ## Dự đoán -Đây là thời điểm bạn có thể sử dụng dữ liệu hoàn toàn mới để kiểm tra độ chính xác của mô hình. Trong một môi trường ML 'ứng dụng', nơi bạn đang xây dựng các tài sản web để sử dụng mô hình trong sản xuất, quy trình này có thể bao gồm việc thu thập đầu vào từ người dùng (ví dụ, một lần nhấn nút) để đặt một biến và gửi nó đến mô hình để suy luận hoặc đánh giá. +Đây là thời điểm bạn có thể sử dụng dữ liệu hoàn toàn mới để kiểm tra độ chính xác của mô hình. Trong bối cảnh ML 'ứng dụng', nơi bạn xây dựng các tài nguyên web để sử dụng mô hình trong sản xuất, quy trình này có thể bao gồm việc thu thập dữ liệu đầu vào từ người dùng (ví dụ nhấn nút) để đặt một biến và gửi nó tới mô hình để suy luận hoặc đánh giá. -Trong các bài học này, bạn sẽ khám phá cách sử dụng các bước này để chuẩn bị, xây dựng, kiểm tra, đánh giá, và dự đoán - tất cả các thao tác của một nhà khoa học dữ liệu và hơn thế nữa, khi bạn tiến bộ trong hành trình trở thành một kỹ sư ML 'full stack'. +Trong các bài học này, bạn sẽ khám phá cách sử dụng các bước này để chuẩn bị, xây dựng, kiểm tra, đánh giá, và dự đoán - tất cả những thao tác của một nhà khoa học dữ liệu và hơn thế nữa, khi bạn tiến bộ trên hành trình trở thành kỹ sư ML 'full stack'. --- ## 🚀Thử thách -Vẽ một biểu đồ luồng phản ánh các bước của một nhà thực hành ML. Bạn thấy mình đang ở đâu trong quy trình này? Bạn dự đoán sẽ gặp khó khăn ở đâu? Điều gì có vẻ dễ dàng đối với bạn? +Vẽ một sơ đồ quy trình phản ánh các bước của một nhà thực hành ML. Bạn đang thấy mình ở bước nào trong quy trình? Bạn dự đoán sẽ gặp khó khăn ở đâu? Điều gì có vẻ dễ với bạn? -## [Câu hỏi sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) +## [Bài kiểm tra sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) ## Ôn tập & Tự học -Tìm kiếm trực tuyến các cuộc phỏng vấn với các nhà khoa học dữ liệu thảo luận về công việc hàng ngày của họ. Đây là [một cuộc phỏng vấn](https://www.youtube.com/watch?v=Z3IjgbbCEfs). +Tìm kiếm trên mạng các phỏng vấn với các nhà khoa học dữ liệu nói về công việc hàng ngày của họ. Đây là [một phỏng vấn](https://www.youtube.com/watch?v=Z3IjgbbCEfs). ## Bài tập @@ -119,5 +119,7 @@ Tìm kiếm trực tuyến các cuộc phỏng vấn với các nhà khoa học --- -**Tuyên bố miễn trừ trách nhiệm**: -Tài liệu này đã được dịch bằng dịch vụ dịch thuật AI [Co-op Translator](https://github.com/Azure/co-op-translator). Mặc dù chúng tôi cố gắng đảm bảo độ chính xác, xin lưu ý rằng các bản dịch tự động có thể chứa lỗi hoặc không chính xác. Tài liệu gốc bằng ngôn ngữ bản địa nên được coi là nguồn thông tin chính thức. Đối với các thông tin quan trọng, khuyến nghị sử dụng dịch vụ dịch thuật chuyên nghiệp bởi con người. Chúng tôi không chịu trách nhiệm cho bất kỳ sự hiểu lầm hoặc diễn giải sai nào phát sinh từ việc sử dụng bản dịch này. \ No newline at end of file + +**Tuyên bố từ chối trách nhiệm**: +Tài liệu này đã được dịch bằng dịch vụ dịch thuật AI [Co-op Translator](https://github.com/Azure/co-op-translator). Mặc dù chúng tôi cố gắng đảm bảo độ chính xác, xin lưu ý rằng bản dịch tự động có thể chứa lỗi hoặc sai sót. Tài liệu gốc bằng ngôn ngữ mẹ đẻ của nó nên được coi là nguồn chính xác và có thẩm quyền. Đối với các thông tin quan trọng, nên sử dụng dịch vụ dịch thuật chuyên nghiệp của con người. Chúng tôi không chịu trách nhiệm về bất kỳ hiểu lầm hoặc diễn giải sai nào phát sinh từ việc sử dụng bản dịch này. + \ No newline at end of file diff --git a/translations/vi/2-Regression/3-Linear/README.md b/translations/vi/2-Regression/3-Linear/README.md index f496716c3..a1280647c 100644 --- a/translations/vi/2-Regression/3-Linear/README.md +++ b/translations/vi/2-Regression/3-Linear/README.md @@ -1,136 +1,136 @@ -# Xây dựng mô hình hồi quy sử dụng Scikit-learn: hồi quy theo bốn phương pháp +# Xây dựng mô hình hồi quy sử dụng Scikit-learn: hồi quy theo bốn cách ## Ghi chú cho người mới bắt đầu Hồi quy tuyến tính được sử dụng khi chúng ta muốn dự đoán một **giá trị số** (ví dụ, giá nhà, nhiệt độ hoặc doanh số). -Nó hoạt động bằng cách tìm một đường thẳng đại diện tốt nhất cho mối quan hệ giữa các đặc trưng đầu vào và đầu ra. +Nó hoạt động bằng cách tìm ra đường thẳng đại diện tốt nhất cho mối quan hệ giữa các đặc trưng đầu vào và đầu ra. Trong bài học này, chúng ta tập trung vào việc hiểu khái niệm trước khi khám phá các kỹ thuật hồi quy nâng cao hơn. -![Linear vs polynomial regression infographic](../../../../translated_images/vi/linear-polynomial.5523c7cb6576ccab.webp) -> Infographic bởi [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [Bài kiểm tra trước bài giảng](https://ff-quizzes.netlify.app/en/ml/) +![Biểu đồ thông tin hồi quy tuyến tính và đa thức](../../../../translated_images/vi/linear-polynomial.5523c7cb6576ccab.webp) +> Biểu đồ thông tin bởi [Dasani Madipalli](https://twitter.com/dasani_decoded) +## [Trắc nghiệm trước bài giảng](https://ff-quizzes.netlify.app/en/ml/) -> ### [Bài học này cũng có sẵn bằng R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) -### Giới thiệu +> ### [Bài học này có sẵn bằng R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) +### Giới thiệu -Từ trước đến nay bạn đã khám phá khái niệm hồi quy với dữ liệu mẫu thu thập từ bộ dữ liệu giá bí ngô mà chúng ta sẽ sử dụng xuyên suốt bài học này. Bạn cũng đã hình dung dữ liệu bằng Matplotlib. +Cho đến nay bạn đã khám phá hồi quy là gì với dữ liệu mẫu thu thập từ bộ dữ liệu giá bí ngô mà chúng ta sẽ sử dụng trong suốt bài học này. Bạn cũng đã trực quan hóa nó bằng Matplotlib. -Bây giờ bạn đã sẵn sàng để đi sâu hơn vào hồi quy trong ML. Trong khi việc trực quan hóa dữ liệu giúp bạn hiểu được dữ liệu, sức mạnh thực sự của Machine Learning đến từ _việc huấn luyện mô hình_. Mô hình được huấn luyện trên dữ liệu lịch sử để tự động nắm bắt các phụ thuộc trong dữ liệu, cho phép bạn dự đoán kết quả cho dữ liệu mới mà mô hình chưa từng thấy trước đó. +Bây giờ bạn đã sẵn sàng để đi sâu hơn vào hồi quy trong ML. Trong khi trực quan hóa giúp bạn hiểu dữ liệu, sức mạnh thực sự của Machine Learning đến từ việc _huấn luyện mô hình_. Các mô hình được huấn luyện trên dữ liệu lịch sử để tự động nắm bắt các phụ thuộc dữ liệu, và cho phép bạn dự đoán kết quả cho dữ liệu mới mà mô hình chưa từng thấy trước đó. -Trong bài học này, bạn sẽ học thêm về hai loại hồi quy: _hồi quy tuyến tính cơ bản_ và _hồi quy đa thức_, cùng với một số toán học nền tảng của các kỹ thuật này. Những mô hình đó sẽ giúp chúng ta dự đoán giá bí ngô tùy thuộc vào các dữ liệu đầu vào khác nhau. +Trong bài học này, bạn sẽ tìm hiểu thêm về hai loại hồi quy: _hồi quy tuyến tính cơ bản_ và _hồi quy đa thức_, cùng với một số toán học nền tảng của các kỹ thuật này. Những mô hình đó sẽ cho phép chúng ta dự đoán giá bí ngô tùy theo dữ liệu đầu vào khác nhau. -[![ML for beginners - Understanding Linear Regression](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML for beginners - Understanding Linear Regression") +[![ML cho người mới bắt đầu - Hiểu hồi quy tuyến tính](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML cho người mới bắt đầu - Hiểu hồi quy tuyến tính") -> 🎥 Nhấn vào hình trên để xem video tóm tắt ngắn về hồi quy tuyến tính. +> 🎥 Click vào hình bên trên để xem video tóm tắt ngắn về hồi quy tuyến tính. -> Xuyên suốt chương trình học này, chúng tôi giả định kiến thức toán học tối thiểu, và cố gắng làm cho nó dễ tiếp cận cho học viên từ các lĩnh vực khác, vì vậy hãy chú ý đến các ghi chú, 🧮 cảnh báo, sơ đồ và các công cụ học tập khác để hỗ trợ tiếp thu. +> Trong suốt chương trình học này, chúng ta giả định kiến thức toán học tối thiểu, và cố gắng làm cho nó dễ tiếp cận cho sinh viên đến từ các lĩnh vực khác, vì vậy hãy chú ý đến các ghi chú, 🧮 chú thích, sơ đồ và các công cụ học tập khác nhằm hỗ trợ hiểu bài. -### Kiến thức nền tảng +### Điều kiện tiên quyết -Bạn nên đã quen với cấu trúc dữ liệu bí ngô mà chúng ta đang xem xét. Bạn có thể tìm thấy nó được tải sẵn và đã được làm sạch trong tệp _notebook.ipynb_ của bài học này. Trong tệp, giá bí ngô được hiển thị theo mỗi bushel trong một dataframe mới. Đảm bảo bạn có thể chạy các notebook này trong môi trường kernel trên Visual Studio Code. +Bạn nên quen với cấu trúc dữ liệu bí ngô mà chúng ta đang xem xét. Bạn có thể tìm thấy nó được tải sẵn và làm sạch sẵn trong file _notebook.ipynb_ của bài học này. Trong file, giá bí ngô được hiển thị trên mỗi bushel trong một khung dữ liệu mới. Hãy chắc chắn bạn có thể chạy các notebook này trong các kernel của Visual Studio Code. ### Chuẩn bị -Như một lời nhắc, bạn đang tải dữ liệu này để đặt câu hỏi với nó. +Như lời nhắc nhở, bạn đang tải dữ liệu này để có thể đặt câu hỏi cho nó. - Khi nào là thời điểm tốt nhất để mua bí ngô? -- Giá của một thùng bí ngô tí hon có thể kỳ vọng là bao nhiêu? -- Tôi nên mua chúng trong giỏ nửa bushel hay theo hộp 1 1/9 bushel? -Hãy tiếp tục khai thác dữ liệu này. +- Tôi có thể mong đợi giá bao nhiêu cho một thùng bí ngô mini? +- Tôi có nên mua chúng trong giỏ nửa bushel hay hộp 1 1/9 bushel? +Hãy tiếp tục khám phá dữ liệu này. -Trong bài học trước, bạn đã tạo một Pandas dataframe và điền dữ liệu từ bộ dữ liệu gốc, chuẩn hóa giá theo bushel. Tuy nhiên, bằng cách đó bạn chỉ thu thập được khoảng 400 điểm dữ liệu và chỉ cho các tháng mùa thu. +Trong bài học trước, bạn đã tạo một khung dữ liệu Pandas và điền dữ liệu với một phần của bộ dữ liệu gốc, chuẩn hóa giá theo bushel. Tuy nhiên, bằng cách đó, bạn chỉ lấy được khoảng 400 điểm dữ liệu và chỉ trong các tháng mùa thu. -Hãy xem dữ liệu được tải sẵn trong notebook đi kèm bài học này. Dữ liệu đã được tải sẵn và một biểu đồ điểm ban đầu đã được vẽ để hiển thị dữ liệu theo tháng. Có lẽ chúng ta có thể thu được nhiều chi tiết hơn về bản chất dữ liệu bằng cách làm sạch thêm. +Hãy xem dữ liệu được tải sẵn trong notebook kèm theo bài học này. Dữ liệu được tải sẵn và biểu đồ phân tán ban đầu được vẽ để hiển thị dữ liệu theo tháng. Có thể chúng ta có thể có thêm một chút chi tiết về tính chất của dữ liệu bằng cách làm sạch nó hơn nữa. ## Đường hồi quy tuyến tính -Như bạn đã học trong Bài 1, mục tiêu của bài tập hồi quy tuyến tính là có thể vẽ một đường để: +Như bạn đã học trong Bài học 1, mục tiêu của bài tập hồi quy tuyến tính là có thể vẽ một đường để: -- **Hiển thị quan hệ biến số**. Thể hiện mối quan hệ giữa các biến -- **Dự đoán**. Dự đoán chính xác vị trí mà một điểm dữ liệu mới rơi vào tương quan với đường đó. +- **Hiển thị mối quan hệ biến số**. Hiển thị mối quan hệ giữa các biến. +- **Dự đoán**. Dự đoán chính xác vị trí mà một điểm dữ liệu mới sẽ nằm trên đường đó. -Dòng thường được sử dụng trong **Hồi quy bình phương tối thiểu**. Thuật ngữ "Bình phương tối thiểu" đề cập đến quá trình giảm thiểu tổng sai số trong mô hình. Với mỗi điểm dữ liệu, ta đo khoảng cách thẳng đứng (gọi là phần dư) giữa điểm thực tế và đường hồi quy của chúng ta. +Thông thường, **Hồi quy bình phương tối thiểu (Least-Squares Regression)** được dùng để vẽ loại đường này. Thuật ngữ "Bình phương tối thiểu" đề cập đến quá trình tối thiểu hóa tổng sai số trong mô hình của chúng ta. Với mỗi điểm dữ liệu, ta đo khoảng cách dọc (gọi là độ dư) giữa điểm thực tế và đường hồi quy của chúng ta. -Chúng ta lấy bình phương các khoảng cách này vì hai lý do chính: +Chúng ta bình phương các khoảng cách này vì hai lý do chính: -1. **Cường độ hơn hướng:** Chúng ta muốn xem lỗi -5 tương đương với lỗi +5. Việc bình phương làm tất cả giá trị thành số dương. +1. **Độ lớn không tính hướng:** Chúng ta muốn xử lý lỗi bằng -5 tương tự như lỗi bằng +5. Bình phương sẽ biến tất cả giá trị thành số dương. -2. **Phạt các ngoại lệ:** Việc bình phương cho trọng số cao hơn với các lỗi lớn, buộc đường hồi quy phải gần hơn với các điểm dữ liệu xa. +2. **Phạt điểm ngoại lai:** Bình phương sẽ tăng trọng số cho các lỗi lớn hơn, buộc đường phải nằm gần các điểm xa hơn hơn. -Sau đó chúng ta cộng tất cả các giá trị bình phương lại với nhau. Mục tiêu là tìm ra đường cụ thể nơi tổng này nhỏ nhất có thể — do đó tên gọi "Bình phương tối thiểu". +Sau đó, ta cộng tất cả các giá trị bình phương này lại. Mục tiêu của ta là tìm ra đường cụ thể mà tổng cuối cùng này là nhỏ nhất (giá trị nhỏ nhất có thể) — do đó mới gọi là "Bình phương tối thiểu". > **🧮 Cho tôi xem toán học** > -> Đường này, gọi là _đường khớp tốt nhất_ có thể được biểu diễn bằng [một phương trình](https://en.wikipedia.org/wiki/Simple_linear_regression): +> Đường này, gọi là _đường phù hợp nhất_ có thể được biểu diễn bằng [một phương trình](https://en.wikipedia.org/wiki/Simple_linear_regression): > > ``` > Y = a + bX > ``` > -> `X` là 'biến giải thích'. `Y` là 'biến phụ thuộc'. Độ dốc của đường là `b` và `a` là điểm giao y, tức là giá trị của `Y` khi `X = 0`. +> `X` là 'biến giải thích'. `Y` là 'biến phụ thuộc'. Độ dốc của đường là `b` và `a` là điểm cắt y, nghĩa là giá trị của `Y` khi `X = 0`. > ->![calculate the slope](../../../../translated_images/vi/slope.f3c9d5910ddbfcf9.webp) +>![tính độ dốc](../../../../translated_images/vi/slope.f3c9d5910ddbfcf9.webp) > -> Trước tiên, tính độ dốc `b`. Infographic bởi [Jen Looper](https://twitter.com/jenlooper) +> Đầu tiên, tính độ dốc `b`. Biểu đồ thông tin bởi [Jen Looper](https://twitter.com/jenlooper) > -> Nói cách khác, và liên quan đến câu hỏi ban đầu về dữ liệu bí ngô của chúng ta: "dự đoán giá bí ngô theo bushel theo tháng", `X` sẽ là giá và `Y` sẽ là tháng bán. +> Nói cách khác, và tham khảo câu hỏi gốc về dữ liệu bí ngô của chúng ta: "dự đoán giá bí ngô trên mỗi bushel theo tháng", `X` sẽ tương ứng với giá và `Y` sẽ tương ứng với tháng bán. > ->![complete the equation](../../../../translated_images/vi/calculation.a209813050a1ddb1.webp) +>![hoàn thành phương trình](../../../../translated_images/vi/calculation.a209813050a1ddb1.webp) > -> Tính giá trị Y. Nếu bạn trả khoảng $4, chắc hẳn là tháng Tư! Infographic bởi [Jen Looper](https://twitter.com/jenlooper) +> Tính giá trị Y. Nếu bạn trả khoảng 4 đô la, chắc chắn là tháng Tư! Biểu đồ thông tin bởi [Jen Looper](https://twitter.com/jenlooper) > -> Toán học tính toán đường phải biểu thị độ dốc của đường, cũng phụ thuộc vào giao điểm, tức vị trí `Y` khi `X = 0`. +> Phép toán tính đường phải biểu diễn được độ dốc của đường, cũng phụ thuộc vào điểm cắt, hoặc vị trí của `Y` khi `X = 0`. > -> Bạn có thể quan sát phương pháp tính cho những giá trị này trên trang web [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Cũng hãy ghé xem [máy tính bình phương tối thiểu này](https://www.mathsisfun.com/data/least-squares-calculator.html) để xem cách giá trị số ảnh hưởng đến đường. +> Bạn có thể xem phương pháp tính các giá trị này trên trang web [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Cũng truy cập [Máy tính bình phương tối thiểu này](https://www.mathsisfun.com/data/least-squares-calculator.html) để xem giá trị các số ảnh hưởng như thế nào đến đường. ## Tương quan -Một thuật ngữ nữa cần hiểu là **Hệ số Tương quan** giữa các biến X và Y cho trước. Bằng việc sử dụng biểu đồ phân tán, bạn có thể nhanh chóng trực quan hệ số này. Một biểu đồ với các điểm dữ liệu xếp thành một đường thẳng rõ ràng có tương quan cao, còn biểu đồ với điểm dữ liệu rải rác khắp nơi giữa X và Y có tương quan thấp. +Một thuật ngữ nữa cần hiểu là **Hệ số tương quan** giữa các biến X và Y cho trước. Sử dụng biểu đồ phân tán, bạn có thể nhanh chóng trực quan hóa hệ số này. Một biểu đồ với các điểm dữ liệu nằm rải rác theo một đường gọn gàng sẽ có tương quan cao, nhưng biểu đồ với các điểm dữ liệu phân tán khắp nơi giữa X và Y thì có tương quan thấp. -Một mô hình hồi quy tuyến tính tốt sẽ có hệ số tương quan cao (gần 1 hơn 0) sử dụng phương pháp Hồi quy bình phương tối thiểu với đường hồi quy. +Một mô hình hồi quy tuyến tính tốt sẽ có Hệ số tương quan cao (gần 1 hơn là 0) sử dụng phương pháp Hồi quy bình phương tối thiểu với một đường hồi quy. -✅ Chạy notebook đi kèm bài học và xem biểu đồ phân tán Tháng với Giá. Theo quan sát của bạn, dữ liệu liên hệ giữa Tháng và Giá trong bán bí ngô có vẻ tương quan cao hay thấp? Liệu điều này có thay đổi nếu bạn sử dụng đo lường chi tiết hơn thay vì `Month`, ví dụ *ngày trong năm* (tức số ngày kể từ đầu năm)? +✅ Chạy notebook kèm theo bài học này và nhìn biểu đồ phân tán Tháng so với Giá. Dữ liệu liên kết Tháng với Giá cho doanh số bí ngô có vẻ có tương quan cao hay thấp, theo cách bạn nhìn hình? Liệu điều đó có thay đổi nếu bạn sử dụng thước đo chi tiết hơn thay vì `Month`, ví dụ *ngày trong năm* (số ngày kể từ đầu năm)? -Trong đoạn mã dưới đây, ta giả sử đã làm sạch dữ liệu và thu được một dataframe có tên `new_pumpkins`, tương tự như sau: +Trong đoạn mã dưới đây, chúng ta giả sử đã làm sạch dữ liệu, và có một khung dữ liệu gọi là `new_pumpkins`, tương tự như sau: -ID | Tháng | NgàyTrongNăm | ChủngLoại | ThànhPhố | Gói | Giá Thấp | Giá Cao | Giá Trung Bình ----|-------|--------------|-----------|----------|--------|---------|---------|-------------- -70 | 9 | 267 | LOẠI BÁNH | BALTIMORE | hộp 1 1/9 bushel | 15.0 | 15.0 | 13.636364 -71 | 9 | 267 | LOẠI BÁNH | BALTIMORE | hộp 1 1/9 bushel | 18.0 | 18.0 | 16.363636 -72 | 10 | 274 | LOẠI BÁNH | BALTIMORE | hộp 1 1/9 bushel | 18.0 | 18.0 | 16.363636 -73 | 10 | 274 | LOẠI BÁNH | BALTIMORE | hộp 1 1/9 bushel | 17.0 | 17.0 | 15.454545 -74 | 10 | 281 | LOẠI BÁNH | BALTIMORE | hộp 1 1/9 bushel | 15.0 | 15.0 | 13.636364 +ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price +---|-------|-----------|---------|------|---------|-----------|------------|------- +70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364 +71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636 +72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636 +73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545 +74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364 -> Mã lệnh làm sạch dữ liệu có trong [`notebook.ipynb`](notebook.ipynb). Chúng ta đã tiến hành các bước làm sạch giống như bài học trước, và đã tính toán cột `DayOfYear` theo biểu thức sau: +> Mã làm sạch dữ liệu có sẵn trong [`notebook.ipynb`](notebook.ipynb). Chúng tôi đã thực hiện các bước làm sạch giống như bài học trước, và đã tính cột `DayOfYear` bằng biểu thức sau: ```python day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) ``` -Bây giờ bạn đã hiểu toán học nền tảng của hồi quy tuyến tính, hãy tạo mô hình Hồi quy để xem liệu chúng ta có thể dự đoán gói bí ngô nào sẽ có giá tốt nhất không. Người mua bí ngô cho khu vực trang trí lễ hội có thể muốn thông tin này để tối ưu hóa việc mua hàng. +Bây giờ bạn đã hiểu toán học đằng sau hồi quy tuyến tính, hãy tạo một mô hình Hồi quy để xem liệu chúng ta có thể dự đoán gói bí ngô nào sẽ có giá tốt nhất hay không. Người mua bí ngô để trang trí cho dịp lễ có thể muốn biết điều này để tối ưu hóa việc mua các gói bí ngô cho khu vực trang trí. -## Tìm kiếm tương quan +## Tìm kiếm Tương quan -[![ML for beginners - Looking for Correlation: The Key to Linear Regression](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML for beginners - Looking for Correlation: The Key to Linear Regression") +[![ML cho người mới bắt đầu - Tìm Tương quan: Chìa khóa của Hồi quy tuyến tính](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML cho người mới bắt đầu - Tìm Tương quan: Chìa khóa của Hồi quy tuyến tính") -> 🎥 Nhấn vào hình trên để xem video tóm tắt ngắn về tương quan. +> 🎥 Click vào hình bên trên để xem video tóm tắt ngắn về tương quan. -Từ bài học trước, bạn có thể đã thấy rằng giá trung bình cho các tháng khác nhau trông như sau: +Từ bài học trước, bạn có thể đã thấy rằng giá trung bình theo các tháng trông như sau: -Average price by month +Giá trung bình theo tháng -Điều này gợi ý rằng có thể có tương quan, và chúng ta có thể thử huấn luyện mô hình hồi quy tuyến tính để dự đoán mối quan hệ giữa `Month` và `Price`, hoặc giữa `DayOfYear` và `Price`. Dưới đây là biểu đồ phân tán thể hiện mối quan hệ sau: +Điều này gợi ý rằng nên có một mức tương quan nào đó, và chúng ta có thể thử huấn luyện mô hình hồi quy tuyến tính để dự đoán mối quan hệ giữa `Month` và `Price`, hoặc giữa `DayOfYear` và `Price`. Đây là biểu đồ phân tán cho thấy mối quan hệ sau: -Scatter plot of Price vs. Day of Year +Biểu đồ phân tán Giá theo Ngày trong năm -Hãy xem tương quan qua hàm `corr`: +Hãy xem liệu có tương quan hay không bằng hàm `corr`: ```python print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) ``` -Có vẻ hệ số tương quan khá nhỏ, -0.15 theo `Month` và -0.17 theo `DayOfYear`, nhưng rất có thể còn mối quan hệ quan trọng khác. Có vẻ như có các cụm điểm giá ứng với các chủng loại bí ngô khác nhau. Để xác nhận giả thuyết này, hãy vẽ mỗi loại bí ngô bằng màu khác nhau. Bằng cách truyền tham số `ax` vào hàm vẽ `scatter` ta có thể vẽ tất cả điểm trong cùng một biểu đồ: +Có vẻ như hệ số tương quan khá nhỏ, -0.15 đối với `Month` và -0.17 đối với `DayOfYear`, nhưng có thể tồn tại một mối quan hệ quan trọng khác. Có vẻ có các nhóm giá khác nhau tương ứng với các loại bí ngô khác nhau. Để xác nhận giả thuyết này, hãy vẽ mỗi loại bí ngô dùng màu khác nhau. Bằng cách truyền tham số `ax` vào hàm vẽ `scatter`, ta có thể vẽ tất cả các điểm trên cùng một biểu đồ: ```python ax=None @@ -140,42 +140,42 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()): ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var) ``` -Scatter plot of Price vs. Day of Year +Biểu đồ phân tán Giá theo Ngày trong năm, tô màu theo loại -Cuộc điều tra cho thấy chủng loại ảnh hưởng nhiều hơn đến giá chung so với ngày bán thực tế. Ta có thể thấy điều này qua biểu đồ cột: +Điều tra của chúng ta cho thấy loại bí ngô có ảnh hưởng nhiều hơn đến giá tổng thể so với ngày bán thực tế. Chúng ta có thể thấy điều này qua biểu đồ thanh: ```python new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') ``` -Bar graph of price vs variety +Biểu đồ thanh giá theo loại -Tạm thời chúng ta hãy tập trung chỉ vào một chủng loại bí ngô, 'loại bánh', và xem ngày bán ảnh hưởng thế nào đến giá: +Hãy tạm thời tập trung chỉ vào một loại bí ngô duy nhất, loại 'pie type', và xem ngày bán ảnh hưởng như thế nào đến giá: ```python pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] pie_pumpkins.plot.scatter('DayOfYear','Price') ``` -Scatter plot of Price vs. Day of Year +Biểu đồ phân tán Giá so với Ngày trong năm -Nếu ta tính toán tương quan giữa `Price` và `DayOfYear` bằng hàm `corr`, ta sẽ thu được khoảng `-0.27` - nghĩa là việc huấn luyện mô hình dự đoán là có lý. +Nếu bây giờ chúng ta tính hệ số tương quan giữa `Price` và `DayOfYear` bằng hàm `corr`, ta sẽ được khoảng `-0.27` - nghĩa là việc huấn luyện mô hình dự đoán là hợp lý. -> Trước khi đào tạo mô hình hồi quy tuyến tính, quan trọng là phải đảm bảo dữ liệu sạch. Hồi quy tuyến tính không làm việc tốt với các giá trị thiếu, vì vậy nên loại bỏ tất cả ô trống: +> Trước khi huấn luyện mô hình hồi quy tuyến tính, quan trọng là phải đảm bảo dữ liệu của ta sạch. Hồi quy tuyến tính không hoạt động tốt với các giá trị thiếu, do đó hợp lý khi loại bỏ tất cả các ô trống: ```python pie_pumpkins.dropna(inplace=True) pie_pumpkins.info() ``` -Một cách tiếp cận khác là điền các giá trị thiếu bằng giá trị trung bình của cột tương ứng. +Một phương pháp khác là điền các giá trị trống đó bằng giá trị trung bình của cột tương ứng. ## Hồi quy tuyến tính đơn giản -[![ML for beginners - Linear and Polynomial Regression using Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML for beginners - Linear and Polynomial Regression using Scikit-learn") +[![ML cho người mới bắt đầu - Hồi quy tuyến tính và đa thức sử dụng Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML cho người mới bắt đầu - Hồi quy tuyến tính và đa thức sử dụng Scikit-learn") -> 🎥 Nhấn vào hình trên để xem video tóm tắt ngắn về hồi quy tuyến tính và đa thức. +> 🎥 Click vào hình bên trên để xem video tóm tắt ngắn về hồi quy tuyến tính và đa thức. -Để huấn luyện mô hình Hồi quy tuyến tính, chúng ta sẽ dùng thư viện **Scikit-learn**. +Để huấn luyện mô hình Hồi quy tuyến tính, ta sẽ sử dụng thư viện **Scikit-learn**. ```python from sklearn.linear_model import LinearRegression @@ -183,31 +183,31 @@ from sklearn.metrics import mean_squared_error from sklearn.model_selection import train_test_split ``` -Đầu tiên ta tách các giá trị đầu vào (đặc trưng) và kết quả mong đợi (nhãn) ra thành các mảng numpy riêng biệt: +Chúng ta bắt đầu bằng cách tách giá trị đầu vào (đặc trưng) và đầu ra mong muốn (nhãn) thành các mảng numpy riêng biệt: ```python X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) y = pie_pumpkins['Price'] ``` -> Lưu ý chúng ta phải thực hiện `reshape` trên dữ liệu đầu vào để gói Linear Regression hiểu đúng cách. Hồi quy tuyến tính yêu cầu đầu vào là mảng 2 chiều, trong đó mỗi dòng là một vector đặc trưng. Trong trường hợp của ta, vì chỉ có một đầu vào nên cần mảng có kích thước N×1, với N là kích thước bộ dữ liệu. +> Lưu ý rằng ta phải thực hiện `reshape` đối với dữ liệu đầu vào để gói Linear Regression có thể hiểu đúng. Hồi quy tuyến tính mong đợi một mảng 2 chiều làm đầu vào, trong đó mỗi hàng tương ứng với một vector đặc trưng đầu vào. Trong trường hợp của ta, vì chỉ có một đầu vào duy nhất - ta cần một mảng với kích thước N×1, trong đó N là kích thước của bộ dữ liệu. -Sau đó, ta phải chia dữ liệu thành tập huấn luyện và tập kiểm tra để có thể kiểm tra mô hình sau khi huấn luyện: +Sau đó, ta cần chia dữ liệu thành tập huấn luyện và tập kiểm tra để có thể kiểm tra mô hình sau khi huấn luyện: ```python X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) ``` -Cuối cùng, việc huấn luyện mô hình Linear Regression thực tế chỉ mất hai dòng code. Ta định nghĩa đối tượng `LinearRegression`, và gọi phương thức `fit` để phù hợp với dữ liệu: +Cuối cùng, việc huấn luyện mô hình Hồi quy tuyến tính thực sự chỉ mất hai dòng mã. Ta định nghĩa đối tượng `LinearRegression`, và dùng phương thức `fit` để phù hợp với dữ liệu: ```python lin_reg = LinearRegression() lin_reg.fit(X_train,y_train) ``` -Đối tượng `LinearRegression` sau khi được `fit` chứa tất cả các hệ số của hồi quy, có thể truy cập thông qua thuộc tính `.coef_`. Trong trường hợp của chúng ta, chỉ có một hệ số duy nhất, khoảng `-0.017`. Điều này có nghĩa là giá cả có xu hướng giảm nhẹ theo thời gian, nhưng không nhiều, khoảng 2 cent mỗi ngày. Chúng ta cũng có thể truy cập điểm giao của hồi quy với trục Y bằng `lin_reg.intercept_` - nó sẽ khoảng `21` trong trường hợp của chúng ta, biểu thị giá vào đầu năm. +Đối tượng `LinearRegression` sau khi `fit` chứa tất cả các hệ số của hồi quy, có thể truy cập bằng thuộc tính `.coef_`. Trong trường hợp của chúng ta, chỉ có một hệ số, khoảng `-0.017`. Điều này có nghĩa là giá dường như giảm nhẹ theo thời gian, nhưng không nhiều, khoảng 2 cent mỗi ngày. Chúng ta cũng có thể truy cập điểm giao nhau của hồi quy với trục Y bằng `lin_reg.intercept_` - sẽ khoảng `21` trong trường hợp của chúng ta, cho thấy giá vào đầu năm. -Để xem mô hình của chúng ta chính xác đến mức nào, chúng ta có thể dự đoán giá trên bộ dữ liệu test, và sau đó đo xem các dự đoán có gần với giá trị mong đợi hay không. Điều này có thể được thực hiện bằng cách sử dụng chỉ số lỗi trung bình bình phương căn (RMSE), là căn bậc hai của trung bình tất cả các sai số bình phương giữa giá trị mong đợi và giá trị dự đoán. +Để xem mô hình của chúng ta chính xác đến mức nào, chúng ta có thể dự đoán giá trên bộ dữ liệu kiểm tra, sau đó đo mức độ gần giữa dự đoán và giá trị mong đợi. Việc này có thể được thực hiện bằng cách sử dụng chỉ số lỗi bình phương trung bình căn bậc hai (RMSE), là căn bậc hai của trung bình tất cả các hiệu số bình phương giữa giá trị mong đợi và dự đoán. ```python pred = lin_reg.predict(X_test) @@ -216,16 +216,16 @@ rmse = np.sqrt(mean_squared_error(y_test,pred)) print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)') ``` -Lỗi của chúng ta có vẻ khoảng 2 điểm, tức là ~17%. Không được tốt lắm. Một chỉ số khác để đánh giá chất lượng mô hình là **hệ số xác định**, có thể lấy như sau: +Lỗi của chúng ta dường như khoảng 2 điểm, tương đương ~17%. Không quá tốt. Một chỉ số khác về chất lượng mô hình là **hệ số xác định (coefficient of determination)**, có thể lấy được như sau: ```python score = lin_reg.score(X_train,y_train) print('Model determination: ', score) ``` -Nếu giá trị là 0, nghĩa là mô hình không xem xét dữ liệu đầu vào, và hoạt động như *bộ dự đoán tuyến tính tệ nhất*, chính là giá trị trung bình của kết quả. Giá trị 1 nghĩa là chúng ta có thể dự đoán chính xác tất cả các đầu ra mong đợi. Trong trường hợp của chúng ta, hệ số khoảng 0.06, khá thấp. +Nếu giá trị là 0, có nghĩa mô hình không tính đến dữ liệu đầu vào, và hoạt động như *bộ dự đoán tuyến tính tệ nhất*, đơn giản là giá trị trung bình của kết quả. Giá trị 1 nghĩa là chúng ta có thể dự đoán hoàn hảo tất cả các đầu ra mong muốn. Trong trường hợp của chúng ta, hệ số khoảng 0.06, khá thấp. -Chúng ta cũng có thể vẽ dữ liệu test cùng với đường hồi quy để thấy rõ hơn hồi quy hoạt động như thế nào trong trường hợp của chúng ta: +Chúng ta cũng có thể vẽ dữ liệu kiểm tra cùng với đường hồi quy để thấy rõ hơn cách hồi quy hoạt động trong trường hợp này: ```python plt.scatter(X_test,y_test) @@ -234,19 +234,19 @@ plt.plot(X_test,pred) Linear regression -## Hồi quy đa thức +## Hồi Quy Đa Thức -Một loại khác của Hồi quy tuyến tính là Hồi quy đa thức. Mặc dù đôi khi có mối quan hệ tuyến tính giữa các biến - càng to thì giá càng cao - đôi khi các mối quan hệ này không thể biểu diễn bằng một mặt phẳng hoặc đường thẳng. +Một loại hồi quy tuyến tính khác là Hồi Quy Đa Thức. Trong khi đôi khi có một mối quan hệ tuyến tính giữa các biến - quả bí ngô càng to về thể tích thì giá càng cao - đôi khi những mối quan hệ này không thể biểu diễn trên một mặt phẳng hay đường thẳng. -✅ Đây là [một số ví dụ khác](https://online.stat.psu.edu/stat501/lesson/9/9.8) về dữ liệu có thể sử dụng Hồi quy đa thức +✅ Dưới đây là [một số ví dụ khác](https://online.stat.psu.edu/stat501/lesson/9/9.8) về dữ liệu có thể sử dụng Hồi Quy Đa Thức -Hãy xem lại mối quan hệ giữa Ngày và Giá. Đồ thị phân tán này có thật sự nên được phân tích bằng đường thẳng không? Không thể có sự dao động về giá sao? Trong trường hợp này, bạn có thể thử hồi quy đa thức. +Hãy xem lại mối quan hệ giữa Ngày và Giá. Biểu đồ điểm này có nhất thiết phải được phân tích bằng một đường thẳng không? Giá có thể dao động mà? Trong trường hợp này, bạn có thể thử hồi quy đa thức. -✅ Đa thức là các biểu thức toán học có thể gồm một hoặc nhiều biến và hệ số +✅ Đa thức là các biểu thức toán học có thể bao gồm một hay nhiều biến và hệ số -Hồi quy đa thức tạo đường cong để phù hợp hơn với dữ liệu phi tuyến. Trong trường hợp của chúng ta, nếu thêm biến `DayOfYear` bình phương vào dữ liệu đầu vào, chúng ta có thể khớp dữ liệu với đường cong parabol, có điểm cực tiểu ở một thời điểm trong năm. +Hồi quy đa thức tạo ra một đường cong để phù hợp với dữ liệu phi tuyến tốt hơn. Trong trường hợp của chúng ta, nếu thêm biến `DayOfYear` bình phương vào dữ liệu đầu vào, ta có thể khớp dữ liệu bằng một đường cong parabol, có điểm cực tiểu tại một thời điểm nhất định trong năm. -Scikit-learn có API [pipeline](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) hữu ích để kết hợp các bước xử lý dữ liệu lại với nhau. Một **pipeline** là chuỗi các **estimator**. Trong trường hợp này, chúng ta sẽ tạo pipeline đầu tiên thêm các đặc trưng đa thức vào mô hình, rồi sau đó huấn luyện hồi quy: +Scikit-learn có một API [pipeline](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) hữu ích để kết hợp các bước xử lý dữ liệu. Một **pipeline** là chuỗi các **estimator**. Trong trường hợp của chúng ta, sẽ tạo pipeline trước để thêm các đặc trưng đa thức vào mô hình, sau đó huấn luyện hồi quy: ```python from sklearn.preprocessing import PolynomialFeatures @@ -257,36 +257,58 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train,y_train) ``` -Sử dụng `PolynomialFeatures(2)` nghĩa là chúng ta sẽ bao gồm tất cả đa thức bậc hai từ dữ liệu đầu vào. Trong trường hợp này chỉ là `DayOfYear`2, nhưng với hai biến đầu vào X và Y, sẽ thêm X2, XY và Y2. Chúng ta cũng có thể dùng đa thức bậc cao hơn nếu muốn. +Sử dụng `PolynomialFeatures(2)` có nghĩa là chúng ta sẽ bao gồm tất cả đa thức bậc hai từ dữ liệu đầu vào. Trong trường hợp của chúng ta sẽ chỉ là `DayOfYear`2, nhưng với hai biến đầu vào X và Y, điều này sẽ thêm X2, XY và Y2. Chúng ta cũng có thể dùng đa thức bậc cao hơn nếu muốn. -Pipeline có thể dùng như đối tượng `LinearRegression` ban đầu, tức là ta có thể `fit` pipeline rồi sau đó dùng `predict` để lấy kết quả dự đoán. Dưới đây là đồ thị cho thấy dữ liệu test và đường cong xấp xỉ: +Pipeline có thể dùng giống như đối tượng `LinearRegression` gốc, tức là có thể `fit` pipeline rồi dùng `predict` để lấy kết quả dự đoán: + +```python +pred = pipeline.predict(X_test) + +rmse = np.sqrt(mean_squared_error(y_test,pred)) +print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)') + +score = pipeline.score(X_train,y_train) +print('Model determination: ', score) +``` + +Để vẽ đường cong gần đúng mượt mà, ta dùng `np.linspace` tạo dải giá trị đầu vào đồng đều, thay vì vẽ trực tiếp trên dữ liệu kiểm tra không theo thứ tự (sẽ tạo ra đường zíc zắc): + +```python +X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1) +y_range = pipeline.predict(X_range) + +plt.scatter(X_test, y_test) +plt.plot(X_range, y_range) +``` + +Đây là đồ thị hiển thị dữ liệu kiểm tra và đường cong gần đúng: Polynomial regression -Dùng Hồi quy đa thức, ta có thể có MSE hơi thấp hơn và hệ số xác định cao hơn, nhưng không đáng kể. Ta cần xem xét các đặc trưng khác! +Sử dụng Hồi Quy Đa Thức, chúng ta có thể có RMSE thấp hơn và hệ số xác định cao hơn một chút, nhưng không đáng kể. Cần xem xét các đặc trưng khác! -> Bạn có thể thấy giá tối thiểu của bí ngô xuất hiện xung quanh Halloween. Bạn giải thích điều này thế nào? +> Bạn có thấy giá bí ngô thấp nhất vào khoảng lễ Halloween không? Bạn có thể giải thích lý do không? -🎃 Chúc mừng, bạn vừa tạo mô hình có thể giúp dự đoán giá bí ngô làm bánh. Có thể bạn sẽ lặp lại quy trình cho các loại bí khác, nhưng sẽ rất tốn thời gian. Giờ hãy học cách đưa loại bí vào mô hình nhé! +🎃 Chúc mừng bạn đã tạo mô hình giúp dự đoán giá bí ngô nướng. Có thể bạn sẽ lặp lại thao tác này cho các loại bí ngô khác, nhưng sẽ rất mất công sức. Giờ hãy cùng học cách đưa loại bí ngô vào mô hình! -## Đặc trưng phân loại +## Các Đặc Trưng Phân Loại -Trong thế giới lý tưởng, ta muốn dự đoán giá cho các loại bí khác nhau bằng cùng một mô hình. Tuy nhiên, cột `Variety` khá khác so với các cột như `Month` vì nó chứa giá trị không phải số. Các cột như vậy gọi là **phân loại**. +Trong thế giới lý tưởng, ta muốn dự đoán giá của các loại bí ngô khác nhau bằng cùng một mô hình. Nhưng cột `Variety` khác với các cột như `Month` vì chứa các giá trị không phải số. Các cột như vậy gọi là **phân loại (categorical)**. -[![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression") +[![ML cho người mới - Dự đoán đặc trưng phân loại với Hồi Quy Tuyến Tính](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML cho người mới - Dự đoán đặc trưng phân loại với Hồi Quy Tuyến Tính") -> 🎥 Nhấn vào hình trên để xem video ngắn về cách dùng các đặc trưng phân loại. +> 🎥 Nhấn vào hình trên để xem video ngắn về cách dùng đặc trưng phân loại. -Bạn có thể thấy giá trung bình phụ thuộc vào loại bí như thế nào: +Dưới đây là đồ thị cho thấy giá trung bình theo từng loại: Average price by variety -Để đưa loại bí vào mô hình, trước tiên cần chuyển thành dạng số, hay **mã hóa**. Có một số cách để làm điều này: +Để đưa loại vào mô hình, trước hết phải chuyển nó về dạng số, hay còn gọi là **mã hóa (encode)**. Có vài cách để làm: -* **Mã hóa số đơn giản** tạo bảng các loại khác nhau, rồi thay tên loại bằng chỉ số trong bảng đó. Đây không phải ý hay cho hồi quy tuyến tính, vì hồi quy tuyến tính dùng trực tiếp giá trị số của chỉ số và nhân với hệ số. Trong trường hợp này, mối quan hệ giữa số chỉ số và giá không phải là tuyến tính, dù ta cố sắp xếp các chỉ số theo thứ tự nào đó. -* **Mã hóa one-hot** sẽ thay cột `Variety` bằng 4 cột khác, mỗi cột cho một loại. Mỗi cột có giá trị `1` nếu hàng tương ứng thuộc loại đó, `0` nếu không. Điều này dẫn đến 4 hệ số trong hồi quy, mỗi hệ số dành cho một loại bí, thể hiện "giá khởi đầu" (hoặc "giá thêm") cho loại đó. +* Mã hóa số đơn giản sẽ tạo một bảng các loại, sau đó thay tên loại bằng chỉ số trong bảng đó. Điều này không tốt cho hồi quy tuyến tính, vì hồi quy lấy giá trị số thực của chỉ số và nhân với hệ số để cộng vào kết quả. Trong trường hợp ta, mối quan hệ giữa số chỉ số và giá rõ ràng không phải tuyến tính, dù có sắp xếp chỉ số theo cách nào. +* **One-hot encoding** sẽ thay cột `Variety` bằng 4 cột khác nhau, mỗi cột cho một loại. Mỗi cột sẽ chứa `1` nếu hàng đó thuộc loại tương ứng, và `0` nếu không. Điều này có nghĩa hồi quy tuyến tính có 4 hệ số, mỗi hệ số ứng với một loại bí ngô, chịu trách nhiệm cho "giá khởi đầu" (hay chính xác là "giá cộng thêm") cho loại đó. -Đoạn mã dưới đây cho thấy cách mã hóa one-hot cho loại bí: +Đoạn mã dưới đây cho thấy cách chúng ta có thể mã hóa one-hot một loại: ```python pd.get_dummies(new_pumpkins['Variety']) @@ -303,14 +325,14 @@ pd.get_dummies(new_pumpkins['Variety']) 1741 | 0 | 1 | 0 | 0 1742 | 0 | 1 | 0 | 0 -Để huấn luyện hồi quy tuyến tính dùng kiểu mã hóa one-hot, ta chỉ cần khởi tạo dữ liệu `X` và `y` đúng cách: +Để huấn luyện hồi quy tuyến tính với dữ liệu một-hot mã hóa làm đầu vào, ta chỉ cần khởi tạo dữ liệu `X` và `y` đúng cách: ```python X = pd.get_dummies(new_pumpkins['Variety']) y = new_pumpkins['Price'] ``` -Phần còn lại của mã giống như trên dùng để huấn luyện hồi quy tuyến tính. Nếu bạn thử, sẽ thấy MSE gần như bằng nhau, nhưng hệ số xác định tăng lên khá nhiều (~77%). Để dự đoán chính xác hơn, ta có thể dùng nhiều đặc trưng phân loại hơn, cũng như các đặc trưng số, ví dụ như `Month` hoặc `DayOfYear`. Để có mảng đặc trưng lớn, dùng `join`: +Phần còn lại của mã giống như khi đã dùng hồi quy tuyến tính ở trên. Nếu bạn thử, sẽ thấy lỗi bình phương trung bình tương đương, nhưng hệ số xác định cao hơn nhiều (~77%). Để dự đoán chính xác hơn nữa, ta có thể đưa nhiều đặc trưng phân loại vào cùng với các đặc trưng số, như `Month` hay `DayOfYear`. Để có một mảng đặc trưng lớn, ta dùng `join`: ```python X = pd.get_dummies(new_pumpkins['Variety']) \ @@ -320,21 +342,21 @@ X = pd.get_dummies(new_pumpkins['Variety']) \ y = new_pumpkins['Price'] ``` -Ở đây ta cũng thêm vào `City` và loại `Package`, cho kết quả MSE 2.84 (10%), và hệ số xác định 0.94! +Ở đây ta cũng đưa vào `City` và loại `Package`, dẫn đến RMSE = 2.84 (10.5%) và hệ số xác định 0.94! -## Tổng hợp lại +## Tổng Hợp Tất Cả -Để có mô hình tốt nhất, ta có thể dùng dữ liệu kết hợp (phân loại mã hóa one-hot + số) từ ví dụ trên cùng hồi quy đa thức. Dưới đây là mã đầy đủ cho bạn tiện sử dụng: +Để tạo mô hình tốt nhất, ta kết hợp dữ liệu (đặc trưng phân loại one-hot + số) ở ví dụ trên cùng với Hồi Quy Đa Thức. Đây là mã đầy đủ để bạn tiện theo dõi: ```python -# thiết lập dữ liệu đào tạo +# thiết lập dữ liệu huấn luyện X = pd.get_dummies(new_pumpkins['Variety']) \ .join(new_pumpkins['Month']) \ .join(pd.get_dummies(new_pumpkins['City'])) \ .join(pd.get_dummies(new_pumpkins['Package'])) y = new_pumpkins['Price'] -# chia dữ liệu thành tập huấn luyện và kiểm tra +# chia tách dữ liệu thành tập huấn luyện và kiểm tra X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) # thiết lập và huấn luyện pipeline @@ -344,44 +366,44 @@ pipeline.fit(X_train,y_train) # dự đoán kết quả cho dữ liệu kiểm tra pred = pipeline.predict(X_test) -# tính MSE và hệ số xác định -mse = np.sqrt(mean_squared_error(y_test,pred)) -print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') +# tính RMSE và hệ số xác định +rmse = mean_squared_error(y_test, pred, squared=False) +print(f'RMSE: {rmse:3.3} ({rmse/pred.mean()*100:3.3}%)') score = pipeline.score(X_train,y_train) print('Model determination: ', score) ``` -Mô hình này cho hệ số xác định cao nhất gần 97% và MSE=2.23 (~8% lỗi dự đoán). +Điều này sẽ cho hệ số xác định tốt nhất gần 97% và RMSE=2.23 (~8% sai số dự đoán). -| Mô hình | MSE | Hệ số xác định | +| Mô hình | RMSE | Hệ số xác định | |-------|-----|---------------| -| `DayOfYear` Tuyến tính | 2.77 (17.2%) | 0.07 | -| `DayOfYear` Đa thức | 2.73 (17.0%) | 0.08 | -| `Variety` Tuyến tính | 5.24 (19.7%) | 0.77 | -| Tất cả đặc trưng Tuyến tính | 2.84 (10.5%) | 0.94 | -| Tất cả đặc trưng Đa thức | 2.23 (8.25%) | 0.97 | +| `DayOfYear` Linear | 2.77 (17.2%) | 0.07 | +| `DayOfYear` Polynomial | 2.73 (17.0%) | 0.08 | +| `Variety` Linear | 5.24 (19.7%) | 0.77 | +| Tất cả đặc trưng Linear | 2.84 (10.5%) | 0.94 | +| Tất cả đặc trưng Polynomial | 2.23 (8.25%) | 0.97 | -🏆 Làm tốt lắm! Bạn đã tạo bốn mô hình hồi quy trong một bài học, và cải thiện chất lượng mô hình lên 97%. Trong phần cuối về Hồi quy, bạn sẽ học về Hồi quy Logistic để phân loại. +🏆 Tuyệt vời! Bạn đã tạo 4 mô hình hồi quy trong một bài học, và cải thiện độ chính xác lên 97%. Ở phần cuối về Hồi Quy, bạn sẽ học về Hồi Quy Logistic để phân loại. --- -## 🚀Thử thách +## 🚀Thử Thách -Thử nghiệm với vài biến khác nhau trong notebook này để xem yếu tố tương quan tương ứng với độ chính xác mô hình như thế nào. +Thử nghiệm các biến khác nhau trong notebook này để xem mối tương quan ảnh hưởng thế nào đến độ chính xác mô hình. ## [Bài kiểm tra sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) -## Ôn tập & Tự học +## Ôn Tập & Tự Học -Trong bài học này chúng ta tìm hiểu về Hồi quy tuyến tính. Còn nhiều loại hồi quy quan trọng khác. Hãy đọc về các kỹ thuật Stepwise, Ridge, Lasso và Elasticnet. Một khóa học hay để học thêm là [khóa học Học thống kê Stanford](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) +Trong bài học này, chúng ta đã học về Hồi Quy Tuyến Tính. Còn nhiều loại hồi quy quan trọng khác. Bạn có thể đọc về các kỹ thuật Stepwise, Ridge, Lasso và Elasticnet. Một khóa học tốt để học thêm là [Khóa học Học Thống Kê Stanford](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) -## Bài tập +## Bài Tập -[Xây dựng mô hình](assignment.md) +[Xây dựng một mô hình](assignment.md) --- -**Tuyên bố miễn trừ trách nhiệm**: -Tài liệu này đã được dịch bằng dịch vụ dịch thuật AI [Co-op Translator](https://github.com/Azure/co-op-translator). Mặc dù chúng tôi cố gắng đảm bảo độ chính xác, xin lưu ý rằng bản dịch tự động có thể chứa lỗi hoặc không chính xác. Tài liệu gốc bằng ngôn ngữ bản địa nên được coi là nguồn tin chính thức. Đối với thông tin quan trọng, nên sử dụng dịch thuật chuyên nghiệp bởi con người. Chúng tôi không chịu trách nhiệm đối với bất kỳ sự hiểu lầm hoặc giải thích sai nào phát sinh từ việc sử dụng bản dịch này. +**Tuyên bố từ chối trách nhiệm**: +Tài liệu này đã được dịch bằng dịch vụ dịch thuật AI [Co-op Translator](https://github.com/Azure/co-op-translator). Mặc dù chúng tôi cố gắng đảm bảo độ chính xác, xin lưu ý rằng các bản dịch tự động có thể chứa lỗi hoặc không chính xác. Tài liệu gốc bằng ngôn ngữ mẹ đẻ của nó nên được coi là nguồn tham khảo chính xác nhất. Đối với các thông tin quan trọng, nên sử dụng bản dịch chuyên nghiệp do con người thực hiện. Chúng tôi không chịu trách nhiệm về bất kỳ sự hiểu lầm hoặc giải thích sai nào phát sinh từ việc sử dụng bản dịch này. \ No newline at end of file diff --git a/translations/vi/2-Regression/3-Linear/solution/notebook.ipynb b/translations/vi/2-Regression/3-Linear/solution/notebook.ipynb index 39b8d056d..5acad22a8 100644 --- a/translations/vi/2-Regression/3-Linear/solution/notebook.ipynb +++ b/translations/vi/2-Regression/3-Linear/solution/notebook.ipynb @@ -4,14 +4,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Hồi quy tuyến tính và hồi quy đa thức để định giá bí ngô - Bài học 3\n", + "## Hồi quy tuyến tính và đa thức cho giá bí ngô - Bài học 3\n", "\n", - "Tải các thư viện cần thiết và tập dữ liệu. Chuyển đổi dữ liệu thành một dataframe chứa một phần dữ liệu:\n", + "Tải các thư viện và bộ dữ liệu cần thiết. Chuyển đổi dữ liệu thành một dataframe chứa một phần dữ liệu:\n", "\n", - "- Chỉ lấy bí ngô được định giá theo đơn vị bushel\n", + "- Chỉ lấy bí ngô được định giá theo bushel\n", "- Chuyển đổi ngày thành tháng\n", - "- Tính giá trung bình dựa trên giá cao và giá thấp\n", - "- Chuyển đổi giá để phản ánh mức giá theo số lượng bushel\n" + "- Tính giá bằng trung bình giá cao và thấp\n", + "- Chuyển đổi giá để phản ánh giá theo số lượng bushel\n" ] }, { @@ -377,7 +377,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Biểu đồ phân tán nhắc nhở chúng ta rằng chúng ta chỉ có dữ liệu tháng từ tháng Tám đến tháng Mười Hai. Chúng ta có lẽ cần thêm dữ liệu để có thể đưa ra kết luận theo cách tuyến tính.\n" + "Một biểu đồ phân tán nhắc nhở chúng ta rằng chúng ta chỉ có dữ liệu tháng từ tháng Tám đến tháng Mười Hai. Có lẽ chúng ta cần thêm dữ liệu để có thể rút ra kết luận theo cách tuyến tính.\n" ] }, { @@ -447,7 +447,9 @@ { "cell_type": "markdown", "metadata": {}, - "source": [] + "source": [ + "Hãy xem liệu có mối tương quan không:\n" + ] }, { "cell_type": "code", @@ -472,7 +474,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Có vẻ như mối tương quan khá nhỏ, nhưng có một mối quan hệ quan trọng hơn - vì các điểm giá trong biểu đồ trên dường như có một số cụm riêng biệt. Hãy tạo một biểu đồ để hiển thị các loại bí ngô khác nhau:\n" + "Có vẻ như sự tương quan khá nhỏ, nhưng có một mối quan hệ quan trọng khác - bởi vì các điểm giá trong biểu đồ trên dường như có một số cụm riêng biệt. Hãy tạo một biểu đồ sẽ hiển thị các giống bí đỏ khác nhau:\n" ] }, { @@ -535,7 +537,9 @@ { "cell_type": "markdown", "metadata": {}, - "source": [] + "source": [ + "Trong thời gian này, hãy tập trung chỉ vào một loại duy nhất - **loại bánh pie**.\n" + ] }, { "cell_type": "code", @@ -688,7 +692,9 @@ { "cell_type": "markdown", "metadata": {}, - "source": [] + "source": [ + "Chúng ta có thể sử dụng mô hình đã được huấn luyện để dự đoán giá:\n" + ] }, { "cell_type": "code", @@ -718,9 +724,9 @@ "source": [ "### Hồi quy đa thức\n", "\n", - "Đôi khi mối quan hệ giữa các đặc điểm và kết quả vốn dĩ không tuyến tính. Ví dụ, giá bí ngô có thể cao vào mùa đông (tháng 1, 2), sau đó giảm vào mùa hè (tháng 5-7), rồi lại tăng lên. Hồi quy tuyến tính không thể tìm ra mối quan hệ này một cách chính xác.\n", + "Đôi khi mối quan hệ giữa các đặc trưng và kết quả vốn dĩ không phải tuyến tính. Ví dụ, giá bí ngô có thể cao vào mùa đông (tháng=1,2), sau đó giảm vào mùa hè (tháng=5-7), rồi lại tăng trở lại. Hồi quy tuyến tính không thể phù hợp chính xác với mối quan hệ này.\n", "\n", - "Trong trường hợp này, chúng ta có thể cân nhắc thêm các đặc điểm bổ sung. Một cách đơn giản là sử dụng các đa thức từ các đặc điểm đầu vào, điều này sẽ dẫn đến **hồi quy đa thức**. Trong Scikit Learn, chúng ta có thể tự động tính trước các đặc điểm đa thức bằng cách sử dụng pipelines:\n" + "Trong trường hợp này, chúng ta có thể xem xét thêm các đặc trưng bổ sung. Cách đơn giản là sử dụng đa thức từ các đặc trưng đầu vào, điều này sẽ dẫn đến **hồi quy đa thức**. Trong Scikit Learn, chúng ta có thể tự động tiền tính các đặc trưng đa thức bằng cách sử dụng pipeline: \n" ] }, { @@ -775,20 +781,23 @@ "score = pipeline.score(X_train,y_train)\n", "print('Model determination: ', score)\n", "\n", - "plt.scatter(X_test,y_test)\n", - "plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))" + "X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)\n", + "y_range = pipeline.predict(X_range)\n", + "\n", + "plt.scatter(X_test, y_test)\n", + "plt.plot(X_range, y_range)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Các phương pháp mã hóa\n", + "### Các loại mã hóa\n", "\n", - "Trong thế giới lý tưởng, chúng ta muốn có thể dự đoán giá cho các loại bí ngô khác nhau bằng cùng một mô hình. Để tính đến loại bí ngô, trước tiên chúng ta cần chuyển đổi nó sang dạng số, hay còn gọi là **mã hóa**. Có một số cách để thực hiện điều này:\n", + "Trong thế giới lý tưởng, chúng ta muốn có thể dự đoán giá cho các loại bí ngô khác nhau bằng cùng một mô hình. Để tính đến loại, trước tiên chúng ta cần chuyển nó thành dạng số, hay còn gọi là **mã hóa**. Có một số cách chúng ta có thể làm điều đó:\n", "\n", - "* Mã hóa số đơn giản sẽ tạo một bảng các loại khác nhau, sau đó thay thế tên loại bằng một chỉ số trong bảng đó. Đây không phải là ý tưởng tốt nhất cho hồi quy tuyến tính, vì hồi quy tuyến tính sẽ tính đến giá trị số của chỉ số, và giá trị số này có khả năng không tương quan một cách tuyến tính với giá cả.\n", - "* Mã hóa one-hot, sẽ thay thế cột `Variety` bằng 4 cột khác nhau, mỗi cột đại diện cho một loại, chứa giá trị 1 nếu hàng tương ứng thuộc loại đó, và 0 nếu không.\n", + "* Mã hóa số đơn giản sẽ xây dựng một bảng các loại khác nhau, sau đó thay thế tên loại bằng chỉ số trong bảng đó. Đây không phải là ý tưởng tốt nhất cho hồi quy tuyến tính, vì hồi quy tuyến tính xem giá trị số của chỉ số là yếu tố quan trọng, và giá trị số này có khả năng không tương quan về số học với giá.\n", + "* Mã hóa one-hot, sẽ thay thế cột `Variety` bằng 4 cột khác nhau, mỗi cột cho một loại, trong đó chứa 1 nếu hàng tương ứng là loại đó, và 0 nếu không phải.\n", "\n", "Đoạn mã dưới đây cho thấy cách chúng ta có thể mã hóa one-hot cho một loại:\n" ] @@ -938,9 +947,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Hồi quy tuyến tính trên các loại\n", + "### Hồi quy tuyến tính trên chủng loại\n", "\n", - "Bây giờ chúng ta sẽ sử dụng cùng một đoạn mã như trên, nhưng thay vì `DayOfYear`, chúng ta sẽ sử dụng loại đã được mã hóa one-hot làm đầu vào:\n" + "Chúng ta sẽ sử dụng cùng mã như trên, nhưng thay vì `DayOfYear` chúng ta sẽ sử dụng chủng loại được mã hóa một-hot làm đầu vào:\n" ] }, { @@ -988,7 +997,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Chúng ta cũng có thể thử sử dụng các đặc điểm khác theo cách tương tự, và kết hợp chúng với các đặc điểm số, chẳng hạn như `Month` hoặc `DayOfYear`:\n" + "Chúng ta cũng có thể thử sử dụng các đặc trưng khác theo cùng cách, và kết hợp chúng với các đặc trưng số, chẳng hạn như `Month` hoặc `DayOfYear`:\n" ] }, { @@ -1021,7 +1030,7 @@ "source": [ "### Hồi quy đa thức\n", "\n", - "Hồi quy đa thức cũng có thể được sử dụng với các đặc trưng phân loại đã được mã hóa one-hot. Mã nguồn để huấn luyện hồi quy đa thức về cơ bản sẽ giống như chúng ta đã thấy ở trên.\n" + "Hồi quy đa thức cũng có thể được sử dụng với các đặc trưng dạng phân loại đã được mã hóa one-hot. Mã để huấn luyện hồi quy đa thức về cơ bản sẽ giống như chúng ta đã thấy ở trên.\n" ] }, { @@ -1068,7 +1077,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Tuyên bố miễn trừ trách nhiệm**: \nTài liệu này đã được dịch bằng dịch vụ dịch thuật AI [Co-op Translator](https://github.com/Azure/co-op-translator). Mặc dù chúng tôi cố gắng đảm bảo độ chính xác, xin lưu ý rằng các bản dịch tự động có thể chứa lỗi hoặc không chính xác. Tài liệu gốc bằng ngôn ngữ bản địa nên được coi là nguồn tham khảo chính thức. Đối với các thông tin quan trọng, chúng tôi khuyến nghị sử dụng dịch vụ dịch thuật chuyên nghiệp từ con người. Chúng tôi không chịu trách nhiệm cho bất kỳ sự hiểu lầm hoặc diễn giải sai nào phát sinh từ việc sử dụng bản dịch này.\n" + "---\n\n\n**Tuyên bố từ chối trách nhiệm**: \nTài liệu này đã được dịch bằng dịch vụ dịch thuật AI [Co-op Translator](https://github.com/Azure/co-op-translator). Mặc dù chúng tôi nỗ lực để đảm bảo độ chính xác, xin lưu ý rằng các bản dịch tự động có thể chứa lỗi hoặc không chính xác. Tài liệu gốc bằng ngôn ngữ nguyên bản nên được coi là nguồn tham khảo chính xác nhất. Đối với các thông tin quan trọng, khuyến nghị sử dụng dịch vụ dịch thuật chuyên nghiệp do con người thực hiện. Chúng tôi không chịu trách nhiệm về bất kỳ sự hiểu lầm hoặc sai lệch nào phát sinh từ việc sử dụng bản dịch này.\n\n" ] } ], @@ -1098,13 +1107,7 @@ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" } }, - "orig_nbformat": 2, - "coopTranslator": { - "original_hash": "d77bd89ae7e79780c68c58bab91f13f8", - "translation_date": "2025-09-06T13:12:40+00:00", - "source_file": "2-Regression/3-Linear/solution/notebook.ipynb", - "language_code": "vi" - } + "orig_nbformat": 2 }, "nbformat": 4, "nbformat_minor": 2