diff --git a/translations/he/1-Introduction/1-intro-to-ML/README.md b/translations/he/1-Introduction/1-intro-to-ML/README.md new file mode 100644 index 00000000..2084cf09 --- /dev/null +++ b/translations/he/1-Introduction/1-intro-to-ML/README.md @@ -0,0 +1,159 @@ + +# מבוא ללמידת מכונה + +## [שאלון לפני השיעור](https://ff-quizzes.netlify.app/en/ml/) + +--- + +[![למידת מכונה למתחילים - מבוא ללמידת מכונה למתחילים](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](https://youtu.be/6mSx_KJxcHI "למידת מכונה למתחילים - מבוא ללמידת מכונה למתחילים") + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון קצר שמסביר את השיעור. + +ברוכים הבאים לקורס זה על למידת מכונה קלאסית למתחילים! בין אם אתם חדשים לחלוטין לנושא הזה, או מומחים בלמידת מכונה שמחפשים לרענן את הידע, אנחנו שמחים שהצטרפתם אלינו! אנו שואפים ליצור נקודת התחלה ידידותית ללימודי למידת מכונה ונשמח להעריך, להגיב ולשלב את [המשוב שלכם](https://github.com/microsoft/ML-For-Beginners/discussions). + +[![מבוא ללמידת מכונה](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "מבוא ללמידת מכונה") + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון: ג'ון גוטאג מ-MIT מציג את למידת המכונה + +--- +## התחלת העבודה עם למידת מכונה + +לפני שמתחילים עם תוכנית הלימודים הזו, יש לוודא שהמחשב שלכם מוכן להריץ מחברות באופן מקומי. + +- **הגדירו את המחשב שלכם באמצעות הסרטונים האלה**. השתמשו בקישורים הבאים כדי ללמוד [איך להתקין את Python](https://youtu.be/CXZYvNRIAKM) במערכת שלכם ו-[להגדיר עורך טקסט](https://youtu.be/EU8eayHWoZg) לפיתוח. +- **למדו Python**. מומלץ גם להבין את הבסיס של [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), שפת תכנות שימושית למדעני נתונים שבה נשתמש בקורס הזה. +- **למדו Node.js ו-JavaScript**. נשתמש גם ב-JavaScript מספר פעמים בקורס הזה כשנבנה אפליקציות ווב, ולכן תצטרכו להתקין [node](https://nodejs.org) ו-[npm](https://www.npmjs.com/), וכן [Visual Studio Code](https://code.visualstudio.com/) שיהיה זמין לפיתוח ב-Python וב-JavaScript. +- **צרו חשבון GitHub**. מכיוון שמצאתם אותנו כאן ב-[GitHub](https://github.com), ייתכן שכבר יש לכם חשבון, אבל אם לא, צרו אחד ואז עשו fork לתוכנית הלימודים הזו כדי להשתמש בה בעצמכם. (אתם מוזמנים גם לתת לנו כוכב 😊) +- **חקור את Scikit-learn**. הכירו את [Scikit-learn](https://scikit-learn.org/stable/user_guide.html), סט ספריות למידת מכונה שנשתמש בהן בשיעורים האלה. + +--- +## מהי למידת מכונה? + +המונח 'למידת מכונה' הוא אחד המונחים הפופולריים והשכיחים ביותר כיום. יש סיכוי לא מבוטל ששמעתם את המונח הזה לפחות פעם אחת אם יש לכם היכרות כלשהי עם טכנולוגיה, לא משנה באיזה תחום אתם עובדים. עם זאת, המכניקה של למידת מכונה היא תעלומה עבור רוב האנשים. עבור מתחילים בלמידת מכונה, הנושא יכול לעיתים להרגיש מרתיע. לכן, חשוב להבין מהי למידת מכונה באמת, וללמוד עליה צעד אחר צעד, דרך דוגמאות מעשיות. + +--- +## עקומת ההייפ + +![עקומת ההייפ של למידת מכונה](../../../../1-Introduction/1-intro-to-ML/images/hype.png) + +> Google Trends מציג את עקומת ההייפ האחרונה של המונח 'למידת מכונה' + +--- +## יקום מסתורי + +אנחנו חיים ביקום מלא בתעלומות מרתקות. מדענים גדולים כמו סטיבן הוקינג, אלברט איינשטיין ועוד רבים הקדישו את חייהם לחיפוש מידע משמעותי שחושף את התעלומות של העולם סביבנו. זהו מצב הלמידה האנושי: ילד לומד דברים חדשים ומגלה את מבנה עולמו שנה אחר שנה כשהוא גדל לבגרות. + +--- +## מוחו של הילד + +המוח והחושים של הילד תופסים את העובדות של סביבתו ולומדים בהדרגה את הדפוסים הנסתרים של החיים, שמסייעים לילד ליצור כללים לוגיים לזיהוי דפוסים נלמדים. תהליך הלמידה של המוח האנושי הופך את בני האדם ליצורים החיים המתוחכמים ביותר בעולם הזה. הלמידה המתמשכת על ידי גילוי דפוסים נסתרים ואז חדשנות על בסיסם מאפשרת לנו להשתפר ולהתפתח לאורך כל חיינו. יכולת הלמידה וההתפתחות הזו קשורה למושג שנקרא [פלסטיות מוחית](https://www.simplypsychology.org/brain-plasticity.html). באופן שטחי, ניתן למצוא כמה דמיון מוטיבציוני בין תהליך הלמידה של המוח האנושי לבין מושגי למידת מכונה. + +--- +## המוח האנושי + +המוח [האנושי](https://www.livescience.com/29365-human-brain.html) תופס דברים מהעולם האמיתי, מעבד את המידע הנתפס, מקבל החלטות רציונליות ומבצע פעולות מסוימות בהתאם לנסיבות. זה מה שאנחנו מכנים התנהגות אינטליגנטית. כאשר אנו מתכנתים חיקוי של תהליך ההתנהגות האינטליגנטית למכונה, זה נקרא בינה מלאכותית (AI). + +--- +## כמה מונחים + +למרות שהמונחים יכולים להיות מבלבלים, למידת מכונה (ML) היא תת-תחום חשוב של בינה מלאכותית. **ML עוסקת בשימוש באלגוריתמים מיוחדים כדי לחשוף מידע משמעותי ולמצוא דפוסים נסתרים מנתונים נתפסים כדי לתמוך בתהליך קבלת החלטות רציונלי**. + +--- +## AI, ML, למידה עמוקה + +![AI, ML, למידה עמוקה, מדעי הנתונים](../../../../1-Introduction/1-intro-to-ML/images/ai-ml-ds.png) + +> דיאגרמה שמציגה את הקשרים בין AI, ML, למידה עמוקה ומדעי הנתונים. אינפוגרפיקה מאת [Jen Looper](https://twitter.com/jenlooper) בהשראת [הגרפיקה הזו](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) + +--- +## מושגים שנכסה + +בתוכנית הלימודים הזו, נכסה רק את מושגי היסוד של למידת מכונה שמתחיל חייב לדעת. נכסה את מה שאנחנו מכנים 'למידת מכונה קלאסית' בעיקר באמצעות Scikit-learn, ספרייה מצוינת שרבים מהסטודנטים משתמשים בה כדי ללמוד את הבסיס. כדי להבין מושגים רחבים יותר של בינה מלאכותית או למידה עמוקה, ידע יסודי חזק בלמידת מכונה הוא הכרחי, ולכן אנו מציעים אותו כאן. + +--- +## בקורס הזה תלמדו: + +- מושגי יסוד של למידת מכונה +- ההיסטוריה של ML +- ML והוגנות +- טכניקות רגרסיה בלמידת מכונה +- טכניקות סיווג בלמידת מכונה +- טכניקות אשכולות בלמידת מכונה +- עיבוד שפה טבעית בלמידת מכונה +- חיזוי סדרות זמן בלמידת מכונה +- למידה מחזקת +- יישומים בעולם האמיתי של ML + +--- +## מה לא נכסה + +- למידה עמוקה +- רשתות נוירונים +- AI + +כדי ליצור חוויית למידה טובה יותר, נמנע מהמורכבויות של רשתות נוירונים, 'למידה עמוקה' - בניית מודלים מרובי שכבות באמצעות רשתות נוירונים - ו-AI, שאותם נדון בתוכנית לימודים אחרת. בנוסף, נציע תוכנית לימודים עתידית במדעי הנתונים שתתמקד בהיבט הזה של התחום הרחב יותר. + +--- +## למה ללמוד למידת מכונה? + +למידת מכונה, מנקודת מבט מערכתית, מוגדרת כיצירת מערכות אוטומטיות שיכולות ללמוד דפוסים נסתרים מנתונים כדי לסייע בקבלת החלטות אינטליגנטיות. + +המוטיבציה הזו מושפעת באופן רופף מאופן שבו המוח האנושי לומד דברים מסוימים על בסיס הנתונים שהוא תופס מהעולם החיצוני. + +✅ חשבו לרגע מדוע עסק ירצה להשתמש באסטרטגיות למידת מכונה במקום ליצור מנוע מבוסס כללים קשיחים. + +--- +## יישומים של למידת מכונה + +יישומים של למידת מכונה נמצאים כיום כמעט בכל מקום, והם נפוצים כמו הנתונים שזורמים סביב החברה שלנו, שנוצרים על ידי הטלפונים החכמים שלנו, מכשירים מחוברים ומערכות אחרות. בהתחשב בפוטנציאל העצום של אלגוריתמים מתקדמים בלמידת מכונה, חוקרים בוחנים את יכולתם לפתור בעיות רב-ממדיות ורב-תחומיות בחיים האמיתיים עם תוצאות חיוביות רבות. + +--- +## דוגמאות ליישום ML + +**ניתן להשתמש בלמידת מכונה בדרכים רבות**: + +- לחזות את הסבירות למחלה על סמך ההיסטוריה הרפואית או הדוחות של מטופל. +- להשתמש בנתוני מזג אוויר כדי לחזות אירועי מזג אוויר. +- להבין את התחושה של טקסט. +- לזהות חדשות מזויפות כדי לעצור את הפצת התעמולה. + +תחומים כמו פיננסים, כלכלה, מדעי כדור הארץ, חקר החלל, הנדסה ביו-רפואית, מדעי הקוגניציה ואפילו תחומים במדעי הרוח אימצו את למידת המכונה כדי לפתור את הבעיות הכבדות בעיבוד נתונים של התחום שלהם. + +--- +## סיכום + +למידת מכונה מאוטומטת את תהליך גילוי הדפוסים על ידי מציאת תובנות משמעותיות מנתונים אמיתיים או נתונים שנוצרו. היא הוכיחה את עצמה כבעלת ערך רב בעסקים, בריאות ויישומים פיננסיים, בין היתר. + +בעתיד הקרוב, הבנת היסודות של למידת מכונה תהיה הכרחית עבור אנשים מכל תחום בשל האימוץ הנרחב שלה. + +--- +# 🚀 אתגר + +שרטטו, על נייר או באמצעות אפליקציה מקוונת כמו [Excalidraw](https://excalidraw.com/), את ההבנה שלכם לגבי ההבדלים בין AI, ML, למידה עמוקה ומדעי הנתונים. הוסיפו רעיונות לבעיות שכל אחת מהטכניקות הללו טובה בפתרונן. + +# [שאלון לאחר השיעור](https://ff-quizzes.netlify.app/en/ml/) + +--- +# סקירה ולימוד עצמי + +כדי ללמוד עוד על איך לעבוד עם אלגוריתמים של ML בענן, עקבו אחרי [מסלול הלמידה הזה](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott). + +קחו [מסלול למידה](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) על יסודות ML. + +--- +# משימה + +[התחילו לעבוד](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). בעוד שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/1-Introduction/1-intro-to-ML/assignment.md b/translations/he/1-Introduction/1-intro-to-ML/assignment.md new file mode 100644 index 00000000..0c95b63f --- /dev/null +++ b/translations/he/1-Introduction/1-intro-to-ML/assignment.md @@ -0,0 +1,23 @@ + +# להתחיל לפעול + +## הוראות + +במשימה זו שאינה מדורגת, עליכם לרענן את הידע שלכם ב-Python ולהכין את הסביבה שלכם כך שתוכל להריץ מחברות. + +קחו את [מסלול הלמידה של Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), ולאחר מכן הכינו את המערכות שלכם על ידי צפייה בסרטוני ההיכרות הבאים: + +https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/1-Introduction/2-history-of-ML/README.md b/translations/he/1-Introduction/2-history-of-ML/README.md new file mode 100644 index 00000000..8bfa51ee --- /dev/null +++ b/translations/he/1-Introduction/2-history-of-ML/README.md @@ -0,0 +1,164 @@ + +# ההיסטוריה של למידת מכונה + +![סיכום ההיסטוריה של למידת מכונה בסקצ'נוט](../../../../sketchnotes/ml-history.png) +> סקצ'נוט מאת [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [שאלון לפני השיעור](https://ff-quizzes.netlify.app/en/ml/) + +--- + +[![למידת מכונה למתחילים - ההיסטוריה של למידת מכונה](https://img.youtube.com/vi/N6wxM4wZ7V0/0.jpg)](https://youtu.be/N6wxM4wZ7V0 "למידת מכונה למתחילים - ההיסטוריה של למידת מכונה") + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון קצר על השיעור הזה. + +בשיעור זה נעבור על אבני הדרך המרכזיות בהיסטוריה של למידת מכונה ובינה מלאכותית. + +ההיסטוריה של בינה מלאכותית (AI) כתחום קשורה קשר הדוק להיסטוריה של למידת מכונה, שכן האלגוריתמים וההתקדמות החישובית שמניעים את למידת המכונה תרמו להתפתחות הבינה המלאכותית. חשוב לזכור כי למרות שהתחומים הללו החלו להתגבש כתחומי מחקר נפרדים בשנות ה-50, [גילויים אלגוריתמיים, סטטיסטיים, מתמטיים, חישוביים וטכניים חשובים](https://wikipedia.org/wiki/Timeline_of_machine_learning) קדמו לתקופה זו ואף חפפו לה. למעשה, אנשים חשבו על שאלות אלו במשך [מאות שנים](https://wikipedia.org/wiki/History_of_artificial_intelligence): מאמר זה דן בבסיס האינטלקטואלי ההיסטורי של הרעיון של "מכונה חושבת". + +--- +## גילויים חשובים + +- 1763, 1812 [משפט בייס](https://wikipedia.org/wiki/Bayes%27_theorem) והקדמיו. משפט זה ויישומיו מהווים בסיס להסקה, ומתארים את ההסתברות להתרחשות אירוע בהתבסס על ידע קודם. +- 1805 [תורת הריבועים הפחותים](https://wikipedia.org/wiki/Least_squares) מאת המתמטיקאי הצרפתי אדריאן-מארי לז'נדר. תיאוריה זו, שתלמדו עליה ביחידת הרגרסיה שלנו, מסייעת בהתאמת נתונים. +- 1913 [שרשראות מרקוב](https://wikipedia.org/wiki/Markov_chain), על שם המתמטיקאי הרוסי אנדריי מרקוב, משמשות לתיאור רצף של אירועים אפשריים בהתבסס על מצב קודם. +- 1957 [פרספטרון](https://wikipedia.org/wiki/Perceptron) הוא סוג של מסווג ליניארי שהומצא על ידי הפסיכולוג האמריקאי פרנק רוזנבלט ומהווה בסיס להתקדמות בלמידה עמוקה. + +--- + +- 1967 [השכן הקרוב](https://wikipedia.org/wiki/Nearest_neighbor) הוא אלגוריתם שתוכנן במקור למיפוי מסלולים. בהקשר של למידת מכונה הוא משמש לזיהוי דפוסים. +- 1970 [Backpropagation](https://wikipedia.org/wiki/Backpropagation) משמש לאימון [רשתות עצביות קדמיות](https://wikipedia.org/wiki/Feedforward_neural_network). +- 1982 [רשתות עצביות חוזרות](https://wikipedia.org/wiki/Recurrent_neural_network) הן רשתות עצביות מלאכותיות שמקורן ברשתות עצביות קדמיות ויוצרות גרפים זמניים. + +✅ בצעו מחקר קטן. אילו תאריכים נוספים בולטים בהיסטוריה של למידת מכונה ובינה מלאכותית? + +--- +## 1950: מכונות שחושבות + +אלן טיורינג, אדם יוצא דופן שב-2019 נבחר [על ידי הציבור](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) כמדען הגדול ביותר של המאה ה-20, נחשב כמי שסייע להניח את היסודות לרעיון של "מכונה שיכולה לחשוב". הוא התמודד עם ספקנים ועם הצורך שלו עצמו בראיות אמפיריות לרעיון זה, בין היתר על ידי יצירת [מבחן טיורינג](https://www.bbc.com/news/technology-18475646), אותו תחקור בשיעורי עיבוד השפה הטבעית שלנו. + +--- +## 1956: פרויקט המחקר הקיץ בדארטמות' + +"פרויקט המחקר הקיץ בדארטמות' על בינה מלאכותית היה אירוע מכונן עבור תחום הבינה המלאכותית," ובו נטבע המונח 'בינה מלאכותית' ([מקור](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). + +> כל היבט של למידה או כל תכונה אחרת של אינטליגנציה ניתן לתיאור מדויק מספיק כך שניתן יהיה ליצור מכונה שתדמה אותו. + +--- + +החוקר הראשי, פרופסור למתמטיקה ג'ון מקארתי, קיווה "להתקדם על בסיס ההשערה שכל היבט של למידה או כל תכונה אחרת של אינטליגנציה ניתן לתיאור מדויק מספיק כך שניתן יהיה ליצור מכונה שתדמה אותו." בין המשתתפים היה גם מרווין מינסקי, דמות בולטת בתחום. + +הסדנה נחשבת כמי שיזמה ועודדה דיונים רבים, כולל "עליית השיטות הסמליות, מערכות שהתמקדו בתחומים מוגבלים (מערכות מומחה מוקדמות), ומערכות דדוקטיביות מול מערכות אינדוקטיביות." ([מקור](https://wikipedia.org/wiki/Dartmouth_workshop)). + +--- +## 1956 - 1974: "שנות הזהב" + +משנות ה-50 ועד אמצע שנות ה-70, שררה אופטימיות רבה לגבי היכולת של בינה מלאכותית לפתור בעיות רבות. ב-1967, מרווין מינסקי הצהיר בביטחון ש"בתוך דור ... הבעיה של יצירת 'בינה מלאכותית' תיפתר באופן משמעותי." (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) + +מחקר עיבוד שפה טבעית פרח, חיפוש שוכלל והפך לעוצמתי יותר, ונוצר הרעיון של 'עולמות מיקרו', שבהם משימות פשוטות הושלמו באמצעות הוראות בשפה פשוטה. + +--- + +המחקר מומן היטב על ידי סוכנויות ממשלתיות, התקדמות נעשתה בחישוב ובאלגוריתמים, ונבנו אב-טיפוס של מכונות חכמות. כמה מהמכונות הללו כוללות: + +* [שייקי הרובוט](https://wikipedia.org/wiki/Shakey_the_robot), שיכול היה לתמרן ולהחליט כיצד לבצע משימות בצורה 'חכמה'. + + ![שייקי, רובוט חכם](../../../../1-Introduction/2-history-of-ML/images/shakey.jpg) + > שייקי ב-1972 + +--- + +* אלייזה, 'צ'טרבוט' מוקדם, יכלה לשוחח עם אנשים ולשמש כ'מטפלת' פרימיטיבית. תלמדו עוד על אלייזה בשיעורי עיבוד השפה הטבעית. + + ![אלייזה, בוט](../../../../1-Introduction/2-history-of-ML/images/eliza.png) + > גרסה של אלייזה, צ'טבוט + +--- + +* "עולם הקוביות" היה דוגמה לעולם מיקרו שבו ניתן היה לערום ולמיין קוביות, ונערכו ניסויים בלימוד מכונות לקבל החלטות. התקדמות שנעשתה עם ספריות כמו [SHRDLU](https://wikipedia.org/wiki/SHRDLU) סייעה לקדם את עיבוד השפה. + + [![עולם הקוביות עם SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "עולם הקוביות עם SHRDLU") + + > 🎥 לחצו על התמונה למעלה לצפייה בסרטון: עולם הקוביות עם SHRDLU + +--- +## 1974 - 1980: "חורף הבינה המלאכותית" + +עד אמצע שנות ה-70, התברר כי המורכבות של יצירת 'מכונות חכמות' הוערכה בחסר וכי ההבטחה שלה, בהתחשב בכוח החישוב הזמין, הוערכה יתר על המידה. המימון התייבש והאמון בתחום פחת. כמה בעיות שהשפיעו על האמון כוללות: +--- +- **מגבלות**. כוח החישוב היה מוגבל מדי. +- **התפוצצות קומבינטורית**. כמות הפרמטרים שצריך לאמן גדלה באופן מעריכי ככל שנדרשו יותר מהמחשבים, ללא התפתחות מקבילה של כוח חישוב ויכולת. +- **מחסור בנתונים**. היה מחסור בנתונים שהקשה על תהליך הבדיקה, הפיתוח והעידון של אלגוריתמים. +- **האם אנו שואלים את השאלות הנכונות?**. עצם השאלות שנשאלו החלו להישאל מחדש. חוקרים החלו להתמודד עם ביקורת על הגישות שלהם: + - מבחני טיורינג הועמדו בסימן שאלה, בין היתר, על ידי תיאוריית "החדר הסיני" שטענה כי "תכנות מחשב דיגיטלי עשוי לגרום לו להיראות כאילו הוא מבין שפה אך לא יכול לייצר הבנה אמיתית." ([מקור](https://plato.stanford.edu/entries/chinese-room/)) + - האתיקה של הכנסת אינטליגנציות מלאכותיות כמו "המטפלת" אלייזה לחברה הועמדה בסימן שאלה. + +--- + +במקביל, החלו להיווצר אסכולות שונות בתחום הבינה המלאכותית. נוצרה דיכוטומיה בין ["בינה מלאכותית 'מבולגנת' לעומת 'מסודרת'"](https://wikipedia.org/wiki/Neats_and_scruffies). מעבדות 'מבולגנות' שיפצו תוכניות במשך שעות עד שהשיגו את התוצאות הרצויות. מעבדות 'מסודרות' "התמקדו בלוגיקה ובפתרון בעיות פורמלי". אלייזה ו-SHRDLU היו מערכות 'מבולגנות' ידועות. בשנות ה-80, עם הדרישה להפיק מערכות למידת מכונה שניתן לשחזר, הגישה ה'מסודרת' תפסה בהדרגה את הבכורה שכן תוצאותיה ניתנות להסבר טוב יותר. + +--- +## שנות ה-80: מערכות מומחה + +ככל שהתחום גדל, היתרון שלו לעסקים הפך ברור יותר, ובשנות ה-80 כך גם התפשטותן של 'מערכות מומחה'. "מערכות מומחה היו בין הצורות הראשונות של תוכנות בינה מלאכותית (AI) שהצליחו באמת." ([מקור](https://wikipedia.org/wiki/Expert_system)). + +סוג זה של מערכת הוא למעשה _היברידי_, המורכב בחלקו ממנוע חוקים שמגדיר דרישות עסקיות, ובחלקו ממנוע הסקה שמנצל את מערכת החוקים כדי להסיק עובדות חדשות. + +התקופה הזו גם ראתה תשומת לב גוברת לרשתות עצביות. + +--- +## 1987 - 1993: "הקיפאון של הבינה המלאכותית" + +התפשטות החומרה המיוחדת של מערכות מומחה גרמה, למרבה הצער, להתמחות יתר. עלייתם של מחשבים אישיים גם התחרתה במערכות גדולות, מיוחדות ומרכזיות אלו. הדמוקרטיזציה של המחשוב החלה, והיא בסופו של דבר סללה את הדרך להתפוצצות המודרנית של נתונים גדולים. + +--- +## 1993 - 2011 + +תקופה זו ראתה עידן חדש שבו למידת מכונה ובינה מלאכותית יכלו לפתור חלק מהבעיות שנגרמו קודם לכן בשל מחסור בנתונים ובכוח חישוב. כמות הנתונים החלה לגדול במהירות ולהיות זמינה יותר, לטוב ולרע, במיוחד עם הופעת הסמארטפון סביב 2007. כוח החישוב התרחב באופן מעריכי, והאלגוריתמים התפתחו במקביל. התחום החל להתבגר כאשר הימים החופשיים של העבר החלו להתגבש לכדי דיסציפלינה אמיתית. + +--- +## היום + +כיום למידת מכונה ובינה מלאכותית נוגעות כמעט בכל חלק בחיינו. תקופה זו דורשת הבנה זהירה של הסיכונים וההשפעות הפוטנציאליות של אלגוריתמים אלו על חיי אדם. כפי שבראד סמית' ממיקרוסופט אמר, "טכנולוגיית המידע מעלה סוגיות שנוגעות ללב ההגנות הבסיסיות של זכויות האדם כמו פרטיות וחופש הביטוי. סוגיות אלו מגבירות את האחריות של חברות טכנולוגיה שיוצרות את המוצרים הללו. לדעתנו, הן גם דורשות רגולציה ממשלתית מחושבת ופיתוח נורמות סביב שימושים מקובלים" ([מקור](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). + +--- + +נותר לראות מה צופן העתיד, אך חשוב להבין את מערכות המחשוב הללו ואת התוכנה והאלגוריתמים שהם מפעילים. אנו מקווים שתוכנית הלימודים הזו תסייע לכם להבין טוב יותר כך שתוכלו להחליט בעצמכם. + +[![ההיסטוריה של למידה עמוקה](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 "ההיסטוריה של למידה עמוקה") +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון: יאן לקון מדבר על ההיסטוריה של למידה עמוקה בהרצאה זו + +--- +## 🚀אתגר + +התעמקו באחד מהרגעים ההיסטוריים הללו ולמדו עוד על האנשים שמאחוריהם. ישנם דמויות מרתקות, ואף גילוי מדעי מעולם לא נוצר בוואקום תרבותי. מה תגלו? + +## [שאלון לאחר השיעור](https://ff-quizzes.netlify.app/en/ml/) + +--- +## סקירה ולימוד עצמי + +הנה פריטים לצפייה והאזנה: + +[פודקאסט זה שבו איימי בויד דנה בהתפתחות הבינה המלאכותית](http://runasradio.com/Shows/Show/739) + +[![ההיסטוריה של בינה מלאכותית מאת איימי בויד](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "ההיסטוריה של בינה מלאכותית מאת איימי בויד") + +--- + +## משימה + +[צרו ציר זמן](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור הסמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/1-Introduction/2-history-of-ML/assignment.md b/translations/he/1-Introduction/2-history-of-ML/assignment.md new file mode 100644 index 00000000..768245a5 --- /dev/null +++ b/translations/he/1-Introduction/2-history-of-ML/assignment.md @@ -0,0 +1,25 @@ + +# יצירת ציר זמן + +## הוראות + +באמצעות [הריפו הזה](https://github.com/Digital-Humanities-Toolkit/timeline-builder), צרו ציר זמן של היבט כלשהו בהיסטוריה של אלגוריתמים, מתמטיקה, סטטיסטיקה, בינה מלאכותית או למידת מכונה, או שילוב של אלה. תוכלו להתמקד באדם אחד, רעיון אחד, או תקופת זמן ארוכה של מחשבה. הקפידו להוסיף אלמנטים מולטימדיה. + +## קריטריונים להערכה + +| קריטריון | מצטיין | מספק | דורש שיפור | +| -------- | ----------------------------------------------- | ------------------------------------- | ------------------------------------------------------------- | +| | ציר זמן פרוס מוצג כעמוד GitHub | הקוד אינו שלם ולא פרוס | ציר הזמן אינו שלם, אינו מבוסס היטב ואינו פרוס | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/1-Introduction/3-fairness/README.md b/translations/he/1-Introduction/3-fairness/README.md new file mode 100644 index 00000000..9aac6b0a --- /dev/null +++ b/translations/he/1-Introduction/3-fairness/README.md @@ -0,0 +1,170 @@ + +# בניית פתרונות למידת מכונה עם AI אחראי + +![סיכום של AI אחראי בלמידת מכונה בסקיצה](../../../../sketchnotes/ml-fairness.png) +> סקיצה מאת [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [שאלון לפני ההרצאה](https://ff-quizzes.netlify.app/en/ml/) + +## מבוא + +בתוכנית לימודים זו, תתחילו לגלות כיצד למידת מכונה משפיעה על חיי היומיום שלנו. כבר עכשיו, מערכות ומודלים מעורבים במשימות קבלת החלטות יומיומיות, כמו אבחנות רפואיות, אישורי הלוואות או זיהוי הונאות. לכן, חשוב שהמודלים הללו יפעלו בצורה טובה ויספקו תוצאות אמינות. כמו כל יישום תוכנה, מערכות AI עשויות לאכזב או להוביל לתוצאה לא רצויה. זו הסיבה שחשוב להבין ולהסביר את ההתנהגות של מודל AI. + +דמיינו מה יכול לקרות כאשר הנתונים שבהם אתם משתמשים לבניית המודלים חסרים ייצוג של קבוצות דמוגרפיות מסוימות, כמו גזע, מגדר, השקפה פוליטית, דת, או מייצגים אותן באופן לא פרופורציונלי. ומה לגבי מצב שבו תוצאות המודל מפורשות כך שהן מעדיפות קבוצה דמוגרפית מסוימת? מה ההשלכות עבור היישום? בנוסף, מה קורה כאשר למודל יש תוצאה שלילית שפוגעת באנשים? מי אחראי להתנהגות של מערכות AI? אלו שאלות שנחקור בתוכנית לימודים זו. + +בשיעור זה תלמדו: + +- להעלות את המודעות לחשיבות ההוגנות בלמידת מכונה ולנזקים הקשורים להוגנות. +- להכיר את הפרקטיקה של חקר חריגים ותסריטים לא שגרתיים כדי להבטיח אמינות ובטיחות. +- להבין את הצורך להעצים את כולם על ידי עיצוב מערכות מכילות. +- לחקור את החשיבות של הגנה על פרטיות ואבטחת נתונים ואנשים. +- לראות את החשיבות של גישה שקופה להסבר התנהגות מודלים של AI. +- להיות מודעים לכך שאחריות היא חיונית לבניית אמון במערכות AI. + +## דרישות מקדימות + +כדרישה מקדימה, אנא עברו על מסלול הלמידה "עקרונות AI אחראי" וצפו בסרטון הבא בנושא: + +למדו עוד על AI אחראי על ידי מעקב אחר [מסלול הלמידה](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) + +[![הגישה של Microsoft ל-AI אחראי](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "הגישה של Microsoft ל-AI אחראי") + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון: הגישה של Microsoft ל-AI אחראי + +## הוגנות + +מערכות AI צריכות להתייחס לכולם באופן הוגן ולהימנע מהשפעה שונה על קבוצות דומות של אנשים. לדוגמה, כאשר מערכות AI מספקות המלצות לטיפול רפואי, בקשות להלוואות או תעסוקה, עליהן להציע את אותן המלצות לכל מי שיש לו סימפטומים, נסיבות פיננסיות או כישורים מקצועיים דומים. כל אחד מאיתנו נושא עמו הטיות מובנות שמשפיעות על ההחלטות והפעולות שלנו. הטיות אלו יכולות להיות ניכרות בנתונים שבהם אנו משתמשים לאימון מערכות AI. לעיתים, מניפולציה כזו מתרחשת באופן לא מכוון. קשה לעיתים לדעת באופן מודע מתי אנו מכניסים הטיה לנתונים. + +**"חוסר הוגנות"** כולל השפעות שליליות, או "נזקים", לקבוצה של אנשים, כמו אלו המוגדרים לפי גזע, מגדר, גיל או מצב נכות. הנזקים העיקריים הקשורים להוגנות יכולים להיות מסווגים כ: + +- **הקצאה**, אם מגדר או אתניות, לדוגמה, מועדפים על פני אחרים. +- **איכות השירות**. אם מאמנים את הנתונים לתרחיש ספציפי אך המציאות מורכבת יותר, זה מוביל לשירות בעל ביצועים ירודים. לדוגמה, מתקן סבון ידיים שלא הצליח לזהות אנשים עם עור כהה. [מקור](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) +- **השמצה**. ביקורת לא הוגנת ותיוג של משהו או מישהו. לדוגמה, טכנולוגיית תיוג תמונות שגתה בתיוג תמונות של אנשים כהי עור כגורילות. +- **ייצוג יתר או חסר**. הרעיון הוא שקבוצה מסוימת אינה נראית במקצוע מסוים, וכל שירות או פונקציה שממשיכים לקדם זאת תורמים לנזק. +- **סטראוטיפים**. שיוך קבוצה מסוימת לתכונות שהוקצו מראש. לדוגמה, מערכת תרגום בין אנגלית לטורקית עשויה לכלול אי דיוקים בשל מילים עם שיוך סטראוטיפי למגדר. + +![תרגום לטורקית](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png) +> תרגום לטורקית + +![תרגום חזרה לאנגלית](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png) +> תרגום חזרה לאנגלית + +בעת עיצוב ובדיקת מערכות AI, עלינו להבטיח שה-AI יהיה הוגן ולא יתוכנת לקבל החלטות מוטות או מפלות, שאסורות גם על בני אדם. הבטחת הוגנות ב-AI ובלמידת מכונה נותרת אתגר סוציוטכני מורכב. + +### אמינות ובטיחות + +כדי לבנות אמון, מערכות AI צריכות להיות אמינות, בטוחות ועקביות בתנאים רגילים ולא צפויים. חשוב לדעת כיצד מערכות AI יתנהגו במגוון מצבים, במיוחד כאשר מדובר בחריגים. בעת בניית פתרונות AI, יש להתמקד באופן משמעותי בטיפול במגוון רחב של נסיבות שהפתרונות עשויים להיתקל בהן. לדוגמה, רכב אוטונומי צריך לשים את בטיחות האנשים בראש סדר העדיפויות. כתוצאה מכך, ה-AI שמפעיל את הרכב צריך לשקול את כל התרחישים האפשריים שהרכב עשוי להיתקל בהם, כמו לילה, סופות רעמים או שלגים, ילדים שרצים ברחוב, חיות מחמד, עבודות בכביש וכו'. עד כמה מערכת AI יכולה להתמודד עם מגוון רחב של תנאים בצורה אמינה ובטוחה משקף את רמת הציפייה שהמדען נתונים או מפתח ה-AI לקחו בחשבון במהלך העיצוב או הבדיקה של המערכת. + +> [🎥 לחצו כאן לצפייה בסרטון: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl) + +### הכלה + +מערכות AI צריכות להיות מעוצבות כך שיתקשרו ויעצימו את כולם. בעת עיצוב ויישום מערכות AI, מדעני נתונים ומפתחי AI מזהים ומטפלים במחסומים פוטנציאליים במערכת שיכולים להוציא אנשים באופן לא מכוון. לדוגמה, ישנם מיליארד אנשים עם מוגבלויות ברחבי העולם. עם התקדמות ה-AI, הם יכולים לגשת למגוון רחב של מידע והזדמנויות בקלות רבה יותר בחיי היומיום שלהם. על ידי טיפול במחסומים, נוצרת הזדמנות לחדש ולפתח מוצרים AI עם חוויות טובות יותר שמועילות לכולם. + +> [🎥 לחצו כאן לצפייה בסרטון: הכלה ב-AI](https://www.microsoft.com/videoplayer/embed/RE4vl9v) + +### אבטחה ופרטיות + +מערכות AI צריכות להיות בטוחות ולכבד את פרטיות האנשים. אנשים נותנים פחות אמון במערכות שמסכנות את פרטיותם, המידע שלהם או חייהם. בעת אימון מודלים של למידת מכונה, אנו מסתמכים על נתונים כדי להפיק את התוצאות הטובות ביותר. תוך כדי כך, יש לקחת בחשבון את מקור הנתונים ואת שלמותם. לדוגמה, האם הנתונים הוגשו על ידי משתמשים או היו זמינים לציבור? לאחר מכן, בעת עבודה עם הנתונים, חשוב לפתח מערכות AI שיכולות להגן על מידע חסוי ולהתנגד להתקפות. ככל שה-AI הופך לנפוץ יותר, הגנה על פרטיות ואבטחת מידע אישי ועסקי חשובים הופכת לקריטית ומורכבת יותר. סוגיות פרטיות ואבטחת נתונים דורשות תשומת לב מיוחדת עבור AI מכיוון שגישה לנתונים חיונית למערכות AI כדי לבצע תחזיות והחלטות מדויקות ומושכלות על אנשים. + +> [🎥 לחצו כאן לצפייה בסרטון: אבטחה ב-AI](https://www.microsoft.com/videoplayer/embed/RE4voJF) + +- בתעשייה עשינו התקדמות משמעותית בפרטיות ואבטחה, מונעת באופן משמעותי על ידי רגולציות כמו ה-GDPR (General Data Protection Regulation). +- עם זאת, במערכות AI עלינו להכיר במתח בין הצורך ביותר נתונים אישיים כדי להפוך את המערכות ליותר אישיות ויעילות – לבין פרטיות. +- כמו עם לידת המחשבים המחוברים לאינטרנט, אנו גם רואים עלייה משמעותית במספר סוגיות האבטחה הקשורות ל-AI. +- באותו הזמן, ראינו שימוש ב-AI לשיפור האבטחה. לדוגמה, רוב סורקי האנטי-וירוס המודרניים מונעים על ידי AI היום. +- עלינו להבטיח שתהליכי מדע הנתונים שלנו ישתלבו בהרמוניה עם שיטות הפרטיות והאבטחה העדכניות ביותר. + +### שקיפות + +מערכות AI צריכות להיות מובנות. חלק קריטי בשקיפות הוא הסבר ההתנהגות של מערכות AI ושל רכיביהן. שיפור ההבנה של מערכות AI דורש שהגורמים המעורבים יבינו כיצד ולמה הן פועלות, כך שיוכלו לזהות בעיות ביצועים פוטנציאליות, חששות בטיחות ופרטיות, הטיות, פרקטיקות מפלות או תוצאות לא מכוונות. אנו גם מאמינים שמי שמשתמש במערכות AI צריך להיות כנה וגלוי לגבי מתי, למה ואיך הוא בוחר להפעיל אותן, כמו גם לגבי המגבלות של המערכות שהוא משתמש בהן. לדוגמה, אם בנק משתמש במערכת AI כדי לתמוך בהחלטות הלוואה לצרכנים, חשוב לבחון את התוצאות ולהבין אילו נתונים משפיעים על ההמלצות של המערכת. ממשלות מתחילות להסדיר את ה-AI בתעשיות שונות, ולכן מדעני נתונים וארגונים חייבים להסביר אם מערכת AI עומדת בדרישות הרגולציה, במיוחד כאשר יש תוצאה לא רצויה. + +> [🎥 לחצו כאן לצפייה בסרטון: שקיפות ב-AI](https://www.microsoft.com/videoplayer/embed/RE4voJF) + +- מכיוון שמערכות AI כל כך מורכבות, קשה להבין כיצד הן פועלות ולפרש את התוצאות. +- חוסר הבנה זה משפיע על האופן שבו מערכות אלו מנוהלות, מופעלות ומתועדות. +- חוסר הבנה זה משפיע יותר מכל על ההחלטות שמתקבלות באמצעות התוצאות שמערכות אלו מפיקות. + +### אחריות + +האנשים שמעצבים ומפעילים מערכות AI חייבים להיות אחראים לאופן שבו המערכות שלהם פועלות. הצורך באחריות הוא קריטי במיוחד בטכנולוגיות רגישות כמו זיהוי פנים. לאחרונה, ישנה דרישה גוברת לטכנולוגיית זיהוי פנים, במיוחד מארגוני אכיפת חוק שרואים את הפוטנציאל של הטכנולוגיה בשימושים כמו מציאת ילדים נעדרים. עם זאת, טכנולוגיות אלו עשויות לשמש ממשלות כדי לסכן את חירויות היסוד של אזרחיהן, למשל, על ידי הפעלת מעקב מתמשך על אנשים מסוימים. לכן, מדעני נתונים וארגונים צריכים להיות אחראים לאופן שבו מערכת ה-AI שלהם משפיעה על אנשים או על החברה. + +[![חוקר AI מוביל מזהיר מפני מעקב המוני באמצעות זיהוי פנים](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "הגישה של Microsoft ל-AI אחראי") + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון: אזהרות מפני מעקב המוני באמצעות זיהוי פנים + +בסופו של דבר, אחת השאלות הגדולות ביותר לדור שלנו, כראשון שמביא את ה-AI לחברה, היא כיצד להבטיח שמחשבים יישארו אחראים לאנשים וכיצד להבטיח שהאנשים שמעצבים מחשבים יישארו אחראים לכל השאר. + +## הערכת השפעה + +לפני אימון מודל למידת מכונה, חשוב לבצע הערכת השפעה כדי להבין את מטרת מערכת ה-AI; מה השימוש המיועד; היכן היא תופעל; ומי יתקשר עם המערכת. אלו מועילים לבוחנים או למבקרים שמעריכים את המערכת לדעת אילו גורמים יש לקחת בחשבון בעת זיהוי סיכונים פוטנציאליים ותוצאות צפויות. + +התחומים הבאים הם מוקדי תשומת לב בעת ביצוע הערכת השפעה: + +* **השפעה שלילית על אנשים**. מודעות לכל מגבלה או דרישה, שימוש לא נתמך או כל מגבלה ידועה שמפריעה לביצועי המערכת היא חיונית כדי להבטיח שהמערכת לא תופעל באופן שעלול לגרום נזק לאנשים. +* **דרישות נתונים**. הבנת האופן והיכן המערכת תשתמש בנתונים מאפשרת למבקרים לחקור כל דרישות נתונים שיש לקחת בחשבון (למשל, תקנות GDPR או HIPPA). בנוסף, יש לבחון האם מקור או כמות הנתונים מספקים לאימון. +* **סיכום השפעה**. איסוף רשימה של נזקים פוטנציאליים שעלולים להתעורר משימוש במערכת. לאורך מחזור החיים של למידת מכונה, יש לבדוק אם הבעיות שזוהו טופלו או נפתרו. +* **מטרות ישימות** לכל אחד מששת העקרונות המרכזיים. יש להעריך אם המטרות מכל אחד מהעקרונות הושגו ואם יש פערים. + +## איתור באגים עם AI אחראי + +בדומה לאיתור באגים ביישום תוכנה, איתור באגים במערכת AI הוא תהליך הכרחי לזיהוי ופתרון בעיות במערכת. ישנם גורמים רבים שיכולים להשפיע על כך שמודל לא יפעל כמצופה או באופן אחראי. רוב מדדי הביצועים המסורתיים של מודלים הם אגרגטים כמותיים של ביצועי המודל, שאינם מספיקים לניתוח כיצד מודל מפר את עקרונות ה-AI האחראי. יתרה מכך, מודל למידת מכונה הוא "קופסה שחורה" שמקשה להבין מה מניע את תוצאותיו או לספק הסבר כאשר הוא טועה. בהמשך הקורס, נלמד כיצד להשתמש בלוח המחוונים של AI אחראי כדי לעזור באיתור באגים במערכות AI. לוח המחוונים מספק כלי הוליסטי למדעני נתונים ומפתחי AI לבצע: + +* **ניתוח שגיאות**. לזהות את התפלגות השגיאות של המודל שיכולה להשפיע על ההוגנות או האמינות של המערכת. +* **סקירת מודל**. לגלות היכן יש פערים בביצועי המודל בין קבוצות נתונים שונות. +* **ניתוח נתונים**. להבין את התפלגות הנתונים ולזהות כל הטיה פוטנציאלית בנתונים שעלולה להוביל לבעיות הוגנות, הכלה ואמינות. +* **הבנת מודל**. להבין מה משפיע או משפיע על תחזיות המודל. זה עוזר להסביר את התנהגות המודל, שחשובה לשקיפות ואחריות. + +## 🚀 אתגר + +כדי למנוע נזקים מלהיות מוכנסים מלכתחילה, עלינו: + +- לכלול מגוון של רקעים ופרספקטיבות בקרב האנשים שעובדים על מערכות +- להשקיע במאגרי נתונים שמייצגים את המגוון של החברה שלנו +- לפתח שיטות טובות יותר לאורך מחזור החיים של למידת מכונה לזיהוי ותיקון AI אחראי כאשר הוא מתרחש + +חשבו על תרחישים אמיתיים שבהם חוסר אמינות של מודל ניכר בבנייה ובשימוש במודל. מה עוד כדאי לקחת בחשבון? + +## [שאלון לאחר ההרצאה](https://ff-quizzes.netlify.app/en/ml/) + +## סקירה ולימוד עצמי + +בשיעור זה, למדתם כמה יסודות של מושגי הוגנות וחוסר הוגנות בלמידת מכונה. +צפו בסדנה זו כדי להעמיק בנושאים: + +- במרדף אחר בינה מלאכותית אחראית: יישום עקרונות בפועל מאת בסמירה נושי, מהרנוש סמקי ואמיט שארמה + +[![Responsible AI Toolbox: מסגרת קוד פתוח לבניית בינה מלאכותית אחראית](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: מסגרת קוד פתוח לבניית בינה מלאכותית אחראית") + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון: RAI Toolbox: מסגרת קוד פתוח לבניית בינה מלאכותית אחראית מאת בסמירה נושי, מהרנוש סמקי ואמיט שארמה + +בנוסף, קראו: + +- מרכז המשאבים של Microsoft בנושא בינה מלאכותית אחראית: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- קבוצת המחקר FATE של Microsoft: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) + +RAI Toolbox: + +- [מאגר GitHub של Responsible AI Toolbox](https://github.com/microsoft/responsible-ai-toolbox) + +קראו על הכלים של Azure Machine Learning להבטחת הוגנות: + +- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) + +## משימה + +[חקור את RAI Toolbox](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/1-Introduction/3-fairness/assignment.md b/translations/he/1-Introduction/3-fairness/assignment.md new file mode 100644 index 00000000..4473fc6e --- /dev/null +++ b/translations/he/1-Introduction/3-fairness/assignment.md @@ -0,0 +1,25 @@ + +# חקור את ערכת הכלים של AI אחראי + +## הוראות + +בשיעור זה למדתם על ערכת הכלים של AI אחראי, פרויקט "קוד פתוח, מונע על ידי הקהילה, שנועד לעזור למדעני נתונים לנתח ולשפר מערכות AI." למשימה זו, חקרו אחד מהמחברות של RAI Toolbox [notebooks](https://github.com/microsoft/responsible-ai-toolbox/blob/main/notebooks/responsibleaidashboard/getting-started.ipynb) ודווחו על הממצאים שלכם במאמר או מצגת. + +## קריטריונים להערכה + +| קריטריונים | מצטיין | מספק | דורש שיפור | +| ----------- | ------- | ----- | ----------- | +| | מאמר או מצגת פאוורפוינט מוצגים, דנים במערכות של Fairlearn, המחברת שהורצה והמסקנות שהוסקו מהרצתה | מאמר מוצג ללא מסקנות | לא מוצג מאמר | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס AI [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/1-Introduction/4-techniques-of-ML/README.md b/translations/he/1-Introduction/4-techniques-of-ML/README.md new file mode 100644 index 00000000..172a556b --- /dev/null +++ b/translations/he/1-Introduction/4-techniques-of-ML/README.md @@ -0,0 +1,132 @@ + +# טכניקות בלמידת מכונה + +תהליך הבנייה, השימוש והתחזוקה של מודלים בלמידת מכונה והנתונים שהם משתמשים בהם שונה מאוד מתהליכי פיתוח אחרים. בשיעור זה, נבאר את התהליך ונפרט את הטכניקות המרכזיות שעליכם להכיר. אתם תלמדו: + +- להבין את התהליכים שמניעים למידת מכונה ברמה גבוהה. +- לחקור מושגים בסיסיים כמו 'מודלים', 'תחזיות' ו'נתוני אימון'. + +## [שאלון לפני השיעור](https://ff-quizzes.netlify.app/en/ml/) + +[![ML למתחילים - טכניקות בלמידת מכונה](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML למתחילים - טכניקות בלמידת מכונה") + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון קצר שמסביר את השיעור. + +## מבוא + +ברמה גבוהה, מלאכת יצירת תהליכי למידת מכונה (ML) מורכבת ממספר שלבים: + +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)! + +### מאפיינים ומטרה + +[מאפיין](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) הוא תכונה מדידה של הנתונים שלכם. בהרבה מערכי נתונים הוא מתבטא ככותרת עמודה כמו 'תאריך', 'גודל' או 'צבע'. משתנה המאפיין שלכם, שמיוצג בדרך כלל כ-`X` בקוד, מייצג את משתנה הקלט שישמש לאימון המודל. + +מטרה היא הדבר שאתם מנסים לחזות. המטרה, שמיוצגת בדרך כלל כ-`y` בקוד, מייצגת את התשובה לשאלה שאתם מנסים לשאול מהנתונים שלכם: בחודש דצמבר, איזה **צבע** דלעות יהיה הזול ביותר? בסן פרנסיסקו, אילו שכונות יהיו בעלות **מחיר** הנדל"ן הטוב ביותר? לעיתים המטרה מכונה גם תכונת תווית. + +### בחירת משתנה המאפיין שלכם + +🎓 **בחירת מאפיינים והפקת מאפיינים** איך תדעו איזה משתנה לבחור בעת בניית מודל? סביר להניח שתעברו תהליך של בחירת מאפיינים או הפקת מאפיינים כדי לבחור את המשתנים הנכונים למודל הביצועי ביותר. עם זאת, הם אינם אותו הדבר: "הפקת מאפיינים יוצרת מאפיינים חדשים מפונקציות של המאפיינים המקוריים, בעוד שבחירת מאפיינים מחזירה תת-קבוצה של המאפיינים." ([מקור](https://wikipedia.org/wiki/Feature_selection)) + +### ויזואליזציה של הנתונים שלכם + +היבט חשוב בארגז הכלים של מדען הנתונים הוא היכולת לייצג נתונים באופן חזותי באמצעות ספריות מצוינות כמו Seaborn או MatPlotLib. ייצוג הנתונים שלכם באופן חזותי עשוי לאפשר לכם לחשוף קשרים נסתרים שתוכלו לנצל. הוויזואליזציות שלכם עשויות גם לעזור לכם לחשוף הטיות או נתונים לא מאוזנים (כפי שגילינו ב[Classification](../../4-Classification/2-Classifiers-1/README.md)). + +### חלוקת מערך הנתונים שלכם + +לפני האימון, עליכם לחלק את מערך הנתונים שלכם לשני חלקים או יותר בגודל לא שווה שעדיין מייצגים את הנתונים היטב. + +- **אימון**. חלק זה של מערך הנתונים מותאם למודל שלכם כדי לאמן אותו. סט זה מהווה את רוב מערך הנתונים המקורי. +- **בדיקה**. מערך בדיקה הוא קבוצה עצמאית של נתונים, לעיתים נאספת מהנתונים המקוריים, שבה אתם משתמשים כדי לאשר את ביצועי המודל שנבנה. +- **אימות**. סט אימות הוא קבוצה עצמאית קטנה יותר של דוגמאות שבה אתם משתמשים לכוונון ההיפר-פרמטרים של המודל או הארכיטקטורה שלו כדי לשפר את המודל. בהתאם לגודל הנתונים שלכם ולשאלה שאתם שואלים, ייתכן שלא תצטרכו לבנות את הסט השלישי הזה (כפי שאנו מציינים ב[תחזיות סדרות זמן](../../7-TimeSeries/1-Introduction/README.md)). + +## בניית מודל + +באמצעות נתוני האימון שלכם, המטרה שלכם היא לבנות מודל, או ייצוג סטטיסטי של הנתונים שלכם, באמצעות אלגוריתמים שונים כדי **לאמן** אותו. אימון מודל חושף אותו לנתונים ומאפשר לו לבצע הנחות לגבי דפוסים שהוא מגלה, מאמת ומקבל או דוחה. + +### החלטה על שיטת אימון + +בהתאם לשאלה שלכם ולאופי הנתונים, תבחרו שיטה לאמן אותם. מעבר על [התיעוד של Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - שבו אנו משתמשים בקורס זה - תוכלו לחקור דרכים רבות לאמן מודל. בהתאם לניסיונכם, ייתכן שתצטרכו לנסות מספר שיטות שונות כדי לבנות את המודל הטוב ביותר. סביר להניח שתעברו תהליך שבו מדעני נתונים מעריכים את ביצועי המודל על ידי הזנת נתונים שלא נראו בעבר, בדיקת דיוק, הטיה ונושאים אחרים שמפחיתים את האיכות, ובחירת שיטת האימון המתאימה ביותר למשימה. + +### אימון מודל + +מצוידים בנתוני האימון שלכם, אתם מוכנים 'להתאים' אותם כדי ליצור מודל. תבחינו שבספריות ML רבות תמצאו את הקוד 'model.fit' - זהו הזמן שבו אתם שולחים את משתנה המאפיין שלכם כמערך ערכים (בדרך כלל 'X') ומשתנה מטרה (בדרך כלל 'y'). + +### הערכת המודל + +לאחר שתהליך האימון הושלם (זה יכול לקחת מספר איטרציות, או 'epochs', כדי לאמן מודל גדול), תוכלו להעריך את איכות המודל באמצעות נתוני בדיקה כדי למדוד את ביצועיו. נתונים אלו הם תת-קבוצה של הנתונים המקוריים שהמודל לא ניתח בעבר. תוכלו להדפיס טבלה של מדדים על איכות המודל שלכם. + +🎓 **התאמת מודל** + +בהקשר של למידת מכונה, התאמת מודל מתייחסת לדיוק הפונקציה הבסיסית של המודל כשהוא מנסה לנתח נתונים שאינם מוכרים לו. + +🎓 **התאמה חסרה** ו**התאמה יתרה** הן בעיות נפוצות שמפחיתות את איכות המודל, כאשר המודל מתאים או לא מספיק טוב או יותר מדי טוב. זה גורם למודל לבצע תחזיות שמותאמות או קרובות מדי או רחוקות מדי לנתוני האימון שלו. מודל מותאם יתר על המידה חוזה נתוני אימון טוב מדי מכיוון שהוא למד את הפרטים והרעש של הנתונים טוב מדי. מודל מותאם חסר אינו מדויק מכיוון שהוא לא יכול לנתח בצורה מדויקת את נתוני האימון שלו או נתונים שהוא עדיין לא 'ראה'. + +![מודל מותאם יתר](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png) +> אינפוגרפיקה מאת [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). + +## תחזית + +זהו הרגע שבו תוכלו להשתמש בנתונים חדשים לחלוטין כדי לבדוק את דיוק המודל שלכם. בהקשר של ML 'מופעל', שבו אתם בונים נכסי אינטרנט לשימוש המודל בייצור, תהליך זה עשוי לכלול איסוף קלט משתמש (לחיצה על כפתור, למשל) כדי להגדיר משתנה ולשלוח אותו למודל לצורך הסקה או הערכה. + +בשיעורים אלו, תגלו כיצד להשתמש בשלבים אלו כדי להכין, לבנות, לבדוק, להעריך ולחזות - כל המחוות של מדען נתונים ועוד, ככל שתתקדמו במסע שלכם להפוך ל'מהנדס ML מלא'. + +--- + +## 🚀אתגר + +ציירו תרשים זרימה שמייצג את שלבי העבודה של מומחה ML. היכן אתם רואים את עצמכם כרגע בתהליך? היכן אתם צופים שתתקלו בקשיים? מה נראה לכם קל? + +## [שאלון לאחר השיעור](https://ff-quizzes.netlify.app/en/ml/) + +## סקירה ולימוד עצמי + +חפשו באינטרנט ראיונות עם מדעני נתונים שמדברים על עבודתם היומיומית. הנה [אחד](https://www.youtube.com/watch?v=Z3IjgbbCEfs). + +## משימה + +[ראיינו מדען נתונים](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור הסמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/1-Introduction/4-techniques-of-ML/assignment.md b/translations/he/1-Introduction/4-techniques-of-ML/assignment.md new file mode 100644 index 00000000..81d01284 --- /dev/null +++ b/translations/he/1-Introduction/4-techniques-of-ML/assignment.md @@ -0,0 +1,25 @@ + +# ראיון עם מדען נתונים + +## הוראות + +בחברה שלכם, בקבוצת משתמשים, או בין חברים או עמיתים ללימודים, שוחחו עם מישהו שעובד באופן מקצועי כמדען נתונים. כתבו מאמר קצר (500 מילים) על העיסוקים היומיומיים שלהם. האם הם מתמחים בתחום מסוים, או שהם עובדים בגישה של 'מלא ערימה'? + +## קריטריונים להערכה + +| קריטריון | מצטיין | מספק | דורש שיפור | +| --------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------- | --------------------- | +| | מאמר באורך הנדרש, עם מקורות מצוינים, מוגש כקובץ .doc | המאמר עם ייחוס לקוי או קצר מהאורך הנדרש | לא הוגש מאמר | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/1-Introduction/README.md b/translations/he/1-Introduction/README.md new file mode 100644 index 00000000..1f5862f1 --- /dev/null +++ b/translations/he/1-Introduction/README.md @@ -0,0 +1,37 @@ + +# מבוא ללמידת מכונה + +בחלק זה של תוכנית הלימודים, תכירו את המושגים הבסיסיים שמאחורי תחום הלמידת המכונה, מה זה בעצם, ותלמדו על ההיסטוריה שלו ועל הטכניקות שהחוקרים משתמשים בהן כדי לעבוד איתו. בואו נחקור יחד את העולם החדש הזה של למידת מכונה! + +![globe](../../../1-Introduction/images/globe.jpg) +> צילום על ידי Bill Oxford ב-Unsplash + +### שיעורים + +1. [מבוא ללמידת מכונה](1-intro-to-ML/README.md) +1. [ההיסטוריה של למידת מכונה ובינה מלאכותית](2-history-of-ML/README.md) +1. [הוגנות בלמידת מכונה](3-fairness/README.md) +1. [טכניקות בלמידת מכונה](4-techniques-of-ML/README.md) + +### קרדיטים + +"מבוא ללמידת מכונה" נכתב באהבה על ידי צוות אנשים כולל [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) ו-[Jen Looper](https://twitter.com/jenlooper) + +"ההיסטוריה של למידת מכונה" נכתב באהבה על ידי [Jen Looper](https://twitter.com/jenlooper) ו-[Amy Boyd](https://twitter.com/AmyKateNicho) + +"הוגנות בלמידת מכונה" נכתב באהבה על ידי [Tomomi Imura](https://twitter.com/girliemac) + +"טכניקות בלמידת מכונה" נכתב באהבה על ידי [Jen Looper](https://twitter.com/jenlooper) ו-[Chris Noring](https://twitter.com/softchris) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/2-Regression/1-Tools/README.md b/translations/he/2-Regression/1-Tools/README.md new file mode 100644 index 00000000..1b272135 --- /dev/null +++ b/translations/he/2-Regression/1-Tools/README.md @@ -0,0 +1,239 @@ + +# התחילו עם Python ו-Scikit-learn עבור מודלים של רגרסיה + +![סיכום של רגרסיות בסקצ'נוט](../../../../sketchnotes/ml-regression.png) + +> סקצ'נוט מאת [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [שאלון לפני השיעור](https://ff-quizzes.netlify.app/en/ml/) + +> ### [השיעור הזה זמין גם ב-R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) + +## מבוא + +בארבעת השיעורים הללו, תלמדו כיצד לבנות מודלים של רגרסיה. נדון במה הם משמשים בקרוב. אבל לפני שתתחילו, ודאו שיש לכם את הכלים הנכונים כדי להתחיל את התהליך! + +בשיעור הזה תלמדו: + +- להגדיר את המחשב שלכם למשימות למידת מכונה מקומיות. +- לעבוד עם מחברות Jupyter. +- להשתמש ב-Scikit-learn, כולל התקנה. +- לחקור רגרסיה ליניארית באמצעות תרגיל מעשי. + +## התקנות והגדרות + +[![ML למתחילים - הגדרת הכלים שלכם לבניית מודלים של למידת מכונה](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML למתחילים - הגדרת הכלים שלכם לבניית מודלים של למידת מכונה") + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון קצר על הגדרת המחשב שלכם ללמידת מכונה. + +1. **התקינו Python**. ודאו ש-[Python](https://www.python.org/downloads/) מותקן במחשב שלכם. תשתמשו ב-Python עבור משימות רבות במדעי הנתונים ולמידת מכונה. רוב מערכות המחשב כבר כוללות התקנה של Python. ישנם [חבילות קוד Python](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) שימושיות שיכולות להקל על ההגדרה עבור חלק מהמשתמשים. + + עם זאת, שימושים מסוימים ב-Python דורשים גרסה אחת של התוכנה, בעוד אחרים דורשים גרסה שונה. לכן, כדאי לעבוד בתוך [סביבה וירטואלית](https://docs.python.org/3/library/venv.html). + +2. **התקינו Visual Studio Code**. ודאו ש-Visual Studio Code מותקן במחשב שלכם. עקבו אחר ההוראות הללו ל-[התקנת Visual Studio Code](https://code.visualstudio.com/) עבור התקנה בסיסית. אתם הולכים להשתמש ב-Python בתוך Visual Studio Code בקורס הזה, אז אולי תרצו ללמוד כיצד [להגדיר את Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) לפיתוח ב-Python. + + > תרגישו בנוח עם Python על ידי עבודה עם אוסף זה של [מודולי למידה](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) + > + > [![הגדרת Python עם Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "הגדרת Python עם Visual Studio Code") + > + > 🎥 לחצו על התמונה למעלה לצפייה בסרטון: שימוש ב-Python בתוך VS Code. + +3. **התקינו Scikit-learn**, על ידי מעקב אחר [ההוראות הללו](https://scikit-learn.org/stable/install.html). מכיוון שאתם צריכים לוודא שאתם משתמשים ב-Python 3, מומלץ להשתמש בסביבה וירטואלית. שימו לב, אם אתם מתקינים את הספרייה הזו על Mac עם M1, יש הוראות מיוחדות בעמוד המקושר למעלה. + +4. **התקינו Jupyter Notebook**. תצטרכו [להתקין את חבילת Jupyter](https://pypi.org/project/jupyter/). + +## סביבת העבודה שלכם ללמידת מכונה + +אתם הולכים להשתמש ב-**מחברות** כדי לפתח את קוד ה-Python שלכם וליצור מודלים של למידת מכונה. סוג קובץ זה הוא כלי נפוץ עבור מדעני נתונים, וניתן לזהות אותו לפי הסיומת `.ipynb`. + +מחברות הן סביבה אינטראקטיבית שמאפשרת למפתח גם לקודד וגם להוסיף הערות ולכתוב תיעוד סביב הקוד, מה שמאוד מועיל עבור פרויקטים ניסיוניים או מחקריים. + +[![ML למתחילים - הגדרת מחברות Jupyter כדי להתחיל לבנות מודלים של רגרסיה](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML למתחילים - הגדרת מחברות Jupyter כדי להתחיל לבנות מודלים של רגרסיה") + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון קצר על ביצוע התרגיל הזה. + +### תרגיל - עבודה עם מחברת + +בתיקייה הזו, תמצאו את הקובץ _notebook.ipynb_. + +1. פתחו את _notebook.ipynb_ ב-Visual Studio Code. + + שרת Jupyter יתחיל עם Python 3+. תמצאו אזורים במחברת שניתן `להריץ`, חלקי קוד. תוכלו להריץ בלוק קוד על ידי בחירת האייקון שנראה כמו כפתור הפעלה. + +2. בחרו את האייקון `md` והוסיפו קצת Markdown, ואת הטקסט הבא **# ברוכים הבאים למחברת שלכם**. + + לאחר מכן, הוסיפו קצת קוד Python. + +3. הקלידו **print('hello notebook')** בבלוק הקוד. +4. בחרו את החץ כדי להריץ את הקוד. + + אתם אמורים לראות את ההצהרה המודפסת: + + ```output + hello notebook + ``` + +![VS Code עם מחברת פתוחה](../../../../2-Regression/1-Tools/images/notebook.jpg) + +אתם יכולים לשלב את הקוד שלכם עם הערות כדי לתעד את המחברת בעצמכם. + +✅ חשבו לרגע כמה שונה סביבת העבודה של מפתחי אתרים מזו של מדעני נתונים. + +## התחלה עם Scikit-learn + +עכשיו ש-Python מוגדר בסביבה המקומית שלכם, ואתם מרגישים בנוח עם מחברות Jupyter, בואו נרגיש בנוח גם עם Scikit-learn (יש להגות `sci` כמו `science`). Scikit-learn מספקת [API נרחב](https://scikit-learn.org/stable/modules/classes.html#api-ref) שיעזור לכם לבצע משימות למידת מכונה. + +לפי [האתר שלהם](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn היא ספריית למידת מכונה בקוד פתוח שתומכת בלמידה מונחית ולמידה לא מונחית. היא גם מספקת כלים שונים להתאמת מודלים, עיבוד נתונים, בחירת מודלים והערכה, ועוד הרבה כלי עזר." + +בקורס הזה, תשתמשו ב-Scikit-learn ובכלים נוספים כדי לבנות מודלים של למידת מכונה לביצוע מה שאנחנו מכנים 'למידת מכונה מסורתית'. נמנענו בכוונה מרשתות נוירונים ולמידה עמוקה, שכן הם מכוסים טוב יותר בתוכנית הלימודים שלנו 'AI למתחילים' שתצא בקרוב. + +Scikit-learn הופכת את בניית המודלים והערכתם לשימוש לפשוטה. היא מתמקדת בעיקר בשימוש בנתונים מספריים וכוללת כמה מערכי נתונים מוכנים לשימוש ככלי למידה. היא גם כוללת מודלים מוכנים לסטודנטים לנסות. בואו נחקור את תהליך טעינת הנתונים המובנים מראש ושימוש באומדן מובנה למודל למידת מכונה הראשון עם Scikit-learn באמצעות נתונים בסיסיים. + +## תרגיל - המחברת הראשונה שלכם עם Scikit-learn + +> מדריך זה נוצר בהשראת [דוגמת הרגרסיה הליניארית](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) באתר של Scikit-learn. + +[![ML למתחילים - פרויקט הרגרסיה הליניארית הראשון שלכם ב-Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML למתחילים - פרויקט הרגרסיה הליניארית הראשון שלכם ב-Python") + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון קצר על ביצוע התרגיל הזה. + +בקובץ _notebook.ipynb_ המשויך לשיעור הזה, נקו את כל התאים על ידי לחיצה על אייקון 'פח האשפה'. + +בקטע הזה, תעבדו עם מערך נתונים קטן על סוכרת שמובנה ב-Scikit-learn לצורכי למידה. דמיינו שאתם רוצים לבדוק טיפול עבור חולי סוכרת. מודלים של למידת מכונה עשויים לעזור לכם לקבוע אילו חולים יגיבו טוב יותר לטיפול, בהתבסס על שילובים של משתנים. אפילו מודל רגרסיה בסיסי מאוד, כאשר הוא מוצג בצורה חזותית, עשוי להראות מידע על משתנים שיעזרו לכם לארגן את הניסויים הקליניים התיאורטיים שלכם. + +✅ ישנם סוגים רבים של שיטות רגרסיה, והבחירה תלויה בשאלה שאתם מחפשים תשובה עליה. אם אתם רוצים לחזות את הגובה הסביר של אדם בגיל מסוים, תשתמשו ברגרסיה ליניארית, שכן אתם מחפשים **ערך מספרי**. אם אתם מעוניינים לגלות האם סוג מסוים של מטבח צריך להיחשב טבעוני או לא, אתם מחפשים **שיוך קטגוריה**, ולכן תשתמשו ברגרסיה לוגיסטית. תלמדו יותר על רגרסיה לוגיסטית בהמשך. חשבו קצת על שאלות שתוכלו לשאול את הנתונים, ואיזו משיטה זו תהיה המתאימה יותר. + +בואו נתחיל במשימה הזו. + +### ייבוא ספריות + +למשימה הזו נייבא כמה ספריות: + +- **matplotlib**. זהו [כלי גרפי](https://matplotlib.org/) שימושי, ונשתמש בו ליצירת גרף קו. +- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) היא ספרייה שימושית לטיפול בנתונים מספריים ב-Python. +- **sklearn**. זו הספרייה [Scikit-learn](https://scikit-learn.org/stable/user_guide.html). + +ייבאו כמה ספריות שיעזרו לכם במשימות. + +1. הוסיפו ייבוא על ידי הקלדת הקוד הבא: + + ```python + import matplotlib.pyplot as plt + import numpy as np + from sklearn import datasets, linear_model, model_selection + ``` + + למעלה אתם מייבאים `matplotlib`, `numpy`, ואתם מייבאים `datasets`, `linear_model` ו-`model_selection` מ-`sklearn`. `model_selection` משמש לפיצול נתונים לסטי אימון ובדיקה. + +### מערך הנתונים של סוכרת + +מערך הנתונים המובנה [diabetes dataset](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) כולל 442 דגימות נתונים על סוכרת, עם 10 משתנים תכונה, שחלקם כוללים: + +- גיל: גיל בשנים +- BMI: מדד מסת גוף +- BP: לחץ דם ממוצע +- S1 TC: תאי T (סוג של תאי דם לבנים) + +✅ מערך הנתונים הזה כולל את מושג 'מין' כמשתנה תכונה חשוב למחקר על סוכרת. מערכי נתונים רפואיים רבים כוללים סוג זה של סיווג בינארי. חשבו קצת על איך סיווגים כאלה עשויים להוציא חלקים מסוימים מהאוכלוסייה מטיפולים. + +עכשיו, טענו את נתוני X ו-y. + +> 🎓 זכרו, זו למידה מונחית, ואנחנו צריכים מטרה בשם 'y'. + +בתא קוד חדש, טענו את מערך הנתונים של סוכרת על ידי קריאה ל-`load_diabetes()`. הקלט `return_X_y=True` מסמן ש-`X` יהיה מטריצת נתונים, ו-`y` יהיה יעד הרגרסיה. + +1. הוסיפו כמה פקודות הדפסה כדי להציג את הצורה של מטריצת הנתונים והאלמנט הראשון שלה: + + ```python + X, y = datasets.load_diabetes(return_X_y=True) + print(X.shape) + print(X[0]) + ``` + + מה שאתם מקבלים בתגובה הוא טופל. מה שאתם עושים הוא להקצות את שני הערכים הראשונים של הטופל ל-`X` ו-`y` בהתאמה. למדו יותר [על טופלים](https://wikipedia.org/wiki/Tuple). + + אתם יכולים לראות שלנתונים האלה יש 442 פריטים בצורת מערכים של 10 אלמנטים: + + ```text + (442, 10) + [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 + -0.04340085 -0.00259226 0.01990842 -0.01764613] + ``` + + ✅ חשבו קצת על הקשר בין הנתונים ליעד הרגרסיה. רגרסיה ליניארית חוזה קשרים בין תכונה X למשתנה יעד y. האם תוכלו למצוא את [היעד](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) עבור מערך הנתונים של סוכרת בתיעוד? מה מערך הנתונים הזה מדגים, בהתחשב ביעד? + +2. לאחר מכן, בחרו חלק ממערך הנתונים הזה כדי לשרטט על ידי בחירת העמודה השלישית של מערך הנתונים. תוכלו לעשות זאת על ידי שימוש באופרטור `:` כדי לבחור את כל השורות, ואז לבחור את העמודה השלישית באמצעות האינדקס (2). תוכלו גם לשנות את צורת הנתונים להיות מערך דו-ממדי - כפי שנדרש לשרטוט - על ידי שימוש ב-`reshape(n_rows, n_columns)`. אם אחד הפרמטרים הוא -1, הממד המתאים מחושב אוטומטית. + + ```python + X = X[:, 2] + X = X.reshape((-1,1)) + ``` + + ✅ בכל זמן, הדפיסו את הנתונים כדי לבדוק את צורתם. + +3. עכשיו כשיש לכם נתונים מוכנים לשרטוט, תוכלו לראות אם מכונה יכולה לעזור לקבוע חלוקה הגיונית בין המספרים במערך הנתונים הזה. כדי לעשות זאת, עליכם לפצל גם את הנתונים (X) וגם את היעד (y) לסטי בדיקה ואימון. ל-Scikit-learn יש דרך פשוטה לעשות זאת; תוכלו לפצל את נתוני הבדיקה שלכם בנקודה נתונה. + + ```python + X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) + ``` + +4. עכשיו אתם מוכנים לאמן את המודל שלכם! טענו את מודל הרגרסיה הליניארית ואמנו אותו עם סטי האימון של X ו-y באמצעות `model.fit()`: + + ```python + model = linear_model.LinearRegression() + model.fit(X_train, y_train) + ``` + + ✅ `model.fit()` היא פונקציה שתראו בהרבה ספריות למידת מכונה כמו TensorFlow. + +5. לאחר מכן, צרו תחזית באמצעות נתוני הבדיקה, באמצעות הפונקציה `predict()`. זה ישמש לציור הקו בין קבוצות הנתונים של המודל. + + ```python + y_pred = model.predict(X_test) + ``` + +6. עכשיו הגיע הזמן להציג את הנתונים בגרף. Matplotlib הוא כלי מאוד שימושי למשימה הזו. צרו גרף פיזור של כל נתוני הבדיקה של X ו-y, והשתמשו בתחזית כדי לצייר קו במקום המתאים ביותר, בין קבוצות הנתונים של המודל. + + ```python + plt.scatter(X_test, y_test, color='black') + plt.plot(X_test, y_pred, color='blue', linewidth=3) + plt.xlabel('Scaled BMIs') + plt.ylabel('Disease Progression') + plt.title('A Graph Plot Showing Diabetes Progression Against BMI') + plt.show() + ``` + + ![גרף פיזור שמציג נקודות נתונים סביב סוכרת](../../../../2-Regression/1-Tools/images/scatterplot.png) +✅ תחשבו קצת על מה שקורה כאן. קו ישר עובר דרך הרבה נקודות קטנות של נתונים, אבל מה הוא עושה בדיוק? האם אתם יכולים לראות איך אפשר להשתמש בקו הזה כדי לחזות איפה נקודת נתונים חדשה ולא מוכרת צריכה להתאים ביחס לציר ה-y של הגרף? נסו לנסח במילים את השימוש המעשי של המודל הזה. + +מזל טוב, יצרתם את מודל הרגרסיה הליניארית הראשון שלכם, ביצעתם תחזית באמצעותו, והצגתם אותה בגרף! + +--- +## 🚀אתגר + +צרו גרף עבור משתנה אחר מתוך מערך הנתונים הזה. רמז: ערכו את השורה הזו: `X = X[:,2]`. בהתחשב במטרת מערך הנתונים הזה, מה אתם יכולים לגלות על התקדמות מחלת הסוכרת? + +## [שאלון לאחר ההרצאה](https://ff-quizzes.netlify.app/en/ml/) + +## סקירה ולימוד עצמי + +במדריך הזה עבדתם עם רגרסיה ליניארית פשוטה, ולא עם רגרסיה חד-משתנית או רגרסיה מרובת משתנים. קראו מעט על ההבדלים בין השיטות הללו, או צפו ב-[סרטון הזה](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef). + +קראו עוד על מושג הרגרסיה וחשבו אילו סוגי שאלות ניתן לענות באמצעות הטכניקה הזו. קחו את [המדריך הזה](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) כדי להעמיק את ההבנה שלכם. + +## משימה + +[מערך נתונים אחר](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). בעוד שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/2-Regression/1-Tools/assignment.md b/translations/he/2-Regression/1-Tools/assignment.md new file mode 100644 index 00000000..a3d8bc7d --- /dev/null +++ b/translations/he/2-Regression/1-Tools/assignment.md @@ -0,0 +1,27 @@ + +# רגרסיה עם Scikit-learn + +## הוראות + +עיינו ב-[מערך הנתונים של Linnerud](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) ב-Scikit-learn. מערך נתונים זה כולל מספר [יעדים](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset): 'הוא מורכב משלושה משתנים של פעילות גופנית (נתונים) ושלושה משתנים פיזיולוגיים (יעדים) שנאספו מעשרים גברים בגיל העמידה במועדון כושר'. + +במילים שלכם, תארו כיצד ליצור מודל רגרסיה שימפה את הקשר בין היקף המותניים לבין מספר כפיפות הבטן שבוצעו. עשו את אותו הדבר עבור נקודות הנתונים האחרות במערך נתונים זה. + +## קריטריונים להערכה + +| קריטריון | מצטיין | מספק | דורש שיפור | +| ----------------------------- | --------------------------------- | --------------------------- | ------------------------- | +| הגשת פסקה תיאורית | פסקה כתובה היטב מוגשת | כמה משפטים מוגשים | לא נמסרה תיאור כלשהו | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/2-Regression/1-Tools/solution/Julia/README.md b/translations/he/2-Regression/1-Tools/solution/Julia/README.md new file mode 100644 index 00000000..42490383 --- /dev/null +++ b/translations/he/2-Regression/1-Tools/solution/Julia/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). בעוד שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/2-Regression/2-Data/README.md b/translations/he/2-Regression/2-Data/README.md new file mode 100644 index 00000000..d429100a --- /dev/null +++ b/translations/he/2-Regression/2-Data/README.md @@ -0,0 +1,226 @@ + +# בניית מודל רגרסיה באמצעות Scikit-learn: הכנת ויזואליזציה של נתונים + +![אינפוגרפיקה של ויזואליזציה של נתונים](../../../../2-Regression/2-Data/images/data-visualization.png) + +אינפוגרפיקה מאת [Dasani Madipalli](https://twitter.com/dasani_decoded) + +## [שאלון לפני השיעור](https://ff-quizzes.netlify.app/en/ml/) + +> ### [השיעור הזה זמין גם ב-R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html) + +## מבוא + +עכשיו, כשיש לך את הכלים הדרושים כדי להתחיל לבנות מודלים של למידת מכונה באמצעות Scikit-learn, אתה מוכן להתחיל לשאול שאלות על הנתונים שלך. כשאתה עובד עם נתונים ומיישם פתרונות ML, חשוב מאוד להבין איך לשאול את השאלה הנכונה כדי למצות את הפוטנציאל של מערך הנתונים שלך. + +בשיעור זה תלמד: + +- איך להכין את הנתונים שלך לבניית מודלים. +- איך להשתמש ב-Matplotlib לויזואליזציה של נתונים. + +## לשאול את השאלה הנכונה על הנתונים שלך + +השאלה שאתה רוצה לענות עליה תקבע איזה סוג של אלגוריתמים ML תשתמש. איכות התשובה שתקבל תהיה תלויה מאוד באופי הנתונים שלך. + +תסתכל על [הנתונים](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) שסופקו לשיעור הזה. אתה יכול לפתוח את קובץ ה-.csv הזה ב-VS Code. מבט מהיר מראה מיד שיש בו ערכים חסרים ותערובת של נתונים טקסטואליים ומספריים. יש גם עמודה מוזרה בשם 'Package' שבה הנתונים הם תערובת של 'sacks', 'bins' וערכים אחרים. למעשה, הנתונים די מבולגנים. + +[![ML למתחילים - איך לנתח ולנקות מערך נתונים](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML למתחילים - איך לנתח ולנקות מערך נתונים") + +> 🎥 לחץ על התמונה למעלה לצפייה בסרטון קצר שמסביר איך להכין את הנתונים לשיעור הזה. + +למעשה, זה לא מאוד נפוץ לקבל מערך נתונים שמוכן לחלוטין לשימוש ליצירת מודל ML ישר מהקופסה. בשיעור הזה תלמד איך להכין מערך נתונים גולמי באמצעות ספריות Python סטנדרטיות. תלמד גם טכניקות שונות לויזואליזציה של הנתונים. + +## מחקר מקרה: 'שוק הדלעות' + +בתיקייה זו תמצא קובץ .csv בתיקיית השורש `data` בשם [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) שמכיל 1757 שורות של נתונים על שוק הדלעות, מסודרות לפי ערים. אלו נתונים גולמיים שנלקחו מתוך [דוחות שוקי היבולים המיוחדים](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) שמופצים על ידי משרד החקלאות של ארצות הברית. + +### הכנת נתונים + +הנתונים האלה הם נחלת הכלל. ניתן להוריד אותם בקבצים נפרדים רבים, לפי עיר, מאתר ה-USDA. כדי להימנע ממספר רב של קבצים נפרדים, איחדנו את כל נתוני הערים לגיליון אלקטרוני אחד, כך שכבר _הכנו_ את הנתונים מעט. עכשיו, בואו נסתכל מקרוב על הנתונים. + +### נתוני הדלעות - מסקנות ראשוניות + +מה אתה שם לב לגבי הנתונים האלה? כבר ראית שיש תערובת של טקסטים, מספרים, ערכים חסרים וערכים מוזרים שצריך להבין. + +איזו שאלה אפשר לשאול על הנתונים האלה, באמצעות טכניקת רגרסיה? מה דעתך על "לחזות את המחיר של דלעת למכירה במהלך חודש נתון". מבט נוסף על הנתונים מראה שיש כמה שינויים שצריך לעשות כדי ליצור את מבנה הנתונים הדרוש למשימה. + +## תרגיל - ניתוח נתוני הדלעות + +בואו נשתמש ב-[Pandas](https://pandas.pydata.org/) (השם הוא קיצור של `Python Data Analysis`), כלי מאוד שימושי לעיצוב נתונים, כדי לנתח ולהכין את נתוני הדלעות. + +### קודם כל, בדוק אם יש תאריכים חסרים + +קודם כל תצטרך לנקוט צעדים כדי לבדוק אם יש תאריכים חסרים: + +1. המרה של התאריכים לפורמט חודשי (אלו תאריכים אמריקאים, כך שהפורמט הוא `MM/DD/YYYY`). +2. חילוץ החודש לעמודה חדשה. + +פתח את הקובץ _notebook.ipynb_ ב-Visual Studio Code וייבא את הגיליון האלקטרוני ל-DataFrame חדש של Pandas. + +1. השתמש בפונקציה `head()` כדי לצפות בחמש השורות הראשונות. + + ```python + import pandas as pd + pumpkins = pd.read_csv('../data/US-pumpkins.csv') + pumpkins.head() + ``` + + ✅ באיזו פונקציה היית משתמש כדי לצפות בחמש השורות האחרונות? + +1. בדוק אם יש נתונים חסרים ב-DataFrame הנוכחי: + + ```python + pumpkins.isnull().sum() + ``` + + יש נתונים חסרים, אבל אולי זה לא משנה למשימה הנוכחית. + +1. כדי להפוך את ה-DataFrame שלך לקל יותר לעבודה, בחר רק את העמודות שאתה צריך, באמצעות פונקציית `loc` שמחלצת מה-DataFrame המקורי קבוצת שורות (שנמסרות כפרמטר ראשון) ועמודות (שנמסרות כפרמטר שני). הביטוי `:` במקרה הזה אומר "כל השורות". + + ```python + columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] + pumpkins = pumpkins.loc[:, columns_to_select] + ``` + +### שנית, קבע את המחיר הממוצע של דלעת + +חשוב איך לקבוע את המחיר הממוצע של דלעת בחודש נתון. אילו עמודות היית בוחר למשימה הזו? רמז: תצטרך 3 עמודות. + +פתרון: קח את הממוצע של העמודות `Low Price` ו-`High Price` כדי למלא את עמודת המחיר החדשה, והמר את עמודת התאריך כך שתציג רק את החודש. למרבה המזל, לפי הבדיקה לעיל, אין נתונים חסרים עבור תאריכים או מחירים. + +1. כדי לחשב את הממוצע, הוסף את הקוד הבא: + + ```python + price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 + + month = pd.DatetimeIndex(pumpkins['Date']).month + + ``` + + ✅ אתה מוזמן להדפיס כל נתון שתרצה לבדוק באמצעות `print(month)`. + +2. עכשיו, העתק את הנתונים שהומרו ל-DataFrame חדש של Pandas: + + ```python + new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) + ``` + + הדפסת ה-DataFrame שלך תראה לך מערך נתונים נקי ומסודר שעליו תוכל לבנות את מודל הרגרסיה החדש שלך. + +### אבל רגע! יש כאן משהו מוזר + +אם תסתכל על עמודת `Package`, דלעות נמכרות בהרבה תצורות שונות. חלקן נמכרות במידות של '1 1/9 bushel', חלקן ב-'1/2 bushel', חלקן לפי דלעת, חלקן לפי פאונד, וחלקן בקופסאות גדולות עם רוחבים משתנים. + +> נראה שדלעות מאוד קשה לשקול באופן עקבי + +כשחוקרים את הנתונים המקוריים, מעניין שכל דבר עם `Unit of Sale` השווה ל-'EACH' או 'PER BIN' גם יש לו סוג `Package` לפי אינץ', לפי bin, או 'each'. נראה שדלעות מאוד קשה לשקול באופן עקבי, אז בואו נסנן אותן על ידי בחירת דלעות בלבד עם המחרוזת 'bushel' בעמודת `Package`. + +1. הוסף מסנן בראש הקובץ, מתחת לייבוא הראשוני של ה-.csv: + + ```python + pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] + ``` + + אם תדפיס את הנתונים עכשיו, תוכל לראות שאתה מקבל רק את 415 השורות בערך שמכילות דלעות לפי bushel. + +### אבל רגע! יש עוד משהו שצריך לעשות + +שמת לב שהכמות של bushel משתנה לפי שורה? אתה צריך לנרמל את התמחור כך שתראה את התמחור לפי bushel, אז תעשה קצת חישובים כדי לסטנדרט אותו. + +1. הוסף את השורות האלה אחרי הבלוק שיוצר את ה-DataFrame החדש של הדלעות: + + ```python + new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) + + new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2) + ``` + +✅ לפי [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), המשקל של bushel תלוי בסוג התוצרת, מכיוון שמדובר במדידת נפח. "bushel של עגבניות, למשל, אמור לשקול 56 פאונד... עלים וירוקים תופסים יותר מקום עם פחות משקל, כך ש-bushel של תרד שוקל רק 20 פאונד." זה די מסובך! בואו לא נטרח עם המרה של bushel לפאונד, ובמקום זאת נתמחר לפי bushel. כל המחקר הזה על bushels של דלעות, עם זאת, מראה כמה חשוב להבין את אופי הנתונים שלך! + +עכשיו, אתה יכול לנתח את התמחור ליחידה בהתבסס על מדידת ה-bushel שלהם. אם תדפיס את הנתונים פעם נוספת, תוכל לראות איך הם סטנדרטיים. + +✅ שמת לב שדלעות שנמכרות לפי חצי bushel הן מאוד יקרות? האם תוכל להבין למה? רמז: דלעות קטנות יקרות הרבה יותר מדלעות גדולות, כנראה בגלל שיש הרבה יותר מהן בכל bushel, בהתחשב במקום הלא מנוצל שנלקח על ידי דלעת פאי גדולה וחלולה אחת. + +## אסטרטגיות ויזואליזציה + +חלק מתפקידו של מדען הנתונים הוא להציג את האיכות והאופי של הנתונים שהוא עובד איתם. לשם כך, הם לעיתים קרובות יוצרים ויזואליזציות מעניינות, כמו גרפים, תרשימים ומפות, שמציגים היבטים שונים של הנתונים. בדרך זו, הם יכולים להראות באופן חזותי קשרים ופערים שקשה לחשוף בדרך אחרת. + +[![ML למתחילים - איך לויזואליזציה של נתונים עם Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML למתחילים - איך לויזואליזציה של נתונים עם Matplotlib") + +> 🎥 לחץ על התמונה למעלה לצפייה בסרטון קצר שמסביר איך לויזואליזציה של הנתונים לשיעור הזה. + +ויזואליזציות יכולות גם לעזור לקבוע את טכניקת הלמידת מכונה המתאימה ביותר לנתונים. למשל, תרשים פיזור שנראה כמו קו יכול להצביע על כך שהנתונים מתאימים לתרגיל רגרסיה ליניארית. + +אחת מספריות הויזואליזציה שעובדות היטב במחברות Jupyter היא [Matplotlib](https://matplotlib.org/) (שגם ראית בשיעור הקודם). + +> קבל עוד ניסיון עם ויזואליזציה של נתונים ב-[המדריכים האלה](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott). + +## תרגיל - להתנסות עם Matplotlib + +נסה ליצור כמה גרפים בסיסיים כדי להציג את ה-DataFrame החדש שיצרת. מה יראה גרף קו בסיסי? + +1. ייבא את Matplotlib בראש הקובץ, מתחת לייבוא של Pandas: + + ```python + import matplotlib.pyplot as plt + ``` + +1. הרץ מחדש את כל המחברת כדי לרענן. +1. בתחתית המחברת, הוסף תא כדי לשרטט את הנתונים כקופסה: + + ```python + price = new_pumpkins.Price + month = new_pumpkins.Month + plt.scatter(price, month) + plt.show() + ``` + + ![תרשים פיזור שמראה את הקשר בין מחיר לחודש](../../../../2-Regression/2-Data/images/scatterplot.png) + + האם זה גרף שימושי? האם משהו בו מפתיע אותך? + + זה לא מאוד שימושי מכיוון שכל מה שהוא עושה זה להציג את הנתונים שלך כפריסה של נקודות בחודש נתון. + +### להפוך את זה לשימושי + +כדי לקבל גרפים שמציגים נתונים שימושיים, בדרך כלל צריך לקבץ את הנתונים בצורה כלשהי. בואו ננסה ליצור גרף שבו ציר ה-y מציג את החודשים והנתונים מדגימים את התפלגות הנתונים. + +1. הוסף תא ליצירת תרשים עמודות מקובץ: + + ```python + new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') + plt.ylabel("Pumpkin Price") + ``` + + ![תרשים עמודות שמראה את הקשר בין מחיר לחודש](../../../../2-Regression/2-Data/images/barchart.png) + + זהו ויזואליזציה נתונים שימושית יותר! נראה שהיא מצביעה על כך שהמחיר הגבוה ביותר לדלעות מתרחש בספטמבר ובאוקטובר. האם זה תואם את הציפיות שלך? למה או למה לא? + +--- + +## 🚀אתגר + +חקור את סוגי הויזואליזציה השונים ש-Matplotlib מציעה. אילו סוגים הם המתאימים ביותר לבעיות רגרסיה? + +## [שאלון אחרי השיעור](https://ff-quizzes.netlify.app/en/ml/) + +## סקירה ולימוד עצמי + +תסתכל על הדרכים הרבות לויזואליזציה של נתונים. צור רשימה של הספריות השונות הזמינות וציין אילו מהן מתאימות לסוגי משימות מסוימים, למשל ויזואליזציות דו-ממדיות לעומת תלת-ממדיות. מה אתה מגלה? + +## משימה + +[חקירת ויזואליזציה](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/2-Regression/2-Data/assignment.md b/translations/he/2-Regression/2-Data/assignment.md new file mode 100644 index 00000000..0bcf2c2c --- /dev/null +++ b/translations/he/2-Regression/2-Data/assignment.md @@ -0,0 +1,23 @@ + +# חקר ויזואליזציות + +ישנן מספר ספריות שונות זמינות ליצירת ויזואליזציות של נתונים. צרו כמה ויזואליזציות באמצעות נתוני הדלעת בשיעור זה עם matplotlib ו-seaborn במחברת לדוגמה. אילו ספריות קלות יותר לשימוש? + +## קריטריונים להערכה + +| קריטריון | מצטיין | מספק | דורש שיפור | +| -------- | --------- | -------- | ----------------- | +| | מחברת מוגשת עם שתי חקירות/ויזואליזציות | מחברת מוגשת עם חקירה/ויזואליזציה אחת | מחברת לא מוגשת | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/2-Regression/2-Data/solution/Julia/README.md b/translations/he/2-Regression/2-Data/solution/Julia/README.md new file mode 100644 index 00000000..8e5c1899 --- /dev/null +++ b/translations/he/2-Regression/2-Data/solution/Julia/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [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 new file mode 100644 index 00000000..af0a5d08 --- /dev/null +++ b/translations/he/2-Regression/3-Linear/README.md @@ -0,0 +1,380 @@ + +# בניית מודל רגרסיה באמצעות Scikit-learn: רגרסיה בארבע דרכים + +![אינפוגרפיקה של רגרסיה לינארית מול פולינומית](../../../../2-Regression/3-Linear/images/linear-polynomial.png) +> אינפוגרפיקה מאת [Dasani Madipalli](https://twitter.com/dasani_decoded) +## [מבחן מקדים להרצאה](https://ff-quizzes.netlify.app/en/ml/) + +> ### [השיעור הזה זמין גם ב-R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) +### הקדמה + +עד כה חקרתם מהי רגרסיה עם נתוני דוגמה שנאספו ממאגר נתוני מחירי דלעת, אותו נשתמש לאורך השיעור הזה. כמו כן, ביצעתם ויזואליזציה של הנתונים באמצעות Matplotlib. + +עכשיו אתם מוכנים לצלול לעומק הרגרסיה עבור למידת מכונה. בעוד שויזואליזציה מאפשרת להבין את הנתונים, הכוח האמיתי של למידת מכונה מגיע מ_אימון מודלים_. מודלים מאומנים על נתונים היסטוריים כדי ללכוד באופן אוטומטי תלות בין נתונים, ומאפשרים לכם לחזות תוצאות עבור נתונים חדשים שהמודל לא ראה קודם. + +בשיעור הזה תלמדו יותר על שני סוגי רגרסיה: _רגרסיה לינארית בסיסית_ ו_רגרסיה פולינומית_, יחד עם מעט מתמטיקה שמאחורי הטכניקות הללו. מודלים אלו יאפשרו לנו לחזות מחירי דלעת בהתאם לנתוני קלט שונים. + +[![למידת מכונה למתחילים - הבנת רגרסיה לינארית](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "למידת מכונה למתחילים - הבנת רגרסיה לינארית") + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון קצר על רגרסיה לינארית. + +> לאורך הקורס הזה, אנו מניחים ידע מתמטי מינימלי, ושואפים להפוך אותו לנגיש לסטודנטים שמגיעים מתחומים אחרים. שימו לב להערות, 🧮 קריאות, דיאגרמות וכלים אחרים שיעזרו בהבנה. + +### דרישות מקדימות + +כעת אתם אמורים להיות מוכנים עם מבנה נתוני הדלעת שאנו בוחנים. תוכלו למצוא אותו טעון מראש ומנוקה בקובץ _notebook.ipynb_ של השיעור הזה. בקובץ, מחיר הדלעת מוצג לפי יחידת bushel במסגרת נתונים חדשה. ודאו שאתם יכולים להריץ את המחברות הללו ב-kernels ב-Visual Studio Code. + +### הכנה + +כתזכורת, אתם טוענים את הנתונים הללו כדי לשאול שאלות לגביהם. + +- מתי הזמן הטוב ביותר לקנות דלעות? +- איזה מחיר אני יכול לצפות עבור מארז של דלעות מיניאטוריות? +- האם כדאי לי לקנות אותן בסלים של חצי bushel או בקופסאות של 1 1/9 bushel? +בואו נמשיך לחקור את הנתונים הללו. + +בשיעור הקודם יצרתם מסגרת נתונים של Pandas ומילאתם אותה עם חלק ממאגר הנתונים המקורי, תוך סטנדרטיזציה של המחירים לפי bushel. עם זאת, על ידי כך הצלחתם לאסוף רק כ-400 נקודות נתונים ורק עבור חודשי הסתיו. + +הסתכלו על הנתונים שטעונים מראש במחברת המצורפת לשיעור הזה. הנתונים טעונים מראש וגרף פיזור ראשוני מוצג כדי להראות נתוני חודשים. אולי נוכל לקבל מעט יותר פרטים על טיב הנתונים על ידי ניקוי נוסף שלהם. + +## קו רגרסיה לינארית + +כפי שלמדתם בשיעור הראשון, המטרה של תרגיל רגרסיה לינארית היא להיות מסוגלים לשרטט קו כדי: + +- **להראות קשרים בין משתנים**. להראות את הקשר בין משתנים +- **לבצע תחזיות**. לבצע תחזיות מדויקות על מיקום נקודת נתונים חדשה ביחס לקו הזה. + +זה אופייני ל**רגרסיית ריבועים קטנים** לשרטט סוג כזה של קו. המונח 'ריבועים קטנים' מתייחס לכך שכל נקודות הנתונים שמסביב לקו הרגרסיה מרובעות ואז מסוכמות. באופן אידיאלי, הסכום הסופי הזה הוא קטן ככל האפשר, מכיוון שאנו רוצים מספר נמוך של שגיאות, או `ריבועים קטנים`. + +אנו עושים זאת מכיוון שאנו רוצים לדגם קו שיש לו את המרחק המצטבר הקטן ביותר מכל נקודות הנתונים שלנו. אנו גם מרבעים את המונחים לפני הסכימה מכיוון שאנו מתמקדים בגודל שלהם ולא בכיוונם. + +> **🧮 תראו לי את המתמטיקה** +> +> הקו הזה, שנקרא _קו ההתאמה הטוב ביותר_, יכול להיות מבוטא על ידי [משוואה](https://en.wikipedia.org/wiki/Simple_linear_regression): +> +> ``` +> Y = a + bX +> ``` +> +> `X` הוא המשתנה המסביר. `Y` הוא המשתנה התלוי. השיפוע של הקו הוא `b` ו-`a` הוא נקודת החיתוך עם ציר ה-Y, שמתייחסת לערך של `Y` כאשר `X = 0`. +> +>![חישוב השיפוע](../../../../2-Regression/3-Linear/images/slope.png) +> +> ראשית, חשבו את השיפוע `b`. אינפוגרפיקה מאת [Jen Looper](https://twitter.com/jenlooper) +> +> במילים אחרות, בהתייחס לשאלת הנתונים המקורית שלנו על דלעות: "חיזוי מחיר דלעת לפי bushel לפי חודש", `X` יתייחס למחיר ו-`Y` יתייחס לחודש המכירה. +> +>![השלמת המשוואה](../../../../2-Regression/3-Linear/images/calculation.png) +> +> חשבו את הערך של 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 יש לו מתאם נמוך. + +מודל רגרסיה לינארית טוב יהיה כזה שיש לו מקדם מתאם גבוה (קרוב יותר ל-1 מאשר ל-0) באמצעות שיטת רגרסיית ריבועים קטנים עם קו רגרסיה. + +✅ הריצו את המחברת המצורפת לשיעור הזה והסתכלו על גרף הפיזור של חודש מול מחיר. האם הנתונים שמקשרים בין חודש למחיר עבור מכירות דלעת נראים בעלי מתאם גבוה או נמוך, לפי הפרשנות הוויזואלית שלכם לגרף הפיזור? האם זה משתנה אם אתם משתמשים במדד מדויק יותר במקום `חודש`, למשל *יום בשנה* (כלומר מספר הימים מתחילת השנה)? + +בקוד למטה, נניח שניקינו את הנתונים וקיבלנו מסגרת נתונים בשם `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 + +> הקוד לניקוי הנתונים זמין ב-[`notebook.ipynb`](../../../../2-Regression/3-Linear/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 "למידת מכונה למתחילים - חיפוש מתאם: המפתח לרגרסיה לינארית") + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון קצר על מתאם. + +מהשיעור הקודם כנראה ראיתם שהמחיר הממוצע עבור חודשים שונים נראה כך: + +מחיר ממוצע לפי חודש + +זה מציע שיכול להיות מתאם, ואנו יכולים לנסות לאמן מודל רגרסיה לינארית כדי לחזות את הקשר בין `Month` ל-`Price`, או בין `DayOfYear` ל-`Price`. הנה גרף הפיזור שמראה את הקשר האחרון: + +גרף פיזור של מחיר מול יום בשנה + +בואו נראה אם יש מתאם באמצעות פונקציית `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` לפונקציית גרף הפיזור, נוכל לשרטט את כל הנקודות על אותו גרף: + +```python +ax=None +colors = ['red','blue','green','yellow'] +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) +``` + +גרף פיזור של מחיר מול יום בשנה + +החקירה שלנו מציעה שלזן יש השפעה גדולה יותר על המחיר הכולל מאשר תאריך המכירה בפועל. אנו יכולים לראות זאת עם גרף עמודות: + +```python +new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') +``` + +גרף עמודות של מחיר מול זן + +בואו נתמקד לרגע רק בזן אחד של דלעות, 'סוג פאי', ונראה מה ההשפעה של התאריך על המחיר: + +```python +pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] +pie_pumpkins.plot.scatter('DayOfYear','Price') +``` +גרף פיזור של מחיר מול יום בשנה + +אם עכשיו נחשב את המתאם בין `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") + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון קצר על רגרסיה לינארית ופולינומית. + +כדי לאמן את מודל הרגרסיה הלינארית שלנו, נשתמש בספריית **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: + +```python +X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) +y = pie_pumpkins['Price'] +``` + +> שימו לב שהיינו צריכים לבצע `reshape` על נתוני הקלט כדי שחבילת הרגרסיה הלינארית תבין אותם נכון. רגרסיה לינארית מצפה למערך דו-ממדי כקלט, שבו כל שורה במערך מתאימה לווקטור של תכונות קלט. במקרה שלנו, מכיוון שיש לנו רק קלט אחד - אנו צריכים מערך עם צורה 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`: + +```python +lin_reg = LinearRegression() +lin_reg.fit(X_train,y_train) +``` + +אובייקט `LinearRegression` לאחר התאמה (`fit`) מכיל את כל המקדמים של הרגרסיה, שניתן לגשת אליהם באמצעות תכונת `.coef_`. במקרה שלנו, יש רק מקדם אחד, שאמור להיות בסביבות `-0.017`. זה אומר שהמחירים נראים כאילו הם יורדים מעט עם הזמן, אבל לא יותר מדי, בסביבות 2 סנט ליום. אנו יכולים גם לגשת לנקודת החיתוך של הרגרסיה עם ציר ה-Y באמצעות `lin_reg.intercept_` - זה יהיה בסביבות `21` במקרה שלנו, מה שמעיד על המחיר בתחילת השנה. + +כדי לראות עד כמה המודל שלנו מדויק, אנו יכולים לחזות מחירים על מאגר נתוני הבדיקה, ואז למדוד עד כמה התחזיות שלנו קרובות לערכים הצפויים. ניתן לעשות זאת באמצעות מדד שגיאה ממוצעת ריבועית (MSE), שהוא הממוצע של כל ההבדלים הריבועיים בין הערך הצפוי לערך החזוי. + +```python +pred = lin_reg.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}%)') +``` +נראה שהשגיאה שלנו מתרכזת סביב 2 נקודות, שזה בערך 17%. לא כל כך טוב. אינדיקטור נוסף לאיכות המודל הוא **מקדם ההחלטיות**, שניתן לחשב כך: + +```python +score = lin_reg.score(X_train,y_train) +print('Model determination: ', score) +``` +אם הערך הוא 0, זה אומר שהמודל לא מתחשב בנתוני הקלט ופועל כ*מנבא הליניארי הגרוע ביותר*, שהוא פשוט ממוצע של התוצאה. ערך של 1 אומר שאנחנו יכולים לנבא באופן מושלם את כל התוצאות הצפויות. במקרה שלנו, המקדם הוא בערך 0.06, שזה די נמוך. + +ניתן גם לשרטט את נתוני הבדיקה יחד עם קו הרגרסיה כדי לראות טוב יותר איך הרגרסיה פועלת במקרה שלנו: + +```python +plt.scatter(X_test,y_test) +plt.plot(X_test,pred) +``` + +רגרסיה ליניארית + +## רגרסיה פולינומית + +סוג נוסף של רגרסיה ליניארית הוא רגרסיה פולינומית. בעוד שלפעמים יש קשר ליניארי בין משתנים - ככל שנפח הדלעת גדול יותר, כך המחיר גבוה יותר - לפעמים קשרים אלו לא יכולים להיות מיוצגים כמישור או כקו ישר. + +✅ הנה [כמה דוגמאות נוספות](https://online.stat.psu.edu/stat501/lesson/9/9.8) לנתונים שיכולים להשתמש ברגרסיה פולינומית. + +תסתכלו שוב על הקשר בין תאריך למחיר. האם פיזור הנתונים נראה כאילו הוא חייב להיות מנותח באמצעות קו ישר? האם מחירים לא יכולים להשתנות? במקרה כזה, ניתן לנסות רגרסיה פולינומית. + +✅ פולינומים הם ביטויים מתמטיים שיכולים לכלול משתנה אחד או יותר ומקדמים. + +רגרסיה פולינומית יוצרת קו מעוקל שמתאים טוב יותר לנתונים לא ליניאריים. במקרה שלנו, אם נכלול משתנה `DayOfYear` בריבוע בנתוני הקלט, נוכל להתאים את הנתונים שלנו לעקומה פרבולית, שתהיה לה מינימום בנקודה מסוימת במהלך השנה. + +ספריית Scikit-learn כוללת [API של צינור](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) שמאפשר לשלב שלבים שונים של עיבוד נתונים יחד. **צינור** הוא שרשרת של **אומדנים**. במקרה שלנו, ניצור צינור שמוסיף תחילה תכונות פולינומיות למודל שלנו, ואז מאמן את הרגרסיה: + +```python +from sklearn.preprocessing import PolynomialFeatures +from sklearn.pipeline import make_pipeline + +pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) + +pipeline.fit(X_train,y_train) +``` + +שימוש ב-`PolynomialFeatures(2)` אומר שנכלול את כל הפולינומים מדרגה שנייה מנתוני הקלט. במקרה שלנו זה פשוט אומר `DayOfYear`2, אבל אם ישנם שני משתני קלט X ו-Y, זה יוסיף X2, XY ו-Y2. ניתן גם להשתמש בפולינומים מדרגה גבוהה יותר אם רוצים. + +ניתן להשתמש בצינורות באותו אופן כמו באובייקט `LinearRegression` המקורי, כלומר ניתן להשתמש ב-`fit` בצינור ואז ב-`predict` כדי לקבל את תוצאות הניבוי. הנה הגרף שמראה את נתוני הבדיקה ואת עקומת הקירוב: + +רגרסיה פולינומית + +שימוש ברגרסיה פולינומית מאפשר לנו לקבל MSE מעט נמוך יותר ומקדם החלטיות גבוה יותר, אך לא באופן משמעותי. יש לקחת בחשבון תכונות נוספות! + +> ניתן לראות שהמחירים המינימליים של דלעות נצפים איפשהו סביב ליל כל הקדושים. איך אפשר להסביר את זה? + +🎃 כל הכבוד, יצרתם מודל שיכול לעזור לנבא את מחיר דלעות הפאי. כנראה שתוכלו לחזור על אותו תהליך עבור כל סוגי הדלעות, אבל זה יהיה מייגע. עכשיו נלמד איך לקחת בחשבון את סוג הדלעת במודל שלנו! + +## תכונות קטגוריות + +בעולם האידיאלי, נרצה להיות מסוגלים לנבא מחירים עבור סוגי דלעות שונים באמצעות אותו מודל. עם זאת, העמודה `Variety` שונה במקצת מעמודות כמו `Month`, מכיוון שהיא מכילה ערכים לא מספריים. עמודות כאלה נקראות **קטגוריות**. + +[![ML למתחילים - ניבוי תכונות קטגוריות עם רגרסיה ליניארית](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML למתחילים - ניבוי תכונות קטגוריות עם רגרסיה ליניארית") + +> 🎥 לחצו על התמונה למעלה לסרטון קצר על שימוש בתכונות קטגוריות. + +כאן ניתן לראות איך המחיר הממוצע תלוי בסוג הדלעת: + +מחיר ממוצע לפי סוג + +כדי לקחת את סוג הדלעת בחשבון, תחילה עלינו להמיר אותו לצורה מספרית, או **לקודד** אותו. ישנן מספר דרכים לעשות זאת: + +* **קידוד מספרי פשוט** יבנה טבלה של סוגי דלעות שונים, ואז יחליף את שם הסוג במספר אינדקס בטבלה. זו לא הבחירה הטובה ביותר עבור רגרסיה ליניארית, מכיוון שרגרסיה ליניארית מתחשבת בערך המספרי של האינדקס ומוסיפה אותו לתוצאה, תוך הכפלה במקדם מסוים. במקרה שלנו, הקשר בין מספר האינדקס למחיר הוא בבירור לא ליניארי, גם אם נוודא שהאינדקסים מסודרים בצורה מסוימת. +* **קידוד One-hot** יחליף את העמודה `Variety` בארבע עמודות שונות, אחת לכל סוג. כל עמודה תכיל `1` אם השורה המתאימה היא מסוג מסוים, ו-`0` אחרת. זה אומר שיהיו ארבעה מקדמים ברגרסיה ליניארית, אחד לכל סוג דלעת, שאחראי על "מחיר התחלתי" (או ליתר דיוק "מחיר נוסף") עבור אותו סוג מסוים. + +הקוד הבא מראה איך ניתן לקודד סוג דלעת בשיטת One-hot: + +```python +pd.get_dummies(new_pumpkins['Variety']) +``` + + ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE +----|-----------|-----------|--------------------------|---------- +70 | 0 | 0 | 0 | 1 +71 | 0 | 0 | 0 | 1 +... | ... | ... | ... | ... +1738 | 0 | 1 | 0 | 0 +1739 | 0 | 1 | 0 | 0 +1740 | 0 | 1 | 0 | 0 +1741 | 0 | 1 | 0 | 0 +1742 | 0 | 1 | 0 | 0 + +כדי לאמן רגרסיה ליניארית באמצעות סוג דלעת מקודד בשיטת One-hot כקלט, פשוט צריך לאתחל את נתוני `X` ו-`y` בצורה נכונה: + +```python +X = pd.get_dummies(new_pumpkins['Variety']) +y = new_pumpkins['Price'] +``` + +שאר הקוד זהה למה שהשתמשנו בו קודם כדי לאמן רגרסיה ליניארית. אם תנסו זאת, תראו ש-Mean Squared Error נשאר בערך אותו דבר, אבל מקדם ההחלטיות עולה משמעותית (~77%). כדי לקבל ניבויים מדויקים יותר, ניתן לקחת בחשבון תכונות קטגוריות נוספות, כמו גם תכונות מספריות, כגון `Month` או `DayOfYear`. כדי לקבל מערך גדול של תכונות, ניתן להשתמש ב-`join`: + +```python +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'] +``` + +כאן אנו לוקחים בחשבון גם את `City` ואת סוג האריזה, מה שמביא אותנו ל-MSE של 2.84 (10%) ולמקדם החלטיות של 0.94! + +## לשלב הכל יחד + +כדי ליצור את המודל הטוב ביותר, ניתן להשתמש בנתונים משולבים (קטגוריות מקודדות בשיטת One-hot + נתונים מספריים) מהדוגמה לעיל יחד עם רגרסיה פולינומית. הנה הקוד המלא לנוחיותכם: + +```python +# set up training data +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'] + +# make train-test split +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + +# setup and train the pipeline +pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) +pipeline.fit(X_train,y_train) + +# predict results for test data +pred = pipeline.predict(X_test) + +# calculate MSE and determination +mse = np.sqrt(mean_squared_error(y_test,pred)) +print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') + +score = pipeline.score(X_train,y_train) +print('Model determination: ', score) +``` + +זה אמור לתת לנו את מקדם ההחלטיות הטוב ביותר של כמעט 97%, ו-MSE=2.23 (~8% שגיאת ניבוי). + +| מודל | MSE | מקדם החלטיות | +|-------|-----|---------------| +| `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%. בחלק האחרון על רגרסיה תלמדו על רגרסיה לוגיסטית כדי לקבוע קטגוריות. + +--- +## 🚀אתגר + +בדקו משתנים שונים במחברת זו כדי לראות איך הקורלציה משפיעה על דיוק המודל. + +## [מבחן לאחר השיעור](https://ff-quizzes.netlify.app/en/ml/) + +## סקירה ולימוד עצמי + +בשיעור זה למדנו על רגרסיה ליניארית. ישנם סוגים חשובים נוספים של רגרסיה. קראו על טכניקות Stepwise, Ridge, Lasso ו-Elasticnet. קורס טוב ללמוד כדי להעמיק הוא [קורס הלמידה הסטטיסטית של סטנפורד](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning). + +## משימה + +[בנו מודל](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [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/assignment.md b/translations/he/2-Regression/3-Linear/assignment.md new file mode 100644 index 00000000..93957c30 --- /dev/null +++ b/translations/he/2-Regression/3-Linear/assignment.md @@ -0,0 +1,25 @@ + +# יצירת מודל רגרסיה + +## הוראות + +בשיעור זה הוצג כיצד לבנות מודל באמצעות רגרסיה לינארית ורגרסיה פולינומית. בעזרת הידע הזה, מצאו מערך נתונים או השתמשו באחד ממערכי הנתונים המובנים של Scikit-learn כדי לבנות מודל חדש. הסבירו במחברת שלכם מדוע בחרתם בטכניקה שבחרתם, והציגו את דיוק המודל שלכם. אם המודל אינו מדויק, הסבירו מדוע. + +## קריטריונים להערכה + +| קריטריון | מצטיין | מספק | דורש שיפור | +| -------- | ---------------------------------------------------------- | ------------------------- | --------------------------- | +| | מציג מחברת מלאה עם פתרון מתועד היטב | הפתרון אינו שלם | הפתרון פגום או מכיל באגים | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [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/Julia/README.md b/translations/he/2-Regression/3-Linear/solution/Julia/README.md new file mode 100644 index 00000000..7af54768 --- /dev/null +++ b/translations/he/2-Regression/3-Linear/solution/Julia/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור הסמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/2-Regression/4-Logistic/README.md b/translations/he/2-Regression/4-Logistic/README.md new file mode 100644 index 00000000..e09ba8bb --- /dev/null +++ b/translations/he/2-Regression/4-Logistic/README.md @@ -0,0 +1,412 @@ + +# רגרסיה לוגיסטית לחיזוי קטגוריות + +![אינפוגרפיקה של רגרסיה לוגיסטית מול רגרסיה ליניארית](../../../../2-Regression/4-Logistic/images/linear-vs-logistic.png) + +## [מבחן מקדים להרצאה](https://ff-quizzes.netlify.app/en/ml/) + +> ### [השיעור הזה זמין גם ב-R!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html) + +## מבוא + +בשיעור האחרון על רגרסיה, אחת מטכניקות ה-ML הקלאסיות הבסיסיות, נבחן את הרגרסיה הלוגיסטית. תשתמשו בטכניקה זו כדי לגלות דפוסים לחיזוי קטגוריות בינאריות. האם הממתק הזה הוא שוקולד או לא? האם המחלה הזו מדבקת או לא? האם הלקוח הזה יבחר במוצר הזה או לא? + +בשיעור הזה תלמדו: + +- ספרייה חדשה להדמיית נתונים +- טכניקות לרגרסיה לוגיסטית + +✅ העמיקו את ההבנה שלכם בעבודה עם סוג זה של רגרסיה במודול [Learn](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) + +## דרישות מקדימות + +לאחר שעבדנו עם נתוני הדלעת, אנחנו כבר מספיק מכירים אותם כדי להבין שיש קטגוריה בינארית אחת שאפשר לעבוד איתה: `Color`. + +בואו נבנה מודל רגרסיה לוגיסטית כדי לחזות, בהתבסס על משתנים מסוימים, _איזה צבע צפוי להיות לדלעת מסוימת_ (כתום 🎃 או לבן 👻). + +> למה אנחנו מדברים על סיווג בינארי בשיעור שמקושר לרגרסיה? רק מטעמי נוחות לשונית, שכן רגרסיה לוגיסטית היא [בעצם שיטת סיווג](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), אם כי מבוססת על ליניאריות. למדו על דרכים אחרות לסווג נתונים בקבוצת השיעורים הבאה. + +## הגדרת השאלה + +למטרותינו, נבטא זאת כבינארי: 'לבן' או 'לא לבן'. יש גם קטגוריה 'מפוספסת' במאגר הנתונים שלנו, אבל יש מעט מקרים שלה, ולכן לא נשתמש בה. היא נעלמת בכל מקרה ברגע שמסירים ערכים חסרים מהמאגר. + +> 🎃 עובדה מעניינת: לפעמים אנחנו קוראים לדלעות לבנות 'דלעות רפאים'. הן לא קלות לגילוף, ולכן הן פחות פופולריות מהכתומות, אבל הן נראות מגניבות! אז אפשר גם לנסח מחדש את השאלה שלנו כ: 'רפאים' או 'לא רפאים'. 👻 + +## על רגרסיה לוגיסטית + +רגרסיה לוגיסטית שונה מרגרסיה ליניארית, שלמדתם עליה קודם, בכמה דרכים חשובות. + +[![ML למתחילים - הבנת רגרסיה לוגיסטית לסיווג בלמידת מכונה](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "ML למתחילים - הבנת רגרסיה לוגיסטית לסיווג בלמידת מכונה") + +> 🎥 לחצו על התמונה למעלה לסרטון קצר על רגרסיה לוגיסטית. + +### סיווג בינארי + +רגרסיה לוגיסטית לא מציעה את אותן תכונות כמו רגרסיה ליניארית. הראשונה מציעה חיזוי של קטגוריה בינארית ("לבן או לא לבן"), בעוד שהאחרונה מסוגלת לחזות ערכים רציפים, למשל בהתבסס על מקור הדלעת וזמן הקטיף, _כמה המחיר שלה יעלה_. + +![מודל סיווג דלעות](../../../../2-Regression/4-Logistic/images/pumpkin-classifier.png) +> אינפוגרפיקה מאת [Dasani Madipalli](https://twitter.com/dasani_decoded) + +### סיווגים אחרים + +ישנם סוגים אחרים של רגרסיה לוגיסטית, כולל מולטינומיאלית ואורדינלית: + +- **מולטינומיאלית**, שכוללת יותר מקטגוריה אחת - "כתום, לבן ומפוספס". +- **אורדינלית**, שכוללת קטגוריות מסודרות, שימושית אם נרצה לסדר את התוצאות שלנו באופן לוגי, כמו הדלעות שלנו שמסודרות לפי מספר סופי של גדלים (מיני, קטן, בינוני, גדול, XL, XXL). + +![רגרסיה מולטינומיאלית מול אורדינלית](../../../../2-Regression/4-Logistic/images/multinomial-vs-ordinal.png) + +### המשתנים לא חייבים להיות מתואמים + +זוכרים איך רגרסיה ליניארית עבדה טוב יותר עם משתנים מתואמים? רגרסיה לוגיסטית היא ההפך - המשתנים לא חייבים להיות מתואמים. זה עובד עבור הנתונים האלה שיש להם מתאמים חלשים יחסית. + +### צריך הרבה נתונים נקיים + +רגרסיה לוגיסטית תיתן תוצאות מדויקות יותר אם תשתמשו ביותר נתונים; מאגר הנתונים הקטן שלנו אינו אופטימלי למשימה זו, אז קחו זאת בחשבון. + +[![ML למתחילים - ניתוח והכנת נתונים לרגרסיה לוגיסטית](https://img.youtube.com/vi/B2X4H9vcXTs/0.jpg)](https://youtu.be/B2X4H9vcXTs "ML למתחילים - ניתוח והכנת נתונים לרגרסיה לוגיסטית") + +> 🎥 לחצו על התמונה למעלה לסרטון קצר על הכנת נתונים לרגרסיה ליניארית. + +✅ חשבו על סוגי הנתונים שיתאימו לרגרסיה לוגיסטית. + +## תרגיל - ניקוי הנתונים + +ראשית, ננקה את הנתונים מעט, נסיר ערכים חסרים ונבחר רק חלק מהעמודות: + +1. הוסיפו את הקוד הבא: + + ```python + + columns_to_select = ['City Name','Package','Variety', 'Origin','Item Size', 'Color'] + pumpkins = full_pumpkins.loc[:, columns_to_select] + + pumpkins.dropna(inplace=True) + ``` + + תמיד אפשר להציץ במאגר הנתונים החדש שלכם: + + ```python + pumpkins.info + ``` + +### הדמיה - תרשים קטגוריאלי + +עד עכשיו טענתם את [מחברת ההתחלה](../../../../2-Regression/4-Logistic/notebook.ipynb) עם נתוני הדלעות שוב וניקיתם אותה כך שתשמר מאגר נתונים המכיל כמה משתנים, כולל `Color`. בואו נדמיין את מאגר הנתונים במחברת באמצעות ספרייה אחרת: [Seaborn](https://seaborn.pydata.org/index.html), שנבנתה על Matplotlib שבה השתמשנו קודם. + +Seaborn מציעה דרכים מעניינות להדמיית הנתונים שלכם. לדוגמה, אפשר להשוות את התפלגות הנתונים עבור כל `Variety` ו-`Color` בתרשים קטגוריאלי. + +1. צרו תרשים כזה באמצעות הפונקציה `catplot`, תוך שימוש בנתוני הדלעות שלנו `pumpkins`, והגדירו מיפוי צבעים לכל קטגוריית דלעת (כתום או לבן): + + ```python + import seaborn as sns + + palette = { + 'ORANGE': 'orange', + 'WHITE': 'wheat', + } + + sns.catplot( + data=pumpkins, y="Variety", hue="Color", kind="count", + palette=palette, + ) + ``` + + ![רשת של נתונים מדומיינים](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_1.png) + + בהתבוננות בנתונים, אפשר לראות כיצד נתוני הצבע קשורים לזן. + + ✅ בהתבסס על התרשים הקטגוריאלי הזה, אילו חקירות מעניינות אתם יכולים לדמיין? + +### עיבוד נתונים: קידוד תכונות ותוויות + +מאגר הנתונים של הדלעות שלנו מכיל ערכי מחרוזת עבור כל העמודות שלו. עבודה עם נתונים קטגוריאליים היא אינטואיטיבית עבור בני אדם אך לא עבור מכונות. אלגוריתמים של למידת מכונה עובדים טוב עם מספרים. לכן קידוד הוא שלב חשוב מאוד בשלב עיבוד הנתונים, מכיוון שהוא מאפשר לנו להפוך נתונים קטגוריאליים לנתונים מספריים, מבלי לאבד מידע. קידוד טוב מוביל לבניית מודל טוב. + +לקידוד תכונות יש שני סוגים עיקריים של מקודדים: + +1. מקודד אורדינלי: מתאים היטב למשתנים אורדינליים, שהם משתנים קטגוריאליים שבהם הנתונים שלהם עוקבים אחר סדר לוגי, כמו עמודת `Item Size` במאגר הנתונים שלנו. הוא יוצר מיפוי כך שכל קטגוריה מיוצגת על ידי מספר, שהוא הסדר של הקטגוריה בעמודה. + + ```python + from sklearn.preprocessing import OrdinalEncoder + + item_size_categories = [['sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo']] + ordinal_features = ['Item Size'] + ordinal_encoder = OrdinalEncoder(categories=item_size_categories) + ``` + +2. מקודד קטגוריאלי: מתאים היטב למשתנים נומינליים, שהם משתנים קטגוריאליים שבהם הנתונים שלהם אינם עוקבים אחר סדר לוגי, כמו כל התכונות השונות מ-`Item Size` במאגר הנתונים שלנו. זהו קידוד one-hot, כלומר כל קטגוריה מיוצגת על ידי עמודה בינארית: המשתנה המקודד שווה ל-1 אם הדלעת שייכת לזן הזה ול-0 אחרת. + + ```python + from sklearn.preprocessing import OneHotEncoder + + categorical_features = ['City Name', 'Package', 'Variety', 'Origin'] + categorical_encoder = OneHotEncoder(sparse_output=False) + ``` + +לאחר מכן, משתמשים ב-`ColumnTransformer` כדי לשלב מספר מקודדים לשלב אחד וליישם אותם על העמודות המתאימות. + +```python + from sklearn.compose import ColumnTransformer + + ct = ColumnTransformer(transformers=[ + ('ord', ordinal_encoder, ordinal_features), + ('cat', categorical_encoder, categorical_features) + ]) + + ct.set_output(transform='pandas') + encoded_features = ct.fit_transform(pumpkins) +``` + +מצד שני, לקידוד התווית, משתמשים במחלקת `LabelEncoder` של scikit-learn, שהיא מחלקת עזר לנרמל תוויות כך שיכילו רק ערכים בין 0 ל-n_classes-1 (כאן, 0 ו-1). + +```python + from sklearn.preprocessing import LabelEncoder + + label_encoder = LabelEncoder() + encoded_label = label_encoder.fit_transform(pumpkins['Color']) +``` + +לאחר שקידדנו את התכונות והתווית, אפשר למזג אותן למאגר נתונים חדש `encoded_pumpkins`. + +```python + encoded_pumpkins = encoded_features.assign(Color=encoded_label) +``` + +✅ מה היתרונות של שימוש במקודד אורדינלי עבור עמודת `Item Size`? + +### ניתוח קשרים בין משתנים + +עכשיו, לאחר שעיבדנו את הנתונים שלנו, אפשר לנתח את הקשרים בין התכונות לתווית כדי להבין עד כמה המודל יוכל לחזות את התווית בהתבסס על התכונות. הדרך הטובה ביותר לבצע ניתוח כזה היא באמצעות הדמיית הנתונים. נשתמש שוב בפונקציה `catplot` של Seaborn, כדי להמחיש את הקשרים בין `Item Size`, `Variety` ו-`Color` בתרשים קטגוריאלי. כדי להמחיש את הנתונים טוב יותר נשתמש בעמודת `Item Size` המקודדת ובעמודת `Variety` הלא מקודדת. + +```python + palette = { + 'ORANGE': 'orange', + 'WHITE': 'wheat', + } + pumpkins['Item Size'] = encoded_pumpkins['ord__Item Size'] + + g = sns.catplot( + data=pumpkins, + x="Item Size", y="Color", row='Variety', + kind="box", orient="h", + sharex=False, margin_titles=True, + height=1.8, aspect=4, palette=palette, + ) + g.set(xlabel="Item Size", ylabel="").set(xlim=(0,6)) + g.set_titles(row_template="{row_name}") +``` + +![תרשים קטגוריאלי של נתונים מדומיינים](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_2.png) + +### שימוש בתרשים swarm + +מכיוון ש-Color הוא קטגוריה בינארית (לבן או לא), הוא דורש '[גישה מיוחדת](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) להדמיה'. יש דרכים אחרות להמחיש את הקשר של קטגוריה זו עם משתנים אחרים. + +אפשר להמחיש משתנים זה לצד זה עם תרשימי Seaborn. + +1. נסו תרשים 'swarm' כדי להראות את התפלגות הערכים: + + ```python + palette = { + 0: 'orange', + 1: 'wheat' + } + sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette) + ``` + + ![swarm של נתונים מדומיינים](../../../../2-Regression/4-Logistic/images/swarm_2.png) + +**שימו לב**: הקוד למעלה עשוי ליצור אזהרה, מכיוון ש-Seaborn מתקשה לייצג כמות כזו של נקודות נתונים בתרשים swarm. פתרון אפשרי הוא להקטין את גודל הסמן, באמצעות הפרמטר 'size'. עם זאת, שימו לב שזה משפיע על קריאות התרשים. + +> **🧮 תראו לי את המתמטיקה** +> +> רגרסיה לוגיסטית מתבססת על הרעיון של 'סבירות מרבית' באמצעות [פונקציות סיגמואיד](https://wikipedia.org/wiki/Sigmoid_function). פונקציית סיגמואיד על תרשים נראית כמו צורת 'S'. היא לוקחת ערך וממפה אותו למקום בין 0 ל-1. העקומה שלה נקראת גם 'עקומה לוגיסטית'. הנוסחה שלה נראית כך: +> +> ![פונקציה לוגיסטית](../../../../2-Regression/4-Logistic/images/sigmoid.png) +> +> כאשר נקודת האמצע של הסיגמואיד נמצאת בנקודת ה-0 של x, L הוא הערך המרבי של העקומה, ו-k הוא תלילות העקומה. אם תוצאת הפונקציה היא יותר מ-0.5, התווית המדוברת תינתן למעמד '1' של הבחירה הבינארית. אם לא, היא תסווג כ-'0'. + +## בניית המודל שלכם + +בניית מודל למציאת סיווגים בינאריים היא פשוטה באופן מפתיע ב-Scikit-learn. + +[![ML למתחילים - רגרסיה לוגיסטית לסיווג נתונים](https://img.youtube.com/vi/MmZS2otPrQ8/0.jpg)](https://youtu.be/MmZS2otPrQ8 "ML למתחילים - רגרסיה לוגיסטית לסיווג נתונים") + +> 🎥 לחצו על התמונה למעלה לסרטון קצר על בניית מודל רגרסיה ליניארית. + +1. בחרו את המשתנים שתרצו להשתמש בהם במודל הסיווג שלכם וחלקו את קבוצות האימון והבדיקה באמצעות קריאה ל-`train_test_split()`: + + ```python + from sklearn.model_selection import train_test_split + + X = encoded_pumpkins[encoded_pumpkins.columns.difference(['Color'])] + y = encoded_pumpkins['Color'] + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + + ``` + +2. עכשיו אפשר לאמן את המודל, באמצעות קריאה ל-`fit()` עם נתוני האימון שלכם, ולהדפיס את התוצאה שלו: + + ```python + from sklearn.metrics import f1_score, classification_report + from sklearn.linear_model import LogisticRegression + + model = LogisticRegression() + model.fit(X_train, y_train) + predictions = model.predict(X_test) + + print(classification_report(y_test, predictions)) + print('Predicted labels: ', predictions) + print('F1-score: ', f1_score(y_test, predictions)) + ``` + + הסתכלו על לוח התוצאות של המודל שלכם. הוא לא רע, בהתחשב בכך שיש לכם רק כ-1000 שורות נתונים: + + ```output + precision recall f1-score support + + 0 0.94 0.98 0.96 166 + 1 0.85 0.67 0.75 33 + + accuracy 0.92 199 + macro avg 0.89 0.82 0.85 199 + weighted avg 0.92 0.92 0.92 199 + + Predicted labels: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 + 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 + 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 0 0 0 1 0 0 0 0 0 0 0 0 1 1] + F1-score: 0.7457627118644068 + ``` + +## הבנה טובה יותר באמצעות מטריצת בלבול + +בעוד שאפשר לקבל דוח תוצאות [מונחים](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) על ידי הדפסת הפריטים למעלה, ייתכן שתוכלו להבין את המודל שלכם ביתר קלות באמצעות [מטריצת בלבול](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) שתעזור לנו להבין כיצד המודל מתפקד. + +> 🎓 '[מטריצת בלבול](https://wikipedia.org/wiki/Confusion_matrix)' (או 'מטריצת שגיאות') היא טבלה שמבטאת את החיוביים והשליליים האמיתיים מול השגויים של המודל שלכם, ובכך מעריכה את דיוק התחזיות. + +1. כדי להשתמש במטריצת בלבול, קראו ל-`confusion_matrix()`: + + ```python + from sklearn.metrics import confusion_matrix + confusion_matrix(y_test, predictions) + ``` + + הסתכלו על מטריצת הבלבול של המודל שלכם: + + ```output + array([[162, 4], + [ 11, 22]]) + ``` + +ב-Scikit-learn, שורות (axis 0) הן תוויות אמיתיות ועמודות (axis 1) הן תוויות חזויות. + +| | 0 | 1 | +| :---: | :---: | :---: | +| 0 | TN | FP | +| 1 | FN | TP | + +מה קורה כאן? נניח שהמודל שלנו מתבקש לסווג דלעות בין שתי קטגוריות בינאריות, קטגוריה 'לבן' וקטגוריה 'לא-לבן'. + +- אם המודל שלכם חוזה דלעת כלא לבנה והיא שייכת לקטגוריה 'לא-לבן' במציאות, אנחנו קוראים לזה שלילי אמיתי (True Negative), שמוצג על ידי המספר בפינה השמאלית העליונה. +- אם המודל שלכם חוזה דלעת כלבנה והיא שייכת לקטגוריה 'לא-לבן' במציאות, אנחנו קוראים לזה שלילי שגוי (False Negative), שמוצג על ידי המספר בפינה השמאלית התחתונה. +- אם המודל שלכם חוזה דלעת כלא לבנה והיא שייכת לקטגוריה 'לבן' במציאות, אנחנו קוראים לזה חיובי שגוי (False Positive), שמוצג על ידי המספר בפינה הימנית העליונה. +- אם המודל שלכם חוזה דלעת כלבנה והיא שייכת לקטגוריה 'לבן' במציאות, אנחנו קוראים לזה חיובי אמיתי (True Positive), שמוצג על ידי המספר בפינה הימנית התחתונה. + +כפי שכנראה ניחשתם, עדיף שיהיו יותר חיוביים אמיתיים ושליליים אמיתיים ומספר נמוך יותר של חיוביים שגויים ושליליים שגויים, מה שמעיד על כך שהמודל מתפקד טוב יותר. +כיצד מטריצת הבלבול קשורה לדיוק ולשליפה? זכרו, דוח הסיווג שהודפס למעלה הציג דיוק (0.85) ושליפה (0.67). + +דיוק = tp / (tp + fp) = 22 / (22 + 4) = 0.8461538461538461 + +שליפה = tp / (tp + fn) = 22 / (22 + 11) = 0.6666666666666666 + +✅ ש: לפי מטריצת הבלבול, איך המודל ביצע? ת: לא רע; יש מספר טוב של שליליים אמיתיים אבל גם כמה שליליים שגויים. + +בואו נחזור למונחים שראינו קודם בעזרת המיפוי של TP/TN ו-FP/FN במטריצת הבלבול: + +🎓 דיוק: TP/(TP + FP) החלק של המקרים הרלוונטיים מתוך המקרים שנמצאו (לדוגמה, אילו תוויות סווגו היטב). + +🎓 שליפה: TP/(TP + FN) החלק של המקרים הרלוונטיים שנמצאו, בין אם סווגו היטב או לא. + +🎓 ציון f1: (2 * דיוק * שליפה)/(דיוק + שליפה) ממוצע משוקלל של דיוק ושליפה, כאשר הטוב ביותר הוא 1 והגרוע ביותר הוא 0. + +🎓 תמיכה: מספר המופעים של כל תווית שנמצאה. + +🎓 דיוק כללי: (TP + TN)/(TP + TN + FP + FN) אחוז התוויות שסווגו בצורה מדויקת עבור דגימה. + +🎓 ממוצע מאקרו: חישוב הממוצע הלא משוקלל של המדדים עבור כל תווית, מבלי להתחשב באי-איזון בין התוויות. + +🎓 ממוצע משוקלל: חישוב הממוצע של המדדים עבור כל תווית, תוך התחשבות באי-איזון בין התוויות על ידי שקילתן לפי התמיכה (מספר המקרים האמיתיים עבור כל תווית). + +✅ האם אתם יכולים לחשוב על איזה מדד כדאי להתמקד אם אתם רוצים שהמודל יפחית את מספר השליליים השגויים? + +## ויזואליזציה של עקומת ROC של המודל הזה + +[![ML למתחילים - ניתוח ביצועי רגרסיה לוגיסטית עם עקומות ROC](https://img.youtube.com/vi/GApO575jTA0/0.jpg)](https://youtu.be/GApO575jTA0 "ML למתחילים - ניתוח ביצועי רגרסיה לוגיסטית עם עקומות ROC") + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון קצר על עקומות ROC + +בואו נעשה ויזואליזציה נוספת כדי לראות את מה שנקרא 'עקומת ROC': + +```python +from sklearn.metrics import roc_curve, roc_auc_score +import matplotlib +import matplotlib.pyplot as plt +%matplotlib inline + +y_scores = model.predict_proba(X_test) +fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1]) + +fig = plt.figure(figsize=(6, 6)) +plt.plot([0, 1], [0, 1], 'k--') +plt.plot(fpr, tpr) +plt.xlabel('False Positive Rate') +plt.ylabel('True Positive Rate') +plt.title('ROC Curve') +plt.show() +``` + +באמצעות Matplotlib, שרטטו את [Receiving Operating Characteristic](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) או ROC של המודל. עקומות ROC משמשות לעיתים קרובות כדי לקבל מבט על תוצאות מסווג במונחים של חיוביים אמיתיים מול חיוביים שגויים. "עקומות ROC מציגות בדרך כלל את שיעור החיוביים האמיתיים על ציר ה-Y, ואת שיעור החיוביים השגויים על ציר ה-X." לכן, תלילות העקומה והמרחק בין קו האמצע לעקומה חשובים: אתם רוצים עקומה שמתקדמת במהירות למעלה ומעל הקו. במקרה שלנו, יש חיוביים שגויים בהתחלה, ואז הקו מתקדם למעלה ומעל בצורה נכונה: + +![ROC](../../../../2-Regression/4-Logistic/images/ROC_2.png) + +לבסוף, השתמשו ב-API של [`roc_auc_score`](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score) של Scikit-learn כדי לחשב את 'שטח מתחת לעקומה' (AUC): + +```python +auc = roc_auc_score(y_test,y_scores[:,1]) +print(auc) +``` +התוצאה היא `0.9749908725812341`. מכיוון ש-AUC נע בין 0 ל-1, אתם רוצים ציון גבוה, שכן מודל שמנבא בצורה נכונה ב-100% יקבל AUC של 1; במקרה הזה, המודל _די טוב_. + +בשיעורים עתידיים על סיווגים, תלמדו כיצד לשפר את ציוני המודל שלכם. אבל לעת עתה, ברכות! סיימתם את שיעורי הרגרסיה האלה! + +--- +## 🚀אתגר + +יש עוד הרבה ללמוד על רגרסיה לוגיסטית! אבל הדרך הטובה ביותר ללמוד היא להתנסות. מצאו מערך נתונים שמתאים לסוג זה של ניתוח ובנו מודל איתו. מה אתם לומדים? טיפ: נסו [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) עבור מערכי נתונים מעניינים. + +## [מבחן לאחר השיעור](https://ff-quizzes.netlify.app/en/ml/) + +## סקירה ולימוד עצמי + +קראו את העמודים הראשונים של [המאמר הזה מסטנפורד](https://web.stanford.edu/~jurafsky/slp3/5.pdf) על שימושים מעשיים לרגרסיה לוגיסטית. חשבו על משימות שמתאימות יותר לאחד מסוגי הרגרסיה שלמדנו עד כה. מה יעבוד הכי טוב? + +## משימה + +[נסו שוב את הרגרסיה הזו](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/2-Regression/4-Logistic/assignment.md b/translations/he/2-Regression/4-Logistic/assignment.md new file mode 100644 index 00000000..1fb50008 --- /dev/null +++ b/translations/he/2-Regression/4-Logistic/assignment.md @@ -0,0 +1,25 @@ + +# ניסיון חוזר עם רגרסיה + +## הוראות + +בשיעור השתמשת בתת-קבוצה של נתוני הדלעת. עכשיו, חזור לנתונים המקוריים ונסה להשתמש בכולם, לאחר ניקוי וסטנדרטיזציה, כדי לבנות מודל רגרסיה לוגיסטית. + +## קריטריונים להערכה + +| קריטריון | מצטיין | מספק | דורש שיפור | +| -------- | ----------------------------------------------------------------------- | --------------------------------------------------------- | -------------------------------------------------------- | +| | מוצג מחברת עם מודל מוסבר היטב ובעל ביצועים טובים | מוצג מחברת עם מודל בעל ביצועים מינימליים | מוצג מחברת עם מודל בעל ביצועים נמוכים או ללא מודל כלל | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/2-Regression/4-Logistic/solution/Julia/README.md b/translations/he/2-Regression/4-Logistic/solution/Julia/README.md new file mode 100644 index 00000000..4f66a0df --- /dev/null +++ b/translations/he/2-Regression/4-Logistic/solution/Julia/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). בעוד שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/2-Regression/README.md b/translations/he/2-Regression/README.md new file mode 100644 index 00000000..76e33197 --- /dev/null +++ b/translations/he/2-Regression/README.md @@ -0,0 +1,54 @@ + +# מודלים של רגרסיה ללמידת מכונה +## נושא אזורי: מודלים של רגרסיה למחירי דלעת בצפון אמריקה 🎃 + +בצפון אמריקה, דלעות משמשות לעיתים קרובות ליצירת פרצופים מפחידים לכבוד ליל כל הקדושים. בואו נגלה עוד על הירקות המרתקים האלה! + +![jack-o-lanterns](../../../2-Regression/images/jack-o-lanterns.jpg) +> צילום על ידי Beth Teutschmann ב-Unsplash + +## מה תלמדו + +[![מבוא לרגרסיה](https://img.youtube.com/vi/5QnJtDad4iQ/0.jpg)](https://youtu.be/5QnJtDad4iQ "סרטון מבוא לרגרסיה - לחצו לצפייה!") +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון מבוא קצר לשיעור זה + +השיעורים בסעיף זה עוסקים בסוגי רגרסיה בהקשר של למידת מכונה. מודלים של רגרסיה יכולים לעזור לקבוע את _הקשר_ בין משתנים. סוג זה של מודל יכול לחזות ערכים כמו אורך, טמפרטורה או גיל, ובכך לחשוף קשרים בין משתנים תוך ניתוח נקודות נתונים. + +בסדרת השיעורים הזו, תגלו את ההבדלים בין רגרסיה לינארית לרגרסיה לוגיסטית, ומתי כדאי להעדיף אחת על פני השנייה. + +[![למידת מכונה למתחילים - מבוא למודלים של רגרסיה בלמידת מכונה](https://img.youtube.com/vi/XA3OaoW86R8/0.jpg)](https://youtu.be/XA3OaoW86R8 "למידת מכונה למתחילים - מבוא למודלים של רגרסיה בלמידת מכונה") + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון קצר שמציג את מודלי הרגרסיה. + +בקבוצת השיעורים הזו, תתארגנו להתחיל משימות למידת מכונה, כולל הגדרת Visual Studio Code לניהול מחברות, הסביבה הנפוצה למדעני נתונים. תגלו את Scikit-learn, ספרייה ללמידת מכונה, ותבנו את המודלים הראשונים שלכם, עם דגש על מודלים של רגרסיה בפרק זה. + +> ישנם כלים שימושיים עם מעט קוד שיכולים לעזור לכם ללמוד על עבודה עם מודלים של רגרסיה. נסו [Azure ML למשימה זו](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +### שיעורים + +1. [כלים מקצועיים](1-Tools/README.md) +2. [ניהול נתונים](2-Data/README.md) +3. [רגרסיה לינארית ופולינומית](3-Linear/README.md) +4. [רגרסיה לוגיסטית](4-Logistic/README.md) + +--- +### קרדיטים + +"למידת מכונה עם רגרסיה" נכתב באהבה על ידי [Jen Looper](https://twitter.com/jenlooper) + +♥️ תורמי חידונים כוללים: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) ו-[Ornella Altunyan](https://twitter.com/ornelladotcom) + +מאגר הנתונים של דלעות הוצע על ידי [הפרויקט הזה ב-Kaggle](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) והנתונים שלו נלקחו מ-[דוחות סטנדרטיים של שווקי טרמינל לגידולים מיוחדים](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) שמופצים על ידי משרד החקלאות של ארצות הברית. הוספנו כמה נקודות סביב צבע בהתבסס על מגוון כדי לנרמל את ההתפלגות. נתונים אלה נמצאים בתחום הציבורי. + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/3-Web-App/1-Web-App/README.md b/translations/he/3-Web-App/1-Web-App/README.md new file mode 100644 index 00000000..11a12759 --- /dev/null +++ b/translations/he/3-Web-App/1-Web-App/README.md @@ -0,0 +1,359 @@ + +# בניית אפליקציית אינטרנט לשימוש במודל למידת מכונה + +בשיעור הזה, תאמנו מודל למידת מכונה על סט נתונים יוצא דופן: _תצפיות עב"מים במאה האחרונה_, שנאספו ממאגר הנתונים של NUFORC. + +תלמדו: + +- איך 'לשמר' מודל מאומן +- איך להשתמש במודל הזה באפליקציית Flask + +נמשיך להשתמש במחברות לניקוי נתונים ולאימון המודל שלנו, אבל תוכלו לקחת את התהליך צעד אחד קדימה על ידי חקר השימוש במודל "בשדה", כלומר: באפליקציית אינטרנט. + +כדי לעשות זאת, תצטרכו לבנות אפליקציית אינטרנט באמצעות Flask. + +## [שאלון לפני השיעור](https://ff-quizzes.netlify.app/en/ml/) + +## בניית אפליקציה + +ישנן מספר דרכים לבנות אפליקציות אינטרנט לצריכת מודלים של למידת מכונה. הארכיטקטורה של האינטרנט שלכם עשויה להשפיע על הדרך שבה המודל שלכם מאומן. דמיינו שאתם עובדים בעסק שבו קבוצת מדעני הנתונים אימנה מודל שהם רוצים שתשתמשו בו באפליקציה. + +### שיקולים + +ישנן שאלות רבות שעליכם לשאול: + +- **האם זו אפליקציית אינטרנט או אפליקציה לנייד?** אם אתם בונים אפליקציה לנייד או צריכים להשתמש במודל בהקשר של IoT, תוכלו להשתמש ב-[TensorFlow Lite](https://www.tensorflow.org/lite/) ולהשתמש במודל באפליקציות אנדרואיד או iOS. +- **היכן המודל יימצא?** בענן או מקומית? +- **תמיכה לא מקוונת.** האם האפליקציה צריכה לעבוד במצב לא מקוון? +- **איזו טכנולוגיה שימשה לאימון המודל?** הטכנולוגיה שנבחרה עשויה להשפיע על הכלים שתצטרכו להשתמש בהם. + - **שימוש ב-TensorFlow.** אם אתם מאמנים מודל באמצעות TensorFlow, למשל, האקוסיסטם הזה מספק את היכולת להמיר מודל TensorFlow לשימוש באפליקציית אינטרנט באמצעות [TensorFlow.js](https://www.tensorflow.org/js/). + - **שימוש ב-PyTorch.** אם אתם בונים מודל באמצעות ספרייה כמו [PyTorch](https://pytorch.org/), יש לכם אפשרות לייצא אותו בפורמט [ONNX](https://onnx.ai/) (Open Neural Network Exchange) לשימוש באפליקציות אינטרנט JavaScript שיכולות להשתמש ב-[Onnx Runtime](https://www.onnxruntime.ai/). אפשרות זו תיחקר בשיעור עתידי עבור מודל שאומן באמצעות Scikit-learn. + - **שימוש ב-Lobe.ai או Azure Custom Vision.** אם אתם משתמשים במערכת SaaS (תוכנה כשירות) ללמידת מכונה כמו [Lobe.ai](https://lobe.ai/) או [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) לאימון מודל, סוג זה של תוכנה מספק דרכים לייצא את המודל לפלטפורמות רבות, כולל בניית API מותאם אישית שניתן לשאול בענן על ידי האפליקציה המקוונת שלכם. + +יש לכם גם את האפשרות לבנות אפליקציית אינטרנט שלמה ב-Flask שתוכל לאמן את המודל בעצמה בדפדפן אינטרנט. ניתן לעשות זאת גם באמצעות TensorFlow.js בהקשר של JavaScript. + +למטרותינו, מכיוון שעבדנו עם מחברות מבוססות Python, בואו נחקור את השלבים שעליכם לבצע כדי לייצא מודל מאומן ממחברת כזו לפורמט שניתן לקריאה על ידי אפליקציית אינטרנט שנבנתה ב-Python. + +## כלי + +למשימה זו, תצטרכו שני כלים: Flask ו-Pickle, שניהם פועלים על Python. + +✅ מהו [Flask](https://palletsprojects.com/p/flask/)? מוגדר כ'מיקרו-פריימוורק' על ידי יוצריו, Flask מספק את התכונות הבסיסיות של פריימוורקים לאינטרנט באמצעות Python ומנוע תבניות לבניית דפי אינטרנט. עיינו ב-[מודול הלמידה הזה](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) כדי לתרגל בנייה עם Flask. + +✅ מהו [Pickle](https://docs.python.org/3/library/pickle.html)? Pickle 🥒 הוא מודול Python שמבצע סריאליזציה ודס-סריאליזציה של מבנה אובייקט ב-Python. כשאתם 'משמרים' מודל, אתם מבצעים סריאליזציה או משטחים את המבנה שלו לשימוש באינטרנט. שימו לב: Pickle אינו בטוח באופן אינהרנטי, אז היו זהירים אם תתבקשו 'לפרוק' קובץ. קובץ משומר מסומן בסיומת `.pkl`. + +## תרגיל - ניקוי הנתונים שלכם + +בשיעור הזה תשתמשו בנתונים מ-80,000 תצפיות עב"מים, שנאספו על ידי [NUFORC](https://nuforc.org) (המרכז הלאומי לדיווח על עב"מים). לנתונים האלה יש תיאורים מעניינים של תצפיות עב"מים, לדוגמה: + +- **תיאור ארוך לדוגמה.** "אדם יוצא מקרן אור שמאירה על שדה דשא בלילה ורץ לכיוון מגרש החניה של Texas Instruments". +- **תיאור קצר לדוגמה.** "האורות רדפו אחרינו". + +גיליון הנתונים [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) כולל עמודות על `עיר`, `מדינה` ו`ארץ` שבהן התצפית התרחשה, `צורה` של האובייקט ו`קו רוחב` ו`קו אורך`. + +ב-[מחברת](../../../../3-Web-App/1-Web-App/notebook.ipynb) הריקה שמצורפת לשיעור הזה: + +1. ייבאו את `pandas`, `matplotlib`, ו-`numpy` כפי שעשיתם בשיעורים קודמים וייבאו את גיליון הנתונים של עב"מים. תוכלו להסתכל על דוגמת סט נתונים: + + ```python + import pandas as pd + import numpy as np + + ufos = pd.read_csv('./data/ufos.csv') + ufos.head() + ``` + +1. המירו את נתוני העב"מים למסגרת נתונים קטנה עם כותרות חדשות. בדקו את הערכים הייחודיים בשדה `Country`. + + ```python + ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) + + ufos.Country.unique() + ``` + +1. עכשיו, תוכלו לצמצם את כמות הנתונים שעלינו להתמודד איתם על ידי הסרת ערכים ריקים וייבוא תצפיות בין 1-60 שניות בלבד: + + ```python + ufos.dropna(inplace=True) + + ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] + + ufos.info() + ``` + +1. ייבאו את ספריית `LabelEncoder` של Scikit-learn כדי להמיר את ערכי הטקסט של מדינות למספר: + + ✅ LabelEncoder מקודד נתונים לפי סדר אלפביתי + + ```python + from sklearn.preprocessing import LabelEncoder + + ufos['Country'] = LabelEncoder().fit_transform(ufos['Country']) + + ufos.head() + ``` + + הנתונים שלכם צריכים להיראות כך: + + ```output + Seconds Country Latitude Longitude + 2 20.0 3 53.200000 -2.916667 + 3 20.0 4 28.978333 -96.645833 + 14 30.0 4 35.823889 -80.253611 + 23 60.0 4 45.582778 -122.352222 + 24 3.0 3 51.783333 -0.783333 + ``` + +## תרגיל - בניית המודל שלכם + +עכשיו תוכלו להתכונן לאמן מודל על ידי חלוקת הנתונים לקבוצת אימון ובדיקה. + +1. בחרו את שלושת המאפיינים שתרצו לאמן עליהם כוקטור X שלכם, והוקטור y יהיה `Country`. אתם רוצים להיות מסוגלים להזין `Seconds`, `Latitude` ו-`Longitude` ולקבל מזהה מדינה להחזרה. + + ```python + from sklearn.model_selection import train_test_split + + Selected_features = ['Seconds','Latitude','Longitude'] + + X = ufos[Selected_features] + y = ufos['Country'] + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + ``` + +1. אימנו את המודל שלכם באמצעות רגרסיה לוגיסטית: + + ```python + from sklearn.metrics import accuracy_score, classification_report + from sklearn.linear_model import LogisticRegression + model = LogisticRegression() + model.fit(X_train, y_train) + predictions = model.predict(X_test) + + print(classification_report(y_test, predictions)) + print('Predicted labels: ', predictions) + print('Accuracy: ', accuracy_score(y_test, predictions)) + ``` + +הדיוק לא רע **(כ-95%)**, ולא מפתיע, מכיוון ש-`Country` ו-`Latitude/Longitude` מתואמים. + +המודל שיצרתם אינו מאוד מהפכני מכיוון שאתם אמורים להיות מסוגלים להסיק `Country` מ-`Latitude` ו-`Longitude`, אבל זהו תרגיל טוב לנסות לאמן מנתונים גולמיים שניקיתם, ייצאתם, ואז להשתמש במודל הזה באפליקציית אינטרנט. + +## תרגיל - 'שימור' המודל שלכם + +עכשיו, הגיע הזמן _לשמר_ את המודל שלכם! תוכלו לעשות זאת בכמה שורות קוד. לאחר שהוא _משומר_, טענו את המודל המשומר ובדקו אותו מול מערך נתונים לדוגמה שמכיל ערכים עבור שניות, קו רוחב וקו אורך. + +```python +import pickle +model_filename = 'ufo-model.pkl' +pickle.dump(model, open(model_filename,'wb')) + +model = pickle.load(open('ufo-model.pkl','rb')) +print(model.predict([[50,44,-12]])) +``` + +המודל מחזיר **'3'**, שזהו קוד המדינה עבור בריטניה. מדהים! 👽 + +## תרגיל - בניית אפליקציית Flask + +עכשיו תוכלו לבנות אפליקציית Flask שתוכל לקרוא את המודל שלכם ולהחזיר תוצאות דומות, אבל בצורה יותר נעימה לעין. + +1. התחילו ביצירת תיקייה בשם **web-app** ליד קובץ _notebook.ipynb_ שבו נמצא קובץ _ufo-model.pkl_ שלכם. + +1. בתיקייה הזו צרו עוד שלוש תיקיות: **static**, עם תיקייה **css** בתוכה, ו-**templates**. עכשיו אמורים להיות לכם הקבצים והתיקיות הבאים: + + ```output + web-app/ + static/ + css/ + templates/ + notebook.ipynb + ufo-model.pkl + ``` + + ✅ עיינו בתיקיית הפתרון כדי לראות את האפליקציה המוגמרת + +1. הקובץ הראשון שיש ליצור בתיקיית _web-app_ הוא קובץ **requirements.txt**. כמו _package.json_ באפליקציית JavaScript, קובץ זה מפרט את התלויות הנדרשות על ידי האפליקציה. ב-**requirements.txt** הוסיפו את השורות: + + ```text + scikit-learn + pandas + numpy + flask + ``` + +1. עכשיו, הריצו את הקובץ הזה על ידי ניווט ל-_web-app_: + + ```bash + cd web-app + ``` + +1. בטרמינל שלכם הקלידו `pip install`, כדי להתקין את הספריות המפורטות ב-_requirements.txt_: + + ```bash + pip install -r requirements.txt + ``` + +1. עכשיו, אתם מוכנים ליצור עוד שלושה קבצים כדי לסיים את האפליקציה: + + 1. צרו **app.py** בשורש. + 2. צרו **index.html** בתיקיית _templates_. + 3. צרו **styles.css** בתיקיית _static/css_. + +1. בנו את קובץ _styles.css_ עם כמה סגנונות: + + ```css + body { + width: 100%; + height: 100%; + font-family: 'Helvetica'; + background: black; + color: #fff; + text-align: center; + letter-spacing: 1.4px; + font-size: 30px; + } + + input { + min-width: 150px; + } + + .grid { + width: 300px; + border: 1px solid #2d2d2d; + display: grid; + justify-content: center; + margin: 20px auto; + } + + .box { + color: #fff; + background: #2d2d2d; + padding: 12px; + display: inline-block; + } + ``` + +1. לאחר מכן, בנו את קובץ _index.html_: + + ```html + + + + + 🛸 UFO Appearance Prediction! 👽 + + + + +
+ +
+ +

According to the number of seconds, latitude and longitude, which country is likely to have reported seeing a UFO?

+ +
+ + + + +
+ +

{{ prediction_text }}

+ +
+ +
+ + + + ``` + + שימו לב לתבניות בקובץ הזה. שימו לב לסינטקס 'mustache' סביב משתנים שיסופקו על ידי האפליקציה, כמו טקסט התחזית: `{{}}`. יש גם טופס ששולח תחזית לנתיב `/predict`. + + לבסוף, אתם מוכנים לבנות את קובץ ה-Python שמניע את צריכת המודל והצגת התחזיות: + +1. ב-`app.py` הוסיפו: + + ```python + import numpy as np + from flask import Flask, request, render_template + import pickle + + app = Flask(__name__) + + model = pickle.load(open("./ufo-model.pkl", "rb")) + + + @app.route("/") + def home(): + return render_template("index.html") + + + @app.route("/predict", methods=["POST"]) + def predict(): + + int_features = [int(x) for x in request.form.values()] + final_features = [np.array(int_features)] + prediction = model.predict(final_features) + + output = prediction[0] + + countries = ["Australia", "Canada", "Germany", "UK", "US"] + + return render_template( + "index.html", prediction_text="Likely country: {}".format(countries[output]) + ) + + + if __name__ == "__main__": + app.run(debug=True) + ``` + + > 💡 טיפ: כשאתם מוסיפים [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) בזמן הרצת אפליקציית האינטרנט באמצעות Flask, כל שינוי שתעשו באפליקציה שלכם ישתקף מיד ללא צורך להפעיל מחדש את השרת. שימו לב! אל תפעילו מצב זה באפליקציה בסביבת ייצור. + +אם תריצו `python app.py` או `python3 app.py` - שרת האינטרנט שלכם יתחיל לפעול, מקומית, ותוכלו למלא טופס קצר כדי לקבל תשובה לשאלה הבוערת שלכם על היכן נצפו עב"מים! + +לפני שתעשו זאת, הסתכלו על החלקים של `app.py`: + +1. קודם כל, התלויות נטענות והאפליקציה מתחילה. +1. לאחר מכן, המודל מיובא. +1. לאחר מכן, index.html מוצג בנתיב הבית. + +בנתיב `/predict`, מספר דברים קורים כשהטופס נשלח: + +1. משתני הטופס נאספים ומומרים למערך numpy. הם נשלחים למודל ותחזית מוחזרת. +2. המדינות שאנחנו רוצים להציג מוצגות מחדש כטקסט קריא מקוד המדינה החזוי שלהן, והערך הזה נשלח חזרה ל-index.html כדי להיות מוצג בתבנית. + +שימוש במודל בדרך זו, עם Flask ומודל משומר, הוא יחסית פשוט. הדבר הקשה ביותר הוא להבין באיזו צורה הנתונים צריכים להיות כדי להישלח למודל ולקבל תחזית. זה תלוי לחלוטין באיך המודל אומן. למודל הזה יש שלוש נקודות נתונים שצריך להזין כדי לקבל תחזית. + +בסביבה מקצועית, תוכלו לראות עד כמה תקשורת טובה היא הכרחית בין האנשים שמאמנים את המודל לבין אלה שצורכים אותו באפליקציית אינטרנט או נייד. במקרה שלנו, זה רק אדם אחד, אתם! + +--- + +## 🚀 אתגר + +במקום לעבוד במחברת ולייבא את המודל לאפליקציית Flask, תוכלו לאמן את המודל ממש בתוך אפליקציית Flask! נסו להמיר את קוד ה-Python במחברת, אולי לאחר ניקוי הנתונים שלכם, כדי לאמן את המודל מתוך האפליקציה בנתיב שנקרא `train`. מה היתרונות והחסרונות של שיטה זו? + +## [שאלון אחרי השיעור](https://ff-quizzes.netlify.app/en/ml/) + +## סקירה ולימוד עצמי + +ישנן דרכים רבות לבנות אפליקציית אינטרנט לצריכת מודלים של למידת מכונה. הכינו רשימה של הדרכים שבהן תוכלו להשתמש ב-JavaScript או Python כדי לבנות אפליקציית אינטרנט שתנצל למידת מכונה. שקלו ארכיטקטורה: האם המודל צריך להישאר באפליקציה או לחיות בענן? אם האפשרות השנייה, איך הייתם ניגשים אליו? ציירו מודל ארכיטקטוני לפתרון אינטרנטי של למידת מכונה. + +## משימה + +[נסו מודל אחר](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/3-Web-App/1-Web-App/assignment.md b/translations/he/3-Web-App/1-Web-App/assignment.md new file mode 100644 index 00000000..576c5d43 --- /dev/null +++ b/translations/he/3-Web-App/1-Web-App/assignment.md @@ -0,0 +1,25 @@ + +# נסה מודל אחר + +## הוראות + +עכשיו, לאחר שבנית אפליקציית אינטרנט אחת באמצעות מודל רגרסיה מאומן, השתמש באחד מהמודלים משיעור הרגרסיה הקודם כדי לבנות מחדש את אפליקציית האינטרנט הזו. תוכל לשמור על הסגנון או לעצב אותה באופן שונה כך שתשקף את נתוני הדלעת. שים לב לשנות את הקלטים כך שיתאימו לשיטת האימון של המודל שלך. + +## קריטריונים להערכה + +| קריטריונים | מצטיין | מספק | דורש שיפור | +| ------------------------- | ------------------------------------------------------ | ------------------------------------------------------ | ----------------------------------- | +| | אפליקציית האינטרנט פועלת כמצופה ומותקנת בענן | אפליקציית האינטרנט מכילה פגמים או מציגה תוצאות בלתי צפויות | אפליקציית האינטרנט אינה פועלת כראוי | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/3-Web-App/README.md b/translations/he/3-Web-App/README.md new file mode 100644 index 00000000..8c3dda2c --- /dev/null +++ b/translations/he/3-Web-App/README.md @@ -0,0 +1,35 @@ + +# בנה אפליקציית ווב לשימוש במודל ML שלך + +בחלק זה של הקורס, תיחשף לנושא יישומי בתחום למידת מכונה: כיצד לשמור את המודל שלך שנבנה ב-Scikit-learn כקובץ שניתן להשתמש בו כדי לבצע תחזיות בתוך אפליקציית ווב. לאחר שהמודל נשמר, תלמד כיצד להשתמש בו באפליקציית ווב שנבנתה ב-Flask. תחילה תיצור מודל באמצעות נתונים העוסקים בתצפיות על עב"מים! לאחר מכן, תבנה אפליקציית ווב שתאפשר לך להזין מספר שניות יחד עם ערכי קו רוחב וקו אורך כדי לחזות באיזו מדינה דווח על עב"ם. + +![חניית עב"מים](../../../3-Web-App/images/ufo.jpg) + +צילום על ידי Michael Herren ב-Unsplash + +## שיעורים + +1. [בנה אפליקציית ווב](1-Web-App/README.md) + +## קרדיטים + +"בנה אפליקציית ווב" נכתב באהבה על ידי [Jen Looper](https://twitter.com/jenlooper). + +♥️ החידונים נכתבו על ידי Rohan Raj. + +המאגר נלקח מ-[Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings). + +ארכיטקטורת אפליקציית הווב הוצעה בחלקה על ידי [המאמר הזה](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4) ו-[הריפו הזה](https://github.com/abhinavsagar/machine-learning-deployment) מאת Abhinav Sagar. + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. אנו לא נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/4-Classification/1-Introduction/README.md b/translations/he/4-Classification/1-Introduction/README.md new file mode 100644 index 00000000..8b9f7ebd --- /dev/null +++ b/translations/he/4-Classification/1-Introduction/README.md @@ -0,0 +1,313 @@ + +# מבוא לסיווג + +בארבעת השיעורים הללו, תחקור את אחד הנושאים המרכזיים בלמידת מכונה קלאסית - _סיווג_. נעבור יחד על שימוש באלגוריתמים שונים לסיווג עם מערך נתונים על כל המטבחים המדהימים של אסיה והודו. מקווים שאתה רעב! + +![רק קורטוב!](../../../../4-Classification/1-Introduction/images/pinch.png) + +> חוגגים את המטבחים הפאן-אסייתיים בשיעורים האלה! תמונה מאת [Jen Looper](https://twitter.com/jenlooper) + +סיווג הוא סוג של [למידה מונחית](https://wikipedia.org/wiki/Supervised_learning) שיש לה הרבה מן המשותף עם טכניקות רגרסיה. אם למידת מכונה עוסקת בניבוי ערכים או שמות לדברים באמצעות מערכי נתונים, אז סיווג בדרך כלל מתחלק לשתי קבוצות: _סיווג בינארי_ ו_סיווג רב-קטגורי_. + +[![מבוא לסיווג](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "מבוא לסיווג") + +> 🎥 לחץ על התמונה למעלה לצפייה בסרטון: ג'ון גוטאג מ-MIT מציג את נושא הסיווג + +זכור: + +- **רגרסיה ליניארית** עזרה לך לנבא קשרים בין משתנים ולבצע תחזיות מדויקות על מיקום נקודת נתונים חדשה ביחס לקו. לדוגמה, יכולת לנבא _מה יהיה מחיר דלעת בספטמבר לעומת דצמבר_. +- **רגרסיה לוגיסטית** עזרה לך לגלות "קטגוריות בינאריות": בנקודת מחיר זו, _האם הדלעת כתומה או לא כתומה_? + +סיווג משתמש באלגוריתמים שונים כדי לקבוע דרכים אחרות להגדיר את התווית או הקטגוריה של נקודת נתונים. בואו נעבוד עם נתוני המטבחים האלה כדי לראות האם, על ידי התבוננות בקבוצת מרכיבים, נוכל לקבוע את מקור המטבח. + +## [שאלון לפני השיעור](https://ff-quizzes.netlify.app/en/ml/) + +> ### [השיעור הזה זמין ב-R!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html) + +### מבוא + +סיווג הוא אחת הפעילויות המרכזיות של חוקרי למידת מכונה ומדעני נתונים. החל מסיווג בסיסי של ערך בינארי ("האם האימייל הזה הוא ספאם או לא?"), ועד לסיווג תמונות מורכב וחלוקה באמצעות ראייה ממוחשבת, תמיד מועיל להיות מסוגל למיין נתונים לקטגוריות ולשאול שאלות עליהם. + +במונחים מדעיים יותר, שיטת הסיווג שלך יוצרת מודל חיזוי שמאפשר לך למפות את הקשר בין משתני קלט למשתני פלט. + +![סיווג בינארי לעומת רב-קטגורי](../../../../4-Classification/1-Introduction/images/binary-multiclass.png) + +> בעיות בינאריות לעומת רב-קטגוריות עבור אלגוריתמי סיווג. אינפוגרפיקה מאת [Jen Looper](https://twitter.com/jenlooper) + +לפני שנתחיל בתהליך ניקוי הנתונים, ויזואליזציה שלהם והכנתם למשימות למידת המכונה שלנו, בואו נלמד מעט על הדרכים השונות שבהן ניתן להשתמש בלמידת מכונה כדי לסווג נתונים. + +בהשראת [סטטיסטיקה](https://wikipedia.org/wiki/Statistical_classification), סיווג באמצעות למידת מכונה קלאסית משתמש בתכונות כמו `smoker`, `weight`, ו-`age` כדי לקבוע _סבירות לפתח מחלה X_. כטכניקת למידה מונחית הדומה לתרגילי הרגרסיה שביצעתם קודם לכן, הנתונים שלכם מתויגים והאלגוריתמים של למידת המכונה משתמשים בתוויות אלו כדי לסווג ולחזות קטגוריות (או 'תכונות') של מערך נתונים ולהקצות אותם לקבוצה או לתוצאה. + +✅ הקדש רגע לדמיין מערך נתונים על מטבחים. מה מודל רב-קטגורי יוכל לענות עליו? מה מודל בינארי יוכל לענות עליו? מה אם היית רוצה לקבוע האם מטבח מסוים נוטה להשתמש בחילבה? מה אם היית רוצה לראות אם, בהתחשב בשקית מצרכים מלאה בכוכב אניס, ארטישוק, כרובית וחזרת, תוכל ליצור מנה הודית טיפוסית? + +[![סלים מסתוריים משוגעים](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "סלים מסתוריים משוגעים") + +> 🎥 לחץ על התמונה למעלה לצפייה בסרטון. כל הרעיון של התוכנית 'Chopped' הוא 'סל מסתורין' שבו שפים צריכים להכין מנה מתוך בחירה אקראית של מרכיבים. בטוח שמודל למידת מכונה היה עוזר! + +## שלום 'מסווג' + +השאלה שאנחנו רוצים לשאול על מערך הנתונים של המטבחים היא למעשה שאלה **רב-קטגורית**, מכיוון שיש לנו כמה מטבחים לאומיים פוטנציאליים לעבוד איתם. בהתחשב בקבוצת מרכיבים, לאיזו מהקטגוריות הרבות הנתונים יתאימו? + +Scikit-learn מציעה מספר אלגוריתמים שונים לשימוש בסיווג נתונים, בהתאם לסוג הבעיה שברצונך לפתור. בשני השיעורים הבאים תלמד על כמה מהאלגוריתמים הללו. + +## תרגיל - ניקוי ואיזון הנתונים שלך + +המשימה הראשונה, לפני תחילת הפרויקט, היא לנקות ול**אזן** את הנתונים שלך כדי לקבל תוצאות טובות יותר. התחל עם הקובץ הריק _notebook.ipynb_ בתיקיית השורש של תיקייה זו. + +הדבר הראשון להתקין הוא [imblearn](https://imbalanced-learn.org/stable/). זהו חבילת Scikit-learn שתאפשר לך לאזן את הנתונים בצורה טובה יותר (תלמד יותר על משימה זו בעוד רגע). + +1. כדי להתקין `imblearn`, הרץ `pip install`, כך: + + ```python + pip install imblearn + ``` + +1. ייבא את החבילות שאתה צריך כדי לייבא את הנתונים שלך ולבצע ויזואליזציה, וגם ייבא `SMOTE` מ-`imblearn`. + + ```python + import pandas as pd + import matplotlib.pyplot as plt + import matplotlib as mpl + import numpy as np + from imblearn.over_sampling import SMOTE + ``` + + עכשיו אתה מוכן לייבא את הנתונים. + +1. המשימה הבאה תהיה לייבא את הנתונים: + + ```python + df = pd.read_csv('../data/cuisines.csv') + ``` + + שימוש ב-`read_csv()` יקרא את תוכן קובץ ה-csv _cusines.csv_ וימקם אותו במשתנה `df`. + +1. בדוק את צורת הנתונים: + + ```python + df.head() + ``` + + חמש השורות הראשונות נראות כך: + + ```output + | | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | + | --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- | + | 0 | 65 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 1 | 66 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 2 | 67 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 3 | 68 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 4 | 69 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + ``` + +1. קבל מידע על הנתונים האלה על ידי קריאה ל-`info()`: + + ```python + df.info() + ``` + + הפלט שלך נראה כך: + + ```output + + RangeIndex: 2448 entries, 0 to 2447 + Columns: 385 entries, Unnamed: 0 to zucchini + dtypes: int64(384), object(1) + memory usage: 7.2+ MB + ``` + +## תרגיל - ללמוד על מטבחים + +עכשיו העבודה מתחילה להיות מעניינת יותר. בואו נגלה את התפלגות הנתונים, לפי מטבח. + +1. הצג את הנתונים כעמודות על ידי קריאה ל-`barh()`: + + ```python + df.cuisine.value_counts().plot.barh() + ``` + + ![התפלגות נתוני מטבחים](../../../../4-Classification/1-Introduction/images/cuisine-dist.png) + + יש מספר סופי של מטבחים, אבל התפלגות הנתונים אינה אחידה. אתה יכול לתקן את זה! לפני כן, חקור קצת יותר. + +1. גלה כמה נתונים זמינים לכל מטבח והדפס אותם: + + ```python + thai_df = df[(df.cuisine == "thai")] + japanese_df = df[(df.cuisine == "japanese")] + chinese_df = df[(df.cuisine == "chinese")] + indian_df = df[(df.cuisine == "indian")] + korean_df = df[(df.cuisine == "korean")] + + print(f'thai df: {thai_df.shape}') + print(f'japanese df: {japanese_df.shape}') + print(f'chinese df: {chinese_df.shape}') + print(f'indian df: {indian_df.shape}') + print(f'korean df: {korean_df.shape}') + ``` + + הפלט נראה כך: + + ```output + thai df: (289, 385) + japanese df: (320, 385) + chinese df: (442, 385) + indian df: (598, 385) + korean df: (799, 385) + ``` + +## גילוי מרכיבים + +עכשיו אתה יכול להעמיק בנתונים וללמוד מהם המרכיבים הטיפוסיים לכל מטבח. כדאי לנקות נתונים חוזרים שיוצרים בלבול בין מטבחים, אז בואו נלמד על הבעיה הזו. + +1. צור פונקציה `create_ingredient()` ב-Python כדי ליצור מסגרת נתונים של מרכיבים. פונקציה זו תתחיל בהשמטת עמודה לא מועילה ותמיין מרכיבים לפי הספירה שלהם: + + ```python + def create_ingredient_df(df): + ingredient_df = df.T.drop(['cuisine','Unnamed: 0']).sum(axis=1).to_frame('value') + ingredient_df = ingredient_df[(ingredient_df.T != 0).any()] + ingredient_df = ingredient_df.sort_values(by='value', ascending=False, + inplace=False) + return ingredient_df + ``` + + עכשיו תוכל להשתמש בפונקציה הזו כדי לקבל מושג על עשרת המרכיבים הפופולריים ביותר לפי מטבח. + +1. קרא ל-`create_ingredient()` והצג את הנתונים על ידי קריאה ל-`barh()`: + + ```python + thai_ingredient_df = create_ingredient_df(thai_df) + thai_ingredient_df.head(10).plot.barh() + ``` + + ![תאילנדי](../../../../4-Classification/1-Introduction/images/thai.png) + +1. עשה את אותו הדבר עבור הנתונים היפניים: + + ```python + japanese_ingredient_df = create_ingredient_df(japanese_df) + japanese_ingredient_df.head(10).plot.barh() + ``` + + ![יפני](../../../../4-Classification/1-Introduction/images/japanese.png) + +1. עכשיו עבור המרכיבים הסיניים: + + ```python + chinese_ingredient_df = create_ingredient_df(chinese_df) + chinese_ingredient_df.head(10).plot.barh() + ``` + + ![סיני](../../../../4-Classification/1-Introduction/images/chinese.png) + +1. הצג את המרכיבים ההודיים: + + ```python + indian_ingredient_df = create_ingredient_df(indian_df) + indian_ingredient_df.head(10).plot.barh() + ``` + + ![הודי](../../../../4-Classification/1-Introduction/images/indian.png) + +1. לבסוף, הצג את המרכיבים הקוריאניים: + + ```python + korean_ingredient_df = create_ingredient_df(korean_df) + korean_ingredient_df.head(10).plot.barh() + ``` + + ![קוריאני](../../../../4-Classification/1-Introduction/images/korean.png) + +1. עכשיו, השמט את המרכיבים הנפוצים ביותר שיוצרים בלבול בין מטבחים שונים, על ידי קריאה ל-`drop()`: + + כולם אוהבים אורז, שום וג'ינג'ר! + + ```python + feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) + labels_df = df.cuisine #.unique() + feature_df.head() + ``` + +## איזון מערך הנתונים + +עכשיו, לאחר שניקית את הנתונים, השתמש ב-[SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "טכניקת דגימה יתר סינתטית" - כדי לאזן אותם. + +1. קרא ל-`fit_resample()`, אסטרטגיה זו יוצרת דגימות חדשות באמצעות אינטרפולציה. + + ```python + oversample = SMOTE() + transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) + ``` + + על ידי איזון הנתונים שלך, תקבל תוצאות טובות יותר בעת סיווגם. חשב על סיווג בינארי. אם רוב הנתונים שלך הם מקטגוריה אחת, מודל למידת מכונה הולך לנבא את הקטגוריה הזו בתדירות גבוהה יותר, פשוט כי יש יותר נתונים עבורה. איזון הנתונים לוקח נתונים מוטים ועוזר להסיר את חוסר האיזון הזה. + +1. עכשיו תוכל לבדוק את מספרי התוויות לפי מרכיב: + + ```python + print(f'new label count: {transformed_label_df.value_counts()}') + print(f'old label count: {df.cuisine.value_counts()}') + ``` + + הפלט שלך נראה כך: + + ```output + new label count: korean 799 + chinese 799 + indian 799 + japanese 799 + thai 799 + Name: cuisine, dtype: int64 + old label count: korean 799 + indian 598 + chinese 442 + japanese 320 + thai 289 + Name: cuisine, dtype: int64 + ``` + + הנתונים נקיים, מאוזנים, ומאוד טעימים! + +1. השלב האחרון הוא לשמור את הנתונים המאוזנים שלך, כולל תוויות ותכונות, למסגרת נתונים חדשה שניתן לייצא לקובץ: + + ```python + transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') + ``` + +1. תוכל להציץ שוב בנתונים באמצעות `transformed_df.head()` ו-`transformed_df.info()`. שמור עותק של הנתונים האלה לשימוש בשיעורים עתידיים: + + ```python + transformed_df.head() + transformed_df.info() + transformed_df.to_csv("../data/cleaned_cuisines.csv") + ``` + + קובץ ה-CSV החדש הזה נמצא עכשיו בתיקיית הנתונים הראשית. + +--- + +## 🚀אתגר + +תוכנית הלימודים הזו מכילה כמה מערכי נתונים מעניינים. חפש בתיקיות `data` וראה אם יש מערכי נתונים שמתאימים לסיווג בינארי או רב-קטגורי? אילו שאלות היית שואל על מערך הנתונים הזה? + +## [שאלון לאחר השיעור](https://ff-quizzes.netlify.app/en/ml/) + +## סקירה ולימוד עצמי + +חקור את ה-API של SMOTE. לאילו מקרי שימוש הוא מתאים ביותר? אילו בעיות הוא פותר? + +## משימה + +[חקור שיטות סיווג](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/4-Classification/1-Introduction/assignment.md b/translations/he/4-Classification/1-Introduction/assignment.md new file mode 100644 index 00000000..0f73c54d --- /dev/null +++ b/translations/he/4-Classification/1-Introduction/assignment.md @@ -0,0 +1,25 @@ + +# חקור שיטות סיווג + +## הוראות + +ב[תיעוד של Scikit-learn](https://scikit-learn.org/stable/supervised_learning.html) תמצא רשימה גדולה של דרכים לסווג נתונים. ערוך חיפוש קצר בתיעוד הזה: המטרה שלך היא לחפש שיטות סיווג ולשייך אותן למערך נתונים בתוכנית הלימודים, שאלה שניתן לשאול לגביו, וטכניקת סיווג. צור גיליון אלקטרוני או טבלה בקובץ .doc והסבר כיצד מערך הנתונים יעבוד עם האלגוריתם של הסיווג. + +## קריטריונים להערכה + +| קריטריון | מצטיין | מספק | דורש שיפור | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| | מוצג מסמך שמסביר 5 אלגוריתמים לצד טכניקת סיווג. ההסבר מפורט וברור. | מוצג מסמך שמסביר 3 אלגוריתמים לצד טכניקת סיווג. ההסבר מפורט וברור. | מוצג מסמך שמסביר פחות משלושה אלגוריתמים לצד טכניקת סיווג, וההסבר אינו מפורט או ברור. | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/4-Classification/1-Introduction/solution/Julia/README.md b/translations/he/4-Classification/1-Introduction/solution/Julia/README.md new file mode 100644 index 00000000..406708b7 --- /dev/null +++ b/translations/he/4-Classification/1-Introduction/solution/Julia/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/4-Classification/2-Classifiers-1/README.md b/translations/he/4-Classification/2-Classifiers-1/README.md new file mode 100644 index 00000000..647e7cf0 --- /dev/null +++ b/translations/he/4-Classification/2-Classifiers-1/README.md @@ -0,0 +1,253 @@ + +# מסווגי מטבחים 1 + +בשיעור הזה, תשתמשו במאגר הנתונים ששמרתם מהשיעור הקודם, שמלא בנתונים מאוזנים ונקיים על מטבחים. + +תשתמשו במאגר הנתונים הזה עם מגוון מסווגים כדי _לחזות מטבח לאומי מסוים בהתבסס על קבוצת מרכיבים_. תוך כדי כך, תלמדו יותר על כמה מהדרכים שבהן ניתן להשתמש באלגוריתמים למשימות סיווג. + +## [שאלון לפני השיעור](https://ff-quizzes.netlify.app/en/ml/) +# הכנה + +בהנחה שסיימתם את [שיעור 1](../1-Introduction/README.md), ודאו שקובץ _cleaned_cuisines.csv_ נמצא בתיקיית השורש `/data` עבור ארבעת השיעורים הללו. + +## תרגיל - חיזוי מטבח לאומי + +1. בעבודה בתיקיית _notebook.ipynb_ של השיעור הזה, ייבאו את הקובץ יחד עם ספריית Pandas: + + ```python + import pandas as pd + cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv") + cuisines_df.head() + ``` + + הנתונים נראים כך: + +| | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | +| --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- | +| 0 | 0 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 1 | 1 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 2 | 2 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 3 | 3 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 4 | 4 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + + +1. עכשיו, ייבאו עוד כמה ספריות: + + ```python + from sklearn.linear_model import LogisticRegression + from sklearn.model_selection import train_test_split, cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve + from sklearn.svm import SVC + import numpy as np + ``` + +1. חלקו את הקואורדינטות X ו-y לשני מסגרות נתונים עבור אימון. `cuisine` יכולה להיות מסגרת הנתונים של התוויות: + + ```python + cuisines_label_df = cuisines_df['cuisine'] + cuisines_label_df.head() + ``` + + זה ייראה כך: + + ```output + 0 indian + 1 indian + 2 indian + 3 indian + 4 indian + Name: cuisine, dtype: object + ``` + +1. הסירו את העמודה `Unnamed: 0` ואת העמודה `cuisine` באמצעות `drop()`. שמרו את שאר הנתונים כמאפיינים לאימון: + + ```python + cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) + cuisines_feature_df.head() + ``` + + המאפיינים שלכם ייראו כך: + +| | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | artemisia | artichoke | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | +| ---: | -----: | -------: | ----: | ---------: | ----: | -----------: | ------: | -------: | --------: | --------: | ---: | ------: | ----------: | ---------: | ----------------------: | ---: | ---: | ---: | ----: | -----: | -------: | +| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | + +עכשיו אתם מוכנים לאמן את המודל שלכם! + +## בחירת המסווג + +עכשיו כשהנתונים שלכם נקיים ומוכנים לאימון, עליכם להחליט איזה אלגוריתם להשתמש בו למשימה. + +Scikit-learn מקטלגת סיווג תחת למידה מונחית, ובקטגוריה הזו תמצאו דרכים רבות לסווג. [המגוון](https://scikit-learn.org/stable/supervised_learning.html) עשוי להיות מבלבל במבט ראשון. השיטות הבאות כולן כוללות טכניקות סיווג: + +- מודלים ליניאריים +- מכונות וקטור תמיכה +- ירידה גרדיאנטית סטוכסטית +- שכנים קרובים +- תהליכים גאוסיאניים +- עצי החלטה +- שיטות אנסמבל (מסווג הצבעה) +- אלגוריתמים רב-מחלקתיים ורב-תוצאות (סיווג רב-מחלקתי ורב-תוויתי, סיווג רב-מחלקתי-רב-תוצאות) + +> ניתן גם להשתמש [ברשתות נוירונים לסיווג נתונים](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification), אבל זה מחוץ לתחום השיעור הזה. + +### איזה מסווג לבחור? + +אז, איזה מסווג כדאי לבחור? לעיתים, מעבר על כמה מהם וחיפוש אחר תוצאה טובה היא דרך לבדוק. Scikit-learn מציעה [השוואה צד-לצד](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) על מאגר נתונים שנוצר, המשווה בין KNeighbors, SVC בשתי דרכים, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB ו-QuadraticDiscrinationAnalysis, ומציגה את התוצאות בצורה חזותית: + +![השוואת מסווגים](../../../../4-Classification/2-Classifiers-1/images/comparison.png) +> גרפים שנוצרו בתיעוד של Scikit-learn + +> AutoML פותר את הבעיה הזו בצורה מסודרת על ידי הרצת ההשוואות הללו בענן, ומאפשר לכם לבחור את האלגוריתם הטוב ביותר עבור הנתונים שלכם. נסו זאת [כאן](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott) + +### גישה טובה יותר + +גישה טובה יותר מאשר לנחש באופן אקראי היא לעקוב אחר הרעיונות בדף העזר להורדה [ML Cheat sheet](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott). כאן, אנו מגלים שבשביל הבעיה הרב-מחלקתית שלנו, יש לנו כמה אפשרויות: + +![דף עזר לבעיות רב-מחלקתיות](../../../../4-Classification/2-Classifiers-1/images/cheatsheet.png) +> חלק מדף העזר של Microsoft לאלגוריתמים, המתאר אפשרויות סיווג רב-מחלקתיות + +✅ הורידו את דף העזר הזה, הדפיסו אותו ותלו אותו על הקיר שלכם! + +### נימוקים + +בואו נראה אם נוכל לנמק את דרכנו דרך גישות שונות בהתחשב במגבלות שיש לנו: + +- **רשתות נוירונים כבדות מדי**. בהתחשב במאגר הנתונים הנקי אך המינימלי שלנו, ובעובדה שאנחנו מריצים את האימון באופן מקומי דרך מחברות, רשתות נוירונים כבדות מדי למשימה הזו. +- **אין מסווג דו-מחלקתי**. אנחנו לא משתמשים במסווג דו-מחלקתי, כך שזה שולל את האפשרות של one-vs-all. +- **עץ החלטה או רגרסיה לוגיסטית יכולים לעבוד**. עץ החלטה עשוי לעבוד, או רגרסיה לוגיסטית עבור נתונים רב-מחלקתיים. +- **עצים החלטה מחוזקים רב-מחלקתיים פותרים בעיה אחרת**. עץ החלטה מחוזק רב-מחלקתי מתאים ביותר למשימות לא פרמטריות, למשל משימות שנועדו לבנות דירוגים, ולכן הוא לא שימושי עבורנו. + +### שימוש ב-Scikit-learn + +נשתמש ב-Scikit-learn כדי לנתח את הנתונים שלנו. עם זאת, ישנן דרכים רבות להשתמש ברגרסיה לוגיסטית ב-Scikit-learn. הסתכלו על [הפרמטרים להעברה](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). + +בעיקרון, ישנם שני פרמטרים חשובים - `multi_class` ו-`solver` - שעלינו לציין, כאשר אנו מבקשים מ-Scikit-learn לבצע רגרסיה לוגיסטית. הערך של `multi_class` מיישם התנהגות מסוימת. הערך של `solver` הוא האלגוריתם לשימוש. לא כל הפותרים יכולים להיות משולבים עם כל ערכי `multi_class`. + +לפי התיעוד, במקרה הרב-מחלקתי, אלגוריתם האימון: + +- **משתמש בתוכנית one-vs-rest (OvR)**, אם אפשרות `multi_class` מוגדרת כ-`ovr` +- **משתמש באובדן קרוס-אנטרופי**, אם אפשרות `multi_class` מוגדרת כ-`multinomial`. (כרגע אפשרות `multinomial` נתמכת רק על ידי הפותרים ‘lbfgs’, ‘sag’, ‘saga’ ו-‘newton-cg’.)" + +> 🎓 ה'תוכנית' כאן יכולה להיות 'ovr' (one-vs-rest) או 'multinomial'. מכיוון שרגרסיה לוגיסטית נועדה למעשה לתמוך בסיווג בינארי, תוכניות אלו מאפשרות לה להתמודד טוב יותר עם משימות סיווג רב-מחלקתיות. [מקור](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/) + +> 🎓 ה'פותר' מוגדר כ"האלגוריתם לשימוש בבעיה האופטימיזציה". [מקור](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). + +Scikit-learn מציעה את הטבלה הזו כדי להסביר כיצד פותרים מתמודדים עם אתגרים שונים שמוצגים על ידי מבני נתונים שונים: + +![פותרים](../../../../4-Classification/2-Classifiers-1/images/solvers.png) + +## תרגיל - פיצול הנתונים + +נוכל להתמקד ברגרסיה לוגיסטית לניסוי האימון הראשון שלנו מכיוון שלמדתם עליה לאחרונה בשיעור קודם. +פצלו את הנתונים שלכם לקבוצות אימון ובדיקה על ידי קריאה ל-`train_test_split()`: + +```python +X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) +``` + +## תרגיל - יישום רגרסיה לוגיסטית + +מכיוון שאתם משתמשים במקרה הרב-מחלקתי, עליכם לבחור איזו _תוכנית_ להשתמש ואיזה _פותר_ להגדיר. השתמשו ב-LogisticRegression עם הגדרה רב-מחלקתית והפותר **liblinear** לאימון. + +1. צרו רגרסיה לוגיסטית עם multi_class מוגדר כ-`ovr` והפותר מוגדר כ-`liblinear`: + + ```python + lr = LogisticRegression(multi_class='ovr',solver='liblinear') + model = lr.fit(X_train, np.ravel(y_train)) + + accuracy = model.score(X_test, y_test) + print ("Accuracy is {}".format(accuracy)) + ``` + + ✅ נסו פותר אחר כמו `lbfgs`, שלרוב מוגדר כברירת מחדל +> שים לב, השתמש בפונקציה [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html) של Pandas כדי לשטח את הנתונים שלך בעת הצורך. +הדיוק טוב ביותר מ-**80%**! + +1. ניתן לראות את המודל בפעולה על ידי בדיקת שורה אחת של נתונים (#50): + + ```python + print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}') + print(f'cuisine: {y_test.iloc[50]}') + ``` + + התוצאה מודפסת: + + ```output + ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object') + cuisine: indian + ``` + + ✅ נסו מספר שורה שונה ובדקו את התוצאות + +1. אם נעמיק, ניתן לבדוק את דיוק התחזית הזו: + + ```python + test= X_test.iloc[50].values.reshape(-1, 1).T + proba = model.predict_proba(test) + classes = model.classes_ + resultdf = pd.DataFrame(data=proba, columns=classes) + + topPrediction = resultdf.T.sort_values(by=[0], ascending = [False]) + topPrediction.head() + ``` + + התוצאה מודפסת - המטבח ההודי הוא הניחוש הטוב ביותר, עם הסתברות גבוהה: + + | | 0 | + | -------: | -------: | + | indian | 0.715851 | + | chinese | 0.229475 | + | japanese | 0.029763 | + | korean | 0.017277 | + | thai | 0.007634 | + + ✅ האם תוכלו להסביר מדוע המודל די בטוח שזהו מטבח הודי? + +1. קבלו פרטים נוספים על ידי הדפסת דוח סיווג, כפי שעשיתם בשיעורי הרגרסיה: + + ```python + y_pred = model.predict(X_test) + print(classification_report(y_test,y_pred)) + ``` + + | | precision | recall | f1-score | support | + | ------------ | --------- | ------ | -------- | ------- | + | chinese | 0.73 | 0.71 | 0.72 | 229 | + | indian | 0.91 | 0.93 | 0.92 | 254 | + | japanese | 0.70 | 0.75 | 0.72 | 220 | + | korean | 0.86 | 0.76 | 0.81 | 242 | + | thai | 0.79 | 0.85 | 0.82 | 254 | + | accuracy | 0.80 | 1199 | | | + | macro avg | 0.80 | 0.80 | 0.80 | 1199 | + | weighted avg | 0.80 | 0.80 | 0.80 | 1199 | + +## 🚀אתגר + +בשיעור זה השתמשתם בנתונים הנקיים שלכם כדי לבנות מודל למידת מכונה שיכול לחזות מטבח לאומי בהתבסס על סדרת מרכיבים. הקדישו זמן לקרוא על האפשרויות הרבות ש-Scikit-learn מציעה לסיווג נתונים. העמיקו במושג 'solver' כדי להבין מה מתרחש מאחורי הקלעים. + +## [שאלון לאחר השיעור](https://ff-quizzes.netlify.app/en/ml/) + +## סקירה ולימוד עצמי + +העמיקו מעט במתמטיקה שמאחורי רגרסיה לוגיסטית ב[שיעור הזה](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf) +## משימה + +[לימדו על ה-solvers](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/4-Classification/2-Classifiers-1/assignment.md b/translations/he/4-Classification/2-Classifiers-1/assignment.md new file mode 100644 index 00000000..8e43dd0d --- /dev/null +++ b/translations/he/4-Classification/2-Classifiers-1/assignment.md @@ -0,0 +1,24 @@ + +# למד את הפותרים +## הוראות + +בשיעור זה למדת על הפותרים השונים שמשלבים אלגוריתמים עם תהליך למידת מכונה כדי ליצור מודל מדויק. עבור על הפותרים שהוזכרו בשיעור ובחר שניים. במילים שלך, השווה והנגיד בין שני הפותרים הללו. איזה סוג של בעיה הם פותרים? כיצד הם עובדים עם מבני נתונים שונים? מדוע היית בוחר באחד על פני השני? + +## קריטריונים להערכה + +| קריטריון | מצטיין | מספק | דורש שיפור | +| -------- | -------------------------------------------------------------------------------------------- | -------------------------------------------- | ---------------------- | +| | קובץ .doc מוצג עם שני פסקאות, אחת על כל פותר, המשוות ביניהם באופן מעמיק. | קובץ .doc מוצג עם פסקה אחת בלבד | המשימה אינה מלאה | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור הסמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/4-Classification/2-Classifiers-1/solution/Julia/README.md b/translations/he/4-Classification/2-Classifiers-1/solution/Julia/README.md new file mode 100644 index 00000000..368b0d4e --- /dev/null +++ b/translations/he/4-Classification/2-Classifiers-1/solution/Julia/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). בעוד שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/4-Classification/3-Classifiers-2/README.md b/translations/he/4-Classification/3-Classifiers-2/README.md new file mode 100644 index 00000000..17132347 --- /dev/null +++ b/translations/he/4-Classification/3-Classifiers-2/README.md @@ -0,0 +1,249 @@ + +# מסווגי מטבחים 2 + +בשיעור הסיווג השני הזה, תחקור דרכים נוספות לסווג נתונים מספריים. בנוסף, תלמד על ההשלכות של בחירת מסווג אחד על פני אחר. + +## [מבחן מקדים להרצאה](https://ff-quizzes.netlify.app/en/ml/) + +### דרישות מוקדמות + +אנו מניחים שסיימת את השיעורים הקודמים ויש לך מערך נתונים מנוקה בתיקיית `data` בשם _cleaned_cuisines.csv_ שנמצא בשורש תיקיית ארבעת השיעורים. + +### הכנה + +טענו את קובץ _notebook.ipynb_ שלך עם מערך הנתונים המנוקה וחילקנו אותו למסגרות נתונים X ו-y, מוכנות לתהליך בניית המודל. + +## מפת סיווג + +בשיעור הקודם, למדת על האפשרויות השונות שיש לך בעת סיווג נתונים באמצעות דף העזר של Microsoft. Scikit-learn מציעה דף עזר דומה אך מפורט יותר שיכול לעזור לצמצם את הבחירה במעריכים (מונח נוסף למסווגים): + +![מפת ML מ-Scikit-learn](../../../../4-Classification/3-Classifiers-2/images/map.png) +> טיפ: [בקר במפה הזו אונליין](https://scikit-learn.org/stable/tutorial/machine_learning_map/) ולחץ לאורך המסלול כדי לקרוא את התיעוד. + +### התוכנית + +המפה הזו מאוד מועילה ברגע שיש לך הבנה ברורה של הנתונים שלך, שכן ניתן 'ללכת' לאורך המסלולים שלה כדי להגיע להחלטה: + +- יש לנו >50 דגימות +- אנחנו רוצים לחזות קטגוריה +- יש לנו נתונים מתויגים +- יש לנו פחות מ-100K דגימות +- ✨ אנחנו יכולים לבחור ב-Linear SVC +- אם זה לא עובד, מכיוון שיש לנו נתונים מספריים + - אנחנו יכולים לנסות ✨ KNeighbors Classifier + - אם זה לא עובד, לנסות ✨ SVC ו-✨ Ensemble Classifiers + +זהו מסלול מאוד מועיל לעקוב אחריו. + +## תרגיל - חלוקת הנתונים + +בהתאם למסלול הזה, כדאי להתחיל בייבוא כמה ספריות לשימוש. + +1. ייבא את הספריות הנדרשות: + + ```python + from sklearn.neighbors import KNeighborsClassifier + from sklearn.linear_model import LogisticRegression + from sklearn.svm import SVC + from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier + from sklearn.model_selection import train_test_split, cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve + import numpy as np + ``` + +1. חלק את נתוני האימון והבדיקה שלך: + + ```python + X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) + ``` + +## מסווג Linear SVC + +סיווג באמצעות Support-Vector (SVC) הוא חלק ממשפחת טכניקות ה-ML של Support-Vector Machines (למידע נוסף על אלו למטה). בשיטה זו, ניתן לבחור 'גרעין' כדי להחליט כיצד לקבץ את התוויות. הפרמטר 'C' מתייחס ל'רגולריזציה' שמווסתת את השפעת הפרמטרים. הגרעין יכול להיות אחד מ-[כמה](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC); כאן אנו מגדירים אותו כ'לינארי' כדי להבטיח שנשתמש ב-Linear SVC. ברירת המחדל של הסתברות היא 'false'; כאן אנו מגדירים אותה כ'true' כדי לקבל הערכות הסתברות. אנו מגדירים את מצב האקראיות כ-'0' כדי לערבב את הנתונים ולקבל הסתברויות. + +### תרגיל - יישום Linear SVC + +התחל ביצירת מערך מסווגים. תוסיף בהדרגה למערך הזה ככל שנבדוק. + +1. התחל עם Linear SVC: + + ```python + C = 10 + # Create different classifiers. + classifiers = { + 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) + } + ``` + +2. אמן את המודל שלך באמצעות Linear SVC והדפס דוח: + + ```python + n_classifiers = len(classifiers) + + for index, (name, classifier) in enumerate(classifiers.items()): + classifier.fit(X_train, np.ravel(y_train)) + + y_pred = classifier.predict(X_test) + accuracy = accuracy_score(y_test, y_pred) + print("Accuracy (train) for %s: %0.1f%% " % (name, accuracy * 100)) + print(classification_report(y_test,y_pred)) + ``` + + התוצאה די טובה: + + ```output + Accuracy (train) for Linear SVC: 78.6% + precision recall f1-score support + + chinese 0.71 0.67 0.69 242 + indian 0.88 0.86 0.87 234 + japanese 0.79 0.74 0.76 254 + korean 0.85 0.81 0.83 242 + thai 0.71 0.86 0.78 227 + + accuracy 0.79 1199 + macro avg 0.79 0.79 0.79 1199 + weighted avg 0.79 0.79 0.79 1199 + ``` + +## מסווג K-Neighbors + +K-Neighbors הוא חלק ממשפחת שיטות ה-ML של "שכנים", שניתן להשתמש בהן ללמידה מונחית ולא מונחית. בשיטה זו, נוצר מספר מוגדר מראש של נקודות, והנתונים נאספים סביב נקודות אלו כך שניתן לחזות תוויות כלליות עבור הנתונים. + +### תרגיל - יישום מסווג K-Neighbors + +המסווג הקודם היה טוב ועבד היטב עם הנתונים, אבל אולי נוכל להשיג דיוק טוב יותר. נסה מסווג K-Neighbors. + +1. הוסף שורה למערך המסווגים שלך (הוסף פסיק אחרי הפריט של Linear SVC): + + ```python + 'KNN classifier': KNeighborsClassifier(C), + ``` + + התוצאה קצת פחות טובה: + + ```output + Accuracy (train) for KNN classifier: 73.8% + precision recall f1-score support + + chinese 0.64 0.67 0.66 242 + indian 0.86 0.78 0.82 234 + japanese 0.66 0.83 0.74 254 + korean 0.94 0.58 0.72 242 + thai 0.71 0.82 0.76 227 + + accuracy 0.74 1199 + macro avg 0.76 0.74 0.74 1199 + weighted avg 0.76 0.74 0.74 1199 + ``` + + ✅ למד על [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) + +## מסווג Support Vector + +מסווגי Support-Vector הם חלק ממשפחת [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine) של שיטות ML המשמשות למשימות סיווג ורגרסיה. SVMs "ממפים דוגמאות אימון לנקודות במרחב" כדי למקסם את המרחק בין שתי קטגוריות. נתונים עוקבים ממופים למרחב הזה כך שניתן לחזות את הקטגוריה שלהם. + +### תרגיל - יישום מסווג Support Vector + +בואו ננסה להשיג דיוק קצת יותר טוב עם מסווג Support Vector. + +1. הוסף פסיק אחרי הפריט של K-Neighbors, ואז הוסף את השורה הזו: + + ```python + 'SVC': SVC(), + ``` + + התוצאה די טובה! + + ```output + Accuracy (train) for SVC: 83.2% + precision recall f1-score support + + chinese 0.79 0.74 0.76 242 + indian 0.88 0.90 0.89 234 + japanese 0.87 0.81 0.84 254 + korean 0.91 0.82 0.86 242 + thai 0.74 0.90 0.81 227 + + accuracy 0.83 1199 + macro avg 0.84 0.83 0.83 1199 + weighted avg 0.84 0.83 0.83 1199 + ``` + + ✅ למד על [Support-Vectors](https://scikit-learn.org/stable/modules/svm.html#svm) + +## מסווגי Ensemble + +בואו נעקוב אחרי המסלול עד הסוף, למרות שהבדיקה הקודמת הייתה די טובה. ננסה כמה מסווגי 'Ensemble', במיוחד Random Forest ו-AdaBoost: + +```python + 'RFST': RandomForestClassifier(n_estimators=100), + 'ADA': AdaBoostClassifier(n_estimators=100) +``` + +התוצאה מאוד טובה, במיוחד עבור Random Forest: + +```output +Accuracy (train) for RFST: 84.5% + precision recall f1-score support + + chinese 0.80 0.77 0.78 242 + indian 0.89 0.92 0.90 234 + japanese 0.86 0.84 0.85 254 + korean 0.88 0.83 0.85 242 + thai 0.80 0.87 0.83 227 + + accuracy 0.84 1199 + macro avg 0.85 0.85 0.84 1199 +weighted avg 0.85 0.84 0.84 1199 + +Accuracy (train) for ADA: 72.4% + precision recall f1-score support + + chinese 0.64 0.49 0.56 242 + indian 0.91 0.83 0.87 234 + japanese 0.68 0.69 0.69 254 + korean 0.73 0.79 0.76 242 + thai 0.67 0.83 0.74 227 + + accuracy 0.72 1199 + macro avg 0.73 0.73 0.72 1199 +weighted avg 0.73 0.72 0.72 1199 +``` + +✅ למד על [מסווגי Ensemble](https://scikit-learn.org/stable/modules/ensemble.html) + +שיטה זו של למידת מכונה "משלבת את התחזיות של כמה מעריכים בסיסיים" כדי לשפר את איכות המודל. בדוגמה שלנו, השתמשנו ב-Random Trees ו-AdaBoost. + +- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), שיטה ממוצעת, בונה 'יער' של 'עצים החלטה' עם אקראיות כדי להימנע מהתאמת יתר. הפרמטר n_estimators מוגדר למספר העצים. + +- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) מתאים מסווג למערך נתונים ואז מתאים עותקים של אותו מסווג לאותו מערך נתונים. הוא מתמקד במשקל של פריטים שסווגו באופן שגוי ומכוונן את ההתאמה למסווג הבא כדי לתקן. + +--- + +## 🚀אתגר + +לכל אחת מהטכניקות הללו יש מספר רב של פרמטרים שניתן לכוונן. חקור את פרמטרי ברירת המחדל של כל אחת מהן וחשוב על מה משמעות כוונון הפרמטרים הללו עבור איכות המודל. + +## [מבחן לאחר ההרצאה](https://ff-quizzes.netlify.app/en/ml/) + +## סקירה ולימוד עצמי + +יש הרבה מונחים מקצועיים בשיעורים האלה, אז קח רגע לעיין [ברשימה הזו](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) של מונחים שימושיים! + +## משימה + +[משחק פרמטרים](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/4-Classification/3-Classifiers-2/assignment.md b/translations/he/4-Classification/3-Classifiers-2/assignment.md new file mode 100644 index 00000000..53a05ba0 --- /dev/null +++ b/translations/he/4-Classification/3-Classifiers-2/assignment.md @@ -0,0 +1,25 @@ + +# משחק עם פרמטרים + +## הוראות + +ישנם הרבה פרמטרים שמוגדרים כברירת מחדל כאשר עובדים עם מסווגים אלו. Intellisense ב-VS Code יכול לעזור לכם לחקור אותם. בחרו אחת מטכניקות הסיווג של למידת מכונה בשיעור זה ואמנו מחדש מודלים תוך שינוי ערכי פרמטרים שונים. צרו מחברת שמסבירה מדוע שינויים מסוימים משפרים את איכות המודל בעוד שאחרים פוגעים בה. היו מפורטים בתשובתכם. + +## קריטריונים להערכה + +| קריטריון | מצטיין | מספק | דורש שיפור | +| -------- | ---------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | ---------------------------- | +| | מוצגת מחברת עם מסווג שבנוי במלואו, פרמטרים שונו והסברים ניתנו בתיבות טקסט | מוצגת מחברת חלקית או עם הסברים לקויים | מחברת עם באגים או פגמים | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/4-Classification/3-Classifiers-2/solution/Julia/README.md b/translations/he/4-Classification/3-Classifiers-2/solution/Julia/README.md new file mode 100644 index 00000000..7b10519b --- /dev/null +++ b/translations/he/4-Classification/3-Classifiers-2/solution/Julia/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/4-Classification/4-Applied/README.md b/translations/he/4-Classification/4-Applied/README.md new file mode 100644 index 00000000..b6160ed1 --- /dev/null +++ b/translations/he/4-Classification/4-Applied/README.md @@ -0,0 +1,329 @@ + +# בניית אפליקציית המלצות למטבח + +בשיעור זה תבנו מודל סיווג באמצעות כמה מהטכניקות שלמדתם בשיעורים קודמים, ותשתמשו במאגר הנתונים הטעים של מטבחים שהשתמשנו בו לאורך הסדרה. בנוסף, תבנו אפליקציית אינטרנט קטנה שתשתמש במודל שמור, תוך שימוש ב-Onnx Web Runtime. + +אחת השימושים הפרקטיים המועילים ביותר של למידת מכונה היא בניית מערכות המלצה, ואתם יכולים לעשות את הצעד הראשון בכיוון הזה כבר היום! + +[![מצגת על אפליקציית האינטרנט הזו](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "Applied ML") + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון: ג'ן לופר בונה אפליקציית אינטרנט באמצעות נתוני מטבחים מסווגים + +## [שאלון לפני השיעור](https://ff-quizzes.netlify.app/en/ml/) + +בשיעור זה תלמדו: + +- כיצד לבנות מודל ולשמור אותו כמודל Onnx +- כיצד להשתמש ב-Netron כדי לבדוק את המודל +- כיצד להשתמש במודל שלכם באפליקציית אינטרנט לצורך הסקה + +## בניית המודל שלכם + +בניית מערכות למידת מכונה יישומיות היא חלק חשוב בשימוש בטכנולוגיות אלו עבור מערכות עסקיות. ניתן להשתמש במודלים בתוך אפליקציות אינטרנט (וכך גם להשתמש בהם במצב לא מקוון אם יש צורך) באמצעות Onnx. + +בשיעור [קודם](../../3-Web-App/1-Web-App/README.md), בניתם מודל רגרסיה על תצפיות עב"מים, "כבשתם" אותו, והשתמשתם בו באפליקציית Flask. בעוד שהארכיטקטורה הזו מאוד שימושית, היא אפליקציית Python מלאה, וייתכן שהדרישות שלכם כוללות שימוש באפליקציית JavaScript. + +בשיעור זה, תוכלו לבנות מערכת בסיסית מבוססת JavaScript לצורך הסקה. אך קודם לכן, עליכם לאמן מודל ולהמיר אותו לשימוש עם Onnx. + +## תרגיל - אימון מודל סיווג + +ראשית, אימנו מודל סיווג באמצעות מאגר הנתונים הנקי של מטבחים שהשתמשנו בו. + +1. התחילו בייבוא ספריות שימושיות: + + ```python + !pip install skl2onnx + import pandas as pd + ``` + + תזדקקו ל-[skl2onnx](https://onnx.ai/sklearn-onnx/) כדי לעזור להמיר את מודל Scikit-learn שלכם לפורמט Onnx. + +1. לאחר מכן, עבדו עם הנתונים שלכם באותו אופן שעשיתם בשיעורים קודמים, על ידי קריאת קובץ CSV באמצעות `read_csv()`: + + ```python + data = pd.read_csv('../data/cleaned_cuisines.csv') + data.head() + ``` + +1. הסירו את שני העמודות הראשונות שאינן נחוצות ושמרו את הנתונים הנותרים כ-'X': + + ```python + X = data.iloc[:,2:] + X.head() + ``` + +1. שמרו את התוויות כ-'y': + + ```python + y = data[['cuisine']] + y.head() + + ``` + +### התחלת שגרת האימון + +נשתמש בספריית 'SVC' שמספקת דיוק טוב. + +1. ייבאו את הספריות המתאימות מ-Scikit-learn: + + ```python + from sklearn.model_selection import train_test_split + from sklearn.svm import SVC + from sklearn.model_selection import cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report + ``` + +1. הפרידו בין קבוצות האימון והבדיקה: + + ```python + X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3) + ``` + +1. בנו מודל סיווג SVC כפי שעשיתם בשיעור הקודם: + + ```python + model = SVC(kernel='linear', C=10, probability=True,random_state=0) + model.fit(X_train,y_train.values.ravel()) + ``` + +1. כעת, בדקו את המודל שלכם על ידי קריאה ל-`predict()`: + + ```python + y_pred = model.predict(X_test) + ``` + +1. הדפיסו דוח סיווג כדי לבדוק את איכות המודל: + + ```python + print(classification_report(y_test,y_pred)) + ``` + + כפי שראינו קודם, הדיוק טוב: + + ```output + precision recall f1-score support + + chinese 0.72 0.69 0.70 257 + indian 0.91 0.87 0.89 243 + japanese 0.79 0.77 0.78 239 + korean 0.83 0.79 0.81 236 + thai 0.72 0.84 0.78 224 + + accuracy 0.79 1199 + macro avg 0.79 0.79 0.79 1199 + weighted avg 0.79 0.79 0.79 1199 + ``` + +### המרת המודל שלכם ל-Onnx + +וודאו שההמרה מתבצעת עם מספר הטנזור המתאים. מאגר הנתונים הזה כולל 380 מרכיבים, ולכן עליכם לציין את המספר הזה ב-`FloatTensorType`: + +1. המירו באמצעות מספר טנזור של 380. + + ```python + from skl2onnx import convert_sklearn + from skl2onnx.common.data_types import FloatTensorType + + initial_type = [('float_input', FloatTensorType([None, 380]))] + options = {id(model): {'nocl': True, 'zipmap': False}} + ``` + +1. צרו את הקובץ onx ושמרו אותו כקובץ **model.onnx**: + + ```python + onx = convert_sklearn(model, initial_types=initial_type, options=options) + with open("./model.onnx", "wb") as f: + f.write(onx.SerializeToString()) + ``` + + > שימו לב, ניתן להעביר [אפשרויות](https://onnx.ai/sklearn-onnx/parameterized.html) בתסריט ההמרה שלכם. במקרה זה, העברנו 'nocl' כ-True ו-'zipmap' כ-False. מכיוון שמדובר במודל סיווג, יש לכם אפשרות להסיר את ZipMap שמייצר רשימת מילונים (לא נחוץ). `nocl` מתייחס למידע על מחלקות שנכלל במודל. ניתן להקטין את גודל המודל שלכם על ידי הגדרת `nocl` כ-'True'. + +הרצת המחברת כולה תבנה כעת מודל Onnx ותשמור אותו בתיקייה זו. + +## צפייה במודל שלכם + +מודלים של Onnx אינם נראים היטב ב-Visual Studio Code, אך יש תוכנה חינמית טובה מאוד שרבים מהחוקרים משתמשים בה כדי להציג את המודל ולוודא שהוא נבנה כראוי. הורידו את [Netron](https://github.com/lutzroeder/Netron) ופתחו את קובץ model.onnx שלכם. תוכלו לראות את המודל הפשוט שלכם מוצג, עם 380 הקלטים והמסווג המופיעים: + +![תצוגת Netron](../../../../4-Classification/4-Applied/images/netron.png) + +Netron הוא כלי מועיל לצפייה במודלים שלכם. + +כעת אתם מוכנים להשתמש במודל המגניב הזה באפליקציית אינטרנט. בואו נבנה אפליקציה שתהיה שימושית כאשר תביטו במקרר שלכם ותנסו להבין אילו שילובי מרכיבים שנותרו לכם יכולים לשמש להכנת מטבח מסוים, כפי שנקבע על ידי המודל שלכם. + +## בניית אפליקציית אינטרנט להמלצות + +ניתן להשתמש במודל שלכם ישירות באפליקציית אינטרנט. ארכיטקטורה זו גם מאפשרת לכם להריץ אותה באופן מקומי ואפילו לא מקוון אם יש צורך. התחילו ביצירת קובץ `index.html` באותה תיקייה שבה שמרתם את קובץ `model.onnx`. + +1. בקובץ זה _index.html_, הוסיפו את הסימון הבא: + + ```html + + +
+ Cuisine Matcher +
+ + ... + + + ``` + +1. כעת, בתוך תגי `body`, הוסיפו מעט סימון כדי להציג רשימת תיבות סימון המשקפות כמה מרכיבים: + + ```html +

Check your refrigerator. What can you create?

+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+ +
+ ``` + + שימו לב שכל תיבת סימון מקבלת ערך. ערך זה משקף את האינדקס שבו המרכיב נמצא לפי מאגר הנתונים. תפוח, למשל, ברשימה האלפביתית הזו, תופס את העמודה החמישית, ולכן הערך שלו הוא '4' מכיוון שאנחנו מתחילים לספור מ-0. תוכלו להתייעץ עם [גיליון המרכיבים](../../../../4-Classification/data/ingredient_indexes.csv) כדי לגלות את האינדקס של מרכיב מסוים. + + המשיכו לעבוד בקובץ index.html, והוסיפו בלוק סקריפט שבו המודל נקרא לאחר סגירת `` הסופית. + +1. ראשית, ייבאו את [Onnx Runtime](https://www.onnxruntime.ai/): + + ```html + + ``` + + > Onnx Runtime משמש כדי לאפשר הרצת מודלים של Onnx על פני מגוון רחב של פלטפורמות חומרה, כולל אופטימיזציות ו-API לשימוש. + +1. לאחר שה-runtime במקום, תוכלו לקרוא לו: + + ```html + + ``` + +בקוד זה, מתרחשים כמה דברים: + +1. יצרתם מערך של 380 ערכים אפשריים (1 או 0) שיוגדרו וישלחו למודל לצורך הסקה, בהתאם לשאלה האם תיבת סימון מסומנת. +2. יצרתם מערך של תיבות סימון ודרך לקבוע האם הן סומנו בפונקציית `init` שנקראת כאשר האפליקציה מתחילה. כאשר תיבת סימון מסומנת, מערך `ingredients` משתנה כדי לשקף את המרכיב שנבחר. +3. יצרתם פונקציית `testCheckboxes` שבודקת האם תיבת סימון כלשהי סומנה. +4. אתם משתמשים בפונקציית `startInference` כאשר הכפתור נלחץ, ואם תיבת סימון כלשהי סומנה, אתם מתחילים הסקה. +5. שגרת ההסקה כוללת: + 1. הגדרת טעינה אסינכרונית של המודל + 2. יצירת מבנה טנזור לשליחה למודל + 3. יצירת 'feeds' שמשקפים את הקלט `float_input` שיצרתם כאשר אימנתם את המודל שלכם (ניתן להשתמש ב-Netron כדי לאמת את השם) + 4. שליחת 'feeds' אלו למודל והמתנה לתגובה + +## בדיקת האפליקציה שלכם + +פתחו סשן טרמינל ב-Visual Studio Code בתיקייה שבה נמצא קובץ index.html שלכם. ודאו שיש לכם [http-server](https://www.npmjs.com/package/http-server) מותקן גלובלית, והקלידו `http-server` בשורת הפקודה. localhost אמור להיפתח ותוכלו לצפות באפליקציית האינטרנט שלכם. בדקו איזה מטבח מומלץ בהתבסס על מרכיבים שונים: + +![אפליקציית אינטרנט למרכיבים](../../../../4-Classification/4-Applied/images/web-app.png) + +מזל טוב, יצרתם אפליקציית אינטרנט להמלצות עם כמה שדות. הקדישו זמן לבניית המערכת הזו! + +## 🚀אתגר + +אפליקציית האינטרנט שלכם מאוד מינימלית, אז המשיכו לבנות אותה באמצעות מרכיבים והאינדקסים שלהם מתוך נתוני [ingredient_indexes](../../../../4-Classification/data/ingredient_indexes.csv). אילו שילובי טעמים עובדים כדי ליצור מנה לאומית מסוימת? + +## [שאלון לאחר השיעור](https://ff-quizzes.netlify.app/en/ml/) + +## סקירה ולימוד עצמי + +בעוד שהשיעור הזה רק נגע בשימושיות של יצירת מערכת המלצות למרכיבי מזון, תחום יישומי למידת מכונה זה עשיר בדוגמאות. קראו עוד על איך מערכות אלו נבנות: + +- https://www.sciencedirect.com/topics/computer-science/recommendation-engine +- https://www.technologyreview.com/2014/08/25/171547/the-ultimate-challenge-for-recommendation-engines/ +- https://www.technologyreview.com/2015/03/23/168831/everything-is-a-recommendation/ + +## משימה + +[בנו מערכת המלצות חדשה](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/4-Classification/4-Applied/assignment.md b/translations/he/4-Classification/4-Applied/assignment.md new file mode 100644 index 00000000..e88d0bda --- /dev/null +++ b/translations/he/4-Classification/4-Applied/assignment.md @@ -0,0 +1,25 @@ + +# בנה מערכת המלצות + +## הוראות + +בהתבסס על התרגילים שלך בשיעור הזה, אתה כבר יודע איך לבנות אפליקציית ווב מבוססת JavaScript באמצעות Onnx Runtime ומודל Onnx שהומר. נסה לבנות מערכת המלצות חדשה תוך שימוש בנתונים מהשיעורים האלה או ממקורות אחרים (נא לתת קרדיט). לדוגמה, תוכל ליצור מערכת המלצות לחיות מחמד בהתבסס על תכונות אישיות שונות, או מערכת המלצות לז'אנרים מוזיקליים בהתאם למצב הרוח של האדם. תהיה יצירתי! + +## קריטריונים להערכה + +| קריטריון | מצטיין | מספק | דורש שיפור | +| -------- | -------------------------------------------------------------------- | ----------------------------------- | ------------------------------- | +| | מוצגת אפליקציית ווב ומחברת, שתיהן מתועדות היטב ופועלות | אחת מהשתיים חסרה או פגומה | שתיהן חסרות או פגומות | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור הסמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לכל אי הבנות או פרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/4-Classification/README.md b/translations/he/4-Classification/README.md new file mode 100644 index 00000000..a295e209 --- /dev/null +++ b/translations/he/4-Classification/README.md @@ -0,0 +1,41 @@ + +# התחלת עבודה עם סיווג + +## נושא אזורי: מטבחים אסייתיים והודיים טעימים 🍜 + +באסיה ובהודו, מסורות האוכל מגוונות מאוד וטעימות במיוחד! בואו נבחן נתונים על מטבחים אזוריים כדי לנסות להבין את המרכיבים שלהם. + +![מוכר אוכל תאילנדי](../../../4-Classification/images/thai-food.jpg) +> צילום על ידי Lisheng Chang ב-Unsplash + +## מה תלמדו + +בפרק זה, תבנו על בסיס הלימוד הקודם שלכם בנושא רגרסיה ותלמדו על מסווגים נוספים שתוכלו להשתמש בהם כדי להבין טוב יותר את הנתונים. + +> ישנם כלים שימושיים עם מעט קוד שיכולים לעזור לכם ללמוד על עבודה עם מודלים של סיווג. נסו [Azure ML למשימה זו](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +## שיעורים + +1. [מבוא לסיווג](1-Introduction/README.md) +2. [מסווגים נוספים](2-Classifiers-1/README.md) +3. [עוד מסווגים](3-Classifiers-2/README.md) +4. [למידת מכונה יישומית: בניית אפליקציית ווב](4-Applied/README.md) + +## קרדיטים + +"התחלת עבודה עם סיווג" נכתב באהבה ♥️ על ידי [Cassie Breviu](https://www.twitter.com/cassiebreviu) ו-[Jen Looper](https://www.twitter.com/jenlooper) + +מאגר הנתונים של המטבחים הטעימים נלקח מ-[Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines). + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/5-Clustering/1-Visualize/README.md b/translations/he/5-Clustering/1-Visualize/README.md new file mode 100644 index 00000000..e4cf129c --- /dev/null +++ b/translations/he/5-Clustering/1-Visualize/README.md @@ -0,0 +1,347 @@ + +# מבוא לקיבוץ + +קיבוץ הוא סוג של [למידה ללא פיקוח](https://wikipedia.org/wiki/Unsupervised_learning) שמניח כי מערך הנתונים אינו מתויג או שהקלטים שלו אינם מותאמים לפלטים מוגדרים מראש. הוא משתמש באלגוריתמים שונים כדי למיין נתונים לא מתויגים ולספק קבוצות בהתאם לדפוסים שהוא מזהה בנתונים. + +[![No One Like You by PSquare](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](https://youtu.be/ty2advRiWJM "No One Like You by PSquare") + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון. בזמן שאתם לומדים על למידת מכונה עם קיבוץ, תהנו ממוזיקת דאנס הול ניגרית - זהו שיר מדורג מאוד משנת 2014 של PSquare. + +## [שאלון לפני ההרצאה](https://ff-quizzes.netlify.app/en/ml/) + +### מבוא + +[קיבוץ](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) הוא כלי שימושי מאוד לחקר נתונים. בואו נראה אם הוא יכול לעזור לגלות מגמות ודפוסים באופן שבו קהל ניגרי צורך מוזיקה. + +✅ הקדישו רגע לחשוב על השימושים בקיבוץ. בחיים האמיתיים, קיבוץ מתרחש בכל פעם שיש לכם ערימת כביסה ואתם צריכים למיין את הבגדים של בני המשפחה 🧦👕👖🩲. במדעי הנתונים, קיבוץ מתרחש כשמנסים לנתח את העדפות המשתמש או לקבוע את המאפיינים של כל מערך נתונים לא מתויג. קיבוץ, במובן מסוים, עוזר לעשות סדר בכאוס, כמו מגירת גרביים. + +[![Introduction to ML](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Introduction to Clustering") + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון: ג'ון גוטאג מ-MIT מציג את נושא הקיבוץ + +בסביבה מקצועית, קיבוץ יכול לשמש לקביעת דברים כמו פילוח שוק, למשל, לקבוע אילו קבוצות גיל קונות אילו פריטים. שימוש נוסף יכול להיות זיהוי חריגות, אולי כדי לזהות הונאה מתוך מערך נתונים של עסקאות בכרטיסי אשראי. או שתוכלו להשתמש בקיבוץ כדי לזהות גידולים בסריקות רפואיות. + +✅ הקדישו רגע לחשוב כיצד נתקלתם בקיבוץ 'בעולם האמיתי', בסביבה בנקאית, מסחר אלקטרוני או עסקית. + +> 🎓 מעניין, ניתוח קיבוץ מקורו בתחומי האנתרופולוגיה והפסיכולוגיה בשנות ה-30. האם אתם יכולים לדמיין כיצד הוא שימש אז? + +לחילופין, תוכלו להשתמש בו לקיבוץ תוצאות חיפוש - לפי קישורי קניות, תמונות או ביקורות, למשל. קיבוץ שימושי כשיש לכם מערך נתונים גדול שברצונכם לצמצם ועליו לבצע ניתוח מעמיק יותר, כך שהטכניקה יכולה לשמש ללמידה על נתונים לפני בניית מודלים אחרים. + +✅ לאחר שמערך הנתונים שלכם מאורגן בקבוצות, אתם מקצים לו מזהה קבוצה, וטכניקה זו יכולה להיות שימושית לשמירה על פרטיות מערך הנתונים; תוכלו להתייחס לנקודת נתונים לפי מזהה הקבוצה שלה, במקום לפי נתונים מזהים יותר. האם אתם יכולים לחשוב על סיבות נוספות מדוע תעדיפו להתייחס למזהה קבוצה במקום לאלמנטים אחרים של הקבוצה כדי לזהות אותה? + +העמיקו את הבנתכם בטכניקות קיבוץ במודול [לימוד זה](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott) + +## התחלת עבודה עם קיבוץ + +[Scikit-learn מציעה מגוון רחב](https://scikit-learn.org/stable/modules/clustering.html) של שיטות לביצוע קיבוץ. הסוג שתבחרו תלוי במקרה השימוש שלכם. לפי התיעוד, לכל שיטה יש יתרונות שונים. הנה טבלה פשוטה של השיטות הנתמכות על ידי Scikit-learn ומקרי השימוש המתאימים להן: + +| שם השיטה | מקרה שימוש | +| :------------------------ | :--------------------------------------------------------------------- | +| K-Means | שימוש כללי, אינדוקטיבי | +| Affinity propagation | קבוצות רבות ולא אחידות, אינדוקטיבי | +| Mean-shift | קבוצות רבות ולא אחידות, אינדוקטיבי | +| Spectral clustering | קבוצות מעטות ואחידות, טרנסדוקטיבי | +| Ward hierarchical clustering | קבוצות רבות ומוגבלות, טרנסדוקטיבי | +| Agglomerative clustering | קבוצות רבות ומוגבלות, מרחקים לא אוקלידיים, טרנסדוקטיבי | +| DBSCAN | גיאומטריה לא שטוחה, קבוצות לא אחידות, טרנסדוקטיבי | +| OPTICS | גיאומטריה לא שטוחה, קבוצות לא אחידות עם צפיפות משתנה, טרנסדוקטיבי | +| Gaussian mixtures | גיאומטריה שטוחה, אינדוקטיבי | +| BIRCH | מערך נתונים גדול עם חריגות, אינדוקטיבי | + +> 🎓 איך אנחנו יוצרים קבוצות קשור מאוד לאופן שבו אנחנו אוספים את נקודות הנתונים לקבוצות. בואו נפרק קצת את המונחים: +> +> 🎓 ['טרנסדוקטיבי' מול 'אינדוקטיבי'](https://wikipedia.org/wiki/Transduction_(machine_learning)) +> +> הסקה טרנסדוקטיבית נגזרת ממקרים שנצפו באימון שממופים למקרים ספציפיים בבדיקה. הסקה אינדוקטיבית נגזרת ממקרים באימון שממופים לכללים כלליים שמיושמים רק לאחר מכן על מקרים בבדיקה. +> +> דוגמה: דמיינו שיש לכם מערך נתונים שמסומן רק באופן חלקי. חלק מהפריטים הם 'תקליטים', חלק 'דיסקים', וחלק ריקים. המשימה שלכם היא לספק תוויות לריקים. אם תבחרו בגישה אינדוקטיבית, תאמנו מודל שמחפש 'תקליטים' ו'דיסקים', ותיישמו את התוויות הללו על הנתונים הלא מתויגים. גישה זו תתקשה לסווג פריטים שהם למעשה 'קלטות'. גישה טרנסדוקטיבית, לעומת זאת, מתמודדת עם נתונים לא ידועים בצורה יעילה יותר כשהיא עובדת על קיבוץ פריטים דומים יחד ואז מיישמת תווית לקבוצה. במקרה זה, הקבוצות עשויות לשקף 'דברים מוזיקליים עגולים' ו'דברים מוזיקליים מרובעים'. +> +> 🎓 ['גיאומטריה לא שטוחה' מול 'שטוחה'](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering) +> +> נגזר מהמונחים המתמטיים, גיאומטריה לא שטוחה מול שטוחה מתייחסת למדידת המרחקים בין נקודות על ידי שיטות גיאומטריות 'שטוחות' ([אוקלידיות](https://wikipedia.org/wiki/Euclidean_geometry)) או 'לא שטוחות' (לא אוקלידיות). +> +>'שטוחה' בהקשר זה מתייחסת לגיאומטריה אוקלידית (חלקים ממנה נלמדים כגיאומטריה 'מישורית'), ו'לא שטוחה' מתייחסת לגיאומטריה לא אוקלידית. מה הקשר בין גיאומטריה ללמידת מכונה? ובכן, כשני תחומים שמבוססים על מתמטיקה, חייבת להיות דרך משותפת למדוד מרחקים בין נקודות בקבוצות, וזה יכול להיעשות בצורה 'שטוחה' או 'לא שטוחה', תלוי בטבע הנתונים. [מרחקים אוקלידיים](https://wikipedia.org/wiki/Euclidean_distance) נמדדים כאורך של קטע קו בין שתי נקודות. [מרחקים לא אוקלידיים](https://wikipedia.org/wiki/Non-Euclidean_geometry) נמדדים לאורך עקומה. אם הנתונים שלכם, כשהם מוצגים, נראים כאילו אינם קיימים על מישור, ייתכן שתצטרכו להשתמש באלגוריתם מיוחד כדי להתמודד איתם. +> +![Flat vs Nonflat Geometry Infographic](../../../../5-Clustering/1-Visualize/images/flat-nonflat.png) +> אינפוגרפיקה מאת [Dasani Madipalli](https://twitter.com/dasani_decoded) +> +> 🎓 ['מרחקים'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf) +> +> קבוצות מוגדרות על ידי מטריצת המרחקים שלהן, כלומר המרחקים בין נקודות. מרחק זה יכול להימדד בכמה דרכים. קבוצות אוקלידיות מוגדרות על ידי ממוצע ערכי הנקודות, ומכילות 'centroid' או נקודת מרכז. המרחקים נמדדים כך לפי המרחק ל-centroid. מרחקים לא אוקלידיים מתייחסים ל'clustroids', הנקודה הקרובה ביותר לנקודות אחרות. Clustroids בתורם יכולים להיות מוגדרים בדרכים שונות. +> +> 🎓 ['מוגבל'](https://wikipedia.org/wiki/Constrained_clustering) +> +> [קיבוץ מוגבל](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) מכניס 'למידה חצי מפוקחת' לשיטה ללא פיקוח זו. היחסים בין נקודות מסומנים כ'לא ניתן לקשר' או 'חייב לקשר' כך שכמה כללים נכפים על מערך הנתונים. +> +>דוגמה: אם אלגוריתם משוחרר על אצווה של נתונים לא מתויגים או חצי מתויגים, הקבוצות שהוא יוצר עשויות להיות באיכות ירודה. בדוגמה לעיל, הקבוצות עשויות לקבץ 'דברים מוזיקליים עגולים', 'דברים מוזיקליים מרובעים', 'דברים משולשים' ו'עוגיות'. אם ניתנים כמה מגבלות, או כללים לעקוב אחריהם ("הפריט חייב להיות עשוי מפלסטיק", "הפריט צריך להיות מסוגל להפיק מוזיקה") זה יכול לעזור 'להגביל' את האלגוריתם לקבל החלטות טובות יותר. +> +> 🎓 'צפיפות' +> +> נתונים שהם 'רועשים' נחשבים ל'צפופים'. המרחקים בין נקודות בכל אחת מהקבוצות שלהם עשויים להוכיח, בבדיקה, שהם צפופים יותר או פחות, או 'עמוסים' ולכן נתונים אלה צריכים להיות מנותחים עם שיטת הקיבוץ המתאימה. [מאמר זה](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) מדגים את ההבדל בין שימוש בקיבוץ K-Means לבין אלגוריתמים של HDBSCAN לחקר מערך נתונים רועש עם צפיפות קבוצות לא אחידה. + +## אלגוריתמי קיבוץ + +ישנם מעל 100 אלגוריתמי קיבוץ, והשימוש בהם תלוי בטבע הנתונים שבידכם. בואו נדון בכמה מהעיקריים: + +- **קיבוץ היררכי**. אם אובייקט מסווג לפי קרבתו לאובייקט סמוך, ולא לאחד רחוק יותר, קבוצות נוצרות על בסיס המרחק של חבריהן אל ומאובייקטים אחרים. הקיבוץ האגרומרטיבי של Scikit-learn הוא היררכי. + + ![Hierarchical clustering Infographic](../../../../5-Clustering/1-Visualize/images/hierarchical.png) + > אינפוגרפיקה מאת [Dasani Madipalli](https://twitter.com/dasani_decoded) + +- **קיבוץ לפי מרכז**. אלגוריתם פופולרי זה דורש בחירה של 'k', או מספר הקבוצות שיש ליצור, ולאחר מכן האלגוריתם קובע את נקודת המרכז של קבוצה ואוסף נתונים סביב אותה נקודה. [קיבוץ K-means](https://wikipedia.org/wiki/K-means_clustering) הוא גרסה פופולרית של קיבוץ לפי מרכז. המרכז נקבע לפי הממוצע הקרוב ביותר, ומכאן השם. המרחק המרובע מהקבוצה ממוזער. + + ![Centroid clustering Infographic](../../../../5-Clustering/1-Visualize/images/centroid.png) + > אינפוגרפיקה מאת [Dasani Madipalli](https://twitter.com/dasani_decoded) + +- **קיבוץ מבוסס התפלגות**. מבוסס על מודלים סטטיסטיים, קיבוץ מבוסס התפלגות מתמקד בקביעת ההסתברות שנקודת נתונים שייכת לקבוצה, ומקצה אותה בהתאם. שיטות תערובת גאוסיאנית שייכות לסוג זה. + +- **קיבוץ מבוסס צפיפות**. נקודות נתונים מוקצות לקבוצות על בסיס צפיפותן, או התאגדותן זו סביב זו. נקודות נתונים רחוקות מהקבוצה נחשבות לחריגות או רעש. DBSCAN, Mean-shift ו-OPTICS שייכות לסוג זה של קיבוץ. + +- **קיבוץ מבוסס רשת**. עבור מערכי נתונים רב-ממדיים, נוצרת רשת והנתונים מחולקים בין תאי הרשת, ובכך נוצרים קבוצות. + +## תרגיל - קבצו את הנתונים שלכם + +קיבוץ כטכניקה נעזר מאוד בהדמיה נכונה, אז בואו נתחיל בהדמיה של נתוני המוזיקה שלנו. תרגיל זה יעזור לנו להחליט אילו משיטות הקיבוץ נוכל להשתמש בצורה היעילה ביותר עבור טבע הנתונים הללו. + +1. פתחו את הקובץ [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) בתיקייה זו. + +1. ייבאו את חבילת `Seaborn` להדמיה טובה של נתונים. + + ```python + !pip install seaborn + ``` + +1. הוסיפו את נתוני השירים מתוך [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv). טענו מסגרת נתונים עם מידע על השירים. התכוננו לחקור את הנתונים הללו על ידי ייבוא הספריות והצגת הנתונים: + + ```python + import matplotlib.pyplot as plt + import pandas as pd + + df = pd.read_csv("../data/nigerian-songs.csv") + df.head() + ``` + + בדקו את השורות הראשונות של הנתונים: + + | | שם | אלבום | אמן | ז'אנר מוביל של האמן | תאריך יציאה | אורך | פופולריות | ריקודיות | אקוסטיות | אנרגיה | אינסטרומנטליות | חיות | עוצמה | דיבוריות | טמפו | חתימת זמן | + | --- | ---------------------- | ---------------------------- | ------------------ | ------------------- | ------------ | ----- | ---------- | --------- | --------- | ------ | ---------------- | ------ | ------- | ---------- | ------- | ---------- | + | 0 | Sparky | Mandy & The Jungle | Cruel Santino | alternative r&b | 2019 | 144000 | 48 | 0.666 | 0.851 | 0.42 | 0.534 | 0.11 | -6.699 | 0.0829 | 133.015 | 5 | + | 1 | shuga rush | EVERYTHING YOU HEARD IS TRUE | Odunsi (The Engine)| afropop | 2020 | 89488 | 30 | 0.71 | 0.0822 | 0.683 | 0.000169 | 0.101 | -5.64 | 0.36 | 129.993 | 3 | +| 2 | LITT! | LITT! | AYLØ | indie r&b | 2018 | 207758 | 40 | 0.836 | 0.272 | 0.564 | 0.000537 | 0.11 | -7.127 | 0.0424 | 130.005 | 4 | +| 3 | Confident / Feeling Cool | Enjoy Your Life | Lady Donli | nigerian pop | 2019 | 175135 | 14 | 0.894 | 0.798 | 0.611 | 0.000187 | 0.0964 | -4.961 | 0.113 | 111.087 | 4 | +| 4 | wanted you | rare. | Odunsi (The Engine) | afropop | 2018 | 152049 | 25 | 0.702 | 0.116 | 0.833 | 0.91 | 0.348 | -6.044 | 0.0447 | 105.115 | 4 | + +1. קבל מידע על מסגרת הנתונים על ידי קריאה ל-`info()`: + + ```python + df.info() + ``` + + הפלט נראה כך: + + ```output + + RangeIndex: 530 entries, 0 to 529 + Data columns (total 16 columns): + # Column Non-Null Count Dtype + --- ------ -------------- ----- + 0 name 530 non-null object + 1 album 530 non-null object + 2 artist 530 non-null object + 3 artist_top_genre 530 non-null object + 4 release_date 530 non-null int64 + 5 length 530 non-null int64 + 6 popularity 530 non-null int64 + 7 danceability 530 non-null float64 + 8 acousticness 530 non-null float64 + 9 energy 530 non-null float64 + 10 instrumentalness 530 non-null float64 + 11 liveness 530 non-null float64 + 12 loudness 530 non-null float64 + 13 speechiness 530 non-null float64 + 14 tempo 530 non-null float64 + 15 time_signature 530 non-null int64 + dtypes: float64(8), int64(4), object(4) + memory usage: 66.4+ KB + ``` + +1. בדוק שוב אם יש ערכים חסרים על ידי קריאה ל-`isnull()` ואימות שהסכום הוא 0: + + ```python + df.isnull().sum() + ``` + + נראה טוב: + + ```output + name 0 + album 0 + artist 0 + artist_top_genre 0 + release_date 0 + length 0 + popularity 0 + danceability 0 + acousticness 0 + energy 0 + instrumentalness 0 + liveness 0 + loudness 0 + speechiness 0 + tempo 0 + time_signature 0 + dtype: int64 + ``` + +1. תאר את הנתונים: + + ```python + df.describe() + ``` + + | | release_date | length | popularity | danceability | acousticness | energy | instrumentalness | liveness | loudness | speechiness | tempo | time_signature | + | ----- | ------------ | ----------- | ---------- | ------------ | ------------ | -------- | ---------------- | -------- | --------- | ----------- | ---------- | -------------- | + | count | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | + | mean | 2015.390566 | 222298.1698 | 17.507547 | 0.741619 | 0.265412 | 0.760623 | 0.016305 | 0.147308 | -4.953011 | 0.130748 | 116.487864 | 3.986792 | + | std | 3.131688 | 39696.82226 | 18.992212 | 0.117522 | 0.208342 | 0.148533 | 0.090321 | 0.123588 | 2.464186 | 0.092939 | 23.518601 | 0.333701 | + | min | 1998 | 89488 | 0 | 0.255 | 0.000665 | 0.111 | 0 | 0.0283 | -19.362 | 0.0278 | 61.695 | 3 | + | 25% | 2014 | 199305 | 0 | 0.681 | 0.089525 | 0.669 | 0 | 0.07565 | -6.29875 | 0.0591 | 102.96125 | 4 | + | 50% | 2016 | 218509 | 13 | 0.761 | 0.2205 | 0.7845 | 0.000004 | 0.1035 | -4.5585 | 0.09795 | 112.7145 | 4 | + | 75% | 2017 | 242098.5 | 31 | 0.8295 | 0.403 | 0.87575 | 0.000234 | 0.164 | -3.331 | 0.177 | 125.03925 | 4 | + | max | 2020 | 511738 | 73 | 0.966 | 0.954 | 0.995 | 0.91 | 0.811 | 0.582 | 0.514 | 206.007 | 5 | + +> 🤔 אם אנחנו עובדים עם קיבוץ, שיטה לא מפוקחת שאינה דורשת נתונים מתויגים, מדוע אנחנו מציגים את הנתונים עם תוויות? בשלב חקר הנתונים, הם שימושיים, אך הם אינם הכרחיים לפעולת האלגוריתמים של הקיבוץ. אפשר פשוט להסיר את כותרות העמודות ולהתייחס לנתונים לפי מספרי עמודות. + +הסתכל על הערכים הכלליים של הנתונים. שים לב שהפופולריות יכולה להיות '0', מה שמראה שירים שאין להם דירוג. בואו נסיר אותם בקרוב. + +1. השתמש בגרף עמודות כדי לגלות את הז'אנרים הפופולריים ביותר: + + ```python + import seaborn as sns + + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top[:5].index,y=top[:5].values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + + ![most popular](../../../../5-Clustering/1-Visualize/images/popular.png) + +✅ אם תרצה לראות יותר ערכים מובילים, שנה את `[:5]` לערך גדול יותר, או הסר אותו כדי לראות הכל. + +שים לב, כאשר הז'אנר המוביל מתואר כ'חסר', זה אומר ש-Spotify לא סיווג אותו, אז בואו נסיר אותו. + +1. הסר נתונים חסרים על ידי סינונם החוצה + + ```python + df = df[df['artist_top_genre'] != 'Missing'] + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top.index,y=top.values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + + עכשיו בדוק שוב את הז'אנרים: + + ![most popular](../../../../5-Clustering/1-Visualize/images/all-genres.png) + +1. שלושת הז'אנרים המובילים שולטים בבירור במאגר הנתונים הזה. בואו נתמקד ב-`afro dancehall`, `afropop`, ו-`nigerian pop`, בנוסף נסנן את מאגר הנתונים כדי להסיר כל דבר עם ערך פופולריות של 0 (כלומר הוא לא סווג עם פופולריות במאגר הנתונים וניתן להתייחס אליו כרעש למטרותינו): + + ```python + df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')] + df = df[(df['popularity'] > 0)] + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top.index,y=top.values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + +1. בצע בדיקה מהירה כדי לראות אם הנתונים מתואמים בצורה חזקה במיוחד: + + ```python + corrmat = df.corr(numeric_only=True) + f, ax = plt.subplots(figsize=(12, 9)) + sns.heatmap(corrmat, vmax=.8, square=True) + ``` + + ![correlations](../../../../5-Clustering/1-Visualize/images/correlation.png) + + ההתאמה החזקה היחידה היא בין `energy` ל-`loudness`, מה שלא מפתיע במיוחד, בהתחשב בכך שמוזיקה רועשת היא בדרך כלל די אנרגטית. מלבד זאת, ההתאמות יחסית חלשות. יהיה מעניין לראות מה אלגוריתם קיבוץ יכול לעשות עם הנתונים האלה. + + > 🎓 שים לב שהתאמה אינה מעידה על סיבתיות! יש לנו הוכחה להתאמה אך אין הוכחה לסיבתיות. [אתר משעשע](https://tylervigen.com/spurious-correlations) מציג כמה חזותיות שמדגישות את הנקודה הזו. + +האם יש התכנסות במאגר הנתונים הזה סביב הפופולריות הנתפסת של שיר ורמת הריקודיות שלו? גריד פייסט מראה שיש מעגלים קונצנטריים שמתיישרים, ללא קשר לז'אנר. האם ייתכן שהטעם הניגרי מתכנס ברמת ריקודיות מסוימת עבור הז'אנר הזה? + +✅ נסה נקודות נתונים שונות (אנרגיה, עוצמה, דיבוריות) ועוד או ז'אנרים מוזיקליים שונים. מה תוכל לגלות? הסתכל בטבלת `df.describe()` כדי לראות את ההתפלגות הכללית של נקודות הנתונים. + +### תרגיל - התפלגות נתונים + +האם שלושת הז'אנרים האלה שונים באופן משמעותי בתפיסת הריקודיות שלהם, בהתבסס על הפופולריות שלהם? + +1. בדוק את התפלגות הנתונים של שלושת הז'אנרים המובילים שלנו עבור פופולריות וריקודיות לאורך ציר x ו-y נתון. + + ```python + sns.set_theme(style="ticks") + + g = sns.jointplot( + data=df, + x="popularity", y="danceability", hue="artist_top_genre", + kind="kde", + ) + ``` + + תוכל לגלות מעגלים קונצנטריים סביב נקודת התכנסות כללית, שמראים את התפלגות הנקודות. + + > 🎓 שים לב שהדוגמה הזו משתמשת בגרף KDE (Kernel Density Estimate) שמייצג את הנתונים באמצעות עקומת צפיפות הסתברות רציפה. זה מאפשר לנו לפרש נתונים כשעובדים עם התפלגויות מרובות. + + באופן כללי, שלושת הז'אנרים מתיישרים באופן רופף מבחינת הפופולריות והריקודיות שלהם. קביעת קבוצות בנתונים שמתיישרים באופן רופף תהיה אתגר: + + ![distribution](../../../../5-Clustering/1-Visualize/images/distribution.png) + +1. צור גרף פיזור: + + ```python + sns.FacetGrid(df, hue="artist_top_genre", height=5) \ + .map(plt.scatter, "popularity", "danceability") \ + .add_legend() + ``` + + גרף פיזור של אותם צירים מראה דפוס דומה של התכנסות + + ![Facetgrid](../../../../5-Clustering/1-Visualize/images/facetgrid.png) + +באופן כללי, עבור קיבוץ, ניתן להשתמש בגרפי פיזור כדי להראות קבוצות של נתונים, כך שלשלוט בסוג זה של ויזואליזציה זה מאוד שימושי. בשיעור הבא, ניקח את הנתונים המסוננים האלה ונשתמש בקיבוץ k-means כדי לגלות קבוצות בנתונים האלה שנראה כי חופפות בדרכים מעניינות. + +--- + +## 🚀אתגר + +בהכנה לשיעור הבא, צור תרשים על אלגוריתמי הקיבוץ השונים שתוכל לגלות ולהשתמש בהם בסביבת ייצור. אילו סוגי בעיות הקיבוץ מנסה לפתור? + +## [שאלון לאחר השיעור](https://ff-quizzes.netlify.app/en/ml/) + +## סקירה ולימוד עצמי + +לפני שתיישם אלגוריתמי קיבוץ, כפי שלמדנו, זה רעיון טוב להבין את טבע מאגר הנתונים שלך. קרא עוד על הנושא [כאן](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) + +[מאמר מועיל זה](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) עובר על הדרכים השונות שבהן אלגוריתמי קיבוץ שונים מתנהגים, בהתחשב בצורות נתונים שונות. + +## משימה + +[חקר ויזואליזציות אחרות עבור קיבוץ](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/5-Clustering/1-Visualize/assignment.md b/translations/he/5-Clustering/1-Visualize/assignment.md new file mode 100644 index 00000000..a2b4a617 --- /dev/null +++ b/translations/he/5-Clustering/1-Visualize/assignment.md @@ -0,0 +1,25 @@ + +# חקר ויזואליזציות אחרות עבור אשכולות + +## הוראות + +בשיעור זה, עבדת עם כמה טכניקות ויזואליזציה כדי להבין כיצד לשרטט את הנתונים שלך כהכנה לאשכולות. גרפים פיזוריים (Scatterplots), במיוחד, שימושיים למציאת קבוצות של אובייקטים. חקור דרכים שונות וספריות שונות ליצירת גרפים פיזוריים ותעד את עבודתך במחברת. תוכל להשתמש בנתונים מהשיעור הזה, שיעורים אחרים, או נתונים שתמצא בעצמך (עם זאת, אנא ציין את מקורם במחברת שלך). שרטט נתונים באמצעות גרפים פיזוריים והסבר מה גילית. + +## קריטריונים להערכה + +| קריטריון | מצטיין | מספק | דורש שיפור | +| -------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ---------------------------- | +| | מוצגת מחברת עם חמישה גרפים פיזוריים מתועדים היטב | מוצגת מחברת עם פחות מחמישה גרפים פיזוריים והיא פחות מתועדת היטב | מוצגת מחברת לא שלמה | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/5-Clustering/1-Visualize/solution/Julia/README.md b/translations/he/5-Clustering/1-Visualize/solution/Julia/README.md new file mode 100644 index 00000000..df114429 --- /dev/null +++ b/translations/he/5-Clustering/1-Visualize/solution/Julia/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/5-Clustering/2-K-Means/README.md b/translations/he/5-Clustering/2-K-Means/README.md new file mode 100644 index 00000000..5269e468 --- /dev/null +++ b/translations/he/5-Clustering/2-K-Means/README.md @@ -0,0 +1,261 @@ + +# אשכולות K-Means + +## [מבחן מקדים](https://ff-quizzes.netlify.app/en/ml/) + +בשיעור הזה תלמדו כיצד ליצור אשכולות באמצעות Scikit-learn וסט הנתונים של מוזיקה ניגרית שייבאתם קודם לכן. נכסה את היסודות של K-Means לצורך אשכולות. זכרו, כפי שלמדתם בשיעור הקודם, ישנן דרכים רבות לעבוד עם אשכולות, והשיטה שתבחרו תלויה בנתונים שלכם. ננסה את K-Means מכיוון שזו טכניקת האשכולות הנפוצה ביותר. בואו נתחיל! + +מונחים שתלמדו עליהם: + +- ציון סילואט +- שיטת המרפק +- אינרציה +- שונות + +## מבוא + +[K-Means Clustering](https://wikipedia.org/wiki/K-means_clustering) היא שיטה שמקורה בתחום עיבוד האותות. היא משמשת לחלוקה וקיבוץ קבוצות נתונים ל-'k' אשכולות באמצעות סדרת תצפיות. כל תצפית פועלת לקיבוץ נקודת נתונים נתונה הקרובה ביותר ל-'ממוצע' שלה, או לנקודת המרכז של האשכול. + +ניתן להמחיש את האשכולות כ-[דיאגרמות וורונוי](https://wikipedia.org/wiki/Voronoi_diagram), הכוללות נקודה (או 'זרע') והאזור המתאים לה. + +![דיאגרמת וורונוי](../../../../5-Clustering/2-K-Means/images/voronoi.png) + +> אינפוגרפיקה מאת [Jen Looper](https://twitter.com/jenlooper) + +תהליך האשכולות של K-Means [מתבצע בשלושה שלבים](https://scikit-learn.org/stable/modules/clustering.html#k-means): + +1. האלגוריתם בוחר מספר נקודות מרכזיות (k) על ידי דגימה מתוך סט הנתונים. לאחר מכן הוא מבצע לולאה: + 1. הוא מקצה כל דגימה לנקודת המרכז הקרובה ביותר. + 2. הוא יוצר נקודות מרכזיות חדשות על ידי חישוב הממוצע של כל הדגימות שהוקצו לנקודות המרכזיות הקודמות. + 3. לאחר מכן, הוא מחשב את ההבדל בין הנקודות המרכזיות החדשות והישנות וחוזר על התהליך עד שהנקודות המרכזיות מתייצבות. + +חיסרון אחד בשימוש ב-K-Means הוא הצורך לקבוע את 'k', כלומר את מספר הנקודות המרכזיות. למרבה המזל, שיטת ה'מרפק' עוזרת להעריך ערך התחלתי טוב עבור 'k'. תנסו את זה עוד מעט. + +## דרישות מקדימות + +תעבדו בקובץ [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/notebook.ipynb) של השיעור הזה, הכולל את ייבוא הנתונים והניקוי הראשוני שביצעתם בשיעור הקודם. + +## תרגיל - הכנה + +נתחיל בהסתכלות נוספת על נתוני השירים. + +1. צרו תרשים קופסה (boxplot) על ידי קריאה ל-`boxplot()` עבור כל עמודה: + + ```python + plt.figure(figsize=(20,20), dpi=200) + + plt.subplot(4,3,1) + sns.boxplot(x = 'popularity', data = df) + + plt.subplot(4,3,2) + sns.boxplot(x = 'acousticness', data = df) + + plt.subplot(4,3,3) + sns.boxplot(x = 'energy', data = df) + + plt.subplot(4,3,4) + sns.boxplot(x = 'instrumentalness', data = df) + + plt.subplot(4,3,5) + sns.boxplot(x = 'liveness', data = df) + + plt.subplot(4,3,6) + sns.boxplot(x = 'loudness', data = df) + + plt.subplot(4,3,7) + sns.boxplot(x = 'speechiness', data = df) + + plt.subplot(4,3,8) + sns.boxplot(x = 'tempo', data = df) + + plt.subplot(4,3,9) + sns.boxplot(x = 'time_signature', data = df) + + plt.subplot(4,3,10) + sns.boxplot(x = 'danceability', data = df) + + plt.subplot(4,3,11) + sns.boxplot(x = 'length', data = df) + + plt.subplot(4,3,12) + sns.boxplot(x = 'release_date', data = df) + ``` + + הנתונים האלה מעט רועשים: על ידי התבוננות בכל עמודה כתרשים קופסה, תוכלו לראות חריגות. + + ![חריגות](../../../../5-Clustering/2-K-Means/images/boxplots.png) + + תוכלו לעבור על סט הנתונים ולהסיר את החריגות הללו, אך זה יהפוך את הנתונים למינימליים למדי. + +1. לעת עתה, בחרו אילו עמודות תשתמשו בהן לתרגיל האשכולות שלכם. בחרו עמודות עם טווחים דומים וקודדו את העמודה `artist_top_genre` כנתונים מספריים: + + ```python + from sklearn.preprocessing import LabelEncoder + le = LabelEncoder() + + X = df.loc[:, ('artist_top_genre','popularity','danceability','acousticness','loudness','energy')] + + y = df['artist_top_genre'] + + X['artist_top_genre'] = le.fit_transform(X['artist_top_genre']) + + y = le.transform(y) + ``` + +1. עכשיו עליכם לבחור כמה אשכולות למקד. אתם יודעים שיש 3 ז'אנרים של שירים שזיהינו מתוך סט הנתונים, אז בואו ננסה 3: + + ```python + from sklearn.cluster import KMeans + + nclusters = 3 + seed = 0 + + km = KMeans(n_clusters=nclusters, random_state=seed) + km.fit(X) + + # Predict the cluster for each data point + + y_cluster_kmeans = km.predict(X) + y_cluster_kmeans + ``` + + אתם רואים מערך מודפס עם אשכולות חזויים (0, 1 או 2) עבור כל שורה של מסגרת הנתונים. + +1. השתמשו במערך הזה כדי לחשב 'ציון סילואט': + + ```python + from sklearn import metrics + score = metrics.silhouette_score(X, y_cluster_kmeans) + score + ``` + +## ציון סילואט + +חפשו ציון סילואט קרוב ל-1. הציון הזה נע בין -1 ל-1, ואם הציון הוא 1, האשכול צפוף ומופרד היטב מאשכולות אחרים. ערך קרוב ל-0 מייצג אשכולות חופפים עם דגימות קרובות מאוד לגבול ההחלטה של האשכולות השכנים. [(מקור)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam) + +הציון שלנו הוא **0.53**, כלומר באמצע. זה מצביע על כך שהנתונים שלנו לא מתאימים במיוחד לסוג זה של אשכולות, אבל בואו נמשיך. + +### תרגיל - בניית מודל + +1. ייבאו את `KMeans` והתחילו את תהליך האשכולות. + + ```python + from sklearn.cluster import KMeans + wcss = [] + + for i in range(1, 11): + kmeans = KMeans(n_clusters = i, init = 'k-means++', random_state = 42) + kmeans.fit(X) + wcss.append(kmeans.inertia_) + + ``` + + יש כאן כמה חלקים שמצדיקים הסבר. + + > 🎓 טווח: אלו הן האיטרציות של תהליך האשכולות. + + > 🎓 random_state: "קובע את יצירת המספרים האקראיים עבור אתחול הנקודות המרכזיות." [מקור](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans) + + > 🎓 WCSS: "סכום הריבועים בתוך האשכולות" מודד את המרחק הממוצע בריבוע של כל הנקודות בתוך אשכול לנקודת המרכז של האשכול. [מקור](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce). + + > 🎓 אינרציה: אלגוריתמי K-Means מנסים לבחור נקודות מרכזיות כדי למזער את 'האינרציה', "מדד לכמה האשכולות קוהרנטיים פנימית." [מקור](https://scikit-learn.org/stable/modules/clustering.html). הערך נוסף למשתנה wcss בכל איטרציה. + + > 🎓 k-means++: ב-[Scikit-learn](https://scikit-learn.org/stable/modules/clustering.html#k-means) ניתן להשתמש באופטימיזציה 'k-means++', שמאתחלת את הנקודות המרכזיות כך שיהיו (בדרך כלל) רחוקות זו מזו, מה שמוביל לתוצאות טובות יותר מאתחול אקראי. + +### שיטת המרפק + +קודם לכן הסקתם, מכיוון שמיקדתם 3 ז'אנרים של שירים, שעליכם לבחור 3 אשכולות. אבל האם זה באמת המקרה? + +1. השתמשו בשיטת ה'מרפק' כדי לוודא. + + ```python + plt.figure(figsize=(10,5)) + sns.lineplot(x=range(1, 11), y=wcss, marker='o', color='red') + plt.title('Elbow') + plt.xlabel('Number of clusters') + plt.ylabel('WCSS') + plt.show() + ``` + + השתמשו במשתנה `wcss` שבניתם בשלב הקודם כדי ליצור תרשים שמראה היכן ה'כיפוף' במרפק, שמצביע על מספר האשכולות האופטימלי. אולי זה **באמת** 3! + + ![שיטת המרפק](../../../../5-Clustering/2-K-Means/images/elbow.png) + +## תרגיל - הצגת האשכולות + +1. נסו את התהליך שוב, הפעם עם שלושה אשכולות, והציגו את האשכולות כתרשים פיזור: + + ```python + from sklearn.cluster import KMeans + kmeans = KMeans(n_clusters = 3) + kmeans.fit(X) + labels = kmeans.predict(X) + plt.scatter(df['popularity'],df['danceability'],c = labels) + plt.xlabel('popularity') + plt.ylabel('danceability') + plt.show() + ``` + +1. בדקו את דיוק המודל: + + ```python + labels = kmeans.labels_ + + correct_labels = sum(y == labels) + + print("Result: %d out of %d samples were correctly labeled." % (correct_labels, y.size)) + + print('Accuracy score: {0:0.2f}'. format(correct_labels/float(y.size))) + ``` + + דיוק המודל הזה לא טוב במיוחד, וצורת האשכולות נותנת לכם רמז מדוע. + + ![אשכולות](../../../../5-Clustering/2-K-Means/images/clusters.png) + + הנתונים האלה לא מאוזנים מספיק, לא מתואמים מספיק ויש יותר מדי שונות בין ערכי העמודות כדי ליצור אשכולות טובים. למעשה, האשכולות שנוצרים כנראה מושפעים או מוטים מאוד על ידי שלוש קטגוריות הז'אנרים שהגדרנו קודם. זה היה תהליך למידה! + + בתיעוד של Scikit-learn, תוכלו לראות שמודל כמו זה, עם אשכולות שאינם מוגדרים היטב, סובל מבעיה של 'שונות': + + ![מודלים בעייתיים](../../../../5-Clustering/2-K-Means/images/problems.png) + > אינפוגרפיקה מתוך Scikit-learn + +## שונות + +שונות מוגדרת כ-"הממוצע של הריבועים של ההבדלים מהממוצע" [(מקור)](https://www.mathsisfun.com/data/standard-deviation.html). בהקשר של בעיית האשכולות הזו, היא מתייחסת לנתונים שבהם המספרים בסט הנתונים נוטים לסטות יותר מדי מהממוצע. + +✅ זהו רגע מצוין לחשוב על כל הדרכים שבהן תוכלו לתקן את הבעיה הזו. לשפר את הנתונים עוד קצת? להשתמש בעמודות אחרות? להשתמש באלגוריתם אחר? רמז: נסו [לשנות את קנה המידה של הנתונים שלכם](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) כדי לנרמל אותם ולבדוק עמודות אחרות. + +> נסו את '[מחשבון השונות](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)' כדי להבין את המושג קצת יותר. + +--- + +## 🚀אתגר + +בלו זמן עם המחברת הזו, שנו פרמטרים. האם תוכלו לשפר את דיוק המודל על ידי ניקוי הנתונים יותר (למשל הסרת חריגות)? תוכלו להשתמש במשקלים כדי לתת משקל רב יותר לדגימות נתונים מסוימות. מה עוד תוכלו לעשות כדי ליצור אשכולות טובים יותר? + +רמז: נסו לשנות את קנה המידה של הנתונים שלכם. יש קוד עם הערות במחברת שמוסיף שינוי קנה מידה סטנדרטי כדי לגרום לעמודות הנתונים להיראות דומות יותר זו לזו מבחינת טווח. תגלו שבעוד שציון הסילואט יורד, ה'כיפוף' בתרשים המרפק מתמתן. זאת מכיוון שהשארת הנתונים ללא שינוי קנה מידה מאפשרת לנתונים עם פחות שונות לשאת משקל רב יותר. קראו עוד על הבעיה הזו [כאן](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226). + +## [מבחן מסכם](https://ff-quizzes.netlify.app/en/ml/) + +## סקירה ולימוד עצמי + +הסתכלו על סימולטור K-Means [כמו זה](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). תוכלו להשתמש בכלי הזה כדי להמחיש נקודות נתונים לדוגמה ולקבוע את הנקודות המרכזיות שלהן. תוכלו לערוך את אקראיות הנתונים, מספרי האשכולות ומספרי הנקודות המרכזיות. האם זה עוזר לכם לקבל מושג כיצד ניתן לקבץ את הנתונים? + +בנוסף, הסתכלו על [המסמך הזה על K-Means](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) מסטנפורד. + +## משימה + +[נסו שיטות אשכולות שונות](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/5-Clustering/2-K-Means/assignment.md b/translations/he/5-Clustering/2-K-Means/assignment.md new file mode 100644 index 00000000..b020d1f4 --- /dev/null +++ b/translations/he/5-Clustering/2-K-Means/assignment.md @@ -0,0 +1,25 @@ + +# נסו שיטות אשכולות שונות + +## הוראות + +בשיעור זה למדתם על אשכולות K-Means. לפעמים K-Means אינו מתאים לנתונים שלכם. צרו מחברת תוך שימוש בנתונים מהשיעורים הללו או ממקור אחר (תנו קרדיט למקור) והציגו שיטת אשכולות שונה שאינה משתמשת ב-K-Means. מה למדתם? + +## קריטריונים להערכה + +| קריטריון | מצטיין | מספק | דורש שיפור | +| -------- | ------------------------------------------------------------- | ----------------------------------------------------------------- | --------------------------- | +| | מוצגת מחברת עם מודל אשכולות מתועד היטב | מוצגת מחברת ללא תיעוד מספק ו/או עבודה לא מלאה | מוגשת עבודה לא מלאה | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/5-Clustering/2-K-Means/solution/Julia/README.md b/translations/he/5-Clustering/2-K-Means/solution/Julia/README.md new file mode 100644 index 00000000..1034a0a1 --- /dev/null +++ b/translations/he/5-Clustering/2-K-Means/solution/Julia/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/5-Clustering/README.md b/translations/he/5-Clustering/README.md new file mode 100644 index 00000000..1ae6208d --- /dev/null +++ b/translations/he/5-Clustering/README.md @@ -0,0 +1,42 @@ + +# מודלים של אשכולות ללמידת מכונה + +אשכולות הם משימה בלמידת מכונה שבה מחפשים למצוא אובייקטים הדומים זה לזה ולחבר אותם לקבוצות הנקראות אשכולות. מה שמבדיל אשכולות מגישות אחרות בלמידת מכונה הוא שהדברים מתרחשים באופן אוטומטי, למעשה, אפשר לומר שזה ההפך מלמידה מונחית. + +## נושא אזורי: מודלים של אשכולות לטעמי מוזיקה של קהל ניגרי 🎧 + +הקהל המגוון בניגריה מתאפיין בטעמי מוזיקה מגוונים. באמצעות נתונים שנאספו מ-Spotify (בהשראת [המאמר הזה](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421)), נבחן כמה מהמוזיקה הפופולרית בניגריה. מערך הנתונים הזה כולל מידע על ציוני 'ריקודיות', 'אקוסטיות', עוצמת קול, 'דיבוריות', פופולריות ואנרגיה של שירים שונים. יהיה מעניין לגלות דפוסים בנתונים האלה! + +![פלטת תקליטים](../../../5-Clustering/images/turntable.jpg) + +> צילום מאת Marcela Laskoski ב-Unsplash + +בסדרת השיעורים הזו, תגלו דרכים חדשות לנתח נתונים באמצעות טכניקות אשכולות. אשכולות שימושיים במיוחד כאשר מערך הנתונים שלכם חסר תוויות. אם יש לו תוויות, אז טכניקות סיווג כמו אלו שלמדתם בשיעורים קודמים עשויות להיות מועילות יותר. אבל במקרים שבהם אתם מחפשים לקבץ נתונים ללא תוויות, אשכולות הם דרך מצוינת לגלות דפוסים. + +> ישנם כלים שימושיים בעלי קוד נמוך שיכולים לעזור לכם ללמוד לעבוד עם מודלים של אשכולות. נסו [Azure ML למשימה זו](https://docs.microsoft.com/learn/modules/create-clustering-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +## שיעורים + +1. [מבוא לאשכולות](1-Visualize/README.md) +2. [אשכולות K-Means](2-K-Means/README.md) + +## קרדיטים + +השיעורים הללו נכתבו עם 🎶 על ידי [Jen Looper](https://www.twitter.com/jenlooper) עם ביקורות מועילות מאת [Rishit Dagli](https://rishit_dagli) ו-[Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan). + +מערך הנתונים [שירים ניגריים](https://www.kaggle.com/sootersaalu/nigerian-songs-spotify) נלקח מ-Kaggle ונאסף מ-Spotify. + +דוגמאות שימושיות של K-Means שסייעו ביצירת השיעור כוללות את [חקירת האיריס הזו](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering), [מחברת מבוא זו](https://www.kaggle.com/prashant111/k-means-clustering-with-python), ואת [דוגמת ה-NGO ההיפותטית הזו](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering). + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/6-NLP/1-Introduction-to-NLP/README.md b/translations/he/6-NLP/1-Introduction-to-NLP/README.md new file mode 100644 index 00000000..5defa461 --- /dev/null +++ b/translations/he/6-NLP/1-Introduction-to-NLP/README.md @@ -0,0 +1,179 @@ + +# מבוא לעיבוד שפה טבעית + +השיעור הזה מכסה היסטוריה קצרה ומושגים חשובים של *עיבוד שפה טבעית*, תחום משנה של *בלשנות חישובית*. + +## [שאלון לפני השיעור](https://ff-quizzes.netlify.app/en/ml/) + +## מבוא + +NLP, כפי שהוא מוכר בדרך כלל, הוא אחד התחומים הידועים ביותר שבהם נעשה שימוש בלמידת מכונה בתוכנות ייצור. + +✅ האם אתם יכולים לחשוב על תוכנה שאתם משתמשים בה מדי יום ושכנראה יש בה שילוב של NLP? מה לגבי תוכנות עיבוד תמלילים או אפליקציות ניידות שאתם משתמשים בהן באופן קבוע? + +אתם תלמדו על: + +- **הרעיון של שפות**. איך שפות התפתחו ומה היו התחומים המרכזיים של המחקר. +- **הגדרות ומושגים**. תלמדו גם הגדרות ומושגים על איך מחשבים מעבדים טקסט, כולל ניתוח תחבירי, דקדוק וזיהוי שמות עצם ופעלים. ישנם משימות קידוד בשיעור הזה, ומוצגים מספר מושגים חשובים שתלמדו לקודד בשיעורים הבאים. + +## בלשנות חישובית + +בלשנות חישובית היא תחום מחקר ופיתוח שנמשך עשרות שנים, העוסק בשאלה כיצד מחשבים יכולים לעבוד עם שפות, ואפילו להבין, לתרגם ולתקשר באמצעותן. עיבוד שפה טבעית (NLP) הוא תחום קשור שמתמקד באיך מחשבים יכולים לעבד שפות 'טבעיות', כלומר שפות אנושיות. + +### דוגמה - תכתיב בטלפון + +אם אי פעם הכתבתם לטלפון במקום להקליד או שאלתם עוזר וירטואלי שאלה, הדיבור שלכם הומר לצורת טקסט ואז עובד או *נותח* מהשפה שבה דיברתם. מילות המפתח שזוהו עובדו לפורמט שהטלפון או העוזר הווירטואלי יכלו להבין ולפעול לפיו. + +![הבנה](../../../../6-NLP/1-Introduction-to-NLP/images/comprehension.png) +> הבנה בלשנית אמיתית היא קשה! תמונה מאת [Jen Looper](https://twitter.com/jenlooper) + +### איך הטכנולוגיה הזו מתאפשרת? + +הדבר מתאפשר כי מישהו כתב תוכנית מחשב לעשות זאת. לפני כמה עשורים, כמה סופרי מדע בדיוני חזו שאנשים ידברו בעיקר עם המחשבים שלהם, והמחשבים תמיד יבינו בדיוק למה הם מתכוונים. למרבה הצער, התברר שזהו אתגר קשה יותר ממה שרבים דמיינו, ולמרות שהבעיה מובנת הרבה יותר כיום, ישנם אתגרים משמעותיים בהשגת עיבוד שפה טבעית 'מושלם' בכל הנוגע להבנת המשמעות של משפט. זו בעיה קשה במיוחד כשמדובר בהבנת הומור או זיהוי רגשות כמו סרקזם במשפט. + +בשלב הזה, ייתכן שאתם נזכרים בשיעורי בית הספר שבהם המורה לימד את חלקי הדקדוק במשפט. במדינות מסוימות, תלמידים לומדים דקדוק ובלשנות כתחום לימוד ייעודי, אך ברבות מהמדינות, נושאים אלו נכללים כחלק מלימוד שפה: בין אם זו השפה הראשונה שלכם בבית הספר היסודי (לימוד קריאה וכתיבה) ואולי שפה שנייה בבית הספר העל-יסודי או התיכון. אל תדאגו אם אינכם מומחים בהבחנה בין שמות עצם לפעלים או בין תארים לתארי פועל! + +אם אתם מתקשים להבדיל בין *הווה פשוט* ל-*הווה מתמשך*, אתם לא לבד. זהו אתגר עבור אנשים רבים, אפילו דוברי שפת אם. החדשות הטובות הן שמחשבים טובים מאוד ביישום כללים פורמליים, ותלמדו לכתוב קוד שיכול *לנתח* משפט כמו בן אדם. האתגר הגדול יותר שתבדקו בהמשך הוא הבנת *המשמעות* ו-*הרגש* של משפט. + +## דרישות מוקדמות + +לשיעור הזה, הדרישה העיקרית היא היכולת לקרוא ולהבין את השפה של השיעור. אין בעיות מתמטיות או משוואות לפתור. בעוד שהמחבר המקורי כתב את השיעור באנגלית, הוא מתורגם גם לשפות אחרות, כך שאתם עשויים לקרוא תרגום. ישנם דוגמאות שבהן נעשה שימוש במספר שפות שונות (כדי להשוות את כללי הדקדוק של שפות שונות). אלו *לא* מתורגמות, אך הטקסט המסביר כן, כך שהמשמעות צריכה להיות ברורה. + +למשימות הקידוד, תשתמשו ב-Python והדוגמאות משתמשות ב-Python 3.8. + +בקטע הזה, תצטרכו ותשתמשו ב: + +- **הבנה של Python 3**. הבנת שפת תכנות ב-Python 3, השיעור הזה משתמש בקלט, לולאות, קריאת קבצים, מערכים. +- **Visual Studio Code + הרחבה**. נשתמש ב-Visual Studio Code ובהרחבת Python שלו. תוכלו גם להשתמש ב-IDE של Python לבחירתכם. +- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) היא ספריית עיבוד טקסט פשוטה עבור Python. עקבו אחר ההוראות באתר TextBlob כדי להתקין אותה במערכת שלכם (התקינו גם את ה-corpora, כפי שמוצג למטה): + + ```bash + pip install -U textblob + python -m textblob.download_corpora + ``` + +> 💡 טיפ: ניתן להריץ Python ישירות בסביבות VS Code. בדקו את [התיעוד](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) למידע נוסף. + +## לדבר עם מכונות + +ההיסטוריה של הניסיון לגרום למחשבים להבין שפה אנושית נמשכת עשרות שנים, ואחד המדענים הראשונים שעסקו בעיבוד שפה טבעית היה *אלן טיורינג*. + +### מבחן טיורינג + +כשטיורינג חקר *בינה מלאכותית* בשנות ה-50, הוא שקל אם ניתן לערוך מבחן שיחה בין אדם למחשב (באמצעות תקשורת כתובה) שבו האדם בשיחה אינו בטוח אם הוא משוחח עם אדם אחר או עם מחשב. + +אם, לאחר פרק זמן מסוים של שיחה, האדם לא יכול לקבוע אם התשובות הגיעו ממחשב או לא, האם ניתן לומר שהמחשב *חושב*? + +### ההשראה - 'משחק החיקוי' + +הרעיון לכך הגיע ממשחק מסיבות שנקרא *משחק החיקוי*, שבו חוקר נמצא לבד בחדר ומוטלת עליו המשימה לקבוע מי מבין שני אנשים (בחדר אחר) הם גבר ואישה בהתאמה. החוקר יכול לשלוח פתקים, ועליו לנסות לחשוב על שאלות שבהן התשובות הכתובות יחשפו את המגדר של האדם המסתורי. כמובן, השחקנים בחדר השני מנסים להטעות את החוקר על ידי מתן תשובות באופן שמטעה או מבלבל את החוקר, תוך כדי מתן רושם של תשובה כנה. + +### פיתוח אליזה + +בשנות ה-60, מדען מ-MIT בשם *ג'וזף וייזנבאום* פיתח [*אליזה*](https://wikipedia.org/wiki/ELIZA), 'מטפלת' ממוחשבת ששואלת את האדם שאלות ונותנת רושם של הבנת תשובותיו. עם זאת, בעוד שאליזה יכלה לנתח משפט ולזהות מבנים דקדוקיים מסוימים ומילות מפתח כדי לתת תשובה סבירה, לא ניתן היה לומר שהיא *מבינה* את המשפט. אם אליזה הוצגה עם משפט בפורמט "**אני** עצוב", היא עשויה לשנות ולסדר מחדש מילים במשפט כדי ליצור את התשובה "כמה זמן **אתה** עצוב". + +זה נתן את הרושם שאליזה הבינה את ההצהרה ושאלה שאלה המשך, בעוד שבמציאות, היא שינתה את הזמן והוסיפה כמה מילים. אם אליזה לא יכלה לזהות מילת מפתח שיש לה תשובה עבורה, היא הייתה נותנת תשובה אקראית שיכולה להיות רלוונטית להרבה הצהרות שונות. ניתן היה להטעות את אליזה בקלות, למשל אם משתמש כתב "**אתה** אופניים", היא עשויה להגיב עם "כמה זמן **אני** אופניים?", במקום תשובה סבירה יותר. + +[![שיחה עם אליזה](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "שיחה עם אליזה") + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון על תוכנית אליזה המקורית + +> הערה: ניתן לקרוא את התיאור המקורי של [אליזה](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) שפורסם ב-1966 אם יש לכם חשבון ACM. לחלופין, קראו על אליזה ב-[ויקיפדיה](https://wikipedia.org/wiki/ELIZA). + +## תרגיל - קידוד בוט שיחה בסיסי + +בוט שיחה, כמו אליזה, הוא תוכנית שמקבלת קלט ממשתמש ונותנת רושם של הבנה ותגובה אינטליגנטית. בניגוד לאליזה, הבוט שלנו לא יכלול מספר כללים שיתנו לו את הרושם של שיחה אינטליגנטית. במקום זאת, הבוט שלנו יוכל רק לשמור על השיחה באמצעות תגובות אקראיות שעשויות להתאים כמעט לכל שיחה טריוויאלית. + +### התוכנית + +השלבים שלכם בבניית בוט שיחה: + +1. הדפיסו הוראות שמייעצות למשתמש איך לתקשר עם הבוט +2. התחילו לולאה + 1. קבלו קלט ממשתמש + 2. אם המשתמש ביקש לצאת, צאו + 3. עבדו את הקלט של המשתמש וקבעו תגובה (במקרה הזה, התגובה היא בחירה אקראית מתוך רשימת תגובות כלליות אפשריות) + 4. הדפיסו את התגובה +3. חזרו לשלב 2 + +### בניית הבוט + +בואו ניצור את הבוט עכשיו. נתחיל בהגדרת כמה משפטים. + +1. צרו את הבוט הזה בעצמכם ב-Python עם התגובות האקראיות הבאות: + + ```python + random_responses = ["That is quite interesting, please tell me more.", + "I see. Do go on.", + "Why do you say that?", + "Funny weather we've been having, isn't it?", + "Let's change the subject.", + "Did you catch the game last night?"] + ``` + + הנה דוגמת פלט שתנחה אתכם (קלט המשתמש מופיע בשורות שמתחילות ב-`>`): + + ```output + Hello, I am Marvin, the simple robot. + You can end this conversation at any time by typing 'bye' + After typing each answer, press 'enter' + How are you today? + > I am good thanks + That is quite interesting, please tell me more. + > today I went for a walk + Did you catch the game last night? + > I did, but my team lost + Funny weather we've been having, isn't it? + > yes but I hope next week is better + Let's change the subject. + > ok, lets talk about music + Why do you say that? + > because I like music! + Why do you say that? + > bye + It was nice talking to you, goodbye! + ``` + + פתרון אפשרי למשימה נמצא [כאן](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/1-Introduction-to-NLP/solution/bot.py) + + ✅ עצרו וחשבו + + 1. האם אתם חושבים שהתגובות האקראיות יוכלו 'להטעות' מישהו לחשוב שהבוט באמת הבין אותם? + 2. אילו תכונות הבוט יצטרך כדי להיות יעיל יותר? + 3. אם בוט באמת יכול 'להבין' את המשמעות של משפט, האם הוא יצטרך 'לזכור' את המשמעות של משפטים קודמים בשיחה גם כן? + +--- + +## 🚀אתגר + +בחרו אחד מהאלמנטים של "עצרו וחשבו" למעלה ונסו ליישם אותו בקוד או כתבו פתרון על נייר באמצעות פסאודו-קוד. + +בשיעור הבא, תלמדו על מספר גישות נוספות לניתוח שפה טבעית ולמידת מכונה. + +## [שאלון אחרי השיעור](https://ff-quizzes.netlify.app/en/ml/) + +## סקירה ולימוד עצמי + +עיינו במקורות למטה כהזדמנויות לקריאה נוספת. + +### מקורות + +1. שובר, לנארט, "בלשנות חישובית", *The Stanford Encyclopedia of Philosophy* (מהדורת אביב 2020), אדוארד נ. זלטה (עורך), URL = . +2. אוניברסיטת פרינסטון "אודות WordNet." [WordNet](https://wordnet.princeton.edu/). אוניברסיטת פרינסטון. 2010. + +## משימה + +[חפשו בוט](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/6-NLP/1-Introduction-to-NLP/assignment.md b/translations/he/6-NLP/1-Introduction-to-NLP/assignment.md new file mode 100644 index 00000000..a0f122ca --- /dev/null +++ b/translations/he/6-NLP/1-Introduction-to-NLP/assignment.md @@ -0,0 +1,25 @@ + +# חיפוש אחר בוט + +## הוראות + +בוטים נמצאים בכל מקום. המשימה שלך: למצוא אחד ולאמץ אותו! ניתן למצוא אותם באתרי אינטרנט, באפליקציות בנקאיות ובטלפון, למשל כאשר אתה מתקשר לחברות שירותים פיננסיים לקבלת ייעוץ או מידע על חשבון. נתח את הבוט ונסה לבלבל אותו. אם הצלחת לבלבל את הבוט, מדוע לדעתך זה קרה? כתוב מאמר קצר על החוויה שלך. + +## קריטריונים להערכה + +| קריטריון | מצטיין | מספק | דורש שיפור | +| -------- | ------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | --------------------- | +| | נכתב מאמר מלא בן עמוד אחד, המסביר את הארכיטקטורה המשוערת של הבוט ומתאר את החוויה שלך איתו | המאמר אינו שלם או אינו מבוסס היטב | לא הוגש מאמר | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). בעוד שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/6-NLP/2-Tasks/README.md b/translations/he/6-NLP/2-Tasks/README.md new file mode 100644 index 00000000..0b5aba06 --- /dev/null +++ b/translations/he/6-NLP/2-Tasks/README.md @@ -0,0 +1,224 @@ + +# משימות וטכניקות נפוצות בעיבוד שפה טבעית + +ברוב המשימות של *עיבוד שפה טבעית*, הטקסט שיש לעבד חייב להיות מפורק, נבדק, והתוצאות נשמרות או מושוות עם חוקים ומאגרי נתונים. משימות אלו מאפשרות למתכנת להסיק את _המשמעות_ או _הכוונה_ או רק את _תדירות_ המונחים והמילים בטקסט. + +## [שאלון לפני ההרצאה](https://ff-quizzes.netlify.app/en/ml/) + +בואו נגלה טכניקות נפוצות המשמשות לעיבוד טקסט. בשילוב עם למידת מכונה, טכניקות אלו עוזרות לנתח כמויות גדולות של טקסט בצורה יעילה. לפני שמיישמים למידת מכונה למשימות אלו, עם זאת, חשוב להבין את הבעיות שבהן נתקל מומחה NLP. + +## משימות נפוצות בעיבוד שפה טבעית + +ישנן דרכים שונות לנתח טקסט שבו אתם עובדים. ישנן משימות שניתן לבצע, ודרך משימות אלו ניתן להבין את הטקסט ולהסיק מסקנות. בדרך כלל מבצעים את המשימות הללו ברצף. + +### טוקניזציה + +כנראה הדבר הראשון שרוב האלגוריתמים של NLP צריכים לעשות הוא לפצל את הטקסט לטוקנים, או מילים. למרות שזה נשמע פשוט, התחשבות בסימני פיסוק ובמפרידי מילים ומשפטים בשפות שונות יכולה להפוך את המשימה למורכבת. ייתכן שתצטרכו להשתמש בשיטות שונות כדי לקבוע את הגבולות. + +![טוקניזציה](../../../../6-NLP/2-Tasks/images/tokenization.png) +> טוקניזציה של משפט מתוך **גאווה ודעה קדומה**. אינפוגרפיקה מאת [Jen Looper](https://twitter.com/jenlooper) + +### אמבדינגים + +[אמבדינגים של מילים](https://wikipedia.org/wiki/Word_embedding) הם דרך להמיר את נתוני הטקסט שלכם למספרים. אמבדינגים נעשים בצורה כזו שמילים עם משמעות דומה או מילים שמשתמשים בהן יחד מתרכזות יחד. + +![אמבדינגים של מילים](../../../../6-NLP/2-Tasks/images/embedding.png) +> "יש לי את הכבוד הרב ביותר לעצבים שלך, הם חברים ותיקים שלי." - אמבדינגים של מילים למשפט מתוך **גאווה ודעה קדומה**. אינפוגרפיקה מאת [Jen Looper](https://twitter.com/jenlooper) + +✅ נסו [את הכלי המעניין הזה](https://projector.tensorflow.org/) להתנסות באמבדינגים של מילים. לחיצה על מילה אחת מציגה קבוצות של מילים דומות: 'toy' מתרכז עם 'disney', 'lego', 'playstation', ו-'console'. + +### ניתוח תחבירי ותיוג חלקי דיבר + +כל מילה שעברה טוקניזציה יכולה להיות מתויגת כחלק דיבר - שם עצם, פועל או תואר. המשפט `השועל האדום המהיר קפץ מעל הכלב החום העצלן` עשוי להיות מתויג כך: שועל = שם עצם, קפץ = פועל. + +![ניתוח תחבירי](../../../../6-NLP/2-Tasks/images/parse.png) + +> ניתוח תחבירי של משפט מתוך **גאווה ודעה קדומה**. אינפוגרפיקה מאת [Jen Looper](https://twitter.com/jenlooper) + +ניתוח תחבירי הוא זיהוי אילו מילים קשורות זו לזו במשפט - למשל `השועל האדום המהיר קפץ` הוא רצף של תואר-שם עצם-פועל שנפרד מהרצף `הכלב החום העצלן`. + +### תדירות מילים וביטויים + +הליך שימושי בעת ניתוח גוף טקסט גדול הוא לבנות מילון של כל מילה או ביטוי מעניין וכמה פעמים הם מופיעים. המשפט `השועל האדום המהיר קפץ מעל הכלב החום העצלן` מכיל תדירות של 2 עבור המילה "ה". + +בואו נסתכל על טקסט לדוגמה שבו נספור את תדירות המילים. השיר "The Winners" של רודיארד קיפלינג מכיל את הבית הבא: + +```output +What the moral? Who rides may read. +When the night is thick and the tracks are blind +A friend at a pinch is a friend, indeed, +But a fool to wait for the laggard behind. +Down to Gehenna or up to the Throne, +He travels the fastest who travels alone. +``` + +מכיוון שתדירות ביטויים יכולה להיות רגישה או לא רגישה לאותיות גדולות, הביטוי `a friend` מופיע בתדירות של 2, `the` מופיע בתדירות של 6, ו-`travels` מופיע בתדירות של 2. + +### N-grams + +ניתן לפצל טקסט לרצפים של מילים באורך קבוע, מילה אחת (unigram), שתי מילים (bigram), שלוש מילים (trigram) או כל מספר מילים (n-grams). + +לדוגמה, המשפט `השועל האדום המהיר קפץ מעל הכלב החום העצלן` עם ערך n-gram של 2 יפיק את ה-n-grams הבאים: + +1. השועל האדום +2. האדום המהיר +3. המהיר קפץ +4. קפץ מעל +5. מעל הכלב +6. הכלב החום +7. החום העצלן + +ניתן לדמיין זאת כקופסה מחליקה על פני המשפט. הנה זה עבור n-grams של 3 מילים, ה-n-gram מודגש בכל משפט: + +1. **השועל האדום המהיר** קפץ מעל הכלב החום העצלן +2. השועל **האדום המהיר קפץ** מעל הכלב החום העצלן +3. השועל האדום **המהיר קפץ מעל** הכלב החום העצלן +4. השועל האדום המהיר **קפץ מעל הכלב** החום העצלן +5. השועל האדום המהיר קפץ **מעל הכלב החום** העצלן +6. השועל האדום המהיר קפץ מעל **הכלב החום העצלן** + +![חלון מחליק של n-grams](../../../../6-NLP/2-Tasks/images/n-grams.gif) + +> ערך n-gram של 3: אינפוגרפיקה מאת [Jen Looper](https://twitter.com/jenlooper) + +### חילוץ ביטויי שם עצם + +ברוב המשפטים יש שם עצם שהוא הנושא או המושא של המשפט. באנגלית, ניתן לזהות אותו לעיתים קרובות ככזה שמקדים אותו 'a', 'an' או 'the'. זיהוי הנושא או המושא של משפט על ידי 'חילוץ ביטוי שם עצם' הוא משימה נפוצה ב-NLP כאשר מנסים להבין את משמעות המשפט. + +✅ במשפט "I cannot fix on the hour, or the spot, or the look or the words, which laid the foundation. It is too long ago. I was in the middle before I knew that I had begun.", האם תוכלו לזהות את ביטויי שם העצם? + +במשפט `השועל האדום המהיר קפץ מעל הכלב החום העצלן` ישנם 2 ביטויי שם עצם: **השועל האדום המהיר** ו-**הכלב החום העצלן**. + +### ניתוח רגשות + +ניתן לנתח משפט או טקסט כדי לקבוע את הרגש שבו, או עד כמה הוא *חיובי* או *שלילי*. רגש נמדד ב-*קוטביות* וב-*אובייקטיביות/סובייקטיביות*. קוטביות נמדדת מ-1.0- עד 1.0 (שלילי עד חיובי) ו-0.0 עד 1.0 (הכי אובייקטיבי עד הכי סובייקטיבי). + +✅ בהמשך תלמדו שיש דרכים שונות לקבוע רגש באמצעות למידת מכונה, אך דרך אחת היא להחזיק רשימה של מילים וביטויים שמסווגים כחיוביים או שליליים על ידי מומחה אנושי וליישם את המודל הזה על טקסט כדי לחשב ציון קוטביות. האם אתם יכולים לראות כיצד זה יעבוד בנסיבות מסוימות ופחות טוב באחרות? + +### נטייה + +נטייה מאפשרת לכם לקחת מילה ולקבל את הצורה היחידית או הרבים שלה. + +### לממטיזציה + +*למה* היא השורש או המילה הראשית עבור קבוצת מילים, למשל *flew*, *flies*, *flying* יש להן למה של הפועל *fly*. + +ישנם גם מאגרי נתונים שימושיים זמינים לחוקר NLP, במיוחד: + +### WordNet + +[WordNet](https://wordnet.princeton.edu/) הוא מאגר נתונים של מילים, מילים נרדפות, מילים מנוגדות ועוד פרטים רבים עבור כל מילה בשפות רבות ושונות. הוא שימושי מאוד כאשר מנסים לבנות תרגומים, בודקי איות או כלים לשפה מכל סוג. + +## ספריות NLP + +למזלכם, אין צורך לבנות את כל הטכניקות הללו בעצמכם, שכן ישנן ספריות Python מצוינות שמקלות מאוד על מפתחים שאינם מתמחים בעיבוד שפה טבעית או למידת מכונה. השיעורים הבאים כוללים דוגמאות נוספות לכך, אך כאן תלמדו כמה דוגמאות שימושיות שיעזרו לכם במשימה הבאה. + +### תרגיל - שימוש בספריית `TextBlob` + +בואו נשתמש בספרייה בשם TextBlob שכן היא מכילה APIs מועילים להתמודדות עם סוגי משימות אלו. TextBlob "עומדת על כתפיהם של ענקים כמו [NLTK](https://nltk.org) ו-[pattern](https://github.com/clips/pattern), ומשתלבת היטב עם שניהם." יש לה כמות משמעותית של למידת מכונה מובנית ב-API שלה. + +> הערה: מדריך [Quick Start](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) שימושי זמין עבור TextBlob ומומלץ למפתחי Python מנוסים. + +בעת ניסיון לזהות *ביטויי שם עצם*, TextBlob מציעה מספר אפשרויות של מחלצים למציאת ביטויי שם עצם. + +1. הסתכלו על `ConllExtractor`. + + ```python + from textblob import TextBlob + from textblob.np_extractors import ConllExtractor + # import and create a Conll extractor to use later + extractor = ConllExtractor() + + # later when you need a noun phrase extractor: + user_input = input("> ") + user_input_blob = TextBlob(user_input, np_extractor=extractor) # note non-default extractor specified + np = user_input_blob.noun_phrases + ``` + + > מה קורה כאן? [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) הוא "מחלץ ביטויי שם עצם שמשתמש בניתוח תחבירי מבוסס על קורפוס האימון ConLL-2000." ConLL-2000 מתייחס לוועידת Computational Natural Language Learning בשנת 2000. בכל שנה הוועידה אירחה סדנה להתמודד עם בעיית NLP מורכבת, ובשנת 2000 זו הייתה חלוקת שמות עצם. מודל אומן על עיתון Wall Street Journal, עם "סעיפים 15-18 כנתוני אימון (211727 טוקנים) וסעיף 20 כנתוני בדיקה (47377 טוקנים)". תוכלו לראות את ההליכים ששימשו [כאן](https://www.clips.uantwerpen.be/conll2000/chunking/) ואת [התוצאות](https://ifarm.nl/erikt/research/np-chunking.html). + +### אתגר - שיפור הבוט שלכם עם NLP + +בשיעור הקודם בניתם בוט שאלות ותשובות פשוט מאוד. עכשיו, תשפרו את מרווין ותגרמו לו להיות קצת יותר אמפתי על ידי ניתוח הקלט שלכם לרגש והדפסת תגובה שתתאים לרגש. תצטרכו גם לזהות `noun_phrase` ולשאול עליו. + +השלבים שלכם בבניית בוט שיחה טוב יותר: + +1. הדפיסו הוראות שמייעצות למשתמש כיצד לתקשר עם הבוט +2. התחילו לולאה + 1. קבלו קלט מהמשתמש + 2. אם המשתמש ביקש לצאת, צאו + 3. עבדו את קלט המשתמש וקבעו תגובת רגש מתאימה + 4. אם זוהה ביטוי שם עצם ברגש, הפכו אותו לרבים ושאלו על הנושא + 5. הדפיסו תגובה +3. חזרו לשלב 2 + +הנה קטע קוד לקביעת רגש באמצעות TextBlob. שימו לב שיש רק ארבע *דרגות* של תגובת רגש (אתם יכולים להוסיף יותר אם תרצו): + +```python +if user_input_blob.polarity <= -0.5: + response = "Oh dear, that sounds bad. " +elif user_input_blob.polarity <= 0: + response = "Hmm, that's not great. " +elif user_input_blob.polarity <= 0.5: + response = "Well, that sounds positive. " +elif user_input_blob.polarity <= 1: + response = "Wow, that sounds great. " +``` + +הנה דוגמת פלט שתנחה אתכם (קלט המשתמש מופיע בשורות שמתחילות ב->): + +```output +Hello, I am Marvin, the friendly robot. +You can end this conversation at any time by typing 'bye' +After typing each answer, press 'enter' +How are you today? +> I am ok +Well, that sounds positive. Can you tell me more? +> I went for a walk and saw a lovely cat +Well, that sounds positive. Can you tell me more about lovely cats? +> cats are the best. But I also have a cool dog +Wow, that sounds great. Can you tell me more about cool dogs? +> I have an old hounddog but he is sick +Hmm, that's not great. Can you tell me more about old hounddogs? +> bye +It was nice talking to you, goodbye! +``` + +פתרון אפשרי למשימה נמצא [כאן](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/2-Tasks/solution/bot.py) + +✅ בדיקת ידע + +1. האם אתם חושבים שהתגובות האמפתיות יגרמו למישהו לחשוב שהבוט באמת מבין אותו? +2. האם זיהוי ביטוי שם עצם הופך את הבוט ליותר 'אמין'? +3. מדוע חילוץ 'ביטוי שם עצם' ממשפט הוא דבר שימושי לעשות? + +--- + +ממשו את הבוט בבדיקת הידע הקודמת ונסו אותו על חבר. האם הוא יכול להטעות אותם? האם תוכלו להפוך את הבוט שלכם ליותר 'אמין'? + +## 🚀אתגר + +קחו משימה בבדיקת הידע הקודמת ונסו לממש אותה. נסו את הבוט על חבר. האם הוא יכול להטעות אותם? האם תוכלו להפוך את הבוט שלכם ליותר 'אמין'? + +## [שאלון לאחר ההרצאה](https://ff-quizzes.netlify.app/en/ml/) + +## סקירה ולימוד עצמי + +בשיעורים הבאים תלמדו יותר על ניתוח רגשות. חקרו את הטכניקה המעניינת הזו במאמרים כמו אלו ב-[KDNuggets](https://www.kdnuggets.com/tag/nlp) + +## משימה + +[גרמו לבוט לדבר בחזרה](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/6-NLP/2-Tasks/assignment.md b/translations/he/6-NLP/2-Tasks/assignment.md new file mode 100644 index 00000000..ca8c64d6 --- /dev/null +++ b/translations/he/6-NLP/2-Tasks/assignment.md @@ -0,0 +1,25 @@ + +# לגרום לבוט להגיב + +## הוראות + +בשיעורים הקודמים, תכנתת בוט בסיסי שאפשר לשוחח איתו. הבוט הזה נותן תשובות אקראיות עד שתגיד 'bye'. האם תוכל לגרום לתשובות להיות קצת פחות אקראיות, ולהפעיל תגובות אם תגיד דברים ספציפיים, כמו 'למה' או 'איך'? חשוב קצת איך למידת מכונה יכולה להפוך את העבודה הזו לפחות ידנית בזמן שאתה מרחיב את הבוט שלך. אתה יכול להשתמש בספריות NLTK או TextBlob כדי להקל על המשימות שלך. + +## קריטריונים להערכה + +| קריטריון | מצטיין | מספק | דורש שיפור | +| -------- | ------------------------------------------- | ---------------------------------------------- | ----------------------- | +| | קובץ bot.py חדש מוצג ומתועד | קובץ בוט חדש מוצג אך מכיל באגים | קובץ לא מוצג | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. אנו לא נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/6-NLP/3-Translation-Sentiment/README.md b/translations/he/6-NLP/3-Translation-Sentiment/README.md new file mode 100644 index 00000000..c7480402 --- /dev/null +++ b/translations/he/6-NLP/3-Translation-Sentiment/README.md @@ -0,0 +1,200 @@ + +# תרגום וניתוח רגשות עם למידת מכונה + +בשיעורים הקודמים למדתם כיצד לבנות בוט בסיסי באמצעות `TextBlob`, ספרייה שמשתמשת בלמידת מכונה מאחורי הקלעים כדי לבצע משימות בסיסיות של עיבוד שפה טבעית כמו חילוץ ביטויי שם עצם. אתגר חשוב נוסף בבלשנות חישובית הוא תרגום מדויק של משפט משפה מדוברת או כתובה אחת לשפה אחרת. + +## [שאלון לפני השיעור](https://ff-quizzes.netlify.app/en/ml/) + +תרגום הוא בעיה קשה מאוד, במיוחד לאור העובדה שיש אלפי שפות שלכל אחת מהן כללי דקדוק שונים מאוד. גישה אחת היא להמיר את כללי הדקדוק הפורמליים של שפה אחת, כמו אנגלית, למבנה שאינו תלוי בשפה, ואז לתרגם אותו על ידי המרה חזרה לשפה אחרת. גישה זו כוללת את השלבים הבאים: + +1. **זיהוי**. זיהוי או תיוג של המילים בשפת המקור כעצם, פועל וכו'. +2. **יצירת תרגום**. הפקת תרגום ישיר של כל מילה בפורמט של שפת היעד. + +### משפט לדוגמה, מאנגלית לאירית + +ב'אנגלית', המשפט _I feel happy_ מורכב משלוש מילים בסדר הבא: + +- **נושא** (I) +- **פועל** (feel) +- **תואר** (happy) + +עם זאת, בשפה 'אירית', לאותו משפט יש מבנה דקדוקי שונה מאוד - רגשות כמו "*שמח*" או "*עצוב*" מתוארים כמשהו *שעליך*. + +הביטוי האנגלי `I feel happy` באירית יהיה `Tá athas orm`. תרגום *מילולי* יהיה `שמח עליי`. + +דובר אירית שמתרגם לאנגלית יאמר `I feel happy`, ולא `Happy is upon me`, כי הוא מבין את משמעות המשפט, גם אם המילים ומבנה המשפט שונים. + +הסדר הפורמלי של המשפט באירית הוא: + +- **פועל** (Tá או is) +- **תואר** (athas, או happy) +- **נושא** (orm, או עליי) + +## תרגום + +תוכנית תרגום נאיבית עשויה לתרגם מילים בלבד, תוך התעלמות ממבנה המשפט. + +✅ אם למדתם שפה שנייה (או שלישית או יותר) כמבוגרים, ייתכן שהתחלתם לחשוב בשפת האם שלכם, לתרגם מושגים מילה במילה בראשכם לשפה השנייה, ואז לומר את התרגום שלכם. זה דומה למה שתוכניות תרגום נאיביות עושות. חשוב להתקדם מעבר לשלב הזה כדי להגיע לשטף! + +תרגום נאיבי מוביל לתרגומים גרועים (ולפעמים מצחיקים): `I feel happy` מתורגם באופן מילולי ל-`Mise bhraitheann athas` באירית. זה אומר (מילולית) `אני מרגיש שמח` ואינו משפט אירי תקני. למרות שאנגלית ואירית הן שפות המדוברות בשני איים שכנים, הן שפות שונות מאוד עם מבני דקדוק שונים. + +> תוכלו לצפות בכמה סרטונים על מסורות לשוניות איריות כמו [זה](https://www.youtube.com/watch?v=mRIaLSdRMMs) + +### גישות למידת מכונה + +עד כה, למדתם על הגישה של כללים פורמליים לעיבוד שפה טבעית. גישה נוספת היא להתעלם ממשמעות המילים, ו_במקום זאת להשתמש בלמידת מכונה כדי לזהות דפוסים_. זה יכול לעבוד בתרגום אם יש לכם הרבה טקסטים (*corpus*) או טקסטים (*corpora*) בשפת המקור ובשפת היעד. + +לדוגמה, שקלו את המקרה של *גאווה ודעה קדומה*, רומן אנגלי ידוע שנכתב על ידי ג'יין אוסטן בשנת 1813. אם תעיינו בספר באנגלית ובתרגום אנושי של הספר ל*צרפתית*, תוכלו לזהות ביטויים באחד שמתורגמים באופן _אידיומטי_ לשני. תעשו זאת בעוד רגע. + +לדוגמה, כאשר ביטוי באנגלית כמו `I have no money` מתורגם באופן מילולי לצרפתית, הוא עשוי להפוך ל-`Je n'ai pas de monnaie`. "Monnaie" הוא 'דמיון שווא' צרפתי מסובך, שכן 'money' ו-'monnaie' אינם מילים נרדפות. תרגום טוב יותר שדובר אנושי עשוי לעשות יהיה `Je n'ai pas d'argent`, כי הוא מעביר טוב יותר את המשמעות שאין לך כסף (ולא 'כסף קטן' שהוא המשמעות של 'monnaie'). + +![monnaie](../../../../6-NLP/3-Translation-Sentiment/images/monnaie.png) + +> תמונה מאת [Jen Looper](https://twitter.com/jenlooper) + +אם למודל למידת מכונה יש מספיק תרגומים אנושיים לבניית מודל, הוא יכול לשפר את דיוק התרגומים על ידי זיהוי דפוסים נפוצים בטקסטים שתורגמו בעבר על ידי דוברים אנושיים מומחים של שתי השפות. + +### תרגיל - תרגום + +תוכלו להשתמש ב-`TextBlob` כדי לתרגם משפטים. נסו את השורה הראשונה המפורסמת של **גאווה ודעה קדומה**: + +```python +from textblob import TextBlob + +blob = TextBlob( + "It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife!" +) +print(blob.translate(to="fr")) + +``` + +`TextBlob` עושה עבודה די טובה בתרגום: "C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme!". + +אפשר לטעון שהתרגום של TextBlob מדויק הרבה יותר, למעשה, מהתרגום הצרפתי של הספר משנת 1932 על ידי V. Leconte ו-Ch. Pressoir: + +"C'est une vérité universelle qu'un célibataire pourvu d'une belle fortune doit avoir envie de se marier, et, si peu que l'on sache de son sentiment à cet egard, lorsqu'il arrive dans une nouvelle résidence, cette idée est si bien fixée dans l'esprit de ses voisins qu'ils le considèrent sur-le-champ comme la propriété légitime de l'une ou l'autre de leurs filles." + +במקרה זה, התרגום המבוסס על למידת מכונה עושה עבודה טובה יותר מהמתרגם האנושי שהוסיף מילים מיותרות לפיו של המחבר המקורי לצורך 'בהירות'. + +> מה קורה כאן? ולמה TextBlob כל כך טוב בתרגום? ובכן, מאחורי הקלעים, הוא משתמש ב-Google Translate, AI מתוחכם שמסוגל לנתח מיליוני ביטויים כדי לחזות את המחרוזות הטובות ביותר למשימה. אין כאן שום דבר ידני ואתם צריכים חיבור לאינטרנט כדי להשתמש ב-`blob.translate`. + +✅ נסו עוד משפטים. מה עדיף, תרגום בלמידת מכונה או תרגום אנושי? באילו מקרים? + +## ניתוח רגשות + +תחום נוסף שבו למידת מכונה יכולה לעבוד היטב הוא ניתוח רגשות. גישה שאינה מבוססת למידת מכונה לניתוח רגשות היא לזהות מילים וביטויים שהם 'חיוביים' ו'שליליים'. לאחר מכן, בהתחשב בטקסט חדש, לחשב את הערך הכולל של המילים החיוביות, השליליות והנייטרליות כדי לזהות את הרגש הכללי. + +גישה זו ניתנת להטעיה בקלות כפי שראיתם במשימת מרווין - המשפט `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` הוא משפט סרקסטי עם רגש שלילי, אך האלגוריתם הפשוט מזהה 'great', 'wonderful', 'glad' כחיוביים ו-'waste', 'lost' ו-'dark' כשליליים. הרגש הכללי מושפע מהמילים הסותרות הללו. + +✅ עצרו רגע וחשבו כיצד אנו מעבירים סרקזם כדוברים אנושיים. אינטונציה משחקת תפקיד גדול. נסו לומר את המשפט "Well, that film was awesome" בדרכים שונות כדי לגלות כיצד הקול שלכם מעביר משמעות. + +### גישות למידת מכונה + +הגישה של למידת מכונה תהיה לאסוף באופן ידני גופי טקסט שליליים וחיוביים - ציוצים, או ביקורות סרטים, או כל דבר שבו האדם נתן ציון *וגם* דעה כתובה. לאחר מכן ניתן ליישם טכניקות עיבוד שפה טבעית על דעות וציונים, כך שדפוסים יופיעו (לדוגמה, ביקורות סרטים חיוביות נוטות לכלול את הביטוי 'Oscar worthy' יותר מאשר ביקורות שליליות, או ביקורות מסעדות חיוביות אומרות 'gourmet' הרבה יותר מאשר 'disgusting'). + +> ⚖️ **דוגמה**: אם עבדתם במשרד של פוליטיקאי ויש חוק חדש שנדון, ייתכן שתושבים יכתבו למשרד עם מיילים שתומכים או מתנגדים לחוק החדש. נניח שאתם מתבקשים לקרוא את המיילים ולמיין אותם לשתי ערימות, *בעד* ו-*נגד*. אם היו הרבה מיילים, ייתכן שתהיו מוצפים בניסיון לקרוא את כולם. לא יהיה נחמד אם בוט יוכל לקרוא את כולם עבורכם, להבין אותם ולומר לכם לאיזו ערימה כל מייל שייך? +> +> דרך אחת להשיג זאת היא להשתמש בלמידת מכונה. הייתם מאמנים את המודל עם חלק מהמיילים ה*נגד* וחלק מהמיילים ה*בעד*. המודל היה נוטה לשייך ביטויים ומילים לצד הנגד ולצד הבעד, *אך הוא לא היה מבין שום תוכן*, רק שמילים ודפוסים מסוימים נוטים להופיע יותר במיילים נגד או בעד. הייתם בודקים אותו עם כמה מיילים שלא השתמשתם בהם כדי לאמן את המודל, ורואים אם הוא הגיע לאותה מסקנה כמוכם. לאחר מכן, ברגע שהייתם מרוצים מהדיוק של המודל, הייתם יכולים לעבד מיילים עתידיים מבלי לקרוא כל אחד מהם. + +✅ האם התהליך הזה נשמע כמו תהליכים שהשתמשתם בהם בשיעורים קודמים? + +## תרגיל - משפטים רגשיים + +רגש נמדד עם *קוטביות* של -1 עד 1, כלומר -1 הוא הרגש השלילי ביותר, ו-1 הוא הרגש החיובי ביותר. רגש נמדד גם עם ציון של 0 - 1 עבור אובייקטיביות (0) וסובייקטיביות (1). + +הסתכלו שוב על *גאווה ודעה קדומה* של ג'יין אוסטן. הטקסט זמין כאן ב-[Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm). הדוגמה למטה מציגה תוכנית קצרה שמנתחת את הרגש של המשפטים הראשונים והאחרונים מהספר ומציגה את קוטביות הרגש ואת ציון הסובייקטיביות/אובייקטיביות. + +עליכם להשתמש בספריית `TextBlob` (שתוארה לעיל) כדי לקבוע `sentiment` (אין צורך לכתוב מחשבון רגשות משלכם) במשימה הבאה. + +```python +from textblob import TextBlob + +quote1 = """It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife.""" + +quote2 = """Darcy, as well as Elizabeth, really loved them; and they were both ever sensible of the warmest gratitude towards the persons who, by bringing her into Derbyshire, had been the means of uniting them.""" + +sentiment1 = TextBlob(quote1).sentiment +sentiment2 = TextBlob(quote2).sentiment + +print(quote1 + " has a sentiment of " + str(sentiment1)) +print(quote2 + " has a sentiment of " + str(sentiment2)) +``` + +אתם רואים את הפלט הבא: + +```output +It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want # of a wife. has a sentiment of Sentiment(polarity=0.20952380952380953, subjectivity=0.27142857142857146) + +Darcy, as well as Elizabeth, really loved them; and they were + both ever sensible of the warmest gratitude towards the persons + who, by bringing her into Derbyshire, had been the means of + uniting them. has a sentiment of Sentiment(polarity=0.7, subjectivity=0.8) +``` + +## אתגר - בדיקת קוטביות רגשית + +המשימה שלכם היא לקבוע, באמצעות קוטביות רגשית, האם ל-*גאווה ודעה קדומה* יש יותר משפטים חיוביים לחלוטין מאשר שליליים לחלוטין. לצורך משימה זו, תוכלו להניח שקוטביות של 1 או -1 היא חיובית לחלוטין או שלילית לחלוטין בהתאמה. + +**שלבים:** + +1. הורידו [עותק של גאווה ודעה קדומה](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) מ-Project Gutenberg כקובץ .txt. הסירו את המטא-דאטה בתחילת ובסוף הקובץ, והשאירו רק את הטקסט המקורי +2. פתחו את הקובץ ב-Python והוציאו את התוכן כמחרוזת +3. צרו TextBlob באמצעות מחרוזת הספר +4. נתחו כל משפט בספר בלולאה + 1. אם הקוטביות היא 1 או -1, אחסנו את המשפט במערך או רשימה של הודעות חיוביות או שליליות +5. בסוף, הדפיסו את כל המשפטים החיוביים והשליליים (בנפרד) ואת המספר של כל אחד. + +הנה [פתרון לדוגמה](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb). + +✅ בדיקת ידע + +1. הרגש מבוסס על מילים שנמצאות במשפט, אבל האם הקוד *מבין* את המילים? +2. האם לדעתכם קוטביות הרגש מדויקת, או במילים אחרות, האם אתם *מסכימים* עם הציונים? + 1. במיוחד, האם אתם מסכימים או לא מסכימים עם הקוטביות החיובית **המוחלטת** של המשפטים הבאים? + * “What an excellent father you have, girls!” said she, when the door was shut. + * “Your examination of Mr. Darcy is over, I presume,” said Miss Bingley; “and pray what is the result?” “I am perfectly convinced by it that Mr. Darcy has no defect. + * How wonderfully these sort of things occur! + * I have the greatest dislike in the world to that sort of thing. + * Charlotte is an excellent manager, I dare say. + * “This is delightful indeed! + * I am so happy! + * Your idea of the ponies is delightful. + 2. שלושת המשפטים הבאים דורגו עם קוטביות חיובית מוחלטת, אבל בקריאה מעמיקה, הם אינם משפטים חיוביים. מדוע ניתוח הרגש חשב שהם משפטים חיוביים? + * Happy shall I be, when his stay at Netherfield is over!” “I wish I could say anything to comfort you,” replied Elizabeth; “but it is wholly out of my power. + * If I could but see you as happy! + * Our distress, my dear Lizzy, is very great. + 3. האם אתם מסכימים או לא מסכימים עם הקוטביות השלילית **המוחלטת** של המשפטים הבאים? + - Everybody is disgusted with his pride. + - “I should like to know how he behaves among strangers.” “You shall hear then—but prepare yourself for something very dreadful. + - The pause was to Elizabeth’s feelings dreadful. + - It would be dreadful! + +✅ כל חובב של ג'יין אוסטן יבין שהיא לעיתים קרובות משתמשת בספריה כדי לבקר את ההיבטים המגוחכים יותר של החברה האנגלית בתקופת הריג'נסי. אליזבת בנט, הדמות הראשית ב-*גאווה ודעה קדומה*, היא צופה חברתית חדה (כמו המחברת) והשפה שלה לעיתים קרובות מאוד מעודנת. אפילו מר דארסי (מושא האהבה בסיפור) מציין את השימוש המשחקי והמתגרה של אליזבת בשפה: "היה לי העונג להכיר אותך מספיק זמן כדי לדעת שאת נהנית מאוד מדי פעם להביע דעות שאינן באמת שלך." + +--- + +## 🚀אתגר + +האם תוכלו לשפר את מרווין על ידי חילוץ תכונות נוספות מהקלט של המשתמש? + +## [שאלון אחרי השיעור](https://ff-quizzes.netlify.app/en/ml/) + +## סקירה ולימוד עצמי +ישנן דרכים רבות להפיק רגשות מטקסט. חשבו על יישומים עסקיים שיכולים להשתמש בטכניקה זו. חשבו על איך זה יכול להשתבש. קראו עוד על מערכות מתקדמות המוכנות לשימוש ארגוני שמנתחות רגשות, כמו [Azure Text Analysis](https://docs.microsoft.com/azure/cognitive-services/Text-Analytics/how-tos/text-analytics-how-to-sentiment-analysis?tabs=version-3-1?WT.mc_id=academic-77952-leestott). בדקו כמה מהמשפטים מתוך "גאווה ודעה קדומה" למעלה וראו אם ניתן לזהות בהם ניואנסים. + +## משימה + +[רישיון פואטי](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/6-NLP/3-Translation-Sentiment/assignment.md b/translations/he/6-NLP/3-Translation-Sentiment/assignment.md new file mode 100644 index 00000000..ac9b2a17 --- /dev/null +++ b/translations/he/6-NLP/3-Translation-Sentiment/assignment.md @@ -0,0 +1,25 @@ + +# רישיון פואטי + +## הוראות + +ב[מחברת זו](https://www.kaggle.com/jenlooper/emily-dickinson-word-frequency) תוכלו למצוא מעל 500 שירים של אמילי דיקינסון, שכבר נותחו בעבר מבחינת רגשות באמצעות שירות ניתוח טקסט של Azure. באמצעות מערך נתונים זה, נתחו אותו באמצעות הטכניקות שתוארו בשיעור. האם הרגש המוצע של שיר תואם את ההחלטה של שירות Azure המתקדם יותר? מדוע כן או לא, לדעתכם? האם משהו הפתיע אתכם? + +## קריטריונים להערכה + +| קריטריון | מצטיין | מספק | דורש שיפור | +| -------- | ------------------------------------------------------------------------ | ----------------------------------------------------- | ----------------------- | +| | מוצגת מחברת עם ניתוח מעמיק של דוגמת הפלט של המחבר | המחברת אינה מלאה או אינה מבצעת ניתוח | לא מוצגת מחברת | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור הסמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/6-NLP/3-Translation-Sentiment/solution/Julia/README.md b/translations/he/6-NLP/3-Translation-Sentiment/solution/Julia/README.md new file mode 100644 index 00000000..94f23c76 --- /dev/null +++ b/translations/he/6-NLP/3-Translation-Sentiment/solution/Julia/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/6-NLP/3-Translation-Sentiment/solution/R/README.md b/translations/he/6-NLP/3-Translation-Sentiment/solution/R/README.md new file mode 100644 index 00000000..44953214 --- /dev/null +++ b/translations/he/6-NLP/3-Translation-Sentiment/solution/R/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/6-NLP/4-Hotel-Reviews-1/README.md b/translations/he/6-NLP/4-Hotel-Reviews-1/README.md new file mode 100644 index 00000000..ac3c6b71 --- /dev/null +++ b/translations/he/6-NLP/4-Hotel-Reviews-1/README.md @@ -0,0 +1,417 @@ + +# ניתוח רגשות עם ביקורות על מלונות - עיבוד הנתונים + +בפרק זה תשתמשו בטכניקות שלמדתם בשיעורים הקודמים כדי לבצע ניתוח נתונים חקרני על מערך נתונים גדול. לאחר שתבינו היטב את השימושיות של העמודות השונות, תלמדו: + +- כיצד להסיר עמודות שאינן נחוצות +- כיצד לחשב נתונים חדשים בהתבסס על עמודות קיימות +- כיצד לשמור את מערך הנתונים המתקבל לשימוש באתגר הסופי + +## [מבחן מקדים להרצאה](https://ff-quizzes.netlify.app/en/ml/) + +### מבוא + +עד כה למדתם כיצד נתוני טקסט שונים מאוד מסוגי נתונים מספריים. אם מדובר בטקסט שנכתב או נאמר על ידי אדם, ניתן לנתח אותו כדי למצוא דפוסים ותדירויות, רגשות ומשמעויות. השיעור הזה לוקח אתכם למערך נתונים אמיתי עם אתגר אמיתי: **[515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)** הכולל [רישיון CC0: Public Domain](https://creativecommons.org/publicdomain/zero/1.0/). הנתונים נגרדו מ-Booking.com ממקורות ציבוריים. יוצר מערך הנתונים הוא Jiashen Liu. + +### הכנה + +תצטרכו: + +* יכולת להריץ מחברות .ipynb באמצעות Python 3 +* pandas +* NLTK, [שאותו יש להתקין באופן מקומי](https://www.nltk.org/install.html) +* מערך הנתונים הזמין ב-Kaggle [515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe). גודלו כ-230 MB לאחר חילוץ. הורידו אותו לתיקיית השורש `/data` המשויכת לשיעורי NLP אלו. + +## ניתוח נתונים חקרני + +האתגר הזה מניח שאתם בונים בוט המלצות למלונות באמצעות ניתוח רגשות ודירוגי אורחים. מערך הנתונים שבו תשתמשו כולל ביקורות על 1493 מלונות שונים ב-6 ערים. + +באמצעות Python, מערך נתונים של ביקורות על מלונות, וניתוח רגשות של NLTK תוכלו לגלות: + +* מהם המילים והביטויים הנפוצים ביותר בביקורות? +* האם *תגיות* רשמיות המתארות מלון מתואמות עם דירוגי ביקורות (לדוגמה, האם יש יותר ביקורות שליליות עבור מלון מסוים מ-*משפחה עם ילדים קטנים* מאשר מ-*מטייל יחיד*, אולי מצביע על כך שהוא מתאים יותר ל-*מטיילים יחידים*)? +* האם דירוגי הרגשות של NLTK 'מסכימים' עם הדירוג המספרי של המבקר? + +#### מערך הנתונים + +בואו נחקור את מערך הנתונים שהורדתם ושמרתם באופן מקומי. פתחו את הקובץ בעורך כמו VS Code או אפילו Excel. + +הכותרות במערך הנתונים הן כדלקמן: + +*Hotel_Address, Additional_Number_of_Scoring, Review_Date, Average_Score, Hotel_Name, Reviewer_Nationality, Negative_Review, Review_Total_Negative_Word_Counts, Total_Number_of_Reviews, Positive_Review, Review_Total_Positive_Word_Counts, Total_Number_of_Reviews_Reviewer_Has_Given, Reviewer_Score, Tags, days_since_review, lat, lng* + +הנה הן מקובצות בצורה שעשויה להיות קלה יותר לבדיקה: +##### עמודות מלון + +* `Hotel_Name`, `Hotel_Address`, `lat` (קו רוחב), `lng` (קו אורך) + * באמצעות *lat* ו-*lng* תוכלו למפות מיקום המלונות עם Python (אולי בצבעים שונים עבור ביקורות חיוביות ושליליות) + * Hotel_Address אינו שימושי במיוחד עבורנו, וכנראה נחליף אותו במדינה לצורך מיון וחיפוש קלים יותר + +**עמודות מטא-ביקורת של מלון** + +* `Average_Score` + * לפי יוצר מערך הנתונים, עמודה זו היא *הציון הממוצע של המלון, מחושב על סמך התגובה האחרונה בשנה האחרונה*. זו נראית דרך לא שגרתית לחשב את הציון, אך אלו הנתונים שנגרדו ולכן נוכל לקבלם כפי שהם לעת עתה. + + ✅ בהתבסס על העמודות האחרות במערך הנתונים, האם תוכלו לחשוב על דרך אחרת לחשב את הציון הממוצע? + +* `Total_Number_of_Reviews` + * המספר הכולל של הביקורות שהמלון קיבל - לא ברור (ללא כתיבת קוד) אם זה מתייחס לביקורות במערך הנתונים. +* `Additional_Number_of_Scoring` + * פירושו שניתן ציון ביקורת אך לא נכתבה ביקורת חיובית או שלילית על ידי המבקר + +**עמודות ביקורת** + +- `Reviewer_Score` + - זהו ערך מספרי עם מקסימום ספרה עשרונית אחת בין הערכים המינימליים והמקסימליים 2.5 ו-10 + - לא מוסבר מדוע 2.5 הוא הציון הנמוך ביותר האפשרי +- `Negative_Review` + - אם מבקר לא כתב דבר, שדה זה יכיל "**No Negative**" + - שימו לב שמבקר עשוי לכתוב ביקורת חיובית בעמודת הביקורת השלילית (לדוגמה, "אין שום דבר רע במלון הזה") +- `Review_Total_Negative_Word_Counts` + - ספירת מילים שליליות גבוהה יותר מצביעה על ציון נמוך יותר (ללא בדיקת הרגש) +- `Positive_Review` + - אם מבקר לא כתב דבר, שדה זה יכיל "**No Positive**" + - שימו לב שמבקר עשוי לכתוב ביקורת שלילית בעמודת הביקורת החיובית (לדוגמה, "אין שום דבר טוב במלון הזה בכלל") +- `Review_Total_Positive_Word_Counts` + - ספירת מילים חיוביות גבוהה יותר מצביעה על ציון גבוה יותר (ללא בדיקת הרגש) +- `Review_Date` ו-`days_since_review` + - ניתן ליישם מדד של טריות או התיישנות על ביקורת (ביקורות ישנות עשויות להיות פחות מדויקות מביקורות חדשות מכיוון שהניהול השתנה, או שיפוצים בוצעו, או נוספה בריכה וכו') +- `Tags` + - אלו תיאורים קצרים שמבקר עשוי לבחור כדי לתאר את סוג האורח שהוא היה (לדוגמה, יחיד או משפחה), סוג החדר שהיה לו, משך השהות ואופן הגשת הביקורת. + - למרבה הצער, השימוש בתגיות אלו בעייתי, בדקו את הסעיף למטה שמדבר על השימושיות שלהן + +**עמודות מבקר** + +- `Total_Number_of_Reviews_Reviewer_Has_Given` + - זה עשוי להיות גורם במודל המלצות, למשל, אם תוכלו לקבוע שמבקרים פורים יותר עם מאות ביקורות היו נוטים יותר להיות שליליים מאשר חיוביים. עם זאת, המבקר של כל ביקורת מסוימת אינו מזוהה עם קוד ייחודי, ולכן לא ניתן לקשר אותו למערך ביקורות. ישנם 30 מבקרים עם 100 או יותר ביקורות, אך קשה לראות כיצד זה יכול לסייע במודל ההמלצות. +- `Reviewer_Nationality` + - יש אנשים שעשויים לחשוב שלאומים מסוימים נוטים יותר לתת ביקורת חיובית או שלילית בגלל נטייה לאומית. היו זהירים בבניית השקפות אנקדוטליות כאלה לתוך המודלים שלכם. אלו סטריאוטיפים לאומיים (ולפעמים גזעיים), וכל מבקר היה אדם שכתב ביקורת על סמך חווייתו. ייתכן שהיא סוננה דרך עדשות רבות כמו שהיותיו הקודמות במלונות, המרחק שנסע, והטמפרמנט האישי שלו. קשה להצדיק את המחשבה שהלאום היה הסיבה לציון הביקורת. + +##### דוגמאות + +| ציון ממוצע | מספר כולל של ביקורות | ציון מבקר | ביקורת שלילית | ביקורת חיובית | תגיות | +| ----------- | ---------------------- | --------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------------------------------------------------------- | +| 7.8 | 1945 | 2.5 | זה כרגע לא מלון אלא אתר בנייה. הטרידו אותי מהבוקר המוקדם ועד כל היום עם רעש בנייה בלתי נסבל בזמן מנוחה לאחר נסיעה ארוכה ועבודה בחדר. אנשים עבדו כל היום עם פטישי אוויר בחדרים סמוכים. ביקשתי להחליף חדר אך לא היה חדר שקט זמין. כדי להחמיר את המצב, חויבתי יתר על המידה. יצאתי בערב מכיוון שהייתי צריך לעזוב טיסה מוקדמת מאוד וקיבלתי חשבון מתאים. יום לאחר מכן המלון ביצע חיוב נוסף ללא הסכמתי מעבר למחיר שהוזמן. זה מקום נורא. אל תענישו את עצמכם על ידי הזמנה כאן. | שום דבר. מקום נורא. התרחקו. | נסיעת עסקים. זוג. חדר זוגי סטנדרטי. שהייה של 2 לילות. | + +כפי שאתם יכולים לראות, האורח הזה לא נהנה מהשהות שלו במלון. למלון יש ציון ממוצע טוב של 7.8 ו-1945 ביקורות, אך המבקר הזה נתן לו 2.5 וכתב 115 מילים על כמה שהשהות שלו הייתה שלילית. אם הוא לא כתב דבר בעמודת הביקורת החיובית, אפשר להסיק שלא היה שום דבר חיובי, אך הוא כתב 7 מילים של אזהרה. אם רק נספור מילים במקום את המשמעות או הרגש של המילים, ייתכן שתהיה לנו תמונה מעוותת של כוונת המבקר. באופן מוזר, הציון שלו של 2.5 מבלבל, כי אם השהות במלון הייתה כל כך גרועה, מדוע לתת לו נקודות בכלל? בחקירת מערך הנתונים מקרוב, תראו שהציון הנמוך ביותר האפשרי הוא 2.5, לא 0. הציון הגבוה ביותר האפשרי הוא 10. + +##### תגיות + +כפי שצוין לעיל, במבט ראשון, הרעיון להשתמש ב-`Tags` כדי לקטלג את הנתונים נראה הגיוני. למרבה הצער, תגיות אלו אינן סטנדרטיות, מה שאומר שבמלון מסוים, האפשרויות עשויות להיות *Single room*, *Twin room*, ו-*Double room*, אך במלון הבא, הן יהיו *Deluxe Single Room*, *Classic Queen Room*, ו-*Executive King Room*. אלו עשויים להיות אותם דברים, אך יש כל כך הרבה וריאציות שהבחירה הופכת ל: + +1. ניסיון לשנות את כל המונחים לסטנדרט יחיד, מה שקשה מאוד, מכיוון שלא ברור מה תהיה דרך ההמרה בכל מקרה (לדוגמה, *Classic single room* ממופה ל-*Single room* אך *Superior Queen Room with Courtyard Garden or City View* קשה יותר למפות) + +1. נוכל לקחת גישה של NLP ולמדוד את התדירות של מונחים מסוימים כמו *Solo*, *Business Traveller*, או *Family with young kids* כפי שהם חלים על כל מלון, ולשלב זאת במודל ההמלצות + +תגיות הן בדרך כלל (אך לא תמיד) שדה יחיד המכיל רשימה של 5 עד 6 ערכים מופרדים בפסיקים המתאימים ל-*סוג הטיול*, *סוג האורחים*, *סוג החדר*, *מספר הלילות*, ו-*סוג המכשיר שבו הוגשה הביקורת*. עם זאת, מכיוון שחלק מהמבקרים לא ממלאים כל שדה (ייתכן שהם משאירים אחד ריק), הערכים אינם תמיד באותו סדר. + +לדוגמה, קחו את *סוג הקבוצה*. ישנם 1025 אפשרויות ייחודיות בשדה זה בעמודת `Tags`, ולמרבה הצער רק חלקן מתייחסות לקבוצה (חלקן הן סוג החדר וכו'). אם תסננו רק את אלו שמזכירים משפחה, התוצאות מכילות הרבה תוצאות מסוג *Family room*. אם תכללו את המונח *with*, כלומר תספרו את הערכים *Family with*, התוצאות טובות יותר, עם מעל 80,000 מתוך 515,000 התוצאות המכילות את הביטוי "Family with young children" או "Family with older children". + +זה אומר שעמודת התגיות אינה חסרת תועלת לחלוטין עבורנו, אך יידרש מעט עבודה כדי להפוך אותה לשימושית. + +##### ציון ממוצע של מלון + +ישנם מספר מוזרויות או אי התאמות במערך הנתונים שאני לא מצליח להבין, אך הן מוצגות כאן כדי שתהיו מודעים להן בעת בניית המודלים שלכם. אם תצליחו להבין, אנא הודיעו לנו במדור הדיונים! + +מערך הנתונים כולל את העמודות הבאות הקשורות לציון הממוצע ולמספר הביקורות: + +1. Hotel_Name +2. Additional_Number_of_Scoring +3. Average_Score +4. Total_Number_of_Reviews +5. Reviewer_Score + +המלון היחיד עם מספר הביקורות הגבוה ביותר במערך הנתונים הזה הוא *Britannia International Hotel Canary Wharf* עם 4789 ביקורות מתוך 515,000. אך אם נסתכל על הערך `Total_Number_of_Reviews` עבור מלון זה, הוא 9086. ניתן להסיק שיש הרבה יותר ציונים ללא ביקורות, ולכן אולי כדאי להוסיף את ערך העמודה `Additional_Number_of_Scoring`. הערך הזה הוא 2682, והוספתו ל-4789 מביאה אותנו ל-7471, שעדיין חסרים 1615 כדי להגיע ל-`Total_Number_of_Reviews`. + +אם ניקח את עמודת `Average_Score`, ניתן להסיק שזהו הממוצע של הביקורות במערך הנתונים, אך התיאור מ-Kaggle הוא "*Average Score of the hotel, calculated based on the latest comment in the last year*". זה לא נראה שימושי במיוחד, אך נוכל לחשב ממוצע משלנו בהתבסס על ציוני הביקורות במערך הנתונים. באמצעות אותו מלון כדוגמה, הציון הממוצע של המלון ניתן כ-7.1 אך הציון המחושב (ממוצע ציוני המבקרים *ב*מערך הנתונים) הוא 6.8. זה קרוב, אך לא אותו ערך, ואנו יכולים רק לנחש שהציונים שניתנו בביקורות `Additional_Number_of_Scoring` העלו את הממוצע ל-7.1. למרבה הצער, ללא דרך לבדוק או להוכיח את ההנחה הזו, קשה להשתמש או לסמוך על `Average_Score`, `Additional_Number_of_Scoring` ו-`Total_Number_of_Reviews` כאשר הם מבוססים על, או מתייחסים לנתונים שאין לנו. + +כדי לסבך את העניינים עוד יותר, המלון עם מספר הביקורות השני הגבוה ביותר יש לו ציון ממוצע מחושב של 8.12 והציון הממוצע במערך הנתונים הוא 8.1. האם הציון הנכון הוא צירוף מקרים או שהמלון הראשון הוא אי התאמה? + +בהנחה שהמלון הזה עשוי להיות חריג, ושאולי רוב הערכים מתאימים (אך חלקם לא מסיבה כלשהי) נכתוב תוכנית קצרה בהמשך כדי לחקור את הערכים במערך הנתונים ולקבוע את השימוש הנכון (או אי השימוש) בערכים. +> 🚨 הערה של זהירות +> +> כאשר עובדים עם מערך הנתונים הזה, תכתבו קוד שמחשב משהו מתוך הטקסט מבלי שתצטרכו לקרוא או לנתח את הטקסט בעצמכם. זו המהות של עיבוד שפה טבעית (NLP), לפרש משמעות או תחושה מבלי שאדם יצטרך לעשות זאת. עם זאת, ייתכן שתתקלו בכמה ביקורות שליליות. אני ממליץ לכם לא לקרוא אותן, כי אין צורך בכך. חלקן טיפשיות או לא רלוונטיות, כמו ביקורות שליליות על מלון בסגנון "מזג האוויר לא היה טוב", דבר שאינו בשליטת המלון, או למעשה, אף אחד. אבל יש גם צד אפל לחלק מהביקורות. לפעמים הביקורות השליליות הן גזעניות, סקסיסטיות, או מפלות על בסיס גיל. זה מצער אך צפוי במערך נתונים שנאסף מאתר ציבורי. ישנם מבקרים שמשאירים ביקורות שתמצאו אותן דוחות, לא נוחות, או מטרידות. עדיף לתת לקוד למדוד את התחושה מאשר לקרוא אותן בעצמכם ולהתעצב. עם זאת, מדובר במיעוט שכותב דברים כאלה, אבל הם קיימים בכל זאת. +## תרגיל - חקר נתונים +### טעינת הנתונים + +זה מספיק לבחון את הנתונים באופן חזותי, עכשיו תכתבו קצת קוד ותקבלו תשובות! החלק הזה משתמש בספריית pandas. המשימה הראשונה שלכם היא לוודא שאתם יכולים לטעון ולקרוא את נתוני ה-CSV. לספריית pandas יש טוען CSV מהיר, והתוצאה נשמרת ב-DataFrame, כפי שראיתם בשיעורים הקודמים. ה-CSV שאנחנו טוענים מכיל יותר מחצי מיליון שורות, אבל רק 17 עמודות. pandas מספקת דרכים רבות וחזקות לעבוד עם DataFrame, כולל היכולת לבצע פעולות על כל שורה. + +מכאן והלאה בשיעור הזה, יהיו קטעי קוד והסברים על הקוד וגם דיון על מה המשמעות של התוצאות. השתמשו בקובץ _notebook.ipynb_ המצורף עבור הקוד שלכם. + +בואו נתחיל בטעינת קובץ הנתונים שבו תשתמשו: + +```python +# Load the hotel reviews from CSV +import pandas as pd +import time +# importing time so the start and end time can be used to calculate file loading time +print("Loading data file now, this could take a while depending on file size") +start = time.time() +# df is 'DataFrame' - make sure you downloaded the file to the data folder +df = pd.read_csv('../../data/Hotel_Reviews.csv') +end = time.time() +print("Loading took " + str(round(end - start, 2)) + " seconds") +``` + +עכשיו כשהנתונים נטענו, אנחנו יכולים לבצע עליהם פעולות. שמרו את הקוד הזה בראש התוכנית שלכם עבור החלק הבא. + +## חקר הנתונים + +במקרה הזה, הנתונים כבר *נקיים*, כלומר הם מוכנים לעבודה, ואין בהם תווים בשפות אחרות שעלולים להפריע לאלגוריתמים שמצפים לתווים באנגלית בלבד. + +✅ ייתכן שתצטרכו לעבוד עם נתונים שדורשים עיבוד ראשוני כדי לעצב אותם לפני יישום טכניקות NLP, אבל לא הפעם. אם הייתם צריכים, איך הייתם מתמודדים עם תווים שאינם באנגלית? + +קחו רגע לוודא שברגע שהנתונים נטענו, אתם יכולים לחקור אותם באמצעות קוד. קל מאוד להתמקד בעמודות `Negative_Review` ו-`Positive_Review`. הן מלאות בטקסט טבעי עבור אלגוריתמי ה-NLP שלכם לעיבוד. אבל חכו! לפני שאתם קופצים ל-NLP ולניתוח רגשות, כדאי שתעקבו אחרי הקוד למטה כדי לוודא שהערכים שניתנו בנתונים תואמים לערכים שאתם מחשבים עם pandas. + +## פעולות על DataFrame + +המשימה הראשונה בשיעור הזה היא לבדוק אם ההנחות הבאות נכונות על ידי כתיבת קוד שבוחן את ה-DataFrame (מבלי לשנות אותו). + +> כמו בהרבה משימות תכנות, יש כמה דרכים להשלים את זה, אבל עצה טובה היא לעשות זאת בדרך הפשוטה והקלה ביותר, במיוחד אם זה יהיה קל יותר להבנה כשתחזרו לקוד הזה בעתיד. עם DataFrames, יש API מקיף שלרוב יציע דרך לעשות את מה שאתם רוצים בצורה יעילה. + +התייחסו לשאלות הבאות כמשימות קוד ונסו לענות עליהן מבלי להסתכל על הפתרון. + +1. הדפיסו את *הצורה* של ה-DataFrame שזה עתה טענתם (הצורה היא מספר השורות והעמודות). +2. חשבו את תדירות הלאומים של הסוקרים: + 1. כמה ערכים ייחודיים יש לעמודה `Reviewer_Nationality` ומה הם? + 2. איזה לאום של סוקרים הוא הנפוץ ביותר בנתונים (הדפיסו את המדינה ומספר הביקורות)? + 3. מהם 10 הלאומים הנפוצים ביותר הבאים ותדירותם? +3. איזה מלון קיבל את מספר הביקורות הגבוה ביותר עבור כל אחד מ-10 הלאומים הנפוצים ביותר? +4. כמה ביקורות יש לכל מלון (תדירות הביקורות לכל מלון) בנתונים? +5. למרות שיש עמודה `Average_Score` לכל מלון בנתונים, אתם יכולים גם לחשב ציון ממוצע (לקחת את הממוצע של כל ציוני הסוקרים בנתונים עבור כל מלון). הוסיפו עמודה חדשה ל-DataFrame שלכם עם הכותרת `Calc_Average_Score` שמכילה את הממוצע המחושב. +6. האם יש מלונות עם אותו ציון (מעוגל למקום העשרוני הראשון) ב-`Average_Score` וב-`Calc_Average_Score`? + 1. נסו לכתוב פונקציה ב-Python שמקבלת Series (שורה) כארגומנט ומשווה את הערכים, ומדפיסה הודעה כשהערכים אינם שווים. לאחר מכן השתמשו בשיטה `.apply()` כדי לעבד כל שורה עם הפונקציה. +7. חשבו והדפיסו כמה שורות יש עם ערכים של "No Negative" בעמודה `Negative_Review`. +8. חשבו והדפיסו כמה שורות יש עם ערכים של "No Positive" בעמודה `Positive_Review`. +9. חשבו והדפיסו כמה שורות יש עם ערכים של "No Positive" בעמודה `Positive_Review` **וגם** ערכים של "No Negative" בעמודה `Negative_Review`. + +### תשובות בקוד + +1. הדפיסו את *הצורה* של ה-DataFrame שזה עתה טענתם (הצורה היא מספר השורות והעמודות). + + ```python + print("The shape of the data (rows, cols) is " + str(df.shape)) + > The shape of the data (rows, cols) is (515738, 17) + ``` + +2. חשבו את תדירות הלאומים של הסוקרים: + + 1. כמה ערכים ייחודיים יש לעמודה `Reviewer_Nationality` ומה הם? + 2. איזה לאום של סוקרים הוא הנפוץ ביותר בנתונים (הדפיסו את המדינה ומספר הביקורות)? + + ```python + # value_counts() creates a Series object that has index and values in this case, the country and the frequency they occur in reviewer nationality + nationality_freq = df["Reviewer_Nationality"].value_counts() + print("There are " + str(nationality_freq.size) + " different nationalities") + # print first and last rows of the Series. Change to nationality_freq.to_string() to print all of the data + print(nationality_freq) + + There are 227 different nationalities + United Kingdom 245246 + United States of America 35437 + Australia 21686 + Ireland 14827 + United Arab Emirates 10235 + ... + Comoros 1 + Palau 1 + Northern Mariana Islands 1 + Cape Verde 1 + Guinea 1 + Name: Reviewer_Nationality, Length: 227, dtype: int64 + ``` + + 3. מהם 10 הלאומים הנפוצים ביותר הבאים ותדירותם? + + ```python + print("The highest frequency reviewer nationality is " + str(nationality_freq.index[0]).strip() + " with " + str(nationality_freq[0]) + " reviews.") + # Notice there is a leading space on the values, strip() removes that for printing + # What is the top 10 most common nationalities and their frequencies? + print("The next 10 highest frequency reviewer nationalities are:") + print(nationality_freq[1:11].to_string()) + + The highest frequency reviewer nationality is United Kingdom with 245246 reviews. + The next 10 highest frequency reviewer nationalities are: + United States of America 35437 + Australia 21686 + Ireland 14827 + United Arab Emirates 10235 + Saudi Arabia 8951 + Netherlands 8772 + Switzerland 8678 + Germany 7941 + Canada 7894 + France 7296 + ``` + +3. איזה מלון קיבל את מספר הביקורות הגבוה ביותר עבור כל אחד מ-10 הלאומים הנפוצים ביותר? + + ```python + # What was the most frequently reviewed hotel for the top 10 nationalities + # Normally with pandas you will avoid an explicit loop, but wanted to show creating a new dataframe using criteria (don't do this with large amounts of data because it could be very slow) + for nat in nationality_freq[:10].index: + # First, extract all the rows that match the criteria into a new dataframe + nat_df = df[df["Reviewer_Nationality"] == nat] + # Now get the hotel freq + freq = nat_df["Hotel_Name"].value_counts() + print("The most reviewed hotel for " + str(nat).strip() + " was " + str(freq.index[0]) + " with " + str(freq[0]) + " reviews.") + + The most reviewed hotel for United Kingdom was Britannia International Hotel Canary Wharf with 3833 reviews. + The most reviewed hotel for United States of America was Hotel Esther a with 423 reviews. + The most reviewed hotel for Australia was Park Plaza Westminster Bridge London with 167 reviews. + The most reviewed hotel for Ireland was Copthorne Tara Hotel London Kensington with 239 reviews. + The most reviewed hotel for United Arab Emirates was Millennium Hotel London Knightsbridge with 129 reviews. + The most reviewed hotel for Saudi Arabia was The Cumberland A Guoman Hotel with 142 reviews. + The most reviewed hotel for Netherlands was Jaz Amsterdam with 97 reviews. + The most reviewed hotel for Switzerland was Hotel Da Vinci with 97 reviews. + The most reviewed hotel for Germany was Hotel Da Vinci with 86 reviews. + The most reviewed hotel for Canada was St James Court A Taj Hotel London with 61 reviews. + ``` + +4. כמה ביקורות יש לכל מלון (תדירות הביקורות לכל מלון) בנתונים? + + ```python + # First create a new dataframe based on the old one, removing the uneeded columns + hotel_freq_df = df.drop(["Hotel_Address", "Additional_Number_of_Scoring", "Review_Date", "Average_Score", "Reviewer_Nationality", "Negative_Review", "Review_Total_Negative_Word_Counts", "Positive_Review", "Review_Total_Positive_Word_Counts", "Total_Number_of_Reviews_Reviewer_Has_Given", "Reviewer_Score", "Tags", "days_since_review", "lat", "lng"], axis = 1) + + # Group the rows by Hotel_Name, count them and put the result in a new column Total_Reviews_Found + hotel_freq_df['Total_Reviews_Found'] = hotel_freq_df.groupby('Hotel_Name').transform('count') + + # Get rid of all the duplicated rows + hotel_freq_df = hotel_freq_df.drop_duplicates(subset = ["Hotel_Name"]) + display(hotel_freq_df) + ``` + | Hotel_Name | Total_Number_of_Reviews | Total_Reviews_Found | + | :----------------------------------------: | :---------------------: | :-----------------: | + | Britannia International Hotel Canary Wharf | 9086 | 4789 | + | Park Plaza Westminster Bridge London | 12158 | 4169 | + | Copthorne Tara Hotel London Kensington | 7105 | 3578 | + | ... | ... | ... | + | Mercure Paris Porte d Orleans | 110 | 10 | + | Hotel Wagner | 135 | 10 | + | Hotel Gallitzinberg | 173 | 8 | + + ייתכן שתשימו לב שהתוצאות *שנספרו בנתונים* אינן תואמות את הערך ב-`Total_Number_of_Reviews`. לא ברור אם הערך הזה בנתונים מייצג את מספר הביקורות הכולל שהמלון קיבל, אבל לא כולן נגרפו, או חישוב אחר. `Total_Number_of_Reviews` אינו משמש במודל בגלל חוסר הבהירות הזה. + +5. למרות שיש עמודה `Average_Score` לכל מלון בנתונים, אתם יכולים גם לחשב ציון ממוצע (לקחת את הממוצע של כל ציוני הסוקרים בנתונים עבור כל מלון). הוסיפו עמודה חדשה ל-DataFrame שלכם עם הכותרת `Calc_Average_Score` שמכילה את הממוצע המחושב. הדפיסו את העמודות `Hotel_Name`, `Average_Score`, ו-`Calc_Average_Score`. + + ```python + # define a function that takes a row and performs some calculation with it + def get_difference_review_avg(row): + return row["Average_Score"] - row["Calc_Average_Score"] + + # 'mean' is mathematical word for 'average' + df['Calc_Average_Score'] = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) + + # Add a new column with the difference between the two average scores + df["Average_Score_Difference"] = df.apply(get_difference_review_avg, axis = 1) + + # Create a df without all the duplicates of Hotel_Name (so only 1 row per hotel) + review_scores_df = df.drop_duplicates(subset = ["Hotel_Name"]) + + # Sort the dataframe to find the lowest and highest average score difference + review_scores_df = review_scores_df.sort_values(by=["Average_Score_Difference"]) + + display(review_scores_df[["Average_Score_Difference", "Average_Score", "Calc_Average_Score", "Hotel_Name"]]) + ``` + + ייתכן שתהיתם לגבי הערך `Average_Score` ולמה הוא לפעמים שונה מהממוצע המחושב. מכיוון שאנחנו לא יכולים לדעת למה חלק מהערכים תואמים, אבל אחרים יש להם הבדל, הכי בטוח במקרה הזה להשתמש בציוני הביקורות שיש לנו כדי לחשב את הממוצע בעצמנו. עם זאת, ההבדלים בדרך כלל מאוד קטנים, הנה המלונות עם ההבדל הגדול ביותר בין הממוצע בנתונים לבין הממוצע המחושב: + + | Average_Score_Difference | Average_Score | Calc_Average_Score | Hotel_Name | + | :----------------------: | :-----------: | :----------------: | ------------------------------------------: | + | -0.8 | 7.7 | 8.5 | Best Western Hotel Astoria | + | -0.7 | 8.8 | 9.5 | Hotel Stendhal Place Vend me Paris MGallery | + | -0.7 | 7.5 | 8.2 | Mercure Paris Porte d Orleans | + | -0.7 | 7.9 | 8.6 | Renaissance Paris Vendome Hotel | + | -0.5 | 7.0 | 7.5 | Hotel Royal Elys es | + | ... | ... | ... | ... | + | 0.7 | 7.5 | 6.8 | Mercure Paris Op ra Faubourg Montmartre | + | 0.8 | 7.1 | 6.3 | Holiday Inn Paris Montparnasse Pasteur | + | 0.9 | 6.8 | 5.9 | Villa Eugenie | + | 0.9 | 8.6 | 7.7 | MARQUIS Faubourg St Honor Relais Ch teaux | + | 1.3 | 7.2 | 5.9 | Kube Hotel Ice Bar | + + עם רק מלון אחד שיש לו הבדל בציון גדול מ-1, זה אומר שאנחנו כנראה יכולים להתעלם מההבדל ולהשתמש בממוצע המחושב. + +6. חשבו והדפיסו כמה שורות יש עם ערכים של "No Negative" בעמודה `Negative_Review`. + +7. חשבו והדפיסו כמה שורות יש עם ערכים של "No Positive" בעמודה `Positive_Review`. + +8. חשבו והדפיסו כמה שורות יש עם ערכים של "No Positive" בעמודה `Positive_Review` **וגם** ערכים של "No Negative" בעמודה `Negative_Review`. + + ```python + # with lambdas: + start = time.time() + no_negative_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" else False , axis=1) + print("Number of No Negative reviews: " + str(len(no_negative_reviews[no_negative_reviews == True].index))) + + no_positive_reviews = df.apply(lambda x: True if x['Positive_Review'] == "No Positive" else False , axis=1) + print("Number of No Positive reviews: " + str(len(no_positive_reviews[no_positive_reviews == True].index))) + + both_no_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" and x['Positive_Review'] == "No Positive" else False , axis=1) + print("Number of both No Negative and No Positive reviews: " + str(len(both_no_reviews[both_no_reviews == True].index))) + end = time.time() + print("Lambdas took " + str(round(end - start, 2)) + " seconds") + + Number of No Negative reviews: 127890 + Number of No Positive reviews: 35946 + Number of both No Negative and No Positive reviews: 127 + Lambdas took 9.64 seconds + ``` + +## דרך נוספת + +דרך נוספת לספור פריטים ללא Lambdas, ולהשתמש ב-sum כדי לספור את השורות: + + ```python + # without lambdas (using a mixture of notations to show you can use both) + start = time.time() + no_negative_reviews = sum(df.Negative_Review == "No Negative") + print("Number of No Negative reviews: " + str(no_negative_reviews)) + + no_positive_reviews = sum(df["Positive_Review"] == "No Positive") + print("Number of No Positive reviews: " + str(no_positive_reviews)) + + both_no_reviews = sum((df.Negative_Review == "No Negative") & (df.Positive_Review == "No Positive")) + print("Number of both No Negative and No Positive reviews: " + str(both_no_reviews)) + + end = time.time() + print("Sum took " + str(round(end - start, 2)) + " seconds") + + Number of No Negative reviews: 127890 + Number of No Positive reviews: 35946 + Number of both No Negative and No Positive reviews: 127 + Sum took 0.19 seconds + ``` + + ייתכן ששמתם לב שיש 127 שורות שיש להן גם "No Negative" וגם "No Positive" כערכים בעמודות `Negative_Review` ו-`Positive_Review` בהתאמה. זה אומר שהסוקר נתן למלון ציון מספרי, אבל נמנע מלכתוב ביקורת חיובית או שלילית. למרבה המזל מדובר בכמות קטנה של שורות (127 מתוך 515738, או 0.02%), כך שזה כנראה לא יטה את המודל או התוצאות לכיוון מסוים, אבל ייתכן שלא ציפיתם שמאגר נתונים של ביקורות יכיל שורות ללא ביקורות, ולכן כדאי לחקור את הנתונים כדי לגלות שורות כאלה. + +עכשיו כשחקרתם את מאגר הנתונים, בשיעור הבא תסננו את הנתונים ותוסיפו ניתוח רגשות. + +--- +## 🚀אתגר + +השיעור הזה מדגים, כפי שראינו בשיעורים קודמים, כמה חשוב להבין את הנתונים ואת המוזרויות שלהם לפני ביצוע פעולות עליהם. נתונים מבוססי טקסט, במיוחד, דורשים בדיקה מדוקדקת. חפרו במאגרי נתונים שונים שמבוססים על טקסט ונסו לגלות אזורים שיכולים להכניס הטיה או רגשות מוטים למודל. + +## [שאלון לאחר השיעור](https://ff-quizzes.netlify.app/en/ml/) + +## סקירה ולימוד עצמי + +קחו [את מסלול הלמידה הזה על NLP](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott) כדי לגלות כלים לנסות כשבונים מודלים מבוססי דיבור וטקסט. + +## משימה + +[NLTK](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/6-NLP/4-Hotel-Reviews-1/assignment.md b/translations/he/6-NLP/4-Hotel-Reviews-1/assignment.md new file mode 100644 index 00000000..398b6b5b --- /dev/null +++ b/translations/he/6-NLP/4-Hotel-Reviews-1/assignment.md @@ -0,0 +1,19 @@ + +# NLTK + +## הוראות + +NLTK היא ספרייה ידועה לשימוש בבלשנות חישובית ועיבוד שפה טבעית (NLP). נצלו את ההזדמנות לקרוא את '[ספר NLTK](https://www.nltk.org/book/)' ולנסות את התרגילים שבו. במשימה זו, שאינה מדורגת, תכירו את הספרייה הזו לעומק. + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md b/translations/he/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md new file mode 100644 index 00000000..46959a68 --- /dev/null +++ b/translations/he/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). בעוד שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור הסמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/6-NLP/4-Hotel-Reviews-1/solution/R/README.md b/translations/he/6-NLP/4-Hotel-Reviews-1/solution/R/README.md new file mode 100644 index 00000000..caca4365 --- /dev/null +++ b/translations/he/6-NLP/4-Hotel-Reviews-1/solution/R/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). בעוד שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/6-NLP/5-Hotel-Reviews-2/README.md b/translations/he/6-NLP/5-Hotel-Reviews-2/README.md new file mode 100644 index 00000000..3117f6c1 --- /dev/null +++ b/translations/he/6-NLP/5-Hotel-Reviews-2/README.md @@ -0,0 +1,389 @@ + +# ניתוח רגשות עם ביקורות על מלונות + +עכשיו, לאחר שחקרת את מערך הנתונים לעומק, הגיע הזמן לסנן את העמודות ולהשתמש בטכניקות עיבוד שפה טבעית (NLP) על מערך הנתונים כדי לקבל תובנות חדשות על המלונות. + +## [מבחן מקדים להרצאה](https://ff-quizzes.netlify.app/en/ml/) + +### פעולות סינון וניתוח רגשות + +כפי שכנראה שמת לב, יש כמה בעיות במערך הנתונים. חלק מהעמודות מלאות במידע חסר תועלת, אחרות נראות לא נכונות. גם אם הן נכונות, לא ברור כיצד חושבו, ואין אפשרות לאמת את התשובות באופן עצמאי באמצעות חישובים משלך. + +## תרגיל: עוד קצת עיבוד נתונים + +נקה את הנתונים עוד קצת. הוסף עמודות שיהיו שימושיות בהמשך, שנה את הערכים בעמודות אחרות, והסר עמודות מסוימות לחלוטין. + +1. עיבוד ראשוני של עמודות + + 1. הסר את `lat` ו-`lng` + + 2. החלף את הערכים ב-`Hotel_Address` בערכים הבאים (אם הכתובת מכילה את שם העיר והמדינה, שנה אותה רק לעיר ולמדינה). + + אלו הערים והמדינות היחידות במערך הנתונים: + + אמסטרדם, הולנד + + ברצלונה, ספרד + + לונדון, בריטניה + + מילאנו, איטליה + + פריז, צרפת + + וינה, אוסטריה + + ```python + def replace_address(row): + if "Netherlands" in row["Hotel_Address"]: + return "Amsterdam, Netherlands" + elif "Barcelona" in row["Hotel_Address"]: + return "Barcelona, Spain" + elif "United Kingdom" in row["Hotel_Address"]: + return "London, United Kingdom" + elif "Milan" in row["Hotel_Address"]: + return "Milan, Italy" + elif "France" in row["Hotel_Address"]: + return "Paris, France" + elif "Vienna" in row["Hotel_Address"]: + return "Vienna, Austria" + + # Replace all the addresses with a shortened, more useful form + df["Hotel_Address"] = df.apply(replace_address, axis = 1) + # The sum of the value_counts() should add up to the total number of reviews + print(df["Hotel_Address"].value_counts()) + ``` + + עכשיו תוכל לשאול נתונים ברמת מדינה: + + ```python + display(df.groupby("Hotel_Address").agg({"Hotel_Name": "nunique"})) + ``` + + | Hotel_Address | Hotel_Name | + | :--------------------- | :--------: | + | Amsterdam, Netherlands | 105 | + | Barcelona, Spain | 211 | + | London, United Kingdom | 400 | + | Milan, Italy | 162 | + | Paris, France | 458 | + | Vienna, Austria | 158 | + +2. עיבוד עמודות מטא-ביקורת של מלונות + + 1. הסר את `Additional_Number_of_Scoring` + + 1. החלף את `Total_Number_of_Reviews` במספר הכולל של הביקורות על המלון שבפועל נמצאות במערך הנתונים + + 1. החלף את `Average_Score` בציון שחושב על ידינו + + ```python + # Drop `Additional_Number_of_Scoring` + df.drop(["Additional_Number_of_Scoring"], axis = 1, inplace=True) + # Replace `Total_Number_of_Reviews` and `Average_Score` with our own calculated values + df.Total_Number_of_Reviews = df.groupby('Hotel_Name').transform('count') + df.Average_Score = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) + ``` + +3. עיבוד עמודות ביקורת + + 1. הסר את `Review_Total_Negative_Word_Counts`, `Review_Total_Positive_Word_Counts`, `Review_Date` ו-`days_since_review` + + 2. שמור את `Reviewer_Score`, `Negative_Review` ו-`Positive_Review` כפי שהם, + + 3. שמור את `Tags` לעת עתה + + - נבצע פעולות סינון נוספות על התגים בחלק הבא ואז נסיר את התגים + +4. עיבוד עמודות מבקר + + 1. הסר את `Total_Number_of_Reviews_Reviewer_Has_Given` + + 2. שמור את `Reviewer_Nationality` + +### עמודות תג + +עמודת ה-`Tag` בעייתית מכיוון שהיא רשימה (בצורת טקסט) המאוחסנת בעמודה. למרבה הצער, הסדר ומספר תתי-הקטעים בעמודה זו אינם תמיד זהים. קשה לאדם לזהות את הביטויים הנכונים שיש להתעניין בהם, מכיוון שיש 515,000 שורות ו-1427 מלונות, ולכל אחד יש אפשרויות מעט שונות שהמבקר יכול לבחור. כאן נכנס לתמונה NLP. ניתן לסרוק את הטקסט ולמצוא את הביטויים הנפוצים ביותר ולספור אותם. + +למרבה הצער, אנחנו לא מעוניינים במילים בודדות, אלא בביטויים מרובי מילים (לדוגמה, *נסיעת עסקים*). הפעלת אלגוריתם חלוקת תדירות ביטויים מרובי מילים על כמות נתונים כזו (6762646 מילים) עשויה לקחת זמן רב במיוחד, אך מבלי להסתכל על הנתונים, נראה שזהו מחיר הכרחי. כאן ניתוח נתונים חקרני מועיל, מכיוון שראית דוגמה של התגים כמו `[' נסיעת עסקים ', ' מטייל יחיד ', ' חדר יחיד ', ' שהה 5 לילות ', ' נשלח ממכשיר נייד ']`, תוכל להתחיל לשאול אם ניתן לצמצם משמעותית את העיבוד שעליך לבצע. למרבה המזל, זה אפשרי - אבל קודם עליך לבצע כמה צעדים כדי לוודא מהם התגים הרלוונטיים. + +### סינון תגים + +זכור שהמטרה של מערך הנתונים היא להוסיף רגשות ועמודות שיעזרו לך לבחור את המלון הטוב ביותר (עבור עצמך או אולי עבור לקוח שמבקש ממך ליצור בוט המלצות על מלונות). עליך לשאול את עצמך אם התגים שימושיים או לא במערך הנתונים הסופי. הנה פרשנות אחת (אם היית זקוק למערך הנתונים מסיבות אחרות, ייתכן שתגים שונים יישארו/יוסרו מהבחירה): + +1. סוג הנסיעה רלוונטי, והוא צריך להישאר +2. סוג קבוצת האורחים חשוב, והוא צריך להישאר +3. סוג החדר, הסוויטה או הסטודיו שבו האורח שהה אינו רלוונטי (לכל המלונות יש בעצם אותם חדרים) +4. המכשיר שעליו נשלחה הביקורת אינו רלוונטי +5. מספר הלילות שהמבקר שהה *יכול* להיות רלוונטי אם תייחס שהיות ארוכות יותר לכך שהם אהבו את המלון יותר, אבל זה גבולי, וסביר להניח שאינו רלוונטי + +לסיכום, **שמור 2 סוגי תגים והסר את האחרים**. + +ראשית, אינך רוצה לספור את התגים עד שהם יהיו בפורמט טוב יותר, כלומר יש להסיר את הסוגריים המרובעים והמרכאות. ניתן לעשות זאת בכמה דרכים, אך כדאי לבחור את המהירה ביותר מכיוון שזה עשוי לקחת זמן רב לעבד הרבה נתונים. למרבה המזל, ל-pandas יש דרך קלה לבצע כל אחד מהשלבים הללו. + +```Python +# Remove opening and closing brackets +df.Tags = df.Tags.str.strip("[']") +# remove all quotes too +df.Tags = df.Tags.str.replace(" ', '", ",", regex = False) +``` + +כל תג הופך למשהו כמו: `נסיעת עסקים, מטייל יחיד, חדר יחיד, שהה 5 לילות, נשלח ממכשיר נייד`. + +לאחר מכן אנו מוצאים בעיה. חלק מהביקורות, או השורות, מכילות 5 עמודות, חלק 3, חלק 6. זהו תוצאה של אופן יצירת מערך הנתונים, וקשה לתקן. אתה רוצה לקבל ספירת תדירות של כל ביטוי, אך הם בסדר שונה בכל ביקורת, כך שהספירה עשויה להיות שגויה, ומלון עשוי לא לקבל תג שהגיע לו. + +במקום זאת תשתמש בסדר השונה לטובתנו, מכיוון שכל תג הוא מרובה מילים אך גם מופרד באמצעות פסיק! הדרך הפשוטה ביותר לעשות זאת היא ליצור 6 עמודות זמניות עם כל תג מוכנס לעמודה המתאימה לסדר שלו בתג. לאחר מכן תוכל למזג את 6 העמודות לעמודה גדולה אחת ולהפעיל את השיטה `value_counts()` על העמודה המתקבלת. בהדפסה תראה שהיו 2428 תגים ייחודיים. הנה דוגמה קטנה: + +| Tag | Count | +| ------------------------------ | ------ | +| נסיעת פנאי | 417778 | +| נשלח ממכשיר נייד | 307640 | +| זוג | 252294 | +| שהה לילה אחד | 193645 | +| שהה 2 לילות | 133937 | +| מטייל יחיד | 108545 | +| שהה 3 לילות | 95821 | +| נסיעת עסקים | 82939 | +| קבוצה | 65392 | +| משפחה עם ילדים קטנים | 61015 | +| שהה 4 לילות | 47817 | +| חדר זוגי | 35207 | +| חדר זוגי סטנדרטי | 32248 | +| חדר זוגי משופר | 31393 | +| משפחה עם ילדים גדולים | 26349 | +| חדר זוגי דלוקס | 24823 | +| חדר זוגי או תאומים | 22393 | +| שהה 5 לילות | 20845 | +| חדר זוגי או תאומים סטנדרטי | 17483 | +| חדר זוגי קלאסי | 16989 | +| חדר זוגי או תאומים משופר | 13570 | +| 2 חדרים | 12393 | + +חלק מהתגים הנפוצים כמו `נשלח ממכשיר נייד` אינם מועילים לנו, ולכן ייתכן שזה רעיון חכם להסיר אותם לפני ספירת הופעת הביטויים, אך זו פעולה כה מהירה שניתן להשאיר אותם ולהתעלם מהם. + +### הסרת תגים של אורך שהייה + +הסרת תגים אלו היא שלב 1, היא מפחיתה מעט את מספר התגים שיש לשקול. שים לב שאינך מסיר אותם ממערך הנתונים, אלא פשוט בוחר להסיר אותם משיקול כערכים לספירה/שמירה במערך הביקורות. + +| אורך שהייה | Count | +| ---------------- | ------ | +| שהה לילה אחד | 193645 | +| שהה 2 לילות | 133937 | +| שהה 3 לילות | 95821 | +| שהה 4 לילות | 47817 | +| שהה 5 לילות | 20845 | +| שהה 6 לילות | 9776 | +| שהה 7 לילות | 7399 | +| שהה 8 לילות | 2502 | +| שהה 9 לילות | 1293 | +| ... | ... | + +יש מגוון עצום של חדרים, סוויטות, סטודיו, דירות וכדומה. כולם פחות או יותר אותו דבר ואינם רלוונטיים עבורך, לכן הסר אותם משיקול. + +| סוג חדר | Count | +| ----------------------------- | ----- | +| חדר זוגי | 35207 | +| חדר זוגי סטנדרטי | 32248 | +| חדר זוגי משופר | 31393 | +| חדר זוגי דלוקס | 24823 | +| חדר זוגי או תאומים | 22393 | +| חדר זוגי או תאומים סטנדרטי | 17483 | +| חדר זוגי קלאסי | 16989 | +| חדר זוגי או תאומים משופר | 13570 | + +לבסוף, וזה משמח (כי זה לא דרש הרבה עיבוד בכלל), תישאר עם התגים הבאים *שימושיים*: + +| Tag | Count | +| --------------------------------------------- | ------ | +| נסיעת פנאי | 417778 | +| זוג | 252294 | +| מטייל יחיד | 108545 | +| נסיעת עסקים | 82939 | +| קבוצה (משולב עם מטיילים עם חברים) | 67535 | +| משפחה עם ילדים קטנים | 61015 | +| משפחה עם ילדים גדולים | 26349 | +| עם חיית מחמד | 1405 | + +אפשר לטעון ש`מטיילים עם חברים` זהה פחות או יותר ל`קבוצה`, וזה יהיה הוגן לשלב את השניים כפי שמוצג לעיל. הקוד לזיהוי התגים הנכונים נמצא ב-[מחברת התגים](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb). + +השלב האחרון הוא ליצור עמודות חדשות עבור כל אחד מהתגים הללו. לאחר מכן, עבור כל שורת ביקורת, אם עמודת ה-`Tag` תואמת לאחת מהעמודות החדשות, הוסף 1, אם לא, הוסף 0. התוצאה הסופית תהיה ספירה של כמה מבקרים בחרו במלון זה (במצטבר) עבור, למשל, עסקים מול פנאי, או להביא חיית מחמד, וזה מידע שימושי בעת המלצה על מלון. + +```python +# Process the Tags into new columns +# The file Hotel_Reviews_Tags.py, identifies the most important tags +# Leisure trip, Couple, Solo traveler, Business trip, Group combined with Travelers with friends, +# Family with young children, Family with older children, With a pet +df["Leisure_trip"] = df.Tags.apply(lambda tag: 1 if "Leisure trip" in tag else 0) +df["Couple"] = df.Tags.apply(lambda tag: 1 if "Couple" in tag else 0) +df["Solo_traveler"] = df.Tags.apply(lambda tag: 1 if "Solo traveler" in tag else 0) +df["Business_trip"] = df.Tags.apply(lambda tag: 1 if "Business trip" in tag else 0) +df["Group"] = df.Tags.apply(lambda tag: 1 if "Group" in tag or "Travelers with friends" in tag else 0) +df["Family_with_young_children"] = df.Tags.apply(lambda tag: 1 if "Family with young children" in tag else 0) +df["Family_with_older_children"] = df.Tags.apply(lambda tag: 1 if "Family with older children" in tag else 0) +df["With_a_pet"] = df.Tags.apply(lambda tag: 1 if "With a pet" in tag else 0) + +``` + +### שמור את הקובץ שלך + +לבסוף, שמור את מערך הנתונים כפי שהוא עכשיו עם שם חדש. + +```python +df.drop(["Review_Total_Negative_Word_Counts", "Review_Total_Positive_Word_Counts", "days_since_review", "Total_Number_of_Reviews_Reviewer_Has_Given"], axis = 1, inplace=True) + +# Saving new data file with calculated columns +print("Saving results to Hotel_Reviews_Filtered.csv") +df.to_csv(r'../data/Hotel_Reviews_Filtered.csv', index = False) +``` + +## פעולות ניתוח רגשות + +בחלק האחרון הזה, תיישם ניתוח רגשות על עמודות הביקורות ותשמור את התוצאות במערך נתונים. + +## תרגיל: טען ושמור את הנתונים המסוננים + +שים לב שעכשיו אתה טוען את מערך הנתונים המסונן שנשמר בחלק הקודם, **לא** את מערך הנתונים המקורי. + +```python +import time +import pandas as pd +import nltk as nltk +from nltk.corpus import stopwords +from nltk.sentiment.vader import SentimentIntensityAnalyzer +nltk.download('vader_lexicon') + +# Load the filtered hotel reviews from CSV +df = pd.read_csv('../../data/Hotel_Reviews_Filtered.csv') + +# You code will be added here + + +# Finally remember to save the hotel reviews with new NLP data added +print("Saving results to Hotel_Reviews_NLP.csv") +df.to_csv(r'../data/Hotel_Reviews_NLP.csv', index = False) +``` + +### הסרת מילים נפוצות + +אם היית מפעיל ניתוח רגשות על עמודות הביקורות השליליות והחיוביות, זה יכול לקחת זמן רב. נבדק על מחשב נייד חזק עם מעבד מהיר, זה לקח 12 - 14 דקות תלוי באיזו ספריית ניתוח רגשות נעשה שימוש. זה זמן (יחסית) ארוך, ולכן כדאי לבדוק אם ניתן להאיץ את התהליך. + +הסרת מילים נפוצות, או מילים באנגלית שאינן משנות את הרגש של משפט, היא הצעד הראשון. על ידי הסרתן, ניתוח הרגשות אמור לרוץ מהר יותר, אך לא להיות פחות מדויק (מכיוון שהמילים הנפוצות אינן משפיעות על הרגש, אך הן מאטות את הניתוח). + +הביקורת השלילית הארוכה ביותר הייתה 395 מילים, אך לאחר הסרת המילים הנפוצות, היא מכילה 195 מילים. + +הסרת המילים הנפוצות היא גם פעולה מהירה, הסרת המילים הנפוצות מ-2 עמודות ביקורות על פני 515,000 שורות לקחה 3.3 שניות במכשיר הבדיקה. זה יכול לקחת מעט יותר או פחות זמן עבורך תלוי במהירות המעבד של המכשיר שלך, זיכרון RAM, האם יש לך SSD או לא, וכמה גורמים נוספים. הקיצור היחסי של הפעולה אומר שאם זה משפר את זמן ניתוח הרגשות, אז זה שווה לעשות. + +```python +from nltk.corpus import stopwords + +# Load the hotel reviews from CSV +df = pd.read_csv("../../data/Hotel_Reviews_Filtered.csv") + +# Remove stop words - can be slow for a lot of text! +# Ryan Han (ryanxjhan on Kaggle) has a great post measuring performance of different stop words removal approaches +# https://www.kaggle.com/ryanxjhan/fast-stop-words-removal # using the approach that Ryan recommends +start = time.time() +cache = set(stopwords.words("english")) +def remove_stopwords(review): + text = " ".join([word for word in review.split() if word not in cache]) + return text + +# Remove the stop words from both columns +df.Negative_Review = df.Negative_Review.apply(remove_stopwords) +df.Positive_Review = df.Positive_Review.apply(remove_stopwords) +``` + +### ביצוע ניתוח רגשות + +עכשיו עליך לחשב את ניתוח הרגשות עבור עמודות הביקורות השליליות והחיוביות, ולשמור את התוצאה ב-2 עמודות חדשות. המבחן של הרגש יהיה להשוות אותו לציון של המבקר עבור אותה ביקורת. לדוגמה, אם הרגש חושב שלביקורת השלילית היה רגש של 1 (רגש חיובי מאוד) ולביקורת החיובית רגש של 1, אך המבקר נתן למלון את הציון הנמוך ביותר האפשרי, אז או שהטקסט של הביקורת אינו תואם לציון, או שמנתח הרגשות לא הצליח לזהות את הרגש בצורה נכונה. עליך לצפות שחלק מציוני הרגשות יהיו שגויים לחלוטין, ולעיתים זה יהיה ניתן להסבר, למשל הביקורת יכולה להיות מאוד סרקסטית "כמובן ש-מ-א-ו-ד אהבתי לישון בחדר בלי חימום" ומנתח הרגשות חושב שזה רגש חיובי, למרות שאדם שקורא את זה היה יודע שזה סרקזם. +NLTK מספקת מנתחי רגשות שונים ללמידה, ואתם יכולים להחליף ביניהם ולבדוק אם הניתוח הרגשי מדויק יותר או פחות. ניתוח הרגשות של VADER משמש כאן. + +> Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014. + +```python +from nltk.sentiment.vader import SentimentIntensityAnalyzer + +# Create the vader sentiment analyser (there are others in NLTK you can try too) +vader_sentiment = SentimentIntensityAnalyzer() +# Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014. + +# There are 3 possibilities of input for a review: +# It could be "No Negative", in which case, return 0 +# It could be "No Positive", in which case, return 0 +# It could be a review, in which case calculate the sentiment +def calc_sentiment(review): + if review == "No Negative" or review == "No Positive": + return 0 + return vader_sentiment.polarity_scores(review)["compound"] +``` + +מאוחר יותר בתוכנית שלכם, כאשר תהיו מוכנים לחשב רגשות, תוכלו ליישם זאת על כל ביקורת באופן הבא: + +```python +# Add a negative sentiment and positive sentiment column +print("Calculating sentiment columns for both positive and negative reviews") +start = time.time() +df["Negative_Sentiment"] = df.Negative_Review.apply(calc_sentiment) +df["Positive_Sentiment"] = df.Positive_Review.apply(calc_sentiment) +end = time.time() +print("Calculating sentiment took " + str(round(end - start, 2)) + " seconds") +``` + +זה לוקח בערך 120 שניות במחשב שלי, אבל זה ישתנה ממחשב למחשב. אם אתם רוצים להדפיס את התוצאות ולבדוק אם הרגש תואם את הביקורת: + +```python +df = df.sort_values(by=["Negative_Sentiment"], ascending=True) +print(df[["Negative_Review", "Negative_Sentiment"]]) +df = df.sort_values(by=["Positive_Sentiment"], ascending=True) +print(df[["Positive_Review", "Positive_Sentiment"]]) +``` + +הדבר האחרון שיש לעשות עם הקובץ לפני השימוש בו באתגר הוא לשמור אותו! כדאי גם לשקול לסדר מחדש את כל העמודות החדשות שלכם כך שיהיה קל לעבוד איתן (עבור בני אדם, זה שינוי קוסמטי). + +```python +# Reorder the columns (This is cosmetic, but to make it easier to explore the data later) +df = df.reindex(["Hotel_Name", "Hotel_Address", "Total_Number_of_Reviews", "Average_Score", "Reviewer_Score", "Negative_Sentiment", "Positive_Sentiment", "Reviewer_Nationality", "Leisure_trip", "Couple", "Solo_traveler", "Business_trip", "Group", "Family_with_young_children", "Family_with_older_children", "With_a_pet", "Negative_Review", "Positive_Review"], axis=1) + +print("Saving results to Hotel_Reviews_NLP.csv") +df.to_csv(r"../data/Hotel_Reviews_NLP.csv", index = False) +``` + +עליכם להריץ את כל הקוד עבור [מחברת הניתוח](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) (לאחר שהרצתם [את מחברת הסינון](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) כדי ליצור את קובץ Hotel_Reviews_Filtered.csv). + +לסיכום, השלבים הם: + +1. קובץ הנתונים המקורי **Hotel_Reviews.csv** נחקר בשיעור הקודם עם [מחברת החקירה](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb) +2. Hotel_Reviews.csv מסונן על ידי [מחברת הסינון](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) ומתקבל **Hotel_Reviews_Filtered.csv** +3. Hotel_Reviews_Filtered.csv מעובד על ידי [מחברת ניתוח הרגשות](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) ומתקבל **Hotel_Reviews_NLP.csv** +4. השתמשו ב-Hotel_Reviews_NLP.csv באתגר ה-NLP למטה + +### מסקנה + +כשאתם התחלתם, היה לכם קובץ נתונים עם עמודות ונתונים, אבל לא הכל היה ניתן לאימות או לשימוש. חקרתם את הנתונים, סיננתם את מה שלא היה נחוץ, המרתם תגיות למשהו שימושי, חישבתם ממוצעים משלכם, הוספתם עמודות רגשות, וכנראה למדתם דברים מעניינים על עיבוד טקסט טבעי. + +## [שאלון לאחר ההרצאה](https://ff-quizzes.netlify.app/en/ml/) + +## אתגר + +עכשיו, כשניתחתם את הרגשות בקובץ הנתונים שלכם, נסו להשתמש באסטרטגיות שלמדתם בתוכנית הלימודים הזו (אולי clustering?) כדי לזהות דפוסים סביב רגשות. + +## סקירה ולימוד עצמי + +קחו [את המודול הזה](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott) כדי ללמוד עוד ולהשתמש בכלים שונים לחקר רגשות בטקסט. + +## משימה + +[נסו קובץ נתונים אחר](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/6-NLP/5-Hotel-Reviews-2/assignment.md b/translations/he/6-NLP/5-Hotel-Reviews-2/assignment.md new file mode 100644 index 00000000..e534331a --- /dev/null +++ b/translations/he/6-NLP/5-Hotel-Reviews-2/assignment.md @@ -0,0 +1,25 @@ + +# נסה מערך נתונים אחר + +## הוראות + +עכשיו, לאחר שלמדת להשתמש ב-NLTK כדי להקצות רגשות לטקסט, נסה מערך נתונים אחר. סביר להניח שתצטרך לבצע עיבוד נתונים סביבו, אז צור מחברת ותעד את תהליך החשיבה שלך. מה אתה מגלה? + +## קריטריונים להערכה + +| קריטריון | מצטיין | מספק | דורש שיפור | +| -------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ---------------------- | +| | מחברת מלאה ומערך נתונים מוצגים עם תאים מתועדים היטב המסבירים כיצד מוקצים הרגשות | המחברת חסרה הסברים טובים | המחברת פגומה | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md b/translations/he/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md new file mode 100644 index 00000000..730ccb13 --- /dev/null +++ b/translations/he/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/6-NLP/5-Hotel-Reviews-2/solution/R/README.md b/translations/he/6-NLP/5-Hotel-Reviews-2/solution/R/README.md new file mode 100644 index 00000000..09f4b81a --- /dev/null +++ b/translations/he/6-NLP/5-Hotel-Reviews-2/solution/R/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/6-NLP/README.md b/translations/he/6-NLP/README.md new file mode 100644 index 00000000..7f1db56c --- /dev/null +++ b/translations/he/6-NLP/README.md @@ -0,0 +1,38 @@ + +# התחלת עבודה עם עיבוד שפה טבעית + +עיבוד שפה טבעית (NLP) הוא היכולת של תוכנת מחשב להבין שפה אנושית כפי שהיא מדוברת ונכתבת - מה שמכונה שפה טבעית. זהו מרכיב של בינה מלאכותית (AI). תחום ה-NLP קיים כבר יותר מ-50 שנה ויש לו שורשים בתחום הבלשנות. כל התחום מכוון לעזור למכונות להבין ולעבד את השפה האנושית. לאחר מכן ניתן להשתמש בזה לביצוע משימות כמו בדיקת איות או תרגום מכונה. יש לו מגוון יישומים בעולם האמיתי בתחומים רבים, כולל מחקר רפואי, מנועי חיפוש ומודיעין עסקי. + +## נושא אזורי: שפות וספרות אירופיות ומלונות רומנטיים באירופה ❤️ + +בפרק זה של התוכנית, תיחשפו לאחד השימושים הנפוצים ביותר בלמידת מכונה: עיבוד שפה טבעית (NLP). תחום זה, שמקורו בבלשנות חישובית, מהווה גשר בין בני אדם למכונות באמצעות תקשורת קולית או טקסטואלית. + +בשיעורים אלו נלמד את יסודות ה-NLP על ידי בניית בוטים שיחתיים קטנים כדי להבין כיצד למידת מכונה מסייעת להפוך את השיחות הללו ליותר ויותר 'חכמות'. תצאו למסע בזמן, ותשוחחו עם אליזבת בנט ומר דארסי מתוך הרומן הקלאסי של ג'יין אוסטן, **גאווה ודעה קדומה**, שפורסם בשנת 1813. לאחר מכן, תעמיקו את הידע שלכם על ידי לימוד ניתוח רגשות דרך ביקורות על מלונות באירופה. + +![ספר גאווה ודעה קדומה ותה](../../../6-NLP/images/p&p.jpg) +> צילום על ידי Elaine Howlin ב-Unsplash + +## שיעורים + +1. [מבוא לעיבוד שפה טבעית](1-Introduction-to-NLP/README.md) +2. [משימות וטכניקות נפוצות ב-NLP](2-Tasks/README.md) +3. [תרגום וניתוח רגשות באמצעות למידת מכונה](3-Translation-Sentiment/README.md) +4. [הכנת הנתונים שלכם](4-Hotel-Reviews-1/README.md) +5. [NLTK לניתוח רגשות](5-Hotel-Reviews-2/README.md) + +## קרדיטים + +שיעורי עיבוד השפה הטבעית הללו נכתבו עם ☕ על ידי [Stephen Howell](https://twitter.com/Howell_MSFT) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/6-NLP/data/README.md b/translations/he/6-NLP/data/README.md new file mode 100644 index 00000000..01c93901 --- /dev/null +++ b/translations/he/6-NLP/data/README.md @@ -0,0 +1,15 @@ + +הורד את נתוני ביקורת המלון לתיקייה זו. + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס AI [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/7-TimeSeries/1-Introduction/README.md b/translations/he/7-TimeSeries/1-Introduction/README.md new file mode 100644 index 00000000..e3e7929b --- /dev/null +++ b/translations/he/7-TimeSeries/1-Introduction/README.md @@ -0,0 +1,199 @@ + +# מבוא לחיזוי סדרות זמן + +![סיכום סדרות זמן בסקצ'נוט](../../../../sketchnotes/ml-timeseries.png) + +> סקצ'נוט מאת [Tomomi Imura](https://www.twitter.com/girlie_mac) + +בשיעור הזה ובשיעור הבא, תלמדו מעט על חיזוי סדרות זמן, תחום מעניין וחשוב בארגז הכלים של מדען ML, אשר פחות מוכר בהשוואה לנושאים אחרים. חיזוי סדרות זמן הוא מעין 'כדור בדולח': בהתבסס על ביצועים קודמים של משתנה כמו מחיר, ניתן לחזות את הערך הפוטנציאלי העתידי שלו. + +[![מבוא לחיזוי סדרות זמן](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](https://youtu.be/cBojo1hsHiI "מבוא לחיזוי סדרות זמן") + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון על חיזוי סדרות זמן + +## [שאלון לפני השיעור](https://ff-quizzes.netlify.app/en/ml/) + +זהו תחום שימושי ומעניין בעל ערך ממשי לעסקים, בשל יישומו הישיר לבעיות של תמחור, מלאי וניהול שרשרת אספקה. בעוד שטכניקות למידה עמוקה החלו לשמש כדי להפיק תובנות נוספות ולחזות ביצועים עתידיים בצורה טובה יותר, חיזוי סדרות זמן נותר תחום שמבוסס רבות על טכניקות ML קלאסיות. + +> ניתן למצוא את תכנית הלימודים השימושית של Penn State בנושא סדרות זמן [כאן](https://online.stat.psu.edu/stat510/lesson/1) + +## מבוא + +נניח שאתם מנהלים מערך של מדחני חניה חכמים המספקים נתונים על תדירות השימוש בהם ועל משך הזמן לאורך זמן. + +> מה אם הייתם יכולים לחזות, בהתבסס על ביצועי העבר של המדחן, את ערכו העתידי בהתאם לחוקי ההיצע והביקוש? + +חיזוי מדויק של הזמן לפעול כדי להשיג את המטרה שלכם הוא אתגר שניתן להתמודד איתו באמצעות חיזוי סדרות זמן. זה אולי לא ישמח אנשים שיחויבו יותר בזמני עומס כשהם מחפשים מקום חניה, אבל זו דרך בטוחה לייצר הכנסה לניקוי הרחובות! + +בואו נחקור כמה מסוגי האלגוריתמים של סדרות זמן ונתחיל במחברת כדי לנקות ולהכין נתונים. הנתונים שתנתחו נלקחו מתחרות החיזוי GEFCom2014. הם כוללים 3 שנים של נתוני עומס חשמל וטמפרטורה לפי שעה בין השנים 2012 ל-2014. בהתבסס על דפוסים היסטוריים של עומס חשמל וטמפרטורה, תוכלו לחזות ערכים עתידיים של עומס חשמל. + +בדוגמה זו, תלמדו כיצד לחזות צעד זמן אחד קדימה, תוך שימוש בנתוני עומס היסטוריים בלבד. עם זאת, לפני שמתחילים, כדאי להבין מה קורה מאחורי הקלעים. + +## כמה הגדרות + +כשנתקלים במונח 'סדרות זמן', חשוב להבין את השימוש בו בהקשרים שונים. + +🎓 **סדרות זמן** + +במתמטיקה, "סדרות זמן הן סדרה של נקודות נתונים שמאונדקסות (או רשומות או מוצגות בגרף) לפי סדר זמן. לרוב, סדרות זמן הן רצף שנלקח בנקודות זמן עוקבות במרווחים שווים." דוגמה לסדרות זמן היא ערך הסגירה היומי של [מדד דאו ג'ונס](https://wikipedia.org/wiki/Time_series). השימוש בגרפים של סדרות זמן ובמודלים סטטיסטיים נפוץ בעיבוד אותות, חיזוי מזג אוויר, חיזוי רעידות אדמה ובתחומים נוספים שבהם אירועים מתרחשים ונקודות נתונים יכולות להיות מוצגות לאורך זמן. + +🎓 **ניתוח סדרות זמן** + +ניתוח סדרות זמן הוא ניתוח של נתוני סדרות הזמן שהוזכרו לעיל. נתוני סדרות זמן יכולים להופיע בצורות שונות, כולל 'סדרות זמן מופרעות' שמזהות דפוסים בהתפתחות סדרות זמן לפני ואחרי אירוע מפריע. סוג הניתוח הנדרש עבור סדרות הזמן תלוי באופי הנתונים. נתוני סדרות זמן עצמם יכולים להופיע כרצף של מספרים או תווים. + +הניתוח שמתבצע משתמש במגוון שיטות, כולל תחום התדר ותחום הזמן, ליניארי ולא ליניארי, ועוד. [למדו עוד](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) על הדרכים הרבות לנתח סוג זה של נתונים. + +🎓 **חיזוי סדרות זמן** + +חיזוי סדרות זמן הוא השימוש במודל כדי לחזות ערכים עתידיים בהתבסס על דפוסים שהוצגו על ידי נתונים שנאספו בעבר. בעוד שניתן להשתמש במודלים רגרסיביים כדי לחקור נתוני סדרות זמן, עם אינדקסי זמן כמשתני x בגרף, נתונים כאלה עדיף לנתח באמצעות סוגים מיוחדים של מודלים. + +נתוני סדרות זמן הם רשימה של תצפיות מסודרות, בניגוד לנתונים שניתן לנתח באמצעות רגרסיה ליניארית. המודל הנפוץ ביותר הוא ARIMA, ראשי תיבות של "Autoregressive Integrated Moving Average". + +[מודלי ARIMA](https://online.stat.psu.edu/stat510/lesson/1/1.1) "מקשרים את הערך הנוכחי של סדרה לערכים קודמים ולשגיאות חיזוי קודמות." הם מתאימים ביותר לניתוח נתונים בתחום הזמן, שבו הנתונים מסודרים לאורך זמן. + +> ישנם כמה סוגים של מודלי ARIMA, עליהם תוכלו ללמוד [כאן](https://people.duke.edu/~rnau/411arim.htm) ותגעו בהם בשיעור הבא. + +בשיעור הבא, תבנו מודל ARIMA באמצעות [סדרות זמן חד-משתניות](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm), שמתמקדות במשתנה אחד שמשנה את ערכו לאורך זמן. דוגמה לסוג זה של נתונים היא [מערך הנתונים הזה](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm) שמקליט את ריכוז ה-CO2 החודשי במצפה מאונה לואה: + +| CO2 | YearMonth | Year | Month | +| :----: | :-------: | :---: | :---: | +| 330.62 | 1975.04 | 1975 | 1 | +| 331.40 | 1975.13 | 1975 | 2 | +| 331.87 | 1975.21 | 1975 | 3 | +| 333.18 | 1975.29 | 1975 | 4 | +| 333.92 | 1975.38 | 1975 | 5 | +| 333.43 | 1975.46 | 1975 | 6 | +| 331.85 | 1975.54 | 1975 | 7 | +| 330.01 | 1975.63 | 1975 | 8 | +| 328.51 | 1975.71 | 1975 | 9 | +| 328.41 | 1975.79 | 1975 | 10 | +| 329.25 | 1975.88 | 1975 | 11 | +| 330.97 | 1975.96 | 1975 | 12 | + +✅ זיהו את המשתנה שמשתנה לאורך זמן במערך הנתונים הזה + +## מאפיינים של נתוני סדרות זמן שיש לקחת בחשבון + +כשמסתכלים על נתוני סדרות זמן, ייתכן שתבחינו שיש להם [מאפיינים מסוימים](https://online.stat.psu.edu/stat510/lesson/1/1.1) שצריך לקחת בחשבון ולהפחית כדי להבין טוב יותר את הדפוסים שלהם. אם תחשבו על נתוני סדרות זמן כעל 'אות' פוטנציאלי שברצונכם לנתח, ניתן לחשוב על המאפיינים הללו כעל 'רעש'. לעיתים קרובות תצטרכו להפחית את ה'רעש' הזה על ידי קיזוז חלק מהמאפיינים הללו באמצעות טכניקות סטטיסטיות. + +הנה כמה מושגים שכדאי להכיר כדי לעבוד עם סדרות זמן: + +🎓 **מגמות** + +מגמות מוגדרות כעליות וירידות מדידות לאורך זמן. [קראו עוד](https://machinelearningmastery.com/time-series-trends-in-python). בהקשר של סדרות זמן, מדובר על איך להשתמש ואם יש צורך, להסיר מגמות מסדרות הזמן שלכם. + +🎓 **[עונתיות](https://machinelearningmastery.com/time-series-seasonality-with-python/)** + +עונתיות מוגדרת כתנודות מחזוריות, כמו למשל עומס בתקופת החגים שעשוי להשפיע על מכירות. [הסתכלו](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm) על איך סוגים שונים של גרפים מציגים עונתיות בנתונים. + +🎓 **חריגות** + +חריגות הן נקודות נתונים רחוקות מהשונות הסטנדרטית של הנתונים. + +🎓 **מחזור ארוך טווח** + +בנפרד מעונתיות, נתונים עשויים להציג מחזור ארוך טווח כמו מיתון כלכלי שנמשך יותר משנה. + +🎓 **שונות קבועה** + +לאורך זמן, חלק מהנתונים מציגים תנודות קבועות, כמו שימוש באנרגיה ביום ובלילה. + +🎓 **שינויים פתאומיים** + +הנתונים עשויים להציג שינוי פתאומי שדורש ניתוח נוסף. לדוגמה, סגירה פתאומית של עסקים בעקבות COVID גרמה לשינויים בנתונים. + +✅ הנה [גרף סדרות זמן לדוגמה](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python) שמציג הוצאה יומית על מטבע במשחק לאורך כמה שנים. האם תוכלו לזהות מאפיינים כלשהם מהרשימה לעיל בנתונים הללו? + +![הוצאה על מטבע במשחק](../../../../7-TimeSeries/1-Introduction/images/currency.png) + +## תרגיל - התחלה עם נתוני שימוש באנרגיה + +בואו נתחיל ביצירת מודל סדרות זמן לחיזוי שימוש עתידי באנרגיה בהתבסס על שימוש בעבר. + +> הנתונים בדוגמה זו נלקחו מתחרות החיזוי GEFCom2014. הם כוללים 3 שנים של נתוני עומס חשמל וטמפרטורה לפי שעה בין השנים 2012 ל-2014. +> +> Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli and Rob J. Hyndman, "Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond", International Journal of Forecasting, vol.32, no.3, pp 896-913, July-September, 2016. + +1. בתיקיית `working` של השיעור הזה, פתחו את הקובץ _notebook.ipynb_. התחילו בהוספת ספריות שיעזרו לכם לטעון ולהציג נתונים + + ```python + import os + import matplotlib.pyplot as plt + from common.utils import load_data + %matplotlib inline + ``` + + שימו לב, אתם משתמשים בקבצים מהתיקייה `common` הכלולה שמגדירה את הסביבה שלכם ומטפלת בהורדת הנתונים. + +2. לאחר מכן, בדקו את הנתונים כ-DataFrame על ידי קריאה ל-`load_data()` ו-`head()`: + + ```python + data_dir = './data' + energy = load_data(data_dir)[['load']] + energy.head() + ``` + + תוכלו לראות שישנם שני עמודות שמייצגות תאריך ועומס: + + | | load | + | :-----------------: | :----: | + | 2012-01-01 00:00:00 | 2698.0 | + | 2012-01-01 01:00:00 | 2558.0 | + | 2012-01-01 02:00:00 | 2444.0 | + | 2012-01-01 03:00:00 | 2402.0 | + | 2012-01-01 04:00:00 | 2403.0 | + +3. עכשיו, הציגו את הנתונים בגרף על ידי קריאה ל-`plot()`: + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![גרף אנרגיה](../../../../7-TimeSeries/1-Introduction/images/energy-plot.png) + +4. עכשיו, הציגו את השבוע הראשון של יולי 2014, על ידי מתן קלט ל-`energy` בתבנית `[מתאריך]: [עד תאריך]`: + + ```python + energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![יולי](../../../../7-TimeSeries/1-Introduction/images/july-2014.png) + + גרף יפהפה! הסתכלו על הגרפים הללו ונסו לקבוע אם תוכלו לזהות מאפיינים כלשהם מהרשימה לעיל. מה ניתן להסיק על ידי ויזואליזציה של הנתונים? + +בשיעור הבא, תיצרו מודל ARIMA כדי ליצור תחזיות. + +--- + +## 🚀אתגר + +צרו רשימה של כל התעשיות ותחומי המחקר שאתם יכולים לחשוב עליהם שיכולים להרוויח מחיזוי סדרות זמן. האם תוכלו לחשוב על יישום של טכניקות אלו באמנויות? בכלכלה? באקולוגיה? בקמעונאות? בתעשייה? בפיננסים? איפה עוד? + +## [שאלון לאחר השיעור](https://ff-quizzes.netlify.app/en/ml/) + +## סקירה ולימוד עצמי + +למרות שלא נכסה אותם כאן, רשתות נוירונים משמשות לעיתים לשיפור שיטות קלאסיות של חיזוי סדרות זמן. קראו עוד על כך [במאמר הזה](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412) + +## משימה + +[הציגו עוד סדרות זמן](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/7-TimeSeries/1-Introduction/assignment.md b/translations/he/7-TimeSeries/1-Introduction/assignment.md new file mode 100644 index 00000000..1d7ded71 --- /dev/null +++ b/translations/he/7-TimeSeries/1-Introduction/assignment.md @@ -0,0 +1,25 @@ + +# הצגת סדרות זמן נוספות + +## הוראות + +התחלת ללמוד על חיזוי סדרות זמן על ידי התבוננות בסוג הנתונים שדורשים מודלים מיוחדים אלו. כבר הצגת נתונים הקשורים לאנרגיה. עכשיו, חפש נתונים נוספים שיכולים להפיק תועלת מחיזוי סדרות זמן. מצא שלוש דוגמאות (נסה [Kaggle](https://kaggle.com) ו-[Azure Open Datasets](https://azure.microsoft.com/en-us/services/open-datasets/catalog/?WT.mc_id=academic-77952-leestott)) ויצור מחברת להצגת הנתונים. ציין במחברת כל מאפיין מיוחד שיש לנתונים (עונתיות, שינויים פתאומיים או מגמות אחרות). + +## קריטריונים להערכה + +| קריטריון | מצטיין | מספק | דורש שיפור | +| -------- | ----------------------------------------------------- | -------------------------------------------------- | ------------------------------------------------------------------------------------------ | +| | שלושה מערכי נתונים מוצגים ומוסברים במחברת | שני מערכי נתונים מוצגים ומוסברים במחברת | מעט מערכי נתונים מוצגים או מוסברים במחברת או שהנתונים שהוצגו אינם מספקים | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור הסמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/7-TimeSeries/1-Introduction/solution/Julia/README.md b/translations/he/7-TimeSeries/1-Introduction/solution/Julia/README.md new file mode 100644 index 00000000..78d68308 --- /dev/null +++ b/translations/he/7-TimeSeries/1-Introduction/solution/Julia/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור הסמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. אנו לא נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/7-TimeSeries/1-Introduction/solution/R/README.md b/translations/he/7-TimeSeries/1-Introduction/solution/R/README.md new file mode 100644 index 00000000..19ae1186 --- /dev/null +++ b/translations/he/7-TimeSeries/1-Introduction/solution/R/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/7-TimeSeries/2-ARIMA/README.md b/translations/he/7-TimeSeries/2-ARIMA/README.md new file mode 100644 index 00000000..9b22591e --- /dev/null +++ b/translations/he/7-TimeSeries/2-ARIMA/README.md @@ -0,0 +1,404 @@ + +# חיזוי סדרות זמן עם ARIMA + +בשיעור הקודם, למדתם מעט על חיזוי סדרות זמן וטעינת מערך נתונים שמציג את התנודות בעומס החשמלי לאורך תקופת זמן. + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון: מבוא קצר למודלים של ARIMA. הדוגמה נעשתה ב-R, אך הרעיונות הם אוניברסליים. + +## [שאלון לפני השיעור](https://ff-quizzes.netlify.app/en/ml/) + +## מבוא + +בשיעור זה, תגלו דרך ספציפית לבנות מודלים עם [ARIMA: *A*uto*R*egressive *I*ntegrated *M*oving *A*verage](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average). מודלים של ARIMA מתאימים במיוחד לנתונים שמציגים [אי-סטציונריות](https://wikipedia.org/wiki/Stationary_process). + +## מושגים כלליים + +כדי לעבוד עם ARIMA, ישנם כמה מושגים שחשוב להכיר: + +- 🎓 **סטציונריות**. בהקשר סטטיסטי, סטציונריות מתייחסת לנתונים שההתפלגות שלהם אינה משתנה כאשר הם מוזזים בזמן. נתונים שאינם סטציונריים מציגים תנודות עקב מגמות שיש להפוך אותן כדי לנתח. עונתיות, למשל, יכולה להכניס תנודות לנתונים וניתן להסיר אותה באמצעות תהליך של 'הבדל עונתי'. + +- 🎓 **[הבדלה](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**. הבדלה של נתונים, שוב בהקשר סטטיסטי, מתייחסת לתהליך של הפיכת נתונים שאינם סטציונריים לסטציונריים על ידי הסרת המגמה הלא-קבועה שלהם. "הבדלה מסירה את השינויים ברמת סדרת הזמן, מבטלת מגמות ועונתיות ובכך מייצבת את הממוצע של סדרת הזמן." [מאמר מאת Shixiong et al](https://arxiv.org/abs/1904.07632) + +## ARIMA בהקשר של סדרות זמן + +בואו נפרק את החלקים של ARIMA כדי להבין טוב יותר כיצד הוא עוזר לנו לבנות מודלים של סדרות זמן ולבצע תחזיות. + +- **AR - עבור AutoRegressive**. מודלים אוטורגרסיביים, כפי שהשם מרמז, מסתכלים 'אחורה' בזמן כדי לנתח ערכים קודמים בנתונים שלכם ולבצע הנחות לגביהם. ערכים קודמים אלו נקראים 'פיגורים'. דוגמה לכך תהיה נתונים שמציגים מכירות חודשיות של עפרונות. סך המכירות של כל חודש ייחשב כ'משתנה מתפתח' במערך הנתונים. מודל זה נבנה כאשר "המשתנה המתפתח של העניין מוערך על ערכיו המפגרים (כלומר, הקודמים)." [ויקיפדיה](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) + +- **I - עבור Integrated**. בניגוד למודלים דומים כמו 'ARMA', ה-'I' ב-ARIMA מתייחס להיבט ה*[משולב](https://wikipedia.org/wiki/Order_of_integration)* שלו. הנתונים 'משולבים' כאשר מיושמים שלבי הבדלה כדי לבטל אי-סטציונריות. + +- **MA - עבור Moving Average**. ההיבט של [ממוצע נע](https://wikipedia.org/wiki/Moving-average_model) במודל זה מתייחס למשתנה הפלט שנקבע על ידי התבוננות בערכים הנוכחיים והעבריים של פיגורים. + +שורה תחתונה: ARIMA משמש כדי להתאים מודל בצורה הקרובה ביותר לנתונים המיוחדים של סדרות זמן. + +## תרגיל - בניית מודל ARIMA + +פתחו את תיקיית [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/working) בשיעור זה ומצאו את הקובץ [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/2-ARIMA/working/notebook.ipynb). + +1. הריצו את המחברת כדי לטעון את ספריית Python `statsmodels`; תזדקקו לה עבור מודלים של ARIMA. + +1. טענו ספריות נחוצות. + +1. כעת, טענו מספר ספריות נוספות שימושיות לשרטוט נתונים: + + ```python + import os + import warnings + import matplotlib.pyplot as plt + import numpy as np + import pandas as pd + import datetime as dt + import math + + from pandas.plotting import autocorrelation_plot + from statsmodels.tsa.statespace.sarimax import SARIMAX + from sklearn.preprocessing import MinMaxScaler + from common.utils import load_data, mape + from IPython.display import Image + + %matplotlib inline + pd.options.display.float_format = '{:,.2f}'.format + np.set_printoptions(precision=2) + warnings.filterwarnings("ignore") # specify to ignore warning messages + ``` + +1. טענו את הנתונים מקובץ `/data/energy.csv` לתוך DataFrame של Pandas והסתכלו עליהם: + + ```python + energy = load_data('./data')[['load']] + energy.head(10) + ``` + +1. שרטטו את כל נתוני האנרגיה הזמינים מינואר 2012 עד דצמבר 2014. לא אמורות להיות הפתעות, כפי שראינו את הנתונים בשיעור הקודם: + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + כעת, בואו נבנה מודל! + +### יצירת מערכי נתונים לאימון ובדיקה + +כעת הנתונים שלכם טעונים, כך שתוכלו להפריד אותם למערכי אימון ובדיקה. תאמנו את המודל שלכם על מערך האימון. כרגיל, לאחר שהמודל סיים את האימון, תעריכו את דיוקו באמצעות מערך הבדיקה. עליכם לוודא שמערך הבדיקה מכסה תקופה מאוחרת יותר בזמן ממערך האימון כדי להבטיח שהמודל לא יקבל מידע מתקופות זמן עתידיות. + +1. הקצו תקופה של חודשיים מה-1 בספטמבר עד ה-31 באוקטובר 2014 למערך האימון. מערך הבדיקה יכלול את התקופה של חודשיים מה-1 בנובמבר עד ה-31 בדצמבר 2014: + + ```python + train_start_dt = '2014-11-01 00:00:00' + test_start_dt = '2014-12-30 00:00:00' + ``` + + מכיוון שנתונים אלו משקפים את צריכת האנרגיה היומית, ישנו דפוס עונתי חזק, אך הצריכה דומה ביותר לצריכה בימים האחרונים. + +1. ויזואליזציה של ההבדלים: + + ```python + energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ + .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ + .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![נתוני אימון ובדיקה](../../../../7-TimeSeries/2-ARIMA/images/train-test.png) + + לכן, שימוש בחלון זמן קטן יחסית לאימון הנתונים אמור להיות מספיק. + + > הערה: מכיוון שהפונקציה שבה אנו משתמשים להתאמת מודל ARIMA משתמשת באימות בתוך הדגימה במהלך ההתאמה, נוותר על נתוני אימות. + +### הכנת הנתונים לאימון + +כעת, עליכם להכין את הנתונים לאימון על ידי ביצוע סינון וסקיילינג של הנתונים שלכם. סננו את מערך הנתונים שלכם כך שיכלול רק את התקופות והעמודות הנדרשות, וסקיילינג כדי להבטיח שהנתונים יוקרנו בטווח 0,1. + +1. סננו את מערך הנתונים המקורי כך שיכלול רק את התקופות שהוזכרו לכל מערך ורק את העמודה הנדרשת 'load' בנוסף לתאריך: + + ```python + train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] + test = energy.copy()[energy.index >= test_start_dt][['load']] + + print('Training data shape: ', train.shape) + print('Test data shape: ', test.shape) + ``` + + תוכלו לראות את הצורה של הנתונים: + + ```output + Training data shape: (1416, 1) + Test data shape: (48, 1) + ``` + +1. בצעו סקיילינג לנתונים כך שיהיו בטווח (0, 1). + + ```python + scaler = MinMaxScaler() + train['load'] = scaler.fit_transform(train) + train.head(10) + ``` + +1. ויזואליזציה של הנתונים המקוריים מול הנתונים המוקנים: + + ```python + energy[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']].rename(columns={'load':'original load'}).plot.hist(bins=100, fontsize=12) + train.rename(columns={'load':'scaled load'}).plot.hist(bins=100, fontsize=12) + plt.show() + ``` + + ![מקורי](../../../../7-TimeSeries/2-ARIMA/images/original.png) + + > הנתונים המקוריים + + ![מוקנה](../../../../7-TimeSeries/2-ARIMA/images/scaled.png) + + > הנתונים המוקנים + +1. כעת, לאחר שכיילתם את הנתונים המוקנים, תוכלו לכייל את נתוני הבדיקה: + + ```python + test['load'] = scaler.transform(test) + test.head() + ``` + +### יישום ARIMA + +הגיע הזמן ליישם ARIMA! כעת תשתמשו בספריית `statsmodels` שהתקנתם קודם. + +כעת עליכם לבצע מספר שלבים: + + 1. הגדירו את המודל על ידי קריאה ל-`SARIMAX()` והעברת פרמטרי המודל: פרמטרים p, d, ו-q, ופרמטרים P, D, ו-Q. + 2. הכינו את המודל לנתוני האימון על ידי קריאה לפונקציה fit(). + 3. בצעו תחזיות על ידי קריאה לפונקציה `forecast()` וציון מספר הצעדים (ה'אופק') לתחזית. + +> 🎓 מה משמעות כל הפרמטרים הללו? במודל ARIMA ישנם 3 פרמטרים המשמשים לסייע במידול ההיבטים המרכזיים של סדרת זמן: עונתיות, מגמה ורעש. הפרמטרים הם: + +`p`: הפרמטר הקשור להיבט האוטורגרסיבי של המודל, שמשלב ערכים *עבריים*. +`d`: הפרמטר הקשור לחלק המשולב של המודל, שמשפיע על כמות ה-*הבדלה* (🎓 זוכרים הבדלה 👆?) שיש ליישם על סדרת זמן. +`q`: הפרמטר הקשור לחלק הממוצע הנע של המודל. + +> הערה: אם לנתונים שלכם יש היבט עונתי - כמו במקרה זה - , אנו משתמשים במודל ARIMA עונתי (SARIMA). במקרה זה עליכם להשתמש בקבוצת פרמטרים נוספת: `P`, `D`, ו-`Q` שמתארים את אותם קשרים כמו `p`, `d`, ו-`q`, אך מתייחסים לרכיבים העונתיים של המודל. + +1. התחילו בהגדרת ערך האופק המועדף עליכם. בואו ננסה 3 שעות: + + ```python + # Specify the number of steps to forecast ahead + HORIZON = 3 + print('Forecasting horizon:', HORIZON, 'hours') + ``` + + בחירת הערכים הטובים ביותר עבור פרמטרי מודל ARIMA יכולה להיות מאתגרת מכיוון שהיא מעט סובייקטיבית וגוזלת זמן. ייתכן שתרצו לשקול שימוש בפונקציה `auto_arima()` מתוך ספריית [`pyramid`](https://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html). + +1. לעת עתה נסו כמה בחירות ידניות כדי למצוא מודל טוב. + + ```python + order = (4, 1, 0) + seasonal_order = (1, 1, 0, 24) + + model = SARIMAX(endog=train, order=order, seasonal_order=seasonal_order) + results = model.fit() + + print(results.summary()) + ``` + + טבלה של תוצאות מודפסת. + +בניתם את המודל הראשון שלכם! כעת עלינו למצוא דרך להעריך אותו. + +### הערכת המודל שלכם + +כדי להעריך את המודל שלכם, תוכלו לבצע את מה שנקרא `walk forward` validation. בפועל, מודלים של סדרות זמן מאומנים מחדש בכל פעם שנתונים חדשים הופכים זמינים. זה מאפשר למודל לבצע את התחזית הטובה ביותר בכל שלב זמן. + +מתחילים בתחילת סדרת הזמן באמצעות טכניקה זו, מאמנים את המודל על מערך נתוני האימון. לאחר מכן מבצעים תחזית על שלב הזמן הבא. התחזית מוערכת מול הערך הידוע. מערך האימון מורחב כך שיכלול את הערך הידוע והתהליך חוזר על עצמו. + +> הערה: עליכם לשמור על חלון מערך האימון קבוע לצורך אימון יעיל יותר כך שבכל פעם שאתם מוסיפים תצפית חדשה למערך האימון, אתם מסירים את התצפית מתחילת המערך. + +תהליך זה מספק הערכה חזקה יותר של איך המודל יפעל בפועל. עם זאת, הוא מגיע בעלות חישובית של יצירת כל כך הרבה מודלים. זה מקובל אם הנתונים קטנים או אם המודל פשוט, אך יכול להיות בעייתי בקנה מידה גדול. + +Walk-forward validation הוא תקן הזהב להערכת מודלים של סדרות זמן ומומלץ לפרויקטים שלכם. + +1. ראשית, צרו נקודת נתוני בדיקה עבור כל שלב אופק. + + ```python + test_shifted = test.copy() + + for t in range(1, HORIZON+1): + test_shifted['load+'+str(t)] = test_shifted['load'].shift(-t, freq='H') + + test_shifted = test_shifted.dropna(how='any') + test_shifted.head(5) + ``` + + | | | load | load+1 | load+2 | + | ---------- | -------- | ---- | ------ | ------ | + | 2014-12-30 | 00:00:00 | 0.33 | 0.29 | 0.27 | + | 2014-12-30 | 01:00:00 | 0.29 | 0.27 | 0.27 | + | 2014-12-30 | 02:00:00 | 0.27 | 0.27 | 0.30 | + | 2014-12-30 | 03:00:00 | 0.27 | 0.30 | 0.41 | + | 2014-12-30 | 04:00:00 | 0.30 | 0.41 | 0.57 | + + הנתונים מוזזים אופקית בהתאם לנקודת האופק שלהם. + +1. בצעו תחזיות על נתוני הבדיקה שלכם באמצעות גישה זו של חלון הזזה בלולאה בגודל אורך נתוני הבדיקה: + + ```python + %%time + training_window = 720 # dedicate 30 days (720 hours) for training + + train_ts = train['load'] + test_ts = test_shifted + + history = [x for x in train_ts] + history = history[(-training_window):] + + predictions = list() + + order = (2, 1, 0) + seasonal_order = (1, 1, 0, 24) + + for t in range(test_ts.shape[0]): + model = SARIMAX(endog=history, order=order, seasonal_order=seasonal_order) + model_fit = model.fit() + yhat = model_fit.forecast(steps = HORIZON) + predictions.append(yhat) + obs = list(test_ts.iloc[t]) + # move the training window + history.append(obs[0]) + history.pop(0) + print(test_ts.index[t]) + print(t+1, ': predicted =', yhat, 'expected =', obs) + ``` + + תוכלו לצפות באימון מתרחש: + + ```output + 2014-12-30 00:00:00 + 1 : predicted = [0.32 0.29 0.28] expected = [0.32945389435989236, 0.2900626678603402, 0.2739480752014323] + + 2014-12-30 01:00:00 + 2 : predicted = [0.3 0.29 0.3 ] expected = [0.2900626678603402, 0.2739480752014323, 0.26812891674127126] + + 2014-12-30 02:00:00 + 3 : predicted = [0.27 0.28 0.32] expected = [0.2739480752014323, 0.26812891674127126, 0.3025962399283795] + ``` + +1. השוו את התחזיות לעומס בפועל: + + ```python + eval_df = pd.DataFrame(predictions, columns=['t+'+str(t) for t in range(1, HORIZON+1)]) + eval_df['timestamp'] = test.index[0:len(test.index)-HORIZON+1] + eval_df = pd.melt(eval_df, id_vars='timestamp', value_name='prediction', var_name='h') + eval_df['actual'] = np.array(np.transpose(test_ts)).ravel() + eval_df[['prediction', 'actual']] = scaler.inverse_transform(eval_df[['prediction', 'actual']]) + eval_df.head() + ``` + + פלט + | | | timestamp | h | prediction | actual | + | --- | ---------- | --------- | --- | ---------- | -------- | + | 0 | 2014-12-30 | 00:00:00 | t+1 | 3,008.74 | 3,023.00 | + | 1 | 2014-12-30 | 01:00:00 | t+1 | 2,955.53 | 2,935.00 | + | 2 | 2014-12-30 | 02:00:00 | t+1 | 2,900.17 | 2,899.00 | + | 3 | 2014-12-30 | 03:00:00 | t+1 | 2,917.69 | 2,886.00 | + | 4 | 2014-12-30 | 04:00:00 | t+1 | 2,946.99 | 2,963.00 | + + התבוננו בתחזית הנתונים השעתית, בהשוואה לעומס בפועל. עד כמה זה מדויק? + +### בדיקת דיוק המודל + +בדקו את דיוק המודל שלכם על ידי בדיקת שגיאת האחוז הממוצעת המוחלטת (MAPE) שלו על כל התחזיות. +> **🧮 הצג לי את המתמטיקה** +> +> ![MAPE](../../../../7-TimeSeries/2-ARIMA/images/mape.png) +> +> [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) משמש להציג את דיוק התחזית כיחס שמוגדר על ידי הנוסחה לעיל. ההפרש בין הערך האמיתי לערך החזוי מחולק בערך האמיתי. +> "הערך המוחלט בחישוב זה מסוכם עבור כל נקודת תחזית בזמן ומחולק במספר הנקודות המותאמות n." [ויקיפדיה](https://wikipedia.org/wiki/Mean_absolute_percentage_error) +1. כתיבת משוואה בקוד: + + ```python + if(HORIZON > 1): + eval_df['APE'] = (eval_df['prediction'] - eval_df['actual']).abs() / eval_df['actual'] + print(eval_df.groupby('h')['APE'].mean()) + ``` + +1. חישוב MAPE של צעד אחד: + + ```python + print('One step forecast MAPE: ', (mape(eval_df[eval_df['h'] == 't+1']['prediction'], eval_df[eval_df['h'] == 't+1']['actual']))*100, '%') + ``` + + MAPE של תחזית צעד אחד: 0.5570581332313952 % + +1. הדפסת MAPE של תחזית רב-שלבית: + + ```python + print('Multi-step forecast MAPE: ', mape(eval_df['prediction'], eval_df['actual'])*100, '%') + ``` + + ```output + Multi-step forecast MAPE: 1.1460048657704118 % + ``` + + מספר נמוך הוא הטוב ביותר: יש לקחת בחשבון שתחזית עם MAPE של 10 היא תחזית עם סטייה של 10%. + +1. אבל כמו תמיד, קל יותר לראות מדידה כזו של דיוק באופן חזותי, אז בואו נשרטט את זה: + + ```python + if(HORIZON == 1): + ## Plotting single step forecast + eval_df.plot(x='timestamp', y=['actual', 'prediction'], style=['r', 'b'], figsize=(15, 8)) + + else: + ## Plotting multi step forecast + plot_df = eval_df[(eval_df.h=='t+1')][['timestamp', 'actual']] + for t in range(1, HORIZON+1): + plot_df['t+'+str(t)] = eval_df[(eval_df.h=='t+'+str(t))]['prediction'].values + + fig = plt.figure(figsize=(15, 8)) + ax = plt.plot(plot_df['timestamp'], plot_df['actual'], color='red', linewidth=4.0) + ax = fig.add_subplot(111) + for t in range(1, HORIZON+1): + x = plot_df['timestamp'][(t-1):] + y = plot_df['t+'+str(t)][0:len(x)] + ax.plot(x, y, color='blue', linewidth=4*math.pow(.9,t), alpha=math.pow(0.8,t)) + + ax.legend(loc='best') + + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![מודל סדרת זמן](../../../../7-TimeSeries/2-ARIMA/images/accuracy.png) + +🏆 גרף יפה מאוד, שמציג מודל עם דיוק טוב. עבודה מצוינת! + +--- + +## 🚀אתגר + +חקרו את הדרכים לבחון את דיוקו של מודל סדרת זמן. בשיעור זה נגענו ב-MAPE, אבל האם יש שיטות נוספות שתוכלו להשתמש בהן? חקרו אותן והוסיפו הערות. מסמך מועיל ניתן למצוא [כאן](https://otexts.com/fpp2/accuracy.html) + +## [שאלון לאחר השיעור](https://ff-quizzes.netlify.app/en/ml/) + +## סקירה ולימוד עצמי + +שיעור זה נוגע רק ביסודות של תחזיות סדרת זמן עם ARIMA. הקדישו זמן להעמיק את הידע שלכם על ידי חקר [מאגר זה](https://microsoft.github.io/forecasting/) וסוגי המודלים השונים שבו כדי ללמוד דרכים נוספות לבנות מודלים של סדרות זמן. + +## משימה + +[מודל ARIMA חדש](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/7-TimeSeries/2-ARIMA/assignment.md b/translations/he/7-TimeSeries/2-ARIMA/assignment.md new file mode 100644 index 00000000..cd3ae713 --- /dev/null +++ b/translations/he/7-TimeSeries/2-ARIMA/assignment.md @@ -0,0 +1,25 @@ + +# מודל ARIMA חדש + +## הוראות + +עכשיו, לאחר שבניתם מודל ARIMA, בנו מודל חדש עם נתונים חדשים (נסו אחד מ[מאגרי הנתונים האלה של Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). תעדו את העבודה שלכם במחברת, בצעו ויזואליזציה לנתונים ולמודל שלכם, ובדקו את דיוקו באמצעות MAPE. + +## קריטריונים להערכה + +| קריטריון | מצטיין | מספק | דורש שיפור | +| -------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | ---------------------------------- | +| | מוצגת מחברת עם מודל ARIMA חדש שנבנה, נבדק והוסבר עם ויזואליזציות ודיוק שצוין. | המחברת המוצגת אינה מתועדת או מכילה שגיאות | מוצגת מחברת לא מלאה | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/7-TimeSeries/2-ARIMA/solution/Julia/README.md b/translations/he/7-TimeSeries/2-ARIMA/solution/Julia/README.md new file mode 100644 index 00000000..136caf89 --- /dev/null +++ b/translations/he/7-TimeSeries/2-ARIMA/solution/Julia/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). בעוד שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/7-TimeSeries/2-ARIMA/solution/R/README.md b/translations/he/7-TimeSeries/2-ARIMA/solution/R/README.md new file mode 100644 index 00000000..4a30092d --- /dev/null +++ b/translations/he/7-TimeSeries/2-ARIMA/solution/R/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/7-TimeSeries/3-SVR/README.md b/translations/he/7-TimeSeries/3-SVR/README.md new file mode 100644 index 00000000..e134637b --- /dev/null +++ b/translations/he/7-TimeSeries/3-SVR/README.md @@ -0,0 +1,400 @@ + +# חיזוי סדרות זמן עם Support Vector Regressor + +בשיעור הקודם, למדת כיצד להשתמש במודל ARIMA כדי לבצע תחזיות של סדרות זמן. עכשיו תכיר את מודל Support Vector Regressor, שהוא מודל רגרסיה המשמש לחיזוי נתונים רציפים. + +## [מבחן מקדים](https://ff-quizzes.netlify.app/en/ml/) + +## מבוא + +בשיעור זה, תגלו דרך ספציפית לבנות מודלים עם [**SVM**: **S**upport **V**ector **M**achine](https://en.wikipedia.org/wiki/Support-vector_machine) עבור רגרסיה, או **SVR: Support Vector Regressor**. + +### SVR בהקשר של סדרות זמן [^1] + +לפני שנבין את החשיבות של SVR בחיזוי סדרות זמן, הנה כמה מושגים חשובים שעליכם להכיר: + +- **רגרסיה:** טכניקת למידה מונחית לחיזוי ערכים רציפים מתוך קבוצת נתונים נתונה. הרעיון הוא להתאים עקומה (או קו) במרחב התכונות שיש לה את המספר המרבי של נקודות נתונים. [לחצו כאן](https://en.wikipedia.org/wiki/Regression_analysis) למידע נוסף. +- **Support Vector Machine (SVM):** סוג של מודל למידת מכונה מונחית המשמש לסיווג, רגרסיה וזיהוי חריגות. המודל הוא היפר-מישור במרחב התכונות, שבמקרה של סיווג משמש כגבול, ובמקרה של רגרסיה משמש כקו ההתאמה הטוב ביותר. ב-SVM, פונקציית Kernel משמשת בדרך כלל כדי להפוך את קבוצת הנתונים למרחב בעל מספר ממדים גבוה יותר, כך שניתן להפריד אותם בקלות. [לחצו כאן](https://en.wikipedia.org/wiki/Support-vector_machine) למידע נוסף על SVMs. +- **Support Vector Regressor (SVR):** סוג של SVM, שמטרתו למצוא את קו ההתאמה הטוב ביותר (שבמקרה של SVM הוא היפר-מישור) שיש לו את המספר המרבי של נקודות נתונים. + +### למה SVR? [^1] + +בשיעור הקודם למדתם על ARIMA, שהוא שיטה סטטיסטית ליניארית מוצלחת לחיזוי נתוני סדרות זמן. עם זאת, במקרים רבים, נתוני סדרות זמן מכילים *אי-ליניאריות*, שלא ניתן למפות באמצעות מודלים ליניאריים. במקרים כאלה, היכולת של SVM להתחשב באי-ליניאריות בנתונים עבור משימות רגרסיה הופכת את SVR למוצלח בחיזוי סדרות זמן. + +## תרגיל - בניית מודל SVR + +השלבים הראשונים להכנת הנתונים זהים לאלה של השיעור הקודם על [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA). + +פתחו את [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/3-SVR/working) בתיקייה של שיעור זה ומצאו את הקובץ [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/3-SVR/working/notebook.ipynb).[^2] + +1. הריצו את המחברת וייבאו את הספריות הנדרשות: [^2] + + ```python + import sys + sys.path.append('../../') + ``` + + ```python + import os + import warnings + import matplotlib.pyplot as plt + import numpy as np + import pandas as pd + import datetime as dt + import math + + from sklearn.svm import SVR + from sklearn.preprocessing import MinMaxScaler + from common.utils import load_data, mape + ``` + +2. טענו את הנתונים מתוך הקובץ `/data/energy.csv` לתוך DataFrame של Pandas והסתכלו עליהם: [^2] + + ```python + energy = load_data('../../data')[['load']] + ``` + +3. צרו גרף של כל נתוני האנרגיה הזמינים מינואר 2012 עד דצמבר 2014: [^2] + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![נתונים מלאים](../../../../7-TimeSeries/3-SVR/images/full-data.png) + + עכשיו, בואו נבנה את מודל ה-SVR שלנו. + +### יצירת קבוצות אימון ובדיקה + +עכשיו הנתונים שלכם טעונים, כך שתוכלו להפריד אותם לקבוצות אימון ובדיקה. לאחר מכן תעצבו מחדש את הנתונים כדי ליצור קבוצת נתונים מבוססת צעדי זמן, שתידרש עבור SVR. תאמנו את המודל שלכם על קבוצת האימון. לאחר שהמודל סיים את האימון, תעריכו את דיוקו על קבוצת האימון, קבוצת הבדיקה ולאחר מכן על כל קבוצת הנתונים כדי לראות את הביצועים הכוללים. עליכם לוודא שקבוצת הבדיקה מכסה תקופה מאוחרת יותר בזמן מקבוצת האימון כדי להבטיח שהמודל לא יקבל מידע מתקופות זמן עתידיות [^2] (מצב המכונה *Overfitting*). + +1. הקצו תקופה של חודשיים מה-1 בספטמבר עד ה-31 באוקטובר 2014 לקבוצת האימון. קבוצת הבדיקה תכלול את התקופה של חודשיים מה-1 בנובמבר עד ה-31 בדצמבר 2014: [^2] + + ```python + train_start_dt = '2014-11-01 00:00:00' + test_start_dt = '2014-12-30 00:00:00' + ``` + +2. הציגו את ההבדלים: [^2] + + ```python + energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ + .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ + .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![נתוני אימון ובדיקה](../../../../7-TimeSeries/3-SVR/images/train-test.png) + + + +### הכנת הנתונים לאימון + +עכשיו, עליכם להכין את הנתונים לאימון על ידי ביצוע סינון וסקיילינג של הנתונים שלכם. סננו את קבוצת הנתונים כך שתכלול רק את התקופות והעמודות הדרושות, וסקיילינג כדי להבטיח שהנתונים יוקרנו בטווח 0,1. + +1. סננו את קבוצת הנתונים המקורית כך שתכלול רק את התקופות שהוזכרו לכל קבוצה ותכלול רק את העמודה הדרושה 'load' בנוסף לתאריך: [^2] + + ```python + train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] + test = energy.copy()[energy.index >= test_start_dt][['load']] + + print('Training data shape: ', train.shape) + print('Test data shape: ', test.shape) + ``` + + ```output + Training data shape: (1416, 1) + Test data shape: (48, 1) + ``` + +2. בצעו סקיילינג לנתוני האימון כך שיהיו בטווח (0, 1): [^2] + + ```python + scaler = MinMaxScaler() + train['load'] = scaler.fit_transform(train) + ``` + +4. עכשיו, בצעו סקיילינג לנתוני הבדיקה: [^2] + + ```python + test['load'] = scaler.transform(test) + ``` + +### יצירת נתונים עם צעדי זמן [^1] + +עבור SVR, אתם ממירים את נתוני הקלט לצורה `[batch, timesteps]`. לכן, תעצבו מחדש את `train_data` ו-`test_data` כך שתהיה ממד חדש שמתייחס לצעדי הזמן. + +```python +# Converting to numpy arrays +train_data = train.values +test_data = test.values +``` + +לדוגמה זו, ניקח `timesteps = 5`. כך שהקלטים למודל הם הנתונים עבור 4 צעדי הזמן הראשונים, והפלט יהיה הנתונים עבור צעד הזמן החמישי. + +```python +timesteps=5 +``` + +המרת נתוני האימון לטנסור דו-ממדי באמצעות list comprehension מקונן: + +```python +train_data_timesteps=np.array([[j for j in train_data[i:i+timesteps]] for i in range(0,len(train_data)-timesteps+1)])[:,:,0] +train_data_timesteps.shape +``` + +```output +(1412, 5) +``` + +המרת נתוני הבדיקה לטנסור דו-ממדי: + +```python +test_data_timesteps=np.array([[j for j in test_data[i:i+timesteps]] for i in range(0,len(test_data)-timesteps+1)])[:,:,0] +test_data_timesteps.shape +``` + +```output +(44, 5) +``` + +בחירת קלטים ופלטים מנתוני האימון והבדיקה: + +```python +x_train, y_train = train_data_timesteps[:,:timesteps-1],train_data_timesteps[:,[timesteps-1]] +x_test, y_test = test_data_timesteps[:,:timesteps-1],test_data_timesteps[:,[timesteps-1]] + +print(x_train.shape, y_train.shape) +print(x_test.shape, y_test.shape) +``` + +```output +(1412, 4) (1412, 1) +(44, 4) (44, 1) +``` + +### יישום SVR [^1] + +עכשיו, הגיע הזמן ליישם SVR. לקריאה נוספת על יישום זה, תוכלו לעיין ב-[תיעוד הזה](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html). עבור היישום שלנו, נבצע את השלבים הבאים: + + 1. הגדירו את המודל על ידי קריאה ל-`SVR()` והעברת היפר-פרמטרים של המודל: kernel, gamma, c ו-epsilon + 2. הכינו את המודל לנתוני האימון על ידי קריאה לפונקציה `fit()` + 3. בצעו תחזיות על ידי קריאה לפונקציה `predict()` + +עכשיו ניצור מודל SVR. כאן נשתמש ב-[RBF kernel](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel), ונגדיר את היפר-פרמטרים gamma, C ו-epsilon כ-0.5, 10 ו-0.05 בהתאמה. + +```python +model = SVR(kernel='rbf',gamma=0.5, C=10, epsilon = 0.05) +``` + +#### התאמת המודל לנתוני האימון [^1] + +```python +model.fit(x_train, y_train[:,0]) +``` + +```output +SVR(C=10, cache_size=200, coef0=0.0, degree=3, epsilon=0.05, gamma=0.5, + kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False) +``` + +#### ביצוע תחזיות עם המודל [^1] + +```python +y_train_pred = model.predict(x_train).reshape(-1,1) +y_test_pred = model.predict(x_test).reshape(-1,1) + +print(y_train_pred.shape, y_test_pred.shape) +``` + +```output +(1412, 1) (44, 1) +``` + +יצרתם את ה-SVR שלכם! עכשיו נצטרך להעריך אותו. + +### הערכת המודל שלכם [^1] + +להערכה, קודם כל נחזיר את הנתונים לסקייל המקורי שלנו. לאחר מכן, כדי לבדוק את הביצועים, ניצור גרף של סדרת הזמן המקורית והתחזית, ונדפיס גם את תוצאת ה-MAPE. + +החזירו את הפלטים המנובאים והמקוריים לסקייל המקורי: + +```python +# Scaling the predictions +y_train_pred = scaler.inverse_transform(y_train_pred) +y_test_pred = scaler.inverse_transform(y_test_pred) + +print(len(y_train_pred), len(y_test_pred)) +``` + +```python +# Scaling the original values +y_train = scaler.inverse_transform(y_train) +y_test = scaler.inverse_transform(y_test) + +print(len(y_train), len(y_test)) +``` + +#### בדיקת ביצועי המודל על נתוני האימון והבדיקה [^1] + +נחלץ את חותמות הזמן מקבוצת הנתונים כדי להציג בציר ה-x של הגרף שלנו. שימו לב שאנחנו משתמשים ב-```timesteps-1``` הערכים הראשונים כקלט עבור הפלט הראשון, כך שחותמות הזמן עבור הפלט יתחילו לאחר מכן. + +```python +train_timestamps = energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)].index[timesteps-1:] +test_timestamps = energy[test_start_dt:].index[timesteps-1:] + +print(len(train_timestamps), len(test_timestamps)) +``` + +```output +1412 44 +``` + +צרו גרף של התחזיות עבור נתוני האימון: + +```python +plt.figure(figsize=(25,6)) +plt.plot(train_timestamps, y_train, color = 'red', linewidth=2.0, alpha = 0.6) +plt.plot(train_timestamps, y_train_pred, color = 'blue', linewidth=0.8) +plt.legend(['Actual','Predicted']) +plt.xlabel('Timestamp') +plt.title("Training data prediction") +plt.show() +``` + +![תחזית נתוני אימון](../../../../7-TimeSeries/3-SVR/images/train-data-predict.png) + +הדפיסו את MAPE עבור נתוני האימון + +```python +print('MAPE for training data: ', mape(y_train_pred, y_train)*100, '%') +``` + +```output +MAPE for training data: 1.7195710200875551 % +``` + +צרו גרף של התחזיות עבור נתוני הבדיקה + +```python +plt.figure(figsize=(10,3)) +plt.plot(test_timestamps, y_test, color = 'red', linewidth=2.0, alpha = 0.6) +plt.plot(test_timestamps, y_test_pred, color = 'blue', linewidth=0.8) +plt.legend(['Actual','Predicted']) +plt.xlabel('Timestamp') +plt.show() +``` + +![תחזית נתוני בדיקה](../../../../7-TimeSeries/3-SVR/images/test-data-predict.png) + +הדפיסו את MAPE עבור נתוני הבדיקה + +```python +print('MAPE for testing data: ', mape(y_test_pred, y_test)*100, '%') +``` + +```output +MAPE for testing data: 1.2623790187854018 % +``` + +🏆 קיבלתם תוצאה טובה מאוד על קבוצת הבדיקה! + +### בדיקת ביצועי המודל על כל קבוצת הנתונים [^1] + +```python +# Extracting load values as numpy array +data = energy.copy().values + +# Scaling +data = scaler.transform(data) + +# Transforming to 2D tensor as per model input requirement +data_timesteps=np.array([[j for j in data[i:i+timesteps]] for i in range(0,len(data)-timesteps+1)])[:,:,0] +print("Tensor shape: ", data_timesteps.shape) + +# Selecting inputs and outputs from data +X, Y = data_timesteps[:,:timesteps-1],data_timesteps[:,[timesteps-1]] +print("X shape: ", X.shape,"\nY shape: ", Y.shape) +``` + +```output +Tensor shape: (26300, 5) +X shape: (26300, 4) +Y shape: (26300, 1) +``` + +```python +# Make model predictions +Y_pred = model.predict(X).reshape(-1,1) + +# Inverse scale and reshape +Y_pred = scaler.inverse_transform(Y_pred) +Y = scaler.inverse_transform(Y) +``` + +```python +plt.figure(figsize=(30,8)) +plt.plot(Y, color = 'red', linewidth=2.0, alpha = 0.6) +plt.plot(Y_pred, color = 'blue', linewidth=0.8) +plt.legend(['Actual','Predicted']) +plt.xlabel('Timestamp') +plt.show() +``` + +![תחזית נתונים מלאים](../../../../7-TimeSeries/3-SVR/images/full-data-predict.png) + +```python +print('MAPE: ', mape(Y_pred, Y)*100, '%') +``` + +```output +MAPE: 2.0572089029888656 % +``` + + + +🏆 גרפים מרשימים מאוד, שמראים מודל עם דיוק טוב. כל הכבוד! + +--- + +## 🚀אתגר + +- נסו לשנות את היפר-פרמטרים (gamma, C, epsilon) בזמן יצירת המודל והעריכו את הנתונים כדי לראות איזה סט של היפר-פרמטרים נותן את התוצאות הטובות ביותר על נתוני הבדיקה. למידע נוסף על היפר-פרמטרים אלה, תוכלו לעיין בתיעוד [כאן](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel). +- נסו להשתמש בפונקציות kernel שונות עבור המודל ונתחו את ביצועיהן על קבוצת הנתונים. מסמך מועיל ניתן למצוא [כאן](https://scikit-learn.org/stable/modules/svm.html#kernel-functions). +- נסו להשתמש בערכים שונים עבור `timesteps` כדי שהמודל יוכל להסתכל אחורה ולבצע תחזית. + +## [מבחן מסכם](https://ff-quizzes.netlify.app/en/ml/) + +## סקירה ולימוד עצמי + +שיעור זה נועד להציג את השימוש ב-SVR לחיזוי סדרות זמן. לקריאה נוספת על SVR, תוכלו לעיין ב-[בלוג הזה](https://www.analyticsvidhya.com/blog/2020/03/support-vector-regression-tutorial-for-machine-learning/). תיעוד זה ב-[scikit-learn](https://scikit-learn.org/stable/modules/svm.html) מספק הסבר מקיף יותר על SVMs באופן כללי, [SVRs](https://scikit-learn.org/stable/modules/svm.html#regression) וגם פרטי יישום אחרים כמו [פונקציות kernel](https://scikit-learn.org/stable/modules/svm.html#kernel-functions) שונות שניתן להשתמש בהן, והפרמטרים שלהן. + +## משימה + +[מודל SVR חדש](assignment.md) + + + +## קרדיטים + + +[^1]: הטקסט, הקוד והתוצאות בסעיף זה נתרמו על ידי [@AnirbanMukherjeeXD](https://github.com/AnirbanMukherjeeXD) +[^2]: הטקסט, הקוד והתוצאות בסעיף זה נלקחו מ-[ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). בעוד שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/7-TimeSeries/3-SVR/assignment.md b/translations/he/7-TimeSeries/3-SVR/assignment.md new file mode 100644 index 00000000..4dd8aff3 --- /dev/null +++ b/translations/he/7-TimeSeries/3-SVR/assignment.md @@ -0,0 +1,29 @@ + +# מודל SVR חדש + +## הוראות [^1] + +עכשיו כשיצרתם מודל SVR, צרו מודל חדש עם נתונים חדשים (נסו אחד מ[מאגרי הנתונים האלה מדוק](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). תעדו את העבודה שלכם במחברת, ויזואליזו את הנתונים ואת המודל שלכם, ובדקו את דיוקו באמצעות גרפים מתאימים ו-MAPE. בנוסף, נסו לשנות את ההיפר-פרמטרים השונים וגם להשתמש בערכים שונים עבור שלבי הזמן. + +## קריטריונים להערכה [^1] + +| קריטריון | מצטיין | מספק | דורש שיפור | +| -------- | ---------------------------------------------------------- | ----------------------------------------------------- | ---------------------------- | +| | מוצגת מחברת עם מודל SVR שנבנה, נבדק והוסבר עם ויזואליזציות ודיוק מצוין. | המחברת המוצגת אינה מתועדת או מכילה שגיאות. | מוצגת מחברת לא מלאה | + + + +[^1]: הטקסט בסעיף זה מבוסס על [המשימה מ-ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/7-TimeSeries/README.md b/translations/he/7-TimeSeries/README.md new file mode 100644 index 00000000..85ecc72e --- /dev/null +++ b/translations/he/7-TimeSeries/README.md @@ -0,0 +1,37 @@ + +# מבוא לחיזוי סדרות זמן + +מהו חיזוי סדרות זמן? מדובר בניבוי אירועים עתידיים על ידי ניתוח מגמות מהעבר. + +## נושא אזורי: שימוש עולמי בחשמל ✨ + +בשני השיעורים הללו, תיחשפו לחיזוי סדרות זמן, תחום פחות מוכר בלמידת מכונה, אך בעל ערך רב ליישומים בתעשייה ובעסקים, בין היתר. למרות שניתן להשתמש ברשתות עצביות כדי לשפר את יעילות המודלים הללו, נלמד אותם בהקשר של למידת מכונה קלאסית, כאשר המודלים מסייעים לנבא ביצועים עתידיים בהתבסס על העבר. + +המיקוד האזורי שלנו הוא שימוש בחשמל בעולם, מערך נתונים מעניין ללמידה על חיזוי צריכת חשמל עתידית בהתבסס על דפוסי עומס מהעבר. ניתן לראות כיצד סוג כזה של חיזוי יכול להיות מועיל מאוד בסביבה עסקית. + +![רשת חשמל](../../../7-TimeSeries/images/electric-grid.jpg) + +תמונה מאת [Peddi Sai hrithik](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) של עמודי חשמל על כביש ברג'סטאן ב-[Unsplash](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) + +## שיעורים + +1. [מבוא לחיזוי סדרות זמן](1-Introduction/README.md) +2. [בניית מודלים ARIMA לחיזוי סדרות זמן](2-ARIMA/README.md) +3. [בניית Support Vector Regressor לחיזוי סדרות זמן](3-SVR/README.md) + +## קרדיטים + +"מבוא לחיזוי סדרות זמן" נכתב עם ⚡️ על ידי [Francesca Lazzeri](https://twitter.com/frlazzeri) ו-[Jen Looper](https://twitter.com/jenlooper). המחברות הופיעו לראשונה באופן מקוון ב-[מאגר Azure "Deep Learning For Time Series"](https://github.com/Azure/DeepLearningForTimeSeriesForecasting) שנכתב במקור על ידי Francesca Lazzeri. השיעור על SVR נכתב על ידי [Anirban Mukherjee](https://github.com/AnirbanMukherjeeXD) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). בעוד שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/8-Reinforcement/1-QLearning/README.md b/translations/he/8-Reinforcement/1-QLearning/README.md new file mode 100644 index 00000000..72052493 --- /dev/null +++ b/translations/he/8-Reinforcement/1-QLearning/README.md @@ -0,0 +1,256 @@ + +# מבוא ללמידת חיזוק ולמידת Q + +![סיכום למידת חיזוק בלמידת מכונה בסקצ'נוט](../../../../sketchnotes/ml-reinforcement.png) +> סקצ'נוט מאת [Tomomi Imura](https://www.twitter.com/girlie_mac) + +למידת חיזוק כוללת שלושה מושגים חשובים: הסוכן, מצבים מסוימים, ומערך פעולות לכל מצב. על ידי ביצוע פעולה במצב מסוים, הסוכן מקבל תגמול. דמיינו שוב את משחק המחשב סופר מריו. אתם מריו, נמצאים ברמת משחק, עומדים ליד קצה צוק. מעליכם יש מטבע. אתם, בתור מריו, ברמת משחק, במיקום ספציפי... זהו המצב שלכם. צעד אחד ימינה (פעולה) יוביל אתכם מעבר לקצה, וזה יעניק לכם ניקוד נמוך. לעומת זאת, לחיצה על כפתור הקפיצה תאפשר לכם לצבור נקודה ולהישאר בחיים. זהו תוצאה חיובית שצריכה להעניק לכם ניקוד חיובי. + +באמצעות למידת חיזוק וסימולטור (המשחק), ניתן ללמוד כיצד לשחק את המשחק כדי למקסם את התגמול, כלומר להישאר בחיים ולצבור כמה שיותר נקודות. + +[![מבוא ללמידת חיזוק](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo) + +> 🎥 לחצו על התמונה למעלה כדי לשמוע את דמיטרי מדבר על למידת חיזוק + +## [שאלון לפני השיעור](https://ff-quizzes.netlify.app/en/ml/) + +## דרישות מוקדמות והגדרות + +בשיעור זה, נתנסה בקוד בפייתון. עליכם להיות מסוגלים להריץ את הקוד של Jupyter Notebook מהשיעור הזה, בין אם במחשב שלכם או בענן. + +ניתן לפתוח את [מחברת השיעור](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) ולעבור על השיעור כדי לבנות. + +> **הערה:** אם אתם פותחים את הקוד מהענן, תצטרכו גם להוריד את הקובץ [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), שמשמש בקוד המחברת. הוסיפו אותו לאותה תיקייה כמו המחברת. + +## מבוא + +בשיעור זה, נחקור את עולמו של **[פטר והזאב](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**, בהשראת אגדה מוזיקלית של המלחין הרוסי [סרגיי פרוקופייב](https://en.wikipedia.org/wiki/Sergei_Prokofiev). נשתמש ב**למידת חיזוק** כדי לאפשר לפטר לחקור את סביבתו, לאסוף תפוחים טעימים ולהימנע ממפגש עם הזאב. + +**למידת חיזוק** (RL) היא טכניקת למידה שמאפשרת לנו ללמוד התנהגות אופטימלית של **סוכן** בסביבה מסוימת על ידי ביצוע ניסויים רבים. סוכן בסביבה זו צריך שיהיה לו **מטרה**, שמוגדרת על ידי **פונקציית תגמול**. + +## הסביבה + +לצורך הפשטות, נניח שעולמו של פטר הוא לוח מרובע בגודל `width` x `height`, כמו זה: + +![הסביבה של פטר](../../../../8-Reinforcement/1-QLearning/images/environment.png) + +כל תא בלוח הזה יכול להיות: + +* **קרקע**, שעליה פטר ויצורים אחרים יכולים ללכת. +* **מים**, שעליהם כמובן אי אפשר ללכת. +* **עץ** או **דשא**, מקום שבו אפשר לנוח. +* **תפוח**, שמייצג משהו שפטר ישמח למצוא כדי להאכיל את עצמו. +* **זאב**, שהוא מסוכן ויש להימנע ממנו. + +ישנו מודול פייתון נפרד, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), שמכיל את הקוד לעבודה עם הסביבה הזו. מכיוון שהקוד הזה אינו חשוב להבנת המושגים שלנו, נייבא את המודול ונשתמש בו כדי ליצור את הלוח לדוגמה (בלוק קוד 1): + +```python +from rlboard import * + +width, height = 8,8 +m = Board(width,height) +m.randomize(seed=13) +m.plot() +``` + +הקוד הזה אמור להדפיס תמונה של הסביבה הדומה לזו שמוצגת למעלה. + +## פעולות ומדיניות + +בדוגמה שלנו, המטרה של פטר תהיה למצוא תפוח, תוך הימנעות מהזאב ומכשולים אחרים. לשם כך, הוא יכול למעשה להסתובב עד שימצא תפוח. + +לכן, בכל מיקום, הוא יכול לבחור בין אחת מהפעולות הבאות: למעלה, למטה, שמאלה וימינה. + +נגדיר את הפעולות הללו כמילון, ונמפה אותן לזוגות של שינויי קואורדינטות מתאימים. לדוגמה, תנועה ימינה (`R`) תתאים לזוג `(1,0)`. (בלוק קוד 2): + +```python +actions = { "U" : (0,-1), "D" : (0,1), "L" : (-1,0), "R" : (1,0) } +action_idx = { a : i for i,a in enumerate(actions.keys()) } +``` + +לסיכום, האסטרטגיה והמטרה של התרחיש הזה הם כדלקמן: + +- **האסטרטגיה**, של הסוכן שלנו (פטר) מוגדרת על ידי מה שנקרא **מדיניות**. מדיניות היא פונקציה שמחזירה את הפעולה בכל מצב נתון. במקרה שלנו, מצב הבעיה מיוצג על ידי הלוח, כולל המיקום הנוכחי של השחקן. + +- **המטרה**, של למידת החיזוק היא בסופו של דבר ללמוד מדיניות טובה שתאפשר לנו לפתור את הבעיה ביעילות. עם זאת, כבסיס, נשקול את המדיניות הפשוטה ביותר שנקראת **הליכה אקראית**. + +## הליכה אקראית + +בואו נפתור את הבעיה שלנו תחילה על ידי יישום אסטרטגיית הליכה אקראית. עם הליכה אקראית, נבחר באופן אקראי את הפעולה הבאה מתוך הפעולות המותרות, עד שנגיע לתפוח (בלוק קוד 3). + +1. יישמו את ההליכה האקראית עם הקוד הבא: + + ```python + def random_policy(m): + return random.choice(list(actions)) + + def walk(m,policy,start_position=None): + n = 0 # number of steps + # set initial position + if start_position: + m.human = start_position + else: + m.random_start() + while True: + if m.at() == Board.Cell.apple: + return n # success! + if m.at() in [Board.Cell.wolf, Board.Cell.water]: + return -1 # eaten by wolf or drowned + while True: + a = actions[policy(m)] + new_pos = m.move_pos(m.human,a) + if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water: + m.move(a) # do the actual move + break + n+=1 + + walk(m,random_policy) + ``` + + הקריאה ל-`walk` אמורה להחזיר את אורך המסלול המתאים, שיכול להשתנות מריצה אחת לאחרת. + +1. הריצו את ניסוי ההליכה מספר פעמים (נניח, 100), והדפיסו את הסטטיסטיקות המתקבלות (בלוק קוד 4): + + ```python + def print_statistics(policy): + s,w,n = 0,0,0 + for _ in range(100): + z = walk(m,policy) + if z<0: + w+=1 + else: + s += z + n += 1 + print(f"Average path length = {s/n}, eaten by wolf: {w} times") + + print_statistics(random_policy) + ``` + + שימו לב שאורך המסלול הממוצע הוא סביב 30-40 צעדים, שזה די הרבה, בהתחשב בכך שהמרחק הממוצע לתפוח הקרוב ביותר הוא סביב 5-6 צעדים. + + תוכלו גם לראות כיצד נראית תנועתו של פטר במהלך ההליכה האקראית: + + ![הליכה אקראית של פטר](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif) + +## פונקציית תגמול + +כדי להפוך את המדיניות שלנו לאינטליגנטית יותר, עלינו להבין אילו מהלכים הם "טובים" יותר מאחרים. לשם כך, עלינו להגדיר את המטרה שלנו. + +המטרה יכולה להיות מוגדרת במונחים של **פונקציית תגמול**, שתחזיר ערך ניקוד עבור כל מצב. ככל שהמספר גבוה יותר, כך פונקציית התגמול טובה יותר. (בלוק קוד 5) + +```python +move_reward = -0.1 +goal_reward = 10 +end_reward = -10 + +def reward(m,pos=None): + pos = pos or m.human + if not m.is_valid(pos): + return end_reward + x = m.at(pos) + if x==Board.Cell.water or x == Board.Cell.wolf: + return end_reward + if x==Board.Cell.apple: + return goal_reward + return move_reward +``` + +דבר מעניין לגבי פונקציות תגמול הוא שבמקרים רבים, *אנו מקבלים תגמול משמעותי רק בסוף המשחק*. משמעות הדבר היא שהאלגוריתם שלנו צריך לזכור "צעדים טובים" שהובילו לתגמול חיובי בסוף, ולהגדיל את חשיבותם. באופן דומה, כל המהלכים שמובילים לתוצאות רעות צריכים להיות מדוכאים. + +## למידת Q + +האלגוריתם שנדון בו כאן נקרא **למידת Q**. באלגוריתם זה, המדיניות מוגדרת על ידי פונקציה (או מבנה נתונים) שנקראת **טבלת Q**. היא מתעדת את "הטוב" של כל אחת מהפעולות במצב נתון. + +היא נקראת טבלת Q מכיוון שלעתים קרובות נוח לייצג אותה כטבלה, או מערך רב-ממדי. מכיוון שלוח המשחק שלנו הוא בגודל `width` x `height`, נוכל לייצג את טבלת Q באמצעות מערך numpy עם צורה `width` x `height` x `len(actions)`: (בלוק קוד 6) + +```python +Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions) +``` + +שימו לב שאנו מאתחלים את כל הערכים בטבלת Q עם ערך שווה, במקרה שלנו - 0.25. זה תואם למדיניות "הליכה אקראית", מכיוון שכל המהלכים בכל מצב הם טובים באותה מידה. נוכל להעביר את טבלת Q לפונקציית `plot` כדי להמחיש את הטבלה על הלוח: `m.plot(Q)`. + +![הסביבה של פטר](../../../../8-Reinforcement/1-QLearning/images/env_init.png) + +במרכז כל תא יש "חץ" שמצביע על כיוון התנועה המועדף. מכיוון שכל הכיוונים שווים, מוצגת נקודה. + +כעת עלינו להריץ את הסימולציה, לחקור את הסביבה שלנו, וללמוד חלוקה טובה יותר של ערכי טבלת Q, שתאפשר לנו למצוא את הדרך לתפוח הרבה יותר מהר. + +## מהות למידת Q: משוואת בלמן + +ברגע שנתחיל לזוז, לכל פעולה יהיה תגמול מתאים, כלומר נוכל באופן תיאורטי לבחור את הפעולה הבאה על סמך התגמול המיידי הגבוה ביותר. עם זאת, ברוב המצבים, המהלך לא ישיג את מטרתנו להגיע לתפוח, ולכן לא נוכל להחליט מיד איזה כיוון טוב יותר. + +> זכרו שזה לא התוצאה המיידית שחשובה, אלא התוצאה הסופית, שנקבל בסוף הסימולציה. + +כדי לקחת בחשבון את התגמול המושהה, עלינו להשתמש בעקרונות של **[תכנות דינמי](https://en.wikipedia.org/wiki/Dynamic_programming)**, שמאפשרים לנו לחשוב על הבעיה שלנו באופן רקורסיבי. + +נניח שאנחנו נמצאים כעת במצב *s*, ורוצים לעבור למצב הבא *s'*. על ידי כך, נקבל את התגמול המיידי *r(s,a)*, שמוגדר על ידי פונקציית התגמול, בתוספת תגמול עתידי כלשהו. אם נניח שטבלת Q שלנו משקפת נכון את "האטרקטיביות" של כל פעולה, אז במצב *s'* נבחר פעולה *a* שתואמת לערך המקסימלי של *Q(s',a')*. לכן, התגמול העתידי הטוב ביותר שנוכל לקבל במצב *s* יוגדר כ-`max` + +## בדיקת המדיניות + +מכיוון ש-Q-Table מציג את "האטרקטיביות" של כל פעולה בכל מצב, קל מאוד להשתמש בו כדי להגדיר ניווט יעיל בעולם שלנו. במקרה הפשוט ביותר, ניתן לבחור את הפעולה המתאימה לערך הגבוה ביותר ב-Q-Table: (בלוק קוד 9) + +```python +def qpolicy_strict(m): + x,y = m.human + v = probs(Q[x,y]) + a = list(actions)[np.argmax(v)] + return a + +walk(m,qpolicy_strict) +``` + +> אם תנסו את הקוד למעלה מספר פעמים, ייתכן שתשימו לב שלפעמים הוא "נתקע", ותצטרכו ללחוץ על כפתור ה-STOP במחברת כדי להפסיק אותו. זה קורה מכיוון שיכולות להיות מצבים שבהם שני מצבים "מצביעים" זה על זה מבחינת ערך Q אופטימלי, ובמקרה כזה הסוכן ימשיך לנוע בין אותם מצבים ללא סוף. + +## 🚀אתגר + +> **משימה 1:** שנו את הפונקציה `walk` כך שתוגבל אורך המסלול המרבי למספר מסוים של צעדים (לדוגמה, 100), וצפו בקוד למעלה מחזיר את הערך הזה מדי פעם. + +> **משימה 2:** שנו את הפונקציה `walk` כך שלא תחזור למקומות שבהם כבר הייתה בעבר. זה ימנע מ-`walk` להיכנס ללולאה, אך עדיין ייתכן שהסוכן ימצא את עצמו "תקוע" במקום שממנו אינו יכול לברוח. + +## ניווט + +מדיניות ניווט טובה יותר תהיה זו שהשתמשנו בה במהלך האימון, שמשלבת ניצול וחקר. במדיניות זו, נבחר כל פעולה עם הסתברות מסוימת, פרופורציונלית לערכים ב-Q-Table. אסטרטגיה זו עדיין עשויה לגרום לסוכן לחזור למיקום שכבר חקר, אך כפי שניתן לראות מהקוד למטה, היא מביאה למסלול ממוצע קצר מאוד למיקום הרצוי (זכרו ש-`print_statistics` מריץ את הסימולציה 100 פעמים): (בלוק קוד 10) + +```python +def qpolicy(m): + x,y = m.human + v = probs(Q[x,y]) + a = random.choices(list(actions),weights=v)[0] + return a + +print_statistics(qpolicy) +``` + +לאחר הרצת הקוד הזה, אתם אמורים לקבל אורך מסלול ממוצע קטן בהרבה מאשר קודם, בטווח של 3-6. + +## חקירת תהליך הלמידה + +כפי שציינו, תהליך הלמידה הוא איזון בין חקר לבין ניצול הידע שנצבר על מבנה מרחב הבעיה. ראינו שהתוצאות של הלמידה (היכולת לעזור לסוכן למצוא מסלול קצר למטרה) השתפרו, אך גם מעניין לצפות כיצד אורך המסלול הממוצע מתנהג במהלך תהליך הלמידה: + +## סיכום הלמידות: + +- **אורך המסלול הממוצע עולה**. מה שאנו רואים כאן הוא שבתחילה, אורך המסלול הממוצע עולה. זה כנראה נובע מכך שכאשר איננו יודעים דבר על הסביבה, אנו נוטים להיתקע במצבים גרועים, כמו מים או זאב. ככל שאנו לומדים יותר ומתחילים להשתמש בידע הזה, אנו יכולים לחקור את הסביבה לזמן ארוך יותר, אך עדיין איננו יודעים היטב היכן נמצאים התפוחים. + +- **אורך המסלול יורד ככל שאנו לומדים יותר**. ברגע שאנו לומדים מספיק, קל יותר לסוכן להשיג את המטרה, ואורך המסלול מתחיל לרדת. עם זאת, אנו עדיין פתוחים לחקר, ולכן לעיתים קרובות אנו סוטים מהמסלול הטוב ביותר ובוחנים אפשרויות חדשות, מה שגורם למסלול להיות ארוך יותר מהאופטימלי. + +- **אורך המסלול עולה באופן פתאומי**. מה שאנו גם רואים בגרף הוא שבשלב מסוים, האורך עלה באופן פתאומי. זה מצביע על האופי הסטוכסטי של התהליך, ועל כך שבשלב מסוים אנו יכולים "לקלקל" את מקדמי ה-Q-Table על ידי החלפתם בערכים חדשים. באופן אידיאלי, יש למזער זאת על ידי הפחתת קצב הלמידה (לדוגמה, לקראת סוף האימון, אנו משנים את ערכי ה-Q-Table רק במידה קטנה). + +בסך הכל, חשוב לזכור שההצלחה והאיכות של תהליך הלמידה תלויים באופן משמעותי בפרמטרים, כמו קצב הלמידה, דעיכת קצב הלמידה, ופקטור ההנחה. אלו נקראים לעיתים קרובות **היפר-פרמטרים**, כדי להבדילם מ-**פרמטרים**, שאותם אנו ממטבים במהלך האימון (לדוגמה, מקדמי Q-Table). תהליך מציאת הערכים הטובים ביותר להיפר-פרמטרים נקרא **אופטימיזציה של היפר-פרמטרים**, והוא ראוי לנושא נפרד. + +## [שאלון לאחר ההרצאה](https://ff-quizzes.netlify.app/en/ml/) + +## משימה +[עולם מציאותי יותר](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/8-Reinforcement/1-QLearning/assignment.md b/translations/he/8-Reinforcement/1-QLearning/assignment.md new file mode 100644 index 00000000..72cdfb3a --- /dev/null +++ b/translations/he/8-Reinforcement/1-QLearning/assignment.md @@ -0,0 +1,41 @@ + +# עולם מציאותי יותר + +במצב שלנו, פיטר הצליח לנוע כמעט בלי להתעייף או להרגיש רעב. בעולם מציאותי יותר, הוא צריך לשבת ולנוח מדי פעם, וגם להאכיל את עצמו. בואו נעשה את העולם שלנו מציאותי יותר, על ידי יישום הכללים הבאים: + +1. כאשר פיטר נע ממקום למקום, הוא מאבד **אנרגיה** וצובר **עייפות**. +2. פיטר יכול להחזיר לעצמו אנרגיה על ידי אכילת תפוחים. +3. פיטר יכול להיפטר מעייפות על ידי מנוחה מתחת לעץ או על הדשא (כלומר, הליכה למיקום בלוח שבו יש עץ או דשא - שדה ירוק). +4. פיטר צריך למצוא ולהרוג את הזאב. +5. כדי להרוג את הזאב, פיטר צריך להגיע לרמות מסוימות של אנרגיה ועייפות, אחרת הוא מפסיד בקרב. + +## הוראות + +השתמשו במחברת המקורית [notebook.ipynb](../../../../8-Reinforcement/1-QLearning/notebook.ipynb) כנקודת התחלה לפתרון שלכם. + +שנו את פונקציית התגמול בהתאם לכללי המשחק, הריצו את אלגוריתם הלמידה החיזוקית כדי ללמוד את האסטרטגיה הטובה ביותר לנצח במשחק, והשוו את התוצאות של הליכה אקראית עם האלגוריתם שלכם מבחינת מספר המשחקים שניצחו והפסידו. + +> **Note**: בעולם החדש שלכם, המצב מורכב יותר, ובנוסף למיקום האדם כולל גם רמות עייפות ואנרגיה. אתם יכולים לבחור לייצג את המצב כטופל (Board,energy,fatigue), או להגדיר מחלקה עבור המצב (ייתכן שתרצו גם להוריש אותה מ-`Board`), או אפילו לשנות את מחלקת `Board` המקורית בתוך [rlboard.py](../../../../8-Reinforcement/1-QLearning/rlboard.py). + +בפתרון שלכם, אנא שמרו על הקוד האחראי לאסטרטגיית ההליכה האקראית, והשוו את תוצאות האלגוריתם שלכם עם ההליכה האקראית בסוף. + +> **Note**: ייתכן שתצטרכו להתאים את ההיפר-פרמטרים כדי לגרום לזה לעבוד, במיוחד את מספר האפוקים. מכיוון שהצלחה במשחק (הקרב עם הזאב) היא אירוע נדיר, אתם יכולים לצפות לזמן אימון ארוך יותר. + +## קריטריונים להערכה + +| קריטריון | מצטיין | מספק | דורש שיפור | +| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| | מוצגת מחברת עם הגדרת כללי עולם חדשים, אלגוריתם Q-Learning והסברים טקסטואליים. האלגוריתם מצליח לשפר משמעותית את התוצאות בהשוואה להליכה אקראית. | מוצגת מחברת, אלגוריתם Q-Learning מיושם ומשפר את התוצאות בהשוואה להליכה אקראית, אך לא באופן משמעותי; או שהמחברת מתועדת בצורה לקויה והקוד אינו מובנה היטב. | נעשה ניסיון להגדיר מחדש את כללי העולם, אך אלגוריתם Q-Learning אינו עובד, או שפונקציית התגמול אינה מוגדרת במלואה. | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/8-Reinforcement/1-QLearning/solution/Julia/README.md b/translations/he/8-Reinforcement/1-QLearning/solution/Julia/README.md new file mode 100644 index 00000000..6dbd9f03 --- /dev/null +++ b/translations/he/8-Reinforcement/1-QLearning/solution/Julia/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס AI [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/8-Reinforcement/1-QLearning/solution/R/README.md b/translations/he/8-Reinforcement/1-QLearning/solution/R/README.md new file mode 100644 index 00000000..8a7da665 --- /dev/null +++ b/translations/he/8-Reinforcement/1-QLearning/solution/R/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו אחראים לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/8-Reinforcement/2-Gym/README.md b/translations/he/8-Reinforcement/2-Gym/README.md new file mode 100644 index 00000000..905c0b00 --- /dev/null +++ b/translations/he/8-Reinforcement/2-Gym/README.md @@ -0,0 +1,333 @@ + +## דרישות מקדימות + +בשיעור הזה נשתמש בספרייה בשם **OpenAI Gym** כדי לדמות **סביבות** שונות. ניתן להריץ את הקוד של השיעור הזה באופן מקומי (למשל, מ-Visual Studio Code), ובמקרה כזה הסימולציה תיפתח בחלון חדש. כאשר מריצים את הקוד אונליין, ייתכן שתצטרכו לבצע כמה התאמות בקוד, כפי שמתואר [כאן](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7). + +## OpenAI Gym + +בשיעור הקודם, חוקי המשחק והמצב הוגדרו על ידי מחלקת `Board` שהגדרנו בעצמנו. כאן נשתמש ב**סביבת סימולציה** מיוחדת, שתדמה את הפיזיקה שמאחורי מוט האיזון. אחת מסביבות הסימולציה הפופולריות ביותר לאימון אלגוריתמים של למידת חיזוק נקראת [Gym](https://gym.openai.com/), שמנוהלת על ידי [OpenAI](https://openai.com/). באמצעות ה-Gym נוכל ליצור סביבות שונות, החל מסימולציית CartPole ועד משחקי Atari. + +> **הערה**: ניתן לראות סביבות נוספות הזמינות ב-OpenAI Gym [כאן](https://gym.openai.com/envs/#classic_control). + +ראשית, נתקין את ה-Gym ונייבא את הספריות הנדרשות (קוד בלוק 1): + +```python +import sys +!{sys.executable} -m pip install gym + +import gym +import matplotlib.pyplot as plt +import numpy as np +import random +``` + +## תרגיל - אתחול סביבת CartPole + +כדי לעבוד עם בעיית איזון מוט ה-CartPole, עלינו לאתחל את הסביבה המתאימה. כל סביבה מקושרת ל: + +- **מרחב תצפיות** שמגדיר את מבנה המידע שאנו מקבלים מהסביבה. עבור בעיית ה-CartPole, אנו מקבלים את מיקום המוט, מהירות ועוד ערכים נוספים. + +- **מרחב פעולות** שמגדיר פעולות אפשריות. במקרה שלנו מרחב הפעולות הוא דיסקרטי, ומורכב משתי פעולות - **שמאלה** ו-**ימינה**. (קוד בלוק 2) + +1. כדי לאתחל, הקלידו את הקוד הבא: + + ```python + env = gym.make("CartPole-v1") + print(env.action_space) + print(env.observation_space) + print(env.action_space.sample()) + ``` + +כדי לראות איך הסביבה עובדת, נריץ סימולציה קצרה של 100 צעדים. בכל צעד, נספק אחת מהפעולות לביצוע - בסימולציה הזו פשוט נבחר פעולה באופן אקראי מתוך `action_space`. + +1. הריצו את הקוד הבא וראו מה מתקבל. + + ✅ זכרו שמומלץ להריץ את הקוד הזה בהתקנה מקומית של Python! (קוד בלוק 3) + + ```python + env.reset() + + for i in range(100): + env.render() + env.step(env.action_space.sample()) + env.close() + ``` + + אתם אמורים לראות משהו דומה לתמונה הזו: + + ![CartPole ללא איזון](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif) + +1. במהלך הסימולציה, עלינו לקבל תצפיות כדי להחליט כיצד לפעול. למעשה, פונקציית הצעד מחזירה תצפיות נוכחיות, פונקציית תגמול ודגל שמציין האם יש טעם להמשיך את הסימולציה או לא: (קוד בלוק 4) + + ```python + env.reset() + + done = False + while not done: + env.render() + obs, rew, done, info = env.step(env.action_space.sample()) + print(f"{obs} -> {rew}") + env.close() + ``` + + בסופו של דבר תראו משהו כזה בתוצאות המחברת: + + ```text + [ 0.03403272 -0.24301182 0.02669811 0.2895829 ] -> 1.0 + [ 0.02917248 -0.04828055 0.03248977 0.00543839] -> 1.0 + [ 0.02820687 0.14636075 0.03259854 -0.27681916] -> 1.0 + [ 0.03113408 0.34100283 0.02706215 -0.55904489] -> 1.0 + [ 0.03795414 0.53573468 0.01588125 -0.84308041] -> 1.0 + ... + [ 0.17299878 0.15868546 -0.20754175 -0.55975453] -> 1.0 + [ 0.17617249 0.35602306 -0.21873684 -0.90998894] -> 1.0 + ``` + + וקטור התצפיות שמוחזר בכל צעד של הסימולציה מכיל את הערכים הבאים: + - מיקום העגלה + - מהירות העגלה + - זווית המוט + - קצב הסיבוב של המוט + +1. קבלו את הערכים המינימליים והמקסימליים של המספרים הללו: (קוד בלוק 5) + + ```python + print(env.observation_space.low) + print(env.observation_space.high) + ``` + + ייתכן שתשימו לב שערך התגמול בכל צעד של הסימולציה הוא תמיד 1. זאת מכיוון שהמטרה שלנו היא לשרוד כמה שיותר זמן, כלומר לשמור על המוט במצב אנכי סביר למשך הזמן הארוך ביותר. + + ✅ למעשה, סימולציית CartPole נחשבת לפתרון אם נצליח להגיע לתגמול ממוצע של 195 לאורך 100 ניסיונות רצופים. + +## דיסקרטיזציה של מצב + +בלמידת Q, עלינו לבנות טבלת Q שמגדירה מה לעשות בכל מצב. כדי לעשות זאת, עלינו שהמצב יהיה **דיסקרטי**, כלומר יכיל מספר סופי של ערכים דיסקרטיים. לכן, עלינו למצוא דרך **לדסקרט** את התצפיות שלנו, ולמפות אותן לקבוצה סופית של מצבים. + +יש כמה דרכים לעשות זאת: + +- **חלוקה לבינים**. אם אנו יודעים את הטווח של ערך מסוים, נוכל לחלק את הטווח למספר **בינים**, ואז להחליף את הערך במספר הבין שאליו הוא שייך. ניתן לעשות זאת באמצעות המתודה [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) של numpy. במקרה זה, נדע בדיוק את גודל המצב, מכיוון שהוא תלוי במספר הבינים שנבחר לדיגיטציה. + +✅ ניתן להשתמש באינטרפולציה ליניארית כדי להביא ערכים לטווח סופי (למשל, מ-20- עד 20), ואז להמיר מספרים לשלמים על ידי עיגול. זה נותן לנו פחות שליטה על גודל המצב, במיוחד אם איננו יודעים את הטווחים המדויקים של ערכי הקלט. לדוגמה, במקרה שלנו 2 מתוך 4 הערכים אינם מוגבלים בטווח העליון/תחתון שלהם, מה שעשוי להוביל למספר אינסופי של מצבים. + +בדוגמה שלנו, נבחר בגישה השנייה. כפי שתשימו לב מאוחר יותר, למרות שהטווחים העליונים/תחתונים אינם מוגדרים, הערכים הללו לעיתים רחוקות לוקחים ערכים מחוץ לטווחים סופיים מסוימים, ולכן מצבים עם ערכים קיצוניים יהיו נדירים מאוד. + +1. הנה הפונקציה שתיקח את התצפית מהמודל שלנו ותפיק טופס של 4 ערכים שלמים: (קוד בלוק 6) + + ```python + def discretize(x): + return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int)) + ``` + +1. בואו נחקור גם שיטת דיסקרטיזציה נוספת באמצעות בינים: (קוד בלוק 7) + + ```python + def create_bins(i,num): + return np.arange(num+1)*(i[1]-i[0])/num+i[0] + + print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10)) + + ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter + nbins = [20,20,10,10] # number of bins for each parameter + bins = [create_bins(ints[i],nbins[i]) for i in range(4)] + + def discretize_bins(x): + return tuple(np.digitize(x[i],bins[i]) for i in range(4)) + ``` + +1. עכשיו נריץ סימולציה קצרה ונצפה בערכי הסביבה הדיסקרטיים. אתם מוזמנים לנסות גם את `discretize` וגם את `discretize_bins` ולראות אם יש הבדל. + + ✅ `discretize_bins` מחזירה את מספר הבין, שהוא מבוסס על 0. לכן עבור ערכי משתנה קלט סביב 0 היא מחזירה את המספר מאמצע הטווח (10). ב-`discretize`, לא דאגנו לטווח ערכי הפלט, מה שמאפשר להם להיות שליליים, ולכן ערכי המצב אינם מוזזים, ו-0 מתאים ל-0. (קוד בלוק 8) + + ```python + env.reset() + + done = False + while not done: + #env.render() + obs, rew, done, info = env.step(env.action_space.sample()) + #print(discretize_bins(obs)) + print(discretize(obs)) + env.close() + ``` + + ✅ בטלו את ההערה בשורה שמתחילה ב-env.render אם אתם רוצים לראות איך הסביבה מתבצעת. אחרת, תוכלו להריץ אותה ברקע, מה שמהיר יותר. נשתמש בהרצה "בלתי נראית" זו במהלך תהליך למידת Q. + +## מבנה טבלת Q + +בשיעור הקודם, המצב היה זוג פשוט של מספרים מ-0 עד 8, ולכן היה נוח לייצג את טבלת Q באמצעות טנזור numpy עם צורה של 8x8x2. אם נשתמש בדיסקרטיזציה באמצעות בינים, גודל וקטור המצב שלנו גם ידוע, ולכן נוכל להשתמש באותה גישה ולייצג מצב באמצעות מערך בצורת 20x20x10x10x2 (כאן 2 הוא הממד של מרחב הפעולות, והמידות הראשונות מתאימות למספר הבינים שבחרנו להשתמש עבור כל אחד מהפרמטרים במרחב התצפיות). + +עם זאת, לפעמים המידות המדויקות של מרחב התצפיות אינן ידועות. במקרה של פונקציית `discretize`, לעולם לא נוכל להיות בטוחים שהמצב שלנו נשאר בתוך גבולות מסוימים, מכיוון שחלק מהערכים המקוריים אינם מוגבלים. לכן, נשתמש בגישה מעט שונה ונייצג את טבלת Q באמצעות מילון. + +1. השתמשו בזוג *(state,action)* כמפתח המילון, והערך יתאים לערך הכניסה בטבלת Q. (קוד בלוק 9) + + ```python + Q = {} + actions = (0,1) + + def qvalues(state): + return [Q.get((state,a),0) for a in actions] + ``` + + כאן אנו גם מגדירים פונקציה `qvalues()`, שמחזירה רשימה של ערכי טבלת Q עבור מצב נתון שמתאים לכל הפעולות האפשריות. אם הכניסה אינה קיימת בטבלת Q, נחזיר 0 כברירת מחדל. + +## בואו נתחיל בלמידת Q + +עכשיו אנחנו מוכנים ללמד את פיטר לשמור על איזון! + +1. ראשית, נגדיר כמה היפרפרמטרים: (קוד בלוק 10) + + ```python + # hyperparameters + alpha = 0.3 + gamma = 0.9 + epsilon = 0.90 + ``` + + כאן, `alpha` הוא **קצב הלמידה** שמגדיר באיזו מידה עלינו להתאים את הערכים הנוכחיים של טבלת Q בכל צעד. בשיעור הקודם התחלנו עם 1, ואז הפחתנו את `alpha` לערכים נמוכים יותר במהלך האימון. בדוגמה הזו נשמור אותו קבוע רק לשם הפשטות, ואתם יכולים להתנסות בהתאמת ערכי `alpha` מאוחר יותר. + + `gamma` הוא **גורם ההנחה** שמראה באיזו מידה עלינו להעדיף תגמול עתידי על פני תגמול נוכחי. + + `epsilon` הוא **גורם החקר/ניצול** שקובע האם עלינו להעדיף חקר על פני ניצול או להפך. באלגוריתם שלנו, נבחר באחוז `epsilon` מהמקרים את הפעולה הבאה לפי ערכי טבלת Q, ובשאר המקרים נבצע פעולה אקראית. זה יאפשר לנו לחקור אזורים במרחב החיפוש שמעולם לא ראינו קודם. + + ✅ מבחינת איזון - בחירת פעולה אקראית (חקר) תפעל כמו מכה אקראית בכיוון הלא נכון, והמוט יצטרך ללמוד כיצד להתאושש מה"טעויות" הללו. + +### שיפור האלגוריתם + +ניתן גם לבצע שני שיפורים באלגוריתם שלנו מהשיעור הקודם: + +- **חישוב תגמול מצטבר ממוצע**, לאורך מספר סימולציות. נדפיס את ההתקדמות כל 5000 איטרציות, ונחשב את התגמול המצטבר הממוצע לאורך פרק הזמן הזה. המשמעות היא שאם נקבל יותר מ-195 נקודות - נוכל להחשיב את הבעיה כפתורה, באיכות גבוהה אף יותר מהנדרש. + +- **חישוב התוצאה המצטברת הממוצעת המקסימלית**, `Qmax`, ונשמור את טבלת Q המתאימה לתוצאה זו. כאשר תריצו את האימון תבחינו שלפעמים התוצאה המצטברת הממוצעת מתחילה לרדת, ואנו רוצים לשמור את ערכי טבלת Q המתאימים למודל הטוב ביותר שנצפה במהלך האימון. + +1. אספו את כל התגמולים המצטברים בכל סימולציה בוקטור `rewards` לצורך גרפיקה מאוחרת יותר. (קוד בלוק 11) + + ```python + def probs(v,eps=1e-4): + v = v-v.min()+eps + v = v/v.sum() + return v + + Qmax = 0 + cum_rewards = [] + rewards = [] + for epoch in range(100000): + obs = env.reset() + done = False + cum_reward=0 + # == do the simulation == + while not done: + s = discretize(obs) + if random.random() Qmax: + Qmax = np.average(cum_rewards) + Qbest = Q + cum_rewards=[] + ``` + +מה שתשימו לב מהתוצאות הללו: + +- **קרוב למטרה שלנו**. אנו קרובים מאוד להשגת המטרה של קבלת 195 תגמולים מצטברים לאורך 100+ ריצות רצופות של הסימולציה, או שאולי כבר השגנו אותה! גם אם נקבל מספרים קטנים יותר, עדיין איננו יודעים, מכיוון שאנו מחשבים ממוצע לאורך 5000 ריצות, ורק 100 ריצות נדרשות בקריטריון הרשמי. + +- **התגמול מתחיל לרדת**. לפעמים התגמול מתחיל לרדת, מה שאומר שאנו יכולים "להרוס" ערכים שכבר נלמדו בטבלת Q עם כאלה שמחמירים את המצב. + +תצפית זו ברורה יותר אם נגרף את התקדמות האימון. + +## גרפיקה של התקדמות האימון + +במהלך האימון, אספנו את ערך התגמול המצטבר בכל אחת מהאיטרציות לוקטור `rewards`. הנה איך זה נראה כשאנו מגרפים אותו מול מספר האיטרציות: + +```python +plt.plot(rewards) +``` + +![התקדמות גולמית](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.png) + +מהגרף הזה, לא ניתן להסיק דבר, מכיוון שבשל טבעו של תהליך האימון הסטוכסטי, אורך הסשנים משתנה מאוד. כדי להבין יותר את הגרף הזה, נוכל לחשב את **הממוצע הרץ** לאורך סדרת ניסויים, נאמר 100. ניתן לעשות זאת בנוחות באמצעות `np.convolve`: (קוד בלוק 12) + +```python +def running_average(x,window): + return np.convolve(x,np.ones(window)/window,mode='valid') + +plt.plot(running_average(rewards,100)) +``` + +![התקדמות האימון](../../../../8-Reinforcement/2-Gym/images/train_progress_runav.png) + +## שינוי היפרפרמטרים + +כדי להפוך את הלמידה ליציבה יותר, הגיוני להתאים כמה מההיפרפרמטרים שלנו במהלך האימון. במיוחד: + +- **עבור קצב הלמידה**, `alpha`, נוכל להתחיל עם ערכים קרובים ל-1, ואז להמשיך להקטין את הפרמטר. עם הזמן, נקבל ערכי הסתברות טובים בטבלת Q, ולכן עלינו להתאים אותם בעדינות, ולא להחליף לחלוטין בערכים חדשים. + +- **הגדלת epsilon**. ייתכן שנרצה להגדיל את `epsilon` בהדרגה, כדי לחקור פחות ולנצל יותר. כנראה הגיוני להתחיל עם ערך נמוך של `epsilon`, ולהתקדם כמעט עד 1. +> **משימה 1**: נסו לשחק עם ערכי ההיפרפרמטרים ולבדוק אם אתם מצליחים להשיג תגמול מצטבר גבוה יותר. האם אתם מגיעים מעל 195? +> **משימה 2**: כדי לפתור את הבעיה באופן פורמלי, עליכם להגיע ל-195 תגמול ממוצע לאורך 100 ריצות רצופות. מדדו זאת במהלך האימון וודאו שהבעיה נפתרה באופן פורמלי! + +## לראות את התוצאה בפעולה + +יהיה מעניין לראות כיצד המודל המאומן מתנהג בפועל. בואו נריץ את הסימולציה ונשתמש באותה אסטרטגיית בחירת פעולות כמו במהלך האימון, על ידי דגימה בהתאם להתפלגות ההסתברות ב-Q-Table: (בלוק קוד 13) + +```python +obs = env.reset() +done = False +while not done: + s = discretize(obs) + env.render() + v = probs(np.array(qvalues(s))) + a = random.choices(actions,weights=v)[0] + obs,_,done,_ = env.step(a) +env.close() +``` + +אתם אמורים לראות משהו כזה: + +![a balancing cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif) + +--- + +## 🚀אתגר + +> **משימה 3**: כאן השתמשנו בעותק הסופי של Q-Table, שייתכן שאינו הטוב ביותר. זכרו ששמרנו את ה-Q-Table עם הביצועים הטובים ביותר במשתנה `Qbest`! נסו את אותו הדוגמה עם ה-Q-Table הטוב ביותר על ידי העתקת `Qbest` ל-`Q` ובדקו אם אתם מבחינים בהבדל. + +> **משימה 4**: כאן לא בחרנו את הפעולה הטובה ביותר בכל שלב, אלא דגמנו לפי התפלגות ההסתברות המתאימה. האם יהיה הגיוני יותר תמיד לבחור את הפעולה הטובה ביותר, עם הערך הגבוה ביותר ב-Q-Table? ניתן לעשות זאת באמצעות פונקציית `np.argmax` כדי למצוא את מספר הפעולה המתאים לערך הגבוה ביותר ב-Q-Table. יישמו את האסטרטגיה הזו ובדקו אם היא משפרת את האיזון. + +## [שאלון לאחר ההרצאה](https://ff-quizzes.netlify.app/en/ml/) + +## משימה +[אמן מכונית הרים](assignment.md) + +## סיכום + +למדנו כעת כיצד לאמן סוכנים להשיג תוצאות טובות רק על ידי מתן פונקציית תגמול שמגדירה את מצב המשחק הרצוי, ועל ידי מתן הזדמנות לחקור את מרחב החיפוש בצורה חכמה. יישמנו בהצלחה את אלגוריתם Q-Learning במקרים של סביבות דיסקרטיות ורציפות, אך עם פעולות דיסקרטיות. + +חשוב גם ללמוד מצבים שבהם מצב הפעולה הוא רציף, וכאשר מרחב התצפית מורכב הרבה יותר, כמו התמונה ממסך משחק Atari. בבעיות אלו לעיתים קרובות נדרש להשתמש בטכניקות למידת מכונה חזקות יותר, כמו רשתות נוירונים, כדי להשיג תוצאות טובות. נושאים מתקדמים אלו הם הנושא של קורס הבינה המלאכותית המתקדם שלנו שיבוא בהמשך. + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/8-Reinforcement/2-Gym/assignment.md b/translations/he/8-Reinforcement/2-Gym/assignment.md new file mode 100644 index 00000000..5107bd89 --- /dev/null +++ b/translations/he/8-Reinforcement/2-Gym/assignment.md @@ -0,0 +1,57 @@ + +# אימון מכונית הרים + +[OpenAI Gym](http://gym.openai.com) תוכנן כך שכל הסביבות מספקות את אותו API - כלומר, אותן שיטות `reset`, `step` ו-`render`, ואותן הפשטות של **מרחב הפעולה** ו**מרחב התצפית**. לכן, אמור להיות אפשרי להתאים את אותם אלגוריתמים של למידת חיזוק לסביבות שונות עם שינויים מינימליים בקוד. + +## סביבת מכונית הרים + +[סביבת מכונית הרים](https://gym.openai.com/envs/MountainCar-v0/) כוללת מכונית שנתקעה בעמק: + +המטרה היא לצאת מהעמק ולתפוס את הדגל, על ידי ביצוע אחת מהפעולות הבאות בכל שלב: + +| ערך | משמעות | +|---|---| +| 0 | להאיץ שמאלה | +| 1 | לא להאיץ | +| 2 | להאיץ ימינה | + +הטריק המרכזי בבעיה זו הוא שהמנוע של המכונית אינו חזק מספיק כדי לטפס על ההר במעבר אחד. לכן, הדרך היחידה להצליח היא לנסוע קדימה ואחורה כדי לצבור מומנטום. + +מרחב התצפית מורכב משני ערכים בלבד: + +| מספר | תצפית | מינימום | מקסימום | +|-----|--------------|---------|---------| +| 0 | מיקום המכונית | -1.2 | 0.6 | +| 1 | מהירות המכונית | -0.07 | 0.07 | + +מערכת התגמולים עבור מכונית ההרים די מורכבת: + + * תגמול של 0 מוענק אם הסוכן הגיע לדגל (מיקום = 0.5) בראש ההר. + * תגמול של -1 מוענק אם המיקום של הסוכן קטן מ-0.5. + +הפרק מסתיים אם מיקום המכונית גדול מ-0.5, או אם אורך הפרק עולה על 200. + +## הוראות + +התאם את אלגוריתם למידת החיזוק שלנו כדי לפתור את בעיית מכונית ההרים. התחל עם הקוד הקיים ב-[notebook.ipynb](../../../../8-Reinforcement/2-Gym/notebook.ipynb), החלף את הסביבה, שנה את פונקציות הדיסקרטיזציה של המצב, ונסה לגרום לאלגוריתם הקיים להתאמן עם שינויים מינימליים בקוד. בצע אופטימיזציה לתוצאה על ידי התאמת היפר-פרמטרים. + +> **Note**: ייתכן שיהיה צורך בהתאמת היפר-פרמטרים כדי לגרום לאלגוריתם להתכנס. + +## קריטריונים להערכה + +| קריטריון | מצטיין | מספק | דורש שיפור | +| -------- | ------- | ----- | ----------- | +| | אלגוריתם Q-Learning הותאם בהצלחה מדוגמת CartPole עם שינויים מינימליים בקוד, ומסוגל לפתור את הבעיה של תפיסת הדגל בפחות מ-200 צעדים. | אלגוריתם Q-Learning חדש אומץ מהאינטרנט, אך מתועד היטב; או אלגוריתם קיים אומץ אך אינו מגיע לתוצאות הרצויות. | הסטודנט לא הצליח לאמץ אלגוריתם כלשהו בהצלחה, אך עשה צעדים משמעותיים לקראת פתרון (מימש דיסקרטיזציה של מצב, מבנה נתונים של Q-Table וכו'). | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/8-Reinforcement/2-Gym/solution/Julia/README.md b/translations/he/8-Reinforcement/2-Gym/solution/Julia/README.md new file mode 100644 index 00000000..b5c9cd50 --- /dev/null +++ b/translations/he/8-Reinforcement/2-Gym/solution/Julia/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור הסמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/8-Reinforcement/2-Gym/solution/R/README.md b/translations/he/8-Reinforcement/2-Gym/solution/R/README.md new file mode 100644 index 00000000..ca486866 --- /dev/null +++ b/translations/he/8-Reinforcement/2-Gym/solution/R/README.md @@ -0,0 +1,15 @@ + +זהו מציין מקום זמני + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). בעוד שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/8-Reinforcement/README.md b/translations/he/8-Reinforcement/README.md new file mode 100644 index 00000000..ee3d8d33 --- /dev/null +++ b/translations/he/8-Reinforcement/README.md @@ -0,0 +1,67 @@ + +# מבוא ללמידת חיזוק + +למידת חיזוק, RL, נחשבת לאחת מהפרדיגמות הבסיסיות של למידת מכונה, לצד למידה מונחית ולמידה בלתי מונחית. RL עוסקת בקבלת החלטות: קבלת ההחלטות הנכונות או לפחות ללמוד מהן. + +דמיינו שיש לכם סביבה מדומה כמו שוק המניות. מה קורה אם אתם מטילים רגולציה מסוימת? האם יש לכך השפעה חיובית או שלילית? אם קורה משהו שלילי, עליכם לקחת את ה_חיזוק השלילי_, ללמוד ממנו ולשנות כיוון. אם התוצאה חיובית, עליכם לבנות על אותו _חיזוק חיובי_. + +![פטר והזאב](../../../8-Reinforcement/images/peter.png) + +> פטר וחבריו צריכים לברוח מהזאב הרעב! תמונה מאת [Jen Looper](https://twitter.com/jenlooper) + +## נושא אזורי: פטר והזאב (רוסיה) + +[פטר והזאב](https://en.wikipedia.org/wiki/Peter_and_the_Wolf) הוא אגדה מוזיקלית שנכתבה על ידי המלחין הרוסי [סרגיי פרוקופייב](https://en.wikipedia.org/wiki/Sergei_Prokofiev). זהו סיפור על החלוץ הצעיר פטר, שיוצא באומץ מביתו אל קרחת היער כדי לרדוף אחרי הזאב. בחלק זה, נלמד אלגוריתמים של למידת מכונה שיעזרו לפטר: + +- **לחקור** את האזור הסובב ולבנות מפה ניווט אופטימלית. +- **ללמוד** כיצד להשתמש בסקייטבורד ולשמור על איזון עליו, כדי לנוע מהר יותר. + +[![פטר והזאב](https://img.youtube.com/vi/Fmi5zHg4QSM/0.jpg)](https://www.youtube.com/watch?v=Fmi5zHg4QSM) + +> 🎥 לחצו על התמונה למעלה כדי להאזין ל"פטר והזאב" מאת פרוקופייב + +## למידת חיזוק + +בחלקים הקודמים ראיתם שני סוגים של בעיות למידת מכונה: + +- **מונחית**, שבה יש לנו מערכי נתונים שמציעים פתרונות לדוגמה לבעיה שאנו רוצים לפתור. [סיווג](../4-Classification/README.md) ו[רגרסיה](../2-Regression/README.md) הם משימות של למידה מונחית. +- **בלתי מונחית**, שבה אין לנו נתוני אימון מתויגים. הדוגמה העיקרית ללמידה בלתי מונחית היא [אשכולות](../5-Clustering/README.md). + +בחלק זה, נציג בפניכם סוג חדש של בעיית למידה שאינה דורשת נתוני אימון מתויגים. ישנם כמה סוגים של בעיות כאלה: + +- **[למידה חצי-מונחית](https://wikipedia.org/wiki/Semi-supervised_learning)**, שבה יש לנו הרבה נתונים לא מתויגים שניתן להשתמש בהם כדי לאמן את המודל מראש. +- **[למידת חיזוק](https://wikipedia.org/wiki/Reinforcement_learning)**, שבה סוכן לומד כיצד להתנהג על ידי ביצוע ניסויים בסביבה מדומה. + +### דוגמה - משחק מחשב + +נניח שאתם רוצים ללמד מחשב לשחק במשחק, כמו שחמט או [סופר מריו](https://wikipedia.org/wiki/Super_Mario). כדי שהמחשב ישחק במשחק, אנו צריכים שהוא ינבא איזו פעולה לבצע בכל אחד ממצבי המשחק. למרות שזה עשוי להיראות כמו בעיית סיווג, זה לא - מכיוון שאין לנו מערך נתונים עם מצבים ופעולות תואמות. למרות שאולי יש לנו נתונים כמו משחקי שחמט קיימים או הקלטות של שחקנים משחקים סופר מריו, סביר להניח שהנתונים הללו לא יכסו מספיק מצבים אפשריים. + +במקום לחפש נתוני משחק קיימים, **למידת חיזוק** (RL) מבוססת על הרעיון של *לגרום למחשב לשחק* פעמים רבות ולצפות בתוצאה. לכן, כדי ליישם למידת חיזוק, אנו צריכים שני דברים: + +- **סביבה** ו**סימולטור** שמאפשרים לנו לשחק במשחק פעמים רבות. הסימולטור יגדיר את כללי המשחק, כמו גם את המצבים והפעולות האפשריים. + +- **פונקציית תגמול**, שתספר לנו עד כמה הצלחנו במהלך כל מהלך או משחק. + +ההבדל העיקרי בין סוגי למידת מכונה אחרים לבין RL הוא שב-RL בדרך כלל איננו יודעים אם ניצחנו או הפסדנו עד לסיום המשחק. לכן, איננו יכולים לומר אם מהלך מסוים לבדו הוא טוב או לא - אנו מקבלים תגמול רק בסוף המשחק. והמטרה שלנו היא לעצב אלגוריתמים שיאפשרו לנו לאמן מודל בתנאים של אי ודאות. נלמד על אלגוריתם RL אחד שנקרא **Q-learning**. + +## שיעורים + +1. [מבוא ללמידת חיזוק ו-Q-Learning](1-QLearning/README.md) +2. [שימוש בסביבת סימולציה של Gym](2-Gym/README.md) + +## קרדיטים + +"מבוא ללמידת חיזוק" נכתב באהבה על ידי [Dmitry Soshnikov](http://soshnikov.com) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/9-Real-World/1-Applications/README.md b/translations/he/9-Real-World/1-Applications/README.md new file mode 100644 index 00000000..ce46a6dc --- /dev/null +++ b/translations/he/9-Real-World/1-Applications/README.md @@ -0,0 +1,159 @@ + +# פוסטסקריפט: למידת מכונה בעולם האמיתי + +![סיכום של למידת מכונה בעולם האמיתי בסקצ'נוט](../../../../sketchnotes/ml-realworld.png) +> סקצ'נוט מאת [Tomomi Imura](https://www.twitter.com/girlie_mac) + +במהלך הקורס הזה, למדתם דרכים רבות להכנת נתונים לאימון וליצירת מודלים של למידת מכונה. בניתם סדרה של מודלים קלאסיים כמו רגרסיה, אשכולות, סיווג, עיבוד שפה טבעית ומודלים של סדרות זמן. כל הכבוד! עכשיו, אתם אולי תוהים למה כל זה נועד... מהן היישומים בעולם האמיתי של המודלים הללו? + +למרות שהרבה עניין בתעשייה מתמקד בבינה מלאכותית, שלרוב עושה שימוש בלמידה עמוקה, עדיין יש יישומים חשובים למודלים קלאסיים של למידת מכונה. ייתכן שאפילו אתם משתמשים בחלק מהיישומים הללו היום! בשיעור הזה, תחקור כיצד שמונה תעשיות ותחומים שונים משתמשים במודלים אלו כדי להפוך את היישומים שלהם ליותר יעילים, אמינים, חכמים ובעלי ערך למשתמשים. + +## [שאלון לפני השיעור](https://ff-quizzes.netlify.app/en/ml/) + +## 💰 פיננסים + +תחום הפיננסים מציע הזדמנויות רבות ללמידת מכונה. בעיות רבות בתחום זה מתאימות למידול ופתרון באמצעות למידת מכונה. + +### זיהוי הונאות בכרטיסי אשראי + +למדנו על [אשכולות k-means](../../5-Clustering/2-K-Means/README.md) מוקדם יותר בקורס, אבל איך ניתן להשתמש בהם כדי לפתור בעיות הקשורות להונאות בכרטיסי אשראי? + +אשכולות k-means מועילים בטכניקה לזיהוי הונאות בכרטיסי אשראי הנקראת **זיהוי חריגות**. חריגות, או סטיות בתצפיות על סט נתונים, יכולות להצביע אם כרטיס אשראי נמצא בשימוש רגיל או אם מתרחש משהו חריג. כפי שמוצג במאמר המקושר למטה, ניתן למיין נתוני כרטיסי אשראי באמצעות אלגוריתם אשכולות k-means ולהקצות כל עסקה לאשכול על סמך מידת החריגות שלה. לאחר מכן, ניתן להעריך את האשכולות המסוכנים ביותר כדי להבחין בין עסקאות הונאה לעסקאות לגיטימיות. +[Reference](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.680.1195&rep=rep1&type=pdf) + +### ניהול עושר + +בניהול עושר, אדם או חברה מנהלים השקעות עבור לקוחותיהם. תפקידם הוא לשמר ולהגדיל את העושר לטווח הארוך, ולכן חשוב לבחור השקעות שמניבות ביצועים טובים. + +אחת הדרכים להעריך את ביצועי ההשקעה היא באמצעות רגרסיה סטטיסטית. [רגרסיה ליניארית](../../2-Regression/1-Tools/README.md) היא כלי חשוב להבנת ביצועי קרן ביחס למדד מסוים. ניתן גם להסיק האם תוצאות הרגרסיה הן משמעותיות סטטיסטית, או כמה הן ישפיעו על השקעות הלקוח. ניתן להרחיב את הניתוח באמצעות רגרסיה מרובה, שבה ניתן לקחת בחשבון גורמי סיכון נוספים. לדוגמה כיצד זה יעבוד עבור קרן ספציפית, עיינו במאמר למטה על הערכת ביצועי קרן באמצעות רגרסיה. +[Reference](http://www.brightwoodventures.com/evaluating-fund-performance-using-regression/) + +## 🎓 חינוך + +תחום החינוך הוא גם תחום מעניין שבו ניתן ליישם למידת מכונה. ישנן בעיות מעניינות להתמודד איתן כמו זיהוי רמאות במבחנים או חיבורים, או ניהול הטיות, מכוונות או לא, בתהליך התיקון. + +### חיזוי התנהגות תלמידים + +[Coursera](https://coursera.com), ספק קורסים פתוחים מקוון, מחזיק בלוג טכנולוגי נהדר שבו הם דנים בהחלטות הנדסיות רבות. במקרה זה, הם שרטטו קו רגרסיה כדי לנסות לחקור כל קשר בין דירוג NPS (Net Promoter Score) נמוך לבין שמירה על קורס או נשירה ממנו. +[Reference](https://medium.com/coursera-engineering/controlled-regression-quantifying-the-impact-of-course-quality-on-learner-retention-31f956bd592a) + +### הפחתת הטיות + +[Grammarly](https://grammarly.com), עוזר כתיבה שבודק שגיאות כתיב ודקדוק, משתמש במערכות מתקדמות של [עיבוד שפה טבעית](../../6-NLP/README.md) במוצריו. הם פרסמו מחקר מעניין בבלוג הטכנולוגי שלהם על איך הם התמודדו עם הטיה מגדרית בלמידת מכונה, כפי שלמדתם בשיעור ההוגנות המבואי שלנו. +[Reference](https://www.grammarly.com/blog/engineering/mitigating-gender-bias-in-autocorrect/) + +## 👜 קמעונאות + +תחום הקמעונאות יכול בהחלט להרוויח משימוש בלמידת מכונה, החל מיצירת מסע לקוח טוב יותר ועד לניהול מלאי בצורה אופטימלית. + +### התאמת מסע הלקוח + +ב-Wayfair, חברה שמוכרת מוצרים לבית כמו רהיטים, עזרה ללקוחות למצוא את המוצרים הנכונים לטעמם ולצרכיהם היא קריטית. במאמר זה, מהנדסים מהחברה מתארים כיצד הם משתמשים בלמידת מכונה ובעיבוד שפה טבעית כדי "להציג את התוצאות הנכונות ללקוחות". במיוחד, מנוע כוונת השאילתה שלהם נבנה כדי להשתמש בחילוץ ישויות, אימון מסווגים, חילוץ נכסים ודעות, ותיוג רגשות על ביקורות לקוחות. זהו מקרה שימוש קלאסי של איך NLP עובד בקמעונאות מקוונת. +[Reference](https://www.aboutwayfair.com/tech-innovation/how-we-use-machine-learning-and-natural-language-processing-to-empower-search) + +### ניהול מלאי + +חברות חדשניות וזריזות כמו [StitchFix](https://stitchfix.com), שירות קופסאות ששולח בגדים לצרכנים, מסתמכות רבות על למידת מכונה להמלצות וניהול מלאי. צוותי הסטיילינג שלהם עובדים יחד עם צוותי הסחורה שלהם, למעשה: "אחד ממדעני הנתונים שלנו התנסה באלגוריתם גנטי ויישם אותו על בגדים כדי לחזות מה יהיה פריט לבוש מצליח שלא קיים היום. הבאנו את זה לצוות הסחורה ועכשיו הם יכולים להשתמש בזה ככלי." +[Reference](https://www.zdnet.com/article/how-stitch-fix-uses-machine-learning-to-master-the-science-of-styling/) + +## 🏥 בריאות + +תחום הבריאות יכול לנצל למידת מכונה כדי לייעל משימות מחקר וגם בעיות לוגיסטיות כמו אשפוז חוזר של מטופלים או עצירת התפשטות מחלות. + +### ניהול ניסויים קליניים + +רעילות בניסויים קליניים היא דאגה מרכזית עבור יצרני תרופות. כמה רעילות היא נסבלת? במחקר זה, ניתוח שיטות ניסוי קליניות שונות הוביל לפיתוח גישה חדשה לחיזוי הסיכויים לתוצאות ניסויים קליניים. במיוחד, הם הצליחו להשתמש ביער אקראי כדי ליצור [מסווג](../../4-Classification/README.md) שמסוגל להבחין בין קבוצות של תרופות. +[Reference](https://www.sciencedirect.com/science/article/pii/S2451945616302914) + +### ניהול אשפוז חוזר בבתי חולים + +טיפול בבתי חולים הוא יקר, במיוחד כאשר מטופלים צריכים להתאשפז שוב. מאמר זה דן בחברה שמשתמשת בלמידת מכונה כדי לחזות פוטנציאל אשפוז חוזר באמצעות אלגוריתמי [אשכולות](../../5-Clustering/README.md). אשכולות אלו עוזרים לאנליסטים "לגלות קבוצות של אשפוזים חוזרים שעשויים לחלוק סיבה משותפת". +[Reference](https://healthmanagement.org/c/healthmanagement/issuearticle/hospital-readmissions-and-machine-learning) + +### ניהול מחלות + +המגפה האחרונה שמה זרקור על הדרכים שבהן למידת מכונה יכולה לעזור בעצירת התפשטות מחלות. במאמר זה, תזהו שימוש ב-ARIMA, עקומות לוגיסטיות, רגרסיה ליניארית ו-SARIMA. "עבודה זו היא ניסיון לחשב את שיעור התפשטות הנגיף הזה וכך לחזות את מקרי המוות, ההחלמות והמקרים המאושרים, כך שזה עשוי לעזור לנו להתכונן טוב יותר ולהישאר בחיים." +[Reference](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7979218/) + +## 🌲 אקולוגיה וטכנולוגיה ירוקה + +הטבע והאקולוגיה מורכבים ממערכות רגישות רבות שבהן האינטראקציה בין בעלי חיים לטבע נכנסת למוקד. חשוב להיות מסוגלים למדוד מערכות אלו בצורה מדויקת ולפעול בהתאם אם משהו קורה, כמו שריפת יער או ירידה באוכלוסיית בעלי החיים. + +### ניהול יערות + +למדתם על [למידת חיזוקים](../../8-Reinforcement/README.md) בשיעורים קודמים. היא יכולה להיות מאוד שימושית כאשר מנסים לחזות דפוסים בטבע. במיוחד, ניתן להשתמש בה כדי לעקוב אחר בעיות אקולוגיות כמו שריפות יער והתפשטות מינים פולשים. בקנדה, קבוצת חוקרים השתמשה בלמידת חיזוקים כדי לבנות מודלים של דינמיקת שריפות יער מתמונות לוויין. באמצעות "תהליך התפשטות מרחבי (SSP)" חדשני, הם דמיינו שריפת יער כ"סוכן בכל תא בנוף". "סט הפעולות שהאש יכולה לבצע ממיקום בכל נקודת זמן כולל התפשטות צפונה, דרומה, מזרחה או מערבה או אי התפשטות. + +גישה זו הופכת את ההגדרה הרגילה של למידת חיזוקים מכיוון שהדינמיקה של תהליך ההחלטה של מרקוב (MDP) המתאים היא פונקציה ידועה להתפשטות מיידית של שריפות." קראו עוד על האלגוריתמים הקלאסיים שבהם השתמשה הקבוצה בקישור למטה. +[Reference](https://www.frontiersin.org/articles/10.3389/fict.2018.00006/full) + +### חישת תנועה של בעלי חיים + +בעוד שלמידה עמוקה יצרה מהפכה במעקב חזותי אחר תנועות בעלי חיים (ניתן לבנות [עוקב דובי קוטב](https://docs.microsoft.com/learn/modules/build-ml-model-with-azure-stream-analytics/?WT.mc_id=academic-77952-leestott) משלכם כאן), למידת מכונה קלאסית עדיין יש מקום במשימה זו. + +חיישנים למעקב אחר תנועות של בעלי חיים בחוות ו-IoT עושים שימוש בסוג זה של עיבוד חזותי, אך טכניקות למידת מכונה בסיסיות יותר מועילות לעיבוד מקדים של נתונים. לדוגמה, במאמר זה, תנוחות כבשים נוטרו ונותחו באמצעות אלגוריתמי מסווגים שונים. ייתכן שתזהו את עקומת ROC בעמוד 335. +[Reference](https://druckhaus-hofmann.de/gallery/31-wj-feb-2020.pdf) + +### ⚡️ ניהול אנרגיה + +בשיעורים שלנו על [חיזוי סדרות זמן](../../7-TimeSeries/README.md), העלינו את הרעיון של מדחנים חכמים כדי לייצר הכנסות לעיר על סמך הבנת היצע וביקוש. מאמר זה דן בפירוט כיצד אשכולות, רגרסיה וחיזוי סדרות זמן שולבו כדי לעזור לחזות שימוש עתידי באנרגיה באירלנד, בהתבסס על מדידה חכמה. +[Reference](https://www-cdn.knime.com/sites/default/files/inline-images/knime_bigdata_energy_timeseries_whitepaper.pdf) + +## 💼 ביטוח + +תחום הביטוח הוא תחום נוסף שמשתמש בלמידת מכונה כדי לבנות ולייעל מודלים פיננסיים ואקטואריים. + +### ניהול תנודתיות + +MetLife, ספק ביטוח חיים, פתוח לגבי הדרך שבה הם מנתחים ומפחיתים תנודתיות במודלים הפיננסיים שלהם. במאמר זה תבחינו בהדמיות סיווג בינאריות ואורדינליות. תגלו גם הדמיות חיזוי. +[Reference](https://investments.metlife.com/content/dam/metlifecom/us/investments/insights/research-topics/macro-strategy/pdf/MetLifeInvestmentManagement_MachineLearnedRanking_070920.pdf) + +## 🎨 אמנות, תרבות וספרות + +בתחום האמנות, למשל בעיתונאות, ישנן בעיות מעניינות רבות. זיהוי חדשות מזויפות הוא בעיה גדולה שכן הוכח שהיא משפיעה על דעת הקהל ואפילו על הפלת דמוקרטיות. מוזיאונים יכולים גם להרוויח משימוש בלמידת מכונה בכל דבר, החל ממציאת קשרים בין פריטים ועד תכנון משאבים. + +### זיהוי חדשות מזויפות + +זיהוי חדשות מזויפות הפך למשחק של חתול ועכבר במדיה של היום. במאמר זה, חוקרים מציעים שמערכת שמשלבת כמה מטכניקות למידת המכונה שלמדנו יכולה להיבחן והמודל הטוב ביותר ייושם: "מערכת זו מבוססת על עיבוד שפה טבעית כדי לחלץ תכונות מהנתונים ולאחר מכן תכונות אלו משמשות לאימון מסווגי למידת מכונה כמו Naive Bayes, Support Vector Machine (SVM), Random Forest (RF), Stochastic Gradient Descent (SGD), ו-Logistic Regression (LR)." +[Reference](https://www.irjet.net/archives/V7/i6/IRJET-V7I6688.pdf) + +מאמר זה מראה כיצד שילוב תחומים שונים של למידת מכונה יכול להפיק תוצאות מעניינות שיכולות לעזור לעצור את התפשטות החדשות המזויפות ולמנוע נזק אמיתי; במקרה זה, המניע היה התפשטות שמועות על טיפולי COVID שגרמו לאלימות המונית. + +### למידת מכונה במוזיאונים + +מוזיאונים נמצאים על סף מהפכת AI שבה קטלוג ודיגיטציה של אוספים ומציאת קשרים בין פריטים הופכים לקלים יותר ככל שהטכנולוגיה מתקדמת. פרויקטים כמו [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources.) עוזרים לפתוח את המסתורין של אוספים בלתי נגישים כמו הארכיונים של הוותיקן. אבל, ההיבט העסקי של מוזיאונים מרוויח גם ממודלים של למידת מכונה. + +לדוגמה, מכון האמנות של שיקגו בנה מודלים כדי לחזות מה מעניין את הקהל ומתי הוא יגיע לתערוכות. המטרה היא ליצור חוויות מבקר מותאמות ואופטימליות בכל פעם שהמשתמש מבקר במוזיאון. "במהלך שנת הכספים 2017, המודל חזה נוכחות והכנסות בדיוק של 1 אחוז, אומר אנדרו סימניק, סגן נשיא בכיר במכון האמנות." +[Reference](https://www.chicagobusiness.com/article/20180518/ISSUE01/180519840/art-institute-of-chicago-uses-data-to-make-exhibit-choices) + +## 🏷 שיווק + +### פילוח לקוחות + +אסטרטגיות השיווק היעילות ביותר מכוונות ללקוחות בדרכים שונות בהתבסס על קבוצות שונות. במאמר זה, נדונים השימושים באלגוריתמי אשכולות כדי לתמוך בשיווק מובחן. שיווק מובחן עוזר לחברות לשפר את זיהוי המותג, להגיע ליותר לקוחות ולהרוויח יותר כסף. +[Reference](https://ai.inqline.com/machine-learning-for-marketing-customer-segmentation/) + +## 🚀 אתגר + +זהו תחום נוסף שמרוויח מחלק מהטכניקות שלמדתם בקורס זה, וגלה כיצד הוא משתמש בלמידת מכונה. +## [שאלון לאחר ההרצאה](https://ff-quizzes.netlify.app/en/ml/) + +## סקירה ולימוד עצמי + +לצוות מדעי הנתונים של Wayfair יש כמה סרטונים מעניינים על איך הם משתמשים בלמידת מכונה בחברה שלהם. שווה [להציץ](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos)! + +## משימה + +[חיפוש אוצר בלמידת מכונה](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). בעוד שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/9-Real-World/1-Applications/assignment.md b/translations/he/9-Real-World/1-Applications/assignment.md new file mode 100644 index 00000000..72325f04 --- /dev/null +++ b/translations/he/9-Real-World/1-Applications/assignment.md @@ -0,0 +1,27 @@ + +# חיפוש אוצרות בלמידת מכונה + +## הוראות + +בשיעור הזה, למדתם על מגוון שימושים אמיתיים שנפתרו באמצעות למידת מכונה קלאסית. למרות שהשימוש בלמידה עמוקה, טכניקות וכלים חדשים ב-AI, וניצול רשתות נוירונים עזרו להאיץ את הפיתוח של כלים לסיוע בתחומים אלו, למידת מכונה קלאסית באמצעות הטכניקות שנלמדו בתוכנית הלימודים עדיין מחזיקה בערך רב. + +במשימה הזו, דמיינו שאתם משתתפים בהאקתון. השתמשו במה שלמדתם בתוכנית הלימודים כדי להציע פתרון באמצעות למידת מכונה קלאסית לבעיה באחד התחומים שנדונו בשיעור הזה. צרו מצגת שבה תדונו כיצד תיישמו את הרעיון שלכם. נקודות בונוס אם תוכלו לאסוף נתוני דוגמה ולבנות מודל למידת מכונה שיתמוך בקונספט שלכם! + +## קריטריונים להערכה + +| קריטריון | מצטיין | מספק | דורש שיפור | +| --------- | ---------------------------------------------------------------- | --------------------------------------------- | ---------------- | +| | מוצגת מצגת PowerPoint - בונוס על בניית מודל | מוצגת מצגת בסיסית ולא חדשנית | העבודה אינה שלמה | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/9-Real-World/2-Debugging-ML-Models/README.md b/translations/he/9-Real-World/2-Debugging-ML-Models/README.md new file mode 100644 index 00000000..a349077a --- /dev/null +++ b/translations/he/9-Real-World/2-Debugging-ML-Models/README.md @@ -0,0 +1,178 @@ + +# פוסטסקריפט: איתור שגיאות במודלים של למידת מכונה באמצעות רכיבי לוח מחוונים של AI אחראי + +## [שאלון לפני השיעור](https://ff-quizzes.netlify.app/en/ml/) + +## מבוא + +למידת מכונה משפיעה על חיי היומיום שלנו. הבינה המלאכותית מוצאת את דרכה למערכות החשובות ביותר שמשפיעות עלינו כיחידים ועל החברה שלנו, כמו בריאות, פיננסים, חינוך ותעסוקה. לדוגמה, מערכות ומודלים מעורבים במשימות קבלת החלטות יומיומיות, כמו אבחנות רפואיות או זיהוי הונאות. כתוצאה מכך, ההתקדמות בבינה מלאכותית יחד עם האימוץ המואץ שלה נתקלים בציפיות חברתיות מתפתחות ובתקנות הולכות וגוברות בתגובה. אנו רואים באופן קבוע תחומים שבהם מערכות AI ממשיכות לאכזב; הן חושפות אתגרים חדשים; וממשלות מתחילות להסדיר פתרונות AI. לכן, חשוב לנתח את המודלים הללו כדי להבטיח תוצאות הוגנות, אמינות, כוללות, שקופות ואחראיות לכולם. + +בתוכנית הלימודים הזו, נבחן כלים מעשיים שניתן להשתמש בהם כדי להעריך אם למודל יש בעיות של AI אחראי. טכניקות מסורתיות לאיתור שגיאות במודלים של למידת מכונה נוטות להתבסס על חישובים כמותיים כמו דיוק מצטבר או ממוצע הפסד שגיאה. דמיינו מה יכול לקרות כאשר הנתונים שבהם אתם משתמשים לבניית המודלים הללו חסרים דמוגרפיות מסוימות, כמו גזע, מגדר, השקפה פוליטית, דת, או מייצגים באופן לא פרופורציונלי דמוגרפיות כאלה. ומה לגבי מצב שבו הפלט של המודל מפורש כמעדיף דמוגרפיה מסוימת? זה יכול להוביל לייצוג יתר או חסר של קבוצות תכונות רגישות, מה שגורם לבעיות של הוגנות, הכללה או אמינות במודל. גורם נוסף הוא שמודלים של למידת מכונה נחשבים לקופסאות שחורות, מה שמקשה להבין ולהסביר מה מניע את התחזיות של המודל. כל אלה הם אתגרים שמדעני נתונים ומפתחי AI מתמודדים איתם כאשר אין להם כלים מתאימים לאיתור שגיאות ולהערכת ההוגנות או האמינות של מודל. + +בשיעור זה תלמדו על איתור שגיאות במודלים באמצעות: + +- **ניתוח שגיאות**: זיהוי אזורים בהתפלגות הנתונים שבהם למודל יש שיעורי שגיאה גבוהים. +- **סקירת מודל**: ביצוע ניתוח השוואתי בין קבוצות נתונים שונות כדי לגלות פערים במדדי הביצועים של המודל. +- **ניתוח נתונים**: חקירה של אזורים שבהם עשויה להיות ייצוג יתר או חסר של הנתונים, מה שעלול להטות את המודל להעדיף דמוגרפיה אחת על פני אחרת. +- **חשיבות תכונות**: הבנה אילו תכונות מניעות את התחזיות של המודל ברמה גלובלית או מקומית. + +## דרישות מקדימות + +כדרישה מקדימה, אנא עיינו ב[כלי AI אחראי למפתחים](https://www.microsoft.com/ai/ai-lab-responsible-ai-dashboard) + +> ![Gif על כלי AI אחראי](../../../../9-Real-World/2-Debugging-ML-Models/images/rai-overview.gif) + +## ניתוח שגיאות + +מדדי ביצועים מסורתיים של מודלים המשמשים למדידת דיוק הם לרוב חישובים המבוססים על תחזיות נכונות מול שגויות. לדוגמה, קביעה שמודל מדויק ב-89% מהזמן עם הפסד שגיאה של 0.001 יכולה להיחשב כביצועים טובים. שגיאות אינן מחולקות באופן אחיד בנתוני הבסיס שלכם. ייתכן שתקבלו ציון דיוק של 89% למודל אך תגלו שיש אזורים שונים בנתונים שבהם המודל נכשל ב-42% מהזמן. ההשלכות של דפוסי כשל אלה עם קבוצות נתונים מסוימות יכולות להוביל לבעיות של הוגנות או אמינות. חשוב להבין את האזורים שבהם המודל מתפקד היטב או לא. אזורי הנתונים שבהם יש מספר גבוה של אי דיוקים במודל עשויים להתברר כדמוגרפיה נתונים חשובה. + +![ניתוח ואיתור שגיאות במודל](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-distribution.png) + +רכיב ניתוח השגיאות בלוח המחוונים של RAI ממחיש כיצד כשלי המודל מחולקים בין קבוצות שונות באמצעות ויזואליזציה של עץ. זה שימושי בזיהוי תכונות או אזורים שבהם יש שיעור שגיאות גבוה בנתונים שלכם. על ידי צפייה במקור רוב אי הדיוקים של המודל, תוכלו להתחיל לחקור את שורש הבעיה. ניתן גם ליצור קבוצות נתונים כדי לבצע ניתוח עליהן. קבוצות נתונים אלו מסייעות בתהליך איתור השגיאות כדי לקבוע מדוע ביצועי המודל טובים בקבוצה אחת אך שגויים באחרת. + +![ניתוח שגיאות](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-cohort.png) + +הסימנים הוויזואליים במפת העץ מסייעים באיתור אזורי הבעיה במהירות. לדוגמה, ככל שצבע אדום כהה יותר מופיע בצומת עץ, כך שיעור השגיאות גבוה יותר. + +מפת חום היא פונקציונליות ויזואליזציה נוספת שמשתמשים יכולים להשתמש בה כדי לחקור את שיעור השגיאות באמצעות תכונה אחת או שתיים ולמצוא גורם תורם לשגיאות המודל על פני כל קבוצת הנתונים או הקבוצות. + +![מפת חום לניתוח שגיאות](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-heatmap.png) + +השתמשו בניתוח שגיאות כאשר אתם צריכים: + +* להבין לעומק כיצד כשלי המודל מחולקים על פני קבוצת נתונים ועל פני מספר ממדי קלט ותכונות. +* לפרק את מדדי הביצועים המצטברים כדי לגלות באופן אוטומטי קבוצות שגויות וליידע את הצעדים הממוקדים שלכם למיתון הבעיה. + +## סקירת מודל + +הערכת ביצועי מודל למידת מכונה דורשת הבנה הוליסטית של התנהגותו. ניתן להשיג זאת על ידי סקירת יותר ממדד אחד, כמו שיעור שגיאות, דיוק, ריקול, דיוק תחזיות או MAE (שגיאה מוחלטת ממוצעת), כדי למצוא פערים בין מדדי ביצועים. מדד ביצועים אחד עשוי להיראות מצוין, אך אי דיוקים יכולים להתגלות במדד אחר. בנוסף, השוואת המדדים לפערים על פני כל קבוצת הנתונים או הקבוצות עוזרת להאיר את האזורים שבהם המודל מתפקד היטב או לא. זה חשוב במיוחד כדי לראות את ביצועי המודל בין תכונות רגישות לעומת לא רגישות (למשל, גזע, מגדר או גיל של מטופל) כדי לחשוף אי הוגנות פוטנציאלית במודל. לדוגמה, גילוי שהמודל שגוי יותר בקבוצה שיש לה תכונות רגישות יכול לחשוף אי הוגנות פוטנציאלית במודל. + +רכיב סקירת המודל בלוח המחוונים של RAI מסייע לא רק בניתוח מדדי הביצועים של ייצוג הנתונים בקבוצה, אלא גם נותן למשתמשים את היכולת להשוות את התנהגות המודל בין קבוצות שונות. + +![קבוצות נתונים - סקירת מודל בלוח המחוונים של RAI](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-dataset-cohorts.png) + +הפונקציונליות של ניתוח מבוסס תכונות של הרכיב מאפשרת למשתמשים לצמצם תת-קבוצות נתונים בתוך תכונה מסוימת כדי לזהות אנומליות ברמה גרעינית. לדוגמה, ללוח המחוונים יש אינטליגנציה מובנית ליצירת קבוצות באופן אוטומטי עבור תכונה שנבחרה על ידי המשתמש (למשל, *"time_in_hospital < 3"* או *"time_in_hospital >= 7"*). זה מאפשר למשתמש לבודד תכונה מסוימת מקבוצת נתונים גדולה יותר כדי לראות אם היא משפיעה על תוצאות שגויות של המודל. + +![קבוצות תכונות - סקירת מודל בלוח המחוונים של RAI](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-feature-cohorts.png) + +רכיב סקירת המודל תומך בשני סוגים של מדדי פערים: + +**פער בביצועי המודל**: קבוצת מדדים זו מחשבת את הפער (ההבדל) בערכים של מדד הביצועים הנבחר בין תת-קבוצות נתונים. הנה כמה דוגמאות: + +* פער בשיעור דיוק +* פער בשיעור שגיאות +* פער בדיוק תחזיות +* פער בריקול +* פער בשגיאה מוחלטת ממוצעת (MAE) + +**פער בשיעור הבחירה**: מדד זה מכיל את ההבדל בשיעור הבחירה (תחזית חיובית) בין תת-קבוצות. דוגמה לכך היא הפער בשיעורי אישור הלוואות. שיעור הבחירה מתייחס לחלק מנקודות הנתונים בכל מחלקה שמסווגות כ-1 (במיון בינארי) או להתפלגות ערכי התחזיות (ברגרסיה). + +## ניתוח נתונים + +> "אם תענה את הנתונים מספיק זמן, הם יודו בכל דבר" - רונלד קואז + +האמירה הזו נשמעת קיצונית, אבל נכון שנתונים יכולים להיות מנוצלים כדי לתמוך בכל מסקנה. מניפולציה כזו יכולה לפעמים לקרות באופן לא מכוון. כבני אדם, לכולנו יש הטיות, ולעיתים קרובות קשה לדעת באופן מודע מתי אנו מכניסים הטיה לנתונים. הבטחת הוגנות ב-AI ולמידת מכונה נותרת אתגר מורכב. + +נתונים הם נקודת עיוור גדולה עבור מדדי ביצועים מסורתיים של מודלים. ייתכן שיש לכם ציוני דיוק גבוהים, אך זה לא תמיד משקף את הטיה הנתונים הבסיסית שיכולה להיות בקבוצת הנתונים שלכם. לדוגמה, אם קבוצת נתונים של עובדים כוללת 27% נשים בתפקידים בכירים בחברה ו-73% גברים באותו רמה, מודל AI לפרסום משרות שמאומן על נתונים אלו עשוי לכוון בעיקר לקהל גברים עבור משרות בכירות. חוסר איזון זה בנתונים הטה את תחזיות המודל להעדיף מגדר אחד. זה חושף בעיית הוגנות שבה יש הטיה מגדרית במודל AI. + +רכיב ניתוח הנתונים בלוח המחוונים של RAI מסייע בזיהוי אזורים שבהם יש ייצוג יתר או חסר בקבוצת הנתונים. הוא עוזר למשתמשים לאבחן את שורש הבעיות של שגיאות ובעיות הוגנות שנגרמות מחוסר איזון בנתונים או מחוסר ייצוג של קבוצת נתונים מסוימת. זה נותן למשתמשים את היכולת להציג ויזואלית קבוצות נתונים על סמך תחזיות ותוצאות בפועל, קבוצות שגיאות ותכונות ספציפיות. לפעמים גילוי קבוצת נתונים לא מיוצגת יכול גם לחשוף שהמודל לא לומד היטב, ולכן יש אי דיוקים גבוהים. מודל שיש לו הטיה נתונים הוא לא רק בעיית הוגנות אלא גם מראה שהמודל אינו כולל או אמין. + +![רכיב ניתוח נתונים בלוח המחוונים של RAI](../../../../9-Real-World/2-Debugging-ML-Models/images/dataanalysis-cover.png) + +השתמשו בניתוח נתונים כאשר אתם צריכים: + +* לחקור את סטטיסטיקות קבוצת הנתונים שלכם על ידי בחירת מסננים שונים כדי לחלק את הנתונים שלכם לממדים שונים (המכונים גם קבוצות). +* להבין את התפלגות קבוצת הנתונים שלכם על פני קבוצות שונות וקבוצות תכונות. +* לקבוע האם הממצאים שלכם הקשורים להוגנות, ניתוח שגיאות וסיבתיות (שנגזרו מרכיבים אחרים בלוח המחוונים) הם תוצאה של התפלגות קבוצת הנתונים שלכם. +* להחליט באילו אזורים לאסוף יותר נתונים כדי למתן שגיאות שנובעות מבעיות ייצוג, רעש תוויות, רעש תכונות, הטיה תוויות וגורמים דומים. + +## פרשנות מודל + +מודלים של למידת מכונה נוטים להיות קופסאות שחורות. הבנת אילו תכונות נתונים מרכזיות מניעות את התחזיות של מודל יכולה להיות מאתגרת. חשוב לספק שקיפות לגבי הסיבה שמודל עושה תחזית מסוימת. לדוגמה, אם מערכת AI חוזה שמטופל סוכרתי נמצא בסיכון לחזור לבית חולים תוך פחות מ-30 ימים, עליה לספק נתונים תומכים שהובילו לתחזית שלה. נתונים תומכים אלו מביאים שקיפות שעוזרת לרופאים או בתי חולים לקבל החלטות מושכלות. בנוסף, היכולת להסביר מדוע מודל עשה תחזית עבור מטופל מסוים מאפשרת אחריות עם תקנות בריאות. כאשר אתם משתמשים במודלים של למידת מכונה בדרכים שמשפיעות על חיי אנשים, חשוב להבין ולהסביר מה משפיע על התנהגות המודל. פרשנות והסבר מודל עוזרים לענות על שאלות בתרחישים כמו: + +* איתור שגיאות במודל: מדוע המודל שלי עשה את הטעות הזו? איך אני יכול לשפר את המודל שלי? +* שיתוף פעולה בין אדם ל-AI: איך אני יכול להבין ולסמוך על ההחלטות של המודל? +* עמידה בתקנות: האם המודל שלי עומד בדרישות החוקיות? + +רכיב חשיבות התכונות בלוח המחוונים של RAI עוזר לכם לאתר שגיאות ולקבל הבנה מקיפה של איך מודל עושה תחזיות. זהו גם כלי שימושי עבור אנשי מקצוע בלמידת מכונה ומקבלי החלטות להסביר ולהציג ראיות לתכונות שמשפיעות על התנהגות המודל לצורך עמידה בתקנות. לאחר מכן, משתמשים יכולים לחקור הסברים גלובליים ומקומיים כדי לאמת אילו תכונות מניעות את התחזיות של המודל. הסברים גלובליים מציגים את התכונות המרכזיות שהשפיעו על התחזיות הכוללות של המודל. הסברים מקומיים מציגים אילו תכונות הובילו לתחזית של המודל עבור מקרה יחיד. היכולת להעריך הסברים מקומיים מועילה גם באיתור שגיאות או בביקורת מקרה ספציפי כדי להבין ולהסביר מדוע מודל עשה תחזית מדויקת או שגויה. + +![רכיב חשיבות התכונות בלוח המחוונים של RAI](../../../../9-Real-World/2-Debugging-ML-Models/images/9-feature-importance.png) + +* הסברים גלובליים: לדוגמה, אילו תכונות משפיעות על ההתנהגות הכוללת של מודל חזרה לבית חולים של חולי סוכרת? +* הסברים מקומיים: לדוגמה, מדוע מטופל סוכרתי מעל גיל 60 עם אשפוזים קודמים חזה שיחזור או לא יחזור לבית חולים תוך 30 ימים? + +בתהליך איתור שגיאות של בחינת ביצועי המודל על פני קבוצות שונות, חשיבות התכונות מראה מהי רמת ההשפעה של תכונה על פני הקבוצות. זה עוזר לחשוף אנומליות כאשר משווים את רמת ההשפעה של התכונה על תחזיות שגויות של המודל. רכיב חשיבות התכונות יכול להראות אילו ערכים בתכונה השפיעו באופן חיובי או שלילי על תוצאות המודל. לדוגמה, אם מודל עשה תחזית שגויה, הרכיב נותן לכם את היכולת להעמיק ולזהות אילו תכונות או ערכי תכונות הובילו לתחזית. רמת פירוט זו עוזרת לא רק באיתור שגיאות אלא מספקת שקיפות ואחריות במצבי ביקורת. לבסוף, הרכיב יכול לעזור לכם לזהות בעיות הוגנות. לדוגמה, אם תכונה רגישה כמו אתניות או מגדר משפיעה מאוד על תחזיות המודל, זה יכול להיות סימן להטיה גזעית או מגדרית במודל. + +![חשיבות תכונות](../../../../9-Real-World/2-Debugging-ML-Models/images/9-features-influence.png) + +השתמשו בפרשנות כאשר אתם צריכים: + +* לקבוע עד כמה ניתן לסמוך על תחזיות מערכת ה-AI שלכם על ידי הבנת אילו תכונות הן החשובות ביותר עבור התחזיות. +* לגשת לאיתור שגיאות במודל שלכם על ידי הבנתו תחילה וזיהוי האם המודל משתמש בתכונות בריאות או רק בקורלציות שגויות. +* לחשוף מקורות פוטנציאליים של אי הוגנות על ידי הבנת האם המודל מבסס תחזיות על תכונות רגישות או על תכונות שמקושרות מאוד אליהן. +* לבנות אמון משתמש בהחלטות המודל שלכם על ידי יצירת הסברים מקומיים להמחשת התוצאות שלהם. +* להשלים ביקורת רגולטורית של מערכת AI כדי לאמת מודלים ולפקח על ההשפעה של החלטות המודל על בני אדם. + +## סיכום + +כל רכיבי לוח המחוונים של RAI הם כלים מעשיים שעוזרים לכם לבנות מודלים של למידת מכונה שפוגעים פחות ומעוררים יותר אמון בחברה. +- **ייצוג יתר או חסר**. הרעיון הוא שקבוצה מסוימת אינה נראית במקצוע מסוים, וכל שירות או פונקציה שממשיכים לקדם זאת תורמים לנזק. + +### לוח מחוונים של Azure RAI + +[לוח המחוונים של Azure RAI](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) מבוסס על כלים בקוד פתוח שפותחו על ידי מוסדות אקדמיים וארגונים מובילים, כולל Microsoft. כלים אלו חיוניים למדעני נתונים ומפתחי AI כדי להבין טוב יותר את התנהגות המודל, לגלות ולתקן בעיות לא רצויות במודלים של AI. + +- למדו כיצד להשתמש ברכיבים השונים על ידי עיון ב[תיעוד לוח המחוונים של RAI.](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) + +- עיינו בכמה [מחברות לדוגמה של לוח המחוונים של RAI](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) לצורך איתור בעיות בתרחישים של AI אחראי ב-Azure Machine Learning. + +--- +## 🚀 אתגר + +כדי למנוע מראש הטיה סטטיסטית או הטיה בנתונים, עלינו: + +- להבטיח מגוון רקעים ונקודות מבט בקרב האנשים שעובדים על המערכות +- להשקיע במאגרי נתונים שמשקפים את המגוון בחברה שלנו +- לפתח שיטות טובות יותר לזיהוי ותיקון הטיה כאשר היא מתרחשת + +חשבו על תרחישים אמיתיים שבהם אי-צדק ניכר בבניית מודלים ובשימוש בהם. מה עוד כדאי לקחת בחשבון? + +## [שאלון לאחר ההרצאה](https://ff-quizzes.netlify.app/en/ml/) +## סקירה ולימוד עצמי + +בשיעור זה, למדתם כמה מהכלים המעשיים לשילוב AI אחראי בלמידת מכונה. + +צפו בסדנה זו כדי להעמיק בנושאים: + +- לוח מחוונים של AI אחראי: פתרון כולל ליישום RAI בפועל מאת Besmira Nushi ו-Mehrnoosh Sameki + +[![לוח מחוונים של AI אחראי: פתרון כולל ליישום RAI בפועל](https://img.youtube.com/vi/f1oaDNl3djg/0.jpg)](https://www.youtube.com/watch?v=f1oaDNl3djg "לוח מחוונים של AI אחראי: פתרון כולל ליישום RAI בפועל") + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון: לוח מחוונים של AI אחראי: פתרון כולל ליישום RAI בפועל מאת Besmira Nushi ו-Mehrnoosh Sameki + +עיינו בחומרים הבאים כדי ללמוד עוד על AI אחראי וכיצד לבנות מודלים אמינים יותר: + +- כלים של Microsoft ללוח מחוונים של RAI לצורך איתור בעיות במודלים של ML: [משאבי כלים ל-AI אחראי](https://aka.ms/rai-dashboard) + +- חקרו את ערכת הכלים ל-AI אחראי: [Github](https://github.com/microsoft/responsible-ai-toolbox) + +- מרכז המשאבים של Microsoft ל-AI אחראי: [משאבי AI אחראי – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- קבוצת המחקר FATE של Microsoft: [FATE: צדק, אחריות, שקיפות ואתיקה ב-AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) + +## משימה + +[חקרו את לוח המחוונים של RAI](assignment.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). בעוד שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/9-Real-World/2-Debugging-ML-Models/assignment.md b/translations/he/9-Real-World/2-Debugging-ML-Models/assignment.md new file mode 100644 index 00000000..f3cf51a0 --- /dev/null +++ b/translations/he/9-Real-World/2-Debugging-ML-Models/assignment.md @@ -0,0 +1,25 @@ + +# חקור את לוח המחוונים של AI אחראי (RAI) + +## הוראות + +בשיעור זה למדת על לוח המחוונים של RAI, אוסף של רכיבים המבוססים על כלים "קוד פתוח" שנועדו לעזור למדעני נתונים לבצע ניתוח שגיאות, חקר נתונים, הערכת הוגנות, פרשנות מודלים, הערכות נגד/מה-אם וניתוח סיבתי במערכות AI. עבור משימה זו, חקור כמה מדוגמאות [מחברות](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) של לוח המחוונים של RAI ודווח על ממצאיך במאמר או מצגת. + +## קריטריונים להערכה + +| קריטריון | מצטיין | מספק | דורש שיפור | +| -------- | --------- | -------- | ----------------- | +| | מאמר או מצגת PowerPoint מוצגים, דנים ברכיבי לוח המחוונים של RAI, במחברת שהורצה ובמסקנות שהוסקו מהרצתה | מאמר מוצג ללא מסקנות | לא מוצג מאמר | + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/9-Real-World/README.md b/translations/he/9-Real-World/README.md new file mode 100644 index 00000000..c664cb03 --- /dev/null +++ b/translations/he/9-Real-World/README.md @@ -0,0 +1,32 @@ + +# פוסטסקריפט: יישומים בעולם האמיתי של למידת מכונה קלאסית + +בחלק זה של התוכנית, תיחשפו לכמה יישומים בעולם האמיתי של למידת מכונה קלאסית. חיפשנו ברחבי האינטרנט מאמרים ומחקרים על יישומים שהשתמשו באסטרטגיות אלו, תוך הימנעות מרשתות נוירונים, למידה עמוקה ובינה מלאכותית ככל האפשר. תלמדו כיצד למידת מכונה משמשת במערכות עסקיות, יישומים אקולוגיים, פיננסים, אמנות ותרבות, ועוד. + +![שחמט](../../../9-Real-World/images/chess.jpg) + +> צילום על ידי אלקסיס פובט ב-Unsplash + +## שיעור + +1. [יישומים בעולם האמיתי עבור למידת מכונה](1-Applications/README.md) +2. [ניפוי שגיאות במודלים של למידת מכונה באמצעות רכיבי לוח מחוונים של AI אחראי](2-Debugging-ML-Models/README.md) + +## קרדיטים + +"יישומים בעולם האמיתי" נכתב על ידי צוות אנשים, כולל [ג'ן לופר](https://twitter.com/jenlooper) ו-[אורנלה אלטוניאן](https://twitter.com/ornelladotcom). + +"ניפוי שגיאות במודלים של למידת מכונה באמצעות רכיבי לוח מחוונים של AI אחראי" נכתב על ידי [רות יעקובו](https://twitter.com/ruthieyakubu) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/CODE_OF_CONDUCT.md b/translations/he/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..95a94586 --- /dev/null +++ b/translations/he/CODE_OF_CONDUCT.md @@ -0,0 +1,23 @@ + +# קוד ההתנהגות של קוד פתוח של מיקרוסופט + +הפרויקט הזה אימץ את [קוד ההתנהגות של קוד פתוח של מיקרוסופט](https://opensource.microsoft.com/codeofconduct/). + +משאבים: + +- [קוד ההתנהגות של קוד פתוח של מיקרוסופט](https://opensource.microsoft.com/codeofconduct/) +- [שאלות נפוצות על קוד ההתנהגות של מיקרוסופט](https://opensource.microsoft.com/codeofconduct/faq/) +- צרו קשר עם [opencode@microsoft.com](mailto:opencode@microsoft.com) לשאלות או חששות + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/CONTRIBUTING.md b/translations/he/CONTRIBUTING.md new file mode 100644 index 00000000..6f1ba870 --- /dev/null +++ b/translations/he/CONTRIBUTING.md @@ -0,0 +1,25 @@ + +# תרומה + +הפרויקט הזה מקבל בברכה תרומות והצעות. רוב התרומות דורשות ממך להסכים להסכם רישיון תורם (CLA) שמצהיר שיש לך את הזכות, ואתה אכן מעניק לנו את הזכויות להשתמש בתרומתך. לפרטים נוספים, בקר בכתובת https://cla.microsoft.com. + +> חשוב: בעת תרגום טקסט במאגר הזה, אנא וודא שאינך משתמש בתרגום מכונה. אנו נוודא את התרגומים דרך הקהילה, לכן אנא התנדב לתרגום רק בשפות שבהן אתה שולט היטב. + +כאשר אתה מגיש בקשת משיכה (pull request), CLA-bot יקבע באופן אוטומטי אם עליך לספק CLA ויעצב את הבקשה בהתאם (לדוגמה, תווית, תגובה). פשוט עקוב אחר ההוראות שסופקו על ידי הבוט. תצטרך לעשות זאת רק פעם אחת בכל המאגרים שמשתמשים ב-CLA שלנו. + +הפרויקט הזה אימץ את [קוד ההתנהגות של קוד פתוח של Microsoft](https://opensource.microsoft.com/codeofconduct/). +למידע נוסף, ראה את [שאלות נפוצות על קוד ההתנהגות](https://opensource.microsoft.com/codeofconduct/faq/) +או צור קשר עם [opencode@microsoft.com](mailto:opencode@microsoft.com) לכל שאלה או הערה נוספת. + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור הסמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/README.md b/translations/he/README.md new file mode 100644 index 00000000..d46016f7 --- /dev/null +++ b/translations/he/README.md @@ -0,0 +1,178 @@ + +[![GitHub license](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) +[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) +[![GitHub issues](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) +[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) + +[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) +[![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) +[![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) + +### 🌐 תמיכה רב-שפתית + +#### נתמך באמצעות GitHub Action (אוטומטי ותמיד מעודכן) + +[French](../fr/README.md) | [Spanish](../es/README.md) | [German](../de/README.md) | [Russian](../ru/README.md) | [Arabic](../ar/README.md) | [Persian (Farsi)](../fa/README.md) | [Urdu](../ur/README.md) | [Chinese (Simplified)](../zh/README.md) | [Chinese (Traditional, Macau)](../mo/README.md) | [Chinese (Traditional, Hong Kong)](../hk/README.md) | [Chinese (Traditional, Taiwan)](../tw/README.md) | [Japanese](../ja/README.md) | [Korean](../ko/README.md) | [Hindi](../hi/README.md) | [Bengali](../bn/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Portuguese (Portugal)](../pt/README.md) | [Portuguese (Brazil)](../br/README.md) | [Italian](../it/README.md) | [Polish](../pl/README.md) | [Turkish](../tr/README.md) | [Greek](../el/README.md) | [Thai](../th/README.md) | [Swedish](../sv/README.md) | [Danish](../da/README.md) | [Norwegian](../no/README.md) | [Finnish](../fi/README.md) | [Dutch](../nl/README.md) | [Hebrew](./README.md) | [Vietnamese](../vi/README.md) | [Indonesian](../id/README.md) | [Malay](../ms/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Swahili](../sw/README.md) | [Hungarian](../hu/README.md) | [Czech](../cs/README.md) | [Slovak](../sk/README.md) | [Romanian](../ro/README.md) | [Bulgarian](../bg/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Croatian](../hr/README.md) | [Slovenian](../sl/README.md) | [Ukrainian](../uk/README.md) | [Burmese (Myanmar)](../my/README.md) + +#### הצטרפו לקהילה + +[![Azure AI Discord](https://dcbadge.limes.pink/api/server/kzRShWzttr)](https://discord.gg/kzRShWzttr) + +# למידת מכונה למתחילים - תוכנית לימודים + +> 🌍 מסע מסביב לעולם תוך חקר למידת מכונה דרך תרבויות עולמיות 🌍 + +צוות Cloud Advocates במיקרוסופט שמח להציע תוכנית לימודים בת 12 שבועות ו-26 שיעורים בנושא **למידת מכונה**. בתוכנית זו תלמדו על מה שמכונה לעיתים **למידת מכונה קלאסית**, תוך שימוש בעיקר בספריית Scikit-learn והימנעות מלמידה עמוקה, שמכוסה בתוכנית הלימודים שלנו [AI למתחילים](https://aka.ms/ai4beginners). ניתן לשלב את השיעורים הללו עם תוכנית הלימודים שלנו ['מדעי הנתונים למתחילים'](https://aka.ms/ds4beginners), גם כן! + +צאו איתנו למסע מסביב לעולם תוך יישום טכניקות קלאסיות על נתונים מאזורים שונים בעולם. כל שיעור כולל שאלונים לפני ואחרי השיעור, הוראות כתובות להשלמת השיעור, פתרון, משימה ועוד. הפדגוגיה מבוססת הפרויקטים שלנו מאפשרת לכם ללמוד תוך כדי בנייה, שיטה מוכחת להטמעת מיומנויות חדשות. + +**✍️ תודה רבה למחברים שלנו** ג'ן לופר, סטיבן האוול, פרנצ'סקה לזארי, טומומי אימורה, קסי ברביו, דמיטרי סושניקוב, כריס נורינג, אנירבן מוקרג'י, אורנלה אלטוניאן, רות יעקובו ואיימי בויד + +**🎨 תודה גם למאיירים שלנו** טומומי אימורה, דאסאני מדיפאלי וג'ן לופר + +**🙏 תודה מיוחדת 🙏 למחברי, מבקרי ותורמי התוכן מקרב שגרירי הסטודנטים של מיקרוסופט**, במיוחד רישיט דגלי, מוחמד סאקיב חאן אינאן, רוהאן ראג', אלכסנדרו פטרסקו, אבישק ג'ייסוואל, נאורין טבאסום, יואן סמואילה וסניגדה אגרוול + +**🤩 תודה נוספת לשגרירי הסטודנטים של מיקרוסופט אריק וואנג'או, ג'סלין סונדי ווידושי גופטה על שיעורי R שלנו!** + +# התחלת העבודה + +בצעו את השלבים הבאים: +1. **פיצול הריפוזיטורי**: לחצו על כפתור "Fork" בפינה הימנית העליונה של הדף. +2. **שכפול הריפוזיטורי**: `git clone https://github.com/microsoft/ML-For-Beginners.git` + +> [מצאו את כל המשאבים הנוספים לקורס זה באוסף Microsoft Learn שלנו](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) + +**[סטודנטים](https://aka.ms/student-page)**, כדי להשתמש בתוכנית הלימודים הזו, פצלו את הריפוזיטורי כולו לחשבון GitHub שלכם והשלימו את התרגילים בעצמכם או בקבוצה: + +- התחילו עם שאלון לפני השיעור. +- קראו את השיעור והשלימו את הפעילויות, תוך עצירה והרהור בכל בדיקת ידע. +- נסו ליצור את הפרויקטים על ידי הבנת השיעורים במקום להריץ את קוד הפתרון; עם זאת, קוד זה זמין בתיקיות `/solution` בכל שיעור מבוסס פרויקט. +- בצעו את השאלון לאחר השיעור. +- השלימו את האתגר. +- השלימו את המשימה. +- לאחר השלמת קבוצת שיעורים, בקרו ב-[לוח הדיונים](https://github.com/microsoft/ML-For-Beginners/discussions) ו"למדו בקול רם" על ידי מילוי טופס PAT המתאים. 'PAT' הוא כלי הערכת התקדמות שהוא טופס שאתם ממלאים כדי להעמיק את הלמידה שלכם. תוכלו גם להגיב ל-PATs אחרים כדי שנלמד יחד. + +> ללימוד נוסף, אנו ממליצים לעקוב אחר [מודולים ונתיבי לימוד של Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott). + +**מורים**, [הוספנו כמה הצעות](for-teachers.md) כיצד להשתמש בתוכנית הלימודים הזו. + +--- + +## סרטוני הדרכה + +חלק מהשיעורים זמינים כסרטונים קצרים. תוכלו למצוא את כולם בתוך השיעורים, או ברשימת ההשמעה [ML למתחילים בערוץ YouTube של Microsoft Developer](https://aka.ms/ml-beginners-videos) על ידי לחיצה על התמונה למטה. + +[![ML for beginners banner](../../images/ml-for-beginners-video-banner.png)](https://aka.ms/ml-beginners-videos) + +--- + +## הכירו את הצוות + +[![Promo video](../../images/ml.gif)](https://youtu.be/Tj1XWrDSYJU) + +**Gif מאת** [Mohit Jaisal](https://linkedin.com/in/mohitjaisal) + +> 🎥 לחצו על התמונה למעלה לצפייה בסרטון על הפרויקט והאנשים שיצרו אותו! + +--- + +## פדגוגיה + +בחרנו שני עקרונות פדגוגיים בעת בניית תוכנית הלימודים הזו: להבטיח שהיא מבוססת **פרויקטים מעשיים** ושכוללת **שאלונים תכופים**. בנוסף, לתוכנית הלימודים יש **נושא משותף** שמעניק לה לכידות. + +על ידי הבטחת התאמת התוכן לפרויקטים, התהליך נעשה יותר מרתק עבור סטודנטים ושימור המושגים יוגבר. בנוסף, שאלון בעל סיכון נמוך לפני השיעור מכוון את כוונת הסטודנט ללמידת הנושא, בעוד ששאלון שני לאחר השיעור מבטיח שימור נוסף. תוכנית הלימודים הזו תוכננה להיות גמישה ומהנה וניתן לקחת אותה בשלמותה או בחלקים. הפרויקטים מתחילים קטנים והופכים מורכבים יותר עד סוף מחזור 12 השבועות. תוכנית הלימודים כוללת גם נספח על יישומים בעולם האמיתי של למידת מכונה, שניתן להשתמש בו כקרדיט נוסף או כבסיס לדיון. + +> מצאו את [קוד ההתנהגות שלנו](CODE_OF_CONDUCT.md), [הנחיות לתרומה](CONTRIBUTING.md), ו[הנחיות לתרגום](TRANSLATIONS.md). נשמח לקבל את המשוב הבונה שלכם! + +## כל שיעור כולל + +- סקיצות אופציונליות +- סרטון משלים אופציונלי +- סרטון הדרכה (חלק מהשיעורים בלבד) +- [שאלון חימום לפני השיעור](https://ff-quizzes.netlify.app/en/ml/) +- שיעור כתוב +- עבור שיעורים מבוססי פרויקט, מדריכים שלב-אחר-שלב כיצד לבנות את הפרויקט +- בדיקות ידע +- אתגר +- קריאה משלימה +- משימה +- [שאלון לאחר השיעור](https://ff-quizzes.netlify.app/en/ml/) + +> **הערה לגבי שפות**: שיעורים אלו נכתבו בעיקר ב-Python, אך רבים זמינים גם ב-R. כדי להשלים שיעור ב-R, עברו לתיקיית `/solution` וחפשו שיעורי R. הם כוללים סיומת .rmd שמייצגת קובץ **R Markdown** שניתן להגדירו כקובץ שמשלב `קטעי קוד` (של R או שפות אחרות) ו`כותרת YAML` (שמנחה כיצד לעצב פלטים כמו PDF) בתוך `מסמך Markdown`. כך, הוא משמש כמסגרת כתיבה לדוגמה עבור מדעי הנתונים מכיוון שהוא מאפשר לכם לשלב את הקוד שלכם, את הפלט שלו ואת המחשבות שלכם על ידי כתיבתם ב-Markdown. יתרה מכך, ניתן לעבד מסמכי R Markdown לפורמטים כמו PDF, HTML או Word. + +> **הערה לגבי שאלונים**: כל השאלונים נמצאים בתיקיית [Quiz App](../../quiz-app), עבור סך של 52 שאלונים עם שלוש שאלות כל אחד. הם מקושרים מתוך השיעורים אך ניתן להריץ את אפליקציית השאלונים באופן מקומי; עקבו אחר ההוראות בתיקיית `quiz-app` כדי לארח אותה באופן מקומי או לפרוס אותה ב-Azure. + +| מספר שיעור | נושא | קבוצת שיעורים | מטרות למידה | שיעור מקושר | מחבר | +| :-----------: | :------------------------------------------------------------: | :-------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------: | +| 01 | מבוא ללמידת מכונה | [מבוא](1-Introduction/README.md) | למדו את המושגים הבסיסיים מאחורי למידת מכונה | [שיעור](1-Introduction/1-intro-to-ML/README.md) | מוחמד | +| 02 | ההיסטוריה של למידת מכונה | [מבוא](1-Introduction/README.md) | למדו את ההיסטוריה שמאחורי התחום | [שיעור](1-Introduction/2-history-of-ML/README.md) | ג'ן ואיימי | +| 03 | הוגנות ולמידת מכונה | [מבוא](1-Introduction/README.md) | מהם הנושאים הפילוסופיים החשובים סביב הוגנות שעל הסטודנטים לשקול בעת בניית ויישום מודלים של למידת מכונה? | [שיעור](1-Introduction/3-fairness/README.md) | טומומי | +| 04 | טכניקות ללמידת מכונה | [Introduction](1-Introduction/README.md) | אילו טכניקות חוקרי למידת מכונה משתמשים כדי לבנות מודלים של למידת מכונה? | [Lesson](1-Introduction/4-techniques-of-ML/README.md) | כריס וג'ן | +| 05 | מבוא לרגרסיה | [Regression](2-Regression/README.md) | התחילו עם Python ו-Scikit-learn עבור מודלים של רגרסיה | +
  • [Python](2-Regression/1-Tools/README.md)
  • [R](../../2-Regression/1-Tools/solution/R/lesson_1.html)
|
  • ג'ן
  • אריק ונג'או
| +| 06 | מחירי דלעת בצפון אמריקה 🎃 | [Regression](2-Regression/README.md) | ויזואליזציה וניקוי נתונים כהכנה ללמידת מכונה |
  • [Python](2-Regression/2-Data/README.md)
  • [R](../../2-Regression/2-Data/solution/R/lesson_2.html)
|
  • ג'ן
  • אריק ונג'או
| +| 07 | מחירי דלעת בצפון אמריקה 🎃 | [Regression](2-Regression/README.md) | בניית מודלים של רגרסיה לינארית ופולינומית |
  • [Python](2-Regression/3-Linear/README.md)
  • [R](../../2-Regression/3-Linear/solution/R/lesson_3.html)
|
  • ג'ן ודמיטרי
  • אריק ונג'או
| +| 08 | מחירי דלעת בצפון אמריקה 🎃 | [Regression](2-Regression/README.md) | בניית מודל רגרסיה לוגיסטית |
  • [Python](2-Regression/4-Logistic/README.md)
  • [R](../../2-Regression/4-Logistic/solution/R/lesson_4.html)
|
  • ג'ן
  • אריק ונג'או
| +| 09 | אפליקציית ווב 🔌 | [Web App](3-Web-App/README.md) | בניית אפליקציית ווב לשימוש במודל שאומן | [Python](3-Web-App/1-Web-App/README.md) | ג'ן | +| 10 | מבוא לסיווג | [Classification](4-Classification/README.md) | ניקוי, הכנה וויזואליזציה של הנתונים; מבוא לסיווג |
  • [Python](4-Classification/1-Introduction/README.md)
  • [R](../../4-Classification/1-Introduction/solution/R/lesson_10.html) |
    • ג'ן וקאסי
    • אריק ונג'או
    | +| 11 | מטבחים אסיאתיים והודיים טעימים 🍜 | [Classification](4-Classification/README.md) | מבוא למסווגים |
    • [Python](4-Classification/2-Classifiers-1/README.md)
    • [R](../../4-Classification/2-Classifiers-1/solution/R/lesson_11.html) |
      • ג'ן וקאסי
      • אריק ונג'או
      | +| 12 | מטבחים אסיאתיים והודיים טעימים 🍜 | [Classification](4-Classification/README.md) | מסווגים נוספים |
      • [Python](4-Classification/3-Classifiers-2/README.md)
      • [R](../../4-Classification/3-Classifiers-2/solution/R/lesson_12.html) |
        • ג'ן וקאסי
        • אריק ונג'או
        | +| 13 | מטבחים אסיאתיים והודיים טעימים 🍜 | [Classification](4-Classification/README.md) | בניית אפליקציית ווב ממליצה באמצעות המודל שלכם | [Python](4-Classification/4-Applied/README.md) | ג'ן | +| 14 | מבוא לקיבוץ | [Clustering](5-Clustering/README.md) | ניקוי, הכנה וויזואליזציה של הנתונים; מבוא לקיבוץ |
        • [Python](5-Clustering/1-Visualize/README.md)
        • [R](../../5-Clustering/1-Visualize/solution/R/lesson_14.html) |
          • ג'ן
          • אריק ונג'או
          | +| 15 | חקר טעמי מוזיקה ניגרית 🎧 | [Clustering](5-Clustering/README.md) | חקר שיטת הקיבוץ K-Means |
          • [Python](5-Clustering/2-K-Means/README.md)
          • [R](../../5-Clustering/2-K-Means/solution/R/lesson_15.html) |
            • ג'ן
            • אריק ונג'או
            | +| 16 | מבוא לעיבוד שפה טבעית ☕️ | [Natural language processing](6-NLP/README.md) | למדו את היסודות של עיבוד שפה טבעית על ידי בניית בוט פשוט | [Python](6-NLP/1-Introduction-to-NLP/README.md) | סטיבן | +| 17 | משימות נפוצות בעיבוד שפה טבעית ☕️ | [Natural language processing](6-NLP/README.md) | העמיקו את הידע שלכם בעיבוד שפה טבעית על ידי הבנת משימות נפוצות הנדרשות בעת עבודה עם מבני שפה | [Python](6-NLP/2-Tasks/README.md) | סטיבן | +| 18 | תרגום וניתוח רגשות ♥️ | [Natural language processing](6-NLP/README.md) | תרגום וניתוח רגשות עם ג'יין אוסטן | [Python](6-NLP/3-Translation-Sentiment/README.md) | סטיבן | +| 19 | מלונות רומנטיים באירופה ♥️ | [Natural language processing](6-NLP/README.md) | ניתוח רגשות עם ביקורות על מלונות 1 | [Python](6-NLP/4-Hotel-Reviews-1/README.md) | סטיבן | +| 20 | מלונות רומנטיים באירופה ♥️ | [Natural language processing](6-NLP/README.md) | ניתוח רגשות עם ביקורות על מלונות 2 | [Python](6-NLP/5-Hotel-Reviews-2/README.md) | סטיבן | +| 21 | מבוא לחיזוי סדרות זמן | [Time series](7-TimeSeries/README.md) | מבוא לחיזוי סדרות זמן | [Python](7-TimeSeries/1-Introduction/README.md) | פרנצ'סקה | +| 22 | ⚡️ שימוש עולמי בחשמל ⚡️ - חיזוי סדרות זמן עם ARIMA | [Time series](7-TimeSeries/README.md) | חיזוי סדרות זמן עם ARIMA | [Python](7-TimeSeries/2-ARIMA/README.md) | פרנצ'סקה | +| 23 | ⚡️ שימוש עולמי בחשמל ⚡️ - חיזוי סדרות זמן עם SVR | [Time series](7-TimeSeries/README.md) | חיזוי סדרות זמן עם Support Vector Regressor | [Python](7-TimeSeries/3-SVR/README.md) | אנירבן | +| 24 | מבוא ללמידת חיזוק | [Reinforcement learning](8-Reinforcement/README.md) | מבוא ללמידת חיזוק עם Q-Learning | [Python](8-Reinforcement/1-QLearning/README.md) | דמיטרי | +| 25 | עזרו לפיטר להימנע מהזאב! 🐺 | [Reinforcement learning](8-Reinforcement/README.md) | למידת חיזוק Gym | [Python](8-Reinforcement/2-Gym/README.md) | דמיטרי | +| Postscript | תרחישים ויישומים של למידת מכונה בעולם האמיתי | [ML in the Wild](9-Real-World/README.md) | יישומים מעניינים ומרתקים של למידת מכונה קלאסית | [Lesson](9-Real-World/1-Applications/README.md) | צוות | +| Postscript | ניפוי שגיאות מודלים בלמידת מכונה באמצעות לוח מחוונים RAI | [ML in the Wild](9-Real-World/README.md) | ניפוי שגיאות מודלים בלמידת מכונה באמצעות רכיבי לוח מחוונים של AI אחראי | [Lesson](9-Real-World/2-Debugging-ML-Models/README.md) | רות יעקובו | + +> [מצאו את כל המשאבים הנוספים לקורס זה באוסף Microsoft Learn שלנו](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) + +## גישה לא מקוונת + +ניתן להפעיל את התיעוד הזה לא מקוון באמצעות [Docsify](https://docsify.js.org/#/). עשו Fork למאגר זה, [התקינו את Docsify](https://docsify.js.org/#/quickstart) במחשב המקומי שלכם, ואז בתיקיית השורש של מאגר זה, הקלידו `docsify serve`. האתר יוגש על פורט 3000 ב-localhost שלכם: `localhost:3000`. + +## PDFs + +מצאו קובץ PDF של תוכנית הלימודים עם קישורים [כאן](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf). + + +## 🎒 קורסים נוספים + +הצוות שלנו מייצר קורסים נוספים! בדקו: + +- [Generative AI for Beginners](https://aka.ms/genai-beginners) +- [Generative AI for Beginners .NET](https://github.com/microsoft/Generative-AI-for-beginners-dotnet) +- [Generative AI with JavaScript](https://github.com/microsoft/generative-ai-with-javascript) +- [Generative AI with Java](https://github.com/microsoft/Generative-AI-for-beginners-java) +- [AI for Beginners](https://aka.ms/ai-beginners) +- [Data Science for Beginners](https://aka.ms/datascience-beginners) +- [ML for Beginners](https://aka.ms/ml-beginners) +- [Cybersecurity for Beginners](https://github.com/microsoft/Security-101) +- [Web Dev for Beginners](https://aka.ms/webdev-beginners) +- [IoT for Beginners](https://aka.ms/iot-beginners) +- [XR Development for Beginners](https://github.com/microsoft/xr-development-for-beginners) +- [Mastering GitHub Copilot for Paired Programming](https://github.com/microsoft/Mastering-GitHub-Copilot-for-Paired-Programming) +- [Mastering GitHub Copilot for C#/.NET Developers](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers) +- [Choose Your Own Copilot Adventure](https://github.com/microsoft/CopilotAdventures) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). בעוד שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/SECURITY.md b/translations/he/SECURITY.md new file mode 100644 index 00000000..558a9860 --- /dev/null +++ b/translations/he/SECURITY.md @@ -0,0 +1,51 @@ + +## אבטחה + +מיקרוסופט מתייחסת ברצינות לאבטחת מוצרי התוכנה והשירותים שלה, כולל כל מאגרי הקוד המקוריים המנוהלים דרך הארגונים שלנו ב-GitHub, הכוללים [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), ו-[ארגוני GitHub שלנו](https://opensource.microsoft.com/). + +אם אתם מאמינים שמצאתם פגיעות אבטחה באחד ממאגרי הקוד שבבעלות מיקרוסופט, אשר עומדת בהגדרת [פגיעות אבטחה של מיקרוסופט](https://docs.microsoft.com/previous-versions/tn-archive/cc751383(v=technet.10)?WT.mc_id=academic-77952-leestott), אנא דווחו לנו כפי שמתואר להלן. + +## דיווח על בעיות אבטחה + +**אנא אל תדווחו על פגיעות אבטחה דרך בעיות ציבוריות ב-GitHub.** + +במקום זאת, דווחו עליהן למרכז התגובה לאבטחת מידע של מיקרוסופט (MSRC) בכתובת [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). + +אם אתם מעדיפים לשלוח דיווח ללא התחברות, שלחו דוא"ל לכתובת [secure@microsoft.com](mailto:secure@microsoft.com). אם אפשר, הצפינו את ההודעה שלכם באמצעות מפתח ה-PGP שלנו; ניתן להוריד אותו מדף [Microsoft Security Response Center PGP Key](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). + +אתם אמורים לקבל תגובה תוך 24 שעות. אם מסיבה כלשהי לא קיבלתם תגובה, אנא עקבו אחר הדיווח באמצעות דוא"ל כדי לוודא שההודעה המקורית שלכם התקבלה. מידע נוסף ניתן למצוא ב-[microsoft.com/msrc](https://www.microsoft.com/msrc). + +אנא כללו את המידע המבוקש המפורט להלן (ככל שתוכלו לספק) כדי לעזור לנו להבין טוב יותר את מהות הבעיה והיקפה: + + * סוג הבעיה (לדוגמה, גלישת חוצץ, הזרקת SQL, סקריפטים בין אתרים וכו') + * נתיבי הקבצים המלאים הקשורים להופעת הבעיה + * מיקום הקוד הפגוע (תג/ענף/מחויבות או URL ישיר) + * כל תצורה מיוחדת הנדרשת לשחזור הבעיה + * הוראות מפורטות לשחזור הבעיה + * קוד הוכחת רעיון או ניצול (אם אפשרי) + * השפעת הבעיה, כולל כיצד תוקף עשוי לנצל אותה + +מידע זה יעזור לנו לטפל בדיווח שלכם במהירות רבה יותר. + +אם אתם מדווחים במסגרת תוכנית באג באונטי, דיווחים מפורטים יותר עשויים להוביל לפרס גבוה יותר. אנא בקרו בדף [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) למידע נוסף על התוכניות הפעילות שלנו. + +## שפות מועדפות + +אנו מעדיפים שכל התקשורת תהיה באנגלית. + +## מדיניות + +מיקרוסופט פועלת לפי עקרון [גילוי פגיעות מתואם](https://www.microsoft.com/en-us/msrc/cvd). + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/SUPPORT.md b/translations/he/SUPPORT.md new file mode 100644 index 00000000..0a6fd446 --- /dev/null +++ b/translations/he/SUPPORT.md @@ -0,0 +1,24 @@ + +# תמיכה +## כיצד לדווח על בעיות ולקבל עזרה + +פרויקט זה משתמש ב-GitHub Issues למעקב אחר באגים ובקשות לפיצ'רים. אנא חפשו את הבעיות הקיימות לפני שאתם מדווחים על בעיות חדשות כדי להימנע מכפילויות. עבור בעיות חדשות, דווחו על הבאג או בקשת הפיצ'ר שלכם כבעיה חדשה. + +לעזרה ושאלות בנוגע לשימוש בפרויקט זה, דווחו על בעיה. + +## מדיניות התמיכה של Microsoft + +התמיכה עבור מאגר זה מוגבלת למשאבים המפורטים לעיל. + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). בעוד שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/docs/_sidebar.md b/translations/he/docs/_sidebar.md new file mode 100644 index 00000000..7ba11f99 --- /dev/null +++ b/translations/he/docs/_sidebar.md @@ -0,0 +1,57 @@ + +- מבוא + - [מבוא ללמידת מכונה](../1-Introduction/1-intro-to-ML/README.md) + - [היסטוריה של למידת מכונה](../1-Introduction/2-history-of-ML/README.md) + - [למידת מכונה והוגנות](../1-Introduction/3-fairness/README.md) + - [טכניקות בלמידת מכונה](../1-Introduction/4-techniques-of-ML/README.md) + +- רגרסיה + - [כלים מקצועיים](../2-Regression/1-Tools/README.md) + - [נתונים](../2-Regression/2-Data/README.md) + - [רגרסיה לינארית](../2-Regression/3-Linear/README.md) + - [רגרסיה לוגיסטית](../2-Regression/4-Logistic/README.md) + +- בניית אפליקציית אינטרנט + - [אפליקציית אינטרנט](../3-Web-App/1-Web-App/README.md) + +- סיווג + - [מבוא לסיווג](../4-Classification/1-Introduction/README.md) + - [סיווגים 1](../4-Classification/2-Classifiers-1/README.md) + - [סיווגים 2](../4-Classification/3-Classifiers-2/README.md) + - [למידת מכונה יישומית](../4-Classification/4-Applied/README.md) + +- אשכולות + - [הצגת הנתונים שלך](../5-Clustering/1-Visualize/README.md) + - [K-Means](../5-Clustering/2-K-Means/README.md) + +- עיבוד שפה טבעית (NLP) + - [מבוא לעיבוד שפה טבעית](../6-NLP/1-Introduction-to-NLP/README.md) + - [משימות בעיבוד שפה טבעית](../6-NLP/2-Tasks/README.md) + - [תרגום וניתוח רגשות](../6-NLP/3-Translation-Sentiment/README.md) + - [ביקורות מלונות 1](../6-NLP/4-Hotel-Reviews-1/README.md) + - [ביקורות מלונות 2](../6-NLP/5-Hotel-Reviews-2/README.md) + +- חיזוי סדרות זמן + - [מבוא לחיזוי סדרות זמן](../7-TimeSeries/1-Introduction/README.md) + - [ARIMA](../7-TimeSeries/2-ARIMA/README.md) + - [SVR](../7-TimeSeries/3-SVR/README.md) + +- למידה מחיזוקים + - [Q-Learning](../8-Reinforcement/1-QLearning/README.md) + - [Gym](../8-Reinforcement/2-Gym/README.md) + +- למידת מכונה בעולם האמיתי + - [יישומים](../9-Real-World/1-Applications/README.md) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/for-teachers.md b/translations/he/for-teachers.md new file mode 100644 index 00000000..ddf98743 --- /dev/null +++ b/translations/he/for-teachers.md @@ -0,0 +1,37 @@ + +## למורים + +האם תרצו להשתמש בתוכנית הלימודים הזו בכיתה שלכם? אתם מוזמנים לעשות זאת! + +למעשה, תוכלו להשתמש בה ישירות בתוך GitHub באמצעות GitHub Classroom. + +כדי לעשות זאת, בצעו fork למאגר הזה. תצטרכו ליצור מאגר עבור כל שיעור, ולכן תצטרכו להפריד כל תיקייה למאגר נפרד. כך [GitHub Classroom](https://classroom.github.com/classrooms) יוכל לזהות כל שיעור בנפרד. + +הוראות [מלאות](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/) אלו יספקו לכם רעיון כיצד להקים את הכיתה שלכם. + +## שימוש במאגר כפי שהוא + +אם תרצו להשתמש במאגר כפי שהוא כרגע, מבלי להשתמש ב-GitHub Classroom, גם זה אפשרי. תצטרכו לתקשר עם התלמידים שלכם איזה שיעור לעבוד עליו יחד. + +בפורמט מקוון (Zoom, Teams או אחר) תוכלו ליצור חדרי עבודה עבור החידונים, ולהנחות את התלמידים כדי להכין אותם ללמידה. לאחר מכן, הזמינו את התלמידים להשתתף בחידונים ולהגיש את תשובותיהם כ-'issues' בזמן מסוים. תוכלו לעשות את אותו הדבר עם משימות, אם תרצו שהתלמידים יעבדו בשיתוף פעולה באופן פתוח. + +אם אתם מעדיפים פורמט יותר פרטי, בקשו מהתלמידים לבצע fork לתוכנית הלימודים, שיעור אחר שיעור, למאגרים פרטיים משלהם ב-GitHub, ותנו לכם גישה. כך הם יוכלו להשלים חידונים ומשימות באופן פרטי ולהגיש אותם לכם דרך 'issues' במאגר הכיתה שלכם. + +ישנן דרכים רבות לגרום לזה לעבוד בפורמט כיתה מקוון. אנא שתפו אותנו מה עובד הכי טוב עבורכם! + +## נשמח לשמוע את דעתכם! + +אנחנו רוצים שהתוכנית הזו תתאים לכם ולתלמידים שלכם. אנא שתפו אותנו [משוב](https://forms.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR2humCsRZhxNuI79cm6n0hRUQzRVVU9VVlU5UlFLWTRLWlkyQUxORTg5WS4u). + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור הסמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/quiz-app/README.md b/translations/he/quiz-app/README.md new file mode 100644 index 00000000..de67d035 --- /dev/null +++ b/translations/he/quiz-app/README.md @@ -0,0 +1,127 @@ + +# חידונים + +החידונים האלה הם חידוני טרום ואחרי הרצאה עבור תוכנית הלימודים של למידת מכונה בכתובת https://aka.ms/ml-beginners + +## הגדרת הפרויקט + +``` +npm install +``` + +### קומפילציה וטעינה מחדש לפיתוח + +``` +npm run serve +``` + +### קומפילציה ומזעור עבור הפקה + +``` +npm run build +``` + +### בדיקת קוד ותיקון קבצים + +``` +npm run lint +``` + +### התאמת ההגדרות + +ראו [הפניה להגדרות](https://cli.vuejs.org/config/). + +קרדיטים: תודה לגרסה המקורית של אפליקציית החידונים הזו: https://github.com/arpan45/simple-quiz-vue + +## פריסה ל-Azure + +הנה מדריך שלב-אחר-שלב שיעזור לכם להתחיל: + +1. עשו Fork למאגר GitHub +ודאו שקוד האפליקציה שלכם נמצא במאגר GitHub. עשו Fork למאגר הזה. + +2. צרו אפליקציית אינטרנט סטטית ב-Azure +- צרו [חשבון Azure](http://azure.microsoft.com) +- עברו ל-[פורטל Azure](https://portal.azure.com) +- לחצו על "Create a resource" וחפשו "Static Web App". +- לחצו על "Create". + +3. הגדרת אפליקציית האינטרנט הסטטית +- בסיסים: + - Subscription: בחרו את המנוי שלכם ב-Azure. + - Resource Group: צרו קבוצת משאבים חדשה או השתמשו בקיימת. + - Name: ספקו שם לאפליקציית האינטרנט הסטטית שלכם. + - Region: בחרו את האזור הקרוב ביותר למשתמשים שלכם. + +- #### פרטי פריסה: + - Source: בחרו "GitHub". + - GitHub Account: תנו הרשאה ל-Azure לגשת לחשבון GitHub שלכם. + - Organization: בחרו את הארגון שלכם ב-GitHub. + - Repository: בחרו את המאגר שמכיל את אפליקציית האינטרנט הסטטית שלכם. + - Branch: בחרו את הענף שממנו תרצו לפרוס. + +- #### פרטי בנייה: + - Build Presets: בחרו את המסגרת שבה האפליקציה שלכם נבנתה (לדוגמה, React, Angular, Vue וכו'). + - App Location: ציינו את התיקייה שמכילה את קוד האפליקציה שלכם (לדוגמה, / אם היא נמצאת בשורש). + - API Location: אם יש לכם API, ציינו את מיקומו (אופציונלי). + - Output Location: ציינו את התיקייה שבה נוצר פלט הבנייה (לדוגמה, build או dist). + +4. סקירה ויצירה +סקור את ההגדרות שלך ולחץ על "Create". Azure יגדיר את המשאבים הנדרשים וייצור קובץ זרימת עבודה של GitHub Actions במאגר שלך. + +5. זרימת עבודה של GitHub Actions +Azure ייצור באופן אוטומטי קובץ זרימת עבודה של GitHub Actions במאגר שלך (.github/workflows/azure-static-web-apps-.yml). קובץ זה יטפל בתהליך הבנייה והפריסה. + +6. מעקב אחר הפריסה +עברו ללשונית "Actions" במאגר GitHub שלכם. +תוכלו לראות זרימת עבודה פועלת. זרימת עבודה זו תבנה ותפרוס את אפליקציית האינטרנט הסטטית שלכם ל-Azure. +לאחר סיום זרימת העבודה, האפליקציה שלכם תהיה זמינה בכתובת ה-URL שסופקה על ידי Azure. + +### דוגמה לקובץ זרימת עבודה + +הנה דוגמה לאיך קובץ זרימת העבודה של GitHub Actions עשוי להיראות: +name: Azure Static Web Apps CI/CD +``` +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened, closed] + branches: + - main + +jobs: + build_and_deploy_job: + runs-on: ubuntu-latest + name: Build and Deploy Job + steps: + - uses: actions/checkout@v2 + - name: Build And Deploy + id: builddeploy + uses: Azure/static-web-apps-deploy@v1 + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }} + repo_token: ${{ secrets.GITHUB_TOKEN }} + action: "upload" + app_location: "/quiz-app" # App source code path + api_location: ""API source code path optional + output_location: "dist" #Built app content directory - optional +``` + +### משאבים נוספים +- [תיעוד אפליקציות אינטרנט סטטיות של Azure](https://learn.microsoft.com/azure/static-web-apps/getting-started) +- [תיעוד GitHub Actions](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/sketchnotes/LICENSE.md b/translations/he/sketchnotes/LICENSE.md new file mode 100644 index 00000000..41c458b6 --- /dev/null +++ b/translations/he/sketchnotes/LICENSE.md @@ -0,0 +1,106 @@ + +זכויות, אז אתה לא יכול להטיל מגבלות על מימוש הזכויות המוענקות תחת רישיון המותאם שאתה מיישם. + +סעיף 4 -- זכויות בסיס נתונים ייחודיות. + +כאשר הזכויות המורשות כוללות זכויות בסיס נתונים ייחודיות החלות על השימוש שלך בחומר המורשה: + +א. למען הסר ספק, סעיף 2(א)(1) מעניק לך את הזכות לחלץ, להשתמש מחדש, לשכפל ולשתף את כל או חלק משמעותי מתוכן הבסיס נתונים; + +ב. אם אתה כולל את כל או חלק משמעותי מתוכן הבסיס נתונים בבסיס נתונים שבו יש לך זכויות בסיס נתונים ייחודיות, אז הבסיס נתונים שלך חייב להיות מורשה תחת תנאי רישיון זה או רישיון תואם BY-SA (כמוגדר בסעיף 1(ג)). + +סעיף 5 -- אחריות כללית. + +אלא אם כן מוסכם אחרת בכתב, המורשה מספק את החומר המורשה כפי שהוא, ללא אחריות מכל סוג, מפורשת או משתמעת, כולל, אך לא מוגבל, אחריות לסחירות, התאמה למטרה מסוימת, אי-הפרה, או היעדר פגמים נסתרים או אחרים, דיוק, או נוכחות או היעדר שגיאות, בין אם ניתן לגלותם או לא. חלקים מסוימים של סעיף זה עשויים שלא לחול במקרים מסוימים. + +סעיף 6 -- תנאים וסיום. + +א. תקופה. הזכויות המורשות מוענקות לתקופה בלתי מוגבלת תחת תנאי רישיון זה. עם זאת, אם אתה מפר את תנאי רישיון זה, הזכויות המורשות שלך מסתיימות אוטומטית. + +ב. סיום. אם הזכויות המורשות שלך מסתיימות תחת סעיף 6(א), הן עשויות להיות משוחזרות: + +1. באופן אוטומטי אם המורשה מודיע לך על הפרה, בתנאי שאתה מתקן את ההפרה תוך 30 ימים מיום ההודעה; + +2. על ידי המורשה במפורש. + +ג. המשך. סעיפים 1, 5, 6, 7, ו-8 נשארים בתוקף לאחר סיום רישיון זה. + +ד. אין הגבלה על זכויות אחרות. סיום רישיון זה אינו מגביל את זכויותיך תחת כל חריג או הגבלה על זכויות יוצרים או זכויות דומות אחרות. + +סעיף 7 -- תנאים נוספים. + +א. המורשה לא יהיה מחויב או אחראי תחת רישיון זה לכל נזק ישיר, עקיף, מיוחד, עונשי, או תוצאתי, אלא אם כן מוסכם אחרת בכתב. + +ב. אם כל תנאי רישיון זה נחשב בלתי חוקי או בלתי ניתן לאכיפה תחת החוק החל, הוא ייחשב כמתוקן במידה המינימלית הנדרשת כדי להפוך אותו חוקי וניתן לאכיפה. אם התנאי אינו ניתן לתיקון, הוא ייחשב כלא נכלל מרישיון זה מבלי להשפיע על תוקף התנאים הנותרים. + +ג. אין ויתור. שום תנאי או תנאי של רישיון זה לא ייחשב כוויתור ולא ייחשב כוויתור על כל הפרה עתידית של אותו תנאי או תנאי. + +סעיף 8 -- פרשנות. + +א. רישיון זה אינו מפחית, מגביל, או מטיל מגבלות על כל חריג או הגבלה על זכויות יוצרים או זכויות דומות אחרות החלות על השימוש שלך בחומר המורשה. + +ב. רישיון זה יפורש על פי החוק החל, ללא קשר לכל עקרונות סתירה של חוקים. +זכויות, ואז מסד הנתונים שבו יש לך זכויות מסד נתונים ייחודיות (Sui Generis Database Rights) אך לא את התכנים האישיים שלו, נחשב כחומר מותאם, + +כולל לצורך סעיף 3(b); ו +ג. עליך לעמוד בתנאים שבסעיף 3(a) אם אתה משתף את כל או חלק משמעותי מתכני מסד הנתונים. + +למען הסר ספק, סעיף 4 זה משלים ואינו מחליף את התחייבויותיך תחת רישיון ציבורי זה כאשר הזכויות המורשות כוללות זכויות יוצרים וזכויות דומות אחרות. + +סעיף 5 -- כתב ויתור על אחריות והגבלת אחריות. + +א. אלא אם כן הוסכם אחרת בנפרד על ידי מעניק הרישיון, ככל האפשר, מעניק הרישיון מציע את החומר המורשה כפי שהוא וכפי שהוא זמין, ואינו נותן הצהרות או אחריות מכל סוג שהוא בנוגע לחומר המורשה, בין אם מפורשות, משתמעות, סטטוטוריות או אחרות. זה כולל, ללא הגבלה, אחריות על כותרת, סחירות, התאמה למטרה מסוימת, אי-הפרה, היעדר פגמים סמויים או אחרים, דיוק, או נוכחות או היעדר שגיאות, בין אם ידועות או ניתנות לגילוי. במקומות שבהם כתב ויתור על אחריות אינו מותר במלואו או בחלקו, כתב ויתור זה עשוי שלא לחול עליך. + +ב. ככל האפשר, בשום מקרה מעניק הרישיון לא יהיה אחראי כלפיך על פי כל תיאוריה משפטית (כולל, ללא הגבלה, רשלנות) או אחרת על כל הפסדים ישירים, מיוחדים, עקיפים, מקריים, תוצאתיים, עונשיים, דוגמתיים או אחרים, עלויות, הוצאות או נזקים הנובעים מרישיון ציבורי זה או משימוש בחומר המורשה, גם אם מעניק הרישיון הוזהר על האפשרות של הפסדים, עלויות, הוצאות או נזקים כאלה. במקומות שבהם הגבלת אחריות אינה מותרת במלואה או בחלקה, הגבלה זו עשויה שלא לחול עליך. + +ג. כתב הוויתור על אחריות והגבלת האחריות המוצגים לעיל יפורשו באופן שמקרב ככל האפשר לוויתור מוחלט על כל אחריות. + +סעיף 6 -- תקופה וסיום. + +א. רישיון ציבורי זה חל על תקופת זכויות היוצרים וזכויות דומות המורשות כאן. עם זאת, אם אינך עומד ברישיון ציבורי זה, זכויותיך תחת רישיון ציבורי זה מסתיימות באופן אוטומטי. + +ב. כאשר זכותך להשתמש בחומר המורשה הסתיימה תחת סעיף 6(a), היא מתחדשת: + +1. באופן אוטומטי החל מתאריך תיקון ההפרה, בתנאי שהיא תוקנה תוך 30 ימים מגילוי ההפרה; או +2. עם חידוש מפורש על ידי מעניק הרישיון. + +למען הסר ספק, סעיף 6(b) זה אינו משפיע על כל זכות שיש למעניק הרישיון לבקש תרופות להפרותיך של רישיון ציבורי זה. + +ג. למען הסר ספק, מעניק הרישיון רשאי גם להציע את החומר המורשה תחת תנאים או תנאים נפרדים או להפסיק להפיץ את החומר המורשה בכל עת; עם זאת, פעולה זו לא תסיים את רישיון ציבורי זה. + +ד. סעיפים 1, 5, 6, 7 ו-8 נשארים בתוקף לאחר סיום רישיון ציבורי זה. + +סעיף 7 -- תנאים והגבלות נוספים. + +א. מעניק הרישיון לא יהיה מחויב על ידי תנאים או הגבלות נוספים או שונים שהועברו על ידך אלא אם כן הוסכם במפורש. + +ב. כל הסדרים, הבנות או הסכמים בנוגע לחומר המורשה שאינם מצוינים כאן הם נפרדים ועצמאיים מהתנאים וההגבלות של רישיון ציבורי זה. + +סעיף 8 -- פרשנות. + +א. למען הסר ספק, רישיון ציבורי זה אינו, ולא יפורש כמצמצם, מגביל, או מטיל תנאים על כל שימוש בחומר המורשה שניתן לבצע באופן חוקי ללא רשות תחת רישיון ציבורי זה. + +ב. ככל האפשר, אם כל הוראה של רישיון ציבורי זה נחשבת כבלתי ניתנת לאכיפה, היא תתוקן באופן אוטומטי למינימום הנדרש כדי להפוך אותה לאכיפה. אם ההוראה אינה ניתנת לתיקון, היא תופרד מרישיון ציבורי זה מבלי להשפיע על אכיפת התנאים וההגבלות הנותרים. + +ג. שום תנאי או הגבלה של רישיון ציבורי זה לא יוויתרו ושום אי-עמידה לא תתקבל אלא אם כן הוסכם במפורש על ידי מעניק הרישיון. + +ד. שום דבר ברישיון ציבורי זה אינו מהווה או עשוי להתפרש כהגבלה או וויתור על כל זכויות יתר וחסינויות החלות על מעניק הרישיון או עליך, כולל מפני תהליכים משפטיים של כל תחום שיפוט או סמכות. + +======================================================================= + +Creative Commons אינה צד לרישיונות הציבוריים שלה. עם זאת, Creative Commons עשויה לבחור להחיל אחד מהרישיונות הציבוריים שלה על חומר שהיא מפרסמת ובמקרים אלה תיחשב כ"מעניק הרישיון". הטקסט של רישיונות הציבוריים של Creative Commons מוקדש לנחלת הכלל תחת CC0 Public Domain Dedication. למעט למטרות מוגבלות של ציון שחומר משותף תחת רישיון ציבורי של Creative Commons או כפי שמותר אחרת על ידי המדיניות של Creative Commons שפורסמה בכתובת creativecommons.org/policies, Creative Commons אינה מאשרת את השימוש בסימן המסחרי "Creative Commons" או כל סימן מסחרי או לוגו אחר של Creative Commons ללא הסכמה כתובה מראש, כולל, ללא הגבלה, בקשר עם כל שינוי לא מורשה של אחד מהרישיונות הציבוריים שלה או כל הסדרים, הבנות או הסכמים בנוגע לשימוש בחומר מורשה. למען הסר ספק, פסקה זו אינה חלק מהרישיונות הציבוריים. + +ניתן ליצור קשר עם Creative Commons בכתובת creativecommons.org. + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור הסמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/he/sketchnotes/README.md b/translations/he/sketchnotes/README.md new file mode 100644 index 00000000..59f0fe27 --- /dev/null +++ b/translations/he/sketchnotes/README.md @@ -0,0 +1,21 @@ + +כל הסקצ'נוטים של תכנית הלימודים זמינים להורדה כאן. + +🖨 להדפסה באיכות גבוהה, גרסאות TIFF זמינות ב-[מאגר הזה](https://github.com/girliemac/a-picture-is-worth-a-1000-words/tree/main/ml/tiff). + +🎨 נוצר על ידי: [Tomomi Imura](https://github.com/girliemac) (טוויטר: [@girlie_mac](https://twitter.com/girlie_mac)) + +[![CC BY-SA 4.0](https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg)](https://creativecommons.org/licenses/by-sa/4.0/) + +--- + +**כתב ויתור**: +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור הסמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/id/1-Introduction/1-intro-to-ML/README.md b/translations/id/1-Introduction/1-intro-to-ML/README.md new file mode 100644 index 00000000..0cdafbdc --- /dev/null +++ b/translations/id/1-Introduction/1-intro-to-ML/README.md @@ -0,0 +1,159 @@ + +# Pengantar Pembelajaran Mesin + +## [Kuis Pra-Pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +--- + +[![ML untuk Pemula - Pengantar Pembelajaran Mesin untuk Pemula](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](https://youtu.be/6mSx_KJxcHI "ML untuk Pemula - Pengantar Pembelajaran Mesin untuk Pemula") + +> 🎥 Klik gambar di atas untuk video singkat yang membahas pelajaran ini. + +Selamat datang di kursus pembelajaran mesin klasik untuk pemula! Baik Anda benar-benar baru dalam topik ini, atau seorang praktisi ML berpengalaman yang ingin menyegarkan pengetahuan di area tertentu, kami senang Anda bergabung dengan kami! Kami ingin menciptakan tempat awal yang ramah untuk studi ML Anda dan akan senang mengevaluasi, merespons, dan mengintegrasikan [masukan Anda](https://github.com/microsoft/ML-For-Beginners/discussions). + +[![Pengantar ML](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Pengantar ML") + +> 🎥 Klik gambar di atas untuk video: John Guttag dari MIT memperkenalkan pembelajaran mesin + +--- +## Memulai dengan Pembelajaran Mesin + +Sebelum memulai kurikulum ini, Anda perlu memastikan komputer Anda siap untuk menjalankan notebook secara lokal. + +- **Konfigurasikan komputer Anda dengan video ini**. Gunakan tautan berikut untuk mempelajari [cara menginstal Python](https://youtu.be/CXZYvNRIAKM) di sistem Anda dan [menyiapkan editor teks](https://youtu.be/EU8eayHWoZg) untuk pengembangan. +- **Pelajari Python**. Disarankan juga untuk memiliki pemahaman dasar tentang [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), bahasa pemrograman yang berguna bagi ilmuwan data dan yang akan kita gunakan dalam kursus ini. +- **Pelajari Node.js dan JavaScript**. Kami juga menggunakan JavaScript beberapa kali dalam kursus ini saat membangun aplikasi web, jadi Anda perlu menginstal [node](https://nodejs.org) dan [npm](https://www.npmjs.com/), serta memiliki [Visual Studio Code](https://code.visualstudio.com/) untuk pengembangan Python dan JavaScript. +- **Buat akun GitHub**. Karena Anda menemukan kami di [GitHub](https://github.com), Anda mungkin sudah memiliki akun, tetapi jika belum, buatlah satu akun dan kemudian fork kurikulum ini untuk digunakan sendiri. (Jangan ragu untuk memberi kami bintang juga 😊) +- **Jelajahi Scikit-learn**. Kenali [Scikit-learn](https://scikit-learn.org/stable/user_guide.html), kumpulan pustaka ML yang akan kita referensikan dalam pelajaran ini. + +--- +## Apa itu Pembelajaran Mesin? + +Istilah 'pembelajaran mesin' adalah salah satu istilah yang paling populer dan sering digunakan saat ini. Ada kemungkinan besar Anda pernah mendengar istilah ini setidaknya sekali jika Anda memiliki sedikit keterkaitan dengan teknologi, tidak peduli di bidang apa Anda bekerja. Namun, mekanisme pembelajaran mesin adalah misteri bagi kebanyakan orang. Bagi pemula pembelajaran mesin, subjek ini kadang-kadang bisa terasa membingungkan. Oleh karena itu, penting untuk memahami apa sebenarnya pembelajaran mesin itu, dan mempelajarinya langkah demi langkah melalui contoh praktis. + +--- +## Kurva Hype + +![ml hype curve](../../../../1-Introduction/1-intro-to-ML/images/hype.png) + +> Google Trends menunjukkan 'kurva hype' terbaru dari istilah 'pembelajaran mesin' + +--- +## Alam Semesta yang Misterius + +Kita hidup di alam semesta yang penuh dengan misteri yang menakjubkan. Ilmuwan hebat seperti Stephen Hawking, Albert Einstein, dan banyak lainnya telah mendedikasikan hidup mereka untuk mencari informasi bermakna yang mengungkap misteri dunia di sekitar kita. Ini adalah kondisi manusia untuk belajar: seorang anak manusia belajar hal-hal baru dan mengungkap struktur dunia mereka tahun demi tahun saat mereka tumbuh dewasa. + +--- +## Otak Anak + +Otak dan indra seorang anak merasakan fakta-fakta di sekitarnya dan secara bertahap mempelajari pola-pola tersembunyi dalam kehidupan yang membantu anak tersebut menyusun aturan logis untuk mengenali pola-pola yang telah dipelajari. Proses pembelajaran otak manusia membuat manusia menjadi makhluk hidup paling canggih di dunia ini. Belajar secara terus-menerus dengan menemukan pola-pola tersembunyi dan kemudian berinovasi berdasarkan pola-pola tersebut memungkinkan kita untuk menjadi lebih baik sepanjang hidup kita. Kapasitas belajar dan kemampuan berkembang ini terkait dengan konsep yang disebut [plastisitas otak](https://www.simplypsychology.org/brain-plasticity.html). Secara dangkal, kita dapat menarik beberapa kesamaan motivasi antara proses pembelajaran otak manusia dan konsep pembelajaran mesin. + +--- +## Otak Manusia + +[Otak manusia](https://www.livescience.com/29365-human-brain.html) merasakan hal-hal dari dunia nyata, memproses informasi yang dirasakan, membuat keputusan rasional, dan melakukan tindakan tertentu berdasarkan keadaan. Inilah yang kita sebut berperilaku secara cerdas. Ketika kita memprogram tiruan dari proses perilaku cerdas ke sebuah mesin, itu disebut kecerdasan buatan (AI). + +--- +## Beberapa Terminologi + +Meskipun istilah-istilah ini dapat membingungkan, pembelajaran mesin (ML) adalah subset penting dari kecerdasan buatan. **ML berkaitan dengan penggunaan algoritma khusus untuk menemukan informasi bermakna dan menemukan pola tersembunyi dari data yang dirasakan untuk mendukung proses pengambilan keputusan rasional**. + +--- +## AI, ML, Pembelajaran Mendalam + +![AI, ML, pembelajaran mendalam, ilmu data](../../../../1-Introduction/1-intro-to-ML/images/ai-ml-ds.png) + +> Diagram yang menunjukkan hubungan antara AI, ML, pembelajaran mendalam, dan ilmu data. Infografik oleh [Jen Looper](https://twitter.com/jenlooper) terinspirasi oleh [grafik ini](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) + +--- +## Konsep yang Akan Dibahas + +Dalam kurikulum ini, kita akan membahas hanya konsep inti pembelajaran mesin yang harus diketahui oleh pemula. Kita akan membahas apa yang kita sebut 'pembelajaran mesin klasik' terutama menggunakan Scikit-learn, pustaka yang sangat baik yang banyak digunakan oleh siswa untuk mempelajari dasar-dasarnya. Untuk memahami konsep yang lebih luas tentang kecerdasan buatan atau pembelajaran mendalam, pengetahuan dasar yang kuat tentang pembelajaran mesin sangat penting, dan kami ingin menyediakannya di sini. + +--- +## Dalam Kursus Ini Anda Akan Belajar: + +- konsep inti pembelajaran mesin +- sejarah ML +- ML dan keadilan +- teknik regresi ML +- teknik klasifikasi ML +- teknik pengelompokan ML +- teknik pemrosesan bahasa alami ML +- teknik peramalan deret waktu ML +- pembelajaran penguatan +- aplikasi dunia nyata untuk ML + +--- +## Apa yang Tidak Akan Dibahas + +- pembelajaran mendalam +- jaringan saraf +- AI + +Untuk pengalaman belajar yang lebih baik, kami akan menghindari kompleksitas jaringan saraf, 'pembelajaran mendalam' - pembangunan model berlapis-lapis menggunakan jaringan saraf - dan AI, yang akan kita bahas dalam kurikulum yang berbeda. Kami juga akan menawarkan kurikulum ilmu data yang akan datang untuk fokus pada aspek tersebut dari bidang yang lebih besar ini. + +--- +## Mengapa Mempelajari Pembelajaran Mesin? + +Pembelajaran mesin, dari perspektif sistem, didefinisikan sebagai pembuatan sistem otomatis yang dapat mempelajari pola tersembunyi dari data untuk membantu dalam membuat keputusan yang cerdas. + +Motivasi ini secara longgar terinspirasi oleh bagaimana otak manusia mempelajari hal-hal tertentu berdasarkan data yang dirasakannya dari dunia luar. + +✅ Pikirkan sejenak mengapa sebuah bisnis ingin mencoba menggunakan strategi pembelajaran mesin dibandingkan dengan membuat mesin berbasis aturan yang dikodekan secara manual. + +--- +## Aplikasi Pembelajaran Mesin + +Aplikasi pembelajaran mesin sekarang hampir ada di mana-mana, dan sama melimpahnya dengan data yang mengalir di sekitar masyarakat kita, yang dihasilkan oleh ponsel pintar, perangkat yang terhubung, dan sistem lainnya. Mengingat potensi besar algoritma pembelajaran mesin mutakhir, para peneliti telah mengeksplorasi kemampuannya untuk menyelesaikan masalah kehidupan nyata yang multi-dimensi dan multi-disiplin dengan hasil yang sangat positif. + +--- +## Contoh Penerapan ML + +**Anda dapat menggunakan pembelajaran mesin dalam berbagai cara**: + +- Untuk memprediksi kemungkinan penyakit dari riwayat medis atau laporan pasien. +- Untuk memanfaatkan data cuaca guna memprediksi peristiwa cuaca. +- Untuk memahami sentimen dari sebuah teks. +- Untuk mendeteksi berita palsu guna menghentikan penyebaran propaganda. + +Keuangan, ekonomi, ilmu bumi, eksplorasi luar angkasa, teknik biomedis, ilmu kognitif, dan bahkan bidang humaniora telah mengadaptasi pembelajaran mesin untuk menyelesaikan masalah berat yang melibatkan pemrosesan data di domain mereka. + +--- +## Kesimpulan + +Pembelajaran mesin mengotomatisasi proses penemuan pola dengan menemukan wawasan bermakna dari data dunia nyata atau data yang dihasilkan. Ini telah terbukti sangat berharga dalam aplikasi bisnis, kesehatan, dan keuangan, di antara lainnya. + +Di masa depan, memahami dasar-dasar pembelajaran mesin akan menjadi keharusan bagi orang-orang dari berbagai bidang karena adopsinya yang luas. + +--- +# 🚀 Tantangan + +Gambarkan, di atas kertas atau menggunakan aplikasi online seperti [Excalidraw](https://excalidraw.com/), pemahaman Anda tentang perbedaan antara AI, ML, pembelajaran mendalam, dan ilmu data. Tambahkan beberapa ide tentang masalah yang baik untuk diselesaikan oleh masing-masing teknik ini. + +# [Kuis Pasca-Pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +--- +# Tinjauan & Studi Mandiri + +Untuk mempelajari lebih lanjut tentang bagaimana Anda dapat bekerja dengan algoritma ML di cloud, ikuti [Learning Path](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott) ini. + +Ikuti [Learning Path](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) tentang dasar-dasar ML. + +--- +# Tugas + +[Mulai dan jalankan](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/1-Introduction/1-intro-to-ML/assignment.md b/translations/id/1-Introduction/1-intro-to-ML/assignment.md new file mode 100644 index 00000000..37614684 --- /dev/null +++ b/translations/id/1-Introduction/1-intro-to-ML/assignment.md @@ -0,0 +1,23 @@ + +# Memulai dan Berjalan + +## Instruksi + +Dalam tugas yang tidak dinilai ini, Anda harus menyegarkan kembali pengetahuan tentang Python dan menyiapkan lingkungan Anda agar dapat menjalankan notebook. + +Ikuti [Jalur Pembelajaran Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), lalu siapkan sistem Anda dengan menonton video pengantar berikut: + +https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/1-Introduction/2-history-of-ML/README.md b/translations/id/1-Introduction/2-history-of-ML/README.md new file mode 100644 index 00000000..b288fb43 --- /dev/null +++ b/translations/id/1-Introduction/2-history-of-ML/README.md @@ -0,0 +1,164 @@ + +# Sejarah Pembelajaran Mesin + +![Ringkasan Sejarah Pembelajaran Mesin dalam bentuk sketchnote](../../../../sketchnotes/ml-history.png) +> Sketchnote oleh [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [Kuis Pra-Pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +--- + +[![ML untuk Pemula - Sejarah Pembelajaran Mesin](https://img.youtube.com/vi/N6wxM4wZ7V0/0.jpg)](https://youtu.be/N6wxM4wZ7V0 "ML untuk Pemula - Sejarah Pembelajaran Mesin") + +> 🎥 Klik gambar di atas untuk video singkat yang membahas pelajaran ini. + +Dalam pelajaran ini, kita akan membahas tonggak-tonggak utama dalam sejarah pembelajaran mesin dan kecerdasan buatan. + +Sejarah kecerdasan buatan (AI) sebagai bidang ilmu sangat terkait dengan sejarah pembelajaran mesin, karena algoritma dan kemajuan komputasi yang mendasari ML berkontribusi pada pengembangan AI. Penting untuk diingat bahwa, meskipun bidang-bidang ini sebagai area penelitian yang terpisah mulai terbentuk pada tahun 1950-an, [penemuan algoritmik, statistik, matematis, komputasi, dan teknis](https://wikipedia.org/wiki/Timeline_of_machine_learning) yang penting telah ada sebelumnya dan saling tumpang tindih. Faktanya, manusia telah memikirkan pertanyaan-pertanyaan ini selama [ratusan tahun](https://wikipedia.org/wiki/History_of_artificial_intelligence): artikel ini membahas dasar intelektual historis dari gagasan tentang 'mesin yang dapat berpikir.' + +--- +## Penemuan Penting + +- 1763, 1812 [Teorema Bayes](https://wikipedia.org/wiki/Bayes%27_theorem) dan pendahulunya. Teorema ini dan aplikasinya mendasari inferensi, menggambarkan probabilitas suatu peristiwa terjadi berdasarkan pengetahuan sebelumnya. +- 1805 [Teori Kuadrat Terkecil](https://wikipedia.org/wiki/Least_squares) oleh matematikawan Prancis Adrien-Marie Legendre. Teori ini, yang akan Anda pelajari dalam unit Regresi, membantu dalam pencocokan data. +- 1913 [Rantai Markov](https://wikipedia.org/wiki/Markov_chain), dinamai dari matematikawan Rusia Andrey Markov, digunakan untuk menggambarkan urutan kemungkinan peristiwa berdasarkan keadaan sebelumnya. +- 1957 [Perceptron](https://wikipedia.org/wiki/Perceptron) adalah jenis pengklasifikasi linear yang ditemukan oleh psikolog Amerika Frank Rosenblatt yang mendasari kemajuan dalam pembelajaran mendalam. + +--- + +- 1967 [Tetangga Terdekat](https://wikipedia.org/wiki/Nearest_neighbor) adalah algoritma yang awalnya dirancang untuk memetakan rute. Dalam konteks ML, algoritma ini digunakan untuk mendeteksi pola. +- 1970 [Backpropagation](https://wikipedia.org/wiki/Backpropagation) digunakan untuk melatih [jaringan saraf feedforward](https://wikipedia.org/wiki/Feedforward_neural_network). +- 1982 [Jaringan Saraf Rekuren](https://wikipedia.org/wiki/Recurrent_neural_network) adalah jaringan saraf buatan yang berasal dari jaringan saraf feedforward yang menciptakan grafik temporal. + +✅ Lakukan sedikit penelitian. Tanggal apa lagi yang menurut Anda penting dalam sejarah ML dan AI? + +--- +## 1950: Mesin yang Berpikir + +Alan Turing, seorang tokoh luar biasa yang dipilih [oleh publik pada tahun 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) sebagai ilmuwan terbesar abad ke-20, dianggap membantu meletakkan dasar untuk konsep 'mesin yang dapat berpikir.' Ia menghadapi skeptisisme dan kebutuhan pribadinya akan bukti empiris tentang konsep ini sebagian dengan menciptakan [Tes Turing](https://www.bbc.com/news/technology-18475646), yang akan Anda pelajari dalam pelajaran NLP kami. + +--- +## 1956: Proyek Penelitian Musim Panas Dartmouth + +"Proyek Penelitian Musim Panas Dartmouth tentang kecerdasan buatan adalah peristiwa penting bagi kecerdasan buatan sebagai bidang," dan di sinilah istilah 'kecerdasan buatan' pertama kali diciptakan ([sumber](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). + +> Setiap aspek pembelajaran atau fitur kecerdasan lainnya pada prinsipnya dapat dijelaskan dengan sangat tepat sehingga sebuah mesin dapat dibuat untuk mensimulasikannya. + +--- + +Peneliti utama, profesor matematika John McCarthy, berharap "untuk melanjutkan berdasarkan dugaan bahwa setiap aspek pembelajaran atau fitur kecerdasan lainnya pada prinsipnya dapat dijelaskan dengan sangat tepat sehingga sebuah mesin dapat dibuat untuk mensimulasikannya." Para peserta termasuk tokoh terkenal lainnya di bidang ini, Marvin Minsky. + +Lokakarya ini dianggap telah memulai dan mendorong beberapa diskusi termasuk "kemunculan metode simbolik, sistem yang berfokus pada domain terbatas (sistem pakar awal), dan sistem deduktif versus sistem induktif." ([sumber](https://wikipedia.org/wiki/Dartmouth_workshop)). + +--- +## 1956 - 1974: "Tahun-tahun Emas" + +Dari tahun 1950-an hingga pertengahan '70-an, optimisme tinggi bahwa AI dapat menyelesaikan banyak masalah. Pada tahun 1967, Marvin Minsky dengan percaya diri menyatakan bahwa "Dalam satu generasi ... masalah menciptakan 'kecerdasan buatan' akan secara substansial terpecahkan." (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) + +Penelitian pemrosesan bahasa alami berkembang pesat, pencarian disempurnakan dan dibuat lebih kuat, dan konsep 'dunia mikro' diciptakan, di mana tugas-tugas sederhana diselesaikan menggunakan instruksi bahasa biasa. + +--- + +Penelitian didanai dengan baik oleh lembaga pemerintah, kemajuan dibuat dalam komputasi dan algoritma, dan prototipe mesin cerdas dibangun. Beberapa mesin ini termasuk: + +* [Shakey the robot](https://wikipedia.org/wiki/Shakey_the_robot), yang dapat bermanuver dan memutuskan cara melakukan tugas secara 'cerdas'. + + ![Shakey, robot cerdas](../../../../1-Introduction/2-history-of-ML/images/shakey.jpg) + > Shakey pada tahun 1972 + +--- + +* Eliza, 'chatterbot' awal, dapat berbicara dengan orang dan bertindak sebagai 'terapis' primitif. Anda akan belajar lebih banyak tentang Eliza dalam pelajaran NLP. + + ![Eliza, bot](../../../../1-Introduction/2-history-of-ML/images/eliza.png) + > Versi Eliza, chatbot + +--- + +* "Blocks world" adalah contoh dunia mikro di mana balok dapat ditumpuk dan diurutkan, dan eksperimen dalam mengajarkan mesin untuk membuat keputusan dapat diuji. Kemajuan yang dibangun dengan pustaka seperti [SHRDLU](https://wikipedia.org/wiki/SHRDLU) membantu mendorong pemrosesan bahasa ke depan. + + [![blocks world dengan SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "blocks world dengan SHRDLU") + + > 🎥 Klik gambar di atas untuk video: Blocks world dengan SHRDLU + +--- +## 1974 - 1980: "Musim Dingin AI" + +Pada pertengahan 1970-an, menjadi jelas bahwa kompleksitas membuat 'mesin cerdas' telah diremehkan dan janji-janji yang diberikan, mengingat kekuatan komputasi yang tersedia, telah dilebih-lebihkan. Pendanaan mengering dan kepercayaan pada bidang ini melambat. Beberapa masalah yang memengaruhi kepercayaan meliputi: +--- +- **Keterbatasan**. Kekuatan komputasi terlalu terbatas. +- **Ledakan kombinatorial**. Jumlah parameter yang perlu dilatih tumbuh secara eksponensial seiring dengan meningkatnya permintaan pada komputer, tanpa evolusi paralel dari kekuatan dan kemampuan komputasi. +- **Kekurangan data**. Kekurangan data menghambat proses pengujian, pengembangan, dan penyempurnaan algoritma. +- **Apakah kita mengajukan pertanyaan yang tepat?**. Pertanyaan yang diajukan mulai dipertanyakan. Peneliti mulai menghadapi kritik terhadap pendekatan mereka: + - Tes Turing dipertanyakan melalui, antara lain, teori 'ruang Cina' yang menyatakan bahwa, "memprogram komputer digital mungkin membuatnya tampak memahami bahasa tetapi tidak dapat menghasilkan pemahaman nyata." ([sumber](https://plato.stanford.edu/entries/chinese-room/)) + - Etika memperkenalkan kecerdasan buatan seperti "terapis" ELIZA ke dalam masyarakat diperdebatkan. + +--- + +Pada saat yang sama, berbagai aliran pemikiran AI mulai terbentuk. Sebuah dikotomi muncul antara praktik ["AI berantakan" vs. "AI rapi"](https://wikipedia.org/wiki/Neats_and_scruffies). Laboratorium _berantakan_ mengutak-atik program selama berjam-jam hingga mendapatkan hasil yang diinginkan. Laboratorium _rapi_ "berfokus pada logika dan pemecahan masalah formal". ELIZA dan SHRDLU adalah sistem _berantakan_ yang terkenal. Pada tahun 1980-an, ketika muncul permintaan untuk membuat sistem ML dapat direproduksi, pendekatan _rapi_ secara bertahap menjadi yang terdepan karena hasilnya lebih dapat dijelaskan. + +--- +## Sistem Pakar 1980-an + +Seiring berkembangnya bidang ini, manfaatnya bagi bisnis menjadi lebih jelas, dan pada tahun 1980-an begitu pula proliferasi 'sistem pakar'. "Sistem pakar adalah salah satu bentuk perangkat lunak kecerdasan buatan (AI) yang pertama benar-benar sukses." ([sumber](https://wikipedia.org/wiki/Expert_system)). + +Jenis sistem ini sebenarnya _hibrida_, terdiri sebagian dari mesin aturan yang mendefinisikan persyaratan bisnis, dan mesin inferensi yang memanfaatkan sistem aturan untuk menyimpulkan fakta baru. + +Era ini juga melihat perhatian yang semakin besar terhadap jaringan saraf. + +--- +## 1987 - 1993: 'Pendinginan' AI + +Proliferasi perangkat keras sistem pakar yang khusus memiliki efek yang tidak menguntungkan karena menjadi terlalu khusus. Munculnya komputer pribadi juga bersaing dengan sistem besar, khusus, dan terpusat ini. Demokratisasi komputasi telah dimulai, dan akhirnya membuka jalan bagi ledakan data besar modern. + +--- +## 1993 - 2011 + +Era ini melihat babak baru bagi ML dan AI untuk dapat menyelesaikan beberapa masalah yang sebelumnya disebabkan oleh kurangnya data dan kekuatan komputasi. Jumlah data mulai meningkat pesat dan menjadi lebih tersedia secara luas, baik untuk keuntungan maupun kerugian, terutama dengan munculnya smartphone sekitar tahun 2007. Kekuatan komputasi berkembang secara eksponensial, dan algoritma berevolusi seiring waktu. Bidang ini mulai mencapai kematangan saat masa-masa bebas sebelumnya mulai mengkristal menjadi disiplin yang sebenarnya. + +--- +## Sekarang + +Saat ini pembelajaran mesin dan AI menyentuh hampir setiap bagian dari kehidupan kita. Era ini menyerukan pemahaman yang hati-hati tentang risiko dan dampak potensial dari algoritma ini terhadap kehidupan manusia. Seperti yang dinyatakan oleh Brad Smith dari Microsoft, "Teknologi informasi menimbulkan masalah yang menyentuh inti perlindungan hak asasi manusia fundamental seperti privasi dan kebebasan berekspresi. Masalah-masalah ini meningkatkan tanggung jawab bagi perusahaan teknologi yang menciptakan produk ini. Menurut pandangan kami, masalah ini juga menyerukan regulasi pemerintah yang bijaksana dan pengembangan norma-norma tentang penggunaan yang dapat diterima" ([sumber](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). + +--- + +Masih harus dilihat apa yang akan terjadi di masa depan, tetapi penting untuk memahami sistem komputer ini serta perangkat lunak dan algoritma yang mereka jalankan. Kami berharap kurikulum ini akan membantu Anda mendapatkan pemahaman yang lebih baik sehingga Anda dapat memutuskan sendiri. + +[![Sejarah pembelajaran mendalam](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 "Sejarah pembelajaran mendalam") +> 🎥 Klik gambar di atas untuk video: Yann LeCun membahas sejarah pembelajaran mendalam dalam kuliah ini + +--- +## 🚀Tantangan + +Telusuri salah satu momen sejarah ini dan pelajari lebih lanjut tentang orang-orang di baliknya. Ada karakter-karakter yang menarik, dan tidak ada penemuan ilmiah yang pernah dibuat dalam kekosongan budaya. Apa yang Anda temukan? + +## [Kuis Pasca-Pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +--- +## Tinjauan & Studi Mandiri + +Berikut adalah item untuk ditonton dan didengarkan: + +[Podcast ini di mana Amy Boyd membahas evolusi AI](http://runasradio.com/Shows/Show/739) + +[![Sejarah AI oleh Amy Boyd](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "Sejarah AI oleh Amy Boyd") + +--- + +## Tugas + +[Buat garis waktu](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/1-Introduction/2-history-of-ML/assignment.md b/translations/id/1-Introduction/2-history-of-ML/assignment.md new file mode 100644 index 00000000..98bcc9e5 --- /dev/null +++ b/translations/id/1-Introduction/2-history-of-ML/assignment.md @@ -0,0 +1,25 @@ + +# Buat sebuah garis waktu + +## Instruksi + +Menggunakan [repo ini](https://github.com/Digital-Humanities-Toolkit/timeline-builder), buatlah sebuah garis waktu tentang salah satu aspek dari sejarah algoritma, matematika, statistik, AI, atau ML, atau kombinasi dari semuanya. Anda dapat fokus pada satu orang, satu ide, atau rentang waktu panjang dari pemikiran. Pastikan untuk menambahkan elemen multimedia. + +## Rubrik + +| Kriteria | Luar Biasa | Memadai | Perlu Peningkatan | +| -------- | ------------------------------------------------- | --------------------------------------- | ---------------------------------------------------------------- | +| | Garis waktu yang sudah diterapkan disajikan sebagai halaman GitHub | Kode tidak lengkap dan belum diterapkan | Garis waktu tidak lengkap, kurang riset, dan belum diterapkan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/1-Introduction/3-fairness/README.md b/translations/id/1-Introduction/3-fairness/README.md new file mode 100644 index 00000000..1db4108b --- /dev/null +++ b/translations/id/1-Introduction/3-fairness/README.md @@ -0,0 +1,170 @@ + +# Membangun Solusi Machine Learning dengan AI yang Bertanggung Jawab + +![Ringkasan AI yang bertanggung jawab dalam Machine Learning dalam bentuk sketchnote](../../../../sketchnotes/ml-fairness.png) +> Sketchnote oleh [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [Kuis Pra-Pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Pendahuluan + +Dalam kurikulum ini, Anda akan mulai memahami bagaimana machine learning dapat dan sedang memengaruhi kehidupan kita sehari-hari. Bahkan saat ini, sistem dan model terlibat dalam tugas pengambilan keputusan harian, seperti diagnosis kesehatan, persetujuan pinjaman, atau mendeteksi penipuan. Oleh karena itu, penting bahwa model-model ini bekerja dengan baik untuk memberikan hasil yang dapat dipercaya. Sama seperti aplikasi perangkat lunak lainnya, sistem AI dapat meleset dari ekspektasi atau menghasilkan hasil yang tidak diinginkan. Itulah mengapa penting untuk memahami dan menjelaskan perilaku model AI. + +Bayangkan apa yang bisa terjadi ketika data yang Anda gunakan untuk membangun model ini tidak mencakup demografi tertentu, seperti ras, gender, pandangan politik, agama, atau secara tidak proporsional mewakili demografi tersebut. Bagaimana jika output model diinterpretasikan untuk menguntungkan beberapa demografi? Apa konsekuensinya bagi aplikasi tersebut? Selain itu, apa yang terjadi ketika model menghasilkan hasil yang merugikan dan membahayakan orang? Siapa yang bertanggung jawab atas perilaku sistem AI? Ini adalah beberapa pertanyaan yang akan kita eksplorasi dalam kurikulum ini. + +Dalam pelajaran ini, Anda akan: + +- Meningkatkan kesadaran tentang pentingnya keadilan dalam machine learning dan dampak terkait keadilan. +- Mengenal praktik eksplorasi outlier dan skenario tidak biasa untuk memastikan keandalan dan keamanan. +- Memahami kebutuhan untuk memberdayakan semua orang dengan merancang sistem yang inklusif. +- Mengeksplorasi betapa pentingnya melindungi privasi dan keamanan data serta individu. +- Melihat pentingnya pendekatan transparan untuk menjelaskan perilaku model AI. +- Menyadari bahwa akuntabilitas sangat penting untuk membangun kepercayaan pada sistem AI. + +## Prasyarat + +Sebagai prasyarat, silakan ikuti "Responsible AI Principles" Learn Path dan tonton video di bawah ini tentang topik tersebut: + +Pelajari lebih lanjut tentang AI yang Bertanggung Jawab dengan mengikuti [Learning Path](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) + +[![Pendekatan Microsoft terhadap AI yang Bertanggung Jawab](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Pendekatan Microsoft terhadap AI yang Bertanggung Jawab") + +> 🎥 Klik gambar di atas untuk video: Pendekatan Microsoft terhadap AI yang Bertanggung Jawab + +## Keadilan + +Sistem AI harus memperlakukan semua orang secara adil dan menghindari memengaruhi kelompok orang yang serupa dengan cara yang berbeda. Misalnya, ketika sistem AI memberikan panduan tentang pengobatan medis, aplikasi pinjaman, atau pekerjaan, mereka harus memberikan rekomendasi yang sama kepada semua orang dengan gejala, keadaan finansial, atau kualifikasi profesional yang serupa. Setiap dari kita sebagai manusia membawa bias yang diwarisi yang memengaruhi keputusan dan tindakan kita. Bias ini dapat terlihat dalam data yang kita gunakan untuk melatih sistem AI. Manipulasi semacam itu terkadang terjadi secara tidak sengaja. Sering kali sulit untuk secara sadar mengetahui kapan Anda memperkenalkan bias dalam data. + +**“Ketidakadilan”** mencakup dampak negatif, atau “kerugian”, bagi sekelompok orang, seperti yang didefinisikan dalam hal ras, gender, usia, atau status disabilitas. Kerugian utama terkait keadilan dapat diklasifikasikan sebagai: + +- **Distribusi**, jika gender atau etnis tertentu, misalnya, lebih diuntungkan dibandingkan yang lain. +- **Kualitas layanan**. Jika Anda melatih data untuk satu skenario spesifik tetapi kenyataannya jauh lebih kompleks, ini menghasilkan layanan yang berkinerja buruk. Misalnya, dispenser sabun tangan yang tidak dapat mendeteksi orang dengan kulit gelap. [Referensi](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) +- **Pelecehan**. Mengkritik atau melabeli sesuatu atau seseorang secara tidak adil. Misalnya, teknologi pelabelan gambar yang secara keliru melabeli gambar orang berkulit gelap sebagai gorila. +- **Representasi berlebihan atau kurang**. Ide bahwa kelompok tertentu tidak terlihat dalam profesi tertentu, dan layanan atau fungsi apa pun yang terus mempromosikan hal itu berkontribusi pada kerugian. +- **Stereotip**. Mengaitkan atribut yang telah ditentukan sebelumnya dengan kelompok tertentu. Misalnya, sistem penerjemahan bahasa antara Inggris dan Turki mungkin memiliki ketidakakuratan karena kata-kata dengan asosiasi stereotip terhadap gender. + +![terjemahan ke Turki](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png) +> terjemahan ke Turki + +![terjemahan kembali ke Inggris](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png) +> terjemahan kembali ke Inggris + +Saat merancang dan menguji sistem AI, kita perlu memastikan bahwa AI adil dan tidak diprogram untuk membuat keputusan yang bias atau diskriminatif, yang juga dilarang dilakukan oleh manusia. Menjamin keadilan dalam AI dan machine learning tetap menjadi tantangan sosial-teknis yang kompleks. + +### Keandalan dan keamanan + +Untuk membangun kepercayaan, sistem AI perlu dapat diandalkan, aman, dan konsisten dalam kondisi normal maupun tak terduga. Penting untuk mengetahui bagaimana sistem AI akan berperilaku dalam berbagai situasi, terutama ketika mereka berada di luar batas normal. Saat membangun solusi AI, perlu ada fokus yang substansial pada bagaimana menangani berbagai keadaan yang mungkin dihadapi oleh solusi AI tersebut. Misalnya, mobil tanpa pengemudi harus mengutamakan keselamatan orang. Akibatnya, AI yang menggerakkan mobil harus mempertimbangkan semua kemungkinan skenario yang dapat dihadapi mobil, seperti malam hari, badai petir atau badai salju, anak-anak berlari di jalan, hewan peliharaan, konstruksi jalan, dll. Seberapa baik sistem AI dapat menangani berbagai kondisi secara andal dan aman mencerminkan tingkat antisipasi yang dipertimbangkan oleh ilmuwan data atau pengembang AI selama desain atau pengujian sistem. + +> [🎥 Klik di sini untuk video: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl) + +### Inklusivitas + +Sistem AI harus dirancang untuk melibatkan dan memberdayakan semua orang. Saat merancang dan mengimplementasikan sistem AI, ilmuwan data dan pengembang AI mengidentifikasi dan mengatasi hambatan potensial dalam sistem yang dapat secara tidak sengaja mengecualikan orang. Misalnya, ada 1 miliar orang dengan disabilitas di seluruh dunia. Dengan kemajuan AI, mereka dapat mengakses berbagai informasi dan peluang dengan lebih mudah dalam kehidupan sehari-hari mereka. Dengan mengatasi hambatan tersebut, tercipta peluang untuk berinovasi dan mengembangkan produk AI dengan pengalaman yang lebih baik yang menguntungkan semua orang. + +> [🎥 Klik di sini untuk video: inklusivitas dalam AI](https://www.microsoft.com/videoplayer/embed/RE4vl9v) + +### Keamanan dan privasi + +Sistem AI harus aman dan menghormati privasi orang. Orang memiliki kepercayaan yang lebih rendah pada sistem yang membahayakan privasi, informasi, atau kehidupan mereka. Saat melatih model machine learning, kita mengandalkan data untuk menghasilkan hasil terbaik. Dalam melakukannya, asal dan integritas data harus dipertimbangkan. Misalnya, apakah data dikirimkan oleh pengguna atau tersedia secara publik? Selanjutnya, saat bekerja dengan data, sangat penting untuk mengembangkan sistem AI yang dapat melindungi informasi rahasia dan tahan terhadap serangan. Seiring dengan semakin meluasnya penggunaan AI, melindungi privasi dan mengamankan informasi pribadi serta bisnis yang penting menjadi semakin kritis dan kompleks. Masalah privasi dan keamanan data memerlukan perhatian khusus untuk AI karena akses ke data sangat penting bagi sistem AI untuk membuat prediksi dan keputusan yang akurat dan terinformasi tentang orang. + +> [🎥 Klik di sini untuk video: keamanan dalam AI](https://www.microsoft.com/videoplayer/embed/RE4voJF) + +- Sebagai industri, kita telah membuat kemajuan signifikan dalam privasi & keamanan, yang didorong secara signifikan oleh regulasi seperti GDPR (General Data Protection Regulation). +- Namun, dengan sistem AI, kita harus mengakui adanya ketegangan antara kebutuhan akan data pribadi yang lebih banyak untuk membuat sistem lebih personal dan efektif – dan privasi. +- Sama seperti dengan lahirnya komputer yang terhubung dengan internet, kita juga melihat peningkatan besar dalam jumlah masalah keamanan terkait AI. +- Pada saat yang sama, kita telah melihat AI digunakan untuk meningkatkan keamanan. Sebagai contoh, sebagian besar pemindai antivirus modern didukung oleh heuristik AI saat ini. +- Kita perlu memastikan bahwa proses Data Science kita berpadu harmonis dengan praktik privasi dan keamanan terbaru. + +### Transparansi + +Sistem AI harus dapat dipahami. Bagian penting dari transparansi adalah menjelaskan perilaku sistem AI dan komponennya. Meningkatkan pemahaman tentang sistem AI membutuhkan para pemangku kepentingan untuk memahami bagaimana dan mengapa mereka berfungsi sehingga mereka dapat mengidentifikasi potensi masalah kinerja, kekhawatiran keamanan dan privasi, bias, praktik eksklusif, atau hasil yang tidak diinginkan. Kami juga percaya bahwa mereka yang menggunakan sistem AI harus jujur dan terbuka tentang kapan, mengapa, dan bagaimana mereka memilih untuk menerapkannya, serta keterbatasan sistem yang mereka gunakan. Misalnya, jika sebuah bank menggunakan sistem AI untuk mendukung keputusan pemberian pinjaman konsumen, penting untuk memeriksa hasilnya dan memahami data mana yang memengaruhi rekomendasi sistem. Pemerintah mulai mengatur AI di berbagai industri, sehingga ilmuwan data dan organisasi harus menjelaskan apakah sistem AI memenuhi persyaratan regulasi, terutama ketika ada hasil yang tidak diinginkan. + +> [🎥 Klik di sini untuk video: transparansi dalam AI](https://www.microsoft.com/videoplayer/embed/RE4voJF) + +- Karena sistem AI sangat kompleks, sulit untuk memahami cara kerjanya dan menafsirkan hasilnya. +- Kurangnya pemahaman ini memengaruhi cara sistem ini dikelola, dioperasikan, dan didokumentasikan. +- Lebih penting lagi, kurangnya pemahaman ini memengaruhi keputusan yang dibuat menggunakan hasil yang dihasilkan oleh sistem ini. + +### Akuntabilitas + +Orang-orang yang merancang dan menerapkan sistem AI harus bertanggung jawab atas cara sistem mereka beroperasi. Kebutuhan akan akuntabilitas sangat penting dengan teknologi yang sensitif seperti pengenalan wajah. Baru-baru ini, ada permintaan yang meningkat untuk teknologi pengenalan wajah, terutama dari organisasi penegak hukum yang melihat potensi teknologi ini dalam penggunaan seperti menemukan anak-anak yang hilang. Namun, teknologi ini berpotensi digunakan oleh pemerintah untuk membahayakan kebebasan fundamental warganya, misalnya, dengan memungkinkan pengawasan terus-menerus terhadap individu tertentu. Oleh karena itu, ilmuwan data dan organisasi perlu bertanggung jawab atas bagaimana sistem AI mereka memengaruhi individu atau masyarakat. + +[![Peneliti AI Terkemuka Memperingatkan Pengawasan Massal Melalui Pengenalan Wajah](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Pendekatan Microsoft terhadap AI yang Bertanggung Jawab") + +> 🎥 Klik gambar di atas untuk video: Peringatan Pengawasan Massal Melalui Pengenalan Wajah + +Pada akhirnya, salah satu pertanyaan terbesar untuk generasi kita, sebagai generasi pertama yang membawa AI ke masyarakat, adalah bagaimana memastikan bahwa komputer tetap bertanggung jawab kepada manusia dan bagaimana memastikan bahwa orang-orang yang merancang komputer tetap bertanggung jawab kepada semua orang. + +## Penilaian Dampak + +Sebelum melatih model machine learning, penting untuk melakukan penilaian dampak untuk memahami tujuan sistem AI; apa penggunaan yang dimaksudkan; di mana sistem akan diterapkan; dan siapa yang akan berinteraksi dengan sistem tersebut. Hal ini membantu peninjau atau penguji mengevaluasi sistem untuk mengetahui faktor-faktor yang perlu dipertimbangkan saat mengidentifikasi risiko potensial dan konsekuensi yang diharapkan. + +Berikut adalah area fokus saat melakukan penilaian dampak: + +* **Dampak buruk pada individu**. Menyadari adanya pembatasan atau persyaratan, penggunaan yang tidak didukung, atau keterbatasan yang diketahui yang menghambat kinerja sistem sangat penting untuk memastikan bahwa sistem tidak digunakan dengan cara yang dapat merugikan individu. +* **Persyaratan data**. Memahami bagaimana dan di mana sistem akan menggunakan data memungkinkan peninjau untuk mengeksplorasi persyaratan data apa yang perlu diperhatikan (misalnya, regulasi data GDPR atau HIPPA). Selain itu, periksa apakah sumber atau jumlah data cukup untuk pelatihan. +* **Ringkasan dampak**. Kumpulkan daftar potensi kerugian yang dapat timbul dari penggunaan sistem. Sepanjang siklus hidup ML, tinjau apakah masalah yang diidentifikasi telah diatasi atau diminimalkan. +* **Tujuan yang berlaku** untuk masing-masing dari enam prinsip inti. Tinjau apakah tujuan dari setiap prinsip telah terpenuhi dan apakah ada celah. + +## Debugging dengan AI yang Bertanggung Jawab + +Seperti debugging aplikasi perangkat lunak, debugging sistem AI adalah proses yang diperlukan untuk mengidentifikasi dan menyelesaikan masalah dalam sistem. Ada banyak faktor yang dapat memengaruhi model tidak berkinerja seperti yang diharapkan atau secara bertanggung jawab. Sebagian besar metrik kinerja model tradisional adalah agregat kuantitatif dari kinerja model, yang tidak cukup untuk menganalisis bagaimana model melanggar prinsip AI yang bertanggung jawab. Selain itu, model machine learning adalah kotak hitam yang membuatnya sulit untuk memahami apa yang mendorong hasilnya atau memberikan penjelasan ketika terjadi kesalahan. Nanti dalam kursus ini, kita akan belajar bagaimana menggunakan dashboard AI yang Bertanggung Jawab untuk membantu debugging sistem AI. Dashboard ini menyediakan alat holistik bagi ilmuwan data dan pengembang AI untuk melakukan: + +* **Analisis kesalahan**. Untuk mengidentifikasi distribusi kesalahan model yang dapat memengaruhi keadilan atau keandalan sistem. +* **Ikhtisar model**. Untuk menemukan di mana terdapat disparitas dalam kinerja model di berbagai kelompok data. +* **Analisis data**. Untuk memahami distribusi data dan mengidentifikasi potensi bias dalam data yang dapat menyebabkan masalah keadilan, inklusivitas, dan keandalan. +* **Interpretabilitas model**. Untuk memahami apa yang memengaruhi atau memengaruhi prediksi model. Ini membantu menjelaskan perilaku model, yang penting untuk transparansi dan akuntabilitas. + +## 🚀 Tantangan + +Untuk mencegah kerugian diperkenalkan sejak awal, kita harus: + +- memiliki keragaman latar belakang dan perspektif di antara orang-orang yang bekerja pada sistem +- berinvestasi dalam dataset yang mencerminkan keragaman masyarakat kita +- mengembangkan metode yang lebih baik di seluruh siklus hidup machine learning untuk mendeteksi dan memperbaiki AI yang bertanggung jawab saat terjadi + +Pikirkan skenario kehidupan nyata di mana ketidakpercayaan model terlihat dalam pembangunan dan penggunaan model. Apa lagi yang harus kita pertimbangkan? + +## [Kuis Pasca-Pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Tinjauan & Studi Mandiri + +Dalam pelajaran ini, Anda telah mempelajari beberapa dasar konsep keadilan dan ketidakadilan dalam machine learning. +Tonton lokakarya ini untuk mendalami topik berikut: + +- Mengejar AI yang bertanggung jawab: Menerapkan prinsip ke dalam praktik oleh Besmira Nushi, Mehrnoosh Sameki, dan Amit Sharma + +[![Responsible AI Toolbox: Kerangka kerja open-source untuk membangun AI yang bertanggung jawab](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Kerangka kerja open-source untuk membangun AI yang bertanggung jawab") + +> 🎥 Klik gambar di atas untuk menonton video: RAI Toolbox: Kerangka kerja open-source untuk membangun AI yang bertanggung jawab oleh Besmira Nushi, Mehrnoosh Sameki, dan Amit Sharma + +Selain itu, baca: + +- Pusat sumber daya RAI Microsoft: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- Kelompok penelitian FATE Microsoft: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) + +RAI Toolbox: + +- [Repositori GitHub Responsible AI Toolbox](https://github.com/microsoft/responsible-ai-toolbox) + +Baca tentang alat Azure Machine Learning untuk memastikan keadilan: + +- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) + +## Tugas + +[Eksplorasi RAI Toolbox](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diperhatikan bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/1-Introduction/3-fairness/assignment.md b/translations/id/1-Introduction/3-fairness/assignment.md new file mode 100644 index 00000000..afb21da4 --- /dev/null +++ b/translations/id/1-Introduction/3-fairness/assignment.md @@ -0,0 +1,25 @@ + +# Jelajahi Responsible AI Toolbox + +## Instruksi + +Dalam pelajaran ini, Anda telah mempelajari tentang Responsible AI Toolbox, sebuah "proyek sumber terbuka yang digerakkan oleh komunitas untuk membantu ilmuwan data menganalisis dan meningkatkan sistem AI." Untuk tugas ini, jelajahi salah satu [notebook](https://github.com/microsoft/responsible-ai-toolbox/blob/main/notebooks/responsibleaidashboard/getting-started.ipynb) dari RAI Toolbox dan laporkan temuan Anda dalam bentuk makalah atau presentasi. + +## Rubrik + +| Kriteria | Unggul | Memadai | Perlu Peningkatan | +| -------- | ------- | -------- | ----------------- | +| | Makalah atau presentasi PowerPoint disajikan yang membahas sistem Fairlearn, notebook yang dijalankan, dan kesimpulan yang diambil dari menjalankannya | Makalah disajikan tanpa kesimpulan | Tidak ada makalah yang disajikan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/1-Introduction/4-techniques-of-ML/README.md b/translations/id/1-Introduction/4-techniques-of-ML/README.md new file mode 100644 index 00000000..32917d44 --- /dev/null +++ b/translations/id/1-Introduction/4-techniques-of-ML/README.md @@ -0,0 +1,132 @@ + +# Teknik Pembelajaran Mesin + +Proses membangun, menggunakan, dan memelihara model pembelajaran mesin serta data yang digunakan sangat berbeda dari banyak alur kerja pengembangan lainnya. Dalam pelajaran ini, kita akan mengungkap proses tersebut dan merangkum teknik utama yang perlu Anda ketahui. Anda akan: + +- Memahami proses yang mendasari pembelajaran mesin pada tingkat tinggi. +- Mengeksplorasi konsep dasar seperti 'model', 'prediksi', dan 'data pelatihan'. + +## [Kuis sebelum pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +[![ML untuk pemula - Teknik Pembelajaran Mesin](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML untuk pemula - Teknik Pembelajaran Mesin") + +> 🎥 Klik gambar di atas untuk video singkat yang membahas pelajaran ini. + +## Pendahuluan + +Secara umum, seni menciptakan proses pembelajaran mesin (ML) terdiri dari beberapa langkah: + +1. **Tentukan pertanyaan**. Sebagian besar proses ML dimulai dengan mengajukan pertanyaan yang tidak dapat dijawab oleh program bersyarat sederhana atau mesin berbasis aturan. Pertanyaan ini sering kali berkisar pada prediksi berdasarkan kumpulan data. +2. **Kumpulkan dan siapkan data**. Untuk dapat menjawab pertanyaan Anda, Anda memerlukan data. Kualitas dan, terkadang, kuantitas data Anda akan menentukan seberapa baik Anda dapat menjawab pertanyaan awal. Memvisualisasikan data adalah aspek penting dari fase ini. Fase ini juga mencakup pembagian data menjadi kelompok pelatihan dan pengujian untuk membangun model. +3. **Pilih metode pelatihan**. Bergantung pada pertanyaan Anda dan sifat data Anda, Anda perlu memilih cara melatih model agar dapat mencerminkan data Anda dengan baik dan membuat prediksi yang akurat. Bagian dari proses ML ini membutuhkan keahlian khusus dan, sering kali, sejumlah besar eksperimen. +4. **Latih model**. Dengan menggunakan data pelatihan Anda, Anda akan menggunakan berbagai algoritma untuk melatih model agar mengenali pola dalam data. Model mungkin memanfaatkan bobot internal yang dapat disesuaikan untuk memprioritaskan bagian tertentu dari data dibandingkan yang lain guna membangun model yang lebih baik. +5. **Evaluasi model**. Anda menggunakan data yang belum pernah dilihat sebelumnya (data pengujian Anda) dari kumpulan yang dikumpulkan untuk melihat bagaimana kinerja model. +6. **Penyetelan parameter**. Berdasarkan kinerja model Anda, Anda dapat mengulangi proses menggunakan parameter atau variabel yang berbeda yang mengontrol perilaku algoritma yang digunakan untuk melatih model. +7. **Prediksi**. Gunakan input baru untuk menguji akurasi model Anda. + +## Pertanyaan yang harus diajukan + +Komputer sangat mahir dalam menemukan pola tersembunyi dalam data. Kemampuan ini sangat membantu bagi peneliti yang memiliki pertanyaan tentang suatu domain tertentu yang tidak dapat dengan mudah dijawab dengan membuat mesin berbasis aturan bersyarat. Dalam tugas aktuaria, misalnya, seorang ilmuwan data mungkin dapat membangun aturan buatan seputar tingkat kematian perokok vs non-perokok. + +Namun, ketika banyak variabel lain dimasukkan ke dalam persamaan, model ML mungkin lebih efisien untuk memprediksi tingkat kematian di masa depan berdasarkan riwayat kesehatan sebelumnya. Contoh yang lebih ceria mungkin adalah membuat prediksi cuaca untuk bulan April di lokasi tertentu berdasarkan data yang mencakup garis lintang, garis bujur, perubahan iklim, kedekatan dengan laut, pola aliran jet, dan lainnya. + +✅ [Slide presentasi ini](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) tentang model cuaca menawarkan perspektif historis tentang penggunaan ML dalam analisis cuaca. + +## Tugas sebelum membangun + +Sebelum mulai membangun model Anda, ada beberapa tugas yang perlu Anda selesaikan. Untuk menguji pertanyaan Anda dan membentuk hipotesis berdasarkan prediksi model, Anda perlu mengidentifikasi dan mengonfigurasi beberapa elemen. + +### Data + +Untuk dapat menjawab pertanyaan Anda dengan tingkat kepastian apa pun, Anda memerlukan sejumlah data yang cukup dan jenis data yang tepat. Ada dua hal yang perlu Anda lakukan pada tahap ini: + +- **Kumpulkan data**. Dengan mengingat pelajaran sebelumnya tentang keadilan dalam analisis data, kumpulkan data Anda dengan hati-hati. Perhatikan sumber data ini, bias bawaan yang mungkin dimilikinya, dan dokumentasikan asalnya. +- **Siapkan data**. Ada beberapa langkah dalam proses persiapan data. Anda mungkin perlu menggabungkan data dan menormalkannya jika berasal dari berbagai sumber. Anda dapat meningkatkan kualitas dan kuantitas data melalui berbagai metode seperti mengonversi string menjadi angka (seperti yang kita lakukan dalam [Clustering](../../5-Clustering/1-Visualize/README.md)). Anda juga dapat menghasilkan data baru berdasarkan data asli (seperti yang kita lakukan dalam [Classification](../../4-Classification/1-Introduction/README.md)). Anda dapat membersihkan dan mengedit data (seperti yang akan kita lakukan sebelum pelajaran [Web App](../../3-Web-App/README.md)). Akhirnya, Anda mungkin juga perlu mengacak dan mengacaknya, tergantung pada teknik pelatihan Anda. + +✅ Setelah mengumpulkan dan memproses data Anda, luangkan waktu untuk melihat apakah bentuknya memungkinkan Anda menjawab pertanyaan yang dimaksud. Mungkin saja data tidak akan bekerja dengan baik dalam tugas yang diberikan, seperti yang kita temukan dalam pelajaran [Clustering](../../5-Clustering/1-Visualize/README.md)! + +### Fitur dan Target + +[Fitur](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) adalah properti yang dapat diukur dari data Anda. Dalam banyak kumpulan data, fitur diekspresikan sebagai judul kolom seperti 'tanggal', 'ukuran', atau 'warna'. Variabel fitur Anda, biasanya direpresentasikan sebagai `X` dalam kode, mewakili variabel input yang akan digunakan untuk melatih model. + +Target adalah hal yang Anda coba prediksi. Target, biasanya direpresentasikan sebagai `y` dalam kode, mewakili jawaban atas pertanyaan yang Anda coba ajukan dari data Anda: pada bulan Desember, **warna** labu mana yang akan paling murah? Di San Francisco, lingkungan mana yang akan memiliki **harga** real estat terbaik? Kadang-kadang target juga disebut sebagai atribut label. + +### Memilih variabel fitur Anda + +🎓 **Pemilihan Fitur dan Ekstraksi Fitur** Bagaimana Anda tahu variabel mana yang harus dipilih saat membangun model? Anda mungkin akan melalui proses pemilihan fitur atau ekstraksi fitur untuk memilih variabel yang tepat untuk model yang paling berkinerja. Namun, keduanya tidak sama: "Ekstraksi fitur menciptakan fitur baru dari fungsi fitur asli, sedangkan pemilihan fitur mengembalikan subset dari fitur tersebut." ([sumber](https://wikipedia.org/wiki/Feature_selection)) + +### Visualisasikan data Anda + +Aspek penting dari alat ilmuwan data adalah kemampuan untuk memvisualisasikan data menggunakan beberapa pustaka yang sangat baik seperti Seaborn atau MatPlotLib. Mewakili data Anda secara visual mungkin memungkinkan Anda menemukan korelasi tersembunyi yang dapat Anda manfaatkan. Visualisasi Anda juga dapat membantu Anda menemukan bias atau data yang tidak seimbang (seperti yang kita temukan dalam [Classification](../../4-Classification/2-Classifiers-1/README.md)). + +### Pisahkan dataset Anda + +Sebelum pelatihan, Anda perlu membagi dataset Anda menjadi dua atau lebih bagian dengan ukuran yang tidak sama yang tetap mewakili data dengan baik. + +- **Pelatihan**. Bagian dataset ini digunakan untuk melatih model Anda. Set ini merupakan mayoritas dari dataset asli. +- **Pengujian**. Dataset pengujian adalah kelompok data independen, sering kali dikumpulkan dari data asli, yang Anda gunakan untuk mengonfirmasi kinerja model yang dibangun. +- **Validasi**. Set validasi adalah kelompok contoh independen yang lebih kecil yang Anda gunakan untuk menyetel hiperparameter atau arsitektur model untuk meningkatkan model. Bergantung pada ukuran data Anda dan pertanyaan yang Anda ajukan, Anda mungkin tidak perlu membangun set ketiga ini (seperti yang kita catat dalam [Time Series Forecasting](../../7-TimeSeries/1-Introduction/README.md)). + +## Membangun model + +Dengan menggunakan data pelatihan Anda, tujuan Anda adalah membangun model, atau representasi statistik dari data Anda, menggunakan berbagai algoritma untuk **melatih** model tersebut. Melatih model memaparkannya pada data dan memungkinkan model membuat asumsi tentang pola yang ditemukan, memvalidasi, dan menerima atau menolak. + +### Tentukan metode pelatihan + +Bergantung pada pertanyaan Anda dan sifat data Anda, Anda akan memilih metode untuk melatihnya. Dengan menjelajahi [dokumentasi Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - yang kita gunakan dalam kursus ini - Anda dapat mengeksplorasi banyak cara untuk melatih model. Bergantung pada pengalaman Anda, Anda mungkin harus mencoba beberapa metode berbeda untuk membangun model terbaik. Anda kemungkinan akan melalui proses di mana ilmuwan data mengevaluasi kinerja model dengan memberinya data yang belum pernah dilihat sebelumnya, memeriksa akurasi, bias, dan masalah kualitas lainnya, serta memilih metode pelatihan yang paling sesuai untuk tugas yang diberikan. + +### Latih model + +Dengan data pelatihan Anda, Anda siap untuk 'memasangkannya' untuk membuat model. Anda akan melihat bahwa dalam banyak pustaka ML, Anda akan menemukan kode 'model.fit' - pada saat inilah Anda mengirimkan variabel fitur Anda sebagai array nilai (biasanya 'X') dan variabel target (biasanya 'y'). + +### Evaluasi model + +Setelah proses pelatihan selesai (dapat memakan waktu banyak iterasi, atau 'epoch', untuk melatih model besar), Anda akan dapat mengevaluasi kualitas model dengan menggunakan data pengujian untuk mengukur kinerjanya. Data ini adalah subset dari data asli yang belum pernah dianalisis oleh model sebelumnya. Anda dapat mencetak tabel metrik tentang kualitas model Anda. + +🎓 **Pemasangan model** + +Dalam konteks pembelajaran mesin, pemasangan model mengacu pada akurasi fungsi dasar model saat mencoba menganalisis data yang tidak dikenalnya. + +🎓 **Underfitting** dan **overfitting** adalah masalah umum yang menurunkan kualitas model, karena model tidak cocok dengan baik atau terlalu cocok. Hal ini menyebabkan model membuat prediksi yang terlalu selaras atau terlalu longgar dengan data pelatihannya. Model yang terlalu cocok memprediksi data pelatihan terlalu baik karena telah mempelajari detail dan kebisingan data terlalu baik. Model yang kurang cocok tidak akurat karena tidak dapat menganalisis data pelatihannya maupun data yang belum pernah 'dilihat' dengan akurat. + +![model overfitting](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png) +> Infografis oleh [Jen Looper](https://twitter.com/jenlooper) + +## Penyetelan parameter + +Setelah pelatihan awal Anda selesai, amati kualitas model dan pertimbangkan untuk meningkatkannya dengan menyetel 'hiperparameter'-nya. Baca lebih lanjut tentang proses ini [dalam dokumentasi](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). + +## Prediksi + +Ini adalah momen di mana Anda dapat menggunakan data yang benar-benar baru untuk menguji akurasi model Anda. Dalam pengaturan ML 'terapan', di mana Anda membangun aset web untuk menggunakan model dalam produksi, proses ini mungkin melibatkan pengumpulan input pengguna (misalnya, menekan tombol) untuk menetapkan variabel dan mengirimkannya ke model untuk inferensi atau evaluasi. + +Dalam pelajaran ini, Anda akan menemukan cara menggunakan langkah-langkah ini untuk mempersiapkan, membangun, menguji, mengevaluasi, dan memprediksi - semua gerakan seorang ilmuwan data dan lebih banyak lagi, saat Anda maju dalam perjalanan Anda untuk menjadi seorang insinyur ML 'full stack'. + +--- + +## 🚀Tantangan + +Buat diagram alur yang mencerminkan langkah-langkah seorang praktisi ML. Di mana Anda melihat diri Anda saat ini dalam proses tersebut? Di mana Anda memprediksi akan menemukan kesulitan? Apa yang tampaknya mudah bagi Anda? + +## [Kuis setelah pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Tinjauan & Studi Mandiri + +Cari wawancara online dengan ilmuwan data yang membahas pekerjaan harian mereka. Berikut adalah [salah satunya](https://www.youtube.com/watch?v=Z3IjgbbCEfs). + +## Tugas + +[Wawancarai seorang ilmuwan data](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/1-Introduction/4-techniques-of-ML/assignment.md b/translations/id/1-Introduction/4-techniques-of-ML/assignment.md new file mode 100644 index 00000000..d06517e4 --- /dev/null +++ b/translations/id/1-Introduction/4-techniques-of-ML/assignment.md @@ -0,0 +1,25 @@ + +# Wawancara dengan seorang data scientist + +## Instruksi + +Di perusahaan Anda, dalam grup pengguna, atau di antara teman atau sesama mahasiswa, ajak seseorang yang bekerja secara profesional sebagai data scientist untuk berbicara. Tulislah sebuah esai pendek (500 kata) tentang pekerjaan sehari-hari mereka. Apakah mereka seorang spesialis, atau mereka bekerja secara 'full stack'? + +## Rubrik + +| Kriteria | Unggul | Memadai | Perlu Perbaikan | +| -------- | -------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | --------------------- | +| | Esai dengan panjang yang sesuai, dengan sumber yang disebutkan, disajikan sebagai file .doc | Esai kurang menyebutkan sumber atau lebih pendek dari panjang yang diminta | Tidak ada esai yang disajikan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/1-Introduction/README.md b/translations/id/1-Introduction/README.md new file mode 100644 index 00000000..adba51d2 --- /dev/null +++ b/translations/id/1-Introduction/README.md @@ -0,0 +1,36 @@ + +# Pengantar pembelajaran mesin + +Di bagian kurikulum ini, Anda akan diperkenalkan pada konsep dasar yang mendasari bidang pembelajaran mesin, apa itu, serta mempelajari sejarahnya dan teknik yang digunakan para peneliti untuk bekerja dengannya. Mari kita jelajahi dunia baru ML ini bersama-sama! + +![globe](../../../1-Introduction/images/globe.jpg) +> Foto oleh Bill Oxford di Unsplash + +### Pelajaran + +1. [Pengantar pembelajaran mesin](1-intro-to-ML/README.md) +1. [Sejarah pembelajaran mesin dan AI](2-history-of-ML/README.md) +1. [Keadilan dalam pembelajaran mesin](3-fairness/README.md) +1. [Teknik pembelajaran mesin](4-techniques-of-ML/README.md) +### Kredit + +"Pengantar Pembelajaran Mesin" ditulis dengan ♥️ oleh tim yang terdiri dari [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) dan [Jen Looper](https://twitter.com/jenlooper) + +"Sejarah Pembelajaran Mesin" ditulis dengan ♥️ oleh [Jen Looper](https://twitter.com/jenlooper) dan [Amy Boyd](https://twitter.com/AmyKateNicho) + +"Keadilan dalam Pembelajaran Mesin" ditulis dengan ♥️ oleh [Tomomi Imura](https://twitter.com/girliemac) + +"Teknik Pembelajaran Mesin" ditulis dengan ♥️ oleh [Jen Looper](https://twitter.com/jenlooper) dan [Chris Noring](https://twitter.com/softchris) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/2-Regression/1-Tools/README.md b/translations/id/2-Regression/1-Tools/README.md new file mode 100644 index 00000000..377d00fc --- /dev/null +++ b/translations/id/2-Regression/1-Tools/README.md @@ -0,0 +1,239 @@ + +# Memulai dengan Python dan Scikit-learn untuk model regresi + +![Ringkasan regresi dalam sketchnote](../../../../sketchnotes/ml-regression.png) + +> Sketchnote oleh [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [Kuis sebelum pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Pelajaran ini tersedia dalam R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) + +## Pendahuluan + +Dalam empat pelajaran ini, Anda akan mempelajari cara membangun model regresi. Kita akan membahas kegunaannya sebentar lagi. Namun sebelum memulai, pastikan Anda memiliki alat yang tepat untuk memulai proses ini! + +Dalam pelajaran ini, Anda akan belajar: + +- Mengonfigurasi komputer Anda untuk tugas pembelajaran mesin lokal. +- Bekerja dengan Jupyter notebook. +- Menggunakan Scikit-learn, termasuk instalasi. +- Mengeksplorasi regresi linier melalui latihan langsung. + +## Instalasi dan konfigurasi + +[![ML untuk pemula - Siapkan alat Anda untuk membangun model Pembelajaran Mesin](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML untuk pemula - Siapkan alat Anda untuk membangun model Pembelajaran Mesin") + +> 🎥 Klik gambar di atas untuk video singkat tentang cara mengonfigurasi komputer Anda untuk ML. + +1. **Instal Python**. Pastikan [Python](https://www.python.org/downloads/) sudah terinstal di komputer Anda. Anda akan menggunakan Python untuk banyak tugas ilmu data dan pembelajaran mesin. Sebagian besar sistem komputer sudah memiliki instalasi Python. Ada juga [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) yang berguna untuk mempermudah pengaturan bagi beberapa pengguna. + + Namun, beberapa penggunaan Python memerlukan satu versi perangkat lunak, sementara yang lain memerlukan versi yang berbeda. Oleh karena itu, sangat berguna untuk bekerja dalam [lingkungan virtual](https://docs.python.org/3/library/venv.html). + +2. **Instal Visual Studio Code**. Pastikan Anda memiliki Visual Studio Code yang terinstal di komputer Anda. Ikuti petunjuk ini untuk [menginstal Visual Studio Code](https://code.visualstudio.com/) untuk instalasi dasar. Anda akan menggunakan Python di Visual Studio Code dalam kursus ini, jadi Anda mungkin ingin mempelajari cara [mengonfigurasi Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) untuk pengembangan Python. + + > Biasakan diri dengan Python dengan mempelajari koleksi [modul pembelajaran](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) + > + > [![Siapkan Python dengan Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Siapkan Python dengan Visual Studio Code") + > + > 🎥 Klik gambar di atas untuk video: menggunakan Python dalam VS Code. + +3. **Instal Scikit-learn**, dengan mengikuti [petunjuk ini](https://scikit-learn.org/stable/install.html). Karena Anda perlu memastikan bahwa Anda menggunakan Python 3, disarankan untuk menggunakan lingkungan virtual. Perhatikan, jika Anda menginstal pustaka ini di Mac M1, ada petunjuk khusus di halaman yang ditautkan di atas. + +4. **Instal Jupyter Notebook**. Anda perlu [menginstal paket Jupyter](https://pypi.org/project/jupyter/). + +## Lingkungan penulisan ML Anda + +Anda akan menggunakan **notebook** untuk mengembangkan kode Python Anda dan membuat model pembelajaran mesin. Jenis file ini adalah alat umum bagi ilmuwan data, dan dapat diidentifikasi dengan akhiran atau ekstensi `.ipynb`. + +Notebook adalah lingkungan interaktif yang memungkinkan pengembang untuk menulis kode sekaligus menambahkan catatan dan dokumentasi di sekitar kode, yang sangat membantu untuk proyek eksperimental atau berbasis penelitian. + +[![ML untuk pemula - Siapkan Jupyter Notebook untuk mulai membangun model regresi](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML untuk pemula - Siapkan Jupyter Notebook untuk mulai membangun model regresi") + +> 🎥 Klik gambar di atas untuk video singkat tentang latihan ini. + +### Latihan - bekerja dengan notebook + +Di folder ini, Anda akan menemukan file _notebook.ipynb_. + +1. Buka _notebook.ipynb_ di Visual Studio Code. + + Server Jupyter akan dimulai dengan Python 3+. Anda akan menemukan area di notebook yang dapat `dijalankan`, yaitu potongan kode. Anda dapat menjalankan blok kode dengan memilih ikon yang terlihat seperti tombol putar. + +2. Pilih ikon `md` dan tambahkan sedikit markdown, serta teks berikut **# Selamat datang di notebook Anda**. + + Selanjutnya, tambahkan beberapa kode Python. + +3. Ketik **print('hello notebook')** di blok kode. +4. Pilih panah untuk menjalankan kode. + + Anda akan melihat pernyataan yang dicetak: + + ```output + hello notebook + ``` + +![VS Code dengan notebook terbuka](../../../../2-Regression/1-Tools/images/notebook.jpg) + +Anda dapat menyisipkan kode Anda dengan komentar untuk mendokumentasikan notebook secara mandiri. + +✅ Pikirkan sejenak tentang betapa berbedanya lingkungan kerja pengembang web dibandingkan dengan ilmuwan data. + +## Memulai dengan Scikit-learn + +Sekarang Python telah diatur di lingkungan lokal Anda, dan Anda merasa nyaman dengan Jupyter notebook, mari kita sama-sama merasa nyaman dengan Scikit-learn (diucapkan `sci` seperti dalam `science`). Scikit-learn menyediakan [API yang luas](https://scikit-learn.org/stable/modules/classes.html#api-ref) untuk membantu Anda melakukan tugas ML. + +Menurut [situs web mereka](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn adalah pustaka pembelajaran mesin sumber terbuka yang mendukung pembelajaran terawasi dan tidak terawasi. Pustaka ini juga menyediakan berbagai alat untuk fitting model, praproses data, pemilihan model, evaluasi, dan banyak utilitas lainnya." + +Dalam kursus ini, Anda akan menggunakan Scikit-learn dan alat lainnya untuk membangun model pembelajaran mesin untuk melakukan apa yang kita sebut tugas 'pembelajaran mesin tradisional'. Kami sengaja menghindari jaringan saraf dan pembelajaran mendalam, karena topik tersebut lebih baik dibahas dalam kurikulum 'AI untuk Pemula' kami yang akan datang. + +Scikit-learn membuatnya mudah untuk membangun model dan mengevaluasinya untuk digunakan. Pustaka ini terutama berfokus pada penggunaan data numerik dan berisi beberapa dataset siap pakai untuk digunakan sebagai alat pembelajaran. Pustaka ini juga mencakup model yang sudah dibuat sebelumnya untuk dicoba oleh siswa. Mari kita eksplorasi proses memuat data yang sudah dikemas dan menggunakan estimator bawaan untuk model ML pertama dengan Scikit-learn menggunakan data dasar. + +## Latihan - notebook Scikit-learn pertama Anda + +> Tutorial ini terinspirasi oleh [contoh regresi linier](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) di situs web Scikit-learn. + +[![ML untuk pemula - Proyek Regresi Linier Pertama Anda dalam Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML untuk pemula - Proyek Regresi Linier Pertama Anda dalam Python") + +> 🎥 Klik gambar di atas untuk video singkat tentang latihan ini. + +Di file _notebook.ipynb_ yang terkait dengan pelajaran ini, hapus semua sel dengan menekan ikon 'tempat sampah'. + +Di bagian ini, Anda akan bekerja dengan dataset kecil tentang diabetes yang sudah ada di Scikit-learn untuk tujuan pembelajaran. Bayangkan Anda ingin menguji pengobatan untuk pasien diabetes. Model Pembelajaran Mesin mungkin membantu Anda menentukan pasien mana yang akan merespons pengobatan dengan lebih baik, berdasarkan kombinasi variabel. Bahkan model regresi yang sangat dasar, ketika divisualisasikan, mungkin menunjukkan informasi tentang variabel yang dapat membantu Anda mengatur uji klinis teoritis Anda. + +✅ Ada banyak jenis metode regresi, dan pilihan metode tergantung pada jawaban yang Anda cari. Jika Anda ingin memprediksi tinggi badan yang mungkin untuk seseorang berdasarkan usia tertentu, Anda akan menggunakan regresi linier, karena Anda mencari **nilai numerik**. Jika Anda tertarik untuk mengetahui apakah jenis masakan tertentu harus dianggap vegan atau tidak, Anda mencari **penugasan kategori**, sehingga Anda akan menggunakan regresi logistik. Anda akan mempelajari lebih lanjut tentang regresi logistik nanti. Pikirkan sejenak tentang beberapa pertanyaan yang dapat Anda ajukan dari data, dan metode mana yang lebih sesuai. + +Mari kita mulai tugas ini. + +### Impor pustaka + +Untuk tugas ini, kita akan mengimpor beberapa pustaka: + +- **matplotlib**. Ini adalah [alat grafik](https://matplotlib.org/) yang berguna dan akan kita gunakan untuk membuat plot garis. +- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) adalah pustaka yang berguna untuk menangani data numerik dalam Python. +- **sklearn**. Ini adalah pustaka [Scikit-learn](https://scikit-learn.org/stable/user_guide.html). + +Impor beberapa pustaka untuk membantu tugas Anda. + +1. Tambahkan impor dengan mengetik kode berikut: + + ```python + import matplotlib.pyplot as plt + import numpy as np + from sklearn import datasets, linear_model, model_selection + ``` + + Di atas, Anda mengimpor `matplotlib`, `numpy`, dan Anda mengimpor `datasets`, `linear_model`, dan `model_selection` dari `sklearn`. `model_selection` digunakan untuk membagi data menjadi set pelatihan dan pengujian. + +### Dataset diabetes + +Dataset [diabetes](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) bawaan mencakup 442 sampel data tentang diabetes, dengan 10 variabel fitur, beberapa di antaranya meliputi: + +- age: usia dalam tahun +- bmi: indeks massa tubuh +- bp: tekanan darah rata-rata +- s1 tc: T-Cells (jenis sel darah putih) + +✅ Dataset ini mencakup konsep 'jenis kelamin' sebagai variabel fitur yang penting untuk penelitian tentang diabetes. Banyak dataset medis mencakup jenis klasifikasi biner seperti ini. Pikirkan sejenak tentang bagaimana kategorisasi seperti ini mungkin mengecualikan bagian tertentu dari populasi dari pengobatan. + +Sekarang, muat data X dan y. + +> 🎓 Ingat, ini adalah pembelajaran terawasi, dan kita membutuhkan target 'y' yang bernama. + +Di sel kode baru, muat dataset diabetes dengan memanggil `load_diabetes()`. Input `return_X_y=True` menandakan bahwa `X` akan menjadi matriks data, dan `y` akan menjadi target regresi. + +1. Tambahkan beberapa perintah print untuk menunjukkan bentuk matriks data dan elemen pertamanya: + + ```python + X, y = datasets.load_diabetes(return_X_y=True) + print(X.shape) + print(X[0]) + ``` + + Apa yang Anda dapatkan sebagai respons adalah tuple. Anda menetapkan dua nilai pertama dari tuple ke `X` dan `y` masing-masing. Pelajari lebih lanjut [tentang tuple](https://wikipedia.org/wiki/Tuple). + + Anda dapat melihat bahwa data ini memiliki 442 item yang berbentuk array dengan 10 elemen: + + ```text + (442, 10) + [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 + -0.04340085 -0.00259226 0.01990842 -0.01764613] + ``` + + ✅ Pikirkan sejenak tentang hubungan antara data dan target regresi. Regresi linier memprediksi hubungan antara fitur X dan variabel target y. Bisakah Anda menemukan [target](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) untuk dataset diabetes dalam dokumentasi? Apa yang ditunjukkan oleh dataset ini, mengingat targetnya? + +2. Selanjutnya, pilih bagian dari dataset ini untuk dipetakan dengan memilih kolom ke-3 dari dataset. Anda dapat melakukannya dengan menggunakan operator `:` untuk memilih semua baris, lalu memilih kolom ke-3 menggunakan indeks (2). Anda juga dapat mengubah bentuk data menjadi array 2D - seperti yang diperlukan untuk pemetaan - dengan menggunakan `reshape(n_rows, n_columns)`. Jika salah satu parameter adalah -1, dimensi yang sesuai dihitung secara otomatis. + + ```python + X = X[:, 2] + X = X.reshape((-1,1)) + ``` + + ✅ Kapan saja, cetak data untuk memeriksa bentuknya. + +3. Sekarang setelah Anda memiliki data yang siap untuk dipetakan, Anda dapat melihat apakah mesin dapat membantu menentukan pembagian logis antara angka-angka dalam dataset ini. Untuk melakukan ini, Anda perlu membagi data (X) dan target (y) menjadi set pengujian dan pelatihan. Scikit-learn memiliki cara yang sederhana untuk melakukan ini; Anda dapat membagi data pengujian Anda pada titik tertentu. + + ```python + X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) + ``` + +4. Sekarang Anda siap untuk melatih model Anda! Muat model regresi linier dan latih dengan set pelatihan X dan y Anda menggunakan `model.fit()`: + + ```python + model = linear_model.LinearRegression() + model.fit(X_train, y_train) + ``` + + ✅ `model.fit()` adalah fungsi yang akan sering Anda lihat di banyak pustaka ML seperti TensorFlow. + +5. Kemudian, buat prediksi menggunakan data pengujian, dengan menggunakan fungsi `predict()`. Ini akan digunakan untuk menggambar garis antara kelompok data. + + ```python + y_pred = model.predict(X_test) + ``` + +6. Sekarang saatnya untuk menunjukkan data dalam plot. Matplotlib adalah alat yang sangat berguna untuk tugas ini. Buat scatterplot dari semua data pengujian X dan y, dan gunakan prediksi untuk menggambar garis di tempat yang paling sesuai, di antara pengelompokan data model. + + ```python + plt.scatter(X_test, y_test, color='black') + plt.plot(X_test, y_pred, color='blue', linewidth=3) + plt.xlabel('Scaled BMIs') + plt.ylabel('Disease Progression') + plt.title('A Graph Plot Showing Diabetes Progression Against BMI') + plt.show() + ``` + + ![scatterplot yang menunjukkan titik data tentang diabetes](../../../../2-Regression/1-Tools/images/scatterplot.png) +✅ Pikirkan sebentar tentang apa yang sedang terjadi di sini. Sebuah garis lurus melewati banyak titik data kecil, tetapi apa sebenarnya yang sedang dilakukan? Bisakah Anda melihat bagaimana Anda seharusnya dapat menggunakan garis ini untuk memprediksi di mana titik data baru yang belum terlihat seharusnya berada dalam hubungannya dengan sumbu y pada plot? Cobalah untuk menjelaskan penggunaan praktis dari model ini. + +Selamat, Anda telah membangun model regresi linear pertama Anda, membuat prediksi dengannya, dan menampilkannya dalam sebuah plot! + +--- +## 🚀Tantangan + +Plot variabel yang berbeda dari dataset ini. Petunjuk: edit baris ini: `X = X[:,2]`. Berdasarkan target dataset ini, apa yang dapat Anda temukan tentang perkembangan diabetes sebagai penyakit? + +## [Kuis setelah kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Tinjauan & Studi Mandiri + +Dalam tutorial ini, Anda bekerja dengan regresi linear sederhana, bukan regresi univariat atau regresi multivariat. Bacalah sedikit tentang perbedaan antara metode-metode ini, atau lihat [video ini](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef). + +Pelajari lebih lanjut tentang konsep regresi dan pikirkan tentang jenis pertanyaan apa yang dapat dijawab dengan teknik ini. Ikuti [tutorial ini](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) untuk memperdalam pemahaman Anda. + +## Tugas + +[Dataset yang berbeda](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/2-Regression/1-Tools/assignment.md b/translations/id/2-Regression/1-Tools/assignment.md new file mode 100644 index 00000000..b3544176 --- /dev/null +++ b/translations/id/2-Regression/1-Tools/assignment.md @@ -0,0 +1,27 @@ + +# Regresi dengan Scikit-learn + +## Instruksi + +Lihatlah [dataset Linnerud](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) di Scikit-learn. Dataset ini memiliki beberapa [target](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset): 'Dataset ini terdiri dari tiga variabel latihan (data) dan tiga variabel fisiologis (target) yang dikumpulkan dari dua puluh pria paruh baya di sebuah klub kebugaran'. + +Dengan kata-kata Anda sendiri, jelaskan bagaimana cara membuat model Regresi yang dapat memplot hubungan antara ukuran pinggang dan jumlah sit-up yang dilakukan. Lakukan hal yang sama untuk poin data lainnya dalam dataset ini. + +## Rubrik + +| Kriteria | Unggul | Memadai | Perlu Peningkatan | +| ------------------------------ | ----------------------------------- | ----------------------------- | -------------------------- | +| Kirim paragraf deskriptif | Paragraf yang ditulis dengan baik | Beberapa kalimat dikirimkan | Tidak ada deskripsi yang diberikan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/2-Regression/1-Tools/solution/Julia/README.md b/translations/id/2-Regression/1-Tools/solution/Julia/README.md new file mode 100644 index 00000000..16d0bfea --- /dev/null +++ b/translations/id/2-Regression/1-Tools/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/2-Regression/2-Data/README.md b/translations/id/2-Regression/2-Data/README.md new file mode 100644 index 00000000..ee58546d --- /dev/null +++ b/translations/id/2-Regression/2-Data/README.md @@ -0,0 +1,226 @@ + +# Membangun Model Regresi Menggunakan Scikit-learn: Persiapkan dan Visualisasikan Data + +![Infografis visualisasi data](../../../../2-Regression/2-Data/images/data-visualization.png) + +Infografis oleh [Dasani Madipalli](https://twitter.com/dasani_decoded) + +## [Kuis Pra-Pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Pelajaran ini tersedia dalam R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html) + +## Pendahuluan + +Setelah Anda memiliki alat yang diperlukan untuk mulai membangun model pembelajaran mesin dengan Scikit-learn, Anda siap untuk mulai mengajukan pertanyaan terhadap data Anda. Saat bekerja dengan data dan menerapkan solusi ML, sangat penting untuk memahami cara mengajukan pertanyaan yang tepat agar dapat memanfaatkan potensi dataset Anda dengan benar. + +Dalam pelajaran ini, Anda akan belajar: + +- Cara mempersiapkan data Anda untuk membangun model. +- Cara menggunakan Matplotlib untuk visualisasi data. + +## Mengajukan Pertanyaan yang Tepat pada Data Anda + +Pertanyaan yang ingin Anda jawab akan menentukan jenis algoritma ML yang akan Anda gunakan. Kualitas jawaban yang Anda dapatkan sangat bergantung pada sifat data Anda. + +Lihatlah [data](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) yang disediakan untuk pelajaran ini. Anda dapat membuka file .csv ini di VS Code. Sekilas, Anda akan segera melihat bahwa ada data kosong dan campuran antara string dan data numerik. Ada juga kolom aneh bernama 'Package' di mana datanya adalah campuran antara 'sacks', 'bins', dan nilai lainnya. Data ini, sebenarnya, cukup berantakan. + +[![ML untuk Pemula - Cara Menganalisis dan Membersihkan Dataset](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML untuk Pemula - Cara Menganalisis dan Membersihkan Dataset") + +> 🎥 Klik gambar di atas untuk video singkat tentang persiapan data untuk pelajaran ini. + +Faktanya, sangat jarang mendapatkan dataset yang sepenuhnya siap digunakan untuk membuat model ML langsung. Dalam pelajaran ini, Anda akan belajar cara mempersiapkan dataset mentah menggunakan pustaka Python standar. Anda juga akan mempelajari berbagai teknik untuk memvisualisasikan data. + +## Studi Kasus: 'Pasar Labu' + +Dalam folder ini, Anda akan menemukan file .csv di folder root `data` bernama [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) yang mencakup 1757 baris data tentang pasar labu, yang dikelompokkan berdasarkan kota. Ini adalah data mentah yang diekstrak dari [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) yang didistribusikan oleh Departemen Pertanian Amerika Serikat. + +### Mempersiapkan Data + +Data ini berada di domain publik. Data ini dapat diunduh dalam banyak file terpisah, per kota, dari situs web USDA. Untuk menghindari terlalu banyak file terpisah, kami telah menggabungkan semua data kota ke dalam satu spreadsheet, sehingga kami telah _mempersiapkan_ data sedikit. Selanjutnya, mari kita lihat lebih dekat data tersebut. + +### Data Labu - Kesimpulan Awal + +Apa yang Anda perhatikan tentang data ini? Anda sudah melihat bahwa ada campuran string, angka, data kosong, dan nilai aneh yang perlu Anda pahami. + +Pertanyaan apa yang dapat Anda ajukan pada data ini menggunakan teknik Regresi? Bagaimana dengan "Memprediksi harga labu yang dijual selama bulan tertentu". Melihat kembali data tersebut, ada beberapa perubahan yang perlu Anda lakukan untuk membuat struktur data yang diperlukan untuk tugas ini. + +## Latihan - Analisis Data Labu + +Mari gunakan [Pandas](https://pandas.pydata.org/), (nama ini berasal dari `Python Data Analysis`) alat yang sangat berguna untuk membentuk data, untuk menganalisis dan mempersiapkan data labu ini. + +### Pertama, Periksa Tanggal yang Hilang + +Anda pertama-tama perlu mengambil langkah-langkah untuk memeriksa tanggal yang hilang: + +1. Konversikan tanggal ke format bulan (ini adalah tanggal AS, jadi formatnya adalah `MM/DD/YYYY`). +2. Ekstrak bulan ke kolom baru. + +Buka file _notebook.ipynb_ di Visual Studio Code dan impor spreadsheet ke dalam dataframe Pandas baru. + +1. Gunakan fungsi `head()` untuk melihat lima baris pertama. + + ```python + import pandas as pd + pumpkins = pd.read_csv('../data/US-pumpkins.csv') + pumpkins.head() + ``` + + ✅ Fungsi apa yang akan Anda gunakan untuk melihat lima baris terakhir? + +1. Periksa apakah ada data yang hilang dalam dataframe saat ini: + + ```python + pumpkins.isnull().sum() + ``` + + Ada data yang hilang, tetapi mungkin tidak akan menjadi masalah untuk tugas ini. + +1. Untuk membuat dataframe Anda lebih mudah digunakan, pilih hanya kolom yang Anda butuhkan, menggunakan fungsi `loc` yang mengekstrak dari dataframe asli sekelompok baris (diberikan sebagai parameter pertama) dan kolom (diberikan sebagai parameter kedua). Ekspresi `:` dalam kasus ini berarti "semua baris". + + ```python + columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] + pumpkins = pumpkins.loc[:, columns_to_select] + ``` + +### Kedua, Tentukan Harga Rata-rata Labu + +Pikirkan tentang cara menentukan harga rata-rata labu dalam bulan tertentu. Kolom apa yang akan Anda pilih untuk tugas ini? Petunjuk: Anda akan membutuhkan 3 kolom. + +Solusi: ambil rata-rata dari kolom `Low Price` dan `High Price` untuk mengisi kolom Harga baru, dan konversikan kolom Tanggal untuk hanya menampilkan bulan. Untungnya, menurut pemeriksaan di atas, tidak ada data yang hilang untuk tanggal atau harga. + +1. Untuk menghitung rata-rata, tambahkan kode berikut: + + ```python + price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 + + month = pd.DatetimeIndex(pumpkins['Date']).month + + ``` + + ✅ Silakan cetak data apa pun yang ingin Anda periksa menggunakan `print(month)`. + +2. Sekarang, salin data yang telah dikonversi ke dataframe Pandas baru: + + ```python + new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) + ``` + + Mencetak dataframe Anda akan menunjukkan dataset yang bersih dan rapi yang dapat Anda gunakan untuk membangun model regresi baru Anda. + +### Tapi Tunggu! Ada Sesuatu yang Aneh di Sini + +Jika Anda melihat kolom `Package`, labu dijual dalam banyak konfigurasi yang berbeda. Beberapa dijual dalam ukuran '1 1/9 bushel', beberapa dalam ukuran '1/2 bushel', beberapa per labu, beberapa per pon, dan beberapa dalam kotak besar dengan lebar yang bervariasi. + +> Labu tampaknya sangat sulit untuk ditimbang secara konsisten + +Menggali data asli, menarik bahwa apa pun dengan `Unit of Sale` yang sama dengan 'EACH' atau 'PER BIN' juga memiliki tipe `Package` per inci, per bin, atau 'each'. Labu tampaknya sangat sulit untuk ditimbang secara konsisten, jadi mari kita memfilter mereka dengan memilih hanya labu dengan string 'bushel' di kolom `Package`. + +1. Tambahkan filter di bagian atas file, di bawah impor .csv awal: + + ```python + pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] + ``` + + Jika Anda mencetak data sekarang, Anda dapat melihat bahwa Anda hanya mendapatkan sekitar 415 baris data yang berisi labu berdasarkan bushel. + +### Tapi Tunggu! Ada Satu Hal Lagi yang Harus Dilakukan + +Apakah Anda memperhatikan bahwa jumlah bushel bervariasi per baris? Anda perlu menormalkan harga sehingga Anda menunjukkan harga per bushel, jadi lakukan beberapa perhitungan untuk standarisasi. + +1. Tambahkan baris ini setelah blok yang membuat dataframe new_pumpkins: + + ```python + new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) + + new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2) + ``` + +✅ Menurut [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), berat bushel tergantung pada jenis hasil panen, karena ini adalah pengukuran volume. "Satu bushel tomat, misalnya, seharusnya memiliki berat 56 pon... Daun dan sayuran mengambil lebih banyak ruang dengan berat lebih sedikit, sehingga satu bushel bayam hanya memiliki berat 20 pon." Semuanya cukup rumit! Mari kita tidak repot-repot membuat konversi bushel-ke-pon, dan sebagai gantinya harga berdasarkan bushel. Semua studi tentang bushel labu ini, bagaimanapun, menunjukkan betapa pentingnya memahami sifat data Anda! + +Sekarang, Anda dapat menganalisis harga per unit berdasarkan pengukuran bushel mereka. Jika Anda mencetak data sekali lagi, Anda dapat melihat bagaimana data tersebut telah distandarisasi. + +✅ Apakah Anda memperhatikan bahwa labu yang dijual berdasarkan setengah bushel sangat mahal? Bisakah Anda mencari tahu alasannya? Petunjuk: labu kecil jauh lebih mahal daripada yang besar, mungkin karena ada lebih banyak labu kecil per bushel, mengingat ruang kosong yang tidak terpakai yang diambil oleh satu labu besar untuk pai. + +## Strategi Visualisasi + +Bagian dari peran ilmuwan data adalah menunjukkan kualitas dan sifat data yang mereka kerjakan. Untuk melakukan ini, mereka sering membuat visualisasi yang menarik, seperti plot, grafik, dan diagram, yang menunjukkan berbagai aspek data. Dengan cara ini, mereka dapat secara visual menunjukkan hubungan dan celah yang sulit ditemukan. + +[![ML untuk Pemula - Cara Memvisualisasikan Data dengan Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML untuk Pemula - Cara Memvisualisasikan Data dengan Matplotlib") + +> 🎥 Klik gambar di atas untuk video singkat tentang memvisualisasikan data untuk pelajaran ini. + +Visualisasi juga dapat membantu menentukan teknik pembelajaran mesin yang paling sesuai untuk data. Sebuah scatterplot yang tampaknya mengikuti garis, misalnya, menunjukkan bahwa data tersebut adalah kandidat yang baik untuk latihan regresi linier. + +Salah satu pustaka visualisasi data yang bekerja dengan baik di Jupyter notebook adalah [Matplotlib](https://matplotlib.org/) (yang juga Anda lihat dalam pelajaran sebelumnya). + +> Dapatkan lebih banyak pengalaman dengan visualisasi data dalam [tutorial ini](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott). + +## Latihan - Bereksperimen dengan Matplotlib + +Cobalah membuat beberapa plot dasar untuk menampilkan dataframe baru yang baru saja Anda buat. Apa yang akan ditampilkan oleh plot garis dasar? + +1. Impor Matplotlib di bagian atas file, di bawah impor Pandas: + + ```python + import matplotlib.pyplot as plt + ``` + +1. Jalankan ulang seluruh notebook untuk menyegarkan. +1. Di bagian bawah notebook, tambahkan sel untuk memplot data sebagai kotak: + + ```python + price = new_pumpkins.Price + month = new_pumpkins.Month + plt.scatter(price, month) + plt.show() + ``` + + ![Scatterplot yang menunjukkan hubungan harga dengan bulan](../../../../2-Regression/2-Data/images/scatterplot.png) + + Apakah ini plot yang berguna? Apakah ada sesuatu yang mengejutkan Anda? + + Ini tidak terlalu berguna karena hanya menampilkan data Anda sebagai sebaran titik dalam bulan tertentu. + +### Buatlah Berguna + +Untuk mendapatkan grafik yang menampilkan data yang berguna, Anda biasanya perlu mengelompokkan data dengan cara tertentu. Mari coba membuat plot di mana sumbu y menunjukkan bulan dan data menunjukkan distribusi data. + +1. Tambahkan sel untuk membuat grafik batang yang dikelompokkan: + + ```python + new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') + plt.ylabel("Pumpkin Price") + ``` + + ![Grafik batang yang menunjukkan hubungan harga dengan bulan](../../../../2-Regression/2-Data/images/barchart.png) + + Ini adalah visualisasi data yang lebih berguna! Tampaknya menunjukkan bahwa harga tertinggi untuk labu terjadi pada bulan September dan Oktober. Apakah itu sesuai dengan ekspektasi Anda? Mengapa atau mengapa tidak? + +--- + +## 🚀Tantangan + +Jelajahi berbagai jenis visualisasi yang ditawarkan oleh Matplotlib. Jenis mana yang paling sesuai untuk masalah regresi? + +## [Kuis Pasca-Pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Tinjauan & Studi Mandiri + +Lihatlah berbagai cara untuk memvisualisasikan data. Buat daftar berbagai pustaka yang tersedia dan catat mana yang terbaik untuk jenis tugas tertentu, misalnya visualisasi 2D vs. visualisasi 3D. Apa yang Anda temukan? + +## Tugas + +[Menjelajahi visualisasi](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk memberikan hasil yang akurat, harap diperhatikan bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/2-Regression/2-Data/assignment.md b/translations/id/2-Regression/2-Data/assignment.md new file mode 100644 index 00000000..ff72db44 --- /dev/null +++ b/translations/id/2-Regression/2-Data/assignment.md @@ -0,0 +1,23 @@ + +# Menjelajahi Visualisasi + +Ada beberapa pustaka berbeda yang tersedia untuk visualisasi data. Buat beberapa visualisasi menggunakan data Pumpkin dalam pelajaran ini dengan matplotlib dan seaborn di notebook contoh. Pustaka mana yang lebih mudah digunakan? + +## Rubrik + +| Kriteria | Unggul | Memadai | Perlu Peningkatan | +| -------- | ------- | -------- | ----------------- | +| | Sebuah notebook diserahkan dengan dua eksplorasi/visualisasi | Sebuah notebook diserahkan dengan satu eksplorasi/visualisasi | Sebuah notebook tidak diserahkan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/2-Regression/2-Data/solution/Julia/README.md b/translations/id/2-Regression/2-Data/solution/Julia/README.md new file mode 100644 index 00000000..d4cfec25 --- /dev/null +++ b/translations/id/2-Regression/2-Data/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/2-Regression/3-Linear/README.md b/translations/id/2-Regression/3-Linear/README.md new file mode 100644 index 00000000..08af3741 --- /dev/null +++ b/translations/id/2-Regression/3-Linear/README.md @@ -0,0 +1,381 @@ + +# Membangun Model Regresi Menggunakan Scikit-learn: Empat Cara Regresi + +![Infografik regresi linear vs polinomial](../../../../2-Regression/3-Linear/images/linear-polynomial.png) +> Infografik oleh [Dasani Madipalli](https://twitter.com/dasani_decoded) +## [Kuis Pra-Pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Pelajaran ini tersedia dalam R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) +### Pengantar + +Sejauh ini, Anda telah mempelajari apa itu regresi dengan data sampel yang diambil dari dataset harga labu yang akan kita gunakan sepanjang pelajaran ini. Anda juga telah memvisualisasikannya menggunakan Matplotlib. + +Sekarang Anda siap untuk mendalami regresi dalam pembelajaran mesin. Sementara visualisasi memungkinkan Anda memahami data, kekuatan sebenarnya dari Pembelajaran Mesin berasal dari _melatih model_. Model dilatih pada data historis untuk secara otomatis menangkap ketergantungan data, dan memungkinkan Anda memprediksi hasil untuk data baru yang belum pernah dilihat oleh model sebelumnya. + +Dalam pelajaran ini, Anda akan mempelajari lebih lanjut tentang dua jenis regresi: _regresi linear dasar_ dan _regresi polinomial_, bersama dengan beberapa matematika yang mendasari teknik-teknik ini. Model-model tersebut akan memungkinkan kita memprediksi harga labu berdasarkan berbagai data input. + +[![ML untuk pemula - Memahami Regresi Linear](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML untuk pemula - Memahami Regresi Linear") + +> 🎥 Klik gambar di atas untuk video singkat tentang regresi linear. + +> Sepanjang kurikulum ini, kami mengasumsikan pengetahuan matematika yang minimal, dan berusaha membuatnya dapat diakses oleh siswa dari bidang lain, jadi perhatikan catatan, 🧮 penjelasan, diagram, dan alat pembelajaran lainnya untuk membantu pemahaman. + +### Prasyarat + +Pada titik ini, Anda seharusnya sudah familiar dengan struktur data labu yang sedang kita analisis. Anda dapat menemukannya sudah dimuat dan dibersihkan di file _notebook.ipynb_ pelajaran ini. Dalam file tersebut, harga labu ditampilkan per bushel dalam kerangka data baru. Pastikan Anda dapat menjalankan notebook ini di kernel Visual Studio Code. + +### Persiapan + +Sebagai pengingat, Anda memuat data ini untuk mengajukan pertanyaan tentangnya. + +- Kapan waktu terbaik untuk membeli labu? +- Berapa harga yang bisa saya harapkan untuk satu kotak labu mini? +- Haruskah saya membelinya dalam keranjang setengah bushel atau dalam kotak bushel 1 1/9? +Mari kita terus menggali data ini. + +Dalam pelajaran sebelumnya, Anda membuat kerangka data Pandas dan mengisinya dengan sebagian dari dataset asli, menstandarkan harga berdasarkan bushel. Namun, dengan melakukan itu, Anda hanya dapat mengumpulkan sekitar 400 titik data dan hanya untuk bulan-bulan musim gugur. + +Lihat data yang telah dimuat sebelumnya di notebook yang menyertai pelajaran ini. Data telah dimuat sebelumnya dan plot sebar awal telah dibuat untuk menunjukkan data bulan. Mungkin kita bisa mendapatkan sedikit lebih banyak detail tentang sifat data dengan membersihkannya lebih lanjut. + +## Garis Regresi Linear + +Seperti yang Anda pelajari di Pelajaran 1, tujuan dari latihan regresi linear adalah untuk dapat membuat garis untuk: + +- **Menunjukkan hubungan variabel**. Menunjukkan hubungan antara variabel +- **Membuat prediksi**. Membuat prediksi yang akurat tentang di mana titik data baru akan berada dalam hubungan dengan garis tersebut. + +Biasanya, **Regresi Kuadrat Terkecil** digunakan untuk menggambar jenis garis ini. Istilah 'kuadrat terkecil' berarti bahwa semua titik data di sekitar garis regresi dikuadratkan dan kemudian dijumlahkan. Idealnya, jumlah akhir itu sekecil mungkin, karena kita menginginkan jumlah kesalahan yang rendah, atau `kuadrat terkecil`. + +Kami melakukan ini karena kami ingin memodelkan garis yang memiliki jarak kumulatif terkecil dari semua titik data kami. Kami juga mengkuadratkan istilah sebelum menjumlahkannya karena kami lebih peduli dengan besarnya daripada arahnya. + +> **🧮 Tunjukkan matematikanya** +> +> Garis ini, yang disebut _garis terbaik_, dapat diekspresikan dengan [persamaan](https://en.wikipedia.org/wiki/Simple_linear_regression): +> +> ``` +> Y = a + bX +> ``` +> +> `X` adalah 'variabel penjelas'. `Y` adalah 'variabel dependen'. Kemiringan garis adalah `b` dan `a` adalah titik potong sumbu y, yang mengacu pada nilai `Y` ketika `X = 0`. +> +>![menghitung kemiringan](../../../../2-Regression/3-Linear/images/slope.png) +> +> Pertama, hitung kemiringan `b`. Infografik oleh [Jen Looper](https://twitter.com/jenlooper) +> +> Dengan kata lain, dan merujuk pada pertanyaan asli data labu kita: "memprediksi harga labu per bushel berdasarkan bulan", `X` akan merujuk pada harga dan `Y` akan merujuk pada bulan penjualan. +> +>![lengkapi persamaan](../../../../2-Regression/3-Linear/images/calculation.png) +> +> Hitung nilai Y. Jika Anda membayar sekitar $4, itu pasti bulan April! Infografik oleh [Jen Looper](https://twitter.com/jenlooper) +> +> Matematika yang menghitung garis harus menunjukkan kemiringan garis, yang juga bergantung pada titik potong, atau di mana `Y` berada ketika `X = 0`. +> +> Anda dapat mengamati metode perhitungan untuk nilai-nilai ini di situs web [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Juga kunjungi [Kalkulator Kuadrat Terkecil](https://www.mathsisfun.com/data/least-squares-calculator.html) untuk melihat bagaimana nilai angka memengaruhi garis. + +## Korelasi + +Satu istilah lagi yang perlu dipahami adalah **Koefisien Korelasi** antara variabel X dan Y yang diberikan. Menggunakan plot sebar, Anda dapat dengan cepat memvisualisasikan koefisien ini. Plot dengan titik data yang tersebar dalam garis rapi memiliki korelasi tinggi, tetapi plot dengan titik data yang tersebar di mana-mana antara X dan Y memiliki korelasi rendah. + +Model regresi linear yang baik adalah model yang memiliki Koefisien Korelasi tinggi (lebih dekat ke 1 daripada 0) menggunakan metode Regresi Kuadrat Terkecil dengan garis regresi. + +✅ Jalankan notebook yang menyertai pelajaran ini dan lihat plot sebar Bulan ke Harga. Apakah data yang menghubungkan Bulan ke Harga untuk penjualan labu tampaknya memiliki korelasi tinggi atau rendah, menurut interpretasi visual Anda terhadap plot sebar? Apakah itu berubah jika Anda menggunakan ukuran yang lebih rinci daripada `Bulan`, misalnya *hari dalam setahun* (yaitu jumlah hari sejak awal tahun)? + +Dalam kode di bawah ini, kita akan mengasumsikan bahwa kita telah membersihkan data, dan memperoleh kerangka data yang disebut `new_pumpkins`, mirip dengan berikut ini: + +ID | Bulan | HariDalamTahun | Jenis | Kota | Paket | Harga Rendah | Harga Tinggi | Harga +---|-------|----------------|-------|------|-------|--------------|--------------|------ +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 + +> Kode untuk membersihkan data tersedia di [`notebook.ipynb`](../../../../2-Regression/3-Linear/notebook.ipynb). Kami telah melakukan langkah-langkah pembersihan yang sama seperti pada pelajaran sebelumnya, dan telah menghitung kolom `HariDalamTahun` menggunakan ekspresi berikut: + +```python +day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) +``` + +Sekarang setelah Anda memahami matematika di balik regresi linear, mari kita buat model Regresi untuk melihat apakah kita dapat memprediksi paket labu mana yang akan memiliki harga labu terbaik. Seseorang yang membeli labu untuk kebun labu liburan mungkin menginginkan informasi ini untuk dapat mengoptimalkan pembelian paket labu untuk kebun tersebut. + +## Mencari Korelasi + +[![ML untuk pemula - Mencari Korelasi: Kunci Regresi Linear](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML untuk pemula - Mencari Korelasi: Kunci Regresi Linear") + +> 🎥 Klik gambar di atas untuk video singkat tentang korelasi. + +Dari pelajaran sebelumnya, Anda mungkin telah melihat bahwa harga rata-rata untuk berbagai bulan terlihat seperti ini: + +Harga rata-rata berdasarkan bulan + +Ini menunjukkan bahwa seharusnya ada beberapa korelasi, dan kita dapat mencoba melatih model regresi linear untuk memprediksi hubungan antara `Bulan` dan `Harga`, atau antara `HariDalamTahun` dan `Harga`. Berikut adalah plot sebar yang menunjukkan hubungan yang terakhir: + +Plot sebar Harga vs. Hari dalam Tahun + +Mari kita lihat apakah ada korelasi menggunakan fungsi `corr`: + +```python +print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) +print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) +``` + +Tampaknya korelasi cukup kecil, -0.15 berdasarkan `Bulan` dan -0.17 berdasarkan `HariDalamTahun`, tetapi mungkin ada hubungan penting lainnya. Tampaknya ada kelompok harga yang berbeda yang sesuai dengan berbagai jenis labu. Untuk mengonfirmasi hipotesis ini, mari kita plot setiap kategori labu menggunakan warna yang berbeda. Dengan meneruskan parameter `ax` ke fungsi plot sebar, kita dapat memplot semua titik pada grafik yang sama: + +```python +ax=None +colors = ['red','blue','green','yellow'] +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) +``` + +Plot sebar Harga vs. Hari dalam Tahun + +Penyelidikan kami menunjukkan bahwa jenis labu memiliki pengaruh lebih besar pada harga keseluruhan daripada tanggal penjualan sebenarnya. Kita dapat melihat ini dengan grafik batang: + +```python +new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') +``` + +Grafik batang harga vs jenis labu + +Mari kita fokus untuk sementara hanya pada satu jenis labu, yaitu 'pie type', dan lihat apa pengaruh tanggal terhadap harga: + +```python +pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] +pie_pumpkins.plot.scatter('DayOfYear','Price') +``` +Plot sebar Harga vs. Hari dalam Tahun + +Jika kita sekarang menghitung korelasi antara `Harga` dan `HariDalamTahun` menggunakan fungsi `corr`, kita akan mendapatkan sesuatu seperti `-0.27` - yang berarti bahwa melatih model prediktif masuk akal. + +> Sebelum melatih model regresi linear, penting untuk memastikan bahwa data kita bersih. Regresi linear tidak bekerja dengan baik dengan nilai yang hilang, sehingga masuk akal untuk menghapus semua sel kosong: + +```python +pie_pumpkins.dropna(inplace=True) +pie_pumpkins.info() +``` + +Pendekatan lain adalah mengisi nilai kosong tersebut dengan nilai rata-rata dari kolom yang sesuai. + +## Regresi Linear Sederhana + +[![ML untuk pemula - Regresi Linear dan Polinomial menggunakan Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML untuk pemula - Regresi Linear dan Polinomial menggunakan Scikit-learn") + +> 🎥 Klik gambar di atas untuk video singkat tentang regresi linear dan polinomial. + +Untuk melatih model Regresi Linear kita, kita akan menggunakan pustaka **Scikit-learn**. + +```python +from sklearn.linear_model import LinearRegression +from sklearn.metrics import mean_squared_error +from sklearn.model_selection import train_test_split +``` + +Kita mulai dengan memisahkan nilai input (fitur) dan output yang diharapkan (label) ke dalam array numpy terpisah: + +```python +X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) +y = pie_pumpkins['Price'] +``` + +> Perhatikan bahwa kita harus melakukan `reshape` pada data input agar paket Regresi Linear dapat memahaminya dengan benar. Regresi Linear mengharapkan array 2D sebagai input, di mana setiap baris array sesuai dengan vektor fitur input. Dalam kasus kita, karena kita hanya memiliki satu input - kita membutuhkan array dengan bentuk N×1, di mana N adalah ukuran dataset. + +Kemudian, kita perlu membagi data menjadi dataset pelatihan dan pengujian, sehingga kita dapat memvalidasi model kita setelah pelatihan: + +```python +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) +``` + +Akhirnya, melatih model Regresi Linear yang sebenarnya hanya membutuhkan dua baris kode. Kita mendefinisikan objek `LinearRegression`, dan menyesuaikannya dengan data kita menggunakan metode `fit`: + +```python +lin_reg = LinearRegression() +lin_reg.fit(X_train,y_train) +``` + +Objek `LinearRegression` setelah `fit`-ting berisi semua koefisien regresi, yang dapat diakses menggunakan properti `.coef_`. Dalam kasus kita, hanya ada satu koefisien, yang seharusnya sekitar `-0.017`. Ini berarti bahwa harga tampaknya turun sedikit seiring waktu, tetapi tidak terlalu banyak, sekitar 2 sen per hari. Kita juga dapat mengakses titik perpotongan regresi dengan sumbu Y menggunakan `lin_reg.intercept_` - ini akan sekitar `21` dalam kasus kita, menunjukkan harga di awal tahun. + +Untuk melihat seberapa akurat model kita, kita dapat memprediksi harga pada dataset pengujian, dan kemudian mengukur seberapa dekat prediksi kita dengan nilai yang diharapkan. Ini dapat dilakukan menggunakan metrik mean square error (MSE), yang merupakan rata-rata dari semua perbedaan kuadrat antara nilai yang diharapkan dan nilai yang diprediksi. + +```python +pred = lin_reg.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}%)') +``` +Kesalahan kita tampaknya berada di sekitar 2 poin, yaitu ~17%. Tidak terlalu bagus. Indikator lain dari kualitas model adalah **koefisien determinasi**, yang dapat diperoleh seperti ini: + +```python +score = lin_reg.score(X_train,y_train) +print('Model determination: ', score) +``` +Jika nilainya 0, itu berarti model tidak mempertimbangkan data input, dan bertindak sebagai *prediktor linear terburuk*, yang hanya merupakan nilai rata-rata dari hasil. Nilai 1 berarti kita dapat memprediksi semua output yang diharapkan dengan sempurna. Dalam kasus kita, koefisiennya sekitar 0.06, yang cukup rendah. + +Kita juga dapat memplot data uji bersama dengan garis regresi untuk melihat lebih jelas bagaimana regresi bekerja dalam kasus kita: + +```python +plt.scatter(X_test,y_test) +plt.plot(X_test,pred) +``` + + +Regresi linear + +## Regresi Polinomial + +Jenis lain dari Regresi Linear adalah Regresi Polinomial. Meskipun terkadang ada hubungan linear antara variabel - semakin besar volume labu, semakin tinggi harganya - terkadang hubungan ini tidak dapat dipetakan sebagai bidang atau garis lurus. + +✅ Berikut adalah [beberapa contoh lainnya](https://online.stat.psu.edu/stat501/lesson/9/9.8) dari data yang dapat menggunakan Regresi Polinomial. + +Lihat kembali hubungan antara Tanggal dan Harga. Apakah scatterplot ini tampaknya harus dianalisis dengan garis lurus? Bukankah harga bisa berfluktuasi? Dalam kasus ini, Anda dapat mencoba regresi polinomial. + +✅ Polinomial adalah ekspresi matematika yang mungkin terdiri dari satu atau lebih variabel dan koefisien. + +Regresi polinomial menciptakan garis melengkung untuk lebih cocok dengan data non-linear. Dalam kasus kita, jika kita menyertakan variabel `DayOfYear` kuadrat ke dalam data input, kita harus dapat menyesuaikan data kita dengan kurva parabola, yang akan memiliki titik minimum pada waktu tertentu dalam setahun. + +Scikit-learn menyertakan [API pipeline](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) yang berguna untuk menggabungkan berbagai langkah pemrosesan data. **Pipeline** adalah rantai **estimasi**. Dalam kasus kita, kita akan membuat pipeline yang pertama-tama menambahkan fitur polinomial ke model kita, lalu melatih regresi: + +```python +from sklearn.preprocessing import PolynomialFeatures +from sklearn.pipeline import make_pipeline + +pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) + +pipeline.fit(X_train,y_train) +``` + +Menggunakan `PolynomialFeatures(2)` berarti kita akan menyertakan semua polinomial derajat kedua dari data input. Dalam kasus kita, ini hanya berarti `DayOfYear`2, tetapi dengan dua variabel input X dan Y, ini akan menambahkan X2, XY, dan Y2. Kita juga dapat menggunakan polinomial derajat lebih tinggi jika diinginkan. + +Pipeline dapat digunakan dengan cara yang sama seperti objek `LinearRegression` asli, yaitu kita dapat `fit` pipeline, lalu menggunakan `predict` untuk mendapatkan hasil prediksi. Berikut adalah grafik yang menunjukkan data uji dan kurva aproksimasi: + +Regresi polinomial + +Dengan menggunakan Regresi Polinomial, kita dapat memperoleh MSE yang sedikit lebih rendah dan determinasi yang lebih tinggi, tetapi tidak signifikan. Kita perlu mempertimbangkan fitur lainnya! + +> Anda dapat melihat bahwa harga labu terendah diamati di sekitar Halloween. Bagaimana Anda menjelaskan ini? + +🎃 Selamat, Anda baru saja membuat model yang dapat membantu memprediksi harga labu untuk pai. Anda mungkin dapat mengulangi prosedur yang sama untuk semua jenis labu, tetapi itu akan membosankan. Sekarang mari kita pelajari cara mempertimbangkan variasi labu dalam model kita! + +## Fitur Kategorikal + +Dalam dunia ideal, kita ingin dapat memprediksi harga untuk berbagai jenis labu menggunakan model yang sama. Namun, kolom `Variety` agak berbeda dari kolom seperti `Month`, karena berisi nilai non-numerik. Kolom seperti ini disebut **kategorikal**. + +[![ML untuk pemula - Prediksi Fitur Kategorikal dengan Regresi Linear](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML untuk pemula - Prediksi Fitur Kategorikal dengan Regresi Linear") + +> 🎥 Klik gambar di atas untuk video singkat tentang penggunaan fitur kategorikal. + +Di sini Anda dapat melihat bagaimana harga rata-rata bergantung pada variasi: + +Harga rata-rata berdasarkan variasi + +Untuk mempertimbangkan variasi, pertama-tama kita perlu mengonversinya ke bentuk numerik, atau **encode**. Ada beberapa cara untuk melakukannya: + +* **Numeric encoding** sederhana akan membuat tabel variasi yang berbeda, lalu mengganti nama variasi dengan indeks dalam tabel tersebut. Ini bukan ide terbaik untuk regresi linear, karena regresi linear mengambil nilai numerik aktual dari indeks dan menambahkannya ke hasil, mengalikan dengan beberapa koefisien. Dalam kasus kita, hubungan antara nomor indeks dan harga jelas tidak linear, bahkan jika kita memastikan bahwa indeks diurutkan dengan cara tertentu. +* **One-hot encoding** akan mengganti kolom `Variety` dengan 4 kolom berbeda, satu untuk setiap variasi. Setiap kolom akan berisi `1` jika baris yang sesuai adalah variasi tertentu, dan `0` jika tidak. Ini berarti akan ada empat koefisien dalam regresi linear, satu untuk setiap variasi labu, yang bertanggung jawab atas "harga awal" (atau lebih tepatnya "harga tambahan") untuk variasi tertentu. + +Kode di bawah ini menunjukkan bagaimana kita dapat melakukan one-hot encoding pada variasi: + +```python +pd.get_dummies(new_pumpkins['Variety']) +``` + + ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE +----|-----------|-----------|--------------------------|---------- +70 | 0 | 0 | 0 | 1 +71 | 0 | 0 | 0 | 1 +... | ... | ... | ... | ... +1738 | 0 | 1 | 0 | 0 +1739 | 0 | 1 | 0 | 0 +1740 | 0 | 1 | 0 | 0 +1741 | 0 | 1 | 0 | 0 +1742 | 0 | 1 | 0 | 0 + +Untuk melatih regresi linear menggunakan variasi yang telah di-one-hot encode sebagai input, kita hanya perlu menginisialisasi data `X` dan `y` dengan benar: + +```python +X = pd.get_dummies(new_pumpkins['Variety']) +y = new_pumpkins['Price'] +``` + +Sisa kode sama seperti yang kita gunakan di atas untuk melatih Regresi Linear. Jika Anda mencobanya, Anda akan melihat bahwa mean squared error hampir sama, tetapi kita mendapatkan koefisien determinasi yang jauh lebih tinggi (~77%). Untuk mendapatkan prediksi yang lebih akurat, kita dapat mempertimbangkan lebih banyak fitur kategorikal, serta fitur numerik seperti `Month` atau `DayOfYear`. Untuk mendapatkan satu array besar fitur, kita dapat menggunakan `join`: + +```python +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'] +``` + +Di sini kita juga mempertimbangkan `City` dan jenis `Package`, yang memberikan kita MSE 2.84 (10%), dan determinasi 0.94! + +## Menggabungkan Semuanya + +Untuk membuat model terbaik, kita dapat menggunakan data gabungan (one-hot encoded kategorikal + numerik) dari contoh di atas bersama dengan Regresi Polinomial. Berikut adalah kode lengkap untuk kenyamanan Anda: + +```python +# set up training data +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'] + +# make train-test split +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + +# setup and train the pipeline +pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) +pipeline.fit(X_train,y_train) + +# predict results for test data +pred = pipeline.predict(X_test) + +# calculate MSE and determination +mse = np.sqrt(mean_squared_error(y_test,pred)) +print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') + +score = pipeline.score(X_train,y_train) +print('Model determination: ', score) +``` + +Ini seharusnya memberikan kita koefisien determinasi terbaik hampir 97%, dan MSE=2.23 (~8% kesalahan prediksi). + +| Model | MSE | Determinasi | +|-------|-----|-------------| +| `DayOfYear` Linear | 2.77 (17.2%) | 0.07 | +| `DayOfYear` Polynomial | 2.73 (17.0%) | 0.08 | +| `Variety` Linear | 5.24 (19.7%) | 0.77 | +| Semua fitur Linear | 2.84 (10.5%) | 0.94 | +| Semua fitur Polynomial | 2.23 (8.25%) | 0.97 | + +🏆 Kerja bagus! Anda telah membuat empat model Regresi dalam satu pelajaran, dan meningkatkan kualitas model hingga 97%. Dalam bagian terakhir tentang Regresi, Anda akan belajar tentang Regresi Logistik untuk menentukan kategori. + +--- +## 🚀Tantangan + +Uji beberapa variabel berbeda dalam notebook ini untuk melihat bagaimana korelasi berhubungan dengan akurasi model. + +## [Kuis setelah pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Tinjauan & Studi Mandiri + +Dalam pelajaran ini kita belajar tentang Regresi Linear. Ada jenis Regresi penting lainnya. Bacalah tentang teknik Stepwise, Ridge, Lasso, dan Elasticnet. Kursus yang bagus untuk mempelajari lebih lanjut adalah [Kursus Pembelajaran Statistik Stanford](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning). + +## Tugas + +[Bangun Model](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/2-Regression/3-Linear/assignment.md b/translations/id/2-Regression/3-Linear/assignment.md new file mode 100644 index 00000000..811070fd --- /dev/null +++ b/translations/id/2-Regression/3-Linear/assignment.md @@ -0,0 +1,25 @@ + +# Membuat Model Regresi + +## Instruksi + +Dalam pelajaran ini, Anda telah diperlihatkan cara membangun model menggunakan Regresi Linear dan Regresi Polinomial. Dengan menggunakan pengetahuan ini, temukan dataset atau gunakan salah satu set bawaan Scikit-learn untuk membangun model baru. Jelaskan di notebook Anda mengapa Anda memilih teknik tersebut, dan tunjukkan akurasi model Anda. Jika model tidak akurat, jelaskan alasannya. + +## Rubrik + +| Kriteria | Unggul | Memadai | Perlu Perbaikan | +| -------- | ----------------------------------------------------------- | ------------------------- | ----------------------------- | +| | menyajikan notebook lengkap dengan solusi yang terdokumentasi dengan baik | solusi tidak lengkap | solusi memiliki kekurangan atau bug | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan manusia profesional. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/2-Regression/3-Linear/solution/Julia/README.md b/translations/id/2-Regression/3-Linear/solution/Julia/README.md new file mode 100644 index 00000000..eb1154c8 --- /dev/null +++ b/translations/id/2-Regression/3-Linear/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/2-Regression/4-Logistic/README.md b/translations/id/2-Regression/4-Logistic/README.md new file mode 100644 index 00000000..987b7f3f --- /dev/null +++ b/translations/id/2-Regression/4-Logistic/README.md @@ -0,0 +1,406 @@ + +# Regresi Logistik untuk Memprediksi Kategori + +![Infografik regresi logistik vs regresi linear](../../../../2-Regression/4-Logistic/images/linear-vs-logistic.png) + +## [Kuis Pra-Pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Pelajaran ini tersedia dalam R!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html) + +## Pendahuluan + +Dalam pelajaran terakhir tentang Regresi ini, salah satu teknik ML _klasik_ dasar, kita akan mempelajari Regresi Logistik. Anda dapat menggunakan teknik ini untuk menemukan pola guna memprediksi kategori biner. Apakah permen ini cokelat atau bukan? Apakah penyakit ini menular atau tidak? Apakah pelanggan ini akan memilih produk ini atau tidak? + +Dalam pelajaran ini, Anda akan mempelajari: + +- Perpustakaan baru untuk visualisasi data +- Teknik untuk regresi logistik + +✅ Perdalam pemahaman Anda tentang bekerja dengan jenis regresi ini di [modul pembelajaran ini](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) + +## Prasyarat + +Setelah bekerja dengan data labu, kita sekarang cukup familiar untuk menyadari bahwa ada satu kategori biner yang dapat kita gunakan: `Color`. + +Mari kita bangun model regresi logistik untuk memprediksi, berdasarkan beberapa variabel, _warna apa yang kemungkinan besar dimiliki oleh labu tertentu_ (oranye 🎃 atau putih 👻). + +> Mengapa kita membahas klasifikasi biner dalam pelajaran tentang regresi? Hanya untuk kenyamanan linguistik, karena regresi logistik sebenarnya adalah [metode klasifikasi](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), meskipun berbasis linear. Pelajari cara lain untuk mengklasifikasikan data di kelompok pelajaran berikutnya. + +## Tentukan Pertanyaan + +Untuk tujuan kita, kita akan mengekspresikan ini sebagai biner: 'Putih' atau 'Bukan Putih'. Ada juga kategori 'striped' dalam dataset kita, tetapi jumlahnya sedikit, jadi kita tidak akan menggunakannya. Kategori ini juga akan hilang setelah kita menghapus nilai null dari dataset. + +> 🎃 Fakta menyenangkan, kita kadang-kadang menyebut labu putih sebagai labu 'hantu'. Mereka tidak mudah diukir, jadi tidak sepopuler labu oranye, tetapi mereka terlihat keren! Jadi kita juga bisa merumuskan ulang pertanyaan kita sebagai: 'Hantu' atau 'Bukan Hantu'. 👻 + +## Tentang Regresi Logistik + +Regresi logistik berbeda dari regresi linear, yang telah Anda pelajari sebelumnya, dalam beberapa cara penting. + +[![ML untuk pemula - Memahami Regresi Logistik untuk Klasifikasi Pembelajaran Mesin](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "ML untuk pemula - Memahami Regresi Logistik untuk Klasifikasi Pembelajaran Mesin") + +> 🎥 Klik gambar di atas untuk video singkat tentang regresi logistik. + +### Klasifikasi Biner + +Regresi logistik tidak menawarkan fitur yang sama seperti regresi linear. Regresi logistik memberikan prediksi tentang kategori biner ("putih atau bukan putih"), sedangkan regresi linear mampu memprediksi nilai kontinu, misalnya berdasarkan asal labu dan waktu panen, _berapa harga labu akan naik_. + +![Model Klasifikasi Labu](../../../../2-Regression/4-Logistic/images/pumpkin-classifier.png) +> Infografik oleh [Dasani Madipalli](https://twitter.com/dasani_decoded) + +### Klasifikasi Lainnya + +Ada jenis regresi logistik lainnya, termasuk multinomial dan ordinal: + +- **Multinomial**, yang melibatkan lebih dari satu kategori - "Oranye, Putih, dan Striped". +- **Ordinal**, yang melibatkan kategori yang terurut, berguna jika kita ingin mengurutkan hasil secara logis, seperti labu kita yang diurutkan berdasarkan sejumlah ukuran tertentu (mini, sm, med, lg, xl, xxl). + +![Regresi multinomial vs ordinal](../../../../2-Regression/4-Logistic/images/multinomial-vs-ordinal.png) + +### Variabel TIDAK Harus Berkorelasi + +Ingat bagaimana regresi linear bekerja lebih baik dengan variabel yang lebih berkorelasi? Regresi logistik adalah kebalikannya - variabel tidak harus sejajar. Ini cocok untuk data ini yang memiliki korelasi yang agak lemah. + +### Anda Membutuhkan Banyak Data yang Bersih + +Regresi logistik akan memberikan hasil yang lebih akurat jika Anda menggunakan lebih banyak data; dataset kecil kita tidak optimal untuk tugas ini, jadi ingatlah hal itu. + +[![ML untuk pemula - Analisis dan Persiapan Data untuk Regresi Logistik](https://img.youtube.com/vi/B2X4H9vcXTs/0.jpg)](https://youtu.be/B2X4H9vcXTs "ML untuk pemula - Analisis dan Persiapan Data untuk Regresi Logistik") + +✅ Pikirkan jenis data yang cocok untuk regresi logistik + +## Latihan - rapikan data + +Pertama, bersihkan data sedikit, hapus nilai null, dan pilih hanya beberapa kolom: + +1. Tambahkan kode berikut: + + ```python + + columns_to_select = ['City Name','Package','Variety', 'Origin','Item Size', 'Color'] + pumpkins = full_pumpkins.loc[:, columns_to_select] + + pumpkins.dropna(inplace=True) + ``` + + Anda selalu dapat melihat sekilas dataframe baru Anda: + + ```python + pumpkins.info + ``` + +### Visualisasi - plot kategorikal + +Sekarang Anda telah memuat [notebook awal](../../../../2-Regression/4-Logistic/notebook.ipynb) dengan data labu sekali lagi dan membersihkannya sehingga hanya menyisakan dataset yang berisi beberapa variabel, termasuk `Color`. Mari kita visualisasikan dataframe di notebook menggunakan pustaka yang berbeda: [Seaborn](https://seaborn.pydata.org/index.html), yang dibangun di atas Matplotlib yang kita gunakan sebelumnya. + +Seaborn menawarkan beberapa cara menarik untuk memvisualisasikan data Anda. Misalnya, Anda dapat membandingkan distribusi data untuk setiap `Variety` dan `Color` dalam plot kategorikal. + +1. Buat plot seperti itu dengan menggunakan fungsi `catplot`, menggunakan data labu kita `pumpkins`, dan menentukan pemetaan warna untuk setiap kategori labu (oranye atau putih): + + ```python + import seaborn as sns + + palette = { + 'ORANGE': 'orange', + 'WHITE': 'wheat', + } + + sns.catplot( + data=pumpkins, y="Variety", hue="Color", kind="count", + palette=palette, + ) + ``` + + ![Grid data yang divisualisasikan](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_1.png) + + Dengan mengamati data, Anda dapat melihat bagaimana data Color berhubungan dengan Variety. + + ✅ Berdasarkan plot kategorikal ini, eksplorasi menarik apa yang dapat Anda bayangkan? + +### Pra-pemrosesan Data: Pengkodean Fitur dan Label + +Dataset labu kita berisi nilai string untuk semua kolomnya. Bekerja dengan data kategorikal intuitif bagi manusia tetapi tidak bagi mesin. Algoritma pembelajaran mesin bekerja dengan baik dengan angka. Itulah mengapa pengkodean adalah langkah yang sangat penting dalam fase pra-pemrosesan data, karena memungkinkan kita mengubah data kategorikal menjadi data numerik, tanpa kehilangan informasi apa pun. Pengkodean yang baik menghasilkan model yang baik. + +Untuk pengkodean fitur, ada dua jenis pengkode utama: + +1. Pengkode ordinal: cocok untuk variabel ordinal, yaitu variabel kategorikal di mana datanya mengikuti urutan logis, seperti kolom `Item Size` dalam dataset kita. Pengkode ini membuat pemetaan sehingga setiap kategori diwakili oleh angka, yang merupakan urutan kategori dalam kolom. + + ```python + from sklearn.preprocessing import OrdinalEncoder + + item_size_categories = [['sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo']] + ordinal_features = ['Item Size'] + ordinal_encoder = OrdinalEncoder(categories=item_size_categories) + ``` + +2. Pengkode kategorikal: cocok untuk variabel nominal, yaitu variabel kategorikal di mana datanya tidak mengikuti urutan logis, seperti semua fitur selain `Item Size` dalam dataset kita. Ini adalah pengkodean one-hot, yang berarti bahwa setiap kategori diwakili oleh kolom biner: variabel yang dikodekan sama dengan 1 jika labu termasuk dalam Variety tersebut dan 0 jika tidak. + + ```python + from sklearn.preprocessing import OneHotEncoder + + categorical_features = ['City Name', 'Package', 'Variety', 'Origin'] + categorical_encoder = OneHotEncoder(sparse_output=False) + ``` +Kemudian, `ColumnTransformer` digunakan untuk menggabungkan beberapa pengkode ke dalam satu langkah dan menerapkannya ke kolom yang sesuai. + +```python + from sklearn.compose import ColumnTransformer + + ct = ColumnTransformer(transformers=[ + ('ord', ordinal_encoder, ordinal_features), + ('cat', categorical_encoder, categorical_features) + ]) + + ct.set_output(transform='pandas') + encoded_features = ct.fit_transform(pumpkins) +``` +Di sisi lain, untuk mengkodekan label, kita menggunakan kelas `LabelEncoder` dari scikit-learn, yang merupakan kelas utilitas untuk membantu menormalkan label sehingga hanya berisi nilai antara 0 dan n_classes-1 (di sini, 0 dan 1). + +```python + from sklearn.preprocessing import LabelEncoder + + label_encoder = LabelEncoder() + encoded_label = label_encoder.fit_transform(pumpkins['Color']) +``` +Setelah kita mengkodekan fitur dan label, kita dapat menggabungkannya ke dalam dataframe baru `encoded_pumpkins`. + +```python + encoded_pumpkins = encoded_features.assign(Color=encoded_label) +``` +✅ Apa keuntungan menggunakan pengkode ordinal untuk kolom `Item Size`? + +### Analisis Hubungan Antar Variabel + +Sekarang kita telah memproses data kita, kita dapat menganalisis hubungan antara fitur dan label untuk mendapatkan gambaran seberapa baik model akan dapat memprediksi label berdasarkan fitur. +Cara terbaik untuk melakukan analisis semacam ini adalah dengan memplot data. Kita akan menggunakan kembali fungsi `catplot` dari Seaborn, untuk memvisualisasikan hubungan antara `Item Size`, `Variety`, dan `Color` dalam plot kategorikal. Untuk memplot data dengan lebih baik, kita akan menggunakan kolom `Item Size` yang telah dikodekan dan kolom `Variety` yang belum dikodekan. + +```python + palette = { + 'ORANGE': 'orange', + 'WHITE': 'wheat', + } + pumpkins['Item Size'] = encoded_pumpkins['ord__Item Size'] + + g = sns.catplot( + data=pumpkins, + x="Item Size", y="Color", row='Variety', + kind="box", orient="h", + sharex=False, margin_titles=True, + height=1.8, aspect=4, palette=palette, + ) + g.set(xlabel="Item Size", ylabel="").set(xlim=(0,6)) + g.set_titles(row_template="{row_name}") +``` +![Plot kategorikal data yang divisualisasikan](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_2.png) + +### Gunakan Plot Swarm + +Karena Color adalah kategori biner (Putih atau Tidak), kategori ini membutuhkan '[pendekatan khusus](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) untuk visualisasi'. Ada cara lain untuk memvisualisasikan hubungan kategori ini dengan variabel lainnya. + +Anda dapat memvisualisasikan variabel secara berdampingan dengan plot Seaborn. + +1. Cobalah plot 'swarm' untuk menunjukkan distribusi nilai: + + ```python + palette = { + 0: 'orange', + 1: 'wheat' + } + sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette) + ``` + + ![Swarm data yang divisualisasikan](../../../../2-Regression/4-Logistic/images/swarm_2.png) + +**Perhatikan**: kode di atas mungkin menghasilkan peringatan, karena seaborn gagal merepresentasikan sejumlah besar titik data ke dalam plot swarm. Solusi yang mungkin adalah mengurangi ukuran penanda, dengan menggunakan parameter 'size'. Namun, perlu diingat bahwa ini memengaruhi keterbacaan plot. + +> **🧮 Tunjukkan Matematikanya** +> +> Regresi logistik bergantung pada konsep 'maximum likelihood' menggunakan [fungsi sigmoid](https://wikipedia.org/wiki/Sigmoid_function). Fungsi 'Sigmoid' pada plot terlihat seperti bentuk 'S'. Fungsi ini mengambil nilai dan memetakannya ke antara 0 dan 1. Kurvanya juga disebut 'kurva logistik'. Rumusnya terlihat seperti ini: +> +> ![fungsi logistik](../../../../2-Regression/4-Logistic/images/sigmoid.png) +> +> di mana titik tengah sigmoid berada di titik 0 x, L adalah nilai maksimum kurva, dan k adalah kemiringan kurva. Jika hasil fungsi lebih dari 0.5, label yang dimaksud akan diberi kelas '1' dari pilihan biner. Jika tidak, akan diklasifikasikan sebagai '0'. + +## Bangun Model Anda + +Membangun model untuk menemukan klasifikasi biner ini ternyata cukup sederhana di Scikit-learn. + +[![ML untuk pemula - Regresi Logistik untuk klasifikasi data](https://img.youtube.com/vi/MmZS2otPrQ8/0.jpg)](https://youtu.be/MmZS2otPrQ8 "ML untuk pemula - Regresi Logistik untuk klasifikasi data") + +> 🎥 Klik gambar di atas untuk video singkat tentang membangun model regresi linear + +1. Pilih variabel yang ingin Anda gunakan dalam model klasifikasi Anda dan bagi set pelatihan dan pengujian dengan memanggil `train_test_split()`: + + ```python + from sklearn.model_selection import train_test_split + + X = encoded_pumpkins[encoded_pumpkins.columns.difference(['Color'])] + y = encoded_pumpkins['Color'] + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + + ``` + +2. Sekarang Anda dapat melatih model Anda, dengan memanggil `fit()` dengan data pelatihan Anda, dan mencetak hasilnya: + + ```python + from sklearn.metrics import f1_score, classification_report + from sklearn.linear_model import LogisticRegression + + model = LogisticRegression() + model.fit(X_train, y_train) + predictions = model.predict(X_test) + + print(classification_report(y_test, predictions)) + print('Predicted labels: ', predictions) + print('F1-score: ', f1_score(y_test, predictions)) + ``` + + Lihatlah skor model Anda. Tidak buruk, mengingat Anda hanya memiliki sekitar 1000 baris data: + + ```output + precision recall f1-score support + + 0 0.94 0.98 0.96 166 + 1 0.85 0.67 0.75 33 + + accuracy 0.92 199 + macro avg 0.89 0.82 0.85 199 + weighted avg 0.92 0.92 0.92 199 + + Predicted labels: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 + 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 + 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 0 0 0 1 0 0 0 0 0 0 0 0 1 1] + F1-score: 0.7457627118644068 + ``` + +## Pemahaman Lebih Baik melalui Matriks Kebingungan + +Meskipun Anda dapat mendapatkan laporan skor [istilah](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) dengan mencetak item di atas, Anda mungkin dapat memahami model Anda lebih mudah dengan menggunakan [matriks kebingungan](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) untuk membantu kita memahami bagaimana model bekerja. + +> 🎓 '[Matriks kebingungan](https://wikipedia.org/wiki/Confusion_matrix)' (atau 'matriks kesalahan') adalah tabel yang mengekspresikan positif dan negatif sejati vs. salah model Anda, sehingga mengukur akurasi prediksi. + +1. Untuk menggunakan matriks kebingungan, panggil `confusion_matrix()`: + + ```python + from sklearn.metrics import confusion_matrix + confusion_matrix(y_test, predictions) + ``` + + Lihatlah matriks kebingungan model Anda: + + ```output + array([[162, 4], + [ 11, 22]]) + ``` + +Di Scikit-learn, baris (axis 0) adalah label aktual dan kolom (axis 1) adalah label yang diprediksi. + +| | 0 | 1 | +| :---: | :---: | :---: | +| 0 | TN | FP | +| 1 | FN | TP | + +Apa yang terjadi di sini? Misalnya model kita diminta untuk mengklasifikasikan labu antara dua kategori biner, kategori 'putih' dan kategori 'bukan putih'. + +- Jika model Anda memprediksi labu sebagai bukan putih dan sebenarnya termasuk kategori 'bukan putih', kita menyebutnya negatif sejati, ditunjukkan oleh angka kiri atas. +- Jika model Anda memprediksi labu sebagai putih dan sebenarnya termasuk kategori 'bukan putih', kita menyebutnya negatif palsu, ditunjukkan oleh angka kiri bawah. +- Jika model Anda memprediksi labu sebagai bukan putih dan sebenarnya termasuk kategori 'putih', kita menyebutnya positif palsu, ditunjukkan oleh angka kanan atas. +- Jika model Anda memprediksi labu sebagai putih dan sebenarnya termasuk kategori 'putih', kita menyebutnya positif sejati, ditunjukkan oleh angka kanan bawah. + +Seperti yang mungkin Anda duga, lebih baik memiliki jumlah positif sejati dan negatif sejati yang lebih besar serta jumlah positif palsu dan negatif palsu yang lebih kecil, yang menunjukkan bahwa model bekerja lebih baik. +Bagaimana matriks kebingungan berhubungan dengan presisi dan recall? Ingat, laporan klasifikasi yang dicetak di atas menunjukkan presisi (0.85) dan recall (0.67). + +Presisi = tp / (tp + fp) = 22 / (22 + 4) = 0.8461538461538461 + +Recall = tp / (tp + fn) = 22 / (22 + 11) = 0.6666666666666666 + +✅ Q: Berdasarkan matriks kebingungan, bagaimana performa model? A: Tidak buruk; ada sejumlah besar true negatives tetapi juga beberapa false negatives. + +Mari kita tinjau kembali istilah-istilah yang telah kita lihat sebelumnya dengan bantuan pemetaan TP/TN dan FP/FN dari matriks kebingungan: + +🎓 Presisi: TP/(TP + FP) Fraksi dari instance yang relevan di antara instance yang diambil (misalnya, label mana yang diberi label dengan baik) + +🎓 Recall: TP/(TP + FN) Fraksi dari instance yang relevan yang diambil, baik diberi label dengan baik atau tidak + +🎓 f1-score: (2 * presisi * recall)/(presisi + recall) Rata-rata tertimbang dari presisi dan recall, dengan nilai terbaik adalah 1 dan terburuk adalah 0 + +🎓 Support: Jumlah kemunculan setiap label yang diambil + +🎓 Akurasi: (TP + TN)/(TP + TN + FP + FN) Persentase label yang diprediksi dengan akurat untuk sebuah sampel. + +🎓 Macro Avg: Perhitungan rata-rata metrik yang tidak berbobot untuk setiap label, tanpa memperhatikan ketidakseimbangan label. + +🎓 Weighted Avg: Perhitungan rata-rata metrik untuk setiap label, dengan memperhatikan ketidakseimbangan label dengan memberi bobot berdasarkan support (jumlah instance yang benar untuk setiap label). + +✅ Bisakah Anda memikirkan metrik mana yang harus diperhatikan jika Anda ingin model Anda mengurangi jumlah false negatives? + +## Visualisasi kurva ROC dari model ini + +[![ML untuk pemula - Menganalisis Performa Logistic Regression dengan Kurva ROC](https://img.youtube.com/vi/GApO575jTA0/0.jpg)](https://youtu.be/GApO575jTA0 "ML untuk pemula - Menganalisis Performa Logistic Regression dengan Kurva ROC") + +> 🎥 Klik gambar di atas untuk video singkat tentang kurva ROC + +Mari kita lakukan satu visualisasi lagi untuk melihat apa yang disebut 'kurva ROC': + +```python +from sklearn.metrics import roc_curve, roc_auc_score +import matplotlib +import matplotlib.pyplot as plt +%matplotlib inline + +y_scores = model.predict_proba(X_test) +fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1]) + +fig = plt.figure(figsize=(6, 6)) +plt.plot([0, 1], [0, 1], 'k--') +plt.plot(fpr, tpr) +plt.xlabel('False Positive Rate') +plt.ylabel('True Positive Rate') +plt.title('ROC Curve') +plt.show() +``` + +Menggunakan Matplotlib, plot [Receiving Operating Characteristic](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) atau ROC dari model. Kurva ROC sering digunakan untuk mendapatkan gambaran keluaran dari sebuah classifier dalam hal true positives vs. false positives. "Kurva ROC biasanya menampilkan true positive rate pada sumbu Y, dan false positive rate pada sumbu X." Oleh karena itu, kemiringan kurva dan ruang antara garis tengah dan kurva menjadi penting: Anda menginginkan kurva yang cepat naik dan melewati garis. Dalam kasus kita, ada false positives di awal, dan kemudian garis naik dan melewati dengan baik: + +![ROC](../../../../2-Regression/4-Logistic/images/ROC_2.png) + +Akhirnya, gunakan [`roc_auc_score` API](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score) dari Scikit-learn untuk menghitung 'Area Under the Curve' (AUC) yang sebenarnya: + +```python +auc = roc_auc_score(y_test,y_scores[:,1]) +print(auc) +``` +Hasilnya adalah `0.9749908725812341`. Mengingat bahwa AUC berkisar dari 0 hingga 1, Anda menginginkan skor yang besar, karena model yang 100% benar dalam prediksinya akan memiliki AUC sebesar 1; dalam kasus ini, modelnya _cukup baik_. + +Dalam pelajaran klasifikasi di masa depan, Anda akan belajar bagaimana mengiterasi untuk meningkatkan skor model Anda. Tetapi untuk saat ini, selamat! Anda telah menyelesaikan pelajaran regresi ini! + +--- +## 🚀Tantangan + +Masih banyak yang bisa dipelajari tentang logistic regression! Tetapi cara terbaik untuk belajar adalah dengan bereksperimen. Temukan dataset yang cocok untuk analisis jenis ini dan bangun model dengannya. Apa yang Anda pelajari? tip: coba [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) untuk dataset yang menarik. + +## [Kuis setelah kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Tinjauan & Studi Mandiri + +Baca beberapa halaman pertama dari [makalah ini dari Stanford](https://web.stanford.edu/~jurafsky/slp3/5.pdf) tentang beberapa penggunaan praktis logistic regression. Pikirkan tentang tugas-tugas yang lebih cocok untuk salah satu jenis regresi yang telah kita pelajari sejauh ini. Apa yang akan bekerja paling baik? + +## Tugas + +[Ulangi regresi ini](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/2-Regression/4-Logistic/assignment.md b/translations/id/2-Regression/4-Logistic/assignment.md new file mode 100644 index 00000000..2f3e342d --- /dev/null +++ b/translations/id/2-Regression/4-Logistic/assignment.md @@ -0,0 +1,25 @@ + +# Mencoba Ulang Beberapa Regresi + +## Instruksi + +Dalam pelajaran, Anda menggunakan sebagian data labu. Sekarang, kembali ke data asli dan coba gunakan semuanya, yang telah dibersihkan dan distandarisasi, untuk membangun model Logistic Regression. + +## Rubrik + +| Kriteria | Unggul | Memadai | Perlu Peningkatan | +| -------- | ----------------------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | +| | Notebook disajikan dengan model yang dijelaskan dengan baik dan berkinerja baik | Notebook disajikan dengan model yang berkinerja minimal | Notebook disajikan dengan model yang berkinerja buruk atau tidak ada | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan manusia profesional. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/2-Regression/4-Logistic/solution/Julia/README.md b/translations/id/2-Regression/4-Logistic/solution/Julia/README.md new file mode 100644 index 00000000..2cfbb092 --- /dev/null +++ b/translations/id/2-Regression/4-Logistic/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diperhatikan bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/2-Regression/README.md b/translations/id/2-Regression/README.md new file mode 100644 index 00000000..7b7e5ebb --- /dev/null +++ b/translations/id/2-Regression/README.md @@ -0,0 +1,54 @@ + +# Model regresi untuk pembelajaran mesin +## Topik regional: Model regresi untuk harga labu di Amerika Utara 🎃 + +Di Amerika Utara, labu sering diukir menjadi wajah menyeramkan untuk Halloween. Mari kita pelajari lebih lanjut tentang sayuran yang menarik ini! + +![jack-o-lanterns](../../../2-Regression/images/jack-o-lanterns.jpg) +> Foto oleh Beth Teutschmann di Unsplash + +## Apa yang akan Anda pelajari + +[![Pengantar Regresi](https://img.youtube.com/vi/5QnJtDad4iQ/0.jpg)](https://youtu.be/5QnJtDad4iQ "Video pengantar regresi - Klik untuk menonton!") +> 🎥 Klik gambar di atas untuk video pengantar singkat tentang pelajaran ini + +Pelajaran dalam bagian ini mencakup jenis regresi dalam konteks pembelajaran mesin. Model regresi dapat membantu menentukan _hubungan_ antara variabel. Jenis model ini dapat memprediksi nilai seperti panjang, suhu, atau usia, sehingga mengungkapkan hubungan antara variabel saat menganalisis titik data. + +Dalam rangkaian pelajaran ini, Anda akan mempelajari perbedaan antara regresi linear dan regresi logistik, serta kapan Anda sebaiknya memilih salah satu di antaranya. + +[![ML untuk pemula - Pengantar model regresi untuk pembelajaran mesin](https://img.youtube.com/vi/XA3OaoW86R8/0.jpg)](https://youtu.be/XA3OaoW86R8 "ML untuk pemula - Pengantar model regresi untuk pembelajaran mesin") + +> 🎥 Klik gambar di atas untuk video singkat yang memperkenalkan model regresi. + +Dalam kelompok pelajaran ini, Anda akan mempersiapkan diri untuk memulai tugas pembelajaran mesin, termasuk mengonfigurasi Visual Studio Code untuk mengelola notebook, lingkungan umum bagi ilmuwan data. Anda akan mengenal Scikit-learn, sebuah pustaka untuk pembelajaran mesin, dan Anda akan membangun model pertama Anda, dengan fokus pada model regresi dalam bab ini. + +> Ada alat low-code yang berguna yang dapat membantu Anda mempelajari cara bekerja dengan model regresi. Coba [Azure ML untuk tugas ini](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +### Pelajaran + +1. [Alat yang digunakan](1-Tools/README.md) +2. [Mengelola data](2-Data/README.md) +3. [Regresi linear dan polinomial](3-Linear/README.md) +4. [Regresi logistik](4-Logistic/README.md) + +--- +### Kredit + +"ML dengan regresi" ditulis dengan ♥️ oleh [Jen Looper](https://twitter.com/jenlooper) + +♥️ Kontributor kuis termasuk: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) dan [Ornella Altunyan](https://twitter.com/ornelladotcom) + +Dataset labu disarankan oleh [proyek ini di Kaggle](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) dan datanya bersumber dari [Laporan Standar Pasar Terminal Tanaman Khusus](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) yang didistribusikan oleh Departemen Pertanian Amerika Serikat. Kami telah menambahkan beberapa poin terkait warna berdasarkan varietas untuk menormalkan distribusi. Data ini berada dalam domain publik. + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/3-Web-App/1-Web-App/README.md b/translations/id/3-Web-App/1-Web-App/README.md new file mode 100644 index 00000000..860e4bce --- /dev/null +++ b/translations/id/3-Web-App/1-Web-App/README.md @@ -0,0 +1,359 @@ + +# Membangun Aplikasi Web untuk Menggunakan Model ML + +Dalam pelajaran ini, Anda akan melatih model ML pada kumpulan data yang luar biasa: _Penampakan UFO selama abad terakhir_, yang bersumber dari database NUFORC. + +Anda akan belajar: + +- Cara 'pickle' model yang telah dilatih +- Cara menggunakan model tersebut dalam aplikasi Flask + +Kita akan melanjutkan penggunaan notebook untuk membersihkan data dan melatih model, tetapi Anda dapat melangkah lebih jauh dengan mengeksplorasi penggunaan model 'di dunia nyata', yaitu dalam aplikasi web. + +Untuk melakukan ini, Anda perlu membangun aplikasi web menggunakan Flask. + +## [Kuis sebelum pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Membangun aplikasi + +Ada beberapa cara untuk membangun aplikasi web yang dapat menggunakan model machine learning. Arsitektur web Anda mungkin memengaruhi cara model Anda dilatih. Bayangkan Anda bekerja di sebuah perusahaan di mana tim data science telah melatih model yang ingin Anda gunakan dalam aplikasi. + +### Pertimbangan + +Ada banyak pertanyaan yang perlu Anda tanyakan: + +- **Apakah ini aplikasi web atau aplikasi seluler?** Jika Anda membangun aplikasi seluler atau perlu menggunakan model dalam konteks IoT, Anda dapat menggunakan [TensorFlow Lite](https://www.tensorflow.org/lite/) dan menggunakan model tersebut dalam aplikasi Android atau iOS. +- **Di mana model akan ditempatkan?** Di cloud atau secara lokal? +- **Dukungan offline.** Apakah aplikasi harus berfungsi secara offline? +- **Teknologi apa yang digunakan untuk melatih model?** Teknologi yang dipilih dapat memengaruhi alat yang perlu Anda gunakan. + - **Menggunakan TensorFlow.** Jika Anda melatih model menggunakan TensorFlow, misalnya, ekosistem tersebut menyediakan kemampuan untuk mengonversi model TensorFlow untuk digunakan dalam aplikasi web dengan menggunakan [TensorFlow.js](https://www.tensorflow.org/js/). + - **Menggunakan PyTorch.** Jika Anda membangun model menggunakan pustaka seperti [PyTorch](https://pytorch.org/), Anda memiliki opsi untuk mengekspornya dalam format [ONNX](https://onnx.ai/) (Open Neural Network Exchange) untuk digunakan dalam aplikasi web JavaScript yang dapat menggunakan [Onnx Runtime](https://www.onnxruntime.ai/). Opsi ini akan dieksplorasi dalam pelajaran mendatang untuk model yang dilatih dengan Scikit-learn. + - **Menggunakan Lobe.ai atau Azure Custom Vision.** Jika Anda menggunakan sistem ML SaaS (Software as a Service) seperti [Lobe.ai](https://lobe.ai/) atau [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) untuk melatih model, jenis perangkat lunak ini menyediakan cara untuk mengekspor model untuk berbagai platform, termasuk membangun API khusus yang dapat diakses di cloud oleh aplikasi online Anda. + +Anda juga memiliki kesempatan untuk membangun seluruh aplikasi web Flask yang dapat melatih model itu sendiri di browser web. Ini juga dapat dilakukan menggunakan TensorFlow.js dalam konteks JavaScript. + +Untuk tujuan kita, karena kita telah bekerja dengan notebook berbasis Python, mari kita eksplorasi langkah-langkah yang perlu Anda ambil untuk mengekspor model yang telah dilatih dari notebook tersebut ke format yang dapat dibaca oleh aplikasi web yang dibangun dengan Python. + +## Alat + +Untuk tugas ini, Anda memerlukan dua alat: Flask dan Pickle, keduanya berjalan di Python. + +✅ Apa itu [Flask](https://palletsprojects.com/p/flask/)? Didefinisikan sebagai 'micro-framework' oleh pembuatnya, Flask menyediakan fitur dasar kerangka kerja web menggunakan Python dan mesin templating untuk membangun halaman web. Lihat [modul pembelajaran ini](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) untuk berlatih membangun dengan Flask. + +✅ Apa itu [Pickle](https://docs.python.org/3/library/pickle.html)? Pickle 🥒 adalah modul Python yang melakukan serialisasi dan de-serialisasi struktur objek Python. Ketika Anda 'pickle' model, Anda melakukan serialisasi atau meratakan strukturnya untuk digunakan di web. Hati-hati: pickle tidak secara intrinsik aman, jadi berhati-hatilah jika diminta untuk 'un-pickle' file. File yang telah di-pickle memiliki akhiran `.pkl`. + +## Latihan - membersihkan data Anda + +Dalam pelajaran ini Anda akan menggunakan data dari 80.000 penampakan UFO, yang dikumpulkan oleh [NUFORC](https://nuforc.org) (The National UFO Reporting Center). Data ini memiliki beberapa deskripsi menarik tentang penampakan UFO, misalnya: + +- **Deskripsi panjang.** "Seorang pria muncul dari sinar cahaya yang bersinar di lapangan rumput pada malam hari dan dia berlari menuju tempat parkir Texas Instruments". +- **Deskripsi pendek.** "lampu-lampu itu mengejar kami". + +Spreadsheet [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) mencakup kolom tentang `city`, `state`, dan `country` tempat penampakan terjadi, `shape` objek, serta `latitude` dan `longitude`. + +Dalam [notebook](../../../../3-Web-App/1-Web-App/notebook.ipynb) kosong yang disertakan dalam pelajaran ini: + +1. import `pandas`, `matplotlib`, dan `numpy` seperti yang Anda lakukan dalam pelajaran sebelumnya dan import spreadsheet ufos. Anda dapat melihat contoh kumpulan data: + + ```python + import pandas as pd + import numpy as np + + ufos = pd.read_csv('./data/ufos.csv') + ufos.head() + ``` + +1. Konversikan data ufos ke dataframe kecil dengan judul baru. Periksa nilai unik di bidang `Country`. + + ```python + ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) + + ufos.Country.unique() + ``` + +1. Sekarang, Anda dapat mengurangi jumlah data yang perlu kita tangani dengan menghapus nilai null dan hanya mengimpor penampakan antara 1-60 detik: + + ```python + ufos.dropna(inplace=True) + + ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] + + ufos.info() + ``` + +1. Import pustaka `LabelEncoder` dari Scikit-learn untuk mengonversi nilai teks untuk negara menjadi angka: + + ✅ LabelEncoder mengkodekan data secara alfabetis + + ```python + from sklearn.preprocessing import LabelEncoder + + ufos['Country'] = LabelEncoder().fit_transform(ufos['Country']) + + ufos.head() + ``` + + Data Anda seharusnya terlihat seperti ini: + + ```output + Seconds Country Latitude Longitude + 2 20.0 3 53.200000 -2.916667 + 3 20.0 4 28.978333 -96.645833 + 14 30.0 4 35.823889 -80.253611 + 23 60.0 4 45.582778 -122.352222 + 24 3.0 3 51.783333 -0.783333 + ``` + +## Latihan - membangun model Anda + +Sekarang Anda dapat bersiap untuk melatih model dengan membagi data menjadi kelompok pelatihan dan pengujian. + +1. Pilih tiga fitur yang ingin Anda latih sebagai vektor X Anda, dan vektor y akan menjadi `Country`. Anda ingin dapat memasukkan `Seconds`, `Latitude`, dan `Longitude` dan mendapatkan id negara untuk dikembalikan. + + ```python + from sklearn.model_selection import train_test_split + + Selected_features = ['Seconds','Latitude','Longitude'] + + X = ufos[Selected_features] + y = ufos['Country'] + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + ``` + +1. Latih model Anda menggunakan regresi logistik: + + ```python + from sklearn.metrics import accuracy_score, classification_report + from sklearn.linear_model import LogisticRegression + model = LogisticRegression() + model.fit(X_train, y_train) + predictions = model.predict(X_test) + + print(classification_report(y_test, predictions)) + print('Predicted labels: ', predictions) + print('Accuracy: ', accuracy_score(y_test, predictions)) + ``` + +Akurasi cukup baik **(sekitar 95%)**, tidak mengherankan, karena `Country` dan `Latitude/Longitude` berkorelasi. + +Model yang Anda buat tidak terlalu revolusioner karena Anda seharusnya dapat menyimpulkan `Country` dari `Latitude` dan `Longitude`, tetapi ini adalah latihan yang baik untuk mencoba melatih dari data mentah yang telah Anda bersihkan, ekspor, dan kemudian menggunakan model ini dalam aplikasi web. + +## Latihan - 'pickle' model Anda + +Sekarang, saatnya untuk _pickle_ model Anda! Anda dapat melakukannya dalam beberapa baris kode. Setelah di-_pickle_, muat model yang telah di-pickle dan uji terhadap array data sampel yang berisi nilai untuk detik, latitude, dan longitude, + +```python +import pickle +model_filename = 'ufo-model.pkl' +pickle.dump(model, open(model_filename,'wb')) + +model = pickle.load(open('ufo-model.pkl','rb')) +print(model.predict([[50,44,-12]])) +``` + +Model mengembalikan **'3'**, yang merupakan kode negara untuk Inggris. Luar biasa! 👽 + +## Latihan - membangun aplikasi Flask + +Sekarang Anda dapat membangun aplikasi Flask untuk memanggil model Anda dan mengembalikan hasil serupa, tetapi dengan cara yang lebih menarik secara visual. + +1. Mulailah dengan membuat folder bernama **web-app** di sebelah file _notebook.ipynb_ tempat file _ufo-model.pkl_ Anda berada. + +1. Di dalam folder tersebut buat tiga folder lagi: **static**, dengan folder **css** di dalamnya, dan **templates**. Anda sekarang harus memiliki file dan direktori berikut: + + ```output + web-app/ + static/ + css/ + templates/ + notebook.ipynb + ufo-model.pkl + ``` + + ✅ Lihat folder solusi untuk melihat aplikasi yang sudah selesai + +1. File pertama yang dibuat di folder _web-app_ adalah file **requirements.txt**. Seperti _package.json_ dalam aplikasi JavaScript, file ini mencantumkan dependensi yang diperlukan oleh aplikasi. Dalam **requirements.txt** tambahkan baris: + + ```text + scikit-learn + pandas + numpy + flask + ``` + +1. Sekarang, jalankan file ini dengan menavigasi ke _web-app_: + + ```bash + cd web-app + ``` + +1. Di terminal Anda ketik `pip install`, untuk menginstal pustaka yang tercantum dalam _requirements.txt_: + + ```bash + pip install -r requirements.txt + ``` + +1. Sekarang, Anda siap membuat tiga file lagi untuk menyelesaikan aplikasi: + + 1. Buat **app.py** di root. + 2. Buat **index.html** di direktori _templates_. + 3. Buat **styles.css** di direktori _static/css_. + +1. Bangun file _styles.css_ dengan beberapa gaya: + + ```css + body { + width: 100%; + height: 100%; + font-family: 'Helvetica'; + background: black; + color: #fff; + text-align: center; + letter-spacing: 1.4px; + font-size: 30px; + } + + input { + min-width: 150px; + } + + .grid { + width: 300px; + border: 1px solid #2d2d2d; + display: grid; + justify-content: center; + margin: 20px auto; + } + + .box { + color: #fff; + background: #2d2d2d; + padding: 12px; + display: inline-block; + } + ``` + +1. Selanjutnya, bangun file _index.html_: + + ```html + + + + + 🛸 UFO Appearance Prediction! 👽 + + + + +
            + +
            + +

            According to the number of seconds, latitude and longitude, which country is likely to have reported seeing a UFO?

            + +
            + + + + +
            + +

            {{ prediction_text }}

            + +
            + +
            + + + + ``` + + Perhatikan templating dalam file ini. Perhatikan sintaks 'mustache' di sekitar variabel yang akan disediakan oleh aplikasi, seperti teks prediksi: `{{}}`. Ada juga formulir yang mengirimkan prediksi ke rute `/predict`. + + Akhirnya, Anda siap membangun file python yang menggerakkan konsumsi model dan tampilan prediksi: + +1. Dalam `app.py` tambahkan: + + ```python + import numpy as np + from flask import Flask, request, render_template + import pickle + + app = Flask(__name__) + + model = pickle.load(open("./ufo-model.pkl", "rb")) + + + @app.route("/") + def home(): + return render_template("index.html") + + + @app.route("/predict", methods=["POST"]) + def predict(): + + int_features = [int(x) for x in request.form.values()] + final_features = [np.array(int_features)] + prediction = model.predict(final_features) + + output = prediction[0] + + countries = ["Australia", "Canada", "Germany", "UK", "US"] + + return render_template( + "index.html", prediction_text="Likely country: {}".format(countries[output]) + ) + + + if __name__ == "__main__": + app.run(debug=True) + ``` + + > 💡 Tip: saat Anda menambahkan [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) saat menjalankan aplikasi web menggunakan Flask, setiap perubahan yang Anda buat pada aplikasi Anda akan langsung tercermin tanpa perlu memulai ulang server. Hati-hati! Jangan aktifkan mode ini dalam aplikasi produksi. + +Jika Anda menjalankan `python app.py` atau `python3 app.py` - server web Anda akan mulai berjalan secara lokal, dan Anda dapat mengisi formulir singkat untuk mendapatkan jawaban atas pertanyaan Anda tentang di mana UFO telah terlihat! + +Sebelum melakukannya, lihat bagian-bagian dari `app.py`: + +1. Pertama, dependensi dimuat dan aplikasi dimulai. +1. Kemudian, model diimpor. +1. Kemudian, index.html dirender di rute utama. + +Di rute `/predict`, beberapa hal terjadi saat formulir dikirimkan: + +1. Variabel formulir dikumpulkan dan dikonversi ke array numpy. Mereka kemudian dikirim ke model dan prediksi dikembalikan. +2. Negara-negara yang ingin ditampilkan dirender ulang sebagai teks yang dapat dibaca dari kode negara yang diprediksi, dan nilai tersebut dikirim kembali ke index.html untuk dirender dalam template. + +Menggunakan model dengan cara ini, dengan Flask dan model yang di-pickle, cukup sederhana. Hal tersulit adalah memahami bentuk data yang harus dikirim ke model untuk mendapatkan prediksi. Itu semua tergantung pada bagaimana model dilatih. Model ini memiliki tiga titik data yang harus dimasukkan untuk mendapatkan prediksi. + +Dalam pengaturan profesional, Anda dapat melihat betapa pentingnya komunikasi yang baik antara orang-orang yang melatih model dan mereka yang menggunakannya dalam aplikasi web atau seluler. Dalam kasus kita, hanya ada satu orang, yaitu Anda! + +--- + +## 🚀 Tantangan + +Alih-alih bekerja di notebook dan mengimpor model ke aplikasi Flask, Anda dapat melatih model langsung di dalam aplikasi Flask! Cobalah mengonversi kode Python Anda di notebook, mungkin setelah data Anda dibersihkan, untuk melatih model dari dalam aplikasi pada rute yang disebut `train`. Apa kelebihan dan kekurangan dari metode ini? + +## [Kuis setelah pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Tinjauan & Studi Mandiri + +Ada banyak cara untuk membangun aplikasi web yang menggunakan model ML. Buat daftar cara Anda dapat menggunakan JavaScript atau Python untuk membangun aplikasi web yang memanfaatkan machine learning. Pertimbangkan arsitektur: apakah model harus tetap berada di aplikasi atau hidup di cloud? Jika yang terakhir, bagaimana Anda mengaksesnya? Gambarlah model arsitektur untuk solusi web ML yang diterapkan. + +## Tugas + +[Coba model yang berbeda](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/3-Web-App/1-Web-App/assignment.md b/translations/id/3-Web-App/1-Web-App/assignment.md new file mode 100644 index 00000000..58aca745 --- /dev/null +++ b/translations/id/3-Web-App/1-Web-App/assignment.md @@ -0,0 +1,25 @@ + +# Coba model yang berbeda + +## Instruksi + +Setelah Anda membuat satu aplikasi web menggunakan model Regresi yang telah dilatih, gunakan salah satu model dari pelajaran Regresi sebelumnya untuk membuat ulang aplikasi web ini. Anda dapat mempertahankan gaya atau mendesainnya secara berbeda untuk mencerminkan data labu. Pastikan untuk mengubah input agar sesuai dengan metode pelatihan model Anda. + +## Rubrik + +| Kriteria | Unggul | Memadai | Perlu Perbaikan | +| -------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------- | +| | Aplikasi web berjalan seperti yang diharapkan dan telah diterapkan di cloud | Aplikasi web memiliki kekurangan atau menunjukkan hasil yang tidak terduga | Aplikasi web tidak berfungsi dengan baik | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/3-Web-App/README.md b/translations/id/3-Web-App/README.md new file mode 100644 index 00000000..016a66e2 --- /dev/null +++ b/translations/id/3-Web-App/README.md @@ -0,0 +1,35 @@ + +# Bangun Aplikasi Web untuk Menggunakan Model ML Anda + +Dalam bagian kurikulum ini, Anda akan diperkenalkan pada topik ML terapan: bagaimana cara menyimpan model Scikit-learn Anda sebagai file yang dapat digunakan untuk membuat prediksi dalam aplikasi web. Setelah model disimpan, Anda akan belajar cara menggunakannya dalam aplikasi web yang dibangun dengan Flask. Anda akan terlebih dahulu membuat model menggunakan beberapa data tentang penampakan UFO! Kemudian, Anda akan membangun aplikasi web yang memungkinkan Anda memasukkan jumlah detik bersama nilai lintang dan bujur untuk memprediksi negara mana yang melaporkan melihat UFO. + +![UFO Parking](../../../3-Web-App/images/ufo.jpg) + +Foto oleh Michael Herren di Unsplash + +## Pelajaran + +1. [Bangun Aplikasi Web](1-Web-App/README.md) + +## Kredit + +"Bangun Aplikasi Web" ditulis dengan ♥️ oleh [Jen Looper](https://twitter.com/jenlooper). + +♥️ Kuis ditulis oleh Rohan Raj. + +Dataset bersumber dari [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings). + +Arsitektur aplikasi web sebagian disarankan oleh [artikel ini](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4) dan [repo ini](https://github.com/abhinavsagar/machine-learning-deployment) oleh Abhinav Sagar. + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/4-Classification/1-Introduction/README.md b/translations/id/4-Classification/1-Introduction/README.md new file mode 100644 index 00000000..fbd799a2 --- /dev/null +++ b/translations/id/4-Classification/1-Introduction/README.md @@ -0,0 +1,313 @@ + +# Pengantar Klasifikasi + +Dalam empat pelajaran ini, Anda akan menjelajahi salah satu fokus utama dari pembelajaran mesin klasik - _klasifikasi_. Kita akan menggunakan berbagai algoritma klasifikasi dengan dataset tentang semua masakan luar biasa dari Asia dan India. Semoga Anda lapar! + +![hanya sejumput!](../../../../4-Classification/1-Introduction/images/pinch.png) + +> Rayakan masakan pan-Asia dalam pelajaran ini! Gambar oleh [Jen Looper](https://twitter.com/jenlooper) + +Klasifikasi adalah bentuk [pembelajaran terawasi](https://wikipedia.org/wiki/Supervised_learning) yang memiliki banyak kesamaan dengan teknik regresi. Jika pembelajaran mesin berfokus pada memprediksi nilai atau nama sesuatu menggunakan dataset, maka klasifikasi umumnya terbagi menjadi dua kelompok: _klasifikasi biner_ dan _klasifikasi multikelas_. + +[![Pengantar klasifikasi](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "Pengantar klasifikasi") + +> 🎥 Klik gambar di atas untuk video: John Guttag dari MIT memperkenalkan klasifikasi + +Ingat: + +- **Regresi linear** membantu Anda memprediksi hubungan antara variabel dan membuat prediksi akurat tentang di mana titik data baru akan berada dalam hubungan dengan garis tersebut. Misalnya, Anda dapat memprediksi _berapa harga labu pada bulan September vs. Desember_. +- **Regresi logistik** membantu Anda menemukan "kategori biner": pada titik harga ini, _apakah labu ini berwarna oranye atau tidak-oranye_? + +Klasifikasi menggunakan berbagai algoritma untuk menentukan cara lain dalam menentukan label atau kelas suatu titik data. Mari kita bekerja dengan data masakan ini untuk melihat apakah, dengan mengamati sekelompok bahan, kita dapat menentukan asal masakannya. + +## [Kuis pra-pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Pelajaran ini tersedia dalam R!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html) + +### Pengantar + +Klasifikasi adalah salah satu aktivitas mendasar bagi peneliti pembelajaran mesin dan ilmuwan data. Dari klasifikasi dasar nilai biner ("apakah email ini spam atau tidak?"), hingga klasifikasi dan segmentasi gambar yang kompleks menggunakan penglihatan komputer, selalu berguna untuk dapat mengelompokkan data ke dalam kelas dan mengajukan pertanyaan tentangnya. + +Untuk menyatakan proses ini dengan cara yang lebih ilmiah, metode klasifikasi Anda menciptakan model prediktif yang memungkinkan Anda memetakan hubungan antara variabel input ke variabel output. + +![klasifikasi biner vs. multikelas](../../../../4-Classification/1-Introduction/images/binary-multiclass.png) + +> Masalah biner vs. multikelas untuk algoritma klasifikasi. Infografis oleh [Jen Looper](https://twitter.com/jenlooper) + +Sebelum memulai proses membersihkan data, memvisualisasikannya, dan mempersiapkannya untuk tugas ML kita, mari kita pelajari sedikit tentang berbagai cara pembelajaran mesin dapat digunakan untuk mengklasifikasikan data. + +Berasal dari [statistik](https://wikipedia.org/wiki/Statistical_classification), klasifikasi menggunakan pembelajaran mesin klasik menggunakan fitur seperti `smoker`, `weight`, dan `age` untuk menentukan _kemungkinan mengembangkan penyakit X_. Sebagai teknik pembelajaran terawasi yang mirip dengan latihan regresi yang Anda lakukan sebelumnya, data Anda diberi label dan algoritma ML menggunakan label tersebut untuk mengklasifikasikan dan memprediksi kelas (atau 'fitur') dari dataset dan menetapkannya ke grup atau hasil. + +✅ Luangkan waktu sejenak untuk membayangkan dataset tentang masakan. Apa yang dapat dijawab oleh model multikelas? Apa yang dapat dijawab oleh model biner? Bagaimana jika Anda ingin menentukan apakah suatu masakan kemungkinan menggunakan fenugreek? Bagaimana jika Anda ingin melihat apakah, dengan bahan-bahan seperti bintang adas, artichoke, kembang kol, dan lobak, Anda dapat membuat hidangan khas India? + +[![Keranjang misteri yang gila](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "Keranjang misteri yang gila") + +> 🎥 Klik gambar di atas untuk video. Premis utama dari acara 'Chopped' adalah 'keranjang misteri' di mana koki harus membuat hidangan dari pilihan bahan acak. Tentunya model ML akan sangat membantu! + +## Halo 'classifier' + +Pertanyaan yang ingin kita ajukan dari dataset masakan ini sebenarnya adalah pertanyaan **multikelas**, karena kita memiliki beberapa kemungkinan masakan nasional untuk dikerjakan. Dengan sekelompok bahan, ke kelas mana data ini akan cocok? + +Scikit-learn menawarkan beberapa algoritma berbeda untuk digunakan dalam mengklasifikasikan data, tergantung pada jenis masalah yang ingin Anda selesaikan. Dalam dua pelajaran berikutnya, Anda akan mempelajari beberapa algoritma ini. + +## Latihan - bersihkan dan seimbangkan data Anda + +Tugas pertama yang harus dilakukan, sebelum memulai proyek ini, adalah membersihkan dan **menyeimbangkan** data Anda untuk mendapatkan hasil yang lebih baik. Mulailah dengan file kosong _notebook.ipynb_ di root folder ini. + +Hal pertama yang perlu diinstal adalah [imblearn](https://imbalanced-learn.org/stable/). Ini adalah paket Scikit-learn yang memungkinkan Anda menyeimbangkan data dengan lebih baik (Anda akan mempelajari lebih lanjut tentang tugas ini sebentar lagi). + +1. Untuk menginstal `imblearn`, jalankan `pip install`, seperti ini: + + ```python + pip install imblearn + ``` + +1. Impor paket yang Anda perlukan untuk mengimpor data dan memvisualisasikannya, juga impor `SMOTE` dari `imblearn`. + + ```python + import pandas as pd + import matplotlib.pyplot as plt + import matplotlib as mpl + import numpy as np + from imblearn.over_sampling import SMOTE + ``` + + Sekarang Anda siap untuk mengimpor data berikutnya. + +1. Tugas berikutnya adalah mengimpor data: + + ```python + df = pd.read_csv('../data/cuisines.csv') + ``` + + Menggunakan `read_csv()` akan membaca konten file csv _cusines.csv_ dan menempatkannya dalam variabel `df`. + +1. Periksa bentuk data: + + ```python + df.head() + ``` + + Lima baris pertama terlihat seperti ini: + + ```output + | | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | + | --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- | + | 0 | 65 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 1 | 66 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 2 | 67 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 3 | 68 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 4 | 69 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + ``` + +1. Dapatkan informasi tentang data ini dengan memanggil `info()`: + + ```python + df.info() + ``` + + Output Anda menyerupai: + + ```output + + RangeIndex: 2448 entries, 0 to 2447 + Columns: 385 entries, Unnamed: 0 to zucchini + dtypes: int64(384), object(1) + memory usage: 7.2+ MB + ``` + +## Latihan - mempelajari tentang masakan + +Sekarang pekerjaan mulai menjadi lebih menarik. Mari kita temukan distribusi data, per masakan. + +1. Plot data sebagai batang dengan memanggil `barh()`: + + ```python + df.cuisine.value_counts().plot.barh() + ``` + + ![distribusi data masakan](../../../../4-Classification/1-Introduction/images/cuisine-dist.png) + + Ada sejumlah masakan yang terbatas, tetapi distribusi data tidak merata. Anda dapat memperbaikinya! Sebelum melakukannya, jelajahi sedikit lebih jauh. + +1. Cari tahu berapa banyak data yang tersedia per masakan dan cetak: + + ```python + thai_df = df[(df.cuisine == "thai")] + japanese_df = df[(df.cuisine == "japanese")] + chinese_df = df[(df.cuisine == "chinese")] + indian_df = df[(df.cuisine == "indian")] + korean_df = df[(df.cuisine == "korean")] + + print(f'thai df: {thai_df.shape}') + print(f'japanese df: {japanese_df.shape}') + print(f'chinese df: {chinese_df.shape}') + print(f'indian df: {indian_df.shape}') + print(f'korean df: {korean_df.shape}') + ``` + + Outputnya terlihat seperti ini: + + ```output + thai df: (289, 385) + japanese df: (320, 385) + chinese df: (442, 385) + indian df: (598, 385) + korean df: (799, 385) + ``` + +## Menemukan bahan-bahan + +Sekarang Anda dapat menggali lebih dalam ke data dan mempelajari apa saja bahan-bahan khas per masakan. Anda harus membersihkan data berulang yang menciptakan kebingungan antara masakan, jadi mari kita pelajari tentang masalah ini. + +1. Buat fungsi `create_ingredient()` dalam Python untuk membuat dataframe bahan. Fungsi ini akan mulai dengan menghapus kolom yang tidak membantu dan menyortir bahan berdasarkan jumlahnya: + + ```python + def create_ingredient_df(df): + ingredient_df = df.T.drop(['cuisine','Unnamed: 0']).sum(axis=1).to_frame('value') + ingredient_df = ingredient_df[(ingredient_df.T != 0).any()] + ingredient_df = ingredient_df.sort_values(by='value', ascending=False, + inplace=False) + return ingredient_df + ``` + + Sekarang Anda dapat menggunakan fungsi tersebut untuk mendapatkan gambaran tentang sepuluh bahan paling populer berdasarkan masakan. + +1. Panggil `create_ingredient()` dan plot dengan memanggil `barh()`: + + ```python + thai_ingredient_df = create_ingredient_df(thai_df) + thai_ingredient_df.head(10).plot.barh() + ``` + + ![thai](../../../../4-Classification/1-Introduction/images/thai.png) + +1. Lakukan hal yang sama untuk data Jepang: + + ```python + japanese_ingredient_df = create_ingredient_df(japanese_df) + japanese_ingredient_df.head(10).plot.barh() + ``` + + ![japanese](../../../../4-Classification/1-Introduction/images/japanese.png) + +1. Sekarang untuk bahan-bahan Cina: + + ```python + chinese_ingredient_df = create_ingredient_df(chinese_df) + chinese_ingredient_df.head(10).plot.barh() + ``` + + ![chinese](../../../../4-Classification/1-Introduction/images/chinese.png) + +1. Plot bahan-bahan India: + + ```python + indian_ingredient_df = create_ingredient_df(indian_df) + indian_ingredient_df.head(10).plot.barh() + ``` + + ![indian](../../../../4-Classification/1-Introduction/images/indian.png) + +1. Akhirnya, plot bahan-bahan Korea: + + ```python + korean_ingredient_df = create_ingredient_df(korean_df) + korean_ingredient_df.head(10).plot.barh() + ``` + + ![korean](../../../../4-Classification/1-Introduction/images/korean.png) + +1. Sekarang, hapus bahan-bahan yang paling umum yang menciptakan kebingungan antara masakan yang berbeda, dengan memanggil `drop()`: + + Semua orang menyukai nasi, bawang putih, dan jahe! + + ```python + feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) + labels_df = df.cuisine #.unique() + feature_df.head() + ``` + +## Seimbangkan dataset + +Setelah Anda membersihkan data, gunakan [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "Teknik Oversampling Minoritas Sintetis" - untuk menyeimbangkannya. + +1. Panggil `fit_resample()`, strategi ini menghasilkan sampel baru melalui interpolasi. + + ```python + oversample = SMOTE() + transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) + ``` + + Dengan menyeimbangkan data Anda, Anda akan mendapatkan hasil yang lebih baik saat mengklasifikasikannya. Pikirkan tentang klasifikasi biner. Jika sebagian besar data Anda adalah satu kelas, model ML akan lebih sering memprediksi kelas tersebut, hanya karena ada lebih banyak data untuk itu. Menyeimbangkan data mengambil data yang miring dan membantu menghilangkan ketidakseimbangan ini. + +1. Sekarang Anda dapat memeriksa jumlah label per bahan: + + ```python + print(f'new label count: {transformed_label_df.value_counts()}') + print(f'old label count: {df.cuisine.value_counts()}') + ``` + + Output Anda terlihat seperti ini: + + ```output + new label count: korean 799 + chinese 799 + indian 799 + japanese 799 + thai 799 + Name: cuisine, dtype: int64 + old label count: korean 799 + indian 598 + chinese 442 + japanese 320 + thai 289 + Name: cuisine, dtype: int64 + ``` + + Data ini sudah bersih, seimbang, dan sangat lezat! + +1. Langkah terakhir adalah menyimpan data yang telah seimbang, termasuk label dan fitur, ke dalam dataframe baru yang dapat diekspor ke file: + + ```python + transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') + ``` + +1. Anda dapat melihat data sekali lagi menggunakan `transformed_df.head()` dan `transformed_df.info()`. Simpan salinan data ini untuk digunakan dalam pelajaran mendatang: + + ```python + transformed_df.head() + transformed_df.info() + transformed_df.to_csv("../data/cleaned_cuisines.csv") + ``` + + CSV baru ini sekarang dapat ditemukan di folder data root. + +--- + +## 🚀Tantangan + +Kurikulum ini berisi beberapa dataset yang menarik. Telusuri folder `data` dan lihat apakah ada yang berisi dataset yang cocok untuk klasifikasi biner atau multikelas? Pertanyaan apa yang akan Anda ajukan dari dataset ini? + +## [Kuis pasca-pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Tinjauan & Studi Mandiri + +Jelajahi API SMOTE. Untuk kasus penggunaan apa SMOTE paling cocok digunakan? Masalah apa yang dapat diselesaikannya? + +## Tugas + +[Telusuri metode klasifikasi](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/4-Classification/1-Introduction/assignment.md b/translations/id/4-Classification/1-Introduction/assignment.md new file mode 100644 index 00000000..f3d47b8e --- /dev/null +++ b/translations/id/4-Classification/1-Introduction/assignment.md @@ -0,0 +1,25 @@ + +# Jelajahi Metode Klasifikasi + +## Instruksi + +Dalam [dokumentasi Scikit-learn](https://scikit-learn.org/stable/supervised_learning.html) terdapat daftar panjang cara untuk mengklasifikasikan data. Lakukan pencarian kecil dalam dokumen tersebut: tujuan Anda adalah mencari metode klasifikasi dan mencocokkannya dengan dataset dalam kurikulum ini, pertanyaan yang dapat Anda ajukan tentangnya, dan teknik klasifikasi. Buat spreadsheet atau tabel dalam file .doc dan jelaskan bagaimana dataset akan bekerja dengan algoritma klasifikasi. + +## Rubrik + +| Kriteria | Unggul | Memadai | Perlu Peningkatan | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| | sebuah dokumen disajikan yang mengulas 5 algoritma beserta teknik klasifikasi. Ulasan tersebut dijelaskan dengan baik dan terperinci. | sebuah dokumen disajikan yang mengulas 3 algoritma beserta teknik klasifikasi. Ulasan tersebut dijelaskan dengan baik dan terperinci. | sebuah dokumen disajikan yang mengulas kurang dari tiga algoritma beserta teknik klasifikasi dan ulasannya tidak dijelaskan dengan baik atau terperinci. | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/4-Classification/1-Introduction/solution/Julia/README.md b/translations/id/4-Classification/1-Introduction/solution/Julia/README.md new file mode 100644 index 00000000..f741af18 --- /dev/null +++ b/translations/id/4-Classification/1-Introduction/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/4-Classification/2-Classifiers-1/README.md b/translations/id/4-Classification/2-Classifiers-1/README.md new file mode 100644 index 00000000..b899c4a2 --- /dev/null +++ b/translations/id/4-Classification/2-Classifiers-1/README.md @@ -0,0 +1,253 @@ + +# Pengelompokan Masakan 1 + +Dalam pelajaran ini, Anda akan menggunakan dataset yang telah Anda simpan dari pelajaran sebelumnya, yang berisi data seimbang dan bersih tentang berbagai jenis masakan. + +Anda akan menggunakan dataset ini dengan berbagai pengelompokan untuk _memprediksi jenis masakan nasional berdasarkan kelompok bahan_. Sambil melakukannya, Anda akan mempelajari lebih lanjut tentang beberapa cara algoritma dapat digunakan untuk tugas klasifikasi. + +## [Kuis sebelum pelajaran](https://ff-quizzes.netlify.app/en/ml/) +# Persiapan + +Dengan asumsi Anda telah menyelesaikan [Pelajaran 1](../1-Introduction/README.md), pastikan file _cleaned_cuisines.csv_ ada di folder root `/data` untuk empat pelajaran ini. + +## Latihan - memprediksi jenis masakan nasional + +1. Bekerja di folder _notebook.ipynb_ pelajaran ini, impor file tersebut bersama dengan pustaka Pandas: + + ```python + import pandas as pd + cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv") + cuisines_df.head() + ``` + + Data terlihat seperti ini: + +| | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | +| --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- | +| 0 | 0 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 1 | 1 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 2 | 2 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 3 | 3 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 4 | 4 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + + +1. Sekarang, impor beberapa pustaka lagi: + + ```python + from sklearn.linear_model import LogisticRegression + from sklearn.model_selection import train_test_split, cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve + from sklearn.svm import SVC + import numpy as np + ``` + +1. Pisahkan koordinat X dan y ke dalam dua dataframe untuk pelatihan. `cuisine` dapat menjadi dataframe label: + + ```python + cuisines_label_df = cuisines_df['cuisine'] + cuisines_label_df.head() + ``` + + Data akan terlihat seperti ini: + + ```output + 0 indian + 1 indian + 2 indian + 3 indian + 4 indian + Name: cuisine, dtype: object + ``` + +1. Hapus kolom `Unnamed: 0` dan kolom `cuisine` dengan memanggil `drop()`. Simpan data lainnya sebagai fitur yang dapat dilatih: + + ```python + cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) + cuisines_feature_df.head() + ``` + + Fitur Anda akan terlihat seperti ini: + +| | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | artemisia | artichoke | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | +| ---: | -----: | -------: | ----: | ---------: | ----: | -----------: | ------: | -------: | --------: | --------: | ---: | ------: | ----------: | ---------: | ----------------------: | ---: | ---: | ---: | ----: | -----: | -------: | +| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | + +Sekarang Anda siap untuk melatih model Anda! + +## Memilih pengelompokan + +Setelah data Anda bersih dan siap untuk pelatihan, Anda harus memutuskan algoritma mana yang akan digunakan untuk tugas ini. + +Scikit-learn mengelompokkan klasifikasi di bawah Pembelajaran Terawasi, dan dalam kategori tersebut Anda akan menemukan banyak cara untuk mengelompokkan. [Ragamnya](https://scikit-learn.org/stable/supervised_learning.html) cukup membingungkan pada pandangan pertama. Metode berikut semuanya mencakup teknik klasifikasi: + +- Model Linear +- Support Vector Machines +- Stochastic Gradient Descent +- Nearest Neighbors +- Gaussian Processes +- Decision Trees +- Metode Ensemble (Voting Classifier) +- Algoritma Multikelas dan multioutput (klasifikasi multikelas dan multilabel, klasifikasi multikelas-multioutput) + +> Anda juga dapat menggunakan [jaringan saraf untuk mengelompokkan data](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification), tetapi itu di luar cakupan pelajaran ini. + +### Pengelompokan mana yang harus dipilih? + +Jadi, pengelompokan mana yang harus Anda pilih? Sering kali, mencoba beberapa dan mencari hasil yang baik adalah cara untuk menguji. Scikit-learn menawarkan [perbandingan berdampingan](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) pada dataset yang dibuat, membandingkan KNeighbors, SVC dua cara, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB, dan QuadraticDiscriminationAnalysis, menunjukkan hasil yang divisualisasikan: + +![perbandingan pengelompokan](../../../../4-Classification/2-Classifiers-1/images/comparison.png) +> Grafik dihasilkan dari dokumentasi Scikit-learn + +> AutoML menyelesaikan masalah ini dengan menjalankan perbandingan ini di cloud, memungkinkan Anda memilih algoritma terbaik untuk data Anda. Coba [di sini](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott) + +### Pendekatan yang lebih baik + +Pendekatan yang lebih baik daripada menebak secara acak adalah mengikuti ide-ide pada [ML Cheat Sheet](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott) yang dapat diunduh ini. Di sini, kita menemukan bahwa, untuk masalah multikelas kita, kita memiliki beberapa pilihan: + +![cheatsheet untuk masalah multikelas](../../../../4-Classification/2-Classifiers-1/images/cheatsheet.png) +> Bagian dari Algorithm Cheat Sheet Microsoft, merinci opsi klasifikasi multikelas + +✅ Unduh cheat sheet ini, cetak, dan tempel di dinding Anda! + +### Penalaran + +Mari kita lihat apakah kita dapat menalar melalui pendekatan yang berbeda mengingat kendala yang kita miliki: + +- **Jaringan saraf terlalu berat**. Mengingat dataset kita yang bersih tetapi minimal, dan fakta bahwa kita menjalankan pelatihan secara lokal melalui notebook, jaringan saraf terlalu berat untuk tugas ini. +- **Tidak menggunakan pengelompokan dua kelas**. Kita tidak menggunakan pengelompokan dua kelas, jadi itu mengesampingkan one-vs-all. +- **Decision tree atau logistic regression bisa digunakan**. Decision tree mungkin cocok, atau logistic regression untuk data multikelas. +- **Multiclass Boosted Decision Trees menyelesaikan masalah yang berbeda**. Multiclass boosted decision tree paling cocok untuk tugas nonparametrik, misalnya tugas yang dirancang untuk membangun peringkat, sehingga tidak berguna untuk kita. + +### Menggunakan Scikit-learn + +Kita akan menggunakan Scikit-learn untuk menganalisis data kita. Namun, ada banyak cara untuk menggunakan logistic regression di Scikit-learn. Lihat [parameter yang dapat diteruskan](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). + +Pada dasarnya ada dua parameter penting - `multi_class` dan `solver` - yang perlu kita tentukan, saat kita meminta Scikit-learn untuk melakukan logistic regression. Nilai `multi_class` menerapkan perilaku tertentu. Nilai solver adalah algoritma yang akan digunakan. Tidak semua solver dapat dipasangkan dengan semua nilai `multi_class`. + +Menurut dokumentasi, dalam kasus multikelas, algoritma pelatihan: + +- **Menggunakan skema one-vs-rest (OvR)**, jika opsi `multi_class` diatur ke `ovr` +- **Menggunakan cross-entropy loss**, jika opsi `multi_class` diatur ke `multinomial`. (Saat ini opsi `multinomial` hanya didukung oleh solver ‘lbfgs’, ‘sag’, ‘saga’, dan ‘newton-cg’.)" + +> 🎓 'Skema' di sini bisa berupa 'ovr' (one-vs-rest) atau 'multinomial'. Karena logistic regression sebenarnya dirancang untuk mendukung klasifikasi biner, skema ini memungkinkan algoritma tersebut menangani tugas klasifikasi multikelas dengan lebih baik. [sumber](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/) + +> 🎓 'Solver' didefinisikan sebagai "algoritma yang digunakan dalam masalah optimasi". [sumber](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). + +Scikit-learn menawarkan tabel ini untuk menjelaskan bagaimana solver menangani tantangan yang berbeda yang disajikan oleh berbagai jenis struktur data: + +![solvers](../../../../4-Classification/2-Classifiers-1/images/solvers.png) + +## Latihan - membagi data + +Kita dapat fokus pada logistic regression untuk percobaan pelatihan pertama kita karena Anda baru saja mempelajari tentang hal ini dalam pelajaran sebelumnya. +Pisahkan data Anda menjadi kelompok pelatihan dan pengujian dengan memanggil `train_test_split()`: + +```python +X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) +``` + +## Latihan - menerapkan logistic regression + +Karena Anda menggunakan kasus multikelas, Anda perlu memilih _skema_ yang akan digunakan dan _solver_ yang akan diatur. Gunakan LogisticRegression dengan pengaturan multikelas dan solver **liblinear** untuk melatih. + +1. Buat logistic regression dengan multi_class diatur ke `ovr` dan solver diatur ke `liblinear`: + + ```python + lr = LogisticRegression(multi_class='ovr',solver='liblinear') + model = lr.fit(X_train, np.ravel(y_train)) + + accuracy = model.score(X_test, y_test) + print ("Accuracy is {}".format(accuracy)) + ``` + + ✅ Coba solver lain seperti `lbfgs`, yang sering diatur sebagai default +Gunakan fungsi Pandas [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html) untuk meratakan data Anda jika diperlukan. +Akurasi model ini cukup baik, yaitu di atas **80%**! + +1. Anda dapat melihat model ini beraksi dengan menguji satu baris data (#50): + + ```python + print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}') + print(f'cuisine: {y_test.iloc[50]}') + ``` + + Hasilnya dicetak: + + ```output + ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object') + cuisine: indian + ``` + + ✅ Cobalah nomor baris yang berbeda dan periksa hasilnya. + +1. Lebih mendalam, Anda dapat memeriksa akurasi prediksi ini: + + ```python + test= X_test.iloc[50].values.reshape(-1, 1).T + proba = model.predict_proba(test) + classes = model.classes_ + resultdf = pd.DataFrame(data=proba, columns=classes) + + topPrediction = resultdf.T.sort_values(by=[0], ascending = [False]) + topPrediction.head() + ``` + + Hasilnya dicetak - masakan India adalah tebakan terbaiknya, dengan probabilitas yang baik: + + | | 0 | + | -------: | -------: | + | indian | 0.715851 | + | chinese | 0.229475 | + | japanese | 0.029763 | + | korean | 0.017277 | + | thai | 0.007634 | + + ✅ Bisakah Anda menjelaskan mengapa model ini cukup yakin bahwa ini adalah masakan India? + +1. Dapatkan lebih banyak detail dengan mencetak laporan klasifikasi, seperti yang Anda lakukan dalam pelajaran regresi: + + ```python + y_pred = model.predict(X_test) + print(classification_report(y_test,y_pred)) + ``` + + | | precision | recall | f1-score | support | + | ------------ | --------- | ------ | -------- | ------- | + | chinese | 0.73 | 0.71 | 0.72 | 229 | + | indian | 0.91 | 0.93 | 0.92 | 254 | + | japanese | 0.70 | 0.75 | 0.72 | 220 | + | korean | 0.86 | 0.76 | 0.81 | 242 | + | thai | 0.79 | 0.85 | 0.82 | 254 | + | accuracy | 0.80 | 1199 | | | + | macro avg | 0.80 | 0.80 | 0.80 | 1199 | + | weighted avg | 0.80 | 0.80 | 0.80 | 1199 | + +## 🚀Tantangan + +Dalam pelajaran ini, Anda menggunakan data yang telah dibersihkan untuk membangun model pembelajaran mesin yang dapat memprediksi jenis masakan berdasarkan serangkaian bahan. Luangkan waktu untuk membaca berbagai opsi yang disediakan Scikit-learn untuk mengklasifikasikan data. Pelajari lebih dalam konsep 'solver' untuk memahami apa yang terjadi di balik layar. + +## [Kuis setelah pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Tinjauan & Studi Mandiri + +Pelajari lebih dalam tentang matematika di balik regresi logistik dalam [pelajaran ini](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf) +## Tugas + +[Pelajari tentang solver](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/4-Classification/2-Classifiers-1/assignment.md b/translations/id/4-Classification/2-Classifiers-1/assignment.md new file mode 100644 index 00000000..96579cc6 --- /dev/null +++ b/translations/id/4-Classification/2-Classifiers-1/assignment.md @@ -0,0 +1,24 @@ + +# Pelajari Pemecah Masalah +## Instruksi + +Dalam pelajaran ini, Anda mempelajari berbagai pemecah masalah yang menggabungkan algoritma dengan proses pembelajaran mesin untuk menciptakan model yang akurat. Tinjau pemecah masalah yang tercantum dalam pelajaran dan pilih dua. Dengan kata-kata Anda sendiri, bandingkan dan bedakan kedua pemecah masalah tersebut. Masalah seperti apa yang mereka selesaikan? Bagaimana mereka bekerja dengan berbagai struktur data? Mengapa Anda memilih satu dibandingkan yang lain? + +## Rubrik + +| Kriteria | Unggul | Memadai | Perlu Peningkatan | +| -------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------- | +| | File .doc disajikan dengan dua paragraf, masing-masing membahas satu pemecah masalah, dan membandingkannya secara mendalam. | File .doc disajikan dengan hanya satu paragraf | Tugas tidak lengkap | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/4-Classification/2-Classifiers-1/solution/Julia/README.md b/translations/id/4-Classification/2-Classifiers-1/solution/Julia/README.md new file mode 100644 index 00000000..213c0696 --- /dev/null +++ b/translations/id/4-Classification/2-Classifiers-1/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/4-Classification/3-Classifiers-2/README.md b/translations/id/4-Classification/3-Classifiers-2/README.md new file mode 100644 index 00000000..917b4fc5 --- /dev/null +++ b/translations/id/4-Classification/3-Classifiers-2/README.md @@ -0,0 +1,249 @@ + +# Pengklasifikasi Masakan 2 + +Dalam pelajaran klasifikasi kedua ini, Anda akan mengeksplorasi lebih banyak cara untuk mengklasifikasikan data numerik. Anda juga akan mempelajari dampak dari memilih satu pengklasifikasi dibandingkan yang lain. + +## [Kuis sebelum pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +### Prasyarat + +Kami mengasumsikan bahwa Anda telah menyelesaikan pelajaran sebelumnya dan memiliki dataset yang telah dibersihkan di folder `data` Anda dengan nama _cleaned_cuisines.csv_ di root folder 4 pelajaran ini. + +### Persiapan + +Kami telah memuat file _notebook.ipynb_ Anda dengan dataset yang telah dibersihkan dan telah membaginya menjadi dataframe X dan y, siap untuk proses pembangunan model. + +## Peta klasifikasi + +Sebelumnya, Anda telah mempelajari berbagai opsi yang tersedia untuk mengklasifikasikan data menggunakan lembar contekan dari Microsoft. Scikit-learn menawarkan lembar contekan serupa, tetapi lebih rinci, yang dapat membantu mempersempit pilihan estimator Anda (istilah lain untuk pengklasifikasi): + +![Peta ML dari Scikit-learn](../../../../4-Classification/3-Classifiers-2/images/map.png) +> Tip: [kunjungi peta ini secara online](https://scikit-learn.org/stable/tutorial/machine_learning_map/) dan klik jalurnya untuk membaca dokumentasi. + +### Rencana + +Peta ini sangat membantu setelah Anda memiliki pemahaman yang jelas tentang data Anda, karena Anda dapat 'berjalan' di sepanjang jalurnya untuk membuat keputusan: + +- Kami memiliki >50 sampel +- Kami ingin memprediksi sebuah kategori +- Kami memiliki data yang diberi label +- Kami memiliki kurang dari 100K sampel +- ✨ Kami dapat memilih Linear SVC +- Jika itu tidak berhasil, karena kami memiliki data numerik + - Kami dapat mencoba ✨ KNeighbors Classifier + - Jika itu tidak berhasil, coba ✨ SVC dan ✨ Ensemble Classifiers + +Ini adalah jalur yang sangat membantu untuk diikuti. + +## Latihan - membagi data + +Mengikuti jalur ini, kita harus mulai dengan mengimpor beberapa pustaka yang diperlukan. + +1. Impor pustaka yang diperlukan: + + ```python + from sklearn.neighbors import KNeighborsClassifier + from sklearn.linear_model import LogisticRegression + from sklearn.svm import SVC + from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier + from sklearn.model_selection import train_test_split, cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve + import numpy as np + ``` + +1. Bagi data pelatihan dan pengujian Anda: + + ```python + X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) + ``` + +## Pengklasifikasi Linear SVC + +Support-Vector Clustering (SVC) adalah bagian dari keluarga teknik ML Support-Vector Machines (pelajari lebih lanjut tentang ini di bawah). Dalam metode ini, Anda dapat memilih 'kernel' untuk menentukan cara mengelompokkan label. Parameter 'C' mengacu pada 'regularisasi' yang mengatur pengaruh parameter. Kernel dapat berupa [beberapa jenis](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC); di sini kami mengaturnya ke 'linear' untuk memastikan bahwa kami menggunakan Linear SVC. Probabilitas secara default diatur ke 'false'; di sini kami mengaturnya ke 'true' untuk mendapatkan estimasi probabilitas. Kami mengatur random state ke '0' untuk mengacak data agar mendapatkan probabilitas. + +### Latihan - menerapkan Linear SVC + +Mulailah dengan membuat array pengklasifikasi. Anda akan menambahkan secara bertahap ke array ini saat kami menguji. + +1. Mulailah dengan Linear SVC: + + ```python + C = 10 + # Create different classifiers. + classifiers = { + 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) + } + ``` + +2. Latih model Anda menggunakan Linear SVC dan cetak laporan: + + ```python + n_classifiers = len(classifiers) + + for index, (name, classifier) in enumerate(classifiers.items()): + classifier.fit(X_train, np.ravel(y_train)) + + y_pred = classifier.predict(X_test) + accuracy = accuracy_score(y_test, y_pred) + print("Accuracy (train) for %s: %0.1f%% " % (name, accuracy * 100)) + print(classification_report(y_test,y_pred)) + ``` + + Hasilnya cukup baik: + + ```output + Accuracy (train) for Linear SVC: 78.6% + precision recall f1-score support + + chinese 0.71 0.67 0.69 242 + indian 0.88 0.86 0.87 234 + japanese 0.79 0.74 0.76 254 + korean 0.85 0.81 0.83 242 + thai 0.71 0.86 0.78 227 + + accuracy 0.79 1199 + macro avg 0.79 0.79 0.79 1199 + weighted avg 0.79 0.79 0.79 1199 + ``` + +## Pengklasifikasi K-Neighbors + +K-Neighbors adalah bagian dari keluarga metode ML "neighbors", yang dapat digunakan untuk pembelajaran terawasi dan tidak terawasi. Dalam metode ini, sejumlah titik yang telah ditentukan dibuat dan data dikumpulkan di sekitar titik-titik ini sehingga label yang digeneralisasi dapat diprediksi untuk data tersebut. + +### Latihan - menerapkan pengklasifikasi K-Neighbors + +Pengklasifikasi sebelumnya cukup baik dan bekerja dengan baik pada data, tetapi mungkin kita bisa mendapatkan akurasi yang lebih baik. Coba pengklasifikasi K-Neighbors. + +1. Tambahkan baris ke array pengklasifikasi Anda (tambahkan koma setelah item Linear SVC): + + ```python + 'KNN classifier': KNeighborsClassifier(C), + ``` + + Hasilnya sedikit lebih buruk: + + ```output + Accuracy (train) for KNN classifier: 73.8% + precision recall f1-score support + + chinese 0.64 0.67 0.66 242 + indian 0.86 0.78 0.82 234 + japanese 0.66 0.83 0.74 254 + korean 0.94 0.58 0.72 242 + thai 0.71 0.82 0.76 227 + + accuracy 0.74 1199 + macro avg 0.76 0.74 0.74 1199 + weighted avg 0.76 0.74 0.74 1199 + ``` + + ✅ Pelajari tentang [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) + +## Pengklasifikasi Support Vector + +Pengklasifikasi Support-Vector adalah bagian dari keluarga [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine) metode ML yang digunakan untuk tugas klasifikasi dan regresi. SVM "memetakan contoh pelatihan ke titik-titik di ruang" untuk memaksimalkan jarak antara dua kategori. Data berikutnya dipetakan ke ruang ini sehingga kategorinya dapat diprediksi. + +### Latihan - menerapkan pengklasifikasi Support Vector + +Mari coba mendapatkan akurasi yang sedikit lebih baik dengan pengklasifikasi Support Vector. + +1. Tambahkan koma setelah item K-Neighbors, lalu tambahkan baris ini: + + ```python + 'SVC': SVC(), + ``` + + Hasilnya cukup baik! + + ```output + Accuracy (train) for SVC: 83.2% + precision recall f1-score support + + chinese 0.79 0.74 0.76 242 + indian 0.88 0.90 0.89 234 + japanese 0.87 0.81 0.84 254 + korean 0.91 0.82 0.86 242 + thai 0.74 0.90 0.81 227 + + accuracy 0.83 1199 + macro avg 0.84 0.83 0.83 1199 + weighted avg 0.84 0.83 0.83 1199 + ``` + + ✅ Pelajari tentang [Support-Vectors](https://scikit-learn.org/stable/modules/svm.html#svm) + +## Pengklasifikasi Ensemble + +Mari ikuti jalur hingga akhir, meskipun pengujian sebelumnya cukup baik. Mari coba beberapa 'Pengklasifikasi Ensemble', khususnya Random Forest dan AdaBoost: + +```python + 'RFST': RandomForestClassifier(n_estimators=100), + 'ADA': AdaBoostClassifier(n_estimators=100) +``` + +Hasilnya sangat baik, terutama untuk Random Forest: + +```output +Accuracy (train) for RFST: 84.5% + precision recall f1-score support + + chinese 0.80 0.77 0.78 242 + indian 0.89 0.92 0.90 234 + japanese 0.86 0.84 0.85 254 + korean 0.88 0.83 0.85 242 + thai 0.80 0.87 0.83 227 + + accuracy 0.84 1199 + macro avg 0.85 0.85 0.84 1199 +weighted avg 0.85 0.84 0.84 1199 + +Accuracy (train) for ADA: 72.4% + precision recall f1-score support + + chinese 0.64 0.49 0.56 242 + indian 0.91 0.83 0.87 234 + japanese 0.68 0.69 0.69 254 + korean 0.73 0.79 0.76 242 + thai 0.67 0.83 0.74 227 + + accuracy 0.72 1199 + macro avg 0.73 0.73 0.72 1199 +weighted avg 0.73 0.72 0.72 1199 +``` + +✅ Pelajari tentang [Pengklasifikasi Ensemble](https://scikit-learn.org/stable/modules/ensemble.html) + +Metode Machine Learning ini "menggabungkan prediksi dari beberapa estimator dasar" untuk meningkatkan kualitas model. Dalam contoh kami, kami menggunakan Random Trees dan AdaBoost. + +- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), metode rata-rata, membangun 'hutan' dari 'pohon keputusan' yang diinfuskan dengan elemen acak untuk menghindari overfitting. Parameter n_estimators diatur ke jumlah pohon. + +- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) menyesuaikan pengklasifikasi ke dataset dan kemudian menyesuaikan salinan pengklasifikasi tersebut ke dataset yang sama. Metode ini berfokus pada bobot item yang diklasifikasikan secara salah dan menyesuaikan fit untuk pengklasifikasi berikutnya untuk memperbaiki. + +--- + +## 🚀Tantangan + +Setiap teknik ini memiliki sejumlah besar parameter yang dapat Anda sesuaikan. Teliti parameter default masing-masing dan pikirkan apa arti penyesuaian parameter ini untuk kualitas model. + +## [Kuis setelah pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Tinjauan & Studi Mandiri + +Ada banyak istilah teknis dalam pelajaran ini, jadi luangkan waktu untuk meninjau [daftar ini](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) istilah yang berguna! + +## Tugas + +[Parameter play](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/4-Classification/3-Classifiers-2/assignment.md b/translations/id/4-Classification/3-Classifiers-2/assignment.md new file mode 100644 index 00000000..676fc4c9 --- /dev/null +++ b/translations/id/4-Classification/3-Classifiers-2/assignment.md @@ -0,0 +1,25 @@ + +# Parameter Play + +## Instruksi + +Ada banyak parameter yang diatur secara default saat bekerja dengan classifier ini. Intellisense di VS Code dapat membantu Anda menggali lebih dalam. Gunakan salah satu Teknik Klasifikasi ML dalam pelajaran ini dan latih ulang model dengan mengubah berbagai nilai parameter. Buat notebook yang menjelaskan mengapa beberapa perubahan meningkatkan kualitas model sementara yang lain menurunkannya. Jelaskan secara rinci dalam jawaban Anda. + +## Rubrik + +| Kriteria | Luar Biasa | Memadai | Perlu Peningkatan | +| -------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | ----------------------------- | +| | Notebook disajikan dengan classifier yang sepenuhnya dibangun dan parameternya diubah serta perubahan dijelaskan dalam kotak teks | Notebook disajikan sebagian atau penjelasannya kurang baik | Notebook memiliki bug atau cacat | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/4-Classification/3-Classifiers-2/solution/Julia/README.md b/translations/id/4-Classification/3-Classifiers-2/solution/Julia/README.md new file mode 100644 index 00000000..f3cee7cc --- /dev/null +++ b/translations/id/4-Classification/3-Classifiers-2/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/4-Classification/4-Applied/README.md b/translations/id/4-Classification/4-Applied/README.md new file mode 100644 index 00000000..01c0be2b --- /dev/null +++ b/translations/id/4-Classification/4-Applied/README.md @@ -0,0 +1,329 @@ + +# Membangun Aplikasi Web Rekomendasi Masakan + +Dalam pelajaran ini, Anda akan membangun model klasifikasi menggunakan beberapa teknik yang telah Anda pelajari di pelajaran sebelumnya dan dengan dataset masakan lezat yang digunakan sepanjang seri ini. Selain itu, Anda akan membuat aplikasi web kecil untuk menggunakan model yang telah disimpan, memanfaatkan runtime web Onnx. + +Salah satu penggunaan praktis yang paling berguna dari pembelajaran mesin adalah membangun sistem rekomendasi, dan Anda dapat mengambil langkah pertama ke arah itu hari ini! + +[![Menyajikan aplikasi web ini](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "Applied ML") + +> 🎥 Klik gambar di atas untuk video: Jen Looper membangun aplikasi web menggunakan data masakan yang telah diklasifikasi + +## [Kuis sebelum pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +Dalam pelajaran ini Anda akan belajar: + +- Cara membangun model dan menyimpannya sebagai model Onnx +- Cara menggunakan Netron untuk memeriksa model +- Cara menggunakan model Anda dalam aplikasi web untuk inferensi + +## Bangun model Anda + +Membangun sistem pembelajaran mesin terapan adalah bagian penting dari memanfaatkan teknologi ini untuk sistem bisnis Anda. Anda dapat menggunakan model dalam aplikasi web Anda (dan dengan demikian menggunakannya dalam konteks offline jika diperlukan) dengan menggunakan Onnx. + +Dalam [pelajaran sebelumnya](../../3-Web-App/1-Web-App/README.md), Anda membangun model Regresi tentang penampakan UFO, "pickled" model tersebut, dan menggunakannya dalam aplikasi Flask. Meskipun arsitektur ini sangat berguna untuk diketahui, ini adalah aplikasi Python full-stack, dan kebutuhan Anda mungkin mencakup penggunaan aplikasi JavaScript. + +Dalam pelajaran ini, Anda dapat membangun sistem berbasis JavaScript sederhana untuk inferensi. Namun, pertama-tama Anda perlu melatih model dan mengonversinya untuk digunakan dengan Onnx. + +## Latihan - latih model klasifikasi + +Pertama, latih model klasifikasi menggunakan dataset masakan yang telah dibersihkan yang kita gunakan sebelumnya. + +1. Mulailah dengan mengimpor pustaka yang berguna: + + ```python + !pip install skl2onnx + import pandas as pd + ``` + + Anda memerlukan '[skl2onnx](https://onnx.ai/sklearn-onnx/)' untuk membantu mengonversi model Scikit-learn Anda ke format Onnx. + +1. Kemudian, olah data Anda dengan cara yang sama seperti yang Anda lakukan di pelajaran sebelumnya, dengan membaca file CSV menggunakan `read_csv()`: + + ```python + data = pd.read_csv('../data/cleaned_cuisines.csv') + data.head() + ``` + +1. Hapus dua kolom pertama yang tidak diperlukan dan simpan data yang tersisa sebagai 'X': + + ```python + X = data.iloc[:,2:] + X.head() + ``` + +1. Simpan label sebagai 'y': + + ```python + y = data[['cuisine']] + y.head() + + ``` + +### Mulai rutinitas pelatihan + +Kami akan menggunakan pustaka 'SVC' yang memiliki akurasi yang baik. + +1. Impor pustaka yang sesuai dari Scikit-learn: + + ```python + from sklearn.model_selection import train_test_split + from sklearn.svm import SVC + from sklearn.model_selection import cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report + ``` + +1. Pisahkan set pelatihan dan pengujian: + + ```python + X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3) + ``` + +1. Bangun model Klasifikasi SVC seperti yang Anda lakukan di pelajaran sebelumnya: + + ```python + model = SVC(kernel='linear', C=10, probability=True,random_state=0) + model.fit(X_train,y_train.values.ravel()) + ``` + +1. Sekarang, uji model Anda dengan memanggil `predict()`: + + ```python + y_pred = model.predict(X_test) + ``` + +1. Cetak laporan klasifikasi untuk memeriksa kualitas model: + + ```python + print(classification_report(y_test,y_pred)) + ``` + + Seperti yang kita lihat sebelumnya, akurasinya baik: + + ```output + precision recall f1-score support + + chinese 0.72 0.69 0.70 257 + indian 0.91 0.87 0.89 243 + japanese 0.79 0.77 0.78 239 + korean 0.83 0.79 0.81 236 + thai 0.72 0.84 0.78 224 + + accuracy 0.79 1199 + macro avg 0.79 0.79 0.79 1199 + weighted avg 0.79 0.79 0.79 1199 + ``` + +### Konversi model Anda ke Onnx + +Pastikan untuk melakukan konversi dengan jumlah Tensor yang tepat. Dataset ini memiliki 380 bahan yang terdaftar, jadi Anda perlu mencatat jumlah tersebut dalam `FloatTensorType`: + +1. Konversi menggunakan jumlah tensor 380. + + ```python + from skl2onnx import convert_sklearn + from skl2onnx.common.data_types import FloatTensorType + + initial_type = [('float_input', FloatTensorType([None, 380]))] + options = {id(model): {'nocl': True, 'zipmap': False}} + ``` + +1. Buat file onx dan simpan sebagai **model.onnx**: + + ```python + onx = convert_sklearn(model, initial_types=initial_type, options=options) + with open("./model.onnx", "wb") as f: + f.write(onx.SerializeToString()) + ``` + + > Catatan, Anda dapat memasukkan [opsi](https://onnx.ai/sklearn-onnx/parameterized.html) dalam skrip konversi Anda. Dalam kasus ini, kami memasukkan 'nocl' sebagai True dan 'zipmap' sebagai False. Karena ini adalah model klasifikasi, Anda memiliki opsi untuk menghapus ZipMap yang menghasilkan daftar kamus (tidak diperlukan). `nocl` mengacu pada informasi kelas yang disertakan dalam model. Kurangi ukuran model Anda dengan mengatur `nocl` ke 'True'. + +Menjalankan seluruh notebook sekarang akan membangun model Onnx dan menyimpannya ke folder ini. + +## Lihat model Anda + +Model Onnx tidak terlalu terlihat di Visual Studio Code, tetapi ada perangkat lunak gratis yang sangat baik yang banyak digunakan oleh peneliti untuk memvisualisasikan model guna memastikan bahwa model tersebut dibangun dengan benar. Unduh [Netron](https://github.com/lutzroeder/Netron) dan buka file model.onnx Anda. Anda dapat melihat model sederhana Anda yang divisualisasikan, dengan 380 input dan classifier yang terdaftar: + +![Visual Netron](../../../../4-Classification/4-Applied/images/netron.png) + +Netron adalah alat yang berguna untuk melihat model Anda. + +Sekarang Anda siap menggunakan model keren ini dalam aplikasi web. Mari kita bangun aplikasi yang akan berguna ketika Anda melihat ke dalam lemari es Anda dan mencoba mencari tahu kombinasi bahan sisa mana yang dapat Anda gunakan untuk memasak masakan tertentu, seperti yang ditentukan oleh model Anda. + +## Bangun aplikasi web rekomendasi + +Anda dapat menggunakan model Anda langsung dalam aplikasi web. Arsitektur ini juga memungkinkan Anda menjalankannya secara lokal dan bahkan offline jika diperlukan. Mulailah dengan membuat file `index.html` di folder yang sama tempat Anda menyimpan file `model.onnx`. + +1. Dalam file ini _index.html_, tambahkan markup berikut: + + ```html + + +
            + Cuisine Matcher +
            + + ... + + + ``` + +1. Sekarang, bekerja di dalam tag `body`, tambahkan sedikit markup untuk menampilkan daftar kotak centang yang mencerminkan beberapa bahan: + + ```html +

            Check your refrigerator. What can you create?

            +
            +
            + + +
            + +
            + + +
            + +
            + + +
            + +
            + + +
            + +
            + + +
            + +
            + + +
            + +
            + + +
            +
            +
            + +
            + ``` + + Perhatikan bahwa setiap kotak centang diberi nilai. Ini mencerminkan indeks tempat bahan ditemukan sesuai dengan dataset. Apel, misalnya, dalam daftar alfabet ini, menempati kolom kelima, jadi nilainya adalah '4' karena kita mulai menghitung dari 0. Anda dapat berkonsultasi dengan [lembar kerja bahan](../../../../4-Classification/data/ingredient_indexes.csv) untuk menemukan indeks bahan tertentu. + + Melanjutkan pekerjaan Anda di file index.html, tambahkan blok skrip tempat model dipanggil setelah penutupan akhir ``. + +1. Pertama, impor [Onnx Runtime](https://www.onnxruntime.ai/): + + ```html + + ``` + + > Onnx Runtime digunakan untuk memungkinkan menjalankan model Onnx Anda di berbagai platform perangkat keras, termasuk optimasi dan API untuk digunakan. + +1. Setelah Runtime tersedia, Anda dapat memanggilnya: + + ```html + + ``` + +Dalam kode ini, ada beberapa hal yang terjadi: + +1. Anda membuat array dari 380 nilai yang mungkin (1 atau 0) untuk diatur dan dikirim ke model untuk inferensi, tergantung pada apakah kotak centang bahan dicentang. +2. Anda membuat array kotak centang dan cara untuk menentukan apakah mereka dicentang dalam fungsi `init` yang dipanggil saat aplikasi dimulai. Ketika kotak centang dicentang, array `ingredients` diubah untuk mencerminkan bahan yang dipilih. +3. Anda membuat fungsi `testCheckboxes` yang memeriksa apakah ada kotak centang yang dicentang. +4. Anda menggunakan fungsi `startInference` saat tombol ditekan dan, jika ada kotak centang yang dicentang, Anda memulai inferensi. +5. Rutinitas inferensi mencakup: + 1. Menyiapkan pemuatan asinkron model + 2. Membuat struktur Tensor untuk dikirim ke model + 3. Membuat 'feeds' yang mencerminkan input `float_input` yang Anda buat saat melatih model Anda (Anda dapat menggunakan Netron untuk memverifikasi nama tersebut) + 4. Mengirimkan 'feeds' ini ke model dan menunggu respons + +## Uji aplikasi Anda + +Buka sesi terminal di Visual Studio Code di folder tempat file index.html Anda berada. Pastikan Anda memiliki [http-server](https://www.npmjs.com/package/http-server) yang diinstal secara global, dan ketik `http-server` di prompt. Sebuah localhost akan terbuka dan Anda dapat melihat aplikasi web Anda. Periksa masakan apa yang direkomendasikan berdasarkan berbagai bahan: + +![Aplikasi web bahan](../../../../4-Classification/4-Applied/images/web-app.png) + +Selamat, Anda telah membuat aplikasi web 'rekomendasi' dengan beberapa bidang. Luangkan waktu untuk mengembangkan sistem ini! + +## 🚀Tantangan + +Aplikasi web Anda sangat minimal, jadi teruslah mengembangkannya menggunakan bahan dan indeksnya dari data [ingredient_indexes](../../../../4-Classification/data/ingredient_indexes.csv). Kombinasi rasa apa yang cocok untuk menciptakan hidangan nasional tertentu? + +## [Kuis setelah pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Tinjauan & Studi Mandiri + +Meskipun pelajaran ini hanya menyentuh kegunaan membuat sistem rekomendasi untuk bahan makanan, area aplikasi pembelajaran mesin ini sangat kaya dengan contoh. Bacalah lebih lanjut tentang bagaimana sistem ini dibangun: + +- https://www.sciencedirect.com/topics/computer-science/recommendation-engine +- https://www.technologyreview.com/2014/08/25/171547/the-ultimate-challenge-for-recommendation-engines/ +- https://www.technologyreview.com/2015/03/23/168831/everything-is-a-recommendation/ + +## Tugas + +[Bangun rekomendasi baru](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/4-Classification/4-Applied/assignment.md b/translations/id/4-Classification/4-Applied/assignment.md new file mode 100644 index 00000000..9a884bb1 --- /dev/null +++ b/translations/id/4-Classification/4-Applied/assignment.md @@ -0,0 +1,25 @@ + +# Membangun Sistem Rekomendasi + +## Instruksi + +Berdasarkan latihan-latihan dalam pelajaran ini, Anda sekarang tahu cara membangun aplikasi web berbasis JavaScript menggunakan Onnx Runtime dan model Onnx yang telah dikonversi. Cobalah untuk membuat sistem rekomendasi baru menggunakan data dari pelajaran ini atau sumber lain (harap berikan kredit). Anda bisa membuat rekomendasi hewan peliharaan berdasarkan berbagai atribut kepribadian, atau rekomendasi genre musik berdasarkan suasana hati seseorang. Jadilah kreatif! + +## Rubrik + +| Kriteria | Luar Biasa | Memadai | Perlu Peningkatan | +| -------- | ---------------------------------------------------------------------- | ------------------------------------- | --------------------------------- | +| | Aplikasi web dan notebook disajikan, keduanya terdokumentasi dengan baik dan berjalan | Salah satu dari keduanya hilang atau memiliki kekurangan | Keduanya hilang atau memiliki kekurangan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk memberikan hasil yang akurat, harap diperhatikan bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/4-Classification/README.md b/translations/id/4-Classification/README.md new file mode 100644 index 00000000..d2065848 --- /dev/null +++ b/translations/id/4-Classification/README.md @@ -0,0 +1,41 @@ + +# Memulai dengan klasifikasi + +## Topik regional: Masakan Asia dan India yang Lezat 🍜 + +Di Asia dan India, tradisi kuliner sangat beragam dan sangat lezat! Mari kita lihat data tentang masakan regional untuk mencoba memahami bahan-bahannya. + +![Penjual makanan Thailand](../../../4-Classification/images/thai-food.jpg) +> Foto oleh Lisheng Chang di Unsplash + +## Apa yang akan Anda pelajari + +Di bagian ini, Anda akan melanjutkan studi sebelumnya tentang Regresi dan mempelajari tentang pengklasifikasi lain yang dapat Anda gunakan untuk lebih memahami data. + +> Ada alat low-code yang berguna yang dapat membantu Anda mempelajari cara bekerja dengan model klasifikasi. Coba [Azure ML untuk tugas ini](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +## Pelajaran + +1. [Pengantar klasifikasi](1-Introduction/README.md) +2. [Pengklasifikasi lainnya](2-Classifiers-1/README.md) +3. [Pengklasifikasi tambahan](3-Classifiers-2/README.md) +4. [ML terapan: membangun aplikasi web](4-Applied/README.md) + +## Kredit + +"Memulai dengan klasifikasi" ditulis dengan ♥️ oleh [Cassie Breviu](https://www.twitter.com/cassiebreviu) dan [Jen Looper](https://www.twitter.com/jenlooper) + +Dataset masakan lezat bersumber dari [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines). + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diperhatikan bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/5-Clustering/1-Visualize/README.md b/translations/id/5-Clustering/1-Visualize/README.md new file mode 100644 index 00000000..53bff9c2 --- /dev/null +++ b/translations/id/5-Clustering/1-Visualize/README.md @@ -0,0 +1,347 @@ + +# Pengantar clustering + +Clustering adalah jenis [Pembelajaran Tanpa Pengawasan](https://wikipedia.org/wiki/Unsupervised_learning) yang mengasumsikan bahwa dataset tidak memiliki label atau inputnya tidak dipasangkan dengan output yang telah ditentukan sebelumnya. Clustering menggunakan berbagai algoritma untuk memilah data yang tidak berlabel dan memberikan pengelompokan berdasarkan pola yang ditemukan dalam data tersebut. + +[![No One Like You oleh PSquare](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](https://youtu.be/ty2advRiWJM "No One Like You oleh PSquare") + +> 🎥 Klik gambar di atas untuk menonton video. Sambil mempelajari machine learning dengan clustering, nikmati beberapa lagu Dance Hall Nigeria - ini adalah lagu yang sangat populer dari tahun 2014 oleh PSquare. + +## [Kuis sebelum kuliah](https://ff-quizzes.netlify.app/en/ml/) + +### Pengantar + +[Clustering](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) sangat berguna untuk eksplorasi data. Mari kita lihat apakah clustering dapat membantu menemukan tren dan pola dalam cara audiens Nigeria mengonsumsi musik. + +✅ Luangkan waktu sejenak untuk memikirkan kegunaan clustering. Dalam kehidupan sehari-hari, clustering terjadi setiap kali Anda memiliki tumpukan cucian dan perlu memilah pakaian anggota keluarga 🧦👕👖🩲. Dalam data science, clustering terjadi saat mencoba menganalisis preferensi pengguna, atau menentukan karakteristik dari dataset yang tidak berlabel. Clustering, dalam beberapa hal, membantu memahami kekacauan, seperti laci kaus kaki. + +[![Pengantar ML](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Pengantar Clustering") + +> 🎥 Klik gambar di atas untuk menonton video: John Guttag dari MIT memperkenalkan clustering. + +Dalam lingkungan profesional, clustering dapat digunakan untuk menentukan hal-hal seperti segmentasi pasar, misalnya menentukan kelompok usia mana yang membeli barang tertentu. Penggunaan lainnya adalah deteksi anomali, mungkin untuk mendeteksi penipuan dari dataset transaksi kartu kredit. Atau Anda mungkin menggunakan clustering untuk menentukan tumor dalam kumpulan pemindaian medis. + +✅ Luangkan waktu sejenak untuk memikirkan bagaimana Anda mungkin pernah menemui clustering 'di dunia nyata', dalam konteks perbankan, e-commerce, atau bisnis. + +> 🎓 Menariknya, analisis cluster berasal dari bidang Antropologi dan Psikologi pada tahun 1930-an. Bisakah Anda membayangkan bagaimana ini mungkin digunakan? + +Sebagai alternatif, Anda dapat menggunakannya untuk mengelompokkan hasil pencarian - misalnya berdasarkan tautan belanja, gambar, atau ulasan. Clustering berguna ketika Anda memiliki dataset besar yang ingin Anda kurangi dan analisis lebih mendalam, sehingga teknik ini dapat digunakan untuk mempelajari data sebelum model lain dibangun. + +✅ Setelah data Anda diorganisasi dalam cluster, Anda memberikan ID cluster, dan teknik ini dapat berguna untuk menjaga privasi dataset; Anda dapat merujuk pada titik data dengan ID cluster-nya, daripada dengan data yang lebih mengungkapkan. Bisakah Anda memikirkan alasan lain mengapa Anda merujuk pada ID cluster daripada elemen lain dari cluster untuk mengidentifikasinya? + +Perdalam pemahaman Anda tentang teknik clustering dalam [modul pembelajaran ini](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott). + +## Memulai dengan clustering + +[Scikit-learn menawarkan berbagai metode](https://scikit-learn.org/stable/modules/clustering.html) untuk melakukan clustering. Jenis yang Anda pilih akan bergantung pada kasus penggunaan Anda. Menurut dokumentasi, setiap metode memiliki berbagai manfaat. Berikut adalah tabel sederhana dari metode yang didukung oleh Scikit-learn dan kasus penggunaannya yang sesuai: + +| Nama metode | Kasus penggunaan | +| :-------------------------- | :-------------------------------------------------------------------- | +| K-Means | tujuan umum, induktif | +| Affinity propagation | banyak, cluster tidak merata, induktif | +| Mean-shift | banyak, cluster tidak merata, induktif | +| Spectral clustering | sedikit, cluster merata, transduktif | +| Ward hierarchical clustering| banyak, cluster terbatas, transduktif | +| Agglomerative clustering | banyak, terbatas, jarak non-Euclidean, transduktif | +| DBSCAN | geometri tidak datar, cluster tidak merata, transduktif | +| OPTICS | geometri tidak datar, cluster tidak merata dengan kepadatan variabel, transduktif | +| Gaussian mixtures | geometri datar, induktif | +| BIRCH | dataset besar dengan outlier, induktif | + +> 🎓 Cara kita membuat cluster sangat berkaitan dengan cara kita mengelompokkan titik data ke dalam grup. Mari kita bahas beberapa istilah: +> +> 🎓 ['Transduktif' vs. 'Induktif'](https://wikipedia.org/wiki/Transduction_(machine_learning)) +> +> Inferensi transduktif berasal dari kasus pelatihan yang diamati yang dipetakan ke kasus uji tertentu. Inferensi induktif berasal dari kasus pelatihan yang dipetakan ke aturan umum yang kemudian diterapkan pada kasus uji. +> +> Contoh: Bayangkan Anda memiliki dataset yang hanya sebagian berlabel. Beberapa hal adalah 'rekaman', beberapa 'CD', dan beberapa kosong. Tugas Anda adalah memberikan label untuk yang kosong. Jika Anda memilih pendekatan induktif, Anda akan melatih model untuk mencari 'rekaman' dan 'CD', dan menerapkan label tersebut pada data yang tidak berlabel. Pendekatan ini akan kesulitan mengklasifikasikan hal-hal yang sebenarnya adalah 'kaset'. Pendekatan transduktif, di sisi lain, menangani data yang tidak diketahui ini lebih efektif karena bekerja untuk mengelompokkan item serupa bersama-sama dan kemudian menerapkan label ke grup. Dalam kasus ini, cluster mungkin mencerminkan 'benda musik bulat' dan 'benda musik persegi'. +> +> 🎓 ['Geometri tidak datar' vs. 'datar'](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering) +> +> Berasal dari terminologi matematika, geometri tidak datar vs. datar mengacu pada pengukuran jarak antara titik-titik dengan metode geometris 'datar' ([Euclidean](https://wikipedia.org/wiki/Euclidean_geometry)) atau 'tidak datar' (non-Euclidean). +> +>'Datar' dalam konteks ini mengacu pada geometri Euclidean (bagian dari geometri ini diajarkan sebagai geometri 'bidang'), dan tidak datar mengacu pada geometri non-Euclidean. Apa hubungannya geometri dengan machine learning? Nah, sebagai dua bidang yang berakar pada matematika, harus ada cara umum untuk mengukur jarak antara titik-titik dalam cluster, dan itu dapat dilakukan dengan cara 'datar' atau 'tidak datar', tergantung pada sifat data. [Jarak Euclidean](https://wikipedia.org/wiki/Euclidean_distance) diukur sebagai panjang segmen garis antara dua titik. [Jarak non-Euclidean](https://wikipedia.org/wiki/Non-Euclidean_geometry) diukur sepanjang kurva. Jika data Anda, saat divisualisasikan, tampaknya tidak ada di bidang, Anda mungkin perlu menggunakan algoritma khusus untuk menanganinya. +> +![Infografis Geometri Datar vs Tidak Datar](../../../../5-Clustering/1-Visualize/images/flat-nonflat.png) +> Infografis oleh [Dasani Madipalli](https://twitter.com/dasani_decoded) +> +> 🎓 ['Jarak'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf) +> +> Cluster didefinisikan oleh matriks jaraknya, misalnya jarak antara titik-titik. Jarak ini dapat diukur dengan beberapa cara. Cluster Euclidean didefinisikan oleh rata-rata nilai titik, dan memiliki 'centroid' atau titik pusat. Jarak diukur berdasarkan jarak ke centroid tersebut. Jarak non-Euclidean mengacu pada 'clustroid', titik yang paling dekat dengan titik lainnya. Clustroid pada gilirannya dapat didefinisikan dengan berbagai cara. +> +> 🎓 ['Terbatas'](https://wikipedia.org/wiki/Constrained_clustering) +> +> [Clustering Terbatas](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) memperkenalkan pembelajaran 'semi-terawasi' ke dalam metode tanpa pengawasan ini. Hubungan antara titik-titik ditandai sebagai 'tidak boleh terhubung' atau 'harus terhubung' sehingga beberapa aturan dipaksakan pada dataset. +> +>Contoh: Jika algoritma dibiarkan bebas pada kumpulan data yang tidak berlabel atau semi-berlabel, cluster yang dihasilkannya mungkin berkualitas buruk. Dalam contoh di atas, cluster mungkin mengelompokkan 'benda musik bulat' dan 'benda musik persegi' dan 'benda segitiga' dan 'kue'. Jika diberikan beberapa batasan, atau aturan untuk diikuti ("item harus terbuat dari plastik", "item harus dapat menghasilkan musik") ini dapat membantu 'membatasi' algoritma untuk membuat pilihan yang lebih baik. +> +> 🎓 'Kepadatan' +> +> Data yang 'berisik' dianggap 'padat'. Jarak antara titik-titik dalam setiap cluster-nya mungkin, setelah diperiksa, lebih atau kurang padat, atau 'ramai' dan dengan demikian data ini perlu dianalisis dengan metode clustering yang sesuai. [Artikel ini](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) menunjukkan perbedaan antara menggunakan algoritma K-Means clustering vs. HDBSCAN untuk mengeksplorasi dataset yang berisik dengan kepadatan cluster yang tidak merata. + +## Algoritma clustering + +Ada lebih dari 100 algoritma clustering, dan penggunaannya bergantung pada sifat data yang ada. Mari kita bahas beberapa yang utama: + +- **Clustering hierarkis**. Jika sebuah objek diklasifikasikan berdasarkan kedekatannya dengan objek terdekat, bukan dengan yang lebih jauh, cluster terbentuk berdasarkan jarak anggotanya ke dan dari objek lain. Agglomerative clustering dari Scikit-learn bersifat hierarkis. + + ![Infografis Clustering Hierarkis](../../../../5-Clustering/1-Visualize/images/hierarchical.png) + > Infografis oleh [Dasani Madipalli](https://twitter.com/dasani_decoded) + +- **Clustering centroid**. Algoritma populer ini membutuhkan pilihan 'k', atau jumlah cluster yang akan dibentuk, setelah itu algoritma menentukan titik pusat cluster dan mengumpulkan data di sekitar titik tersebut. [K-means clustering](https://wikipedia.org/wiki/K-means_clustering) adalah versi clustering centroid yang populer. Pusat ditentukan oleh rata-rata terdekat, sehingga dinamakan demikian. Jarak kuadrat dari cluster diminimalkan. + + ![Infografis Clustering Centroid](../../../../5-Clustering/1-Visualize/images/centroid.png) + > Infografis oleh [Dasani Madipalli](https://twitter.com/dasani_decoded) + +- **Clustering berbasis distribusi**. Berdasarkan pemodelan statistik, clustering berbasis distribusi berpusat pada menentukan probabilitas bahwa suatu titik data termasuk dalam cluster, dan menetapkannya sesuai. Metode campuran Gaussian termasuk dalam jenis ini. + +- **Clustering berbasis kepadatan**. Titik data ditetapkan ke cluster berdasarkan kepadatannya, atau pengelompokannya di sekitar satu sama lain. Titik data yang jauh dari grup dianggap sebagai outlier atau noise. DBSCAN, Mean-shift, dan OPTICS termasuk dalam jenis clustering ini. + +- **Clustering berbasis grid**. Untuk dataset multi-dimensi, grid dibuat dan data dibagi di antara sel grid, sehingga membentuk cluster. + +## Latihan - cluster data Anda + +Clustering sebagai teknik sangat terbantu oleh visualisasi yang tepat, jadi mari kita mulai dengan memvisualisasikan data musik kita. Latihan ini akan membantu kita memutuskan metode clustering mana yang paling efektif digunakan untuk sifat data ini. + +1. Buka file [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) di folder ini. + +1. Impor paket `Seaborn` untuk visualisasi data yang baik. + + ```python + !pip install seaborn + ``` + +1. Tambahkan data lagu dari [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv). Muat dataframe dengan beberapa data tentang lagu-lagu tersebut. Bersiaplah untuk mengeksplorasi data ini dengan mengimpor pustaka dan mencetak data: + + ```python + import matplotlib.pyplot as plt + import pandas as pd + + df = pd.read_csv("../data/nigerian-songs.csv") + df.head() + ``` + + Periksa beberapa baris pertama data: + + | | name | album | artist | artist_top_genre | release_date | length | popularity | danceability | acousticness | energy | instrumentalness | liveness | loudness | speechiness | tempo | time_signature | + | --- | ------------------------ | ---------------------------- | ------------------- | ---------------- | ------------ | ------ | ---------- | ------------ | ------------ | ------ | ---------------- | -------- | -------- | ----------- | ------- | -------------- | + | 0 | Sparky | Mandy & The Jungle | Cruel Santino | alternative r&b | 2019 | 144000 | 48 | 0.666 | 0.851 | 0.42 | 0.534 | 0.11 | -6.699 | 0.0829 | 133.015 | 5 | + | 1 | shuga rush | EVERYTHING YOU HEARD IS TRUE | Odunsi (The Engine) | afropop | 2020 | 89488 | 30 | 0.71 | 0.0822 | 0.683 | 0.000169 | 0.101 | -5.64 | 0.36 | 129.993 | 3 | +| 2 | LITT! | LITT! | AYLØ | indie r&b | 2018 | 207758 | 40 | 0.836 | 0.272 | 0.564 | 0.000537 | 0.11 | -7.127 | 0.0424 | 130.005 | 4 | +| 3 | Confident / Feeling Cool | Enjoy Your Life | Lady Donli | nigerian pop | 2019 | 175135 | 14 | 0.894 | 0.798 | 0.611 | 0.000187 | 0.0964 | -4.961 | 0.113 | 111.087 | 4 | +| 4 | wanted you | rare. | Odunsi (The Engine) | afropop | 2018 | 152049 | 25 | 0.702 | 0.116 | 0.833 | 0.91 | 0.348 | -6.044 | 0.0447 | 105.115 | 4 | + +1. Dapatkan informasi tentang dataframe dengan memanggil `info()`: + + ```python + df.info() + ``` + + Outputnya terlihat seperti ini: + + ```output + + RangeIndex: 530 entries, 0 to 529 + Data columns (total 16 columns): + # Column Non-Null Count Dtype + --- ------ -------------- ----- + 0 name 530 non-null object + 1 album 530 non-null object + 2 artist 530 non-null object + 3 artist_top_genre 530 non-null object + 4 release_date 530 non-null int64 + 5 length 530 non-null int64 + 6 popularity 530 non-null int64 + 7 danceability 530 non-null float64 + 8 acousticness 530 non-null float64 + 9 energy 530 non-null float64 + 10 instrumentalness 530 non-null float64 + 11 liveness 530 non-null float64 + 12 loudness 530 non-null float64 + 13 speechiness 530 non-null float64 + 14 tempo 530 non-null float64 + 15 time_signature 530 non-null int64 + dtypes: float64(8), int64(4), object(4) + memory usage: 66.4+ KB + ``` + +1. Periksa ulang apakah ada nilai kosong dengan memanggil `isnull()` dan memastikan jumlahnya adalah 0: + + ```python + df.isnull().sum() + ``` + + Terlihat baik: + + ```output + name 0 + album 0 + artist 0 + artist_top_genre 0 + release_date 0 + length 0 + popularity 0 + danceability 0 + acousticness 0 + energy 0 + instrumentalness 0 + liveness 0 + loudness 0 + speechiness 0 + tempo 0 + time_signature 0 + dtype: int64 + ``` + +1. Deskripsikan data: + + ```python + df.describe() + ``` + + | | release_date | length | popularity | danceability | acousticness | energy | instrumentalness | liveness | loudness | speechiness | tempo | time_signature | + | ----- | ------------ | ----------- | ---------- | ------------ | ------------ | -------- | ---------------- | -------- | --------- | ----------- | ---------- | -------------- | + | count | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | + | mean | 2015.390566 | 222298.1698 | 17.507547 | 0.741619 | 0.265412 | 0.760623 | 0.016305 | 0.147308 | -4.953011 | 0.130748 | 116.487864 | 3.986792 | + | std | 3.131688 | 39696.82226 | 18.992212 | 0.117522 | 0.208342 | 0.148533 | 0.090321 | 0.123588 | 2.464186 | 0.092939 | 23.518601 | 0.333701 | + | min | 1998 | 89488 | 0 | 0.255 | 0.000665 | 0.111 | 0 | 0.0283 | -19.362 | 0.0278 | 61.695 | 3 | + | 25% | 2014 | 199305 | 0 | 0.681 | 0.089525 | 0.669 | 0 | 0.07565 | -6.29875 | 0.0591 | 102.96125 | 4 | + | 50% | 2016 | 218509 | 13 | 0.761 | 0.2205 | 0.7845 | 0.000004 | 0.1035 | -4.5585 | 0.09795 | 112.7145 | 4 | + | 75% | 2017 | 242098.5 | 31 | 0.8295 | 0.403 | 0.87575 | 0.000234 | 0.164 | -3.331 | 0.177 | 125.03925 | 4 | + | max | 2020 | 511738 | 73 | 0.966 | 0.954 | 0.995 | 0.91 | 0.811 | 0.582 | 0.514 | 206.007 | 5 | + +> 🤔 Jika kita bekerja dengan clustering, metode tanpa pengawasan yang tidak memerlukan data berlabel, mengapa kita menunjukkan data ini dengan label? Pada fase eksplorasi data, label berguna, tetapi tidak diperlukan agar algoritma clustering dapat bekerja. Anda juga bisa menghapus header kolom dan merujuk data berdasarkan nomor kolom. + +Lihat nilai umum dari data. Perhatikan bahwa popularitas bisa bernilai '0', yang menunjukkan lagu-lagu yang tidak memiliki peringkat. Mari kita hapus nilai-nilai tersebut sebentar lagi. + +1. Gunakan barplot untuk mengetahui genre yang paling populer: + + ```python + import seaborn as sns + + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top[:5].index,y=top[:5].values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + + ![most popular](../../../../5-Clustering/1-Visualize/images/popular.png) + +✅ Jika Anda ingin melihat lebih banyak nilai teratas, ubah `[:5]` menjadi nilai yang lebih besar, atau hapus untuk melihat semuanya. + +Catatan, ketika genre teratas dijelaskan sebagai 'Missing', itu berarti Spotify tidak mengklasifikasikannya, jadi mari kita hilangkan. + +1. Hilangkan data yang hilang dengan memfilternya: + + ```python + df = df[df['artist_top_genre'] != 'Missing'] + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top.index,y=top.values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + + Sekarang periksa ulang genre: + + ![most popular](../../../../5-Clustering/1-Visualize/images/all-genres.png) + +1. Tiga genre teratas mendominasi dataset ini. Mari kita fokus pada `afro dancehall`, `afropop`, dan `nigerian pop`, serta memfilter dataset untuk menghapus apa pun dengan nilai popularitas 0 (yang berarti tidak diklasifikasikan dengan popularitas dalam dataset dan dapat dianggap sebagai noise untuk tujuan kita): + + ```python + df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')] + df = df[(df['popularity'] > 0)] + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top.index,y=top.values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + +1. Lakukan tes cepat untuk melihat apakah data berkorelasi dengan cara yang sangat kuat: + + ```python + corrmat = df.corr(numeric_only=True) + f, ax = plt.subplots(figsize=(12, 9)) + sns.heatmap(corrmat, vmax=.8, square=True) + ``` + + ![correlations](../../../../5-Clustering/1-Visualize/images/correlation.png) + + Satu-satunya korelasi kuat adalah antara `energy` dan `loudness`, yang tidak terlalu mengejutkan, mengingat musik yang keras biasanya cukup energik. Selain itu, korelasi relatif lemah. Akan menarik untuk melihat apa yang dapat dilakukan algoritma clustering terhadap data ini. + + > 🎓 Perhatikan bahwa korelasi tidak menyiratkan sebab-akibat! Kita memiliki bukti korelasi tetapi tidak memiliki bukti sebab-akibat. [Sebuah situs web yang menghibur](https://tylervigen.com/spurious-correlations) memiliki beberapa visual yang menekankan poin ini. + +Apakah ada konvergensi dalam dataset ini terkait popularitas lagu yang dirasakan dan danceability? Sebuah FacetGrid menunjukkan bahwa ada lingkaran konsentris yang sejajar, terlepas dari genre. Mungkinkah selera Nigeria berkumpul pada tingkat danceability tertentu untuk genre ini? + +✅ Coba titik data yang berbeda (energy, loudness, speechiness) dan lebih banyak atau genre musik yang berbeda. Apa yang dapat Anda temukan? Lihat tabel `df.describe()` untuk melihat penyebaran umum dari titik data. + +### Latihan - distribusi data + +Apakah ketiga genre ini berbeda secara signifikan dalam persepsi danceability mereka, berdasarkan popularitas? + +1. Periksa distribusi data dari tiga genre teratas kita untuk popularitas dan danceability di sepanjang sumbu x dan y tertentu. + + ```python + sns.set_theme(style="ticks") + + g = sns.jointplot( + data=df, + x="popularity", y="danceability", hue="artist_top_genre", + kind="kde", + ) + ``` + + Anda dapat menemukan lingkaran konsentris di sekitar titik konvergensi umum, menunjukkan distribusi titik. + + > 🎓 Perhatikan bahwa contoh ini menggunakan grafik KDE (Kernel Density Estimate) yang mewakili data menggunakan kurva kepadatan probabilitas kontinu. Ini memungkinkan kita untuk menafsirkan data saat bekerja dengan beberapa distribusi. + + Secara umum, ketiga genre ini sejajar secara longgar dalam hal popularitas dan danceability. Menentukan cluster dalam data yang sejajar secara longgar ini akan menjadi tantangan: + + ![distribution](../../../../5-Clustering/1-Visualize/images/distribution.png) + +1. Buat scatter plot: + + ```python + sns.FacetGrid(df, hue="artist_top_genre", height=5) \ + .map(plt.scatter, "popularity", "danceability") \ + .add_legend() + ``` + + Scatterplot dari sumbu yang sama menunjukkan pola konvergensi yang serupa + + ![Facetgrid](../../../../5-Clustering/1-Visualize/images/facetgrid.png) + +Secara umum, untuk clustering, Anda dapat menggunakan scatterplot untuk menunjukkan cluster data, jadi menguasai jenis visualisasi ini sangat berguna. Dalam pelajaran berikutnya, kita akan menggunakan data yang telah difilter ini dan menggunakan clustering k-means untuk menemukan grup dalam data ini yang tampaknya tumpang tindih dengan cara yang menarik. + +--- + +## 🚀Tantangan + +Sebagai persiapan untuk pelajaran berikutnya, buatlah diagram tentang berbagai algoritma clustering yang mungkin Anda temukan dan gunakan dalam lingkungan produksi. Masalah apa yang coba diatasi oleh clustering? + +## [Kuis setelah pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Tinjauan & Studi Mandiri + +Sebelum Anda menerapkan algoritma clustering, seperti yang telah kita pelajari, ada baiknya memahami sifat dataset Anda. Baca lebih lanjut tentang topik ini [di sini](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) + +[Artikel yang bermanfaat ini](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) menjelaskan berbagai cara algoritma clustering berperilaku, mengingat bentuk data yang berbeda. + +## Tugas + +[Teliti visualisasi lain untuk clustering](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/5-Clustering/1-Visualize/assignment.md b/translations/id/5-Clustering/1-Visualize/assignment.md new file mode 100644 index 00000000..7a6c3427 --- /dev/null +++ b/translations/id/5-Clustering/1-Visualize/assignment.md @@ -0,0 +1,25 @@ + +# Penelitian visualisasi lain untuk clustering + +## Instruksi + +Dalam pelajaran ini, Anda telah mempelajari beberapa teknik visualisasi untuk memahami cara memplot data Anda sebagai persiapan untuk clustering. Scatterplot, khususnya, sangat berguna untuk menemukan kelompok objek. Teliti berbagai cara dan pustaka yang berbeda untuk membuat scatterplot dan dokumentasikan pekerjaan Anda dalam sebuah notebook. Anda dapat menggunakan data dari pelajaran ini, pelajaran lainnya, atau data yang Anda temukan sendiri (namun, harap cantumkan sumbernya di notebook Anda). Plot beberapa data menggunakan scatterplot dan jelaskan apa yang Anda temukan. + +## Rubrik + +| Kriteria | Unggul | Memadai | Perlu Peningkatan | +| -------- | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ----------------------------------- | +| | Sebuah notebook disajikan dengan lima scatterplot yang terdokumentasi dengan baik | Sebuah notebook disajikan dengan kurang dari lima scatterplot dan dokumentasinya kurang baik | Sebuah notebook yang tidak lengkap disajikan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/5-Clustering/1-Visualize/solution/Julia/README.md b/translations/id/5-Clustering/1-Visualize/solution/Julia/README.md new file mode 100644 index 00000000..7a453c67 --- /dev/null +++ b/translations/id/5-Clustering/1-Visualize/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/5-Clustering/2-K-Means/README.md b/translations/id/5-Clustering/2-K-Means/README.md new file mode 100644 index 00000000..05807a74 --- /dev/null +++ b/translations/id/5-Clustering/2-K-Means/README.md @@ -0,0 +1,261 @@ + +# K-Means clustering + +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +Dalam pelajaran ini, Anda akan belajar cara membuat klaster menggunakan Scikit-learn dan dataset musik Nigeria yang telah Anda impor sebelumnya. Kita akan membahas dasar-dasar K-Means untuk Klasterisasi. Ingatlah bahwa, seperti yang Anda pelajari di pelajaran sebelumnya, ada banyak cara untuk bekerja dengan klaster, dan metode yang Anda gunakan bergantung pada data Anda. Kita akan mencoba K-Means karena ini adalah teknik klasterisasi yang paling umum. Mari kita mulai! + +Istilah yang akan Anda pelajari: + +- Skor Silhouette +- Metode Elbow +- Inersia +- Variansi + +## Pengantar + +[K-Means Clustering](https://wikipedia.org/wiki/K-means_clustering) adalah metode yang berasal dari domain pemrosesan sinyal. Metode ini digunakan untuk membagi dan mengelompokkan data ke dalam 'k' klaster menggunakan serangkaian observasi. Setiap observasi bekerja untuk mengelompokkan titik data tertentu ke 'mean' terdekatnya, atau titik pusat dari sebuah klaster. + +Klaster dapat divisualisasikan sebagai [diagram Voronoi](https://wikipedia.org/wiki/Voronoi_diagram), yang mencakup sebuah titik (atau 'seed') dan wilayah yang sesuai dengannya. + +![voronoi diagram](../../../../5-Clustering/2-K-Means/images/voronoi.png) + +> Infografik oleh [Jen Looper](https://twitter.com/jenlooper) + +Proses klasterisasi K-Means [dijalankan dalam tiga langkah](https://scikit-learn.org/stable/modules/clustering.html#k-means): + +1. Algoritma memilih sejumlah titik pusat (k) dengan mengambil sampel dari dataset. Setelah itu, algoritma akan berulang: + 1. Menugaskan setiap sampel ke centroid terdekat. + 2. Membuat centroid baru dengan mengambil nilai rata-rata dari semua sampel yang ditugaskan ke centroid sebelumnya. + 3. Kemudian, menghitung perbedaan antara centroid baru dan lama, dan mengulangi hingga centroid stabil. + +Salah satu kelemahan menggunakan K-Means adalah Anda perlu menentukan 'k', yaitu jumlah centroid. Untungnya, 'metode elbow' membantu memperkirakan nilai awal yang baik untuk 'k'. Anda akan mencobanya sebentar lagi. + +## Prasyarat + +Anda akan bekerja di file [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/notebook.ipynb) pelajaran ini yang mencakup impor data dan pembersihan awal yang Anda lakukan di pelajaran sebelumnya. + +## Latihan - persiapan + +Mulailah dengan melihat kembali data lagu. + +1. Buat boxplot dengan memanggil `boxplot()` untuk setiap kolom: + + ```python + plt.figure(figsize=(20,20), dpi=200) + + plt.subplot(4,3,1) + sns.boxplot(x = 'popularity', data = df) + + plt.subplot(4,3,2) + sns.boxplot(x = 'acousticness', data = df) + + plt.subplot(4,3,3) + sns.boxplot(x = 'energy', data = df) + + plt.subplot(4,3,4) + sns.boxplot(x = 'instrumentalness', data = df) + + plt.subplot(4,3,5) + sns.boxplot(x = 'liveness', data = df) + + plt.subplot(4,3,6) + sns.boxplot(x = 'loudness', data = df) + + plt.subplot(4,3,7) + sns.boxplot(x = 'speechiness', data = df) + + plt.subplot(4,3,8) + sns.boxplot(x = 'tempo', data = df) + + plt.subplot(4,3,9) + sns.boxplot(x = 'time_signature', data = df) + + plt.subplot(4,3,10) + sns.boxplot(x = 'danceability', data = df) + + plt.subplot(4,3,11) + sns.boxplot(x = 'length', data = df) + + plt.subplot(4,3,12) + sns.boxplot(x = 'release_date', data = df) + ``` + + Data ini cukup berisik: dengan mengamati setiap kolom sebagai boxplot, Anda dapat melihat outlier. + + ![outliers](../../../../5-Clustering/2-K-Means/images/boxplots.png) + +Anda bisa menelusuri dataset dan menghapus outlier ini, tetapi itu akan membuat data menjadi sangat minimal. + +1. Untuk saat ini, pilih kolom mana yang akan Anda gunakan untuk latihan klasterisasi. Pilih kolom dengan rentang yang serupa dan encode kolom `artist_top_genre` sebagai data numerik: + + ```python + from sklearn.preprocessing import LabelEncoder + le = LabelEncoder() + + X = df.loc[:, ('artist_top_genre','popularity','danceability','acousticness','loudness','energy')] + + y = df['artist_top_genre'] + + X['artist_top_genre'] = le.fit_transform(X['artist_top_genre']) + + y = le.transform(y) + ``` + +1. Sekarang Anda perlu memilih berapa banyak klaster yang akan ditargetkan. Anda tahu ada 3 genre lagu yang kita ambil dari dataset, jadi mari kita coba 3: + + ```python + from sklearn.cluster import KMeans + + nclusters = 3 + seed = 0 + + km = KMeans(n_clusters=nclusters, random_state=seed) + km.fit(X) + + # Predict the cluster for each data point + + y_cluster_kmeans = km.predict(X) + y_cluster_kmeans + ``` + +Anda akan melihat array yang dicetak dengan klaster yang diprediksi (0, 1, atau 2) untuk setiap baris dalam dataframe. + +1. Gunakan array ini untuk menghitung 'skor silhouette': + + ```python + from sklearn import metrics + score = metrics.silhouette_score(X, y_cluster_kmeans) + score + ``` + +## Skor Silhouette + +Carilah skor silhouette yang mendekati 1. Skor ini bervariasi dari -1 hingga 1, dan jika skornya 1, klaster tersebut padat dan terpisah dengan baik dari klaster lainnya. Nilai mendekati 0 menunjukkan klaster yang saling tumpang tindih dengan sampel yang sangat dekat dengan batas keputusan klaster tetangga. [(Sumber)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam) + +Skor kita adalah **0.53**, jadi berada di tengah-tengah. Ini menunjukkan bahwa data kita tidak terlalu cocok untuk jenis klasterisasi ini, tetapi mari kita lanjutkan. + +### Latihan - membangun model + +1. Impor `KMeans` dan mulai proses klasterisasi. + + ```python + from sklearn.cluster import KMeans + wcss = [] + + for i in range(1, 11): + kmeans = KMeans(n_clusters = i, init = 'k-means++', random_state = 42) + kmeans.fit(X) + wcss.append(kmeans.inertia_) + + ``` + + Ada beberapa bagian di sini yang perlu dijelaskan. + + > 🎓 range: Ini adalah iterasi dari proses klasterisasi. + + > 🎓 random_state: "Menentukan pengacakan angka untuk inisialisasi centroid." [Sumber](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans) + + > 🎓 WCSS: "jumlah kuadrat dalam klaster" mengukur jarak rata-rata kuadrat dari semua titik dalam klaster ke centroid klaster. [Sumber](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce). + + > 🎓 Inersia: Algoritma K-Means mencoba memilih centroid untuk meminimalkan 'inersia', "ukuran seberapa koheren klaster secara internal." [Sumber](https://scikit-learn.org/stable/modules/clustering.html). Nilai ini ditambahkan ke variabel wcss pada setiap iterasi. + + > 🎓 k-means++: Dalam [Scikit-learn](https://scikit-learn.org/stable/modules/clustering.html#k-means), Anda dapat menggunakan optimasi 'k-means++', yang "menginisialisasi centroid agar (umumnya) berjauhan satu sama lain, menghasilkan hasil yang mungkin lebih baik daripada inisialisasi acak." + +### Metode Elbow + +Sebelumnya, Anda menyimpulkan bahwa karena Anda menargetkan 3 genre lagu, Anda harus memilih 3 klaster. Tetapi apakah itu benar? + +1. Gunakan 'metode elbow' untuk memastikan. + + ```python + plt.figure(figsize=(10,5)) + sns.lineplot(x=range(1, 11), y=wcss, marker='o', color='red') + plt.title('Elbow') + plt.xlabel('Number of clusters') + plt.ylabel('WCSS') + plt.show() + ``` + + Gunakan variabel `wcss` yang Anda bangun di langkah sebelumnya untuk membuat grafik yang menunjukkan di mana 'tikungan' pada elbow berada, yang menunjukkan jumlah klaster yang optimal. Mungkin memang **3**! + + ![elbow method](../../../../5-Clustering/2-K-Means/images/elbow.png) + +## Latihan - menampilkan klaster + +1. Coba prosesnya lagi, kali ini menetapkan tiga klaster, dan tampilkan klaster sebagai scatterplot: + + ```python + from sklearn.cluster import KMeans + kmeans = KMeans(n_clusters = 3) + kmeans.fit(X) + labels = kmeans.predict(X) + plt.scatter(df['popularity'],df['danceability'],c = labels) + plt.xlabel('popularity') + plt.ylabel('danceability') + plt.show() + ``` + +1. Periksa akurasi model: + + ```python + labels = kmeans.labels_ + + correct_labels = sum(y == labels) + + print("Result: %d out of %d samples were correctly labeled." % (correct_labels, y.size)) + + print('Accuracy score: {0:0.2f}'. format(correct_labels/float(y.size))) + ``` + + Akurasi model ini tidak terlalu baik, dan bentuk klaster memberikan petunjuk mengapa. + + ![clusters](../../../../5-Clustering/2-K-Means/images/clusters.png) + + Data ini terlalu tidak seimbang, terlalu sedikit berkorelasi, dan terdapat terlalu banyak variansi antara nilai kolom untuk dapat dikelompokkan dengan baik. Faktanya, klaster yang terbentuk mungkin sangat dipengaruhi atau bias oleh tiga kategori genre yang kita definisikan di atas. Itu adalah proses pembelajaran! + + Dalam dokumentasi Scikit-learn, Anda dapat melihat bahwa model seperti ini, dengan klaster yang tidak terlalu terpisah dengan baik, memiliki masalah 'variansi': + + ![problem models](../../../../5-Clustering/2-K-Means/images/problems.png) + > Infografik dari Scikit-learn + +## Variansi + +Variansi didefinisikan sebagai "rata-rata dari kuadrat perbedaan dari Mean" [(Sumber)](https://www.mathsisfun.com/data/standard-deviation.html). Dalam konteks masalah klasterisasi ini, variansi mengacu pada data di mana angka-angka dalam dataset cenderung menyimpang terlalu jauh dari mean. + +✅ Ini adalah momen yang tepat untuk memikirkan semua cara yang dapat Anda lakukan untuk memperbaiki masalah ini. Mengubah data sedikit lebih banyak? Menggunakan kolom yang berbeda? Menggunakan algoritma yang berbeda? Petunjuk: Cobalah [menskalakan data Anda](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) untuk menormalkannya dan menguji kolom lainnya. + +> Cobalah '[kalkulator variansi](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)' untuk memahami konsep ini lebih lanjut. + +--- + +## 🚀Tantangan + +Habiskan waktu dengan notebook ini, mengubah parameter. Bisakah Anda meningkatkan akurasi model dengan membersihkan data lebih banyak (misalnya, menghapus outlier)? Anda dapat menggunakan bobot untuk memberikan lebih banyak bobot pada sampel data tertentu. Apa lagi yang dapat Anda lakukan untuk membuat klaster yang lebih baik? + +Petunjuk: Cobalah menskalakan data Anda. Ada kode yang dikomentari di notebook yang menambahkan skala standar untuk membuat kolom data lebih mirip satu sama lain dalam hal rentang. Anda akan menemukan bahwa meskipun skor silhouette turun, 'tikungan' pada grafik elbow menjadi lebih halus. Hal ini terjadi karena membiarkan data tidak diskalakan memungkinkan data dengan variansi lebih kecil memiliki bobot lebih besar. Baca lebih lanjut tentang masalah ini [di sini](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226). + +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Tinjauan & Studi Mandiri + +Lihatlah Simulator K-Means [seperti ini](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). Anda dapat menggunakan alat ini untuk memvisualisasikan titik data sampel dan menentukan centroidnya. Anda dapat mengedit tingkat keacakan data, jumlah klaster, dan jumlah centroid. Apakah ini membantu Anda mendapatkan gambaran tentang bagaimana data dapat dikelompokkan? + +Selain itu, lihat [handout tentang K-Means](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) dari Stanford. + +## Tugas + +[Cobalah metode klasterisasi yang berbeda](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diperhatikan bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/5-Clustering/2-K-Means/assignment.md b/translations/id/5-Clustering/2-K-Means/assignment.md new file mode 100644 index 00000000..c33ab82d --- /dev/null +++ b/translations/id/5-Clustering/2-K-Means/assignment.md @@ -0,0 +1,25 @@ + +# Coba metode clustering yang berbeda + +## Instruksi + +Dalam pelajaran ini, Anda telah mempelajari tentang clustering K-Means. Kadang-kadang K-Means tidak cocok untuk data Anda. Buatlah notebook menggunakan data dari pelajaran ini atau dari sumber lain (cantumkan sumbernya) dan tunjukkan metode clustering yang berbeda TANPA menggunakan K-Means. Apa yang Anda pelajari? + +## Rubrik + +| Kriteria | Luar Biasa | Memadai | Perlu Peningkatan | +| -------- | --------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------- | +| | Notebook disajikan dengan model clustering yang terdokumentasi dengan baik | Notebook disajikan tanpa dokumentasi yang baik dan/atau tidak lengkap | Pekerjaan yang tidak lengkap diserahkan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/5-Clustering/2-K-Means/solution/Julia/README.md b/translations/id/5-Clustering/2-K-Means/solution/Julia/README.md new file mode 100644 index 00000000..57a710b5 --- /dev/null +++ b/translations/id/5-Clustering/2-K-Means/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/5-Clustering/README.md b/translations/id/5-Clustering/README.md new file mode 100644 index 00000000..5016e58d --- /dev/null +++ b/translations/id/5-Clustering/README.md @@ -0,0 +1,42 @@ + +# Model Clustering untuk Pembelajaran Mesin + +Clustering adalah tugas pembelajaran mesin yang bertujuan untuk menemukan objek yang mirip satu sama lain dan mengelompokkannya ke dalam kelompok yang disebut cluster. Yang membedakan clustering dari pendekatan lain dalam pembelajaran mesin adalah bahwa prosesnya terjadi secara otomatis. Faktanya, bisa dikatakan bahwa ini adalah kebalikan dari pembelajaran terawasi. + +## Topik regional: model clustering untuk selera musik audiens Nigeria 🎧 + +Audiens Nigeria yang beragam memiliki selera musik yang beragam pula. Dengan menggunakan data yang diambil dari Spotify (terinspirasi oleh [artikel ini](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421)), mari kita lihat beberapa musik yang populer di Nigeria. Dataset ini mencakup data tentang skor 'danceability', 'acousticness', tingkat keras suara (loudness), 'speechiness', popularitas, dan energi dari berbagai lagu. Akan menarik untuk menemukan pola dalam data ini! + +![Turntable](../../../5-Clustering/images/turntable.jpg) + +> Foto oleh Marcela Laskoski di Unsplash + +Dalam rangkaian pelajaran ini, Anda akan menemukan cara baru untuk menganalisis data menggunakan teknik clustering. Clustering sangat berguna ketika dataset Anda tidak memiliki label. Jika dataset Anda memiliki label, maka teknik klasifikasi seperti yang telah Anda pelajari dalam pelajaran sebelumnya mungkin lebih berguna. Namun, dalam kasus di mana Anda ingin mengelompokkan data yang tidak berlabel, clustering adalah cara yang bagus untuk menemukan pola. + +> Ada alat low-code yang berguna untuk membantu Anda mempelajari cara bekerja dengan model clustering. Cobalah [Azure ML untuk tugas ini](https://docs.microsoft.com/learn/modules/create-clustering-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +## Pelajaran + +1. [Pengantar clustering](1-Visualize/README.md) +2. [Clustering K-Means](2-K-Means/README.md) + +## Kredit + +Pelajaran ini ditulis dengan 🎶 oleh [Jen Looper](https://www.twitter.com/jenlooper) dengan ulasan yang bermanfaat dari [Rishit Dagli](https://rishit_dagli) dan [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan). + +Dataset [Lagu Nigeria](https://www.kaggle.com/sootersaalu/nigerian-songs-spotify) diambil dari Kaggle sebagai hasil scraping dari Spotify. + +Contoh K-Means yang berguna yang membantu dalam membuat pelajaran ini termasuk [eksplorasi iris](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering), [notebook pengantar](https://www.kaggle.com/prashant111/k-means-clustering-with-python), dan [contoh hipotetis NGO](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering). + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/6-NLP/1-Introduction-to-NLP/README.md b/translations/id/6-NLP/1-Introduction-to-NLP/README.md new file mode 100644 index 00000000..3d07410e --- /dev/null +++ b/translations/id/6-NLP/1-Introduction-to-NLP/README.md @@ -0,0 +1,179 @@ + +# Pengantar Pemrosesan Bahasa Alami + +Pelajaran ini mencakup sejarah singkat dan konsep penting dari *pemrosesan bahasa alami*, sebuah cabang dari *linguistik komputasional*. + +## [Kuis Pra-Pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Pengantar + +NLP, sebagaimana biasa disebut, adalah salah satu bidang yang paling dikenal di mana pembelajaran mesin telah diterapkan dan digunakan dalam perangkat lunak produksi. + +✅ Bisakah Anda memikirkan perangkat lunak yang Anda gunakan setiap hari yang mungkin memiliki beberapa NLP di dalamnya? Bagaimana dengan program pengolah kata atau aplikasi seluler yang Anda gunakan secara teratur? + +Anda akan belajar tentang: + +- **Ide tentang bahasa**. Bagaimana bahasa berkembang dan apa saja area studi utama. +- **Definisi dan konsep**. Anda juga akan mempelajari definisi dan konsep tentang bagaimana komputer memproses teks, termasuk parsing, tata bahasa, dan mengidentifikasi kata benda dan kata kerja. Ada beberapa tugas pemrograman dalam pelajaran ini, dan beberapa konsep penting diperkenalkan yang akan Anda pelajari untuk diprogram di pelajaran berikutnya. + +## Linguistik Komputasional + +Linguistik komputasional adalah bidang penelitian dan pengembangan selama beberapa dekade yang mempelajari bagaimana komputer dapat bekerja dengan, bahkan memahami, menerjemahkan, dan berkomunikasi dengan bahasa. Pemrosesan bahasa alami (NLP) adalah bidang terkait yang berfokus pada bagaimana komputer dapat memproses bahasa 'alami', atau bahasa manusia. + +### Contoh - dikte telepon + +Jika Anda pernah mendikte ke telepon Anda daripada mengetik atau bertanya kepada asisten virtual sebuah pertanyaan, ucapan Anda diubah menjadi bentuk teks dan kemudian diproses atau *diurai* dari bahasa yang Anda ucapkan. Kata kunci yang terdeteksi kemudian diproses ke dalam format yang dapat dipahami dan digunakan oleh telepon atau asisten. + +![pemahaman](../../../../6-NLP/1-Introduction-to-NLP/images/comprehension.png) +> Pemahaman linguistik yang sebenarnya itu sulit! Gambar oleh [Jen Looper](https://twitter.com/jenlooper) + +### Bagaimana teknologi ini bisa terjadi? + +Hal ini dimungkinkan karena seseorang menulis program komputer untuk melakukannya. Beberapa dekade yang lalu, beberapa penulis fiksi ilmiah memprediksi bahwa orang akan lebih sering berbicara dengan komputer mereka, dan komputer akan selalu memahami apa yang mereka maksud. Sayangnya, ternyata masalah ini lebih sulit daripada yang dibayangkan banyak orang, dan meskipun masalah ini jauh lebih dipahami saat ini, ada tantangan signifikan dalam mencapai pemrosesan bahasa alami yang 'sempurna' dalam hal memahami makna sebuah kalimat. Ini adalah masalah yang sangat sulit terutama dalam memahami humor atau mendeteksi emosi seperti sarkasme dalam sebuah kalimat. + +Pada titik ini, Anda mungkin mengingat pelajaran sekolah di mana guru membahas bagian-bagian tata bahasa dalam sebuah kalimat. Di beberapa negara, siswa diajarkan tata bahasa dan linguistik sebagai mata pelajaran khusus, tetapi di banyak negara, topik-topik ini dimasukkan sebagai bagian dari pembelajaran bahasa: baik bahasa pertama Anda di sekolah dasar (belajar membaca dan menulis) dan mungkin bahasa kedua di sekolah menengah. Jangan khawatir jika Anda bukan ahli dalam membedakan kata benda dari kata kerja atau kata keterangan dari kata sifat! + +Jika Anda kesulitan dengan perbedaan antara *present simple* dan *present progressive*, Anda tidak sendirian. Ini adalah hal yang menantang bagi banyak orang, bahkan penutur asli suatu bahasa. Kabar baiknya adalah bahwa komputer sangat baik dalam menerapkan aturan formal, dan Anda akan belajar menulis kode yang dapat *mengurai* sebuah kalimat sebaik manusia. Tantangan yang lebih besar yang akan Anda pelajari nanti adalah memahami *makna* dan *sentimen* dari sebuah kalimat. + +## Prasyarat + +Untuk pelajaran ini, prasyarat utama adalah kemampuan membaca dan memahami bahasa pelajaran ini. Tidak ada masalah matematika atau persamaan yang harus diselesaikan. Meskipun penulis asli menulis pelajaran ini dalam bahasa Inggris, pelajaran ini juga diterjemahkan ke dalam bahasa lain, sehingga Anda mungkin sedang membaca terjemahan. Ada contoh di mana sejumlah bahasa berbeda digunakan (untuk membandingkan aturan tata bahasa yang berbeda dari berbagai bahasa). Bahasa-bahasa ini *tidak* diterjemahkan, tetapi teks penjelasannya diterjemahkan, sehingga maknanya harus jelas. + +Untuk tugas pemrograman, Anda akan menggunakan Python dan contoh-contohnya menggunakan Python 3.8. + +Dalam bagian ini, Anda akan membutuhkan, dan menggunakan: + +- **Pemahaman Python 3**. Pemahaman bahasa pemrograman dalam Python 3, pelajaran ini menggunakan input, loop, pembacaan file, array. +- **Visual Studio Code + ekstensi**. Kami akan menggunakan Visual Studio Code dan ekstensi Python-nya. Anda juga dapat menggunakan IDE Python pilihan Anda. +- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) adalah pustaka pemrosesan teks yang disederhanakan untuk Python. Ikuti instruksi di situs TextBlob untuk menginstalnya di sistem Anda (instal juga korpora, seperti yang ditunjukkan di bawah): + + ```bash + pip install -U textblob + python -m textblob.download_corpora + ``` + +> 💡 Tip: Anda dapat menjalankan Python langsung di lingkungan VS Code. Periksa [dokumen](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) untuk informasi lebih lanjut. + +## Berbicara dengan Mesin + +Sejarah mencoba membuat komputer memahami bahasa manusia sudah berlangsung selama beberapa dekade, dan salah satu ilmuwan pertama yang mempertimbangkan pemrosesan bahasa alami adalah *Alan Turing*. + +### Tes 'Turing' + +Ketika Turing meneliti *kecerdasan buatan* pada tahun 1950-an, ia mempertimbangkan apakah tes percakapan dapat diberikan kepada manusia dan komputer (melalui korespondensi tertulis) di mana manusia dalam percakapan tersebut tidak yakin apakah mereka sedang berbicara dengan manusia lain atau komputer. + +Jika, setelah percakapan berlangsung cukup lama, manusia tidak dapat menentukan apakah jawaban berasal dari komputer atau tidak, maka dapatkah komputer dikatakan *berpikir*? + +### Inspirasi - 'permainan imitasi' + +Ide ini berasal dari permainan pesta yang disebut *Permainan Imitasi* di mana seorang interogator berada sendirian di sebuah ruangan dan ditugaskan untuk menentukan siapa dari dua orang (di ruangan lain) yang masing-masing adalah laki-laki dan perempuan. Interogator dapat mengirim catatan, dan harus mencoba memikirkan pertanyaan di mana jawaban tertulis mengungkapkan jenis kelamin orang misterius tersebut. Tentu saja, para pemain di ruangan lain mencoba menipu interogator dengan menjawab pertanyaan sedemikian rupa sehingga menyesatkan atau membingungkan interogator, sambil tetap memberikan kesan menjawab dengan jujur. + +### Mengembangkan Eliza + +Pada tahun 1960-an, seorang ilmuwan MIT bernama *Joseph Weizenbaum* mengembangkan [*Eliza*](https://wikipedia.org/wiki/ELIZA), seorang 'terapis' komputer yang akan mengajukan pertanyaan kepada manusia dan memberikan kesan memahami jawaban mereka. Namun, meskipun Eliza dapat mengurai sebuah kalimat dan mengidentifikasi konstruksi tata bahasa tertentu dan kata kunci untuk memberikan jawaban yang masuk akal, Eliza tidak dapat dikatakan *memahami* kalimat tersebut. Jika Eliza diberikan sebuah kalimat dengan format "**Saya merasa** sedih", ia mungkin akan menyusun ulang dan mengganti kata-kata dalam kalimat tersebut untuk membentuk respons "Sudah berapa lama **Anda merasa** sedih". + +Ini memberikan kesan bahwa Eliza memahami pernyataan tersebut dan mengajukan pertanyaan lanjutan, padahal sebenarnya ia hanya mengubah bentuk kata kerja dan menambahkan beberapa kata. Jika Eliza tidak dapat mengidentifikasi kata kunci yang memiliki respons, ia akan memberikan respons acak yang dapat berlaku untuk banyak pernyataan berbeda. Eliza dapat dengan mudah ditipu, misalnya jika pengguna menulis "**Anda adalah** sebuah sepeda", ia mungkin akan merespons dengan "Sudah berapa lama **saya menjadi** sebuah sepeda?", alih-alih respons yang lebih masuk akal. + +[![Berbicara dengan Eliza](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "Berbicara dengan Eliza") + +> 🎥 Klik gambar di atas untuk video tentang program ELIZA asli + +> Catatan: Anda dapat membaca deskripsi asli tentang [Eliza](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) yang diterbitkan pada tahun 1966 jika Anda memiliki akun ACM. Alternatifnya, baca tentang Eliza di [wikipedia](https://wikipedia.org/wiki/ELIZA) + +## Latihan - membuat bot percakapan dasar + +Bot percakapan, seperti Eliza, adalah program yang meminta input pengguna dan tampaknya memahami serta merespons dengan cerdas. Tidak seperti Eliza, bot kita tidak akan memiliki beberapa aturan yang memberikan kesan percakapan yang cerdas. Sebaliknya, bot kita hanya akan memiliki satu kemampuan, yaitu melanjutkan percakapan dengan respons acak yang mungkin cocok dalam percakapan sepele. + +### Rencana + +Langkah-langkah Anda saat membuat bot percakapan: + +1. Cetak instruksi yang memberi tahu pengguna cara berinteraksi dengan bot +2. Mulai loop + 1. Terima input pengguna + 2. Jika pengguna meminta keluar, maka keluar + 3. Proses input pengguna dan tentukan respons (dalam hal ini, respons adalah pilihan acak dari daftar kemungkinan respons generik) + 4. Cetak respons +3. Kembali ke langkah 2 + +### Membuat bot + +Mari kita buat bot berikutnya. Kita akan mulai dengan mendefinisikan beberapa frasa. + +1. Buat bot ini sendiri dalam Python dengan respons acak berikut: + + ```python + random_responses = ["That is quite interesting, please tell me more.", + "I see. Do go on.", + "Why do you say that?", + "Funny weather we've been having, isn't it?", + "Let's change the subject.", + "Did you catch the game last night?"] + ``` + + Berikut adalah beberapa output contoh untuk panduan Anda (input pengguna ada di baris yang dimulai dengan `>`): + + ```output + Hello, I am Marvin, the simple robot. + You can end this conversation at any time by typing 'bye' + After typing each answer, press 'enter' + How are you today? + > I am good thanks + That is quite interesting, please tell me more. + > today I went for a walk + Did you catch the game last night? + > I did, but my team lost + Funny weather we've been having, isn't it? + > yes but I hope next week is better + Let's change the subject. + > ok, lets talk about music + Why do you say that? + > because I like music! + Why do you say that? + > bye + It was nice talking to you, goodbye! + ``` + + Salah satu solusi yang mungkin untuk tugas ini ada [di sini](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/1-Introduction-to-NLP/solution/bot.py) + + ✅ Berhenti dan pertimbangkan + + 1. Apakah menurut Anda respons acak akan 'menipu' seseorang untuk berpikir bahwa bot benar-benar memahami mereka? + 2. Fitur apa yang dibutuhkan bot agar lebih efektif? + 3. Jika bot benar-benar dapat 'memahami' makna sebuah kalimat, apakah ia juga perlu 'mengingat' makna kalimat sebelumnya dalam percakapan? + +--- + +## 🚀Tantangan + +Pilih salah satu elemen "berhenti dan pertimbangkan" di atas dan coba terapkan dalam kode atau tulis solusi di atas kertas menggunakan pseudocode. + +Dalam pelajaran berikutnya, Anda akan belajar tentang sejumlah pendekatan lain untuk mengurai bahasa alami dan pembelajaran mesin. + +## [Kuis Pasca-Pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Tinjauan & Studi Mandiri + +Lihat referensi di bawah ini sebagai peluang bacaan lebih lanjut. + +### Referensi + +1. Schubert, Lenhart, "Linguistik Komputasional", *The Stanford Encyclopedia of Philosophy* (Edisi Musim Semi 2020), Edward N. Zalta (ed.), URL = . +2. Princeton University "Tentang WordNet." [WordNet](https://wordnet.princeton.edu/). Princeton University. 2010. + +## Tugas + +[Cari bot](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/6-NLP/1-Introduction-to-NLP/assignment.md b/translations/id/6-NLP/1-Introduction-to-NLP/assignment.md new file mode 100644 index 00000000..6216f09c --- /dev/null +++ b/translations/id/6-NLP/1-Introduction-to-NLP/assignment.md @@ -0,0 +1,25 @@ + +# Cari Bot + +## Instruksi + +Bot ada di mana-mana. Tugas Anda: temukan satu dan adopsi! Anda dapat menemukannya di situs web, aplikasi perbankan, dan di telepon, misalnya saat Anda menghubungi perusahaan layanan keuangan untuk meminta saran atau informasi akun. Analisis bot tersebut dan lihat apakah Anda bisa membuatnya bingung. Jika Anda berhasil membuat bot bingung, menurut Anda mengapa hal itu terjadi? Tulislah sebuah makalah singkat tentang pengalaman Anda. + +## Rubrik + +| Kriteria | Unggul | Memadai | Perlu Perbaikan | +| -------- | ----------------------------------------------------------------------------------------------------------- | ------------------------------------------ | --------------------- | +| | Sebuah makalah satu halaman penuh ditulis, menjelaskan arsitektur bot yang diduga dan menguraikan pengalaman Anda dengannya | Makalah tidak lengkap atau kurang diteliti | Tidak ada makalah yang diserahkan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/6-NLP/2-Tasks/README.md b/translations/id/6-NLP/2-Tasks/README.md new file mode 100644 index 00000000..fd556a95 --- /dev/null +++ b/translations/id/6-NLP/2-Tasks/README.md @@ -0,0 +1,228 @@ + +# Tugas dan Teknik Pemrosesan Bahasa Alami yang Umum + +Untuk sebagian besar *pemrosesan bahasa alami*, teks yang akan diproses harus dipecah, diperiksa, dan hasilnya disimpan atau dibandingkan dengan aturan dan kumpulan data. Tugas-tugas ini memungkinkan programmer untuk mendapatkan _makna_ atau _niat_ atau hanya _frekuensi_ istilah dan kata dalam sebuah teks. + +## [Kuis Pra-Pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +Mari kita pelajari teknik-teknik umum yang digunakan dalam pemrosesan teks. Dikombinasikan dengan pembelajaran mesin, teknik-teknik ini membantu Anda menganalisis sejumlah besar teks secara efisien. Namun, sebelum menerapkan ML pada tugas-tugas ini, mari kita pahami masalah yang dihadapi oleh spesialis NLP. + +## Tugas Umum dalam NLP + +Ada berbagai cara untuk menganalisis teks yang sedang Anda kerjakan. Ada tugas-tugas yang dapat Anda lakukan, dan melalui tugas-tugas ini Anda dapat memahami teks dan menarik kesimpulan. Biasanya, Anda melakukan tugas-tugas ini secara berurutan. + +### Tokenisasi + +Mungkin hal pertama yang harus dilakukan sebagian besar algoritma NLP adalah memecah teks menjadi token, atau kata-kata. Meskipun ini terdengar sederhana, memperhitungkan tanda baca dan pembatas kata serta kalimat dalam berbagai bahasa dapat membuatnya menjadi rumit. Anda mungkin perlu menggunakan berbagai metode untuk menentukan batasan. + +![tokenisasi](../../../../6-NLP/2-Tasks/images/tokenization.png) +> Tokenisasi sebuah kalimat dari **Pride and Prejudice**. Infografis oleh [Jen Looper](https://twitter.com/jenlooper) + +### Embedding + +[Word embeddings](https://wikipedia.org/wiki/Word_embedding) adalah cara untuk mengonversi data teks Anda secara numerik. Embedding dilakukan sedemikian rupa sehingga kata-kata dengan makna serupa atau kata-kata yang sering digunakan bersama akan berkelompok. + +![word embeddings](../../../../6-NLP/2-Tasks/images/embedding.png) +> "I have the highest respect for your nerves, they are my old friends." - Word embeddings untuk sebuah kalimat dari **Pride and Prejudice**. Infografis oleh [Jen Looper](https://twitter.com/jenlooper) + +✅ Coba [alat menarik ini](https://projector.tensorflow.org/) untuk bereksperimen dengan word embeddings. Klik pada satu kata untuk melihat kelompok kata-kata serupa: 'toy' berkelompok dengan 'disney', 'lego', 'playstation', dan 'console'. + +### Parsing & Tagging Bagian dari Ucapan + +Setiap kata yang telah di-tokenisasi dapat diberi tag sebagai bagian dari ucapan - seperti kata benda, kata kerja, atau kata sifat. Kalimat `the quick red fox jumped over the lazy brown dog` mungkin diberi tag POS sebagai fox = kata benda, jumped = kata kerja. + +![parsing](../../../../6-NLP/2-Tasks/images/parse.png) + +> Parsing sebuah kalimat dari **Pride and Prejudice**. Infografis oleh [Jen Looper](https://twitter.com/jenlooper) + +Parsing adalah mengenali kata-kata yang saling terkait dalam sebuah kalimat - misalnya `the quick red fox jumped` adalah urutan kata sifat-kata benda-kata kerja yang terpisah dari urutan `lazy brown dog`. + +### Frekuensi Kata dan Frasa + +Prosedur yang berguna saat menganalisis teks dalam jumlah besar adalah membangun kamus dari setiap kata atau frasa yang menarik dan seberapa sering kata atau frasa tersebut muncul. Frasa `the quick red fox jumped over the lazy brown dog` memiliki frekuensi kata 2 untuk kata "the". + +Mari kita lihat contoh teks di mana kita menghitung frekuensi kata. Puisi Rudyard Kipling berjudul The Winners mengandung ayat berikut: + +```output +What the moral? Who rides may read. +When the night is thick and the tracks are blind +A friend at a pinch is a friend, indeed, +But a fool to wait for the laggard behind. +Down to Gehenna or up to the Throne, +He travels the fastest who travels alone. +``` + +Karena frekuensi frasa dapat bersifat tidak sensitif terhadap huruf besar atau sensitif terhadap huruf besar sesuai kebutuhan, frasa `a friend` memiliki frekuensi 2, `the` memiliki frekuensi 6, dan `travels` memiliki frekuensi 2. + +### N-grams + +Teks dapat dipecah menjadi urutan kata dengan panjang tertentu, satu kata (unigram), dua kata (bigram), tiga kata (trigram), atau sejumlah kata (n-grams). + +Misalnya, `the quick red fox jumped over the lazy brown dog` dengan skor n-gram 2 menghasilkan n-grams berikut: + +1. the quick +2. quick red +3. red fox +4. fox jumped +5. jumped over +6. over the +7. the lazy +8. lazy brown +9. brown dog + +Mungkin lebih mudah untuk memvisualisasikannya sebagai kotak geser di atas kalimat. Berikut ini adalah untuk n-grams dengan 3 kata, n-gram ditampilkan dalam huruf tebal di setiap kalimat: + +1. **the quick red** fox jumped over the lazy brown dog +2. the **quick red fox** jumped over the lazy brown dog +3. the quick **red fox jumped** over the lazy brown dog +4. the quick red **fox jumped over** the lazy brown dog +5. the quick red fox **jumped over the** lazy brown dog +6. the quick red fox jumped **over the lazy** brown dog +7. the quick red fox jumped over **the lazy brown** dog +8. the quick red fox jumped over the **lazy brown dog** + +![jendela geser n-grams](../../../../6-NLP/2-Tasks/images/n-grams.gif) + +> Nilai N-gram 3: Infografis oleh [Jen Looper](https://twitter.com/jenlooper) + +### Ekstraksi Frasa Kata Benda + +Dalam sebagian besar kalimat, terdapat kata benda yang menjadi subjek atau objek kalimat. Dalam bahasa Inggris, kata benda sering kali dapat dikenali dengan adanya 'a', 'an', atau 'the' di depannya. Mengidentifikasi subjek atau objek kalimat dengan 'mengekstraksi frasa kata benda' adalah tugas umum dalam NLP saat mencoba memahami makna sebuah kalimat. + +✅ Dalam kalimat "I cannot fix on the hour, or the spot, or the look or the words, which laid the foundation. It is too long ago. I was in the middle before I knew that I had begun.", bisakah Anda mengidentifikasi frasa kata benda? + +Dalam kalimat `the quick red fox jumped over the lazy brown dog` terdapat 2 frasa kata benda: **quick red fox** dan **lazy brown dog**. + +### Analisis Sentimen + +Sebuah kalimat atau teks dapat dianalisis untuk sentimen, atau seberapa *positif* atau *negatif* teks tersebut. Sentimen diukur dalam *polaritas* dan *objektivitas/subjektivitas*. Polaritas diukur dari -1.0 hingga 1.0 (negatif hingga positif) dan 0.0 hingga 1.0 (paling objektif hingga paling subjektif). + +✅ Nanti Anda akan belajar bahwa ada berbagai cara untuk menentukan sentimen menggunakan pembelajaran mesin, tetapi salah satu caranya adalah dengan memiliki daftar kata dan frasa yang dikategorikan sebagai positif atau negatif oleh seorang ahli manusia dan menerapkan model tersebut pada teks untuk menghitung skor polaritas. Bisakah Anda melihat bagaimana cara ini bekerja dalam beberapa situasi dan kurang efektif dalam situasi lainnya? + +### Infleksi + +Infleksi memungkinkan Anda mengambil sebuah kata dan mendapatkan bentuk tunggal atau jamak dari kata tersebut. + +### Lematisasi + +*Lemma* adalah akar atau kata dasar untuk sekumpulan kata, misalnya *flew*, *flies*, *flying* memiliki lemma dari kata kerja *fly*. + +Ada juga basis data yang berguna untuk peneliti NLP, terutama: + +### WordNet + +[WordNet](https://wordnet.princeton.edu/) adalah basis data kata, sinonim, antonim, dan banyak detail lainnya untuk setiap kata dalam berbagai bahasa. Basis data ini sangat berguna saat mencoba membangun terjemahan, pemeriksa ejaan, atau alat bahasa apa pun. + +## Perpustakaan NLP + +Untungnya, Anda tidak perlu membangun semua teknik ini sendiri, karena ada pustaka Python yang sangat baik yang membuatnya jauh lebih mudah diakses oleh pengembang yang tidak mengkhususkan diri dalam pemrosesan bahasa alami atau pembelajaran mesin. Pelajaran berikutnya mencakup lebih banyak contoh pustaka ini, tetapi di sini Anda akan mempelajari beberapa contoh berguna untuk membantu Anda dengan tugas berikutnya. + +### Latihan - menggunakan pustaka `TextBlob` + +Mari kita gunakan pustaka bernama TextBlob karena pustaka ini memiliki API yang berguna untuk menangani jenis tugas ini. TextBlob "berdiri di atas bahu raksasa [NLTK](https://nltk.org) dan [pattern](https://github.com/clips/pattern), dan bekerja dengan baik dengan keduanya." Pustaka ini memiliki sejumlah besar ML yang tertanam dalam API-nya. + +> Catatan: Panduan [Quick Start](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) yang berguna tersedia untuk TextBlob dan direkomendasikan untuk pengembang Python berpengalaman. + +Saat mencoba mengidentifikasi *noun phrases*, TextBlob menawarkan beberapa opsi ekstraktor untuk menemukan frasa kata benda. + +1. Lihatlah `ConllExtractor`. + + ```python + from textblob import TextBlob + from textblob.np_extractors import ConllExtractor + # import and create a Conll extractor to use later + extractor = ConllExtractor() + + # later when you need a noun phrase extractor: + user_input = input("> ") + user_input_blob = TextBlob(user_input, np_extractor=extractor) # note non-default extractor specified + np = user_input_blob.noun_phrases + ``` + + > Apa yang terjadi di sini? [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) adalah "Ekstraktor frasa kata benda yang menggunakan chunk parsing yang dilatih dengan korpus pelatihan ConLL-2000." ConLL-2000 mengacu pada Konferensi Pembelajaran Bahasa Alami Komputasional tahun 2000. Setiap tahun konferensi ini mengadakan lokakarya untuk menangani masalah NLP yang sulit, dan pada tahun 2000 masalahnya adalah chunking kata benda. Model dilatih pada Wall Street Journal, dengan "bagian 15-18 sebagai data pelatihan (211727 token) dan bagian 20 sebagai data uji (47377 token)". Anda dapat melihat prosedur yang digunakan [di sini](https://www.clips.uantwerpen.be/conll2000/chunking/) dan [hasilnya](https://ifarm.nl/erikt/research/np-chunking.html). + +### Tantangan - meningkatkan bot Anda dengan NLP + +Dalam pelajaran sebelumnya, Anda membuat bot Q&A yang sangat sederhana. Sekarang, Anda akan membuat Marvin sedikit lebih simpatik dengan menganalisis input Anda untuk sentimen dan mencetak respons yang sesuai dengan sentimen tersebut. Anda juga perlu mengidentifikasi `noun_phrase` dan menanyakan tentangnya. + +Langkah-langkah Anda saat membangun bot percakapan yang lebih baik: + +1. Cetak instruksi yang memberi tahu pengguna cara berinteraksi dengan bot +2. Mulai loop + 1. Terima input pengguna + 2. Jika pengguna meminta keluar, maka keluar + 3. Proses input pengguna dan tentukan respons sentimen yang sesuai + 4. Jika frasa kata benda terdeteksi dalam sentimen, ubah menjadi bentuk jamak dan tanyakan lebih lanjut tentang topik tersebut + 5. Cetak respons +3. Kembali ke langkah 2 + +Berikut adalah cuplikan kode untuk menentukan sentimen menggunakan TextBlob. Perhatikan bahwa hanya ada empat *gradasi* respons sentimen (Anda dapat menambahkan lebih banyak jika Anda mau): + +```python +if user_input_blob.polarity <= -0.5: + response = "Oh dear, that sounds bad. " +elif user_input_blob.polarity <= 0: + response = "Hmm, that's not great. " +elif user_input_blob.polarity <= 0.5: + response = "Well, that sounds positive. " +elif user_input_blob.polarity <= 1: + response = "Wow, that sounds great. " +``` + +Berikut adalah beberapa output sampel untuk panduan Anda (input pengguna ada di baris yang dimulai dengan >): + +```output +Hello, I am Marvin, the friendly robot. +You can end this conversation at any time by typing 'bye' +After typing each answer, press 'enter' +How are you today? +> I am ok +Well, that sounds positive. Can you tell me more? +> I went for a walk and saw a lovely cat +Well, that sounds positive. Can you tell me more about lovely cats? +> cats are the best. But I also have a cool dog +Wow, that sounds great. Can you tell me more about cool dogs? +> I have an old hounddog but he is sick +Hmm, that's not great. Can you tell me more about old hounddogs? +> bye +It was nice talking to you, goodbye! +``` + +Salah satu solusi untuk tugas ini dapat ditemukan [di sini](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/2-Tasks/solution/bot.py) + +✅ Pemeriksaan Pengetahuan + +1. Apakah menurut Anda respons simpatik dapat 'menipu' seseorang untuk berpikir bahwa bot benar-benar memahami mereka? +2. Apakah mengidentifikasi frasa kata benda membuat bot lebih 'meyakinkan'? +3. Mengapa mengekstraksi 'frasa kata benda' dari sebuah kalimat merupakan hal yang berguna untuk dilakukan? + +--- + +Implementasikan bot dalam pemeriksaan pengetahuan sebelumnya dan uji pada teman. Bisakah bot tersebut menipu mereka? Bisakah Anda membuat bot Anda lebih 'meyakinkan'? + +## 🚀Tantangan + +Ambil tugas dalam pemeriksaan pengetahuan sebelumnya dan coba implementasikan. Uji bot pada teman. Bisakah bot tersebut menipu mereka? Bisakah Anda membuat bot Anda lebih 'meyakinkan'? + +## [Kuis Pasca-Pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Tinjauan & Studi Mandiri + +Dalam beberapa pelajaran berikutnya, Anda akan mempelajari lebih lanjut tentang analisis sentimen. Teliti teknik menarik ini dalam artikel seperti yang ada di [KDNuggets](https://www.kdnuggets.com/tag/nlp) + +## Tugas + +[Buat bot berbicara kembali](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/6-NLP/2-Tasks/assignment.md b/translations/id/6-NLP/2-Tasks/assignment.md new file mode 100644 index 00000000..f9e4958f --- /dev/null +++ b/translations/id/6-NLP/2-Tasks/assignment.md @@ -0,0 +1,25 @@ + +# Membuat Bot Menjawab + +## Instruksi + +Dalam beberapa pelajaran sebelumnya, Anda telah memprogram bot dasar untuk diajak mengobrol. Bot ini memberikan jawaban secara acak hingga Anda mengatakan 'bye'. Bisakah Anda membuat jawaban tersebut sedikit kurang acak, dan memicu jawaban jika Anda mengatakan hal-hal tertentu, seperti 'kenapa' atau 'bagaimana'? Pikirkan bagaimana pembelajaran mesin dapat membuat pekerjaan semacam ini menjadi kurang manual saat Anda mengembangkan bot Anda. Anda dapat menggunakan pustaka NLTK atau TextBlob untuk mempermudah tugas Anda. + +## Rubrik + +| Kriteria | Unggul | Memadai | Perlu Peningkatan | +| -------- | --------------------------------------------- | ------------------------------------------------ | ----------------------- | +| | File bot.py baru disajikan dan didokumentasikan | File bot baru disajikan tetapi mengandung bug | File tidak disajikan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan manusia profesional. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/6-NLP/3-Translation-Sentiment/README.md b/translations/id/6-NLP/3-Translation-Sentiment/README.md new file mode 100644 index 00000000..07f9f82d --- /dev/null +++ b/translations/id/6-NLP/3-Translation-Sentiment/README.md @@ -0,0 +1,200 @@ + +# Analisis Sentimen dan Terjemahan dengan ML + +Dalam pelajaran sebelumnya, Anda telah belajar cara membangun bot dasar menggunakan `TextBlob`, sebuah pustaka yang mengintegrasikan ML di balik layar untuk melakukan tugas NLP dasar seperti ekstraksi frasa kata benda. Tantangan penting lainnya dalam linguistik komputasi adalah _terjemahan_ yang akurat dari satu bahasa lisan atau tulisan ke bahasa lain. + +## [Kuis Pra-Pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +Terjemahan adalah masalah yang sangat sulit karena ada ribuan bahasa, masing-masing dengan aturan tata bahasa yang sangat berbeda. Salah satu pendekatan adalah mengubah aturan tata bahasa formal dari satu bahasa, seperti bahasa Inggris, menjadi struktur yang tidak bergantung pada bahasa, lalu menerjemahkannya dengan mengubah kembali ke bahasa lain. Pendekatan ini melibatkan langkah-langkah berikut: + +1. **Identifikasi**. Identifikasi atau tandai kata-kata dalam bahasa input sebagai kata benda, kata kerja, dll. +2. **Buat terjemahan**. Hasilkan terjemahan langsung dari setiap kata dalam format bahasa target. + +### Contoh kalimat, Inggris ke Irlandia + +Dalam bahasa 'Inggris', kalimat _I feel happy_ terdiri dari tiga kata dengan urutan: + +- **subjek** (I) +- **kata kerja** (feel) +- **kata sifat** (happy) + +Namun, dalam bahasa 'Irlandia', kalimat yang sama memiliki struktur tata bahasa yang sangat berbeda - emosi seperti "*happy*" atau "*sad*" diekspresikan sebagai sesuatu yang *ada pada* Anda. + +Frasa bahasa Inggris `I feel happy` dalam bahasa Irlandia menjadi `Tá athas orm`. Terjemahan *harfiah* adalah `Happy is upon me`. + +Seorang penutur bahasa Irlandia yang menerjemahkan ke bahasa Inggris akan mengatakan `I feel happy`, bukan `Happy is upon me`, karena mereka memahami makna kalimat tersebut, meskipun kata-kata dan struktur kalimatnya berbeda. + +Urutan formal untuk kalimat dalam bahasa Irlandia adalah: + +- **kata kerja** (Tá atau is) +- **kata sifat** (athas, atau happy) +- **subjek** (orm, atau upon me) + +## Terjemahan + +Program terjemahan yang naif mungkin hanya menerjemahkan kata-kata, tanpa memperhatikan struktur kalimat. + +✅ Jika Anda telah belajar bahasa kedua (atau ketiga atau lebih) sebagai orang dewasa, Anda mungkin memulai dengan berpikir dalam bahasa asli Anda, menerjemahkan konsep kata demi kata di kepala Anda ke bahasa kedua, lalu mengucapkan terjemahan Anda. Ini mirip dengan apa yang dilakukan program terjemahan komputer yang naif. Penting untuk melewati fase ini untuk mencapai kefasihan! + +Terjemahan naif menghasilkan terjemahan yang buruk (dan kadang-kadang lucu): `I feel happy` diterjemahkan secara harfiah menjadi `Mise bhraitheann athas` dalam bahasa Irlandia. Itu berarti (secara harfiah) `me feel happy` dan bukan kalimat bahasa Irlandia yang valid. Meskipun bahasa Inggris dan Irlandia adalah bahasa yang digunakan di dua pulau yang berdekatan, mereka adalah bahasa yang sangat berbeda dengan struktur tata bahasa yang berbeda. + +> Anda dapat menonton beberapa video tentang tradisi linguistik Irlandia seperti [yang satu ini](https://www.youtube.com/watch?v=mRIaLSdRMMs) + +### Pendekatan Machine Learning + +Sejauh ini, Anda telah belajar tentang pendekatan aturan formal untuk pemrosesan bahasa alami. Pendekatan lain adalah mengabaikan makna kata-kata, dan _sebaliknya menggunakan machine learning untuk mendeteksi pola_. Ini dapat bekerja dalam terjemahan jika Anda memiliki banyak teks (sebuah *corpus*) atau teks (*corpora*) dalam bahasa asal dan target. + +Misalnya, pertimbangkan kasus *Pride and Prejudice*, sebuah novel bahasa Inggris terkenal yang ditulis oleh Jane Austen pada tahun 1813. Jika Anda membaca buku tersebut dalam bahasa Inggris dan terjemahan manusia dari buku tersebut dalam bahasa *Prancis*, Anda dapat mendeteksi frasa dalam satu bahasa yang diterjemahkan secara _idiomatik_ ke bahasa lain. Anda akan melakukannya sebentar lagi. + +Misalnya, ketika frasa bahasa Inggris seperti `I have no money` diterjemahkan secara harfiah ke bahasa Prancis, itu mungkin menjadi `Je n'ai pas de monnaie`. "Monnaie" adalah 'false cognate' Prancis yang rumit, karena 'money' dan 'monnaie' tidak sinonim. Terjemahan yang lebih baik yang mungkin dibuat oleh manusia adalah `Je n'ai pas d'argent`, karena lebih baik menyampaikan makna bahwa Anda tidak memiliki uang (daripada 'uang receh' yang merupakan arti dari 'monnaie'). + +![monnaie](../../../../6-NLP/3-Translation-Sentiment/images/monnaie.png) + +> Gambar oleh [Jen Looper](https://twitter.com/jenlooper) + +Jika model ML memiliki cukup banyak terjemahan manusia untuk membangun model, ia dapat meningkatkan akurasi terjemahan dengan mengidentifikasi pola umum dalam teks yang sebelumnya telah diterjemahkan oleh penutur manusia ahli dari kedua bahasa. + +### Latihan - terjemahan + +Anda dapat menggunakan `TextBlob` untuk menerjemahkan kalimat. Cobalah kalimat pembuka terkenal dari **Pride and Prejudice**: + +```python +from textblob import TextBlob + +blob = TextBlob( + "It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife!" +) +print(blob.translate(to="fr")) + +``` + +`TextBlob` melakukan pekerjaan yang cukup baik dalam terjemahan: "C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme!". + +Dapat dikatakan bahwa terjemahan TextBlob jauh lebih tepat, bahkan dibandingkan dengan terjemahan Prancis tahun 1932 dari buku tersebut oleh V. Leconte dan Ch. Pressoir: + +"C'est une vérité universelle qu'un célibataire pourvu d'une belle fortune doit avoir envie de se marier, et, si peu que l'on sache de son sentiment à cet egard, lorsqu'il arrive dans une nouvelle résidence, cette idée est si bien fixée dans l'esprit de ses voisins qu'ils le considèrent sur-le-champ comme la propriété légitime de l'une ou l'autre de leurs filles." + +Dalam kasus ini, terjemahan yang diinformasikan oleh ML melakukan pekerjaan yang lebih baik daripada penerjemah manusia yang secara tidak perlu menambahkan kata-kata ke dalam teks asli penulis untuk 'kejelasan'. + +> Apa yang terjadi di sini? dan mengapa TextBlob sangat baik dalam terjemahan? Nah, di balik layar, ia menggunakan Google Translate, AI canggih yang mampu menganalisis jutaan frasa untuk memprediksi string terbaik untuk tugas yang sedang dilakukan. Tidak ada yang manual di sini dan Anda memerlukan koneksi internet untuk menggunakan `blob.translate`. + +✅ Cobalah beberapa kalimat lagi. Mana yang lebih baik, terjemahan ML atau manusia? Dalam kasus apa? + +## Analisis Sentimen + +Area lain di mana machine learning dapat bekerja dengan sangat baik adalah analisis sentimen. Pendekatan non-ML untuk sentimen adalah mengidentifikasi kata-kata dan frasa yang 'positif' dan 'negatif'. Kemudian, diberikan teks baru, hitung nilai total kata-kata positif, negatif, dan netral untuk mengidentifikasi sentimen keseluruhan. + +Pendekatan ini mudah tertipu seperti yang mungkin Anda lihat dalam tugas Marvin - kalimat `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` adalah kalimat sentimen negatif yang sarkastik, tetapi algoritma sederhana mendeteksi 'great', 'wonderful', 'glad' sebagai positif dan 'waste', 'lost' dan 'dark' sebagai negatif. Sentimen keseluruhan dipengaruhi oleh kata-kata yang saling bertentangan ini. + +✅ Berhenti sejenak dan pikirkan bagaimana kita menyampaikan sarkasme sebagai penutur manusia. Intonasi nada memainkan peran besar. Cobalah mengucapkan frasa "Well, that film was awesome" dengan berbagai cara untuk menemukan bagaimana suara Anda menyampaikan makna. + +### Pendekatan ML + +Pendekatan ML adalah secara manual mengumpulkan teks negatif dan positif - tweet, atau ulasan film, atau apa pun di mana manusia memberikan skor *dan* opini tertulis. Kemudian teknik NLP dapat diterapkan pada opini dan skor, sehingga pola muncul (misalnya, ulasan film positif cenderung memiliki frasa 'Oscar worthy' lebih sering daripada ulasan film negatif, atau ulasan restoran positif mengatakan 'gourmet' jauh lebih sering daripada 'disgusting'). + +> ⚖️ **Contoh**: Jika Anda bekerja di kantor seorang politisi dan ada undang-undang baru yang sedang diperdebatkan, konstituen mungkin menulis email ke kantor tersebut untuk mendukung atau menentang undang-undang baru tersebut. Misalkan Anda ditugaskan membaca email dan menyortirnya ke dalam 2 tumpukan, *mendukung* dan *menentang*. Jika ada banyak email, Anda mungkin kewalahan mencoba membaca semuanya. Bukankah akan menyenangkan jika bot dapat membaca semuanya untuk Anda, memahaminya, dan memberi tahu Anda di tumpukan mana setiap email berada? +> +> Salah satu cara untuk mencapai itu adalah dengan menggunakan Machine Learning. Anda akan melatih model dengan sebagian email *menentang* dan sebagian email *mendukung*. Model cenderung mengasosiasikan frasa dan kata dengan sisi menentang dan sisi mendukung, *tetapi tidak akan memahami konten apa pun*, hanya bahwa kata-kata dan pola tertentu lebih mungkin muncul dalam email *menentang* atau *mendukung*. Anda dapat mengujinya dengan beberapa email yang belum Anda gunakan untuk melatih model, dan melihat apakah model tersebut sampai pada kesimpulan yang sama seperti Anda. Kemudian, setelah Anda puas dengan akurasi model, Anda dapat memproses email di masa depan tanpa harus membaca setiap email. + +✅ Apakah proses ini terdengar seperti proses yang telah Anda gunakan dalam pelajaran sebelumnya? + +## Latihan - kalimat sentimental + +Sentimen diukur dengan *polaritas* dari -1 hingga 1, yang berarti -1 adalah sentimen paling negatif, dan 1 adalah sentimen paling positif. Sentimen juga diukur dengan skor 0 - 1 untuk objektivitas (0) dan subjektivitas (1). + +Lihat kembali *Pride and Prejudice* karya Jane Austen. Teks tersedia di [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm). Contoh di bawah ini menunjukkan program pendek yang menganalisis sentimen dari kalimat pertama dan terakhir dari buku tersebut dan menampilkan skor polaritas dan subjektivitas/objektivitas sentimennya. + +Anda harus menggunakan pustaka `TextBlob` (dijelaskan di atas) untuk menentukan `sentiment` (Anda tidak perlu menulis kalkulator sentimen Anda sendiri) dalam tugas berikut. + +```python +from textblob import TextBlob + +quote1 = """It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife.""" + +quote2 = """Darcy, as well as Elizabeth, really loved them; and they were both ever sensible of the warmest gratitude towards the persons who, by bringing her into Derbyshire, had been the means of uniting them.""" + +sentiment1 = TextBlob(quote1).sentiment +sentiment2 = TextBlob(quote2).sentiment + +print(quote1 + " has a sentiment of " + str(sentiment1)) +print(quote2 + " has a sentiment of " + str(sentiment2)) +``` + +Anda melihat output berikut: + +```output +It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want # of a wife. has a sentiment of Sentiment(polarity=0.20952380952380953, subjectivity=0.27142857142857146) + +Darcy, as well as Elizabeth, really loved them; and they were + both ever sensible of the warmest gratitude towards the persons + who, by bringing her into Derbyshire, had been the means of + uniting them. has a sentiment of Sentiment(polarity=0.7, subjectivity=0.8) +``` + +## Tantangan - periksa polaritas sentimen + +Tugas Anda adalah menentukan, menggunakan polaritas sentimen, apakah *Pride and Prejudice* memiliki lebih banyak kalimat yang benar-benar positif daripada yang benar-benar negatif. Untuk tugas ini, Anda dapat mengasumsikan bahwa skor polaritas 1 atau -1 adalah benar-benar positif atau negatif. + +**Langkah-langkah:** + +1. Unduh [salinan Pride and Prejudice](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) dari Project Gutenberg sebagai file .txt. Hapus metadata di awal dan akhir file, sisakan hanya teks asli +2. Buka file di Python dan ekstrak kontennya sebagai string +3. Buat TextBlob menggunakan string buku +4. Analisis setiap kalimat dalam buku dalam sebuah loop + 1. Jika polaritas adalah 1 atau -1, simpan kalimat tersebut dalam array atau daftar pesan positif atau negatif +5. Di akhir, cetak semua kalimat positif dan negatif (secara terpisah) dan jumlah masing-masing. + +Berikut adalah [solusi](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb) sebagai contoh. + +✅ Pengetahuan yang Diperiksa + +1. Sentimen didasarkan pada kata-kata yang digunakan dalam kalimat, tetapi apakah kode *memahami* kata-kata tersebut? +2. Apakah Anda pikir polaritas sentimen itu akurat, atau dengan kata lain, apakah Anda *setuju* dengan skor tersebut? + 1. Secara khusus, apakah Anda setuju atau tidak setuju dengan polaritas **positif** absolut dari kalimat berikut? + * “What an excellent father you have, girls!” said she, when the door was shut. + * “Your examination of Mr. Darcy is over, I presume,” said Miss Bingley; “and pray what is the result?” “I am perfectly convinced by it that Mr. Darcy has no defect. + * How wonderfully these sort of things occur! + * I have the greatest dislike in the world to that sort of thing. + * Charlotte is an excellent manager, I dare say. + * “This is delightful indeed! + * I am so happy! + * Your idea of the ponies is delightful. + 2. Tiga kalimat berikut diberi skor dengan sentimen positif absolut, tetapi setelah membaca dengan cermat, mereka bukan kalimat positif. Mengapa analisis sentimen menganggap mereka sebagai kalimat positif? + * Happy shall I be, when his stay at Netherfield is over!” “I wish I could say anything to comfort you,” replied Elizabeth; “but it is wholly out of my power. + * If I could but see you as happy! + * Our distress, my dear Lizzy, is very great. + 3. Apakah Anda setuju atau tidak setuju dengan polaritas **negatif** absolut dari kalimat berikut? + - Everybody is disgusted with his pride. + - “I should like to know how he behaves among strangers.” “You shall hear then—but prepare yourself for something very dreadful. + - The pause was to Elizabeth’s feelings dreadful. + - It would be dreadful! + +✅ Setiap penggemar Jane Austen akan memahami bahwa dia sering menggunakan bukunya untuk mengkritik aspek-aspek yang lebih konyol dari masyarakat Inggris pada masa Regency. Elizabeth Bennett, karakter utama dalam *Pride and Prejudice*, adalah pengamat sosial yang tajam (seperti penulisnya) dan bahasanya sering kali sangat bernuansa. Bahkan Mr. Darcy (tokoh cinta dalam cerita) mencatat penggunaan bahasa Elizabeth yang penuh permainan dan menggoda: "I have had the pleasure of your acquaintance long enough to know that you find great enjoyment in occasionally professing opinions which in fact are not your own." + +--- + +## 🚀Tantangan + +Bisakah Anda membuat Marvin lebih baik dengan mengekstraksi fitur lain dari input pengguna? + +## [Kuis Pasca-Pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Tinjauan & Studi Mandiri +Ada banyak cara untuk mengekstrak sentimen dari teks. Pikirkan aplikasi bisnis yang mungkin menggunakan teknik ini. Pikirkan juga bagaimana teknik ini bisa salah. Baca lebih lanjut tentang sistem canggih yang siap digunakan oleh perusahaan untuk menganalisis sentimen seperti [Azure Text Analysis](https://docs.microsoft.com/azure/cognitive-services/Text-Analytics/how-tos/text-analytics-how-to-sentiment-analysis?tabs=version-3-1?WT.mc_id=academic-77952-leestott). Uji beberapa kalimat dari Pride and Prejudice di atas dan lihat apakah sistem tersebut dapat mendeteksi nuansa. + +## Tugas + +[Lisensi puitis](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/6-NLP/3-Translation-Sentiment/assignment.md b/translations/id/6-NLP/3-Translation-Sentiment/assignment.md new file mode 100644 index 00000000..0981c14f --- /dev/null +++ b/translations/id/6-NLP/3-Translation-Sentiment/assignment.md @@ -0,0 +1,25 @@ + +# Lisensi Puitis + +## Instruksi + +Di [notebook ini](https://www.kaggle.com/jenlooper/emily-dickinson-word-frequency) terdapat lebih dari 500 puisi Emily Dickinson yang sebelumnya telah dianalisis untuk sentimen menggunakan Azure text analytics. Gunakan dataset ini untuk menganalisisnya dengan teknik yang dijelaskan dalam pelajaran. Apakah sentimen yang disarankan dari sebuah puisi sesuai dengan keputusan layanan Azure yang lebih canggih? Mengapa atau mengapa tidak, menurut Anda? Apakah ada hal yang mengejutkan Anda? + +## Rubrik + +| Kriteria | Unggul | Memadai | Perlu Perbaikan | +| -------- | -------------------------------------------------------------------------- | ------------------------------------------------------ | ----------------------- | +| | Notebook disajikan dengan analisis yang solid dari sampel output penulis | Notebook tidak lengkap atau tidak melakukan analisis | Tidak ada notebook yang disajikan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/6-NLP/3-Translation-Sentiment/solution/Julia/README.md b/translations/id/6-NLP/3-Translation-Sentiment/solution/Julia/README.md new file mode 100644 index 00000000..91360ba1 --- /dev/null +++ b/translations/id/6-NLP/3-Translation-Sentiment/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan manusia profesional. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/6-NLP/3-Translation-Sentiment/solution/R/README.md b/translations/id/6-NLP/3-Translation-Sentiment/solution/R/README.md new file mode 100644 index 00000000..b9f8327f --- /dev/null +++ b/translations/id/6-NLP/3-Translation-Sentiment/solution/R/README.md @@ -0,0 +1,15 @@ + +ini adalah tempat sementara + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/6-NLP/4-Hotel-Reviews-1/README.md b/translations/id/6-NLP/4-Hotel-Reviews-1/README.md new file mode 100644 index 00000000..eb9be50f --- /dev/null +++ b/translations/id/6-NLP/4-Hotel-Reviews-1/README.md @@ -0,0 +1,417 @@ + +# Analisis Sentimen dengan Ulasan Hotel - Memproses Data + +Di bagian ini, Anda akan menggunakan teknik yang telah dipelajari di pelajaran sebelumnya untuk melakukan analisis data eksplorasi pada dataset besar. Setelah memahami kegunaan berbagai kolom, Anda akan belajar: + +- cara menghapus kolom yang tidak diperlukan +- cara menghitung data baru berdasarkan kolom yang ada +- cara menyimpan dataset hasil untuk digunakan dalam tantangan akhir + +## [Kuis Pra-Pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +### Pendahuluan + +Sejauh ini Anda telah mempelajari bahwa data teks sangat berbeda dengan data numerik. Jika teks tersebut ditulis atau diucapkan oleh manusia, teks tersebut dapat dianalisis untuk menemukan pola dan frekuensi, sentimen, dan makna. Pelajaran ini membawa Anda ke dalam dataset nyata dengan tantangan nyata: **[515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)** yang mencakup [lisensi CC0: Domain Publik](https://creativecommons.org/publicdomain/zero/1.0/). Dataset ini diambil dari Booking.com dari sumber publik. Pembuat dataset ini adalah Jiashen Liu. + +### Persiapan + +Anda akan membutuhkan: + +* Kemampuan untuk menjalankan notebook .ipynb menggunakan Python 3 +* pandas +* NLTK, [yang harus Anda instal secara lokal](https://www.nltk.org/install.html) +* Dataset yang tersedia di Kaggle [515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe). Ukurannya sekitar 230 MB setelah diekstrak. Unduh ke folder root `/data` yang terkait dengan pelajaran NLP ini. + +## Analisis Data Eksplorasi + +Tantangan ini mengasumsikan bahwa Anda sedang membangun bot rekomendasi hotel menggunakan analisis sentimen dan skor ulasan tamu. Dataset yang akan Anda gunakan mencakup ulasan dari 1493 hotel berbeda di 6 kota. + +Menggunakan Python, dataset ulasan hotel, dan analisis sentimen NLTK, Anda dapat menemukan: + +* Apa kata dan frasa yang paling sering digunakan dalam ulasan? +* Apakah *tag* resmi yang menggambarkan hotel berkorelasi dengan skor ulasan (misalnya, apakah ulasan lebih negatif untuk hotel tertentu oleh *Keluarga dengan anak kecil* dibandingkan oleh *Pelancong solo*, mungkin menunjukkan bahwa hotel tersebut lebih cocok untuk *Pelancong solo*)? +* Apakah skor sentimen NLTK 'sesuai' dengan skor numerik dari pengulas hotel? + +#### Dataset + +Mari kita eksplorasi dataset yang telah Anda unduh dan simpan secara lokal. Buka file tersebut di editor seperti VS Code atau bahkan Excel. + +Header dalam dataset adalah sebagai berikut: + +*Hotel_Address, Additional_Number_of_Scoring, Review_Date, Average_Score, Hotel_Name, Reviewer_Nationality, Negative_Review, Review_Total_Negative_Word_Counts, Total_Number_of_Reviews, Positive_Review, Review_Total_Positive_Word_Counts, Total_Number_of_Reviews_Reviewer_Has_Given, Reviewer_Score, Tags, days_since_review, lat, lng* + +Berikut adalah pengelompokan yang mungkin lebih mudah untuk diperiksa: +##### Kolom Hotel + +* `Hotel_Name`, `Hotel_Address`, `lat` (latitude), `lng` (longitude) + * Dengan menggunakan *lat* dan *lng*, Anda dapat membuat peta dengan Python yang menunjukkan lokasi hotel (mungkin diberi kode warna untuk ulasan negatif dan positif) + * Hotel_Address tidak terlalu berguna bagi kita, dan kemungkinan akan diganti dengan negara untuk mempermudah penyortiran & pencarian + +**Kolom Meta-Ulasan Hotel** + +* `Average_Score` + * Menurut pembuat dataset, kolom ini adalah *Skor Rata-rata hotel, dihitung berdasarkan komentar terbaru dalam satu tahun terakhir*. Ini tampaknya cara yang tidak biasa untuk menghitung skor, tetapi ini adalah data yang diambil, jadi kita mungkin menerimanya apa adanya untuk saat ini. + + ✅ Berdasarkan kolom lain dalam data ini, dapatkah Anda memikirkan cara lain untuk menghitung skor rata-rata? + +* `Total_Number_of_Reviews` + * Jumlah total ulasan yang diterima hotel ini - tidak jelas (tanpa menulis kode) apakah ini merujuk pada ulasan dalam dataset. +* `Additional_Number_of_Scoring` + * Ini berarti skor ulasan diberikan tetapi tidak ada ulasan positif atau negatif yang ditulis oleh pengulas + +**Kolom Ulasan** + +- `Reviewer_Score` + - Ini adalah nilai numerik dengan maksimal 1 tempat desimal antara nilai minimum dan maksimum 2.5 dan 10 + - Tidak dijelaskan mengapa 2.5 adalah skor terendah yang mungkin +- `Negative_Review` + - Jika pengulas tidak menulis apa pun, kolom ini akan memiliki "**No Negative**" + - Perhatikan bahwa pengulas mungkin menulis ulasan positif di kolom ulasan negatif (misalnya, "tidak ada yang buruk tentang hotel ini") +- `Review_Total_Negative_Word_Counts` + - Jumlah kata negatif yang lebih tinggi menunjukkan skor yang lebih rendah (tanpa memeriksa sentimen) +- `Positive_Review` + - Jika pengulas tidak menulis apa pun, kolom ini akan memiliki "**No Positive**" + - Perhatikan bahwa pengulas mungkin menulis ulasan negatif di kolom ulasan positif (misalnya, "tidak ada yang baik tentang hotel ini sama sekali") +- `Review_Total_Positive_Word_Counts` + - Jumlah kata positif yang lebih tinggi menunjukkan skor yang lebih tinggi (tanpa memeriksa sentimen) +- `Review_Date` dan `days_since_review` + - Ukuran kesegaran atau keusangan mungkin diterapkan pada ulasan (ulasan yang lebih lama mungkin tidak seakurat ulasan yang lebih baru karena manajemen hotel berubah, atau renovasi telah dilakukan, atau kolam renang ditambahkan, dll.) +- `Tags` + - Ini adalah deskriptor pendek yang mungkin dipilih pengulas untuk menggambarkan jenis tamu mereka (misalnya, solo atau keluarga), jenis kamar yang mereka miliki, lama menginap, dan bagaimana ulasan dikirimkan. + - Sayangnya, menggunakan tag ini bermasalah, lihat bagian di bawah yang membahas kegunaannya + +**Kolom Pengulas** + +- `Total_Number_of_Reviews_Reviewer_Has_Given` + - Ini mungkin menjadi faktor dalam model rekomendasi, misalnya, jika Anda dapat menentukan bahwa pengulas yang lebih produktif dengan ratusan ulasan lebih cenderung negatif daripada positif. Namun, pengulas dari ulasan tertentu tidak diidentifikasi dengan kode unik, dan oleh karena itu tidak dapat dikaitkan dengan satu set ulasan. Ada 30 pengulas dengan 100 atau lebih ulasan, tetapi sulit untuk melihat bagaimana ini dapat membantu model rekomendasi. +- `Reviewer_Nationality` + - Beberapa orang mungkin berpikir bahwa kebangsaan tertentu lebih cenderung memberikan ulasan positif atau negatif karena kecenderungan nasional. Berhati-hatilah membangun pandangan anekdotal seperti itu ke dalam model Anda. Ini adalah stereotip nasional (dan terkadang rasial), dan setiap pengulas adalah individu yang menulis ulasan berdasarkan pengalaman mereka. Ulasan tersebut mungkin telah difilter melalui banyak lensa seperti pengalaman hotel sebelumnya, jarak yang ditempuh, dan temperamen pribadi mereka. Berpikir bahwa kebangsaan mereka adalah alasan untuk skor ulasan sulit untuk dibenarkan. + +##### Contoh + +| Average Score | Total Number Reviews | Reviewer Score | Negative
            Review | Positive Review | Tags | +| -------------- | ---------------------- | ---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------- | +| 7.8 | 1945 | 2.5 | Ini saat ini bukan hotel tetapi situs konstruksi Saya diteror sejak pagi hari dan sepanjang hari dengan kebisingan bangunan yang tidak dapat diterima saat beristirahat setelah perjalanan panjang dan bekerja di kamar Orang-orang bekerja sepanjang hari dengan alat berat di kamar sebelah Saya meminta perubahan kamar tetapi tidak ada kamar yang tenang tersedia Untuk membuat keadaan lebih buruk saya dikenakan biaya berlebih Saya check out di malam hari karena saya harus pergi penerbangan sangat pagi dan menerima tagihan yang sesuai Sehari kemudian hotel membuat biaya tambahan tanpa persetujuan saya melebihi harga yang dipesan Tempat yang mengerikan Jangan menyiksa diri dengan memesan di sini | Tidak ada Tempat yang mengerikan Jauhi | Perjalanan bisnis Pasangan Kamar Double Standar Menginap 2 malam | + +Seperti yang Anda lihat, tamu ini tidak memiliki pengalaman menginap yang menyenangkan di hotel ini. Hotel ini memiliki skor rata-rata yang baik yaitu 7.8 dan 1945 ulasan, tetapi pengulas ini memberikan skor 2.5 dan menulis 115 kata tentang betapa negatifnya pengalaman mereka. Jika mereka tidak menulis apa pun di kolom Positive_Review, Anda mungkin menyimpulkan bahwa tidak ada yang positif, tetapi ternyata mereka menulis 7 kata peringatan. Jika kita hanya menghitung kata-kata tanpa memperhatikan makna atau sentimen kata-kata tersebut, kita mungkin memiliki pandangan yang bias tentang maksud pengulas. Anehnya, skor mereka 2.5 membingungkan, karena jika pengalaman menginap di hotel itu sangat buruk, mengapa memberikan poin sama sekali? Dengan menyelidiki dataset secara mendalam, Anda akan melihat bahwa skor terendah yang mungkin adalah 2.5, bukan 0. Skor tertinggi yang mungkin adalah 10. + +##### Tags + +Seperti disebutkan di atas, sekilas, ide untuk menggunakan `Tags` untuk mengkategorikan data masuk akal. Sayangnya, tag ini tidak distandarisasi, yang berarti bahwa di hotel tertentu, opsinya mungkin *Single room*, *Twin room*, dan *Double room*, tetapi di hotel berikutnya, opsinya adalah *Deluxe Single Room*, *Classic Queen Room*, dan *Executive King Room*. Ini mungkin hal yang sama, tetapi ada begitu banyak variasi sehingga pilihannya menjadi: + +1. Mencoba mengubah semua istilah menjadi satu standar, yang sangat sulit, karena tidak jelas apa jalur konversi dalam setiap kasus (misalnya, *Classic single room* dipetakan ke *Single room* tetapi *Superior Queen Room with Courtyard Garden or City View* jauh lebih sulit untuk dipetakan) + +1. Kita dapat mengambil pendekatan NLP dan mengukur frekuensi istilah tertentu seperti *Solo*, *Business Traveller*, atau *Family with young kids* saat mereka berlaku untuk setiap hotel, dan memasukkan itu ke dalam rekomendasi + +Tags biasanya (tetapi tidak selalu) merupakan satu bidang yang berisi daftar 5 hingga 6 nilai yang dipisahkan koma yang sesuai dengan *Jenis perjalanan*, *Jenis tamu*, *Jenis kamar*, *Jumlah malam*, dan *Jenis perangkat ulasan dikirimkan*. Namun, karena beberapa pengulas tidak mengisi setiap bidang (mereka mungkin meninggalkan satu kosong), nilai-nilai tersebut tidak selalu dalam urutan yang sama. + +Sebagai contoh, ambil *Jenis grup*. Ada 1025 kemungkinan unik di bidang ini dalam kolom `Tags`, dan sayangnya hanya beberapa di antaranya yang merujuk pada grup (beberapa adalah jenis kamar, dll.). Jika Anda memfilter hanya yang menyebutkan keluarga, hasilnya berisi banyak hasil tipe *Family room*. Jika Anda menyertakan istilah *dengan*, yaitu menghitung nilai *Family with*, hasilnya lebih baik, dengan lebih dari 80.000 dari 515.000 hasil yang berisi frasa "Family with young children" atau "Family with older children". + +Ini berarti kolom tags tidak sepenuhnya tidak berguna bagi kita, tetapi akan membutuhkan beberapa pekerjaan untuk membuatnya berguna. + +##### Skor Rata-rata Hotel + +Ada sejumlah keanehan atau ketidaksesuaian dengan dataset yang tidak dapat saya pahami, tetapi diilustrasikan di sini agar Anda menyadarinya saat membangun model Anda. Jika Anda memahaminya, beri tahu kami di bagian diskusi! + +Dataset memiliki kolom berikut yang berkaitan dengan skor rata-rata dan jumlah ulasan: + +1. Hotel_Name +2. Additional_Number_of_Scoring +3. Average_Score +4. Total_Number_of_Reviews +5. Reviewer_Score + +Hotel tunggal dengan jumlah ulasan terbanyak dalam dataset ini adalah *Britannia International Hotel Canary Wharf* dengan 4789 ulasan dari 515.000. Tetapi jika kita melihat nilai `Total_Number_of_Reviews` untuk hotel ini, nilainya adalah 9086. Anda mungkin menyimpulkan bahwa ada banyak skor tanpa ulasan, jadi mungkin kita harus menambahkan nilai kolom `Additional_Number_of_Scoring`. Nilai tersebut adalah 2682, dan menambahkannya ke 4789 menghasilkan 7471 yang masih kurang 1615 dari `Total_Number_of_Reviews`. + +Jika Anda mengambil kolom `Average_Score`, Anda mungkin menyimpulkan bahwa itu adalah rata-rata dari ulasan dalam dataset, tetapi deskripsi dari Kaggle adalah "*Skor Rata-rata hotel, dihitung berdasarkan komentar terbaru dalam satu tahun terakhir*". Itu tampaknya tidak terlalu berguna, tetapi kita dapat menghitung rata-rata kita sendiri berdasarkan skor ulasan dalam dataset. Menggunakan hotel yang sama sebagai contoh, skor rata-rata hotel diberikan sebagai 7.1 tetapi skor yang dihitung (rata-rata skor pengulas *dalam* dataset) adalah 6.8. Ini mendekati, tetapi bukan nilai yang sama, dan kita hanya dapat menebak bahwa skor yang diberikan dalam ulasan `Additional_Number_of_Scoring` meningkatkan rata-rata menjadi 7.1. Sayangnya tanpa cara untuk menguji atau membuktikan asumsi tersebut, sulit untuk menggunakan atau mempercayai `Average_Score`, `Additional_Number_of_Scoring`, dan `Total_Number_of_Reviews` ketika mereka didasarkan pada, atau merujuk pada, data yang tidak kita miliki. + +Untuk memperumit masalah lebih lanjut, hotel dengan jumlah ulasan tertinggi kedua memiliki skor rata-rata yang dihitung sebesar 8.12 dan dataset `Average_Score` adalah 8.1. Apakah skor ini benar adalah kebetulan atau apakah hotel pertama adalah ketidaksesuaian? + +Dengan kemungkinan bahwa hotel-hotel ini mungkin merupakan outlier, dan bahwa mungkin sebagian besar nilai sesuai (tetapi beberapa tidak karena alasan tertentu), kita akan menulis program pendek berikutnya untuk mengeksplorasi nilai-nilai dalam dataset dan menentukan penggunaan yang benar (atau tidak digunakan) dari nilai-nilai tersebut. +> 🚨 Catatan penting +> +> Saat bekerja dengan dataset ini, Anda akan menulis kode yang menghitung sesuatu dari teks tanpa harus membaca atau menganalisis teks itu sendiri. Inilah inti dari NLP, menafsirkan makna atau sentimen tanpa harus melibatkan manusia secara langsung. Namun, ada kemungkinan Anda akan membaca beberapa ulasan negatif. Saya menyarankan Anda untuk tidak melakukannya, karena Anda tidak perlu. Beberapa ulasan tersebut mungkin konyol atau tidak relevan, seperti ulasan negatif tentang hotel yang menyebutkan "Cuacanya tidak bagus", sesuatu yang berada di luar kendali hotel, atau bahkan siapa pun. Tetapi ada sisi gelap dari beberapa ulasan juga. Kadang-kadang ulasan negatif mengandung unsur rasis, seksis, atau diskriminasi usia. Hal ini sangat disayangkan tetapi dapat dipahami mengingat dataset ini diambil dari situs web publik. Beberapa pengulas meninggalkan ulasan yang mungkin Anda anggap tidak menyenangkan, membuat tidak nyaman, atau bahkan mengganggu. Lebih baik biarkan kode yang mengukur sentimen daripada membacanya sendiri dan merasa terganggu. Meski demikian, hanya sebagian kecil yang menulis hal-hal semacam itu, tetapi mereka tetap ada. +## Latihan - Eksplorasi Data +### Memuat Data + +Cukup sudah memeriksa data secara visual, sekarang saatnya menulis kode dan mendapatkan jawaban! Bagian ini menggunakan pustaka pandas. Tugas pertama Anda adalah memastikan bahwa Anda dapat memuat dan membaca data CSV. Pustaka pandas memiliki loader CSV yang cepat, dan hasilnya ditempatkan dalam dataframe, seperti yang telah dipelajari di pelajaran sebelumnya. CSV yang kita muat memiliki lebih dari setengah juta baris, tetapi hanya 17 kolom. Pandas memberikan banyak cara yang kuat untuk berinteraksi dengan dataframe, termasuk kemampuan untuk melakukan operasi pada setiap baris. + +Mulai dari sini dalam pelajaran ini, akan ada potongan kode dan beberapa penjelasan tentang kode serta diskusi tentang apa arti hasilnya. Gunakan _notebook.ipynb_ yang disertakan untuk kode Anda. + +Mari kita mulai dengan memuat file data yang akan Anda gunakan: + +```python +# Load the hotel reviews from CSV +import pandas as pd +import time +# importing time so the start and end time can be used to calculate file loading time +print("Loading data file now, this could take a while depending on file size") +start = time.time() +# df is 'DataFrame' - make sure you downloaded the file to the data folder +df = pd.read_csv('../../data/Hotel_Reviews.csv') +end = time.time() +print("Loading took " + str(round(end - start, 2)) + " seconds") +``` + +Setelah data dimuat, kita dapat melakukan beberapa operasi pada data tersebut. Simpan kode ini di bagian atas program Anda untuk bagian berikutnya. + +## Eksplorasi Data + +Dalam kasus ini, data sudah *bersih*, artinya data siap untuk digunakan dan tidak memiliki karakter dalam bahasa lain yang dapat mengganggu algoritma yang hanya mengharapkan karakter dalam bahasa Inggris. + +✅ Anda mungkin harus bekerja dengan data yang memerlukan beberapa pemrosesan awal untuk memformatnya sebelum menerapkan teknik NLP, tetapi tidak kali ini. Jika Anda harus melakukannya, bagaimana Anda akan menangani karakter non-Inggris? + +Luangkan waktu untuk memastikan bahwa setelah data dimuat, Anda dapat mengeksplorasinya dengan kode. Sangat mudah untuk ingin fokus pada kolom `Negative_Review` dan `Positive_Review`. Kolom-kolom tersebut diisi dengan teks alami untuk diproses oleh algoritma NLP Anda. Tapi tunggu! Sebelum Anda melompat ke NLP dan analisis sentimen, Anda harus mengikuti kode di bawah ini untuk memastikan apakah nilai-nilai yang diberikan dalam dataset sesuai dengan nilai-nilai yang Anda hitung dengan pandas. + +## Operasi Dataframe + +Tugas pertama dalam pelajaran ini adalah memeriksa apakah pernyataan berikut benar dengan menulis beberapa kode yang memeriksa dataframe (tanpa mengubahnya). + +> Seperti banyak tugas pemrograman, ada beberapa cara untuk menyelesaikannya, tetapi saran yang baik adalah melakukannya dengan cara yang paling sederhana dan mudah, terutama jika akan lebih mudah dipahami saat Anda kembali ke kode ini di masa depan. Dengan dataframe, ada API yang komprehensif yang sering kali memiliki cara untuk melakukan apa yang Anda inginkan secara efisien. + +Anggap pertanyaan berikut sebagai tugas pemrograman dan coba jawab tanpa melihat solusinya. + +1. Cetak *shape* dari dataframe yang baru saja Anda muat (shape adalah jumlah baris dan kolom). +2. Hitung frekuensi untuk kebangsaan reviewer: + 1. Berapa banyak nilai yang berbeda untuk kolom `Reviewer_Nationality` dan apa saja nilainya? + 2. Kebangsaan reviewer mana yang paling umum dalam dataset (cetak negara dan jumlah ulasan)? + 3. Apa 10 kebangsaan yang paling sering ditemukan berikutnya, dan hitungan frekuensinya? +3. Hotel mana yang paling sering diulas untuk masing-masing dari 10 kebangsaan reviewer teratas? +4. Berapa banyak ulasan per hotel (hitungan frekuensi hotel) dalam dataset? +5. Meskipun ada kolom `Average_Score` untuk setiap hotel dalam dataset, Anda juga dapat menghitung skor rata-rata (mengambil rata-rata dari semua skor reviewer dalam dataset untuk setiap hotel). Tambahkan kolom baru ke dataframe Anda dengan header kolom `Calc_Average_Score` yang berisi rata-rata yang dihitung tersebut. +6. Apakah ada hotel yang memiliki `Average_Score` dan `Calc_Average_Score` yang sama (dibulatkan ke 1 tempat desimal)? + 1. Coba tulis fungsi Python yang mengambil Series (baris) sebagai argumen dan membandingkan nilainya, mencetak pesan saat nilainya tidak sama. Kemudian gunakan metode `.apply()` untuk memproses setiap baris dengan fungsi tersebut. +7. Hitung dan cetak berapa banyak baris yang memiliki nilai kolom `Negative_Review` berupa "No Negative". +8. Hitung dan cetak berapa banyak baris yang memiliki nilai kolom `Positive_Review` berupa "No Positive". +9. Hitung dan cetak berapa banyak baris yang memiliki nilai kolom `Positive_Review` berupa "No Positive" **dan** nilai kolom `Negative_Review` berupa "No Negative". + +### Jawaban Kode + +1. Cetak *shape* dari dataframe yang baru saja Anda muat (shape adalah jumlah baris dan kolom). + + ```python + print("The shape of the data (rows, cols) is " + str(df.shape)) + > The shape of the data (rows, cols) is (515738, 17) + ``` + +2. Hitung frekuensi untuk kebangsaan reviewer: + + 1. Berapa banyak nilai yang berbeda untuk kolom `Reviewer_Nationality` dan apa saja nilainya? + 2. Kebangsaan reviewer mana yang paling umum dalam dataset (cetak negara dan jumlah ulasan)? + + ```python + # value_counts() creates a Series object that has index and values in this case, the country and the frequency they occur in reviewer nationality + nationality_freq = df["Reviewer_Nationality"].value_counts() + print("There are " + str(nationality_freq.size) + " different nationalities") + # print first and last rows of the Series. Change to nationality_freq.to_string() to print all of the data + print(nationality_freq) + + There are 227 different nationalities + United Kingdom 245246 + United States of America 35437 + Australia 21686 + Ireland 14827 + United Arab Emirates 10235 + ... + Comoros 1 + Palau 1 + Northern Mariana Islands 1 + Cape Verde 1 + Guinea 1 + Name: Reviewer_Nationality, Length: 227, dtype: int64 + ``` + + 3. Apa 10 kebangsaan yang paling sering ditemukan berikutnya, dan hitungan frekuensinya? + + ```python + print("The highest frequency reviewer nationality is " + str(nationality_freq.index[0]).strip() + " with " + str(nationality_freq[0]) + " reviews.") + # Notice there is a leading space on the values, strip() removes that for printing + # What is the top 10 most common nationalities and their frequencies? + print("The next 10 highest frequency reviewer nationalities are:") + print(nationality_freq[1:11].to_string()) + + The highest frequency reviewer nationality is United Kingdom with 245246 reviews. + The next 10 highest frequency reviewer nationalities are: + United States of America 35437 + Australia 21686 + Ireland 14827 + United Arab Emirates 10235 + Saudi Arabia 8951 + Netherlands 8772 + Switzerland 8678 + Germany 7941 + Canada 7894 + France 7296 + ``` + +3. Hotel mana yang paling sering diulas untuk masing-masing dari 10 kebangsaan reviewer teratas? + + ```python + # What was the most frequently reviewed hotel for the top 10 nationalities + # Normally with pandas you will avoid an explicit loop, but wanted to show creating a new dataframe using criteria (don't do this with large amounts of data because it could be very slow) + for nat in nationality_freq[:10].index: + # First, extract all the rows that match the criteria into a new dataframe + nat_df = df[df["Reviewer_Nationality"] == nat] + # Now get the hotel freq + freq = nat_df["Hotel_Name"].value_counts() + print("The most reviewed hotel for " + str(nat).strip() + " was " + str(freq.index[0]) + " with " + str(freq[0]) + " reviews.") + + The most reviewed hotel for United Kingdom was Britannia International Hotel Canary Wharf with 3833 reviews. + The most reviewed hotel for United States of America was Hotel Esther a with 423 reviews. + The most reviewed hotel for Australia was Park Plaza Westminster Bridge London with 167 reviews. + The most reviewed hotel for Ireland was Copthorne Tara Hotel London Kensington with 239 reviews. + The most reviewed hotel for United Arab Emirates was Millennium Hotel London Knightsbridge with 129 reviews. + The most reviewed hotel for Saudi Arabia was The Cumberland A Guoman Hotel with 142 reviews. + The most reviewed hotel for Netherlands was Jaz Amsterdam with 97 reviews. + The most reviewed hotel for Switzerland was Hotel Da Vinci with 97 reviews. + The most reviewed hotel for Germany was Hotel Da Vinci with 86 reviews. + The most reviewed hotel for Canada was St James Court A Taj Hotel London with 61 reviews. + ``` + +4. Berapa banyak ulasan per hotel (hitungan frekuensi hotel) dalam dataset? + + ```python + # First create a new dataframe based on the old one, removing the uneeded columns + hotel_freq_df = df.drop(["Hotel_Address", "Additional_Number_of_Scoring", "Review_Date", "Average_Score", "Reviewer_Nationality", "Negative_Review", "Review_Total_Negative_Word_Counts", "Positive_Review", "Review_Total_Positive_Word_Counts", "Total_Number_of_Reviews_Reviewer_Has_Given", "Reviewer_Score", "Tags", "days_since_review", "lat", "lng"], axis = 1) + + # Group the rows by Hotel_Name, count them and put the result in a new column Total_Reviews_Found + hotel_freq_df['Total_Reviews_Found'] = hotel_freq_df.groupby('Hotel_Name').transform('count') + + # Get rid of all the duplicated rows + hotel_freq_df = hotel_freq_df.drop_duplicates(subset = ["Hotel_Name"]) + display(hotel_freq_df) + ``` + | Hotel_Name | Total_Number_of_Reviews | Total_Reviews_Found | + | :----------------------------------------: | :---------------------: | :-----------------: | + | Britannia International Hotel Canary Wharf | 9086 | 4789 | + | Park Plaza Westminster Bridge London | 12158 | 4169 | + | Copthorne Tara Hotel London Kensington | 7105 | 3578 | + | ... | ... | ... | + | Mercure Paris Porte d Orleans | 110 | 10 | + | Hotel Wagner | 135 | 10 | + | Hotel Gallitzinberg | 173 | 8 | + + Anda mungkin menyadari bahwa hasil *counted in the dataset* tidak sesuai dengan nilai di `Total_Number_of_Reviews`. Tidak jelas apakah nilai ini dalam dataset mewakili jumlah total ulasan yang dimiliki hotel, tetapi tidak semuanya di-scrape, atau perhitungan lainnya. `Total_Number_of_Reviews` tidak digunakan dalam model karena ketidakjelasan ini. + +5. Meskipun ada kolom `Average_Score` untuk setiap hotel dalam dataset, Anda juga dapat menghitung skor rata-rata (mengambil rata-rata dari semua skor reviewer dalam dataset untuk setiap hotel). Tambahkan kolom baru ke dataframe Anda dengan header kolom `Calc_Average_Score` yang berisi rata-rata yang dihitung tersebut. Cetak kolom `Hotel_Name`, `Average_Score`, dan `Calc_Average_Score`. + + ```python + # define a function that takes a row and performs some calculation with it + def get_difference_review_avg(row): + return row["Average_Score"] - row["Calc_Average_Score"] + + # 'mean' is mathematical word for 'average' + df['Calc_Average_Score'] = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) + + # Add a new column with the difference between the two average scores + df["Average_Score_Difference"] = df.apply(get_difference_review_avg, axis = 1) + + # Create a df without all the duplicates of Hotel_Name (so only 1 row per hotel) + review_scores_df = df.drop_duplicates(subset = ["Hotel_Name"]) + + # Sort the dataframe to find the lowest and highest average score difference + review_scores_df = review_scores_df.sort_values(by=["Average_Score_Difference"]) + + display(review_scores_df[["Average_Score_Difference", "Average_Score", "Calc_Average_Score", "Hotel_Name"]]) + ``` + + Anda mungkin juga bertanya-tanya tentang nilai `Average_Score` dan mengapa kadang-kadang berbeda dari skor rata-rata yang dihitung. Karena kita tidak dapat mengetahui mengapa beberapa nilai cocok, tetapi yang lain memiliki perbedaan, yang paling aman dalam kasus ini adalah menggunakan skor ulasan yang kita miliki untuk menghitung rata-rata sendiri. Namun demikian, perbedaannya biasanya sangat kecil, berikut adalah hotel dengan deviasi terbesar dari rata-rata dataset dan rata-rata yang dihitung: + + | Average_Score_Difference | Average_Score | Calc_Average_Score | Hotel_Name | + | :----------------------: | :-----------: | :----------------: | ------------------------------------------: | + | -0.8 | 7.7 | 8.5 | Best Western Hotel Astoria | + | -0.7 | 8.8 | 9.5 | Hotel Stendhal Place Vend me Paris MGallery | + | -0.7 | 7.5 | 8.2 | Mercure Paris Porte d Orleans | + | -0.7 | 7.9 | 8.6 | Renaissance Paris Vendome Hotel | + | -0.5 | 7.0 | 7.5 | Hotel Royal Elys es | + | ... | ... | ... | ... | + | 0.7 | 7.5 | 6.8 | Mercure Paris Op ra Faubourg Montmartre | + | 0.8 | 7.1 | 6.3 | Holiday Inn Paris Montparnasse Pasteur | + | 0.9 | 6.8 | 5.9 | Villa Eugenie | + | 0.9 | 8.6 | 7.7 | MARQUIS Faubourg St Honor Relais Ch teaux | + | 1.3 | 7.2 | 5.9 | Kube Hotel Ice Bar | + + Dengan hanya 1 hotel yang memiliki perbedaan skor lebih besar dari 1, ini berarti kita mungkin dapat mengabaikan perbedaan tersebut dan menggunakan skor rata-rata yang dihitung. + +6. Hitung dan cetak berapa banyak baris yang memiliki nilai kolom `Negative_Review` berupa "No Negative". + +7. Hitung dan cetak berapa banyak baris yang memiliki nilai kolom `Positive_Review` berupa "No Positive". + +8. Hitung dan cetak berapa banyak baris yang memiliki nilai kolom `Positive_Review` berupa "No Positive" **dan** nilai kolom `Negative_Review` berupa "No Negative". + + ```python + # with lambdas: + start = time.time() + no_negative_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" else False , axis=1) + print("Number of No Negative reviews: " + str(len(no_negative_reviews[no_negative_reviews == True].index))) + + no_positive_reviews = df.apply(lambda x: True if x['Positive_Review'] == "No Positive" else False , axis=1) + print("Number of No Positive reviews: " + str(len(no_positive_reviews[no_positive_reviews == True].index))) + + both_no_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" and x['Positive_Review'] == "No Positive" else False , axis=1) + print("Number of both No Negative and No Positive reviews: " + str(len(both_no_reviews[both_no_reviews == True].index))) + end = time.time() + print("Lambdas took " + str(round(end - start, 2)) + " seconds") + + Number of No Negative reviews: 127890 + Number of No Positive reviews: 35946 + Number of both No Negative and No Positive reviews: 127 + Lambdas took 9.64 seconds + ``` + +## Cara Lain + +Cara lain untuk menghitung item tanpa Lambda, dan menggunakan sum untuk menghitung baris: + + ```python + # without lambdas (using a mixture of notations to show you can use both) + start = time.time() + no_negative_reviews = sum(df.Negative_Review == "No Negative") + print("Number of No Negative reviews: " + str(no_negative_reviews)) + + no_positive_reviews = sum(df["Positive_Review"] == "No Positive") + print("Number of No Positive reviews: " + str(no_positive_reviews)) + + both_no_reviews = sum((df.Negative_Review == "No Negative") & (df.Positive_Review == "No Positive")) + print("Number of both No Negative and No Positive reviews: " + str(both_no_reviews)) + + end = time.time() + print("Sum took " + str(round(end - start, 2)) + " seconds") + + Number of No Negative reviews: 127890 + Number of No Positive reviews: 35946 + Number of both No Negative and No Positive reviews: 127 + Sum took 0.19 seconds + ``` + + Anda mungkin menyadari bahwa ada 127 baris yang memiliki nilai "No Negative" dan "No Positive" untuk kolom `Negative_Review` dan `Positive_Review` masing-masing. Artinya, reviewer memberikan skor numerik kepada hotel, tetapi tidak menulis ulasan positif maupun negatif. Untungnya ini adalah jumlah baris yang kecil (127 dari 515738, atau 0,02%), sehingga kemungkinan besar tidak akan memengaruhi model atau hasil kita ke arah tertentu, tetapi Anda mungkin tidak mengharapkan dataset ulasan memiliki baris tanpa ulasan, jadi ini layak untuk dieksplorasi. + +Setelah Anda mengeksplorasi dataset, dalam pelajaran berikutnya Anda akan memfilter data dan menambahkan analisis sentimen. + +--- +## 🚀Tantangan + +Pelajaran ini menunjukkan, seperti yang kita lihat di pelajaran sebelumnya, betapa pentingnya memahami data Anda dan kekurangannya sebelum melakukan operasi pada data tersebut. Data berbasis teks, khususnya, memerlukan pengamatan yang cermat. Telusuri berbagai dataset yang kaya teks dan lihat apakah Anda dapat menemukan area yang dapat memperkenalkan bias atau sentimen yang menyimpang ke dalam model. + +## [Kuis setelah pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Tinjauan & Studi Mandiri + +Ikuti [Learning Path tentang NLP ini](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott) untuk menemukan alat yang dapat dicoba saat membangun model yang kaya teks dan ucapan. + +## Tugas + +[NLTK](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/6-NLP/4-Hotel-Reviews-1/assignment.md b/translations/id/6-NLP/4-Hotel-Reviews-1/assignment.md new file mode 100644 index 00000000..c7abd144 --- /dev/null +++ b/translations/id/6-NLP/4-Hotel-Reviews-1/assignment.md @@ -0,0 +1,19 @@ + +# NLTK + +## Instruksi + +NLTK adalah pustaka terkenal yang digunakan dalam linguistik komputasi dan NLP. Gunakan kesempatan ini untuk membaca '[buku NLTK](https://www.nltk.org/book/)' dan coba latihan-latihannya. Dalam tugas yang tidak dinilai ini, Anda akan mengenal pustaka ini lebih dalam. + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md b/translations/id/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md new file mode 100644 index 00000000..e8fb937a --- /dev/null +++ b/translations/id/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/6-NLP/4-Hotel-Reviews-1/solution/R/README.md b/translations/id/6-NLP/4-Hotel-Reviews-1/solution/R/README.md new file mode 100644 index 00000000..f83cee00 --- /dev/null +++ b/translations/id/6-NLP/4-Hotel-Reviews-1/solution/R/README.md @@ -0,0 +1,15 @@ + +ini adalah tempat sementara + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/6-NLP/5-Hotel-Reviews-2/README.md b/translations/id/6-NLP/5-Hotel-Reviews-2/README.md new file mode 100644 index 00000000..0ae9190b --- /dev/null +++ b/translations/id/6-NLP/5-Hotel-Reviews-2/README.md @@ -0,0 +1,389 @@ + +# Analisis Sentimen dengan Ulasan Hotel + +Setelah Anda menjelajahi dataset secara mendetail, sekarang saatnya untuk memfilter kolom dan menggunakan teknik NLP pada dataset untuk mendapatkan wawasan baru tentang hotel. + +## [Kuis Pra-Kuliah](https://ff-quizzes.netlify.app/en/ml/) + +### Operasi Pemfilteran & Analisis Sentimen + +Seperti yang mungkin sudah Anda perhatikan, dataset memiliki beberapa masalah. Beberapa kolom diisi dengan informasi yang tidak berguna, sementara yang lain tampak tidak benar. Jika benar, tidak jelas bagaimana mereka dihitung, dan jawabannya tidak dapat diverifikasi secara independen melalui perhitungan Anda sendiri. + +## Latihan: Pemrosesan Data Lebih Lanjut + +Bersihkan data sedikit lebih banyak. Tambahkan kolom yang akan berguna nanti, ubah nilai di kolom lain, dan hapus beberapa kolom sepenuhnya. + +1. Pemrosesan kolom awal + + 1. Hapus `lat` dan `lng` + + 2. Ganti nilai `Hotel_Address` dengan nilai berikut (jika alamat mengandung nama kota dan negara yang sama, ubah menjadi hanya kota dan negara). + + Berikut adalah satu-satunya kota dan negara dalam dataset: + + Amsterdam, Netherlands + + Barcelona, Spain + + London, United Kingdom + + Milan, Italy + + Paris, France + + Vienna, Austria + + ```python + def replace_address(row): + if "Netherlands" in row["Hotel_Address"]: + return "Amsterdam, Netherlands" + elif "Barcelona" in row["Hotel_Address"]: + return "Barcelona, Spain" + elif "United Kingdom" in row["Hotel_Address"]: + return "London, United Kingdom" + elif "Milan" in row["Hotel_Address"]: + return "Milan, Italy" + elif "France" in row["Hotel_Address"]: + return "Paris, France" + elif "Vienna" in row["Hotel_Address"]: + return "Vienna, Austria" + + # Replace all the addresses with a shortened, more useful form + df["Hotel_Address"] = df.apply(replace_address, axis = 1) + # The sum of the value_counts() should add up to the total number of reviews + print(df["Hotel_Address"].value_counts()) + ``` + + Sekarang Anda dapat melakukan query data tingkat negara: + + ```python + display(df.groupby("Hotel_Address").agg({"Hotel_Name": "nunique"})) + ``` + + | Hotel_Address | Hotel_Name | + | :--------------------- | :--------: | + | Amsterdam, Netherlands | 105 | + | Barcelona, Spain | 211 | + | London, United Kingdom | 400 | + | Milan, Italy | 162 | + | Paris, France | 458 | + | Vienna, Austria | 158 | + +2. Proses kolom Meta-review Hotel + + 1. Hapus `Additional_Number_of_Scoring` + + 2. Ganti `Total_Number_of_Reviews` dengan jumlah total ulasan untuk hotel tersebut yang benar-benar ada dalam dataset + + 3. Ganti `Average_Score` dengan skor yang dihitung sendiri + + ```python + # Drop `Additional_Number_of_Scoring` + df.drop(["Additional_Number_of_Scoring"], axis = 1, inplace=True) + # Replace `Total_Number_of_Reviews` and `Average_Score` with our own calculated values + df.Total_Number_of_Reviews = df.groupby('Hotel_Name').transform('count') + df.Average_Score = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) + ``` + +3. Proses kolom ulasan + + 1. Hapus `Review_Total_Negative_Word_Counts`, `Review_Total_Positive_Word_Counts`, `Review_Date`, dan `days_since_review` + + 2. Biarkan `Reviewer_Score`, `Negative_Review`, dan `Positive_Review` seperti apa adanya + + 3. Biarkan `Tags` untuk sementara waktu + + - Kita akan melakukan beberapa operasi pemfilteran tambahan pada tag di bagian berikutnya, lalu tag akan dihapus + +4. Proses kolom reviewer + + 1. Hapus `Total_Number_of_Reviews_Reviewer_Has_Given` + + 2. Biarkan `Reviewer_Nationality` + +### Kolom Tag + +Kolom `Tag` bermasalah karena merupakan daftar (dalam bentuk teks) yang disimpan di kolom. Sayangnya, urutan dan jumlah sub bagian dalam kolom ini tidak selalu sama. Sulit bagi manusia untuk mengidentifikasi frasa yang benar untuk diperhatikan, karena ada 515.000 baris, dan 1427 hotel, dan masing-masing memiliki opsi yang sedikit berbeda yang dapat dipilih oleh seorang reviewer. Di sinilah NLP sangat berguna. Anda dapat memindai teks dan menemukan frasa yang paling umum, lalu menghitungnya. + +Sayangnya, kita tidak tertarik pada kata tunggal, tetapi frasa multi-kata (misalnya *Perjalanan bisnis*). Menjalankan algoritma distribusi frekuensi multi-kata pada data sebanyak itu (6762646 kata) bisa memakan waktu yang luar biasa lama, tetapi tanpa melihat data, tampaknya itu adalah pengeluaran yang diperlukan. Di sinilah analisis data eksplorasi menjadi berguna, karena Anda telah melihat sampel tag seperti `[' Business trip ', ' Solo traveler ', ' Single Room ', ' Stayed 5 nights ', ' Submitted from a mobile device ']`, Anda dapat mulai bertanya apakah mungkin untuk sangat mengurangi pemrosesan yang harus Anda lakukan. Untungnya, itu mungkin - tetapi pertama-tama Anda perlu mengikuti beberapa langkah untuk memastikan tag yang relevan. + +### Memfilter Tag + +Ingatlah bahwa tujuan dataset adalah untuk menambahkan sentimen dan kolom yang akan membantu Anda memilih hotel terbaik (untuk diri sendiri atau mungkin untuk klien yang meminta Anda membuat bot rekomendasi hotel). Anda perlu bertanya pada diri sendiri apakah tag tersebut berguna atau tidak dalam dataset akhir. Berikut adalah satu interpretasi (jika Anda membutuhkan dataset untuk alasan lain, tag yang berbeda mungkin tetap masuk/keluar dari seleksi): + +1. Jenis perjalanan relevan, dan itu harus tetap +2. Jenis grup tamu penting, dan itu harus tetap +3. Jenis kamar, suite, atau studio tempat tamu menginap tidak relevan (semua hotel pada dasarnya memiliki kamar yang sama) +4. Perangkat tempat ulasan dikirimkan tidak relevan +5. Jumlah malam tamu menginap *mungkin* relevan jika Anda mengaitkan masa tinggal yang lebih lama dengan mereka menyukai hotel lebih banyak, tetapi itu agak dipaksakan, dan mungkin tidak relevan + +Singkatnya, **pertahankan 2 jenis tag dan hapus yang lainnya**. + +Pertama, Anda tidak ingin menghitung tag sampai mereka dalam format yang lebih baik, jadi itu berarti menghapus tanda kurung siku dan tanda kutip. Anda dapat melakukan ini dengan beberapa cara, tetapi Anda ingin yang tercepat karena ini bisa memakan waktu lama untuk memproses banyak data. Untungnya, pandas memiliki cara mudah untuk melakukan setiap langkah ini. + +```Python +# Remove opening and closing brackets +df.Tags = df.Tags.str.strip("[']") +# remove all quotes too +df.Tags = df.Tags.str.replace(" ', '", ",", regex = False) +``` + +Setiap tag menjadi seperti: `Business trip, Solo traveler, Single Room, Stayed 5 nights, Submitted from a mobile device`. + +Selanjutnya kita menemukan masalah. Beberapa ulasan, atau baris, memiliki 5 kolom, beberapa 3, beberapa 6. Ini adalah hasil dari bagaimana dataset dibuat, dan sulit untuk diperbaiki. Anda ingin mendapatkan hitungan frekuensi dari setiap frasa, tetapi mereka berada dalam urutan yang berbeda di setiap ulasan, sehingga hitungan mungkin salah, dan sebuah hotel mungkin tidak mendapatkan tag yang layak untuknya. + +Sebaliknya, Anda akan menggunakan urutan yang berbeda untuk keuntungan kita, karena setiap tag adalah multi-kata tetapi juga dipisahkan oleh koma! Cara termudah untuk melakukan ini adalah dengan membuat 6 kolom sementara dengan setiap tag dimasukkan ke dalam kolom yang sesuai dengan urutannya dalam tag. Anda kemudian dapat menggabungkan 6 kolom menjadi satu kolom besar dan menjalankan metode `value_counts()` pada kolom yang dihasilkan. Dengan mencetaknya, Anda akan melihat ada 2428 tag unik. Berikut adalah sampel kecil: + +| Tag | Count | +| ------------------------------ | ------ | +| Leisure trip | 417778 | +| Submitted from a mobile device | 307640 | +| Couple | 252294 | +| Stayed 1 night | 193645 | +| Stayed 2 nights | 133937 | +| Solo traveler | 108545 | +| Stayed 3 nights | 95821 | +| Business trip | 82939 | +| Group | 65392 | +| Family with young children | 61015 | +| Stayed 4 nights | 47817 | +| Double Room | 35207 | +| Standard Double Room | 32248 | +| Superior Double Room | 31393 | +| Family with older children | 26349 | +| Deluxe Double Room | 24823 | +| Double or Twin Room | 22393 | +| Stayed 5 nights | 20845 | +| Standard Double or Twin Room | 17483 | +| Classic Double Room | 16989 | +| Superior Double or Twin Room | 13570 | +| 2 rooms | 12393 | + +Beberapa tag umum seperti `Submitted from a mobile device` tidak berguna bagi kita, jadi mungkin bijaksana untuk menghapusnya sebelum menghitung kemunculan frasa, tetapi ini adalah operasi yang sangat cepat sehingga Anda dapat membiarkannya dan mengabaikannya. + +### Menghapus Tag Durasi Menginap + +Menghapus tag ini adalah langkah pertama, ini sedikit mengurangi jumlah total tag yang harus dipertimbangkan. Perhatikan bahwa Anda tidak menghapusnya dari dataset, hanya memilih untuk menghapusnya dari pertimbangan sebagai nilai untuk dihitung/disimpan dalam dataset ulasan. + +| Durasi menginap | Count | +| ---------------- | ------ | +| Stayed 1 night | 193645 | +| Stayed 2 nights | 133937 | +| Stayed 3 nights | 95821 | +| Stayed 4 nights | 47817 | +| Stayed 5 nights | 20845 | +| Stayed 6 nights | 9776 | +| Stayed 7 nights | 7399 | +| Stayed 8 nights | 2502 | +| Stayed 9 nights | 1293 | +| ... | ... | + +Ada berbagai macam kamar, suite, studio, apartemen, dan sebagainya. Semuanya memiliki arti yang kurang lebih sama dan tidak relevan bagi Anda, jadi hapus dari pertimbangan. + +| Jenis kamar | Count | +| ----------------------------- | ----- | +| Double Room | 35207 | +| Standard Double Room | 32248 | +| Superior Double Room | 31393 | +| Deluxe Double Room | 24823 | +| Double or Twin Room | 22393 | +| Standard Double or Twin Room | 17483 | +| Classic Double Room | 16989 | +| Superior Double or Twin Room | 13570 | + +Akhirnya, dan ini menyenangkan (karena tidak memerlukan banyak pemrosesan sama sekali), Anda akan mendapatkan tag *berguna* berikut: + +| Tag | Count | +| --------------------------------------------- | ------ | +| Leisure trip | 417778 | +| Couple | 252294 | +| Solo traveler | 108545 | +| Business trip | 82939 | +| Group (combined with Travellers with friends) | 67535 | +| Family with young children | 61015 | +| Family with older children | 26349 | +| With a pet | 1405 | + +Anda bisa berargumen bahwa `Travellers with friends` kurang lebih sama dengan `Group`, dan itu adil untuk menggabungkan keduanya seperti di atas. Kode untuk mengidentifikasi tag yang benar ada di [notebook Tags](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb). + +Langkah terakhir adalah membuat kolom baru untuk masing-masing tag ini. Kemudian, untuk setiap baris ulasan, jika kolom `Tag` cocok dengan salah satu kolom baru, tambahkan 1, jika tidak, tambahkan 0. Hasil akhirnya adalah hitungan berapa banyak reviewer yang memilih hotel ini (secara agregat) untuk, misalnya, bisnis vs rekreasi, atau untuk membawa hewan peliharaan, dan ini adalah informasi yang berguna saat merekomendasikan hotel. + +```python +# Process the Tags into new columns +# The file Hotel_Reviews_Tags.py, identifies the most important tags +# Leisure trip, Couple, Solo traveler, Business trip, Group combined with Travelers with friends, +# Family with young children, Family with older children, With a pet +df["Leisure_trip"] = df.Tags.apply(lambda tag: 1 if "Leisure trip" in tag else 0) +df["Couple"] = df.Tags.apply(lambda tag: 1 if "Couple" in tag else 0) +df["Solo_traveler"] = df.Tags.apply(lambda tag: 1 if "Solo traveler" in tag else 0) +df["Business_trip"] = df.Tags.apply(lambda tag: 1 if "Business trip" in tag else 0) +df["Group"] = df.Tags.apply(lambda tag: 1 if "Group" in tag or "Travelers with friends" in tag else 0) +df["Family_with_young_children"] = df.Tags.apply(lambda tag: 1 if "Family with young children" in tag else 0) +df["Family_with_older_children"] = df.Tags.apply(lambda tag: 1 if "Family with older children" in tag else 0) +df["With_a_pet"] = df.Tags.apply(lambda tag: 1 if "With a pet" in tag else 0) + +``` + +### Simpan File Anda + +Akhirnya, simpan dataset seperti sekarang dengan nama baru. + +```python +df.drop(["Review_Total_Negative_Word_Counts", "Review_Total_Positive_Word_Counts", "days_since_review", "Total_Number_of_Reviews_Reviewer_Has_Given"], axis = 1, inplace=True) + +# Saving new data file with calculated columns +print("Saving results to Hotel_Reviews_Filtered.csv") +df.to_csv(r'../data/Hotel_Reviews_Filtered.csv', index = False) +``` + +## Operasi Analisis Sentimen + +Di bagian terakhir ini, Anda akan menerapkan analisis sentimen pada kolom ulasan dan menyimpan hasilnya dalam dataset. + +## Latihan: memuat dan menyimpan data yang telah difilter + +Perhatikan bahwa sekarang Anda memuat dataset yang telah difilter yang disimpan di bagian sebelumnya, **bukan** dataset asli. + +```python +import time +import pandas as pd +import nltk as nltk +from nltk.corpus import stopwords +from nltk.sentiment.vader import SentimentIntensityAnalyzer +nltk.download('vader_lexicon') + +# Load the filtered hotel reviews from CSV +df = pd.read_csv('../../data/Hotel_Reviews_Filtered.csv') + +# You code will be added here + + +# Finally remember to save the hotel reviews with new NLP data added +print("Saving results to Hotel_Reviews_NLP.csv") +df.to_csv(r'../data/Hotel_Reviews_NLP.csv', index = False) +``` + +### Menghapus Stop Words + +Jika Anda menjalankan Analisis Sentimen pada kolom ulasan Negatif dan Positif, itu bisa memakan waktu lama. Diuji pada laptop uji yang kuat dengan CPU cepat, itu memakan waktu 12 - 14 menit tergantung pada perpustakaan sentimen yang digunakan. Itu adalah waktu yang (relatif) lama, jadi layak untuk diselidiki apakah itu bisa dipercepat. + +Menghapus stop words, atau kata-kata umum dalam bahasa Inggris yang tidak mengubah sentimen sebuah kalimat, adalah langkah pertama. Dengan menghapusnya, analisis sentimen harus berjalan lebih cepat, tetapi tidak menjadi kurang akurat (karena stop words tidak memengaruhi sentimen, tetapi mereka memperlambat analisis). + +Ulasan negatif terpanjang adalah 395 kata, tetapi setelah menghapus stop words, menjadi 195 kata. + +Menghapus stop words juga merupakan operasi yang cepat, menghapus stop words dari 2 kolom ulasan di lebih dari 515.000 baris memakan waktu 3,3 detik pada perangkat uji. Itu bisa memakan waktu sedikit lebih lama atau lebih cepat tergantung pada kecepatan CPU perangkat Anda, RAM, apakah Anda memiliki SSD atau tidak, dan beberapa faktor lainnya. Relatif singkatnya operasi berarti bahwa jika itu meningkatkan waktu analisis sentimen, maka itu layak dilakukan. + +```python +from nltk.corpus import stopwords + +# Load the hotel reviews from CSV +df = pd.read_csv("../../data/Hotel_Reviews_Filtered.csv") + +# Remove stop words - can be slow for a lot of text! +# Ryan Han (ryanxjhan on Kaggle) has a great post measuring performance of different stop words removal approaches +# https://www.kaggle.com/ryanxjhan/fast-stop-words-removal # using the approach that Ryan recommends +start = time.time() +cache = set(stopwords.words("english")) +def remove_stopwords(review): + text = " ".join([word for word in review.split() if word not in cache]) + return text + +# Remove the stop words from both columns +df.Negative_Review = df.Negative_Review.apply(remove_stopwords) +df.Positive_Review = df.Positive_Review.apply(remove_stopwords) +``` + +### Melakukan Analisis Sentimen + +Sekarang Anda harus menghitung analisis sentimen untuk kolom ulasan negatif dan positif, dan menyimpan hasilnya dalam 2 kolom baru. Uji sentimen adalah membandingkannya dengan skor reviewer untuk ulasan yang sama. Misalnya, jika sentimen menganggap ulasan negatif memiliki sentimen 1 (sentimen sangat positif) dan sentimen ulasan positif 1, tetapi reviewer memberikan hotel skor terendah yang mungkin, maka teks ulasan tidak sesuai dengan skor, atau analis sentimen tidak dapat mengenali sentimen dengan benar. Anda harus mengharapkan beberapa skor sentimen benar-benar salah, dan sering kali itu dapat dijelaskan, misalnya ulasan bisa sangat sarkastik "Tentu saja saya SUKA tidur di kamar tanpa pemanas" dan analis sentimen menganggap itu sentimen positif, meskipun manusia yang membacanya akan tahu itu adalah sarkasme. +NLTK menyediakan berbagai analyzer sentimen untuk dipelajari, dan Anda dapat menggantinya serta melihat apakah analisis sentimen menjadi lebih atau kurang akurat. Analisis sentimen VADER digunakan di sini. + +> Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, Juni 2014. + +```python +from nltk.sentiment.vader import SentimentIntensityAnalyzer + +# Create the vader sentiment analyser (there are others in NLTK you can try too) +vader_sentiment = SentimentIntensityAnalyzer() +# Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014. + +# There are 3 possibilities of input for a review: +# It could be "No Negative", in which case, return 0 +# It could be "No Positive", in which case, return 0 +# It could be a review, in which case calculate the sentiment +def calc_sentiment(review): + if review == "No Negative" or review == "No Positive": + return 0 + return vader_sentiment.polarity_scores(review)["compound"] +``` + +Nantinya dalam program Anda, ketika Anda siap untuk menghitung sentimen, Anda dapat menerapkannya pada setiap ulasan seperti berikut: + +```python +# Add a negative sentiment and positive sentiment column +print("Calculating sentiment columns for both positive and negative reviews") +start = time.time() +df["Negative_Sentiment"] = df.Negative_Review.apply(calc_sentiment) +df["Positive_Sentiment"] = df.Positive_Review.apply(calc_sentiment) +end = time.time() +print("Calculating sentiment took " + str(round(end - start, 2)) + " seconds") +``` + +Proses ini memakan waktu sekitar 120 detik di komputer saya, tetapi akan bervariasi di setiap komputer. Jika Anda ingin mencetak hasilnya dan melihat apakah sentimen sesuai dengan ulasan: + +```python +df = df.sort_values(by=["Negative_Sentiment"], ascending=True) +print(df[["Negative_Review", "Negative_Sentiment"]]) +df = df.sort_values(by=["Positive_Sentiment"], ascending=True) +print(df[["Positive_Review", "Positive_Sentiment"]]) +``` + +Hal terakhir yang harus dilakukan dengan file sebelum menggunakannya dalam tantangan adalah menyimpannya! Anda juga sebaiknya mempertimbangkan untuk mengatur ulang semua kolom baru Anda agar lebih mudah digunakan (untuk manusia, ini adalah perubahan kosmetik). + +```python +# Reorder the columns (This is cosmetic, but to make it easier to explore the data later) +df = df.reindex(["Hotel_Name", "Hotel_Address", "Total_Number_of_Reviews", "Average_Score", "Reviewer_Score", "Negative_Sentiment", "Positive_Sentiment", "Reviewer_Nationality", "Leisure_trip", "Couple", "Solo_traveler", "Business_trip", "Group", "Family_with_young_children", "Family_with_older_children", "With_a_pet", "Negative_Review", "Positive_Review"], axis=1) + +print("Saving results to Hotel_Reviews_NLP.csv") +df.to_csv(r"../data/Hotel_Reviews_NLP.csv", index = False) +``` + +Anda harus menjalankan seluruh kode untuk [notebook analisis](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) (setelah Anda menjalankan [notebook penyaringan](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) untuk menghasilkan file Hotel_Reviews_Filtered.csv). + +Untuk merangkum, langkah-langkahnya adalah: + +1. File dataset asli **Hotel_Reviews.csv** dieksplorasi dalam pelajaran sebelumnya dengan [notebook eksplorasi](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb) +2. Hotel_Reviews.csv disaring oleh [notebook penyaringan](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) menghasilkan **Hotel_Reviews_Filtered.csv** +3. Hotel_Reviews_Filtered.csv diproses oleh [notebook analisis sentimen](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) menghasilkan **Hotel_Reviews_NLP.csv** +4. Gunakan Hotel_Reviews_NLP.csv dalam Tantangan NLP di bawah ini + +### Kesimpulan + +Ketika Anda memulai, Anda memiliki dataset dengan kolom dan data tetapi tidak semuanya dapat diverifikasi atau digunakan. Anda telah mengeksplorasi data, menyaring apa yang tidak Anda perlukan, mengubah tag menjadi sesuatu yang berguna, menghitung rata-rata Anda sendiri, menambahkan beberapa kolom sentimen, dan semoga, mempelajari beberapa hal menarik tentang pemrosesan teks alami. + +## [Kuis setelah pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Tantangan + +Sekarang setelah dataset Anda dianalisis untuk sentimen, coba gunakan strategi yang telah Anda pelajari dalam kurikulum ini (mungkin clustering?) untuk menentukan pola terkait sentimen. + +## Tinjauan & Studi Mandiri + +Ambil [modul Learn ini](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott) untuk mempelajari lebih lanjut dan menggunakan alat yang berbeda untuk mengeksplorasi sentimen dalam teks. + +## Tugas + +[Coba dataset yang berbeda](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/6-NLP/5-Hotel-Reviews-2/assignment.md b/translations/id/6-NLP/5-Hotel-Reviews-2/assignment.md new file mode 100644 index 00000000..bf0ef2b9 --- /dev/null +++ b/translations/id/6-NLP/5-Hotel-Reviews-2/assignment.md @@ -0,0 +1,25 @@ + +# Coba dataset yang berbeda + +## Instruksi + +Setelah Anda mempelajari cara menggunakan NLTK untuk memberikan sentimen pada teks, cobalah dataset yang berbeda. Anda mungkin perlu melakukan beberapa pemrosesan data, jadi buatlah notebook dan dokumentasikan proses pemikiran Anda. Apa yang Anda temukan? + +## Rubrik + +| Kriteria | Luar Biasa | Memadai | Perlu Perbaikan | +| -------- | ---------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ---------------------- | +| | Notebook lengkap dan dataset disajikan dengan sel yang terdokumentasi dengan baik menjelaskan cara sentimen diberikan | Notebook kurang penjelasan yang baik | Notebook memiliki kekurangan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md b/translations/id/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md new file mode 100644 index 00000000..486466dd --- /dev/null +++ b/translations/id/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/6-NLP/5-Hotel-Reviews-2/solution/R/README.md b/translations/id/6-NLP/5-Hotel-Reviews-2/solution/R/README.md new file mode 100644 index 00000000..841ccb11 --- /dev/null +++ b/translations/id/6-NLP/5-Hotel-Reviews-2/solution/R/README.md @@ -0,0 +1,15 @@ + +ini adalah tempat sementara + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/6-NLP/README.md b/translations/id/6-NLP/README.md new file mode 100644 index 00000000..dfe80945 --- /dev/null +++ b/translations/id/6-NLP/README.md @@ -0,0 +1,38 @@ + +# Memulai dengan pemrosesan bahasa alami + +Pemrosesan bahasa alami (NLP) adalah kemampuan program komputer untuk memahami bahasa manusia sebagaimana diucapkan dan ditulis -- yang disebut sebagai bahasa alami. Ini adalah komponen dari kecerdasan buatan (AI). NLP telah ada selama lebih dari 50 tahun dan memiliki akar dalam bidang linguistik. Seluruh bidang ini diarahkan untuk membantu mesin memahami dan memproses bahasa manusia. Hal ini kemudian dapat digunakan untuk melakukan tugas-tugas seperti pemeriksaan ejaan atau terjemahan mesin. NLP memiliki berbagai aplikasi dunia nyata di sejumlah bidang, termasuk penelitian medis, mesin pencari, dan intelijen bisnis. + +## Topik regional: Bahasa dan sastra Eropa serta hotel romantis di Eropa ❤️ + +Dalam bagian kurikulum ini, Anda akan diperkenalkan dengan salah satu penggunaan pembelajaran mesin yang paling luas: pemrosesan bahasa alami (NLP). Berasal dari linguistik komputasi, kategori kecerdasan buatan ini adalah jembatan antara manusia dan mesin melalui komunikasi suara atau teks. + +Dalam pelajaran ini, kita akan mempelajari dasar-dasar NLP dengan membangun bot percakapan kecil untuk memahami bagaimana pembelajaran mesin membantu membuat percakapan ini semakin 'cerdas'. Anda akan melakukan perjalanan kembali ke masa lalu, berbincang dengan Elizabeth Bennett dan Mr. Darcy dari novel klasik Jane Austen, **Pride and Prejudice**, yang diterbitkan pada tahun 1813. Kemudian, Anda akan memperdalam pengetahuan Anda dengan mempelajari analisis sentimen melalui ulasan hotel di Eropa. + +![Buku Pride and Prejudice dan teh](../../../6-NLP/images/p&p.jpg) +> Foto oleh Elaine Howlin di Unsplash + +## Pelajaran + +1. [Pengantar pemrosesan bahasa alami](1-Introduction-to-NLP/README.md) +2. [Tugas dan teknik umum dalam NLP](2-Tasks/README.md) +3. [Terjemahan dan analisis sentimen dengan pembelajaran mesin](3-Translation-Sentiment/README.md) +4. [Mempersiapkan data Anda](4-Hotel-Reviews-1/README.md) +5. [NLTK untuk Analisis Sentimen](5-Hotel-Reviews-2/README.md) + +## Kredit + +Pelajaran pemrosesan bahasa alami ini ditulis dengan ☕ oleh [Stephen Howell](https://twitter.com/Howell_MSFT) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/6-NLP/data/README.md b/translations/id/6-NLP/data/README.md new file mode 100644 index 00000000..ca020612 --- /dev/null +++ b/translations/id/6-NLP/data/README.md @@ -0,0 +1,15 @@ + +Unduh data ulasan hotel ke folder ini. + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/7-TimeSeries/1-Introduction/README.md b/translations/id/7-TimeSeries/1-Introduction/README.md new file mode 100644 index 00000000..e492a01c --- /dev/null +++ b/translations/id/7-TimeSeries/1-Introduction/README.md @@ -0,0 +1,199 @@ + +# Pengantar Peramalan Deret Waktu + +![Ringkasan deret waktu dalam sketchnote](../../../../sketchnotes/ml-timeseries.png) + +> Sketchnote oleh [Tomomi Imura](https://www.twitter.com/girlie_mac) + +Dalam pelajaran ini dan pelajaran berikutnya, Anda akan mempelajari sedikit tentang peramalan deret waktu, bagian yang menarik dan berharga dari repertoar seorang ilmuwan ML yang mungkin kurang dikenal dibandingkan topik lainnya. Peramalan deret waktu adalah semacam 'bola kristal': berdasarkan kinerja masa lalu dari suatu variabel seperti harga, Anda dapat memprediksi nilai potensialnya di masa depan. + +[![Pengantar peramalan deret waktu](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](https://youtu.be/cBojo1hsHiI "Pengantar peramalan deret waktu") + +> 🎥 Klik gambar di atas untuk video tentang peramalan deret waktu + +## [Kuis pra-pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +Ini adalah bidang yang berguna dan menarik dengan nilai nyata bagi bisnis, mengingat penerapannya langsung pada masalah harga, inventaris, dan rantai pasokan. Meskipun teknik pembelajaran mendalam mulai digunakan untuk mendapatkan wawasan lebih baik dalam memprediksi kinerja masa depan, peramalan deret waktu tetap menjadi bidang yang sangat dipengaruhi oleh teknik ML klasik. + +> Kurikulum deret waktu yang berguna dari Penn State dapat ditemukan [di sini](https://online.stat.psu.edu/stat510/lesson/1) + +## Pengantar + +Misalkan Anda mengelola serangkaian meteran parkir pintar yang menyediakan data tentang seberapa sering mereka digunakan dan berapa lama selama periode waktu tertentu. + +> Bagaimana jika Anda dapat memprediksi, berdasarkan kinerja masa lalu meteran tersebut, nilai masa depannya sesuai dengan hukum penawaran dan permintaan? + +Memprediksi dengan akurat kapan harus bertindak untuk mencapai tujuan Anda adalah tantangan yang dapat diatasi dengan peramalan deret waktu. Meskipun mungkin tidak menyenangkan bagi orang-orang untuk dikenakan biaya lebih tinggi pada waktu sibuk saat mereka mencari tempat parkir, itu akan menjadi cara yang pasti untuk menghasilkan pendapatan guna membersihkan jalanan! + +Mari kita eksplorasi beberapa jenis algoritma deret waktu dan mulai membuat notebook untuk membersihkan dan mempersiapkan data. Data yang akan Anda analisis diambil dari kompetisi peramalan GEFCom2014. Data ini terdiri dari 3 tahun nilai beban listrik dan suhu per jam antara tahun 2012 dan 2014. Berdasarkan pola historis beban listrik dan suhu, Anda dapat memprediksi nilai beban listrik di masa depan. + +Dalam contoh ini, Anda akan belajar bagaimana meramalkan satu langkah waktu ke depan, hanya menggunakan data beban historis. Namun sebelum memulai, ada baiknya memahami apa yang terjadi di balik layar. + +## Beberapa definisi + +Saat menemukan istilah 'deret waktu', Anda perlu memahami penggunaannya dalam beberapa konteks berbeda. + +🎓 **Deret waktu** + +Dalam matematika, "deret waktu adalah serangkaian titik data yang diindeks (atau dicantumkan atau digrafikkan) dalam urutan waktu. Paling umum, deret waktu adalah urutan yang diambil pada titik-titik waktu yang berjarak sama secara berturut-turut." Contoh deret waktu adalah nilai penutupan harian [Dow Jones Industrial Average](https://wikipedia.org/wiki/Time_series). Penggunaan plot deret waktu dan pemodelan statistik sering ditemukan dalam pemrosesan sinyal, peramalan cuaca, prediksi gempa bumi, dan bidang lain di mana peristiwa terjadi dan titik data dapat digrafikkan dari waktu ke waktu. + +🎓 **Analisis deret waktu** + +Analisis deret waktu adalah analisis data deret waktu yang disebutkan di atas. Data deret waktu dapat berbentuk berbeda, termasuk 'deret waktu terputus' yang mendeteksi pola dalam evolusi deret waktu sebelum dan setelah peristiwa yang mengganggu. Jenis analisis yang diperlukan untuk deret waktu bergantung pada sifat data. Data deret waktu itu sendiri dapat berupa serangkaian angka atau karakter. + +Analisis yang dilakukan menggunakan berbagai metode, termasuk domain frekuensi dan domain waktu, linear dan non-linear, dan lainnya. [Pelajari lebih lanjut](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) tentang berbagai cara menganalisis jenis data ini. + +🎓 **Peramalan deret waktu** + +Peramalan deret waktu adalah penggunaan model untuk memprediksi nilai masa depan berdasarkan pola yang ditampilkan oleh data yang dikumpulkan sebelumnya saat terjadi di masa lalu. Meskipun dimungkinkan untuk menggunakan model regresi untuk mengeksplorasi data deret waktu, dengan indeks waktu sebagai variabel x pada plot, data semacam itu paling baik dianalisis menggunakan jenis model khusus. + +Data deret waktu adalah daftar pengamatan yang terurut, berbeda dengan data yang dapat dianalisis dengan regresi linear. Model yang paling umum adalah ARIMA, singkatan dari "Autoregressive Integrated Moving Average". + +[Model ARIMA](https://online.stat.psu.edu/stat510/lesson/1/1.1) "menghubungkan nilai saat ini dari suatu deret dengan nilai masa lalu dan kesalahan prediksi masa lalu." Model ini paling cocok untuk menganalisis data domain waktu, di mana data diurutkan berdasarkan waktu. + +> Ada beberapa jenis model ARIMA, yang dapat Anda pelajari [di sini](https://people.duke.edu/~rnau/411arim.htm) dan yang akan Anda bahas dalam pelajaran berikutnya. + +Dalam pelajaran berikutnya, Anda akan membangun model ARIMA menggunakan [Deret Waktu Univariat](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm), yang berfokus pada satu variabel yang nilainya berubah dari waktu ke waktu. Contoh jenis data ini adalah [dataset ini](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm) yang mencatat konsentrasi CO2 bulanan di Observatorium Mauna Loa: + +| CO2 | YearMonth | Year | Month | +| :----: | :-------: | :---: | :---: | +| 330.62 | 1975.04 | 1975 | 1 | +| 331.40 | 1975.13 | 1975 | 2 | +| 331.87 | 1975.21 | 1975 | 3 | +| 333.18 | 1975.29 | 1975 | 4 | +| 333.92 | 1975.38 | 1975 | 5 | +| 333.43 | 1975.46 | 1975 | 6 | +| 331.85 | 1975.54 | 1975 | 7 | +| 330.01 | 1975.63 | 1975 | 8 | +| 328.51 | 1975.71 | 1975 | 9 | +| 328.41 | 1975.79 | 1975 | 10 | +| 329.25 | 1975.88 | 1975 | 11 | +| 330.97 | 1975.96 | 1975 | 12 | + +✅ Identifikasi variabel yang berubah dari waktu ke waktu dalam dataset ini + +## Karakteristik data deret waktu yang perlu dipertimbangkan + +Saat melihat data deret waktu, Anda mungkin memperhatikan bahwa data tersebut memiliki [karakteristik tertentu](https://online.stat.psu.edu/stat510/lesson/1/1.1) yang perlu Anda perhatikan dan kurangi untuk lebih memahami polanya. Jika Anda menganggap data deret waktu sebagai potensi memberikan 'sinyal' yang ingin Anda analisis, karakteristik ini dapat dianggap sebagai 'gangguan'. Anda sering kali perlu mengurangi 'gangguan' ini dengan mengimbangi beberapa karakteristik ini menggunakan teknik statistik tertentu. + +Berikut adalah beberapa konsep yang perlu Anda ketahui untuk dapat bekerja dengan deret waktu: + +🎓 **Tren** + +Tren didefinisikan sebagai peningkatan dan penurunan yang dapat diukur dari waktu ke waktu. [Baca lebih lanjut](https://machinelearningmastery.com/time-series-trends-in-python). Dalam konteks deret waktu, ini tentang bagaimana menggunakan dan, jika perlu, menghilangkan tren dari deret waktu Anda. + +🎓 **[Musiman](https://machinelearningmastery.com/time-series-seasonality-with-python/)** + +Musiman didefinisikan sebagai fluktuasi periodik, seperti lonjakan liburan yang mungkin memengaruhi penjualan, misalnya. [Lihat](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm) bagaimana berbagai jenis plot menampilkan musiman dalam data. + +🎓 **Pencilan** + +Pencilan adalah data yang jauh dari variansi standar. + +🎓 **Siklus jangka panjang** + +Terlepas dari musiman, data mungkin menunjukkan siklus jangka panjang seperti penurunan ekonomi yang berlangsung lebih dari satu tahun. + +🎓 **Variansi konstan** + +Seiring waktu, beberapa data menunjukkan fluktuasi konstan, seperti penggunaan energi per hari dan malam. + +🎓 **Perubahan mendadak** + +Data mungkin menunjukkan perubahan mendadak yang mungkin memerlukan analisis lebih lanjut. Penutupan bisnis secara tiba-tiba akibat COVID, misalnya, menyebabkan perubahan dalam data. + +✅ Berikut adalah [contoh plot deret waktu](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python) yang menunjukkan pengeluaran mata uang dalam game harian selama beberapa tahun. Bisakah Anda mengidentifikasi salah satu karakteristik yang tercantum di atas dalam data ini? + +![Pengeluaran mata uang dalam game](../../../../7-TimeSeries/1-Introduction/images/currency.png) + +## Latihan - memulai dengan data penggunaan daya + +Mari kita mulai membuat model deret waktu untuk memprediksi penggunaan daya di masa depan berdasarkan penggunaan masa lalu. + +> Data dalam contoh ini diambil dari kompetisi peramalan GEFCom2014. Data ini terdiri dari 3 tahun nilai beban listrik dan suhu per jam antara tahun 2012 dan 2014. +> +> Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli dan Rob J. Hyndman, "Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond", International Journal of Forecasting, vol.32, no.3, pp 896-913, Juli-September, 2016. + +1. Di folder `working` pelajaran ini, buka file _notebook.ipynb_. Mulailah dengan menambahkan pustaka yang akan membantu Anda memuat dan memvisualisasikan data + + ```python + import os + import matplotlib.pyplot as plt + from common.utils import load_data + %matplotlib inline + ``` + + Perhatikan, Anda menggunakan file dari folder `common` yang disertakan yang mengatur lingkungan Anda dan menangani pengunduhan data. + +2. Selanjutnya, periksa data sebagai dataframe dengan memanggil `load_data()` dan `head()`: + + ```python + data_dir = './data' + energy = load_data(data_dir)[['load']] + energy.head() + ``` + + Anda dapat melihat bahwa ada dua kolom yang mewakili tanggal dan beban: + + | | load | + | :-----------------: | :----: | + | 2012-01-01 00:00:00 | 2698.0 | + | 2012-01-01 01:00:00 | 2558.0 | + | 2012-01-01 02:00:00 | 2444.0 | + | 2012-01-01 03:00:00 | 2402.0 | + | 2012-01-01 04:00:00 | 2403.0 | + +3. Sekarang, plot data dengan memanggil `plot()`: + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![plot energi](../../../../7-TimeSeries/1-Introduction/images/energy-plot.png) + +4. Sekarang, plot minggu pertama Juli 2014, dengan memberikannya sebagai input ke `energy` dalam pola `[dari tanggal]: [ke tanggal]`: + + ```python + energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![juli](../../../../7-TimeSeries/1-Introduction/images/july-2014.png) + + Plot yang indah! Lihatlah plot ini dan lihat apakah Anda dapat menentukan salah satu karakteristik yang tercantum di atas. Apa yang dapat kita simpulkan dengan memvisualisasikan data? + +Dalam pelajaran berikutnya, Anda akan membuat model ARIMA untuk membuat beberapa prediksi. + +--- + +## 🚀Tantangan + +Buat daftar semua industri dan bidang penyelidikan yang dapat Anda pikirkan yang akan mendapat manfaat dari peramalan deret waktu. Bisakah Anda memikirkan penerapan teknik ini dalam seni? Dalam Ekonometrika? Ekologi? Ritel? Industri? Keuangan? Di mana lagi? + +## [Kuis pasca-pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Tinjauan & Studi Mandiri + +Meskipun kami tidak akan membahasnya di sini, jaringan saraf terkadang digunakan untuk meningkatkan metode klasik peramalan deret waktu. Baca lebih lanjut tentang mereka [dalam artikel ini](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412) + +## Tugas + +[Visualisasikan lebih banyak deret waktu](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/7-TimeSeries/1-Introduction/assignment.md b/translations/id/7-TimeSeries/1-Introduction/assignment.md new file mode 100644 index 00000000..be62ee60 --- /dev/null +++ b/translations/id/7-TimeSeries/1-Introduction/assignment.md @@ -0,0 +1,25 @@ + +# Visualisasikan Beberapa Lagi Deret Waktu + +## Instruksi + +Anda telah mulai belajar tentang Peramalan Deret Waktu dengan melihat jenis data yang membutuhkan pemodelan khusus ini. Anda telah memvisualisasikan beberapa data terkait energi. Sekarang, cari data lain yang akan mendapatkan manfaat dari Peramalan Deret Waktu. Temukan tiga contoh (coba [Kaggle](https://kaggle.com) dan [Azure Open Datasets](https://azure.microsoft.com/en-us/services/open-datasets/catalog/?WT.mc_id=academic-77952-leestott)) dan buat notebook untuk memvisualisasikannya. Catat karakteristik khusus apa pun yang mereka miliki (musiman, perubahan mendadak, atau tren lainnya) di dalam notebook. + +## Rubrik + +| Kriteria | Unggul | Memadai | Perlu Peningkatan | +| -------- | ----------------------------------------------------- | --------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| | Tiga dataset dipetakan dan dijelaskan dalam notebook | Dua dataset dipetakan dan dijelaskan dalam notebook | Sedikit dataset dipetakan atau dijelaskan dalam notebook atau data yang disajikan tidak memadai | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/7-TimeSeries/1-Introduction/solution/Julia/README.md b/translations/id/7-TimeSeries/1-Introduction/solution/Julia/README.md new file mode 100644 index 00000000..01053e81 --- /dev/null +++ b/translations/id/7-TimeSeries/1-Introduction/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/7-TimeSeries/1-Introduction/solution/R/README.md b/translations/id/7-TimeSeries/1-Introduction/solution/R/README.md new file mode 100644 index 00000000..7de64af6 --- /dev/null +++ b/translations/id/7-TimeSeries/1-Introduction/solution/R/README.md @@ -0,0 +1,15 @@ + +ini adalah tempat sementara + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/7-TimeSeries/2-ARIMA/README.md b/translations/id/7-TimeSeries/2-ARIMA/README.md new file mode 100644 index 00000000..aa1a04f8 --- /dev/null +++ b/translations/id/7-TimeSeries/2-ARIMA/README.md @@ -0,0 +1,405 @@ + +# Peramalan Deret Waktu dengan ARIMA + +Pada pelajaran sebelumnya, Anda telah mempelajari sedikit tentang peramalan deret waktu dan memuat dataset yang menunjukkan fluktuasi beban listrik selama periode waktu tertentu. + +[![Pengantar ARIMA](https://img.youtube.com/vi/IUSk-YDau10/0.jpg)](https://youtu.be/IUSk-YDau10 "Pengantar ARIMA") + +> 🎥 Klik gambar di atas untuk video: Pengantar singkat tentang model ARIMA. Contoh dilakukan dalam R, tetapi konsepnya bersifat universal. + +## [Kuis Pra-Pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Pengantar + +Dalam pelajaran ini, Anda akan mempelajari cara spesifik untuk membangun model dengan [ARIMA: *A*uto*R*egressive *I*ntegrated *M*oving *A*verage](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average). Model ARIMA sangat cocok untuk data yang menunjukkan [non-stasioneritas](https://wikipedia.org/wiki/Stationary_process). + +## Konsep Umum + +Untuk dapat bekerja dengan ARIMA, ada beberapa konsep yang perlu Anda ketahui: + +- 🎓 **Stasioneritas**. Dalam konteks statistik, stasioneritas mengacu pada data yang distribusinya tidak berubah ketika digeser dalam waktu. Data non-stasioner, sebaliknya, menunjukkan fluktuasi akibat tren yang harus diubah agar dapat dianalisis. Musim, misalnya, dapat memperkenalkan fluktuasi dalam data dan dapat dihilangkan melalui proses 'seasonal-differencing'. + +- 🎓 **[Differencing](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**. Differencing data, dalam konteks statistik, mengacu pada proses mengubah data non-stasioner menjadi stasioner dengan menghilangkan tren yang tidak konstan. "Differencing menghilangkan perubahan tingkat dalam deret waktu, menghilangkan tren dan musiman, sehingga menstabilkan rata-rata deret waktu." [Makalah oleh Shixiong et al](https://arxiv.org/abs/1904.07632) + +## ARIMA dalam Konteks Deret Waktu + +Mari kita uraikan bagian-bagian ARIMA untuk lebih memahami bagaimana model ini membantu kita memodelkan deret waktu dan membuat prediksi terhadapnya. + +- **AR - untuk AutoRegressive**. Model autoregresif, seperti namanya, melihat 'ke belakang' dalam waktu untuk menganalisis nilai-nilai sebelumnya dalam data Anda dan membuat asumsi tentangnya. Nilai-nilai sebelumnya ini disebut 'lags'. Contohnya adalah data yang menunjukkan penjualan bulanan pensil. Total penjualan setiap bulan akan dianggap sebagai 'variabel yang berkembang' dalam dataset. Model ini dibangun sebagai "variabel yang berkembang diregresikan pada nilai-nilai lagged (yaitu, sebelumnya) miliknya." [wikipedia](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) + +- **I - untuk Integrated**. Berbeda dengan model 'ARMA' yang serupa, 'I' dalam ARIMA mengacu pada aspek *[integrated](https://wikipedia.org/wiki/Order_of_integration)*. Data 'diintegrasikan' ketika langkah-langkah differencing diterapkan untuk menghilangkan non-stasioneritas. + +- **MA - untuk Moving Average**. Aspek [moving-average](https://wikipedia.org/wiki/Moving-average_model) dari model ini mengacu pada variabel output yang ditentukan dengan mengamati nilai lag saat ini dan sebelumnya. + +Intinya: ARIMA digunakan untuk membuat model sesuai dengan bentuk khusus data deret waktu sedekat mungkin. + +## Latihan - Membangun Model ARIMA + +Buka folder [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/working) dalam pelajaran ini dan temukan file [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/2-ARIMA/working/notebook.ipynb). + +1. Jalankan notebook untuk memuat pustaka Python `statsmodels`; Anda akan membutuhkan ini untuk model ARIMA. + +1. Muat pustaka yang diperlukan. + +1. Sekarang, muat beberapa pustaka tambahan yang berguna untuk memplot data: + + ```python + import os + import warnings + import matplotlib.pyplot as plt + import numpy as np + import pandas as pd + import datetime as dt + import math + + from pandas.plotting import autocorrelation_plot + from statsmodels.tsa.statespace.sarimax import SARIMAX + from sklearn.preprocessing import MinMaxScaler + from common.utils import load_data, mape + from IPython.display import Image + + %matplotlib inline + pd.options.display.float_format = '{:,.2f}'.format + np.set_printoptions(precision=2) + warnings.filterwarnings("ignore") # specify to ignore warning messages + ``` + +1. Muat data dari file `/data/energy.csv` ke dalam dataframe Pandas dan lihat: + + ```python + energy = load_data('./data')[['load']] + energy.head(10) + ``` + +1. Plot semua data energi yang tersedia dari Januari 2012 hingga Desember 2014. Tidak ada kejutan karena kita telah melihat data ini di pelajaran sebelumnya: + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + Sekarang, mari kita bangun model! + +### Membuat Dataset Pelatihan dan Pengujian + +Sekarang data Anda telah dimuat, Anda dapat memisahkannya menjadi set pelatihan dan pengujian. Anda akan melatih model Anda pada set pelatihan. Seperti biasa, setelah model selesai dilatih, Anda akan mengevaluasi akurasinya menggunakan set pengujian. Anda perlu memastikan bahwa set pengujian mencakup periode waktu yang lebih baru dari set pelatihan untuk memastikan bahwa model tidak mendapatkan informasi dari periode waktu di masa depan. + +1. Alokasikan periode dua bulan dari 1 September hingga 31 Oktober 2014 untuk set pelatihan. Set pengujian akan mencakup periode dua bulan dari 1 November hingga 31 Desember 2014: + + ```python + train_start_dt = '2014-11-01 00:00:00' + test_start_dt = '2014-12-30 00:00:00' + ``` + + Karena data ini mencerminkan konsumsi energi harian, ada pola musiman yang kuat, tetapi konsumsi paling mirip dengan konsumsi pada hari-hari yang lebih baru. + +1. Visualisasikan perbedaannya: + + ```python + energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ + .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ + .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![data pelatihan dan pengujian](../../../../7-TimeSeries/2-ARIMA/images/train-test.png) + + Oleh karena itu, menggunakan jendela waktu yang relatif kecil untuk melatih data seharusnya cukup. + + > Catatan: Karena fungsi yang kita gunakan untuk menyesuaikan model ARIMA menggunakan validasi in-sample selama fitting, kita akan menghilangkan data validasi. + +### Mempersiapkan Data untuk Pelatihan + +Sekarang, Anda perlu mempersiapkan data untuk pelatihan dengan melakukan penyaringan dan penskalaan data Anda. Saring dataset Anda untuk hanya menyertakan periode waktu dan kolom yang Anda butuhkan, serta penskalaan untuk memastikan data diproyeksikan dalam interval 0,1. + +1. Saring dataset asli untuk hanya menyertakan periode waktu yang disebutkan sebelumnya per set dan hanya menyertakan kolom 'load' yang diperlukan plus tanggal: + + ```python + train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] + test = energy.copy()[energy.index >= test_start_dt][['load']] + + print('Training data shape: ', train.shape) + print('Test data shape: ', test.shape) + ``` + + Anda dapat melihat bentuk data: + + ```output + Training data shape: (1416, 1) + Test data shape: (48, 1) + ``` + +1. Skala data agar berada dalam rentang (0, 1). + + ```python + scaler = MinMaxScaler() + train['load'] = scaler.fit_transform(train) + train.head(10) + ``` + +1. Visualisasikan data asli vs. data yang telah diskalakan: + + ```python + energy[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']].rename(columns={'load':'original load'}).plot.hist(bins=100, fontsize=12) + train.rename(columns={'load':'scaled load'}).plot.hist(bins=100, fontsize=12) + plt.show() + ``` + + ![asli](../../../../7-TimeSeries/2-ARIMA/images/original.png) + + > Data asli + + ![diskalakan](../../../../7-TimeSeries/2-ARIMA/images/scaled.png) + + > Data yang telah diskalakan + +1. Sekarang setelah Anda mengkalibrasi data yang telah diskalakan, Anda dapat menskalakan data pengujian: + + ```python + test['load'] = scaler.transform(test) + test.head() + ``` + +### Menerapkan ARIMA + +Saatnya menerapkan ARIMA! Anda sekarang akan menggunakan pustaka `statsmodels` yang telah Anda instal sebelumnya. + +Sekarang Anda perlu mengikuti beberapa langkah: + + 1. Definisikan model dengan memanggil `SARIMAX()` dan memasukkan parameter model: parameter p, d, dan q, serta parameter P, D, dan Q. + 2. Persiapkan model untuk data pelatihan dengan memanggil fungsi fit(). + 3. Buat prediksi dengan memanggil fungsi `forecast()` dan menentukan jumlah langkah (horizon) untuk diprediksi. + +> 🎓 Apa fungsi semua parameter ini? Dalam model ARIMA, ada 3 parameter yang digunakan untuk membantu memodelkan aspek utama dari deret waktu: musiman, tren, dan noise. Parameter ini adalah: + +`p`: parameter yang terkait dengan aspek autoregresif model, yang menggabungkan nilai *masa lalu*. +`d`: parameter yang terkait dengan bagian terintegrasi dari model, yang memengaruhi jumlah *differencing* (🎓 ingat differencing 👆?) yang diterapkan pada deret waktu. +`q`: parameter yang terkait dengan bagian moving-average dari model. + +> Catatan: Jika data Anda memiliki aspek musiman - seperti data ini -, kita menggunakan model ARIMA musiman (SARIMA). Dalam kasus ini, Anda perlu menggunakan satu set parameter lain: `P`, `D`, dan `Q` yang menggambarkan asosiasi yang sama seperti `p`, `d`, dan `q`, tetapi sesuai dengan komponen musiman dari model. + +1. Mulailah dengan menetapkan nilai horizon yang Anda inginkan. Mari coba 3 jam: + + ```python + # Specify the number of steps to forecast ahead + HORIZON = 3 + print('Forecasting horizon:', HORIZON, 'hours') + ``` + + Memilih nilai terbaik untuk parameter model ARIMA bisa menjadi tantangan karena sifatnya yang subjektif dan memakan waktu. Anda mungkin mempertimbangkan menggunakan fungsi `auto_arima()` dari pustaka [`pyramid`](https://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html). + +1. Untuk saat ini, coba beberapa pilihan manual untuk menemukan model yang baik. + + ```python + order = (4, 1, 0) + seasonal_order = (1, 1, 0, 24) + + model = SARIMAX(endog=train, order=order, seasonal_order=seasonal_order) + results = model.fit() + + print(results.summary()) + ``` + + Sebuah tabel hasil dicetak. + +Anda telah membangun model pertama Anda! Sekarang kita perlu menemukan cara untuk mengevaluasinya. + +### Mengevaluasi Model Anda + +Untuk mengevaluasi model Anda, Anda dapat melakukan validasi `walk forward`. Dalam praktiknya, model deret waktu dilatih ulang setiap kali data baru tersedia. Ini memungkinkan model membuat prediksi terbaik pada setiap langkah waktu. + +Mulai dari awal deret waktu menggunakan teknik ini, latih model pada set data pelatihan. Kemudian buat prediksi pada langkah waktu berikutnya. Prediksi dievaluasi terhadap nilai yang diketahui. Set pelatihan kemudian diperluas untuk menyertakan nilai yang diketahui dan proses diulang. + +> Catatan: Anda harus menjaga jendela set pelatihan tetap tetap untuk pelatihan yang lebih efisien sehingga setiap kali Anda menambahkan pengamatan baru ke set pelatihan, Anda menghapus pengamatan dari awal set. + +Proses ini memberikan estimasi yang lebih kuat tentang bagaimana model akan bekerja dalam praktik. Namun, ini datang dengan biaya komputasi untuk membuat begitu banyak model. Ini dapat diterima jika datanya kecil atau jika modelnya sederhana, tetapi bisa menjadi masalah dalam skala besar. + +Validasi walk-forward adalah standar emas evaluasi model deret waktu dan direkomendasikan untuk proyek Anda sendiri. + +1. Pertama, buat titik data pengujian untuk setiap langkah HORIZON. + + ```python + test_shifted = test.copy() + + for t in range(1, HORIZON+1): + test_shifted['load+'+str(t)] = test_shifted['load'].shift(-t, freq='H') + + test_shifted = test_shifted.dropna(how='any') + test_shifted.head(5) + ``` + + | | | load | load+1 | load+2 | + | ---------- | -------- | ---- | ------ | ------ | + | 2014-12-30 | 00:00:00 | 0.33 | 0.29 | 0.27 | + | 2014-12-30 | 01:00:00 | 0.29 | 0.27 | 0.27 | + | 2014-12-30 | 02:00:00 | 0.27 | 0.27 | 0.30 | + | 2014-12-30 | 03:00:00 | 0.27 | 0.30 | 0.41 | + | 2014-12-30 | 04:00:00 | 0.30 | 0.41 | 0.57 | + + Data digeser secara horizontal sesuai dengan titik horizon-nya. + +1. Buat prediksi pada data pengujian Anda menggunakan pendekatan jendela geser dalam loop sebesar panjang data pengujian: + + ```python + %%time + training_window = 720 # dedicate 30 days (720 hours) for training + + train_ts = train['load'] + test_ts = test_shifted + + history = [x for x in train_ts] + history = history[(-training_window):] + + predictions = list() + + order = (2, 1, 0) + seasonal_order = (1, 1, 0, 24) + + for t in range(test_ts.shape[0]): + model = SARIMAX(endog=history, order=order, seasonal_order=seasonal_order) + model_fit = model.fit() + yhat = model_fit.forecast(steps = HORIZON) + predictions.append(yhat) + obs = list(test_ts.iloc[t]) + # move the training window + history.append(obs[0]) + history.pop(0) + print(test_ts.index[t]) + print(t+1, ': predicted =', yhat, 'expected =', obs) + ``` + + Anda dapat melihat pelatihan yang terjadi: + + ```output + 2014-12-30 00:00:00 + 1 : predicted = [0.32 0.29 0.28] expected = [0.32945389435989236, 0.2900626678603402, 0.2739480752014323] + + 2014-12-30 01:00:00 + 2 : predicted = [0.3 0.29 0.3 ] expected = [0.2900626678603402, 0.2739480752014323, 0.26812891674127126] + + 2014-12-30 02:00:00 + 3 : predicted = [0.27 0.28 0.32] expected = [0.2739480752014323, 0.26812891674127126, 0.3025962399283795] + ``` + +1. Bandingkan prediksi dengan beban aktual: + + ```python + eval_df = pd.DataFrame(predictions, columns=['t+'+str(t) for t in range(1, HORIZON+1)]) + eval_df['timestamp'] = test.index[0:len(test.index)-HORIZON+1] + eval_df = pd.melt(eval_df, id_vars='timestamp', value_name='prediction', var_name='h') + eval_df['actual'] = np.array(np.transpose(test_ts)).ravel() + eval_df[['prediction', 'actual']] = scaler.inverse_transform(eval_df[['prediction', 'actual']]) + eval_df.head() + ``` + + Output + | | | timestamp | h | prediction | actual | + | --- | ---------- | --------- | --- | ---------- | -------- | + | 0 | 2014-12-30 | 00:00:00 | t+1 | 3,008.74 | 3,023.00 | + | 1 | 2014-12-30 | 01:00:00 | t+1 | 2,955.53 | 2,935.00 | + | 2 | 2014-12-30 | 02:00:00 | t+1 | 2,900.17 | 2,899.00 | + | 3 | 2014-12-30 | 03:00:00 | t+1 | 2,917.69 | 2,886.00 | + | 4 | 2014-12-30 | 04:00:00 | t+1 | 2,946.99 | 2,963.00 | + + Perhatikan prediksi data per jam dibandingkan dengan beban aktual. Seberapa akurat ini? + +### Periksa Akurasi Model + +Periksa akurasi model Anda dengan menguji mean absolute percentage error (MAPE) dari semua prediksi. +> **🧮 Tunjukkan perhitungannya** +> +> ![MAPE](../../../../7-TimeSeries/2-ARIMA/images/mape.png) +> +> [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) digunakan untuk menunjukkan akurasi prediksi sebagai rasio yang didefinisikan oleh rumus di atas. Perbedaan antara nilai aktual dan nilai prediksi dibagi dengan nilai aktual. "Nilai absolut dalam perhitungan ini dijumlahkan untuk setiap titik waktu yang diprediksi dan dibagi dengan jumlah titik yang sesuai n." [wikipedia](https://wikipedia.org/wiki/Mean_absolute_percentage_error) +1. Ekspresikan persamaan dalam kode: + + ```python + if(HORIZON > 1): + eval_df['APE'] = (eval_df['prediction'] - eval_df['actual']).abs() / eval_df['actual'] + print(eval_df.groupby('h')['APE'].mean()) + ``` + +1. Hitung MAPE untuk satu langkah: + + ```python + print('One step forecast MAPE: ', (mape(eval_df[eval_df['h'] == 't+1']['prediction'], eval_df[eval_df['h'] == 't+1']['actual']))*100, '%') + ``` + + MAPE prediksi satu langkah: 0.5570581332313952 % + +1. Cetak MAPE prediksi multi-langkah: + + ```python + print('Multi-step forecast MAPE: ', mape(eval_df['prediction'], eval_df['actual'])*100, '%') + ``` + + ```output + Multi-step forecast MAPE: 1.1460048657704118 % + ``` + + Angka yang rendah adalah yang terbaik: pertimbangkan bahwa prediksi dengan MAPE sebesar 10 berarti meleset sebesar 10%. + +1. Namun seperti biasa, lebih mudah melihat pengukuran akurasi semacam ini secara visual, jadi mari kita plot: + + ```python + if(HORIZON == 1): + ## Plotting single step forecast + eval_df.plot(x='timestamp', y=['actual', 'prediction'], style=['r', 'b'], figsize=(15, 8)) + + else: + ## Plotting multi step forecast + plot_df = eval_df[(eval_df.h=='t+1')][['timestamp', 'actual']] + for t in range(1, HORIZON+1): + plot_df['t+'+str(t)] = eval_df[(eval_df.h=='t+'+str(t))]['prediction'].values + + fig = plt.figure(figsize=(15, 8)) + ax = plt.plot(plot_df['timestamp'], plot_df['actual'], color='red', linewidth=4.0) + ax = fig.add_subplot(111) + for t in range(1, HORIZON+1): + x = plot_df['timestamp'][(t-1):] + y = plot_df['t+'+str(t)][0:len(x)] + ax.plot(x, y, color='blue', linewidth=4*math.pow(.9,t), alpha=math.pow(0.8,t)) + + ax.legend(loc='best') + + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![model deret waktu](../../../../7-TimeSeries/2-ARIMA/images/accuracy.png) + +🏆 Plot yang sangat bagus, menunjukkan model dengan akurasi yang baik. Kerja bagus! + +--- + +## 🚀Tantangan + +Telusuri cara-cara untuk menguji akurasi model deret waktu. Kita membahas MAPE dalam pelajaran ini, tetapi apakah ada metode lain yang bisa digunakan? Lakukan penelitian dan beri anotasi. Dokumen yang bermanfaat dapat ditemukan [di sini](https://otexts.com/fpp2/accuracy.html) + +## [Kuis setelah pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Tinjauan & Studi Mandiri + +Pelajaran ini hanya menyentuh dasar-dasar Peramalan Deret Waktu dengan ARIMA. Luangkan waktu untuk memperdalam pengetahuan Anda dengan menjelajahi [repositori ini](https://microsoft.github.io/forecasting/) dan berbagai jenis modelnya untuk mempelajari cara lain membangun model Deret Waktu. + +## Tugas + +[Model ARIMA baru](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan manusia profesional. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/7-TimeSeries/2-ARIMA/assignment.md b/translations/id/7-TimeSeries/2-ARIMA/assignment.md new file mode 100644 index 00000000..16823fba --- /dev/null +++ b/translations/id/7-TimeSeries/2-ARIMA/assignment.md @@ -0,0 +1,25 @@ + +# Model ARIMA Baru + +## Instruksi + +Setelah Anda membangun model ARIMA, buat model baru dengan data segar (coba salah satu [dataset dari Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Berikan anotasi pada pekerjaan Anda di notebook, visualisasikan data dan model Anda, serta uji akurasinya menggunakan MAPE. + +## Rubrik + +| Kriteria | Unggul | Memadai | Perlu Peningkatan | +| -------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | ----------------------------------- | +| | Notebook disajikan dengan model ARIMA baru yang dibangun, diuji, dan dijelaskan dengan visualisasi serta akurasi yang dinyatakan. | Notebook yang disajikan tidak dianotasi atau mengandung bug | Notebook yang disajikan tidak lengkap | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/7-TimeSeries/2-ARIMA/solution/Julia/README.md b/translations/id/7-TimeSeries/2-ARIMA/solution/Julia/README.md new file mode 100644 index 00000000..e129c4b5 --- /dev/null +++ b/translations/id/7-TimeSeries/2-ARIMA/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/7-TimeSeries/2-ARIMA/solution/R/README.md b/translations/id/7-TimeSeries/2-ARIMA/solution/R/README.md new file mode 100644 index 00000000..2f5e0395 --- /dev/null +++ b/translations/id/7-TimeSeries/2-ARIMA/solution/R/README.md @@ -0,0 +1,15 @@ + +ini adalah tempat sementara + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/7-TimeSeries/3-SVR/README.md b/translations/id/7-TimeSeries/3-SVR/README.md new file mode 100644 index 00000000..f734c9da --- /dev/null +++ b/translations/id/7-TimeSeries/3-SVR/README.md @@ -0,0 +1,393 @@ + +# Peramalan Deret Waktu dengan Support Vector Regressor + +Pada pelajaran sebelumnya, Anda telah mempelajari cara menggunakan model ARIMA untuk membuat prediksi deret waktu. Sekarang Anda akan mempelajari model Support Vector Regressor, yaitu model regresi yang digunakan untuk memprediksi data kontinu. + +## [Kuis sebelum pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Pendahuluan + +Dalam pelajaran ini, Anda akan mempelajari cara spesifik untuk membangun model dengan [**SVM**: **S**upport **V**ector **M**achine](https://en.wikipedia.org/wiki/Support-vector_machine) untuk regresi, atau **SVR: Support Vector Regressor**. + +### SVR dalam konteks deret waktu [^1] + +Sebelum memahami pentingnya SVR dalam prediksi deret waktu, berikut adalah beberapa konsep penting yang perlu Anda ketahui: + +- **Regresi:** Teknik pembelajaran terawasi untuk memprediksi nilai kontinu dari kumpulan input yang diberikan. Ide utamanya adalah menyesuaikan kurva (atau garis) di ruang fitur yang memiliki jumlah titik data maksimum. [Klik di sini](https://en.wikipedia.org/wiki/Regression_analysis) untuk informasi lebih lanjut. +- **Support Vector Machine (SVM):** Jenis model pembelajaran mesin terawasi yang digunakan untuk klasifikasi, regresi, dan deteksi outlier. Model ini adalah hyperplane di ruang fitur, yang dalam kasus klasifikasi bertindak sebagai batas, dan dalam kasus regresi bertindak sebagai garis terbaik. Dalam SVM, fungsi Kernel biasanya digunakan untuk mentransformasi dataset ke ruang dengan jumlah dimensi yang lebih tinggi, sehingga dapat dengan mudah dipisahkan. [Klik di sini](https://en.wikipedia.org/wiki/Support-vector_machine) untuk informasi lebih lanjut tentang SVM. +- **Support Vector Regressor (SVR):** Jenis SVM yang digunakan untuk menemukan garis terbaik (yang dalam kasus SVM adalah hyperplane) yang memiliki jumlah titik data maksimum. + +### Mengapa SVR? [^1] + +Pada pelajaran sebelumnya, Anda telah mempelajari tentang ARIMA, yang merupakan metode statistik linear yang sangat sukses untuk meramalkan data deret waktu. Namun, dalam banyak kasus, data deret waktu memiliki *non-linearitas*, yang tidak dapat dipetakan oleh model linear. Dalam kasus seperti itu, kemampuan SVM untuk mempertimbangkan non-linearitas dalam data untuk tugas regresi membuat SVR berhasil dalam peramalan deret waktu. + +## Latihan - membangun model SVR + +Langkah-langkah awal untuk persiapan data sama seperti pelajaran sebelumnya tentang [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA). + +Buka folder [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/3-SVR/working) dalam pelajaran ini dan temukan file [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/3-SVR/working/notebook.ipynb).[^2] + +1. Jalankan notebook dan impor pustaka yang diperlukan: [^2] + + ```python + import sys + sys.path.append('../../') + ``` + + ```python + import os + import warnings + import matplotlib.pyplot as plt + import numpy as np + import pandas as pd + import datetime as dt + import math + + from sklearn.svm import SVR + from sklearn.preprocessing import MinMaxScaler + from common.utils import load_data, mape + ``` + +2. Muat data dari file `/data/energy.csv` ke dalam dataframe Pandas dan lihat: [^2] + + ```python + energy = load_data('../../data')[['load']] + ``` + +3. Plot semua data energi yang tersedia dari Januari 2012 hingga Desember 2014: [^2] + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![data lengkap](../../../../7-TimeSeries/3-SVR/images/full-data.png) + + Sekarang, mari kita membangun model SVR kita. + +### Membuat dataset pelatihan dan pengujian + +Sekarang data Anda telah dimuat, Anda dapat memisahkannya menjadi set pelatihan dan pengujian. Kemudian Anda akan merubah bentuk data untuk membuat dataset berbasis langkah waktu yang akan diperlukan untuk SVR. Anda akan melatih model Anda pada set pelatihan. Setelah model selesai dilatih, Anda akan mengevaluasi akurasinya pada set pelatihan, set pengujian, dan kemudian dataset lengkap untuk melihat kinerja keseluruhan. Anda perlu memastikan bahwa set pengujian mencakup periode waktu yang lebih baru dari set pelatihan untuk memastikan bahwa model tidak mendapatkan informasi dari periode waktu di masa depan [^2] (situasi yang dikenal sebagai *Overfitting*). + +1. Alokasikan periode dua bulan dari 1 September hingga 31 Oktober 2014 untuk set pelatihan. Set pengujian akan mencakup periode dua bulan dari 1 November hingga 31 Desember 2014: [^2] + + ```python + train_start_dt = '2014-11-01 00:00:00' + test_start_dt = '2014-12-30 00:00:00' + ``` + +2. Visualisasikan perbedaannya: [^2] + + ```python + energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ + .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ + .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![data pelatihan dan pengujian](../../../../7-TimeSeries/3-SVR/images/train-test.png) + +### Mempersiapkan data untuk pelatihan + +Sekarang, Anda perlu mempersiapkan data untuk pelatihan dengan melakukan penyaringan dan penskalaan data Anda. Saring dataset Anda untuk hanya menyertakan periode waktu dan kolom yang Anda butuhkan, serta penskalaan untuk memastikan data diproyeksikan dalam interval 0,1. + +1. Saring dataset asli untuk hanya menyertakan periode waktu yang disebutkan sebelumnya per set dan hanya menyertakan kolom 'load' yang diperlukan serta tanggal: [^2] + + ```python + train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] + test = energy.copy()[energy.index >= test_start_dt][['load']] + + print('Training data shape: ', train.shape) + print('Test data shape: ', test.shape) + ``` + + ```output + Training data shape: (1416, 1) + Test data shape: (48, 1) + ``` + +2. Skala data pelatihan agar berada dalam rentang (0, 1): [^2] + + ```python + scaler = MinMaxScaler() + train['load'] = scaler.fit_transform(train) + ``` + +4. Sekarang, skala data pengujian: [^2] + + ```python + test['load'] = scaler.transform(test) + ``` + +### Membuat data dengan langkah waktu [^1] + +Untuk SVR, Anda mentransformasi data input menjadi bentuk `[batch, timesteps]`. Jadi, Anda merubah bentuk `train_data` dan `test_data` yang ada sehingga ada dimensi baru yang merujuk pada langkah waktu. + +```python +# Converting to numpy arrays +train_data = train.values +test_data = test.values +``` + +Untuk contoh ini, kita mengambil `timesteps = 5`. Jadi, input ke model adalah data untuk 4 langkah waktu pertama, dan outputnya adalah data untuk langkah waktu ke-5. + +```python +timesteps=5 +``` + +Mengubah data pelatihan menjadi tensor 2D menggunakan nested list comprehension: + +```python +train_data_timesteps=np.array([[j for j in train_data[i:i+timesteps]] for i in range(0,len(train_data)-timesteps+1)])[:,:,0] +train_data_timesteps.shape +``` + +```output +(1412, 5) +``` + +Mengubah data pengujian menjadi tensor 2D: + +```python +test_data_timesteps=np.array([[j for j in test_data[i:i+timesteps]] for i in range(0,len(test_data)-timesteps+1)])[:,:,0] +test_data_timesteps.shape +``` + +```output +(44, 5) +``` + +Memilih input dan output dari data pelatihan dan pengujian: + +```python +x_train, y_train = train_data_timesteps[:,:timesteps-1],train_data_timesteps[:,[timesteps-1]] +x_test, y_test = test_data_timesteps[:,:timesteps-1],test_data_timesteps[:,[timesteps-1]] + +print(x_train.shape, y_train.shape) +print(x_test.shape, y_test.shape) +``` + +```output +(1412, 4) (1412, 1) +(44, 4) (44, 1) +``` + +### Mengimplementasikan SVR [^1] + +Sekarang, saatnya mengimplementasikan SVR. Untuk membaca lebih lanjut tentang implementasi ini, Anda dapat merujuk ke [dokumentasi ini](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html). Untuk implementasi kita, kita mengikuti langkah-langkah berikut: + + 1. Definisikan model dengan memanggil `SVR()` dan memasukkan hyperparameter model: kernel, gamma, c, dan epsilon + 2. Siapkan model untuk data pelatihan dengan memanggil fungsi `fit()` + 3. Lakukan prediksi dengan memanggil fungsi `predict()` + +Sekarang kita membuat model SVR. Di sini kita menggunakan [kernel RBF](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel), dan menetapkan hyperparameter gamma, C, dan epsilon masing-masing sebagai 0.5, 10, dan 0.05. + +```python +model = SVR(kernel='rbf',gamma=0.5, C=10, epsilon = 0.05) +``` + +#### Melatih model pada data pelatihan [^1] + +```python +model.fit(x_train, y_train[:,0]) +``` + +```output +SVR(C=10, cache_size=200, coef0=0.0, degree=3, epsilon=0.05, gamma=0.5, + kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False) +``` + +#### Melakukan prediksi dengan model [^1] + +```python +y_train_pred = model.predict(x_train).reshape(-1,1) +y_test_pred = model.predict(x_test).reshape(-1,1) + +print(y_train_pred.shape, y_test_pred.shape) +``` + +```output +(1412, 1) (44, 1) +``` + +Anda telah membangun SVR Anda! Sekarang kita perlu mengevaluasinya. + +### Mengevaluasi model Anda [^1] + +Untuk evaluasi, pertama-tama kita akan mengembalikan skala data ke skala asli kita. Kemudian, untuk memeriksa kinerja, kita akan memplot grafik deret waktu asli dan prediksi, serta mencetak hasil MAPE. + +Mengembalikan skala output prediksi dan asli: + +```python +# Scaling the predictions +y_train_pred = scaler.inverse_transform(y_train_pred) +y_test_pred = scaler.inverse_transform(y_test_pred) + +print(len(y_train_pred), len(y_test_pred)) +``` + +```python +# Scaling the original values +y_train = scaler.inverse_transform(y_train) +y_test = scaler.inverse_transform(y_test) + +print(len(y_train), len(y_test)) +``` + +#### Memeriksa kinerja model pada data pelatihan dan pengujian [^1] + +Kita mengekstrak timestamp dari dataset untuk ditampilkan di sumbu x plot kita. Perhatikan bahwa kita menggunakan ```timesteps-1``` nilai pertama sebagai input untuk output pertama, sehingga timestamp untuk output akan dimulai setelah itu. + +```python +train_timestamps = energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)].index[timesteps-1:] +test_timestamps = energy[test_start_dt:].index[timesteps-1:] + +print(len(train_timestamps), len(test_timestamps)) +``` + +```output +1412 44 +``` + +Plot prediksi untuk data pelatihan: + +```python +plt.figure(figsize=(25,6)) +plt.plot(train_timestamps, y_train, color = 'red', linewidth=2.0, alpha = 0.6) +plt.plot(train_timestamps, y_train_pred, color = 'blue', linewidth=0.8) +plt.legend(['Actual','Predicted']) +plt.xlabel('Timestamp') +plt.title("Training data prediction") +plt.show() +``` + +![prediksi data pelatihan](../../../../7-TimeSeries/3-SVR/images/train-data-predict.png) + +Cetak MAPE untuk data pelatihan + +```python +print('MAPE for training data: ', mape(y_train_pred, y_train)*100, '%') +``` + +```output +MAPE for training data: 1.7195710200875551 % +``` + +Plot prediksi untuk data pengujian + +```python +plt.figure(figsize=(10,3)) +plt.plot(test_timestamps, y_test, color = 'red', linewidth=2.0, alpha = 0.6) +plt.plot(test_timestamps, y_test_pred, color = 'blue', linewidth=0.8) +plt.legend(['Actual','Predicted']) +plt.xlabel('Timestamp') +plt.show() +``` + +![prediksi data pengujian](../../../../7-TimeSeries/3-SVR/images/test-data-predict.png) + +Cetak MAPE untuk data pengujian + +```python +print('MAPE for testing data: ', mape(y_test_pred, y_test)*100, '%') +``` + +```output +MAPE for testing data: 1.2623790187854018 % +``` + +🏆 Anda mendapatkan hasil yang sangat baik pada dataset pengujian! + +### Memeriksa kinerja model pada dataset lengkap [^1] + +```python +# Extracting load values as numpy array +data = energy.copy().values + +# Scaling +data = scaler.transform(data) + +# Transforming to 2D tensor as per model input requirement +data_timesteps=np.array([[j for j in data[i:i+timesteps]] for i in range(0,len(data)-timesteps+1)])[:,:,0] +print("Tensor shape: ", data_timesteps.shape) + +# Selecting inputs and outputs from data +X, Y = data_timesteps[:,:timesteps-1],data_timesteps[:,[timesteps-1]] +print("X shape: ", X.shape,"\nY shape: ", Y.shape) +``` + +```output +Tensor shape: (26300, 5) +X shape: (26300, 4) +Y shape: (26300, 1) +``` + +```python +# Make model predictions +Y_pred = model.predict(X).reshape(-1,1) + +# Inverse scale and reshape +Y_pred = scaler.inverse_transform(Y_pred) +Y = scaler.inverse_transform(Y) +``` + +```python +plt.figure(figsize=(30,8)) +plt.plot(Y, color = 'red', linewidth=2.0, alpha = 0.6) +plt.plot(Y_pred, color = 'blue', linewidth=0.8) +plt.legend(['Actual','Predicted']) +plt.xlabel('Timestamp') +plt.show() +``` + +![prediksi data lengkap](../../../../7-TimeSeries/3-SVR/images/full-data-predict.png) + +```python +print('MAPE: ', mape(Y_pred, Y)*100, '%') +``` + +```output +MAPE: 2.0572089029888656 % +``` + +🏆 Plot yang sangat bagus, menunjukkan model dengan akurasi yang baik. Kerja bagus! + +--- + +## 🚀Tantangan + +- Cobalah untuk mengubah hyperparameter (gamma, C, epsilon) saat membuat model dan evaluasi pada data untuk melihat set hyperparameter mana yang memberikan hasil terbaik pada data pengujian. Untuk mengetahui lebih lanjut tentang hyperparameter ini, Anda dapat merujuk ke dokumen [di sini](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel). +- Cobalah menggunakan fungsi kernel yang berbeda untuk model dan analisis kinerjanya pada dataset. Dokumen yang berguna dapat ditemukan [di sini](https://scikit-learn.org/stable/modules/svm.html#kernel-functions). +- Cobalah menggunakan nilai yang berbeda untuk `timesteps` agar model dapat melihat ke belakang untuk membuat prediksi. + +## [Kuis setelah pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Tinjauan & Studi Mandiri + +Pelajaran ini bertujuan untuk memperkenalkan aplikasi SVR untuk Peramalan Deret Waktu. Untuk membaca lebih lanjut tentang SVR, Anda dapat merujuk ke [blog ini](https://www.analyticsvidhya.com/blog/2020/03/support-vector-regression-tutorial-for-machine-learning/). [Dokumentasi tentang scikit-learn](https://scikit-learn.org/stable/modules/svm.html) memberikan penjelasan yang lebih komprehensif tentang SVM secara umum, [SVR](https://scikit-learn.org/stable/modules/svm.html#regression) dan juga detail implementasi lainnya seperti [fungsi kernel](https://scikit-learn.org/stable/modules/svm.html#kernel-functions) yang dapat digunakan, dan parameter-parameter mereka. + +## Tugas + +[Model SVR baru](assignment.md) + +## Kredit + +[^1]: Teks, kode, dan output dalam bagian ini disumbangkan oleh [@AnirbanMukherjeeXD](https://github.com/AnirbanMukherjeeXD) +[^2]: Teks, kode, dan output dalam bagian ini diambil dari [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/7-TimeSeries/3-SVR/assignment.md b/translations/id/7-TimeSeries/3-SVR/assignment.md new file mode 100644 index 00000000..738f0b6d --- /dev/null +++ b/translations/id/7-TimeSeries/3-SVR/assignment.md @@ -0,0 +1,27 @@ + +# Model SVR Baru + +## Instruksi [^1] + +Sekarang setelah Anda membangun model SVR, buat model baru dengan data yang baru (coba salah satu [dataset dari Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Berikan anotasi pada pekerjaan Anda di notebook, visualisasikan data dan model Anda, serta uji akurasinya menggunakan plot yang sesuai dan MAPE. Juga coba ubah berbagai hyperparameter dan gunakan nilai yang berbeda untuk timesteps. + +## Rubrik [^1] + +| Kriteria | Unggul | Memadai | Perlu Perbaikan | +| -------- | ----------------------------------------------------------- | -------------------------------------------------------- | ---------------------------------- | +| | Notebook disajikan dengan model SVR yang dibangun, diuji, dan dijelaskan dengan visualisasi serta akurasi yang dinyatakan. | Notebook yang disajikan tidak dianotasi atau mengandung bug. | Notebook yang disajikan tidak lengkap. | + +[^1]: Teks dalam bagian ini didasarkan pada [tugas dari ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/7-TimeSeries/README.md b/translations/id/7-TimeSeries/README.md new file mode 100644 index 00000000..a974b959 --- /dev/null +++ b/translations/id/7-TimeSeries/README.md @@ -0,0 +1,37 @@ + +# Pengantar Peramalan Deret Waktu + +Apa itu peramalan deret waktu? Ini adalah tentang memprediksi kejadian di masa depan dengan menganalisis tren dari masa lalu. + +## Topik regional: penggunaan listrik di seluruh dunia ✨ + +Dalam dua pelajaran ini, Anda akan diperkenalkan pada peramalan deret waktu, sebuah area pembelajaran mesin yang mungkin kurang dikenal tetapi sangat berharga untuk aplikasi industri dan bisnis, serta bidang lainnya. Meskipun jaringan saraf dapat digunakan untuk meningkatkan kegunaan model-model ini, kita akan mempelajarinya dalam konteks pembelajaran mesin klasik karena model-model ini membantu memprediksi kinerja masa depan berdasarkan data masa lalu. + +Fokus regional kita adalah penggunaan listrik di dunia, sebuah dataset menarik untuk mempelajari cara meramalkan penggunaan daya di masa depan berdasarkan pola beban masa lalu. Anda dapat melihat bagaimana jenis peramalan ini sangat berguna dalam lingkungan bisnis. + +![electric grid](../../../7-TimeSeries/images/electric-grid.jpg) + +Foto oleh [Peddi Sai hrithik](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) dari menara listrik di jalan di Rajasthan di [Unsplash](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) + +## Pelajaran + +1. [Pengantar peramalan deret waktu](1-Introduction/README.md) +2. [Membangun model deret waktu ARIMA](2-ARIMA/README.md) +3. [Membangun Support Vector Regressor untuk peramalan deret waktu](3-SVR/README.md) + +## Kredit + +"Pengantar peramalan deret waktu" ditulis dengan ⚡️ oleh [Francesca Lazzeri](https://twitter.com/frlazzeri) dan [Jen Looper](https://twitter.com/jenlooper). Notebook pertama kali muncul secara online di [repo Azure "Deep Learning For Time Series"](https://github.com/Azure/DeepLearningForTimeSeriesForecasting) yang awalnya ditulis oleh Francesca Lazzeri. Pelajaran SVR ditulis oleh [Anirban Mukherjee](https://github.com/AnirbanMukherjeeXD) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/8-Reinforcement/1-QLearning/README.md b/translations/id/8-Reinforcement/1-QLearning/README.md new file mode 100644 index 00000000..bb588fa4 --- /dev/null +++ b/translations/id/8-Reinforcement/1-QLearning/README.md @@ -0,0 +1,214 @@ + +# Pengantar Pembelajaran Penguatan dan Q-Learning + +![Ringkasan pembelajaran penguatan dalam pembelajaran mesin dalam bentuk sketchnote](../../../../sketchnotes/ml-reinforcement.png) +> Sketchnote oleh [Tomomi Imura](https://www.twitter.com/girlie_mac) + +Pembelajaran penguatan melibatkan tiga konsep penting: agen, beberapa keadaan, dan satu set tindakan untuk setiap keadaan. Dengan melakukan suatu tindakan dalam keadaan tertentu, agen akan mendapatkan hadiah. Bayangkan permainan komputer Super Mario. Anda adalah Mario, berada di level permainan, berdiri di tepi jurang. Di atas Anda ada sebuah koin. Anda sebagai Mario, berada di level permainan, di posisi tertentu ... itulah keadaan Anda. Melangkah satu langkah ke kanan (tindakan) akan membuat Anda jatuh ke jurang, dan itu akan memberikan skor numerik rendah. Namun, menekan tombol lompat akan membuat Anda mendapatkan poin dan tetap hidup. Itu adalah hasil positif dan seharusnya memberikan skor numerik positif. + +Dengan menggunakan pembelajaran penguatan dan simulator (permainan), Anda dapat belajar cara memainkan permainan untuk memaksimalkan hadiah, yaitu tetap hidup dan mendapatkan sebanyak mungkin poin. + +[![Pengantar Pembelajaran Penguatan](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo) + +> 🎥 Klik gambar di atas untuk mendengar Dmitry membahas Pembelajaran Penguatan + +## [Kuis sebelum pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Prasyarat dan Pengaturan + +Dalam pelajaran ini, kita akan bereksperimen dengan beberapa kode dalam Python. Anda harus dapat menjalankan kode Jupyter Notebook dari pelajaran ini, baik di komputer Anda atau di cloud. + +Anda dapat membuka [notebook pelajaran](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) dan mengikuti pelajaran ini untuk membangun. + +> **Catatan:** Jika Anda membuka kode ini dari cloud, Anda juga perlu mengambil file [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), yang digunakan dalam kode notebook. Tambahkan file tersebut ke direktori yang sama dengan notebook. + +## Pengantar + +Dalam pelajaran ini, kita akan menjelajahi dunia **[Peter dan Serigala](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**, terinspirasi oleh dongeng musikal karya komposer Rusia, [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Kita akan menggunakan **Pembelajaran Penguatan** untuk membiarkan Peter menjelajahi lingkungannya, mengumpulkan apel yang lezat, dan menghindari bertemu dengan serigala. + +**Pembelajaran Penguatan** (RL) adalah teknik pembelajaran yang memungkinkan kita mempelajari perilaku optimal dari seorang **agen** dalam suatu **lingkungan** dengan menjalankan banyak eksperimen. Agen dalam lingkungan ini harus memiliki **tujuan**, yang didefinisikan oleh **fungsi hadiah**. + +## Lingkungan + +Untuk kesederhanaan, mari kita anggap dunia Peter sebagai papan persegi berukuran `lebar` x `tinggi`, seperti ini: + +![Lingkungan Peter](../../../../8-Reinforcement/1-QLearning/images/environment.png) + +Setiap sel di papan ini dapat berupa: + +* **tanah**, tempat Peter dan makhluk lain dapat berjalan. +* **air**, tempat Anda jelas tidak bisa berjalan. +* **pohon** atau **rumput**, tempat Anda bisa beristirahat. +* **apel**, yang mewakili sesuatu yang Peter senang temukan untuk makanannya. +* **serigala**, yang berbahaya dan harus dihindari. + +Ada modul Python terpisah, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), yang berisi kode untuk bekerja dengan lingkungan ini. Karena kode ini tidak penting untuk memahami konsep kita, kita akan mengimpor modul tersebut dan menggunakannya untuk membuat papan contoh (kode blok 1): + +```python +from rlboard import * + +width, height = 8,8 +m = Board(width,height) +m.randomize(seed=13) +m.plot() +``` + +Kode ini harus mencetak gambar lingkungan yang mirip dengan yang di atas. + +## Tindakan dan kebijakan + +Dalam contoh kita, tujuan Peter adalah menemukan apel, sambil menghindari serigala dan rintangan lainnya. Untuk melakukan ini, dia pada dasarnya dapat berjalan-jalan sampai menemukan apel. + +Oleh karena itu, pada posisi mana pun, dia dapat memilih salah satu dari tindakan berikut: atas, bawah, kiri, dan kanan. + +Kita akan mendefinisikan tindakan-tindakan tersebut sebagai kamus, dan memetakan mereka ke pasangan perubahan koordinat yang sesuai. Misalnya, bergerak ke kanan (`R`) akan sesuai dengan pasangan `(1,0)`. (kode blok 2): + +```python +actions = { "U" : (0,-1), "D" : (0,1), "L" : (-1,0), "R" : (1,0) } +action_idx = { a : i for i,a in enumerate(actions.keys()) } +``` + +Secara keseluruhan, strategi dan tujuan dari skenario ini adalah sebagai berikut: + +- **Strategi**, dari agen kita (Peter) didefinisikan oleh apa yang disebut **kebijakan**. Kebijakan adalah fungsi yang mengembalikan tindakan pada keadaan tertentu. Dalam kasus kita, keadaan masalah diwakili oleh papan, termasuk posisi pemain saat ini. + +- **Tujuan**, dari pembelajaran penguatan adalah akhirnya mempelajari kebijakan yang baik yang memungkinkan kita menyelesaikan masalah secara efisien. Namun, sebagai dasar, mari kita pertimbangkan kebijakan paling sederhana yang disebut **jalan acak**. + +## Jalan acak + +Mari kita selesaikan masalah kita terlebih dahulu dengan menerapkan strategi jalan acak. Dengan jalan acak, kita akan secara acak memilih tindakan berikutnya dari tindakan yang diizinkan, sampai kita mencapai apel (kode blok 3). + +1. Terapkan jalan acak dengan kode di bawah ini: + + ```python + def random_policy(m): + return random.choice(list(actions)) + + def walk(m,policy,start_position=None): + n = 0 # number of steps + # set initial position + if start_position: + m.human = start_position + else: + m.random_start() + while True: + if m.at() == Board.Cell.apple: + return n # success! + if m.at() in [Board.Cell.wolf, Board.Cell.water]: + return -1 # eaten by wolf or drowned + while True: + a = actions[policy(m)] + new_pos = m.move_pos(m.human,a) + if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water: + m.move(a) # do the actual move + break + n+=1 + + walk(m,random_policy) + ``` + + Panggilan ke `walk` harus mengembalikan panjang jalur yang sesuai, yang dapat bervariasi dari satu percobaan ke percobaan lainnya. + +1. Jalankan eksperimen jalan beberapa kali (misalnya, 100 kali), dan cetak statistik yang dihasilkan (kode blok 4): + + ```python + def print_statistics(policy): + s,w,n = 0,0,0 + for _ in range(100): + z = walk(m,policy) + if z<0: + w+=1 + else: + s += z + n += 1 + print(f"Average path length = {s/n}, eaten by wolf: {w} times") + + print_statistics(random_policy) + ``` + + Perhatikan bahwa rata-rata panjang jalur adalah sekitar 30-40 langkah, yang cukup banyak, mengingat jarak rata-rata ke apel terdekat adalah sekitar 5-6 langkah. + + Anda juga dapat melihat bagaimana gerakan Peter terlihat selama jalan acak: + + ![Jalan Acak Peter](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif) + +## Fungsi hadiah + +Untuk membuat kebijakan kita lebih cerdas, kita perlu memahami langkah mana yang "lebih baik" daripada yang lain. Untuk melakukan ini, kita perlu mendefinisikan tujuan kita. + +Tujuan dapat didefinisikan dalam bentuk **fungsi hadiah**, yang akan mengembalikan nilai skor untuk setiap keadaan. Semakin tinggi angkanya, semakin baik fungsi hadiahnya. (kode blok 5) + +```python +move_reward = -0.1 +goal_reward = 10 +end_reward = -10 + +def reward(m,pos=None): + pos = pos or m.human + if not m.is_valid(pos): + return end_reward + x = m.at(pos) + if x==Board.Cell.water or x == Board.Cell.wolf: + return end_reward + if x==Board.Cell.apple: + return goal_reward + return move_reward +``` + +Hal menarik tentang fungsi hadiah adalah bahwa dalam banyak kasus, *kita hanya diberikan hadiah yang substansial di akhir permainan*. Ini berarti algoritma kita harus mengingat langkah-langkah "baik" yang mengarah pada hadiah positif di akhir, dan meningkatkan kepentingannya. Demikian pula, semua langkah yang mengarah pada hasil buruk harus dihindari. + +## Q-Learning + +Algoritma yang akan kita bahas di sini disebut **Q-Learning**. Dalam algoritma ini, kebijakan didefinisikan oleh fungsi (atau struktur data) yang disebut **Q-Table**. Q-Table mencatat "kebaikan" dari setiap tindakan dalam keadaan tertentu. + +Disebut Q-Table karena sering kali lebih nyaman untuk merepresentasikannya sebagai tabel, atau array multi-dimensi. Karena papan kita memiliki dimensi `lebar` x `tinggi`, kita dapat merepresentasikan Q-Table menggunakan array numpy dengan bentuk `lebar` x `tinggi` x `len(actions)`: (kode blok 6) + +```python +Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions) +``` + +Perhatikan bahwa kita menginisialisasi semua nilai Q-Table dengan nilai yang sama, dalam kasus kita - 0.25. Ini sesuai dengan kebijakan "jalan acak", karena semua langkah dalam setiap keadaan sama baiknya. Kita dapat meneruskan Q-Table ke fungsi `plot` untuk memvisualisasikan tabel di papan: `m.plot(Q)`. + +![Lingkungan Peter](../../../../8-Reinforcement/1-QLearning/images/env_init.png) + +Di tengah setiap sel terdapat "panah" yang menunjukkan arah gerakan yang disukai. Karena semua arah sama, sebuah titik ditampilkan. + +Sekarang kita perlu menjalankan simulasi, menjelajahi lingkungan kita, dan mempelajari distribusi nilai Q-Table yang lebih baik, yang akan memungkinkan kita menemukan jalur ke apel jauh lebih cepat. + +## Inti dari Q-Learning: Persamaan Bellman + +Setelah kita mulai bergerak, setiap tindakan akan memiliki hadiah yang sesuai, yaitu kita secara teoritis dapat memilih tindakan berikutnya berdasarkan hadiah langsung tertinggi. Namun, dalam sebagian besar keadaan, langkah tersebut tidak akan mencapai tujuan kita untuk mencapai apel, sehingga kita tidak dapat langsung memutuskan arah mana yang lebih baik. + +> Ingatlah bahwa bukan hasil langsung yang penting, melainkan hasil akhir, yang akan kita peroleh di akhir simulasi. + +Untuk memperhitungkan hadiah yang tertunda ini, kita perlu menggunakan prinsip **[pemrograman dinamis](https://en.wikipedia.org/wiki/Dynamic_programming)**, yang memungkinkan kita memikirkan masalah kita secara rekursif. + +Misalkan kita sekarang berada di keadaan *s*, dan kita ingin bergerak ke keadaan berikutnya *s'*. Dengan melakukan itu, kita akan menerima hadiah langsung *r(s,a)*, yang didefinisikan oleh fungsi hadiah, ditambah beberapa hadiah di masa depan. Jika kita menganggap bahwa Q-Table kita secara akurat mencerminkan "daya tarik" dari setiap tindakan, maka pada keadaan *s'* kita akan memilih tindakan *a* yang sesuai dengan nilai maksimum *Q(s',a')*. Dengan demikian, hadiah masa depan terbaik yang bisa kita dapatkan pada keadaan *s* akan didefinisikan sebagai `max` + +Pembelajaran dapat dirangkum sebagai berikut: + +- **Rata-rata panjang jalur meningkat**. Pada awalnya, rata-rata panjang jalur meningkat. Hal ini kemungkinan disebabkan oleh fakta bahwa ketika kita tidak tahu apa-apa tentang lingkungan, kita cenderung terjebak di keadaan buruk, seperti air atau serigala. Saat kita belajar lebih banyak dan mulai menggunakan pengetahuan ini, kita dapat menjelajahi lingkungan lebih lama, tetapi kita masih belum tahu dengan baik di mana apel berada. + +- **Panjang jalur menurun seiring dengan pembelajaran**. Setelah kita belajar cukup banyak, menjadi lebih mudah bagi agen untuk mencapai tujuan, dan panjang jalur mulai menurun. Namun, kita masih terbuka untuk eksplorasi, sehingga kita sering menyimpang dari jalur terbaik dan mencoba opsi baru, yang membuat jalur lebih panjang dari yang optimal. + +- **Panjang meningkat secara tiba-tiba**. Apa yang juga kita amati pada grafik ini adalah bahwa pada suatu titik, panjang jalur meningkat secara tiba-tiba. Hal ini menunjukkan sifat stokastik dari proses tersebut, dan bahwa kita dapat pada suatu saat "merusak" koefisien Q-Table dengan menimpanya dengan nilai-nilai baru. Idealnya, hal ini harus diminimalkan dengan menurunkan tingkat pembelajaran (misalnya, menjelang akhir pelatihan, kita hanya menyesuaikan nilai Q-Table dengan nilai kecil). + +Secara keseluruhan, penting untuk diingat bahwa keberhasilan dan kualitas proses pembelajaran sangat bergantung pada parameter seperti tingkat pembelajaran, penurunan tingkat pembelajaran, dan faktor diskon. Parameter-parameter ini sering disebut sebagai **hiperparameter**, untuk membedakannya dari **parameter**, yang kita optimalkan selama pelatihan (misalnya, koefisien Q-Table). Proses menemukan nilai hiperparameter terbaik disebut **optimasi hiperparameter**, dan topik ini layak untuk dibahas secara terpisah. + +## [Kuis setelah kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Tugas +[Dunia yang Lebih Realistis](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diperhatikan bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan manusia profesional. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/8-Reinforcement/1-QLearning/assignment.md b/translations/id/8-Reinforcement/1-QLearning/assignment.md new file mode 100644 index 00000000..cf616602 --- /dev/null +++ b/translations/id/8-Reinforcement/1-QLearning/assignment.md @@ -0,0 +1,41 @@ + +# Dunia yang Lebih Realistis + +Dalam situasi kita, Peter dapat bergerak hampir tanpa merasa lelah atau lapar. Dalam dunia yang lebih realistis, dia harus duduk dan beristirahat dari waktu ke waktu, serta memberi makan dirinya sendiri. Mari kita buat dunia kita lebih realistis dengan menerapkan aturan berikut: + +1. Dengan berpindah dari satu tempat ke tempat lain, Peter kehilangan **energi** dan mendapatkan **kelelahan**. +2. Peter dapat mendapatkan lebih banyak energi dengan memakan apel. +3. Peter dapat menghilangkan kelelahan dengan beristirahat di bawah pohon atau di atas rumput (yaitu berjalan ke lokasi papan dengan pohon atau rumput - lapangan hijau). +4. Peter perlu menemukan dan membunuh serigala. +5. Untuk membunuh serigala, Peter harus memiliki tingkat energi dan kelelahan tertentu, jika tidak, dia akan kalah dalam pertempuran. + +## Instruksi + +Gunakan notebook [notebook.ipynb](../../../../8-Reinforcement/1-QLearning/notebook.ipynb) asli sebagai titik awal untuk solusi Anda. + +Modifikasi fungsi reward di atas sesuai dengan aturan permainan, jalankan algoritma pembelajaran penguatan untuk mempelajari strategi terbaik dalam memenangkan permainan, dan bandingkan hasil dari jalan acak dengan algoritma Anda dalam hal jumlah permainan yang dimenangkan dan kalah. + +> **Note**: Dalam dunia baru Anda, keadaan menjadi lebih kompleks, dan selain posisi manusia juga mencakup tingkat kelelahan dan energi. Anda dapat memilih untuk merepresentasikan keadaan sebagai tuple (Board,energy,fatigue), atau mendefinisikan sebuah kelas untuk keadaan (Anda juga dapat menurunkannya dari `Board`), atau bahkan memodifikasi kelas `Board` asli di [rlboard.py](../../../../8-Reinforcement/1-QLearning/rlboard.py). + +Dalam solusi Anda, harap pertahankan kode yang bertanggung jawab untuk strategi jalan acak, dan bandingkan hasil algoritma Anda dengan jalan acak di akhir. + +> **Note**: Anda mungkin perlu menyesuaikan hiperparameter agar berhasil, terutama jumlah epoch. Karena keberhasilan permainan (melawan serigala) adalah peristiwa yang jarang terjadi, Anda dapat mengharapkan waktu pelatihan yang jauh lebih lama. + +## Rubrik + +| Kriteria | Unggul | Memadai | Perlu Peningkatan | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| | Notebook disajikan dengan definisi aturan dunia baru, algoritma Q-Learning, dan beberapa penjelasan tekstual. Q-Learning mampu secara signifikan meningkatkan hasil dibandingkan dengan jalan acak. | Notebook disajikan, Q-Learning diimplementasikan dan meningkatkan hasil dibandingkan dengan jalan acak, tetapi tidak secara signifikan; atau notebook kurang terdokumentasi dan kode tidak terstruktur dengan baik. | Beberapa upaya untuk mendefinisikan ulang aturan dunia dilakukan, tetapi algoritma Q-Learning tidak berfungsi, atau fungsi reward tidak sepenuhnya didefinisikan. | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diperhatikan bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/8-Reinforcement/1-QLearning/solution/Julia/README.md b/translations/id/8-Reinforcement/1-QLearning/solution/Julia/README.md new file mode 100644 index 00000000..dc40d78e --- /dev/null +++ b/translations/id/8-Reinforcement/1-QLearning/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/8-Reinforcement/1-QLearning/solution/R/README.md b/translations/id/8-Reinforcement/1-QLearning/solution/R/README.md new file mode 100644 index 00000000..591e9998 --- /dev/null +++ b/translations/id/8-Reinforcement/1-QLearning/solution/R/README.md @@ -0,0 +1,15 @@ + +ini adalah tempat sementara + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/8-Reinforcement/2-Gym/README.md b/translations/id/8-Reinforcement/2-Gym/README.md new file mode 100644 index 00000000..c0cad0f2 --- /dev/null +++ b/translations/id/8-Reinforcement/2-Gym/README.md @@ -0,0 +1,333 @@ + +## Prasyarat + +Dalam pelajaran ini, kita akan menggunakan pustaka bernama **OpenAI Gym** untuk mensimulasikan berbagai **lingkungan**. Anda dapat menjalankan kode pelajaran ini secara lokal (misalnya dari Visual Studio Code), di mana simulasi akan terbuka di jendela baru. Saat menjalankan kode secara online, Anda mungkin perlu melakukan beberapa penyesuaian pada kode, seperti yang dijelaskan [di sini](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7). + +## OpenAI Gym + +Dalam pelajaran sebelumnya, aturan permainan dan keadaan diberikan oleh kelas `Board` yang kita definisikan sendiri. Di sini kita akan menggunakan **lingkungan simulasi** khusus, yang akan mensimulasikan fisika di balik tiang yang seimbang. Salah satu lingkungan simulasi paling populer untuk melatih algoritma pembelajaran penguatan disebut [Gym](https://gym.openai.com/), yang dikelola oleh [OpenAI](https://openai.com/). Dengan menggunakan gym ini, kita dapat membuat berbagai **lingkungan** mulai dari simulasi cartpole hingga permainan Atari. + +> **Catatan**: Anda dapat melihat lingkungan lain yang tersedia dari OpenAI Gym [di sini](https://gym.openai.com/envs/#classic_control). + +Pertama, mari kita instal gym dan impor pustaka yang diperlukan (kode blok 1): + +```python +import sys +!{sys.executable} -m pip install gym + +import gym +import matplotlib.pyplot as plt +import numpy as np +import random +``` + +## Latihan - inisialisasi lingkungan cartpole + +Untuk bekerja dengan masalah keseimbangan cartpole, kita perlu menginisialisasi lingkungan yang sesuai. Setiap lingkungan terkait dengan: + +- **Observation space** yang mendefinisikan struktur informasi yang kita terima dari lingkungan. Untuk masalah cartpole, kita menerima posisi tiang, kecepatan, dan beberapa nilai lainnya. + +- **Action space** yang mendefinisikan tindakan yang mungkin dilakukan. Dalam kasus kita, action space bersifat diskrit, dan terdiri dari dua tindakan - **kiri** dan **kanan**. (kode blok 2) + +1. Untuk menginisialisasi, ketik kode berikut: + + ```python + env = gym.make("CartPole-v1") + print(env.action_space) + print(env.observation_space) + print(env.action_space.sample()) + ``` + +Untuk melihat bagaimana lingkungan bekerja, mari kita jalankan simulasi singkat selama 100 langkah. Pada setiap langkah, kita memberikan salah satu tindakan yang akan dilakukan - dalam simulasi ini kita hanya memilih tindakan secara acak dari `action_space`. + +1. Jalankan kode di bawah ini dan lihat hasilnya. + + ✅ Ingatlah bahwa lebih disarankan untuk menjalankan kode ini pada instalasi Python lokal! (kode blok 3) + + ```python + env.reset() + + for i in range(100): + env.render() + env.step(env.action_space.sample()) + env.close() + ``` + + Anda seharusnya melihat sesuatu yang mirip dengan gambar ini: + + ![cartpole tanpa keseimbangan](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif) + +1. Selama simulasi, kita perlu mendapatkan observasi untuk memutuskan tindakan apa yang harus dilakukan. Faktanya, fungsi langkah mengembalikan observasi saat ini, fungsi reward, dan flag selesai yang menunjukkan apakah simulasi masih perlu dilanjutkan atau tidak: (kode blok 4) + + ```python + env.reset() + + done = False + while not done: + env.render() + obs, rew, done, info = env.step(env.action_space.sample()) + print(f"{obs} -> {rew}") + env.close() + ``` + + Anda akan melihat sesuatu seperti ini di output notebook: + + ```text + [ 0.03403272 -0.24301182 0.02669811 0.2895829 ] -> 1.0 + [ 0.02917248 -0.04828055 0.03248977 0.00543839] -> 1.0 + [ 0.02820687 0.14636075 0.03259854 -0.27681916] -> 1.0 + [ 0.03113408 0.34100283 0.02706215 -0.55904489] -> 1.0 + [ 0.03795414 0.53573468 0.01588125 -0.84308041] -> 1.0 + ... + [ 0.17299878 0.15868546 -0.20754175 -0.55975453] -> 1.0 + [ 0.17617249 0.35602306 -0.21873684 -0.90998894] -> 1.0 + ``` + + Vektor observasi yang dikembalikan pada setiap langkah simulasi berisi nilai-nilai berikut: + - Posisi kereta + - Kecepatan kereta + - Sudut tiang + - Laju rotasi tiang + +1. Dapatkan nilai minimum dan maksimum dari angka-angka tersebut: (kode blok 5) + + ```python + print(env.observation_space.low) + print(env.observation_space.high) + ``` + + Anda mungkin juga memperhatikan bahwa nilai reward pada setiap langkah simulasi selalu 1. Hal ini karena tujuan kita adalah bertahan selama mungkin, yaitu menjaga tiang tetap dalam posisi vertikal selama mungkin. + + ✅ Faktanya, simulasi CartPole dianggap berhasil jika kita berhasil mendapatkan rata-rata reward sebesar 195 selama 100 percobaan berturut-turut. + +## Diskretisasi State + +Dalam Q-Learning, kita perlu membangun Q-Table yang mendefinisikan tindakan apa yang harus dilakukan pada setiap state. Untuk dapat melakukan ini, kita memerlukan state yang **diskrit**, lebih tepatnya, state tersebut harus berisi sejumlah nilai diskrit yang terbatas. Oleh karena itu, kita perlu **mendiskretkan** observasi kita, memetakannya ke dalam kumpulan state yang terbatas. + +Ada beberapa cara untuk melakukan ini: + +- **Membagi menjadi beberapa bin**. Jika kita mengetahui interval dari suatu nilai tertentu, kita dapat membagi interval ini menjadi sejumlah **bin**, dan kemudian mengganti nilai dengan nomor bin tempat nilai tersebut berada. Hal ini dapat dilakukan menggunakan metode numpy [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html). Dalam kasus ini, kita akan mengetahui ukuran state secara tepat, karena ukuran tersebut akan bergantung pada jumlah bin yang kita pilih untuk digitalisasi. + +✅ Kita dapat menggunakan interpolasi linier untuk membawa nilai ke beberapa interval terbatas (misalnya, dari -20 hingga 20), dan kemudian mengonversi angka menjadi bilangan bulat dengan membulatkannya. Ini memberikan kita sedikit kontrol pada ukuran state, terutama jika kita tidak mengetahui rentang nilai input secara pasti. Misalnya, dalam kasus kita, 2 dari 4 nilai tidak memiliki batas atas/bawah pada nilainya, yang dapat menghasilkan jumlah state yang tak terbatas. + +Dalam contoh kita, kita akan menggunakan pendekatan kedua. Seperti yang mungkin Anda perhatikan nanti, meskipun batas atas/bawah tidak terdefinisi, nilai-nilai tersebut jarang mengambil nilai di luar interval tertentu, sehingga state dengan nilai ekstrem akan sangat jarang. + +1. Berikut adalah fungsi yang akan mengambil observasi dari model kita dan menghasilkan tuple dari 4 nilai bilangan bulat: (kode blok 6) + + ```python + def discretize(x): + return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int)) + ``` + +1. Mari kita juga eksplorasi metode diskretisasi lain menggunakan bin: (kode blok 7) + + ```python + def create_bins(i,num): + return np.arange(num+1)*(i[1]-i[0])/num+i[0] + + print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10)) + + ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter + nbins = [20,20,10,10] # number of bins for each parameter + bins = [create_bins(ints[i],nbins[i]) for i in range(4)] + + def discretize_bins(x): + return tuple(np.digitize(x[i],bins[i]) for i in range(4)) + ``` + +1. Sekarang mari kita jalankan simulasi singkat dan amati nilai-nilai lingkungan diskrit tersebut. Silakan coba `discretize` dan `discretize_bins` dan lihat apakah ada perbedaan. + + ✅ discretize_bins mengembalikan nomor bin, yang berbasis 0. Jadi untuk nilai variabel input di sekitar 0, ia mengembalikan nomor dari tengah interval (10). Dalam discretize, kita tidak peduli dengan rentang nilai output, memungkinkan mereka menjadi negatif, sehingga nilai state tidak bergeser, dan 0 sesuai dengan 0. (kode blok 8) + + ```python + env.reset() + + done = False + while not done: + #env.render() + obs, rew, done, info = env.step(env.action_space.sample()) + #print(discretize_bins(obs)) + print(discretize(obs)) + env.close() + ``` + + ✅ Hapus komentar pada baris yang dimulai dengan env.render jika Anda ingin melihat bagaimana lingkungan dieksekusi. Jika tidak, Anda dapat menjalankannya di latar belakang, yang lebih cepat. Kami akan menggunakan eksekusi "tak terlihat" ini selama proses Q-Learning kami. + +## Struktur Q-Table + +Dalam pelajaran sebelumnya, state adalah pasangan angka sederhana dari 0 hingga 8, sehingga nyaman untuk merepresentasikan Q-Table dengan tensor numpy dengan bentuk 8x8x2. Jika kita menggunakan diskretisasi bin, ukuran vektor state kita juga diketahui, sehingga kita dapat menggunakan pendekatan yang sama dan merepresentasikan state dengan array berbentuk 20x20x10x10x2 (di sini 2 adalah dimensi action space, dan dimensi pertama sesuai dengan jumlah bin yang kita pilih untuk setiap parameter dalam observation space). + +Namun, terkadang dimensi observation space tidak diketahui secara pasti. Dalam kasus fungsi `discretize`, kita mungkin tidak pernah yakin bahwa state kita tetap berada dalam batas tertentu, karena beberapa nilai asli tidak memiliki batas. Oleh karena itu, kita akan menggunakan pendekatan yang sedikit berbeda dan merepresentasikan Q-Table dengan sebuah dictionary. + +1. Gunakan pasangan *(state,action)* sebagai kunci dictionary, dan nilainya akan sesuai dengan nilai entri Q-Table. (kode blok 9) + + ```python + Q = {} + actions = (0,1) + + def qvalues(state): + return [Q.get((state,a),0) for a in actions] + ``` + + Di sini kita juga mendefinisikan fungsi `qvalues()`, yang mengembalikan daftar nilai Q-Table untuk state tertentu yang sesuai dengan semua tindakan yang mungkin. Jika entri tidak ada dalam Q-Table, kita akan mengembalikan 0 sebagai default. + +## Mari Mulai Q-Learning + +Sekarang kita siap mengajari Peter untuk menjaga keseimbangan! + +1. Pertama, mari kita tetapkan beberapa hyperparameter: (kode blok 10) + + ```python + # hyperparameters + alpha = 0.3 + gamma = 0.9 + epsilon = 0.90 + ``` + + Di sini, `alpha` adalah **learning rate** yang menentukan sejauh mana kita harus menyesuaikan nilai Q-Table saat ini pada setiap langkah. Dalam pelajaran sebelumnya, kita memulai dengan 1, dan kemudian menurunkan `alpha` ke nilai yang lebih rendah selama pelatihan. Dalam contoh ini, kita akan mempertahankannya tetap konstan demi kesederhanaan, dan Anda dapat bereksperimen dengan menyesuaikan nilai `alpha` nanti. + + `gamma` adalah **discount factor** yang menunjukkan sejauh mana kita harus memprioritaskan reward di masa depan dibandingkan reward saat ini. + + `epsilon` adalah **exploration/exploitation factor** yang menentukan apakah kita harus lebih memilih eksplorasi daripada eksploitasi atau sebaliknya. Dalam algoritma kita, kita akan memilih tindakan berikutnya sesuai dengan nilai Q-Table dalam persentase `epsilon` dari kasus, dan dalam jumlah kasus yang tersisa kita akan melakukan tindakan acak. Ini memungkinkan kita untuk menjelajahi area ruang pencarian yang belum pernah kita lihat sebelumnya. + + ✅ Dalam hal keseimbangan - memilih tindakan acak (eksplorasi) akan bertindak sebagai dorongan acak ke arah yang salah, dan tiang harus belajar bagaimana memulihkan keseimbangan dari "kesalahan" tersebut. + +### Tingkatkan Algoritma + +Kita juga dapat membuat dua peningkatan pada algoritma kita dari pelajaran sebelumnya: + +- **Hitung rata-rata reward kumulatif**, selama sejumlah simulasi. Kita akan mencetak kemajuan setiap 5000 iterasi, dan kita akan merata-ratakan reward kumulatif kita selama periode waktu tersebut. Artinya, jika kita mendapatkan lebih dari 195 poin - kita dapat menganggap masalah telah terpecahkan, bahkan dengan kualitas yang lebih tinggi dari yang diperlukan. + +- **Hitung hasil kumulatif rata-rata maksimum**, `Qmax`, dan kita akan menyimpan Q-Table yang sesuai dengan hasil tersebut. Saat Anda menjalankan pelatihan, Anda akan melihat bahwa terkadang hasil kumulatif rata-rata mulai menurun, dan kita ingin menyimpan nilai Q-Table yang sesuai dengan model terbaik yang diamati selama pelatihan. + +1. Kumpulkan semua reward kumulatif pada setiap simulasi di vektor `rewards` untuk plotting lebih lanjut. (kode blok 11) + + ```python + def probs(v,eps=1e-4): + v = v-v.min()+eps + v = v/v.sum() + return v + + Qmax = 0 + cum_rewards = [] + rewards = [] + for epoch in range(100000): + obs = env.reset() + done = False + cum_reward=0 + # == do the simulation == + while not done: + s = discretize(obs) + if random.random() Qmax: + Qmax = np.average(cum_rewards) + Qbest = Q + cum_rewards=[] + ``` + +Apa yang mungkin Anda perhatikan dari hasil tersebut: + +- **Dekat dengan tujuan kita**. Kita sangat dekat dengan mencapai tujuan mendapatkan reward kumulatif sebesar 195 selama 100+ percobaan simulasi berturut-turut, atau kita mungkin telah benar-benar mencapainya! Bahkan jika kita mendapatkan angka yang lebih kecil, kita masih tidak tahu, karena kita merata-ratakan selama 5000 kali, dan hanya 100 kali yang diperlukan dalam kriteria formal. + +- **Reward mulai menurun**. Terkadang reward mulai menurun, yang berarti kita dapat "merusak" nilai yang sudah dipelajari dalam Q-Table dengan nilai yang membuat situasi menjadi lebih buruk. + +Pengamatan ini lebih jelas terlihat jika kita memplot kemajuan pelatihan. + +## Memplot Kemajuan Pelatihan + +Selama pelatihan, kita telah mengumpulkan nilai reward kumulatif pada setiap iterasi ke dalam vektor `rewards`. Berikut adalah tampilannya saat kita plot terhadap nomor iterasi: + +```python +plt.plot(rewards) +``` + +![kemajuan mentah](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.png) + +Dari grafik ini, tidak mungkin untuk menyimpulkan apa pun, karena sifat proses pelatihan stokastik membuat panjang sesi pelatihan sangat bervariasi. Untuk membuat grafik ini lebih masuk akal, kita dapat menghitung **rata-rata berjalan** selama serangkaian eksperimen, misalnya 100. Hal ini dapat dilakukan dengan mudah menggunakan `np.convolve`: (kode blok 12) + +```python +def running_average(x,window): + return np.convolve(x,np.ones(window)/window,mode='valid') + +plt.plot(running_average(rewards,100)) +``` + +![kemajuan pelatihan](../../../../8-Reinforcement/2-Gym/images/train_progress_runav.png) + +## Memvariasikan Hyperparameter + +Untuk membuat pembelajaran lebih stabil, masuk akal untuk menyesuaikan beberapa hyperparameter kita selama pelatihan. Secara khusus: + +- **Untuk learning rate**, `alpha`, kita dapat memulai dengan nilai yang mendekati 1, dan kemudian terus menurunkan parameter tersebut. Seiring waktu, kita akan mendapatkan nilai probabilitas yang baik dalam Q-Table, sehingga kita harus menyesuaikannya sedikit, dan tidak menimpa sepenuhnya dengan nilai baru. + +- **Tingkatkan epsilon**. Kita mungkin ingin meningkatkan `epsilon` secara perlahan, agar lebih sedikit eksplorasi dan lebih banyak eksploitasi. Mungkin masuk akal untuk memulai dengan nilai `epsilon` yang lebih rendah, dan meningkatkannya hingga hampir 1. +> **Tugas 1**: Coba ubah nilai hyperparameter dan lihat apakah Anda bisa mencapai total reward yang lebih tinggi. Apakah Anda mendapatkan di atas 195? +> **Tugas 2**: Untuk secara formal menyelesaikan masalah ini, Anda perlu mencapai rata-rata reward sebesar 195 dalam 100 kali percobaan berturut-turut. Ukur itu selama pelatihan dan pastikan bahwa Anda telah secara formal menyelesaikan masalah ini! + +## Melihat hasilnya secara langsung + +Akan menarik untuk melihat bagaimana model yang telah dilatih berperilaku. Mari kita jalankan simulasi dan gunakan strategi pemilihan aksi yang sama seperti saat pelatihan, yaitu sampling berdasarkan distribusi probabilitas di Q-Table: (blok kode 13) + +```python +obs = env.reset() +done = False +while not done: + s = discretize(obs) + env.render() + v = probs(np.array(qvalues(s))) + a = random.choices(actions,weights=v)[0] + obs,_,done,_ = env.step(a) +env.close() +``` + +Anda seharusnya melihat sesuatu seperti ini: + +![a balancing cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif) + +--- + +## 🚀Tantangan + +> **Tugas 3**: Di sini, kita menggunakan salinan akhir dari Q-Table, yang mungkin bukan yang terbaik. Ingat bahwa kita telah menyimpan Q-Table dengan performa terbaik ke dalam variabel `Qbest`! Coba contoh yang sama dengan Q-Table terbaik dengan menyalin `Qbest` ke `Q` dan lihat apakah Anda melihat perbedaannya. + +> **Tugas 4**: Di sini kita tidak memilih aksi terbaik di setiap langkah, melainkan sampling berdasarkan distribusi probabilitas yang sesuai. Apakah lebih masuk akal untuk selalu memilih aksi terbaik, dengan nilai Q-Table tertinggi? Ini dapat dilakukan dengan menggunakan fungsi `np.argmax` untuk menemukan nomor aksi yang sesuai dengan nilai Q-Table tertinggi. Implementasikan strategi ini dan lihat apakah itu meningkatkan keseimbangan. + +## [Kuis setelah kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Tugas +[Latih Mountain Car](assignment.md) + +## Kesimpulan + +Kita sekarang telah belajar bagaimana melatih agen untuk mencapai hasil yang baik hanya dengan memberikan mereka fungsi reward yang mendefinisikan keadaan yang diinginkan dalam permainan, dan dengan memberikan mereka kesempatan untuk secara cerdas menjelajahi ruang pencarian. Kita telah berhasil menerapkan algoritma Q-Learning dalam kasus lingkungan diskret dan kontinu, tetapi dengan aksi diskret. + +Penting juga untuk mempelajari situasi di mana keadaan aksi juga kontinu, dan ketika ruang observasi jauh lebih kompleks, seperti gambar dari layar permainan Atari. Dalam masalah-masalah tersebut, kita sering kali perlu menggunakan teknik pembelajaran mesin yang lebih kuat, seperti jaringan saraf, untuk mencapai hasil yang baik. Topik-topik yang lebih maju ini akan menjadi subjek dari kursus AI lanjutan kami yang akan datang. + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/8-Reinforcement/2-Gym/assignment.md b/translations/id/8-Reinforcement/2-Gym/assignment.md new file mode 100644 index 00000000..eff91a7b --- /dev/null +++ b/translations/id/8-Reinforcement/2-Gym/assignment.md @@ -0,0 +1,55 @@ + +# Melatih Mountain Car + +[OpenAI Gym](http://gym.openai.com) dirancang sedemikian rupa sehingga semua lingkungan menyediakan API yang sama - yaitu metode yang sama `reset`, `step`, dan `render`, serta abstraksi yang sama untuk **action space** dan **observation space**. Oleh karena itu, seharusnya memungkinkan untuk mengadaptasi algoritma pembelajaran penguatan yang sama ke berbagai lingkungan dengan perubahan kode yang minimal. + +## Lingkungan Mountain Car + +[Lingkungan Mountain Car](https://gym.openai.com/envs/MountainCar-v0/) berisi sebuah mobil yang terjebak di lembah: + +Tujuannya adalah keluar dari lembah dan menangkap bendera, dengan melakukan salah satu tindakan berikut di setiap langkah: + +| Nilai | Makna | +|---|---| +| 0 | Mempercepat ke kiri | +| 1 | Tidak mempercepat | +| 2 | Mempercepat ke kanan | + +Namun, trik utama dari masalah ini adalah bahwa mesin mobil tidak cukup kuat untuk mendaki gunung dalam satu kali perjalanan. Oleh karena itu, satu-satunya cara untuk berhasil adalah dengan bergerak maju mundur untuk membangun momentum. + +Observation space hanya terdiri dari dua nilai: + +| Num | Observasi | Min | Max | +|-----|----------------|-------|-------| +| 0 | Posisi Mobil | -1.2 | 0.6 | +| 1 | Kecepatan Mobil| -0.07 | 0.07 | + +Sistem reward untuk Mountain Car cukup rumit: + + * Reward sebesar 0 diberikan jika agen berhasil mencapai bendera (posisi = 0.5) di puncak gunung. + * Reward sebesar -1 diberikan jika posisi agen kurang dari 0.5. + +Episode berakhir jika posisi mobil lebih dari 0.5, atau panjang episode lebih dari 200. +## Instruksi + +Adaptasikan algoritma pembelajaran penguatan kami untuk menyelesaikan masalah Mountain Car. Mulailah dengan kode yang ada di [notebook.ipynb](../../../../8-Reinforcement/2-Gym/notebook.ipynb), ganti lingkungan baru, ubah fungsi diskretisasi state, dan coba buat algoritma yang ada untuk melatih dengan perubahan kode yang minimal. Optimalkan hasil dengan menyesuaikan hyperparameter. + +> **Note**: Penyesuaian hyperparameter kemungkinan diperlukan agar algoritma dapat konvergen. +## Rubrik + +| Kriteria | Unggul | Memadai | Perlu Peningkatan | +| -------- | -------| --------| ----------------- | +| | Algoritma Q-Learning berhasil diadaptasi dari contoh CartPole, dengan perubahan kode minimal, yang mampu menyelesaikan masalah menangkap bendera dalam kurang dari 200 langkah. | Algoritma Q-Learning baru telah diadopsi dari Internet, tetapi terdokumentasi dengan baik; atau algoritma yang ada diadopsi, tetapi tidak mencapai hasil yang diinginkan. | Mahasiswa tidak berhasil mengadopsi algoritma apa pun, tetapi telah membuat langkah substansial menuju solusi (mengimplementasikan diskretisasi state, struktur data Q-Table, dll.) | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/8-Reinforcement/2-Gym/solution/Julia/README.md b/translations/id/8-Reinforcement/2-Gym/solution/Julia/README.md new file mode 100644 index 00000000..0324d975 --- /dev/null +++ b/translations/id/8-Reinforcement/2-Gym/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/8-Reinforcement/2-Gym/solution/R/README.md b/translations/id/8-Reinforcement/2-Gym/solution/R/README.md new file mode 100644 index 00000000..2a256c25 --- /dev/null +++ b/translations/id/8-Reinforcement/2-Gym/solution/R/README.md @@ -0,0 +1,15 @@ + +ini adalah tempat sementara + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/8-Reinforcement/README.md b/translations/id/8-Reinforcement/README.md new file mode 100644 index 00000000..3a6bfa38 --- /dev/null +++ b/translations/id/8-Reinforcement/README.md @@ -0,0 +1,67 @@ + +# Pengantar Pembelajaran Penguatan + +Pembelajaran penguatan, atau RL, dianggap sebagai salah satu paradigma dasar pembelajaran mesin, selain pembelajaran terawasi dan pembelajaran tak terawasi. RL berfokus pada pengambilan keputusan: membuat keputusan yang tepat atau setidaknya belajar dari keputusan tersebut. + +Bayangkan Anda memiliki lingkungan simulasi seperti pasar saham. Apa yang terjadi jika Anda menerapkan suatu regulasi tertentu? Apakah dampaknya positif atau negatif? Jika terjadi sesuatu yang negatif, Anda perlu mengambil _penguatan negatif_, belajar darinya, dan mengubah arah. Jika hasilnya positif, Anda perlu membangun dari _penguatan positif_ tersebut. + +![peter dan serigala](../../../8-Reinforcement/images/peter.png) + +> Peter dan teman-temannya harus melarikan diri dari serigala yang lapar! Gambar oleh [Jen Looper](https://twitter.com/jenlooper) + +## Topik Regional: Peter dan Serigala (Rusia) + +[Peter dan Serigala](https://en.wikipedia.org/wiki/Peter_and_the_Wolf) adalah dongeng musikal yang ditulis oleh komposer Rusia [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Ini adalah kisah tentang pionir muda Peter, yang dengan berani keluar dari rumahnya menuju hutan untuk mengejar serigala. Dalam bagian ini, kita akan melatih algoritma pembelajaran mesin yang akan membantu Peter: + +- **Menjelajahi** area sekitar dan membangun peta navigasi yang optimal +- **Belajar** menggunakan skateboard dan menjaga keseimbangan di atasnya, agar dapat bergerak lebih cepat. + +[![Peter dan Serigala](https://img.youtube.com/vi/Fmi5zHg4QSM/0.jpg)](https://www.youtube.com/watch?v=Fmi5zHg4QSM) + +> 🎥 Klik gambar di atas untuk mendengarkan Peter dan Serigala oleh Prokofiev + +## Pembelajaran Penguatan + +Pada bagian sebelumnya, Anda telah melihat dua contoh masalah pembelajaran mesin: + +- **Terawasi**, di mana kita memiliki dataset yang menyarankan solusi contoh untuk masalah yang ingin kita selesaikan. [Klasifikasi](../4-Classification/README.md) dan [regresi](../2-Regression/README.md) adalah tugas pembelajaran terawasi. +- **Tak terawasi**, di mana kita tidak memiliki data pelatihan yang diberi label. Contoh utama pembelajaran tak terawasi adalah [Pengelompokan](../5-Clustering/README.md). + +Dalam bagian ini, kita akan memperkenalkan jenis masalah pembelajaran baru yang tidak memerlukan data pelatihan yang diberi label. Ada beberapa jenis masalah seperti ini: + +- **[Pembelajaran semi-terawasi](https://wikipedia.org/wiki/Semi-supervised_learning)**, di mana kita memiliki banyak data yang tidak diberi label yang dapat digunakan untuk pra-pelatihan model. +- **[Pembelajaran penguatan](https://wikipedia.org/wiki/Reinforcement_learning)**, di mana agen belajar bagaimana berperilaku dengan melakukan eksperimen dalam lingkungan simulasi tertentu. + +### Contoh - permainan komputer + +Misalkan Anda ingin mengajarkan komputer untuk bermain game, seperti catur, atau [Super Mario](https://wikipedia.org/wiki/Super_Mario). Agar komputer dapat bermain game, kita perlu memprediksi langkah apa yang harus diambil dalam setiap keadaan permainan. Meskipun ini mungkin tampak seperti masalah klasifikasi, sebenarnya tidak - karena kita tidak memiliki dataset dengan keadaan dan tindakan yang sesuai. Meskipun kita mungkin memiliki beberapa data seperti pertandingan catur yang ada atau rekaman pemain yang bermain Super Mario, kemungkinan besar data tersebut tidak cukup mencakup sejumlah besar keadaan yang mungkin terjadi. + +Alih-alih mencari data game yang ada, **Pembelajaran Penguatan** (RL) didasarkan pada ide *membuat komputer bermain* berkali-kali dan mengamati hasilnya. Jadi, untuk menerapkan Pembelajaran Penguatan, kita membutuhkan dua hal: + +- **Sebuah lingkungan** dan **simulator** yang memungkinkan kita bermain game berkali-kali. Simulator ini akan mendefinisikan semua aturan permainan serta keadaan dan tindakan yang mungkin. + +- **Fungsi penghargaan**, yang akan memberi tahu kita seberapa baik kita melakukannya selama setiap langkah atau permainan. + +Perbedaan utama antara jenis pembelajaran mesin lainnya dan RL adalah bahwa dalam RL kita biasanya tidak tahu apakah kita menang atau kalah sampai kita menyelesaikan permainan. Jadi, kita tidak dapat mengatakan apakah langkah tertentu saja baik atau tidak - kita hanya menerima penghargaan di akhir permainan. Dan tujuan kita adalah merancang algoritma yang memungkinkan kita melatih model dalam kondisi yang tidak pasti. Kita akan belajar tentang salah satu algoritma RL yang disebut **Q-learning**. + +## Pelajaran + +1. [Pengantar pembelajaran penguatan dan Q-Learning](1-QLearning/README.md) +2. [Menggunakan lingkungan simulasi gym](2-Gym/README.md) + +## Kredit + +"Pengantar Pembelajaran Penguatan" ditulis dengan ♥️ oleh [Dmitry Soshnikov](http://soshnikov.com) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/9-Real-World/1-Applications/README.md b/translations/id/9-Real-World/1-Applications/README.md new file mode 100644 index 00000000..564fb6e5 --- /dev/null +++ b/translations/id/9-Real-World/1-Applications/README.md @@ -0,0 +1,159 @@ + +# Postscript: Pembelajaran Mesin di Dunia Nyata + +![Ringkasan pembelajaran mesin di dunia nyata dalam bentuk sketchnote](../../../../sketchnotes/ml-realworld.png) +> Sketchnote oleh [Tomomi Imura](https://www.twitter.com/girlie_mac) + +Dalam kurikulum ini, Anda telah mempelajari banyak cara untuk mempersiapkan data untuk pelatihan dan membuat model pembelajaran mesin. Anda telah membangun serangkaian model klasik seperti regresi, clustering, klasifikasi, pemrosesan bahasa alami, dan deret waktu. Selamat! Sekarang, Anda mungkin bertanya-tanya untuk apa semua ini... apa aplikasi dunia nyata dari model-model ini? + +Meskipun minat industri banyak tertuju pada AI yang biasanya memanfaatkan pembelajaran mendalam, masih ada aplikasi berharga untuk model pembelajaran mesin klasik. Anda bahkan mungkin menggunakan beberapa aplikasi ini hari ini! Dalam pelajaran ini, Anda akan mengeksplorasi bagaimana delapan industri dan domain keahlian yang berbeda menggunakan jenis model ini untuk membuat aplikasi mereka lebih efektif, andal, cerdas, dan bernilai bagi pengguna. + +## [Kuis pra-pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## 💰 Keuangan + +Sektor keuangan menawarkan banyak peluang untuk pembelajaran mesin. Banyak masalah di area ini dapat dimodelkan dan diselesaikan menggunakan ML. + +### Deteksi Penipuan Kartu Kredit + +Kita telah mempelajari tentang [k-means clustering](../../5-Clustering/2-K-Means/README.md) sebelumnya dalam kursus ini, tetapi bagaimana cara menggunakannya untuk menyelesaikan masalah terkait penipuan kartu kredit? + +K-means clustering berguna dalam teknik deteksi penipuan kartu kredit yang disebut **deteksi outlier**. Outlier, atau penyimpangan dalam pengamatan terhadap sekumpulan data, dapat memberi tahu kita apakah kartu kredit digunakan secara normal atau ada sesuatu yang tidak biasa. Seperti yang ditunjukkan dalam makalah yang ditautkan di bawah ini, Anda dapat mengelompokkan data kartu kredit menggunakan algoritma k-means clustering dan menetapkan setiap transaksi ke dalam cluster berdasarkan seberapa besar outlier-nya. Kemudian, Anda dapat mengevaluasi cluster yang paling berisiko untuk transaksi penipuan versus transaksi yang sah. +[Referensi](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.680.1195&rep=rep1&type=pdf) + +### Manajemen Kekayaan + +Dalam manajemen kekayaan, individu atau perusahaan mengelola investasi atas nama klien mereka. Tugas mereka adalah mempertahankan dan meningkatkan kekayaan dalam jangka panjang, sehingga penting untuk memilih investasi yang berkinerja baik. + +Salah satu cara untuk mengevaluasi bagaimana suatu investasi berkinerja adalah melalui regresi statistik. [Regresi linear](../../2-Regression/1-Tools/README.md) adalah alat yang berharga untuk memahami bagaimana suatu dana berkinerja relatif terhadap tolok ukur tertentu. Kita juga dapat menyimpulkan apakah hasil regresi tersebut signifikan secara statistik, atau seberapa besar pengaruhnya terhadap investasi klien. Anda bahkan dapat memperluas analisis Anda menggunakan regresi berganda, di mana faktor risiko tambahan dapat diperhitungkan. Untuk contoh bagaimana ini akan bekerja untuk dana tertentu, lihat makalah di bawah ini tentang mengevaluasi kinerja dana menggunakan regresi. +[Referensi](http://www.brightwoodventures.com/evaluating-fund-performance-using-regression/) + +## 🎓 Pendidikan + +Sektor pendidikan juga merupakan area yang sangat menarik untuk penerapan ML. Ada masalah menarik yang dapat diatasi seperti mendeteksi kecurangan pada tes atau esai, atau mengelola bias, baik yang disengaja maupun tidak, dalam proses koreksi. + +### Memprediksi Perilaku Siswa + +[Coursera](https://coursera.com), penyedia kursus online terbuka, memiliki blog teknologi yang hebat di mana mereka membahas banyak keputusan teknik. Dalam studi kasus ini, mereka memplot garis regresi untuk mencoba mengeksplorasi korelasi antara rating NPS (Net Promoter Score) yang rendah dan retensi atau penurunan kursus. +[Referensi](https://medium.com/coursera-engineering/controlled-regression-quantifying-the-impact-of-course-quality-on-learner-retention-31f956bd592a) + +### Mengurangi Bias + +[Grammarly](https://grammarly.com), asisten penulisan yang memeriksa kesalahan ejaan dan tata bahasa, menggunakan sistem [pemrosesan bahasa alami](../../6-NLP/README.md) yang canggih di seluruh produknya. Mereka menerbitkan studi kasus menarik di blog teknologi mereka tentang bagaimana mereka menangani bias gender dalam pembelajaran mesin, yang telah Anda pelajari dalam [pelajaran pengantar tentang keadilan](../../1-Introduction/3-fairness/README.md). +[Referensi](https://www.grammarly.com/blog/engineering/mitigating-gender-bias-in-autocorrect/) + +## 👜 Ritel + +Sektor ritel dapat sangat diuntungkan dari penggunaan ML, mulai dari menciptakan perjalanan pelanggan yang lebih baik hingga mengelola inventaris secara optimal. + +### Personalisasi Perjalanan Pelanggan + +Di Wayfair, sebuah perusahaan yang menjual barang-barang rumah tangga seperti furnitur, membantu pelanggan menemukan produk yang sesuai dengan selera dan kebutuhan mereka adalah hal yang utama. Dalam artikel ini, para insinyur dari perusahaan tersebut menjelaskan bagaimana mereka menggunakan ML dan NLP untuk "menampilkan hasil yang tepat bagi pelanggan". Secara khusus, Query Intent Engine mereka telah dibangun untuk menggunakan ekstraksi entitas, pelatihan klasifikasi, ekstraksi aset dan opini, serta penandaan sentimen pada ulasan pelanggan. Ini adalah contoh klasik bagaimana NLP bekerja dalam ritel online. +[Referensi](https://www.aboutwayfair.com/tech-innovation/how-we-use-machine-learning-and-natural-language-processing-to-empower-search) + +### Manajemen Inventaris + +Perusahaan inovatif dan gesit seperti [StitchFix](https://stitchfix.com), layanan kotak yang mengirimkan pakaian kepada konsumen, sangat bergantung pada ML untuk rekomendasi dan manajemen inventaris. Tim styling mereka bekerja sama dengan tim merchandising mereka, bahkan: "salah satu ilmuwan data kami bereksperimen dengan algoritma genetik dan menerapkannya pada pakaian untuk memprediksi apa yang akan menjadi pakaian yang sukses yang belum ada saat ini. Kami membawa itu ke tim merchandise dan sekarang mereka dapat menggunakannya sebagai alat." +[Referensi](https://www.zdnet.com/article/how-stitch-fix-uses-machine-learning-to-master-the-science-of-styling/) + +## 🏥 Kesehatan + +Sektor kesehatan dapat memanfaatkan ML untuk mengoptimalkan tugas penelitian dan juga masalah logistik seperti readmisi pasien atau menghentikan penyebaran penyakit. + +### Manajemen Uji Klinis + +Toksisitas dalam uji klinis adalah perhatian utama bagi pembuat obat. Seberapa banyak toksisitas yang dapat ditoleransi? Dalam studi ini, menganalisis berbagai metode uji klinis menghasilkan pendekatan baru untuk memprediksi peluang hasil uji klinis. Secara khusus, mereka dapat menggunakan random forest untuk menghasilkan [classifier](../../4-Classification/README.md) yang mampu membedakan antara kelompok obat. +[Referensi](https://www.sciencedirect.com/science/article/pii/S2451945616302914) + +### Manajemen Readmisi Rumah Sakit + +Perawatan rumah sakit mahal, terutama ketika pasien harus readmisi. Makalah ini membahas sebuah perusahaan yang menggunakan ML untuk memprediksi potensi readmisi menggunakan algoritma [clustering](../../5-Clustering/README.md). Cluster ini membantu analis untuk "menemukan kelompok readmisi yang mungkin memiliki penyebab yang sama". +[Referensi](https://healthmanagement.org/c/healthmanagement/issuearticle/hospital-readmissions-and-machine-learning) + +### Manajemen Penyakit + +Pandemi baru-baru ini telah menyoroti cara-cara pembelajaran mesin dapat membantu menghentikan penyebaran penyakit. Dalam artikel ini, Anda akan mengenali penggunaan ARIMA, kurva logistik, regresi linear, dan SARIMA. "Pekerjaan ini adalah upaya untuk menghitung tingkat penyebaran virus ini dan dengan demikian memprediksi kematian, pemulihan, dan kasus yang dikonfirmasi, sehingga dapat membantu kita mempersiapkan diri dengan lebih baik dan bertahan." +[Referensi](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7979218/) + +## 🌲 Ekologi dan Teknologi Hijau + +Alam dan ekologi terdiri dari banyak sistem sensitif di mana interaksi antara hewan dan alam menjadi fokus. Penting untuk dapat mengukur sistem ini secara akurat dan bertindak dengan tepat jika sesuatu terjadi, seperti kebakaran hutan atau penurunan populasi hewan. + +### Manajemen Hutan + +Anda telah mempelajari tentang [Reinforcement Learning](../../8-Reinforcement/README.md) dalam pelajaran sebelumnya. Ini bisa sangat berguna saat mencoba memprediksi pola di alam. Secara khusus, ini dapat digunakan untuk melacak masalah ekologi seperti kebakaran hutan dan penyebaran spesies invasif. Di Kanada, sekelompok peneliti menggunakan Reinforcement Learning untuk membangun model dinamika kebakaran hutan dari citra satelit. Menggunakan "spatially spreading process (SSP)" yang inovatif, mereka membayangkan kebakaran hutan sebagai "agen di setiap sel dalam lanskap." "Set tindakan yang dapat diambil oleh api dari suatu lokasi pada titik waktu tertentu termasuk menyebar ke utara, selatan, timur, atau barat atau tidak menyebar. + +Pendekatan ini membalikkan pengaturan RL biasa karena dinamika Proses Keputusan Markov (MDP) yang sesuai adalah fungsi yang diketahui untuk penyebaran kebakaran langsung." Baca lebih lanjut tentang algoritma klasik yang digunakan oleh kelompok ini di tautan di bawah ini. +[Referensi](https://www.frontiersin.org/articles/10.3389/fict.2018.00006/full) + +### Sensor Gerak Hewan + +Meskipun pembelajaran mendalam telah menciptakan revolusi dalam melacak gerakan hewan secara visual (Anda dapat membuat [pelacak beruang kutub](https://docs.microsoft.com/learn/modules/build-ml-model-with-azure-stream-analytics/?WT.mc_id=academic-77952-leestott) Anda sendiri di sini), ML klasik masih memiliki tempat dalam tugas ini. + +Sensor untuk melacak gerakan hewan ternak dan IoT memanfaatkan jenis pemrosesan visual ini, tetapi teknik ML yang lebih dasar berguna untuk memproses data awal. Misalnya, dalam makalah ini, postur domba dipantau dan dianalisis menggunakan berbagai algoritma klasifikasi. Anda mungkin mengenali kurva ROC di halaman 335. +[Referensi](https://druckhaus-hofmann.de/gallery/31-wj-feb-2020.pdf) + +### ⚡️ Manajemen Energi + +Dalam pelajaran kami tentang [peramalan deret waktu](../../7-TimeSeries/README.md), kami mengangkat konsep meteran parkir pintar untuk menghasilkan pendapatan bagi kota berdasarkan pemahaman tentang penawaran dan permintaan. Artikel ini membahas secara rinci bagaimana clustering, regresi, dan peramalan deret waktu digabungkan untuk membantu memprediksi penggunaan energi di masa depan di Irlandia, berdasarkan meteran pintar. +[Referensi](https://www-cdn.knime.com/sites/default/files/inline-images/knime_bigdata_energy_timeseries_whitepaper.pdf) + +## 💼 Asuransi + +Sektor asuransi adalah sektor lain yang menggunakan ML untuk membangun dan mengoptimalkan model keuangan dan aktuaria yang layak. + +### Manajemen Volatilitas + +MetLife, penyedia asuransi jiwa, terbuka tentang cara mereka menganalisis dan mengurangi volatilitas dalam model keuangan mereka. Dalam artikel ini Anda akan melihat visualisasi klasifikasi biner dan ordinal. Anda juga akan menemukan visualisasi peramalan. +[Referensi](https://investments.metlife.com/content/dam/metlifecom/us/investments/insights/research-topics/macro-strategy/pdf/MetLifeInvestmentManagement_MachineLearnedRanking_070920.pdf) + +## 🎨 Seni, Budaya, dan Sastra + +Dalam seni, misalnya dalam jurnalisme, ada banyak masalah menarik. Mendeteksi berita palsu adalah masalah besar karena telah terbukti memengaruhi opini publik dan bahkan mengguncang demokrasi. Museum juga dapat memanfaatkan ML dalam segala hal mulai dari menemukan hubungan antar artefak hingga perencanaan sumber daya. + +### Deteksi Berita Palsu + +Mendeteksi berita palsu telah menjadi permainan kucing dan tikus dalam media saat ini. Dalam artikel ini, para peneliti menyarankan bahwa sistem yang menggabungkan beberapa teknik ML yang telah kita pelajari dapat diuji dan model terbaik diterapkan: "Sistem ini didasarkan pada pemrosesan bahasa alami untuk mengekstrak fitur dari data dan kemudian fitur-fitur ini digunakan untuk pelatihan pengklasifikasi pembelajaran mesin seperti Naive Bayes, Support Vector Machine (SVM), Random Forest (RF), Stochastic Gradient Descent (SGD), dan Logistic Regression (LR)." +[Referensi](https://www.irjet.net/archives/V7/i6/IRJET-V7I6688.pdf) + +Artikel ini menunjukkan bagaimana menggabungkan berbagai domain ML dapat menghasilkan hasil menarik yang dapat membantu menghentikan penyebaran berita palsu dan menciptakan kerusakan nyata; dalam kasus ini, dorongan utamanya adalah penyebaran rumor tentang pengobatan COVID yang memicu kekerasan massa. + +### Museum ML + +Museum berada di ambang revolusi AI di mana pengatalogan dan digitalisasi koleksi serta menemukan hubungan antar artefak menjadi lebih mudah seiring kemajuan teknologi. Proyek seperti [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources.) membantu membuka misteri koleksi yang tidak dapat diakses seperti Arsip Vatikan. Namun, aspek bisnis museum juga mendapat manfaat dari model ML. + +Misalnya, Art Institute of Chicago membangun model untuk memprediksi apa yang diminati oleh audiens dan kapan mereka akan menghadiri pameran. Tujuannya adalah menciptakan pengalaman pengunjung yang dipersonalisasi dan dioptimalkan setiap kali pengguna mengunjungi museum. "Selama tahun fiskal 2017, model tersebut memprediksi kehadiran dan penerimaan dengan akurasi hingga 1 persen, kata Andrew Simnick, wakil presiden senior di Art Institute." +[Referensi](https://www.chicagobusiness.com/article/20180518/ISSUE01/180519840/art-institute-of-chicago-uses-data-to-make-exhibit-choices) + +## 🏷 Pemasaran + +### Segmentasi Pelanggan + +Strategi pemasaran yang paling efektif menargetkan pelanggan dengan cara yang berbeda berdasarkan berbagai pengelompokan. Dalam artikel ini, penggunaan algoritma Clustering dibahas untuk mendukung pemasaran yang berbeda. Pemasaran yang berbeda membantu perusahaan meningkatkan pengenalan merek, menjangkau lebih banyak pelanggan, dan menghasilkan lebih banyak uang. +[Referensi](https://ai.inqline.com/machine-learning-for-marketing-customer-segmentation/) + +## 🚀 Tantangan + +Identifikasi sektor lain yang mendapat manfaat dari beberapa teknik yang telah Anda pelajari dalam kurikulum ini, dan temukan bagaimana sektor tersebut menggunakan ML. +## [Kuis setelah kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Tinjauan & Belajar Mandiri + +Tim data science Wayfair memiliki beberapa video menarik tentang bagaimana mereka menggunakan ML di perusahaan mereka. Ada baiknya [melihatnya](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos)! + +## Tugas + +[Perburuan ML](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/9-Real-World/1-Applications/assignment.md b/translations/id/9-Real-World/1-Applications/assignment.md new file mode 100644 index 00000000..1e2ea61a --- /dev/null +++ b/translations/id/9-Real-World/1-Applications/assignment.md @@ -0,0 +1,27 @@ + +# Perburuan ML + +## Instruksi + +Dalam pelajaran ini, Anda telah mempelajari banyak kasus penggunaan nyata yang diselesaikan menggunakan ML klasik. Meskipun penggunaan deep learning, teknik dan alat baru dalam AI, serta pemanfaatan jaringan neural telah membantu mempercepat produksi alat untuk membantu di sektor-sektor ini, ML klasik dengan teknik yang diajarkan dalam kurikulum ini masih memiliki nilai yang besar. + +Dalam tugas ini, bayangkan Anda sedang berpartisipasi dalam sebuah hackathon. Gunakan apa yang telah Anda pelajari dalam kurikulum untuk mengusulkan solusi menggunakan ML klasik untuk menyelesaikan masalah di salah satu sektor yang dibahas dalam pelajaran ini. Buatlah sebuah presentasi di mana Anda membahas bagaimana Anda akan mengimplementasikan ide Anda. Poin bonus jika Anda dapat mengumpulkan data sampel dan membangun model ML untuk mendukung konsep Anda! + +## Rubrik + +| Kriteria | Unggul | Memadai | Perlu Peningkatan | +| -------- | ------------------------------------------------------------------- | ------------------------------------------------- | ---------------------- | +| | Presentasi PowerPoint disajikan - bonus untuk membangun model | Presentasi dasar yang tidak inovatif disajikan | Pekerjaan tidak lengkap | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/9-Real-World/2-Debugging-ML-Models/README.md b/translations/id/9-Real-World/2-Debugging-ML-Models/README.md new file mode 100644 index 00000000..a977470b --- /dev/null +++ b/translations/id/9-Real-World/2-Debugging-ML-Models/README.md @@ -0,0 +1,184 @@ + +# Postscript: Debugging Model dalam Pembelajaran Mesin menggunakan Komponen Dasbor AI yang Bertanggung Jawab + +## [Kuis pra-kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Pendahuluan + +Pembelajaran mesin memengaruhi kehidupan kita sehari-hari. AI mulai digunakan dalam beberapa sistem paling penting yang memengaruhi kita sebagai individu maupun masyarakat, seperti di bidang kesehatan, keuangan, pendidikan, dan pekerjaan. Misalnya, sistem dan model terlibat dalam tugas pengambilan keputusan sehari-hari, seperti diagnosis kesehatan atau mendeteksi penipuan. Akibatnya, kemajuan AI yang pesat dan adopsinya yang semakin meluas dihadapkan pada ekspektasi masyarakat yang terus berkembang serta regulasi yang semakin ketat. Kita sering melihat area di mana sistem AI gagal memenuhi ekspektasi; mereka memunculkan tantangan baru; dan pemerintah mulai mengatur solusi AI. Oleh karena itu, penting untuk menganalisis model-model ini agar dapat memberikan hasil yang adil, dapat diandalkan, inklusif, transparan, dan bertanggung jawab bagi semua orang. + +Dalam kurikulum ini, kita akan melihat alat-alat praktis yang dapat digunakan untuk menilai apakah sebuah model memiliki masalah AI yang bertanggung jawab. Teknik debugging pembelajaran mesin tradisional cenderung didasarkan pada perhitungan kuantitatif seperti akurasi agregat atau rata-rata error loss. Bayangkan apa yang bisa terjadi jika data yang Anda gunakan untuk membangun model ini kekurangan demografi tertentu, seperti ras, gender, pandangan politik, agama, atau secara tidak proporsional mewakili demografi tersebut. Bagaimana jika output model diinterpretasikan untuk menguntungkan beberapa demografi? Hal ini dapat menyebabkan representasi berlebihan atau kurang dari kelompok fitur sensitif ini, yang mengakibatkan masalah keadilan, inklusivitas, atau keandalan dari model tersebut. Faktor lainnya adalah, model pembelajaran mesin sering dianggap sebagai kotak hitam, yang membuatnya sulit untuk memahami dan menjelaskan apa yang mendorong prediksi model. Semua ini adalah tantangan yang dihadapi oleh ilmuwan data dan pengembang AI ketika mereka tidak memiliki alat yang memadai untuk debugging dan menilai keadilan atau kepercayaan model. + +Dalam pelajaran ini, Anda akan belajar tentang debugging model Anda menggunakan: + +- **Analisis Kesalahan**: mengidentifikasi di mana dalam distribusi data Anda model memiliki tingkat kesalahan yang tinggi. +- **Ikhtisar Model**: melakukan analisis komparatif di berbagai kelompok data untuk menemukan disparitas dalam metrik kinerja model Anda. +- **Analisis Data**: menyelidiki di mana mungkin ada representasi berlebihan atau kurang dari data Anda yang dapat membuat model Anda cenderung menguntungkan satu demografi data dibandingkan yang lain. +- **Pentingnya Fitur**: memahami fitur mana yang mendorong prediksi model Anda pada tingkat global atau lokal. + +## Prasyarat + +Sebagai prasyarat, silakan tinjau [Alat AI yang Bertanggung Jawab untuk Pengembang](https://www.microsoft.com/ai/ai-lab-responsible-ai-dashboard) + +> ![Gif tentang Alat AI yang Bertanggung Jawab](../../../../9-Real-World/2-Debugging-ML-Models/images/rai-overview.gif) + +## Analisis Kesalahan + +Metrik kinerja model tradisional yang digunakan untuk mengukur akurasi sebagian besar adalah perhitungan berdasarkan prediksi yang benar vs salah. Misalnya, menentukan bahwa sebuah model akurat 89% dengan error loss sebesar 0.001 dapat dianggap sebagai kinerja yang baik. Kesalahan sering kali tidak terdistribusi secara merata dalam dataset Anda. Anda mungkin mendapatkan skor akurasi model 89% tetapi menemukan bahwa ada wilayah data tertentu di mana model gagal 42% dari waktu. Konsekuensi dari pola kegagalan ini dengan kelompok data tertentu dapat menyebabkan masalah keadilan atau keandalan. Sangat penting untuk memahami area di mana model berkinerja baik atau tidak. Wilayah data di mana terdapat banyak ketidakakuratan dalam model Anda mungkin ternyata merupakan demografi data yang penting. + +![Analisis dan debugging kesalahan model](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-distribution.png) + +Komponen Analisis Kesalahan pada dasbor RAI menggambarkan bagaimana kegagalan model terdistribusi di berbagai kelompok dengan visualisasi pohon. Ini berguna untuk mengidentifikasi fitur atau area di mana terdapat tingkat kesalahan tinggi dalam dataset Anda. Dengan melihat dari mana sebagian besar ketidakakuratan model berasal, Anda dapat mulai menyelidiki akar penyebabnya. Anda juga dapat membuat kelompok data untuk melakukan analisis. Kelompok data ini membantu dalam proses debugging untuk menentukan mengapa kinerja model baik di satu kelompok, tetapi salah di kelompok lain. + +![Analisis Kesalahan](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-cohort.png) + +Indikator visual pada peta pohon membantu menemukan area masalah dengan lebih cepat. Misalnya, semakin gelap warna merah pada node pohon, semakin tinggi tingkat kesalahannya. + +Peta panas adalah fungsi visualisasi lain yang dapat digunakan pengguna untuk menyelidiki tingkat kesalahan menggunakan satu atau dua fitur untuk menemukan penyebab kesalahan model di seluruh dataset atau kelompok. + +![Peta Panas Analisis Kesalahan](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-heatmap.png) + +Gunakan analisis kesalahan ketika Anda perlu: + +* Memahami secara mendalam bagaimana kegagalan model terdistribusi di seluruh dataset dan di berbagai dimensi input dan fitur. +* Memecah metrik kinerja agregat untuk secara otomatis menemukan kelompok yang salah guna menginformasikan langkah-langkah mitigasi yang ditargetkan. + +## Ikhtisar Model + +Mengevaluasi kinerja model pembelajaran mesin membutuhkan pemahaman menyeluruh tentang perilakunya. Hal ini dapat dicapai dengan meninjau lebih dari satu metrik seperti tingkat kesalahan, akurasi, recall, presisi, atau MAE (Mean Absolute Error) untuk menemukan disparitas di antara metrik kinerja. Satu metrik kinerja mungkin terlihat bagus, tetapi ketidakakuratan dapat terungkap dalam metrik lain. Selain itu, membandingkan metrik untuk disparitas di seluruh dataset atau kelompok membantu memberikan wawasan tentang di mana model berkinerja baik atau tidak. Hal ini sangat penting untuk melihat kinerja model di antara fitur sensitif vs tidak sensitif (misalnya, ras pasien, gender, atau usia) untuk mengungkap potensi ketidakadilan yang mungkin dimiliki model. Misalnya, menemukan bahwa model lebih sering salah di kelompok yang memiliki fitur sensitif dapat mengungkap potensi ketidakadilan yang mungkin dimiliki model. + +Komponen Ikhtisar Model pada dasbor RAI membantu tidak hanya dalam menganalisis metrik kinerja dari representasi data dalam kelompok, tetapi juga memberikan pengguna kemampuan untuk membandingkan perilaku model di berbagai kelompok. + +![Kelompok dataset - ikhtisar model dalam dasbor RAI](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-dataset-cohorts.png) + +Fungsi analisis berbasis fitur dari komponen ini memungkinkan pengguna untuk mempersempit subkelompok data dalam fitur tertentu untuk mengidentifikasi anomali pada tingkat yang lebih rinci. Misalnya, dasbor memiliki kecerdasan bawaan untuk secara otomatis menghasilkan kelompok untuk fitur yang dipilih pengguna (misalnya, *"time_in_hospital < 3"* atau *"time_in_hospital >= 7"*). Hal ini memungkinkan pengguna untuk mengisolasi fitur tertentu dari kelompok data yang lebih besar untuk melihat apakah fitur tersebut merupakan pengaruh utama dari hasil yang salah pada model. + +![Kelompok fitur - ikhtisar model dalam dasbor RAI](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-feature-cohorts.png) + +Komponen Ikhtisar Model mendukung dua kelas metrik disparitas: + +**Disparitas dalam kinerja model**: Serangkaian metrik ini menghitung disparitas (perbedaan) dalam nilai metrik kinerja yang dipilih di seluruh subkelompok data. Berikut beberapa contohnya: + +* Disparitas dalam tingkat akurasi +* Disparitas dalam tingkat kesalahan +* Disparitas dalam presisi +* Disparitas dalam recall +* Disparitas dalam mean absolute error (MAE) + +**Disparitas dalam tingkat seleksi**: Metrik ini berisi perbedaan dalam tingkat seleksi (prediksi yang menguntungkan) di antara subkelompok. Contohnya adalah disparitas dalam tingkat persetujuan pinjaman. Tingkat seleksi berarti fraksi titik data dalam setiap kelas yang diklasifikasikan sebagai 1 (dalam klasifikasi biner) atau distribusi nilai prediksi (dalam regresi). + +## Analisis Data + +> "Jika Anda menyiksa data cukup lama, data akan mengaku apa saja" - Ronald Coase + +Pernyataan ini terdengar ekstrem, tetapi benar bahwa data dapat dimanipulasi untuk mendukung kesimpulan apa pun. Manipulasi semacam itu terkadang terjadi secara tidak sengaja. Sebagai manusia, kita semua memiliki bias, dan sering kali sulit untuk secara sadar mengetahui kapan kita memperkenalkan bias dalam data. Menjamin keadilan dalam AI dan pembelajaran mesin tetap menjadi tantangan yang kompleks. + +Data adalah titik buta besar untuk metrik kinerja model tradisional. Anda mungkin memiliki skor akurasi tinggi, tetapi ini tidak selalu mencerminkan bias data yang mendasari yang mungkin ada dalam dataset Anda. Misalnya, jika dataset karyawan memiliki 27% wanita di posisi eksekutif di sebuah perusahaan dan 73% pria di tingkat yang sama, model AI periklanan pekerjaan yang dilatih pada data ini mungkin menargetkan sebagian besar audiens pria untuk posisi pekerjaan tingkat senior. Ketidakseimbangan dalam data ini membuat prediksi model cenderung menguntungkan satu gender. Hal ini mengungkapkan masalah keadilan di mana terdapat bias gender dalam model AI. + +Komponen Analisis Data pada dasbor RAI membantu mengidentifikasi area di mana terdapat representasi berlebihan dan kurang dalam dataset. Ini membantu pengguna mendiagnosis akar penyebab kesalahan dan masalah keadilan yang diperkenalkan dari ketidakseimbangan data atau kurangnya representasi dari kelompok data tertentu. Hal ini memberikan pengguna kemampuan untuk memvisualisasikan dataset berdasarkan hasil prediksi dan aktual, kelompok kesalahan, dan fitur tertentu. Terkadang menemukan kelompok data yang kurang terwakili juga dapat mengungkap bahwa model tidak belajar dengan baik, sehingga tingkat ketidakakuratan tinggi. Memiliki model dengan bias data bukan hanya masalah keadilan tetapi juga menunjukkan bahwa model tidak inklusif atau dapat diandalkan. + +![Komponen Analisis Data pada Dasbor RAI](../../../../9-Real-World/2-Debugging-ML-Models/images/dataanalysis-cover.png) + +Gunakan analisis data ketika Anda perlu: + +* Mengeksplorasi statistik dataset Anda dengan memilih filter berbeda untuk membagi data Anda ke dalam berbagai dimensi (juga dikenal sebagai kelompok). +* Memahami distribusi dataset Anda di berbagai kelompok dan grup fitur. +* Menentukan apakah temuan Anda terkait dengan keadilan, analisis kesalahan, dan kausalitas (yang berasal dari komponen dasbor lainnya) adalah hasil dari distribusi dataset Anda. +* Memutuskan di area mana untuk mengumpulkan lebih banyak data guna mengurangi kesalahan yang berasal dari masalah representasi, kebisingan label, kebisingan fitur, bias label, dan faktor serupa. + +## Interpretabilitas Model + +Model pembelajaran mesin cenderung menjadi kotak hitam. Memahami fitur data utama mana yang mendorong prediksi model bisa menjadi tantangan. Penting untuk memberikan transparansi mengapa model membuat prediksi tertentu. Misalnya, jika sistem AI memprediksi bahwa seorang pasien diabetes berisiko dirawat kembali di rumah sakit dalam waktu kurang dari 30 hari, sistem tersebut harus dapat memberikan data pendukung yang menyebabkan prediksinya. Memiliki indikator data pendukung memberikan transparansi untuk membantu dokter atau rumah sakit membuat keputusan yang terinformasi dengan baik. Selain itu, mampu menjelaskan mengapa model membuat prediksi untuk pasien individu memungkinkan akuntabilitas dengan regulasi kesehatan. Ketika Anda menggunakan model pembelajaran mesin dengan cara yang memengaruhi kehidupan manusia, sangat penting untuk memahami dan menjelaskan apa yang memengaruhi perilaku model. Penjelasan dan interpretabilitas model membantu menjawab pertanyaan dalam skenario seperti: + +* Debugging model: Mengapa model saya membuat kesalahan ini? Bagaimana saya dapat meningkatkan model saya? +* Kolaborasi manusia-AI: Bagaimana saya dapat memahami dan mempercayai keputusan model? +* Kepatuhan regulasi: Apakah model saya memenuhi persyaratan hukum? + +Komponen Pentingnya Fitur pada dasbor RAI membantu Anda untuk debugging dan mendapatkan pemahaman yang komprehensif tentang bagaimana model membuat prediksi. Ini juga merupakan alat yang berguna bagi profesional pembelajaran mesin dan pengambil keputusan untuk menjelaskan dan menunjukkan bukti fitur yang memengaruhi perilaku model untuk kepatuhan regulasi. Selanjutnya, pengguna dapat mengeksplorasi penjelasan global dan lokal untuk memvalidasi fitur mana yang mendorong prediksi model. Penjelasan global mencantumkan fitur utama yang memengaruhi prediksi keseluruhan model. Penjelasan lokal menampilkan fitur mana yang menyebabkan prediksi model untuk kasus individu. Kemampuan untuk mengevaluasi penjelasan lokal juga berguna dalam debugging atau audit kasus tertentu untuk lebih memahami dan menginterpretasikan mengapa model membuat prediksi yang akurat atau tidak akurat. + +![Komponen Pentingnya Fitur pada dasbor RAI](../../../../9-Real-World/2-Debugging-ML-Models/images/9-feature-importance.png) + +* Penjelasan global: Misalnya, fitur apa yang memengaruhi perilaku keseluruhan model rawat inap diabetes? +* Penjelasan lokal: Misalnya, mengapa seorang pasien diabetes berusia di atas 60 tahun dengan rawat inap sebelumnya diprediksi akan dirawat kembali atau tidak dirawat kembali dalam waktu 30 hari di rumah sakit? + +Dalam proses debugging untuk memeriksa kinerja model di berbagai kelompok, Pentingnya Fitur menunjukkan tingkat dampak fitur di seluruh kelompok. Ini membantu mengungkap anomali saat membandingkan tingkat pengaruh fitur dalam mendorong prediksi model yang salah. Komponen Pentingnya Fitur dapat menunjukkan nilai mana dalam fitur yang secara positif atau negatif memengaruhi hasil model. Misalnya, jika model membuat prediksi yang tidak akurat, komponen ini memberikan kemampuan untuk mengeksplorasi lebih dalam dan mengidentifikasi fitur atau nilai fitur mana yang mendorong prediksi tersebut. Tingkat detail ini tidak hanya membantu dalam debugging tetapi juga memberikan transparansi dan akuntabilitas dalam situasi audit. Akhirnya, komponen ini dapat membantu Anda mengidentifikasi masalah keadilan. Sebagai ilustrasi, jika fitur sensitif seperti etnis atau gender sangat berpengaruh dalam mendorong prediksi model, ini bisa menjadi tanda bias ras atau gender dalam model. + +![Pentingnya fitur](../../../../9-Real-World/2-Debugging-ML-Models/images/9-features-influence.png) + +Gunakan interpretabilitas ketika Anda perlu: + +* Menentukan seberapa dapat dipercaya prediksi sistem AI Anda dengan memahami fitur mana yang paling penting untuk prediksi tersebut. +* Mendekati debugging model Anda dengan terlebih dahulu memahaminya dan mengidentifikasi apakah model menggunakan fitur yang sehat atau hanya korelasi palsu. +* Mengungkap potensi sumber ketidakadilan dengan memahami apakah model mendasarkan prediksi pada fitur sensitif atau fitur yang sangat berkorelasi dengan fitur sensitif. +* Membangun kepercayaan pengguna pada keputusan model Anda dengan menghasilkan penjelasan lokal untuk menggambarkan hasilnya. +* Menyelesaikan audit regulasi sistem AI untuk memvalidasi model dan memantau dampak keputusan model pada manusia. + +## Kesimpulan + +Semua komponen dasbor RAI adalah alat praktis untuk membantu Anda membangun model pembelajaran mesin yang lebih aman dan lebih dapat dipercaya oleh masyarakat. Ini meningkatkan pencegahan ancaman terhadap hak asasi manusia; diskriminasi atau pengecualian kelompok tertentu terhadap peluang hidup; dan risiko cedera fisik atau psikologis. Ini juga membantu membangun kepercayaan pada keputusan model Anda dengan menghasilkan penjelasan lokal untuk menggambarkan hasilnya. Beberapa potensi kerugian dapat diklasifikasikan sebagai: + +- **Distribusi**, jika gender atau etnis misalnya lebih diuntungkan dibandingkan yang lain. +- **Kualitas layanan**. Jika Anda melatih data untuk satu skenario spesifik tetapi kenyataannya jauh lebih kompleks, hal ini menyebabkan layanan yang berkinerja buruk. +- **Stereotip**. Mengasosiasikan kelompok tertentu dengan atribut yang telah ditentukan sebelumnya. +- **Pelecehan**. Mengkritik dan melabeli sesuatu atau seseorang secara tidak adil. +- **Representasi berlebihan atau kurang**. Ide utamanya adalah bahwa kelompok tertentu tidak terlihat dalam profesi tertentu, dan setiap layanan atau fungsi yang terus mempromosikan hal tersebut berkontribusi pada kerugian. + +### Azure RAI dashboard + +[Azure RAI dashboard](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) dibangun menggunakan alat sumber terbuka yang dikembangkan oleh institusi akademik dan organisasi terkemuka, termasuk Microsoft. Alat ini sangat membantu ilmuwan data dan pengembang AI untuk lebih memahami perilaku model, menemukan, dan mengatasi masalah yang tidak diinginkan dari model AI. + +- Pelajari cara menggunakan berbagai komponen dengan melihat [dokumentasi RAI dashboard.](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) + +- Lihat beberapa [notebook contoh RAI dashboard](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) untuk debugging skenario AI yang lebih bertanggung jawab di Azure Machine Learning. + +--- +## 🚀 Tantangan + +Untuk mencegah bias statistik atau data diperkenalkan sejak awal, kita harus: + +- memiliki keragaman latar belakang dan perspektif di antara orang-orang yang bekerja pada sistem +- berinvestasi dalam dataset yang mencerminkan keragaman masyarakat kita +- mengembangkan metode yang lebih baik untuk mendeteksi dan memperbaiki bias saat terjadi + +Pikirkan skenario kehidupan nyata di mana ketidakadilan terlihat dalam pembangunan dan penggunaan model. Apa lagi yang harus kita pertimbangkan? + +## [Kuis setelah kuliah](https://ff-quizzes.netlify.app/en/ml/) +## Tinjauan & Studi Mandiri + +Dalam pelajaran ini, Anda telah mempelajari beberapa alat praktis untuk mengintegrasikan AI yang bertanggung jawab dalam pembelajaran mesin. + +Tonton lokakarya ini untuk mendalami topik lebih lanjut: + +- Responsible AI Dashboard: Satu tempat untuk mengoperasionalkan RAI dalam praktik oleh Besmira Nushi dan Mehrnoosh Sameki + +[![Responsible AI Dashboard: Satu tempat untuk mengoperasionalkan RAI dalam praktik](https://img.youtube.com/vi/f1oaDNl3djg/0.jpg)](https://www.youtube.com/watch?v=f1oaDNl3djg "Responsible AI Dashboard: Satu tempat untuk mengoperasionalkan RAI dalam praktik") + + +> 🎥 Klik gambar di atas untuk video: Responsible AI Dashboard: Satu tempat untuk mengoperasionalkan RAI dalam praktik oleh Besmira Nushi dan Mehrnoosh Sameki + +Referensi materi berikut untuk mempelajari lebih lanjut tentang AI yang bertanggung jawab dan cara membangun model yang lebih dapat dipercaya: + +- Alat RAI dashboard Microsoft untuk debugging model ML: [Sumber daya alat AI yang bertanggung jawab](https://aka.ms/rai-dashboard) + +- Jelajahi toolkit AI yang bertanggung jawab: [Github](https://github.com/microsoft/responsible-ai-toolbox) + +- Pusat sumber daya RAI Microsoft: [Sumber Daya AI yang Bertanggung Jawab – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- Kelompok penelitian FATE Microsoft: [FATE: Keadilan, Akuntabilitas, Transparansi, dan Etika dalam AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) + +## Tugas + +[Jelajahi RAI dashboard](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/9-Real-World/2-Debugging-ML-Models/assignment.md b/translations/id/9-Real-World/2-Debugging-ML-Models/assignment.md new file mode 100644 index 00000000..4d71bd40 --- /dev/null +++ b/translations/id/9-Real-World/2-Debugging-ML-Models/assignment.md @@ -0,0 +1,25 @@ + +# Jelajahi Dasbor Responsible AI (RAI) + +## Instruksi + +Dalam pelajaran ini, Anda telah mempelajari tentang dasbor RAI, sebuah rangkaian komponen yang dibangun menggunakan alat "open-source" untuk membantu ilmuwan data melakukan analisis kesalahan, eksplorasi data, penilaian keadilan, interpretabilitas model, penilaian counterfact/what-if, dan analisis kausal pada sistem AI. Untuk tugas ini, jelajahi beberapa [notebook](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) contoh dari dasbor RAI dan laporkan temuan Anda dalam bentuk makalah atau presentasi. + +## Rubrik + +| Kriteria | Unggul | Memadai | Perlu Perbaikan | +| -------- | ------- | -------- | ---------------- | +| | Makalah atau presentasi PowerPoint disajikan yang membahas komponen dasbor RAI, notebook yang dijalankan, dan kesimpulan yang diambil dari menjalankannya | Makalah disajikan tanpa kesimpulan | Tidak ada makalah yang disajikan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/9-Real-World/README.md b/translations/id/9-Real-World/README.md new file mode 100644 index 00000000..f2447edb --- /dev/null +++ b/translations/id/9-Real-World/README.md @@ -0,0 +1,32 @@ + +# Postscript: Aplikasi Dunia Nyata dari Pembelajaran Mesin Klasik + +Dalam bagian kurikulum ini, Anda akan diperkenalkan dengan beberapa aplikasi dunia nyata dari pembelajaran mesin klasik. Kami telah menjelajahi internet untuk menemukan makalah dan artikel tentang aplikasi yang menggunakan strategi ini, dengan menghindari jaringan saraf, pembelajaran mendalam, dan AI sejauh mungkin. Pelajari bagaimana pembelajaran mesin digunakan dalam sistem bisnis, aplikasi ekologi, keuangan, seni dan budaya, serta lainnya. + +![chess](../../../9-Real-World/images/chess.jpg) + +> Foto oleh Alexis Fauvet di Unsplash + +## Pelajaran + +1. [Aplikasi Dunia Nyata untuk Pembelajaran Mesin](1-Applications/README.md) +2. [Debugging Model dalam Pembelajaran Mesin menggunakan Komponen Dasbor AI yang Bertanggung Jawab](2-Debugging-ML-Models/README.md) + +## Kredit + +"Aplikasi Dunia Nyata" ditulis oleh tim yang terdiri dari beberapa orang, termasuk [Jen Looper](https://twitter.com/jenlooper) dan [Ornella Altunyan](https://twitter.com/ornelladotcom). + +"Debugging Model dalam Pembelajaran Mesin menggunakan Komponen Dasbor AI yang Bertanggung Jawab" ditulis oleh [Ruth Yakubu](https://twitter.com/ruthieyakubu) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diperhatikan bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/CODE_OF_CONDUCT.md b/translations/id/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..b496744d --- /dev/null +++ b/translations/id/CODE_OF_CONDUCT.md @@ -0,0 +1,23 @@ + +# Kode Etik Sumber Terbuka Microsoft + +Proyek ini telah mengadopsi [Kode Etik Sumber Terbuka Microsoft](https://opensource.microsoft.com/codeofconduct/). + +Sumber daya: + +- [Kode Etik Sumber Terbuka Microsoft](https://opensource.microsoft.com/codeofconduct/) +- [FAQ Kode Etik Microsoft](https://opensource.microsoft.com/codeofconduct/faq/) +- Hubungi [opencode@microsoft.com](mailto:opencode@microsoft.com) untuk pertanyaan atau kekhawatiran + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/CONTRIBUTING.md b/translations/id/CONTRIBUTING.md new file mode 100644 index 00000000..88b33acb --- /dev/null +++ b/translations/id/CONTRIBUTING.md @@ -0,0 +1,30 @@ + +# Berkontribusi + +Proyek ini menyambut kontribusi dan saran. Sebagian besar kontribusi mengharuskan Anda +menyetujui Perjanjian Lisensi Kontributor (CLA) yang menyatakan bahwa Anda memiliki hak untuk, +dan benar-benar memberikan kami hak untuk menggunakan kontribusi Anda. Untuk detail lebih lanjut, kunjungi +https://cla.microsoft.com. + +> Penting: saat menerjemahkan teks dalam repositori ini, pastikan Anda tidak menggunakan terjemahan mesin. Kami akan memverifikasi terjemahan melalui komunitas, jadi hanya sukarelawan untuk menerjemahkan ke bahasa yang Anda kuasai. + +Ketika Anda mengirimkan pull request, CLA-bot akan secara otomatis menentukan apakah Anda perlu +menyediakan CLA dan menghias PR dengan tepat (misalnya, label, komentar). Cukup ikuti +instruksi yang diberikan oleh bot. Anda hanya perlu melakukan ini sekali di semua repositori yang menggunakan CLA kami. + +Proyek ini telah mengadopsi [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). +Untuk informasi lebih lanjut, lihat [FAQ Kode Etik](https://opensource.microsoft.com/codeofconduct/faq/) +atau hubungi [opencode@microsoft.com](mailto:opencode@microsoft.com) untuk pertanyaan atau komentar tambahan. + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/README.md b/translations/id/README.md new file mode 100644 index 00000000..acf9ce5e --- /dev/null +++ b/translations/id/README.md @@ -0,0 +1,177 @@ + +[![GitHub license](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) +[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) +[![GitHub issues](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) +[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) + +[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) +[![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) +[![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) + +### 🌐 Dukungan Multi-Bahasa + +#### Didukung melalui GitHub Action (Otomatis & Selalu Terbaru) + +[French](../fr/README.md) | [Spanish](../es/README.md) | [German](../de/README.md) | [Russian](../ru/README.md) | [Arabic](../ar/README.md) | [Persian (Farsi)](../fa/README.md) | [Urdu](../ur/README.md) | [Chinese (Simplified)](../zh/README.md) | [Chinese (Traditional, Macau)](../mo/README.md) | [Chinese (Traditional, Hong Kong)](../hk/README.md) | [Chinese (Traditional, Taiwan)](../tw/README.md) | [Japanese](../ja/README.md) | [Korean](../ko/README.md) | [Hindi](../hi/README.md) | [Bengali](../bn/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Portuguese (Portugal)](../pt/README.md) | [Portuguese (Brazil)](../br/README.md) | [Italian](../it/README.md) | [Polish](../pl/README.md) | [Turkish](../tr/README.md) | [Greek](../el/README.md) | [Thai](../th/README.md) | [Swedish](../sv/README.md) | [Danish](../da/README.md) | [Norwegian](../no/README.md) | [Finnish](../fi/README.md) | [Dutch](../nl/README.md) | [Hebrew](../he/README.md) | [Vietnamese](../vi/README.md) | [Indonesian](./README.md) | [Malay](../ms/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Swahili](../sw/README.md) | [Hungarian](../hu/README.md) | [Czech](../cs/README.md) | [Slovak](../sk/README.md) | [Romanian](../ro/README.md) | [Bulgarian](../bg/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Croatian](../hr/README.md) | [Slovenian](../sl/README.md) | [Ukrainian](../uk/README.md) | [Burmese (Myanmar)](../my/README.md) + +#### Bergabunglah dengan Komunitas + +[![Azure AI Discord](https://dcbadge.limes.pink/api/server/kzRShWzttr)](https://discord.gg/kzRShWzttr) + +# Pembelajaran Mesin untuk Pemula - Kurikulum + +> 🌍 Jelajahi dunia saat kita mempelajari Pembelajaran Mesin melalui budaya dunia 🌍 + +Cloud Advocates di Microsoft dengan senang hati menawarkan kurikulum 12 minggu, 26 pelajaran tentang **Pembelajaran Mesin**. Dalam kurikulum ini, Anda akan mempelajari apa yang kadang disebut sebagai **pembelajaran mesin klasik**, menggunakan Scikit-learn sebagai pustaka utama dan menghindari pembelajaran mendalam, yang dibahas dalam [kurikulum AI untuk Pemula](https://aka.ms/ai4beginners). Pasangkan pelajaran ini dengan kurikulum kami ['Data Science untuk Pemula'](https://aka.ms/ds4beginners), juga! + +Jelajahi dunia bersama kami saat kami menerapkan teknik klasik ini pada data dari berbagai wilayah dunia. Setiap pelajaran mencakup kuis sebelum dan sesudah pelajaran, instruksi tertulis untuk menyelesaikan pelajaran, solusi, tugas, dan lainnya. Pendekatan berbasis proyek kami memungkinkan Anda belajar sambil membangun, cara yang terbukti untuk membuat keterampilan baru 'melekat'. + +**✍️ Terima kasih yang tulus kepada penulis kami** Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Anirban Mukherjee, Ornella Altunyan, Ruth Yakubu, dan Amy Boyd + +**🎨 Terima kasih juga kepada ilustrator kami** Tomomi Imura, Dasani Madipalli, dan Jen Looper + +**🙏 Terima kasih khusus 🙏 kepada penulis, pengulas, dan kontributor konten Microsoft Student Ambassador**, terutama Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila, dan Snigdha Agarwal + +**🤩 Terima kasih tambahan kepada Microsoft Student Ambassadors Eric Wanjau, Jasleen Sondhi, dan Vidushi Gupta untuk pelajaran R kami!** + +# Memulai + +Ikuti langkah-langkah ini: +1. **Fork Repository**: Klik tombol "Fork" di sudut kanan atas halaman ini. +2. **Clone Repository**: `git clone https://github.com/microsoft/ML-For-Beginners.git` + +> [temukan semua sumber daya tambahan untuk kursus ini dalam koleksi Microsoft Learn kami](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) + +**[Siswa](https://aka.ms/student-page)**, untuk menggunakan kurikulum ini, fork seluruh repo ke akun GitHub Anda sendiri dan selesaikan latihan secara mandiri atau bersama kelompok: + +- Mulailah dengan kuis sebelum pelajaran. +- Baca pelajaran dan selesaikan aktivitas, berhenti dan refleksi pada setiap pemeriksaan pengetahuan. +- Cobalah untuk membuat proyek dengan memahami pelajaran daripada menjalankan kode solusi; namun kode tersebut tersedia di folder `/solution` di setiap pelajaran berbasis proyek. +- Ikuti kuis setelah pelajaran. +- Selesaikan tantangan. +- Selesaikan tugas. +- Setelah menyelesaikan grup pelajaran, kunjungi [Papan Diskusi](https://github.com/microsoft/ML-For-Beginners/discussions) dan "belajar dengan lantang" dengan mengisi rubrik PAT yang sesuai. 'PAT' adalah Alat Penilaian Kemajuan yang merupakan rubrik yang Anda isi untuk memperdalam pembelajaran Anda. Anda juga dapat bereaksi terhadap PAT lain sehingga kita dapat belajar bersama. + +> Untuk studi lebih lanjut, kami merekomendasikan mengikuti modul dan jalur pembelajaran [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott). + +**Guru**, kami telah [menyertakan beberapa saran](for-teachers.md) tentang cara menggunakan kurikulum ini. + +--- + +## Panduan video + +Beberapa pelajaran tersedia dalam bentuk video pendek. Anda dapat menemukan semuanya di dalam pelajaran, atau di [playlist ML untuk Pemula di saluran YouTube Microsoft Developer](https://aka.ms/ml-beginners-videos) dengan mengklik gambar di bawah ini. + +[![Banner ML untuk pemula](../../images/ml-for-beginners-video-banner.png)](https://aka.ms/ml-beginners-videos) + +--- + +## Kenali Tim + +[![Video promo](../../images/ml.gif)](https://youtu.be/Tj1XWrDSYJU) + +**Gif oleh** [Mohit Jaisal](https://linkedin.com/in/mohitjaisal) + +> 🎥 Klik gambar di atas untuk video tentang proyek dan orang-orang yang membuatnya! + +--- + +## Pedagogi + +Kami telah memilih dua prinsip pedagogis saat membangun kurikulum ini: memastikan bahwa kurikulum ini berbasis proyek **praktis** dan mencakup **kuis yang sering**. Selain itu, kurikulum ini memiliki **tema umum** untuk memberikan kohesi. + +Dengan memastikan bahwa konten selaras dengan proyek, proses pembelajaran menjadi lebih menarik bagi siswa dan retensi konsep akan meningkat. Selain itu, kuis dengan risiko rendah sebelum kelas menetapkan niat siswa untuk mempelajari topik, sementara kuis kedua setelah kelas memastikan retensi lebih lanjut. Kurikulum ini dirancang agar fleksibel dan menyenangkan serta dapat diambil secara keseluruhan atau sebagian. Proyek dimulai dari yang kecil dan menjadi semakin kompleks pada akhir siklus 12 minggu. Kurikulum ini juga mencakup postscript tentang aplikasi dunia nyata dari ML, yang dapat digunakan sebagai kredit tambahan atau sebagai dasar untuk diskusi. + +> Temukan [Kode Etik](CODE_OF_CONDUCT.md), [Kontribusi](CONTRIBUTING.md), dan panduan [Terjemahan](TRANSLATIONS.md) kami. Kami menyambut umpan balik konstruktif Anda! + +## Setiap pelajaran mencakup + +- sketchnote opsional +- video tambahan opsional +- panduan video (beberapa pelajaran saja) +- [kuis pemanasan sebelum pelajaran](https://ff-quizzes.netlify.app/en/ml/) +- pelajaran tertulis +- untuk pelajaran berbasis proyek, panduan langkah demi langkah tentang cara membangun proyek +- pemeriksaan pengetahuan +- tantangan +- bacaan tambahan +- tugas +- [kuis setelah pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +> **Catatan tentang bahasa**: Pelajaran ini sebagian besar ditulis dalam Python, tetapi banyak juga yang tersedia dalam R. Untuk menyelesaikan pelajaran R, buka folder `/solution` dan cari pelajaran R. Mereka menyertakan ekstensi .rmd yang mewakili file **R Markdown** yang dapat didefinisikan sebagai penggabungan `code chunks` (dari R atau bahasa lain) dan `YAML header` (yang memandu cara memformat output seperti PDF) dalam dokumen `Markdown`. Dengan demikian, ini berfungsi sebagai kerangka kerja penulisan yang luar biasa untuk ilmu data karena memungkinkan Anda menggabungkan kode Anda, outputnya, dan pemikiran Anda dengan memungkinkan Anda menuliskannya dalam Markdown. Selain itu, dokumen R Markdown dapat dirender ke format output seperti PDF, HTML, atau Word. + +> **Catatan tentang kuis**: Semua kuis terdapat dalam [folder Aplikasi Kuis](../../quiz-app), dengan total 52 kuis masing-masing tiga pertanyaan. Mereka terhubung dari dalam pelajaran tetapi aplikasi kuis dapat dijalankan secara lokal; ikuti instruksi di folder `quiz-app` untuk meng-host secara lokal atau menerapkan ke Azure. + +| Nomor Pelajaran | Topik | Kelompok Pelajaran | Tujuan Pembelajaran | Pelajaran Terkait | Penulis | +| :-------------: | :------------------------------------------------------------: | :---------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------- | :-----------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------: | +| 01 | Pengantar pembelajaran mesin | [Pengantar](1-Introduction/README.md) | Pelajari konsep dasar di balik pembelajaran mesin | [Pelajaran](1-Introduction/1-intro-to-ML/README.md) | Muhammad | +| 02 | Sejarah pembelajaran mesin | [Pengantar](1-Introduction/README.md) | Pelajari sejarah yang mendasari bidang ini | [Pelajaran](1-Introduction/2-history-of-ML/README.md) | Jen dan Amy | +| 03 | Keadilan dalam pembelajaran mesin | [Pengantar](1-Introduction/README.md) | Apa saja isu filosofis penting tentang keadilan yang harus dipertimbangkan siswa saat membangun dan menerapkan model ML? | [Pelajaran](1-Introduction/3-fairness/README.md) | Tomomi | +| 04 | Teknik untuk pembelajaran mesin | [Introduction](1-Introduction/README.md) | Teknik apa yang digunakan peneliti ML untuk membangun model ML? | [Lesson](1-Introduction/4-techniques-of-ML/README.md) | Chris dan Jen | +| 05 | Pengantar regresi | [Regression](2-Regression/README.md) | Mulai dengan Python dan Scikit-learn untuk model regresi | +
            • [Python](2-Regression/1-Tools/README.md)
            • [R](../../2-Regression/1-Tools/solution/R/lesson_1.html)
            |
            • Jen
            • Eric Wanjau
            | +| 06 | Harga labu di Amerika Utara 🎃 | [Regression](2-Regression/README.md) | Visualisasikan dan bersihkan data sebagai persiapan untuk ML |
            • [Python](2-Regression/2-Data/README.md)
            • [R](../../2-Regression/2-Data/solution/R/lesson_2.html)
            |
            • Jen
            • Eric Wanjau
            | +| 07 | Harga labu di Amerika Utara 🎃 | [Regression](2-Regression/README.md) | Bangun model regresi linear dan polinomial |
            • [Python](2-Regression/3-Linear/README.md)
            • [R](../../2-Regression/3-Linear/solution/R/lesson_3.html)
            |
            • Jen dan Dmitry
            • Eric Wanjau
            | +| 08 | Harga labu di Amerika Utara 🎃 | [Regression](2-Regression/README.md) | Bangun model regresi logistik |
            • [Python](2-Regression/4-Logistic/README.md)
            • [R](../../2-Regression/4-Logistic/solution/R/lesson_4.html)
            |
            • Jen
            • Eric Wanjau
            | +| 09 | Aplikasi Web 🔌 | [Web App](3-Web-App/README.md) | Bangun aplikasi web untuk menggunakan model yang telah dilatih | [Python](3-Web-App/1-Web-App/README.md) | Jen | +| 10 | Pengantar klasifikasi | [Classification](4-Classification/README.md) | Bersihkan, persiapkan, dan visualisasikan data Anda; pengantar klasifikasi |
            • [Python](4-Classification/1-Introduction/README.md)
            • [R](../../4-Classification/1-Introduction/solution/R/lesson_10.html) |
              • Jen dan Cassie
              • Eric Wanjau
              | +| 11 | Masakan Asia dan India yang lezat 🍜 | [Classification](4-Classification/README.md) | Pengantar pengklasifikasi |
              • [Python](4-Classification/2-Classifiers-1/README.md)
              • [R](../../4-Classification/2-Classifiers-1/solution/R/lesson_11.html) |
                • Jen dan Cassie
                • Eric Wanjau
                | +| 12 | Masakan Asia dan India yang lezat 🍜 | [Classification](4-Classification/README.md) | Pengklasifikasi lebih lanjut |
                • [Python](4-Classification/3-Classifiers-2/README.md)
                • [R](../../4-Classification/3-Classifiers-2/solution/R/lesson_12.html) |
                  • Jen dan Cassie
                  • Eric Wanjau
                  | +| 13 | Masakan Asia dan India yang lezat 🍜 | [Classification](4-Classification/README.md) | Bangun aplikasi web rekomendasi menggunakan model Anda | [Python](4-Classification/4-Applied/README.md) | Jen | +| 14 | Pengantar pengelompokan | [Clustering](5-Clustering/README.md) | Bersihkan, persiapkan, dan visualisasikan data Anda; pengantar pengelompokan |
                  • [Python](5-Clustering/1-Visualize/README.md)
                  • [R](../../5-Clustering/1-Visualize/solution/R/lesson_14.html) |
                    • Jen
                    • Eric Wanjau
                    | +| 15 | Menjelajahi selera musik Nigeria 🎧 | [Clustering](5-Clustering/README.md) | Jelajahi metode pengelompokan K-Means |
                    • [Python](5-Clustering/2-K-Means/README.md)
                    • [R](../../5-Clustering/2-K-Means/solution/R/lesson_15.html) |
                      • Jen
                      • Eric Wanjau
                      | +| 16 | Pengantar pemrosesan bahasa alami ☕️ | [Natural language processing](6-NLP/README.md) | Pelajari dasar-dasar NLP dengan membangun bot sederhana | [Python](6-NLP/1-Introduction-to-NLP/README.md) | Stephen | +| 17 | Tugas umum NLP ☕️ | [Natural language processing](6-NLP/README.md) | Perdalam pengetahuan NLP Anda dengan memahami tugas-tugas umum yang diperlukan saat menangani struktur bahasa | [Python](6-NLP/2-Tasks/README.md) | Stephen | +| 18 | Analisis terjemahan dan sentimen ♥️ | [Natural language processing](6-NLP/README.md) | Analisis terjemahan dan sentimen dengan karya Jane Austen | [Python](6-NLP/3-Translation-Sentiment/README.md) | Stephen | +| 19 | Hotel romantis di Eropa ♥️ | [Natural language processing](6-NLP/README.md) | Analisis sentimen dengan ulasan hotel 1 | [Python](6-NLP/4-Hotel-Reviews-1/README.md) | Stephen | +| 20 | Hotel romantis di Eropa ♥️ | [Natural language processing](6-NLP/README.md) | Analisis sentimen dengan ulasan hotel 2 | [Python](6-NLP/5-Hotel-Reviews-2/README.md) | Stephen | +| 21 | Pengantar peramalan deret waktu | [Time series](7-TimeSeries/README.md) | Pengantar peramalan deret waktu | [Python](7-TimeSeries/1-Introduction/README.md) | Francesca | +| 22 | ⚡️ Penggunaan daya dunia ⚡️ - peramalan deret waktu dengan ARIMA | [Time series](7-TimeSeries/README.md) | Peramalan deret waktu dengan ARIMA | [Python](7-TimeSeries/2-ARIMA/README.md) | Francesca | +| 23 | ⚡️ Penggunaan daya dunia ⚡️ - peramalan deret waktu dengan SVR | [Time series](7-TimeSeries/README.md) | Peramalan deret waktu dengan Support Vector Regressor | [Python](7-TimeSeries/3-SVR/README.md) | Anirban | +| 24 | Pengantar pembelajaran penguatan | [Reinforcement learning](8-Reinforcement/README.md) | Pengantar pembelajaran penguatan dengan Q-Learning | [Python](8-Reinforcement/1-QLearning/README.md) | Dmitry | +| 25 | Bantu Peter menghindari serigala! 🐺 | [Reinforcement learning](8-Reinforcement/README.md) | Gym pembelajaran penguatan | [Python](8-Reinforcement/2-Gym/README.md) | Dmitry | +| Postscript | Skenario dan aplikasi ML di dunia nyata | [ML in the Wild](9-Real-World/README.md) | Aplikasi dunia nyata yang menarik dan mengungkapkan tentang ML klasik | [Lesson](9-Real-World/1-Applications/README.md) | Tim | +| Postscript | Debugging Model ML menggunakan dashboard RAI | [ML in the Wild](9-Real-World/README.md) | Debugging Model dalam Pembelajaran Mesin menggunakan komponen dashboard Responsible AI | [Lesson](9-Real-World/2-Debugging-ML-Models/README.md) | Ruth Yakubu | + +> [temukan semua sumber daya tambahan untuk kursus ini di koleksi Microsoft Learn kami](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) + +## Akses offline + +Anda dapat menjalankan dokumentasi ini secara offline dengan menggunakan [Docsify](https://docsify.js.org/#/). Fork repositori ini, [instal Docsify](https://docsify.js.org/#/quickstart) di mesin lokal Anda, lalu di folder root repositori ini, ketik `docsify serve`. Situs web akan disajikan di port 3000 di localhost Anda: `localhost:3000`. + +## PDF + +Temukan PDF kurikulum dengan tautan [di sini](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf). + +## 🎒 Kursus Lainnya + +Tim kami memproduksi kursus lainnya! Lihat: + +- [Generative AI untuk Pemula](https://aka.ms/genai-beginners) +- [Generative AI untuk Pemula .NET](https://github.com/microsoft/Generative-AI-for-beginners-dotnet) +- [Generative AI dengan JavaScript](https://github.com/microsoft/generative-ai-with-javascript) +- [Generative AI dengan Java](https://github.com/microsoft/Generative-AI-for-beginners-java) +- [AI untuk Pemula](https://aka.ms/ai-beginners) +- [Data Science untuk Pemula](https://aka.ms/datascience-beginners) +- [ML untuk Pemula](https://aka.ms/ml-beginners) +- [Keamanan Siber untuk Pemula](https://github.com/microsoft/Security-101) +- [Pengembangan Web untuk Pemula](https://aka.ms/webdev-beginners) +- [IoT untuk Pemula](https://aka.ms/iot-beginners) +- [Pengembangan XR untuk Pemula](https://github.com/microsoft/xr-development-for-beginners) +- [Menguasai GitHub Copilot untuk Pemrograman Berpasangan](https://github.com/microsoft/Mastering-GitHub-Copilot-for-Paired-Programming) +- [Menguasai GitHub Copilot untuk Pengembang C#/.NET](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers) +- [Pilih Petualangan Copilot Anda Sendiri](https://github.com/microsoft/CopilotAdventures) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/SECURITY.md b/translations/id/SECURITY.md new file mode 100644 index 00000000..6ab64765 --- /dev/null +++ b/translations/id/SECURITY.md @@ -0,0 +1,51 @@ + +## Keamanan + +Microsoft sangat memperhatikan keamanan produk dan layanan perangkat lunaknya, termasuk semua repositori kode sumber yang dikelola melalui organisasi GitHub kami, yang mencakup [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), dan [organisasi GitHub kami](https://opensource.microsoft.com/). + +Jika Anda yakin telah menemukan kerentanan keamanan di salah satu repositori milik Microsoft yang sesuai dengan [definisi kerentanan keamanan Microsoft](https://docs.microsoft.com/previous-versions/tn-archive/cc751383(v=technet.10)?WT.mc_id=academic-77952-leestott), harap laporkan kepada kami seperti yang dijelaskan di bawah ini. + +## Melaporkan Masalah Keamanan + +**Harap jangan melaporkan kerentanan keamanan melalui isu publik di GitHub.** + +Sebaliknya, laporkan melalui Microsoft Security Response Center (MSRC) di [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). + +Jika Anda lebih memilih untuk mengirimkan laporan tanpa masuk, kirim email ke [secure@microsoft.com](mailto:secure@microsoft.com). Jika memungkinkan, enkripsi pesan Anda dengan kunci PGP kami; unduh dari [halaman Kunci PGP Microsoft Security Response Center](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). + +Anda seharusnya menerima respons dalam waktu 24 jam. Jika karena alasan tertentu Anda tidak menerima respons, harap tindak lanjuti melalui email untuk memastikan kami menerima pesan asli Anda. Informasi tambahan dapat ditemukan di [microsoft.com/msrc](https://www.microsoft.com/msrc). + +Harap sertakan informasi yang diminta di bawah ini (sebanyak yang dapat Anda berikan) untuk membantu kami memahami sifat dan cakupan masalah yang mungkin terjadi: + + * Jenis masalah (misalnya buffer overflow, injeksi SQL, cross-site scripting, dll.) + * Jalur lengkap file sumber yang terkait dengan manifestasi masalah + * Lokasi kode sumber yang terpengaruh (tag/cabang/commit atau URL langsung) + * Konfigurasi khusus yang diperlukan untuk mereproduksi masalah + * Instruksi langkah demi langkah untuk mereproduksi masalah + * Bukti konsep atau kode eksploitasi (jika memungkinkan) + * Dampak masalah, termasuk bagaimana penyerang dapat mengeksploitasi masalah tersebut + +Informasi ini akan membantu kami memproses laporan Anda dengan lebih cepat. + +Jika Anda melaporkan untuk program bug bounty, laporan yang lebih lengkap dapat berkontribusi pada penghargaan bounty yang lebih tinggi. Silakan kunjungi halaman [Program Bug Bounty Microsoft](https://microsoft.com/msrc/bounty) untuk informasi lebih lanjut tentang program aktif kami. + +## Bahasa yang Disukai + +Kami lebih memilih semua komunikasi dilakukan dalam bahasa Inggris. + +## Kebijakan + +Microsoft mengikuti prinsip [Pengungkapan Kerentanan yang Terkoordinasi](https://www.microsoft.com/en-us/msrc/cvd). + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/SUPPORT.md b/translations/id/SUPPORT.md new file mode 100644 index 00000000..f042b080 --- /dev/null +++ b/translations/id/SUPPORT.md @@ -0,0 +1,24 @@ + +# Dukungan +## Cara melaporkan masalah dan mendapatkan bantuan + +Proyek ini menggunakan GitHub Issues untuk melacak bug dan permintaan fitur. Harap cari masalah yang sudah ada sebelum melaporkan masalah baru untuk menghindari duplikasi. Untuk masalah baru, laporkan bug atau permintaan fitur Anda sebagai Issue baru. + +Untuk bantuan dan pertanyaan tentang penggunaan proyek ini, buatlah sebuah Issue. + +## Kebijakan Dukungan Microsoft + +Dukungan untuk repositori ini terbatas pada sumber daya yang tercantum di atas. + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/docs/_sidebar.md b/translations/id/docs/_sidebar.md new file mode 100644 index 00000000..50f64cf4 --- /dev/null +++ b/translations/id/docs/_sidebar.md @@ -0,0 +1,57 @@ + +- Pendahuluan + - [Pendahuluan tentang Machine Learning](../1-Introduction/1-intro-to-ML/README.md) + - [Sejarah Machine Learning](../1-Introduction/2-history-of-ML/README.md) + - [ML dan Keadilan](../1-Introduction/3-fairness/README.md) + - [Teknik-teknik ML](../1-Introduction/4-techniques-of-ML/README.md) + +- Regresi + - [Alat yang Digunakan](../2-Regression/1-Tools/README.md) + - [Data](../2-Regression/2-Data/README.md) + - [Regresi Linear](../2-Regression/3-Linear/README.md) + - [Regresi Logistik](../2-Regression/4-Logistic/README.md) + +- Membangun Aplikasi Web + - [Aplikasi Web](../3-Web-App/1-Web-App/README.md) + +- Klasifikasi + - [Pendahuluan tentang Klasifikasi](../4-Classification/1-Introduction/README.md) + - [Classifier 1](../4-Classification/2-Classifiers-1/README.md) + - [Classifier 2](../4-Classification/3-Classifiers-2/README.md) + - [ML Terapan](../4-Classification/4-Applied/README.md) + +- Klasterisasi + - [Visualisasi Data Anda](../5-Clustering/1-Visualize/README.md) + - [K-Means](../5-Clustering/2-K-Means/README.md) + +- NLP + - [Pendahuluan tentang NLP](../6-NLP/1-Introduction-to-NLP/README.md) + - [Tugas-tugas NLP](../6-NLP/2-Tasks/README.md) + - [Terjemahan dan Sentimen](../6-NLP/3-Translation-Sentiment/README.md) + - [Ulasan Hotel 1](../6-NLP/4-Hotel-Reviews-1/README.md) + - [Ulasan Hotel 2](../6-NLP/5-Hotel-Reviews-2/README.md) + +- Peramalan Deret Waktu + - [Pendahuluan tentang Peramalan Deret Waktu](../7-TimeSeries/1-Introduction/README.md) + - [ARIMA](../7-TimeSeries/2-ARIMA/README.md) + - [SVR](../7-TimeSeries/3-SVR/README.md) + +- Pembelajaran Penguatan + - [Q-Learning](../8-Reinforcement/1-QLearning/README.md) + - [Gym](../8-Reinforcement/2-Gym/README.md) + +- ML di Dunia Nyata + - [Aplikasi](../9-Real-World/1-Applications/README.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/for-teachers.md b/translations/id/for-teachers.md new file mode 100644 index 00000000..2d428370 --- /dev/null +++ b/translations/id/for-teachers.md @@ -0,0 +1,37 @@ + +## Untuk Pendidik + +Apakah Anda ingin menggunakan kurikulum ini di kelas Anda? Silakan saja! + +Faktanya, Anda dapat menggunakannya langsung di GitHub dengan menggunakan GitHub Classroom. + +Untuk melakukannya, fork repositori ini. Anda akan perlu membuat repositori untuk setiap pelajaran, jadi Anda harus memisahkan setiap folder ke dalam repositori terpisah. Dengan cara itu, [GitHub Classroom](https://classroom.github.com/classrooms) dapat mengambil setiap pelajaran secara terpisah. + +Instruksi lengkap ini [petunjuk lengkap](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/) akan memberikan gambaran tentang cara mengatur kelas Anda. + +## Menggunakan repositori seperti apa adanya + +Jika Anda ingin menggunakan repositori ini seperti yang ada saat ini, tanpa menggunakan GitHub Classroom, itu juga bisa dilakukan. Anda hanya perlu berkomunikasi dengan siswa Anda tentang pelajaran mana yang akan dipelajari bersama. + +Dalam format online (Zoom, Teams, atau lainnya), Anda dapat membentuk breakout room untuk kuis, dan membimbing siswa agar siap belajar. Kemudian undang siswa untuk mengikuti kuis dan mengirimkan jawaban mereka sebagai 'issues' pada waktu tertentu. Anda juga dapat melakukan hal yang sama dengan tugas, jika Anda ingin siswa bekerja secara kolaboratif secara terbuka. + +Jika Anda lebih suka format yang lebih privat, minta siswa Anda untuk fork kurikulum ini, pelajaran demi pelajaran, ke repositori GitHub mereka sendiri sebagai repositori privat, dan berikan akses kepada Anda. Kemudian mereka dapat menyelesaikan kuis dan tugas secara privat dan mengirimkannya kepada Anda melalui issues di repositori kelas Anda. + +Ada banyak cara untuk membuat ini berhasil dalam format kelas online. Beri tahu kami apa yang paling cocok untuk Anda! + +## Berikan pendapat Anda kepada kami! + +Kami ingin membuat kurikulum ini bekerja untuk Anda dan siswa Anda. Berikan kami [masukan](https://forms.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR2humCsRZhxNuI79cm6n0hRUQzRVVU9VVlU5UlFLWTRLWlkyQUxORTg5WS4u). + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/quiz-app/README.md b/translations/id/quiz-app/README.md new file mode 100644 index 00000000..2a822b91 --- /dev/null +++ b/translations/id/quiz-app/README.md @@ -0,0 +1,127 @@ + +# Kuis + +Kuis ini adalah kuis sebelum dan sesudah kuliah untuk kurikulum ML di https://aka.ms/ml-beginners + +## Pengaturan Proyek + +``` +npm install +``` + +### Kompilasi dan pemuatan ulang untuk pengembangan + +``` +npm run serve +``` + +### Kompilasi dan minimisasi untuk produksi + +``` +npm run build +``` + +### Linting dan perbaikan file + +``` +npm run lint +``` + +### Sesuaikan konfigurasi + +Lihat [Referensi Konfigurasi](https://cli.vuejs.org/config/). + +Kredit: Terima kasih kepada versi asli dari aplikasi kuis ini: https://github.com/arpan45/simple-quiz-vue + +## Penerapan ke Azure + +Berikut panduan langkah demi langkah untuk membantu Anda memulai: + +1. Fork Repository GitHub +Pastikan kode aplikasi web statis Anda ada di repository GitHub Anda. Fork repository ini. + +2. Buat Azure Static Web App +- Buat [akun Azure](http://azure.microsoft.com) +- Pergi ke [portal Azure](https://portal.azure.com) +- Klik “Create a resource” dan cari “Static Web App”. +- Klik “Create”. + +3. Konfigurasi Static Web App +- Dasar: + - Subscription: Pilih langganan Azure Anda. + - Resource Group: Buat grup sumber daya baru atau gunakan yang sudah ada. + - Name: Berikan nama untuk aplikasi web statis Anda. + - Region: Pilih wilayah yang paling dekat dengan pengguna Anda. + +- #### Detail Penerapan: + - Source: Pilih “GitHub”. + - GitHub Account: Otorisasi Azure untuk mengakses akun GitHub Anda. + - Organization: Pilih organisasi GitHub Anda. + - Repository: Pilih repository yang berisi aplikasi web statis Anda. + - Branch: Pilih cabang yang ingin Anda gunakan untuk penerapan. + +- #### Detail Build: + - Build Presets: Pilih framework yang digunakan untuk membangun aplikasi Anda (misalnya, React, Angular, Vue, dll.). + - App Location: Tentukan folder yang berisi kode aplikasi Anda (misalnya, / jika berada di root). + - API Location: Jika Anda memiliki API, tentukan lokasinya (opsional). + - Output Location: Tentukan folder tempat output build dihasilkan (misalnya, build atau dist). + +4. Tinjau dan Buat +Tinjau pengaturan Anda dan klik “Create”. Azure akan menyiapkan sumber daya yang diperlukan dan membuat file workflow GitHub Actions di repository Anda. + +5. Workflow GitHub Actions +Azure akan secara otomatis membuat file workflow GitHub Actions di repository Anda (.github/workflows/azure-static-web-apps-.yml). Workflow ini akan menangani proses build dan penerapan. + +6. Pantau Penerapan +Pergi ke tab “Actions” di repository GitHub Anda. +Anda akan melihat workflow yang sedang berjalan. Workflow ini akan membangun dan menerapkan aplikasi web statis Anda ke Azure. +Setelah workflow selesai, aplikasi Anda akan aktif di URL Azure yang diberikan. + +### Contoh File Workflow + +Berikut adalah contoh file workflow GitHub Actions: +name: Azure Static Web Apps CI/CD +``` +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened, closed] + branches: + - main + +jobs: + build_and_deploy_job: + runs-on: ubuntu-latest + name: Build and Deploy Job + steps: + - uses: actions/checkout@v2 + - name: Build And Deploy + id: builddeploy + uses: Azure/static-web-apps-deploy@v1 + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }} + repo_token: ${{ secrets.GITHUB_TOKEN }} + action: "upload" + app_location: "/quiz-app" # App source code path + api_location: ""API source code path optional + output_location: "dist" #Built app content directory - optional +``` + +### Sumber Daya Tambahan +- [Dokumentasi Azure Static Web Apps](https://learn.microsoft.com/azure/static-web-apps/getting-started) +- [Dokumentasi GitHub Actions](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/sketchnotes/LICENSE.md b/translations/id/sketchnotes/LICENSE.md new file mode 100644 index 00000000..00acf7d2 --- /dev/null +++ b/translations/id/sketchnotes/LICENSE.md @@ -0,0 +1,175 @@ + +Hak Atribusi-BerbagiSerupa 4.0 Internasional + +======================================================================= + +Creative Commons Corporation ("Creative Commons") bukanlah firma hukum dan tidak menyediakan layanan hukum atau nasihat hukum. Distribusi lisensi publik Creative Commons tidak menciptakan hubungan pengacara-klien atau hubungan lainnya. Creative Commons menyediakan lisensi dan informasi terkaitnya dalam kondisi "apa adanya". Creative Commons tidak memberikan jaminan terkait lisensinya, materi apa pun yang dilisensikan di bawah syarat dan ketentuannya, atau informasi terkait lainnya. Creative Commons menolak semua tanggung jawab atas kerugian yang diakibatkan oleh penggunaannya sejauh yang diizinkan oleh hukum. + +Menggunakan Lisensi Publik Creative Commons + +Lisensi publik Creative Commons menyediakan serangkaian syarat dan ketentuan standar yang dapat digunakan oleh pencipta dan pemegang hak lainnya untuk berbagi karya asli dan materi lain yang tunduk pada hak cipta serta hak tertentu lainnya yang ditentukan dalam lisensi publik di bawah ini. Pertimbangan berikut hanya untuk tujuan informasi, tidak mencakup semua hal, dan bukan bagian dari lisensi kami. + + Pertimbangan untuk pemberi lisensi: Lisensi publik kami + dimaksudkan untuk digunakan oleh mereka yang berwenang memberikan + izin kepada publik untuk menggunakan materi dengan cara yang + seharusnya dibatasi oleh hak cipta dan hak tertentu lainnya. + Lisensi kami tidak dapat dibatalkan. Pemberi lisensi harus membaca + dan memahami syarat dan ketentuan lisensi yang mereka pilih + sebelum menerapkannya. Pemberi lisensi juga harus memastikan + semua hak yang diperlukan sebelum menerapkan lisensi kami agar + publik dapat menggunakan materi sebagaimana yang diharapkan. + Pemberi lisensi harus dengan jelas menandai materi apa pun yang + tidak tunduk pada lisensi. Ini termasuk materi lain yang + dilisensikan oleh CC, atau materi yang digunakan berdasarkan + pengecualian atau pembatasan hak cipta. Pertimbangan lebih lanjut + untuk pemberi lisensi: + wiki.creativecommons.org/Considerations_for_licensors + + Pertimbangan untuk publik: Dengan menggunakan salah satu lisensi + publik kami, pemberi lisensi memberikan izin kepada publik untuk + menggunakan materi yang dilisensikan di bawah syarat dan ketentuan + yang ditentukan. Jika izin pemberi lisensi tidak diperlukan untuk + alasan apa pun—misalnya, karena pengecualian atau pembatasan hak + cipta yang berlaku—maka penggunaan tersebut tidak diatur oleh + lisensi. Lisensi kami hanya memberikan izin di bawah hak cipta + dan hak tertentu lainnya yang berwenang diberikan oleh pemberi + lisensi. Penggunaan materi yang dilisensikan mungkin masih + dibatasi karena alasan lain, termasuk karena pihak lain memiliki + hak cipta atau hak lainnya atas materi tersebut. Pemberi lisensi + dapat membuat permintaan khusus, seperti meminta agar semua + perubahan ditandai atau dijelaskan. Meskipun tidak diwajibkan + oleh lisensi kami, Anda dianjurkan untuk menghormati permintaan + tersebut jika memungkinkan. Pertimbangan lebih lanjut untuk + publik: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Lisensi Publik Creative Commons Atribusi-BerbagiSerupa 4.0 Internasional + +Dengan menggunakan Hak yang Dilisensikan (didefinisikan di bawah), Anda menerima dan setuju untuk terikat oleh syarat dan ketentuan Lisensi Publik Creative Commons Atribusi-BerbagiSerupa 4.0 Internasional ("Lisensi Publik"). Sejauh Lisensi Publik ini dapat ditafsirkan sebagai kontrak, Anda diberikan Hak yang Dilisensikan sebagai pertimbangan atas penerimaan Anda terhadap syarat dan ketentuan ini, dan Pemberi Lisensi memberikan hak tersebut kepada Anda sebagai pertimbangan atas manfaat yang diterima oleh Pemberi Lisensi dari membuat Materi yang Dilisensikan tersedia di bawah syarat dan ketentuan ini. + +Bagian 1 -- Definisi. + + a. Materi yang Diadaptasi berarti materi yang tunduk pada Hak Cipta dan Hak Serupa yang berasal dari atau didasarkan pada Materi yang Dilisensikan dan di mana Materi yang Dilisensikan diterjemahkan, diubah, diatur, diubah bentuk, atau dimodifikasi dengan cara lain yang memerlukan izin di bawah Hak Cipta dan Hak Serupa yang dimiliki oleh Pemberi Lisensi. Untuk tujuan Lisensi Publik ini, jika Materi yang Dilisensikan adalah karya musik, pertunjukan, atau rekaman suara, Materi yang Diadaptasi selalu dihasilkan ketika Materi yang Dilisensikan disinkronkan dalam hubungan waktu dengan gambar bergerak. + + b. Lisensi Adapter berarti lisensi yang Anda terapkan pada Hak Cipta dan Hak Serupa Anda dalam kontribusi Anda pada Materi yang Diadaptasi sesuai dengan syarat dan ketentuan Lisensi Publik ini. + + c. Lisensi yang Kompatibel dengan BY-SA berarti lisensi yang tercantum di creativecommons.org/compatiblelicenses, disetujui oleh Creative Commons sebagai setara dengan Lisensi Publik ini. + + d. Hak Cipta dan Hak Serupa berarti hak cipta dan/atau hak serupa yang terkait erat dengan hak cipta termasuk, tanpa batasan, hak pertunjukan, penyiaran, rekaman suara, dan Hak Basis Data Sui Generis, tanpa memperhatikan bagaimana hak tersebut diberi label atau dikategorikan. Untuk tujuan Lisensi Publik ini, hak yang ditentukan dalam Bagian 2(b)(1)-(2) bukanlah Hak Cipta dan Hak Serupa. + + e. Langkah Teknologi yang Efektif berarti langkah-langkah yang, tanpa otoritas yang tepat, tidak dapat dihindari di bawah hukum yang memenuhi kewajiban berdasarkan Pasal 11 Perjanjian Hak Cipta WIPO yang diadopsi pada 20 Desember 1996, dan/atau perjanjian internasional serupa. + + f. Pengecualian dan Pembatasan berarti penggunaan wajar, transaksi wajar, dan/atau pengecualian atau pembatasan lain terhadap Hak Cipta dan Hak Serupa yang berlaku untuk penggunaan Anda atas Materi yang Dilisensikan. + + g. Elemen Lisensi berarti atribut lisensi yang tercantum dalam nama Lisensi Publik Creative Commons. Elemen Lisensi dari Lisensi Publik ini adalah Atribusi dan BerbagiSerupa. + + h. Materi yang Dilisensikan berarti karya seni atau sastra, basis data, atau materi lain yang diterapkan oleh Pemberi Lisensi pada Lisensi Publik ini. + + i. Hak yang Dilisensikan berarti hak yang diberikan kepada Anda sesuai dengan syarat dan ketentuan Lisensi Publik ini, yang terbatas pada semua Hak Cipta dan Hak Serupa yang berlaku untuk penggunaan Anda atas Materi yang Dilisensikan dan yang berwenang dilisensikan oleh Pemberi Lisensi. + + j. Pemberi Lisensi berarti individu atau entitas yang memberikan hak di bawah Lisensi Publik ini. + + k. Berbagi berarti menyediakan materi kepada publik dengan cara atau proses apa pun yang memerlukan izin di bawah Hak yang Dilisensikan, seperti reproduksi, tampilan publik, pertunjukan publik, distribusi, penyebaran, komunikasi, atau impor, dan membuat materi tersedia kepada publik termasuk dengan cara yang memungkinkan anggota masyarakat mengakses materi dari tempat dan waktu yang mereka pilih secara individu. + + l. Hak Basis Data Sui Generis berarti hak selain hak cipta yang dihasilkan dari Directive 96/9/EC dari Parlemen Eropa dan Dewan pada 11 Maret 1996 tentang perlindungan hukum basis data, sebagaimana diubah dan/atau digantikan, serta hak lain yang pada dasarnya setara di mana pun di dunia. + + m. Anda berarti individu atau entitas yang menggunakan Hak yang Dilisensikan di bawah Lisensi Publik ini. "Anda" memiliki arti yang sesuai. + +Bagian 2 -- Lingkup. + + a. Pemberian lisensi. + + 1. Sesuai dengan syarat dan ketentuan Lisensi Publik ini, Pemberi Lisensi dengan ini memberikan kepada Anda lisensi global, bebas royalti, tidak dapat disublisensikan, tidak eksklusif, dan tidak dapat dibatalkan untuk menggunakan Hak yang Dilisensikan dalam Materi yang Dilisensikan untuk: + + a. mereproduksi dan Berbagi Materi yang Dilisensikan, baik secara keseluruhan maupun sebagian; dan + + b. menghasilkan, mereproduksi, dan Berbagi Materi yang Diadaptasi. + + 2. Pengecualian dan Pembatasan. Untuk menghindari keraguan, di mana Pengecualian dan Pembatasan berlaku untuk penggunaan Anda, Lisensi Publik ini tidak berlaku, dan Anda tidak perlu mematuhi syarat dan ketentuannya. + + 3. Jangka waktu. Jangka waktu Lisensi Publik ini ditentukan dalam Bagian 6(a). + + 4. Media dan format; modifikasi teknis yang diizinkan. Pemberi Lisensi mengizinkan Anda untuk menggunakan Hak yang Dilisensikan dalam semua media dan format baik yang sudah ada maupun yang akan dibuat, serta melakukan modifikasi teknis yang diperlukan untuk melakukannya. Pemberi Lisensi melepaskan dan/atau setuju untuk tidak menegaskan hak atau otoritas apa pun untuk melarang Anda melakukan modifikasi teknis yang diperlukan untuk menggunakan Hak yang Dilisensikan, termasuk modifikasi teknis yang diperlukan untuk menghindari Langkah Teknologi yang Efektif. Untuk tujuan Lisensi Publik ini, hanya melakukan modifikasi yang diizinkan oleh Bagian 2(a)(4) tidak pernah menghasilkan Materi yang Diadaptasi. + + 5. Penerima berikutnya. + + a. Penawaran dari Pemberi Lisensi -- Materi yang Dilisensikan. Setiap penerima Materi yang Dilisensikan secara otomatis menerima penawaran dari Pemberi Lisensi untuk menggunakan Hak yang Dilisensikan di bawah syarat dan ketentuan Lisensi Publik ini. + + b. Penawaran tambahan dari Pemberi Lisensi -- Materi yang Diadaptasi. Setiap penerima Materi yang Diadaptasi dari Anda secara otomatis menerima penawaran dari Pemberi Lisensi untuk menggunakan Hak yang Dilisensikan dalam Materi yang Diadaptasi di bawah syarat Lisensi Adapter yang Anda terapkan. + + c. Tidak ada pembatasan penerima berikutnya. Anda tidak boleh menawarkan atau memberlakukan syarat atau ketentuan tambahan atau berbeda pada, atau menerapkan Langkah Teknologi yang Efektif pada, Materi yang Dilisensikan jika hal tersebut membatasi penggunaan Hak yang Dilisensikan oleh penerima Materi yang Dilisensikan. + + 6. Tidak ada dukungan. Tidak ada dalam Lisensi Publik ini yang merupakan atau dapat ditafsirkan sebagai izin untuk menyatakan atau menyiratkan bahwa Anda, atau bahwa penggunaan Anda atas Materi yang Dilisensikan, terhubung dengan, atau disponsori, didukung, atau diberikan status resmi oleh, Pemberi Lisensi atau pihak lain yang ditunjuk untuk menerima atribusi sebagaimana yang disediakan dalam Bagian 3(a)(1)(A)(i). + + b. Hak lainnya. + + 1. Hak moral, seperti hak integritas, tidak dilisensikan di bawah Lisensi Publik ini, begitu juga hak publisitas, privasi, dan/atau hak kepribadian serupa lainnya; namun, sejauh yang memungkinkan, Pemberi Lisensi melepaskan dan/atau setuju untuk tidak menegaskan hak-hak tersebut yang dimiliki oleh Pemberi Lisensi sejauh yang diperlukan untuk memungkinkan Anda menggunakan Hak yang Dilisensikan, tetapi tidak lebih dari itu. + + 2. Hak paten dan merek dagang tidak dilisensikan di bawah Lisensi Publik ini. + + 3. Sejauh yang memungkinkan, Pemberi Lisensi melepaskan hak untuk mengumpulkan royalti dari Anda atas penggunaan Hak yang Dilisensikan, baik secara langsung maupun melalui badan pengumpul di bawah skema lisensi sukarela atau wajib yang dapat dilepaskan. Dalam semua kasus lainnya, Pemberi Lisensi secara tegas mempertahankan hak untuk mengumpulkan royalti tersebut. +Hak atas Sui Generis Database Rights, kemudian basis data di mana Anda memiliki Sui Generis Database Rights (tetapi bukan konten individualnya) adalah Materi yang Diadaptasi, + +termasuk untuk tujuan Bagian 3(b); dan +c. Anda harus mematuhi ketentuan dalam Bagian 3(a) jika Anda Membagikan seluruh atau sebagian besar konten dari basis data. + +Untuk menghindari keraguan, Bagian 4 ini melengkapi dan tidak menggantikan kewajiban Anda berdasarkan Lisensi Publik ini di mana Hak Berlisensi mencakup hak cipta dan hak serupa lainnya. + +### Bagian 5 -- Penafian Jaminan dan Pembatasan Tanggung Jawab + +a. KECUALI JIKA SECARA TERPISAH DIJAMIN OLEH PEMBERI LISENSI, SEJAUH MUNGKIN, PEMBERI LISENSI MENYEDIAKAN MATERI BERLISENSI SEBAGAIMANA ADANYA DAN SEBAGAIMANA TERSEDIA, DAN TIDAK MEMBERIKAN PERNYATAAN ATAU JAMINAN DALAM BENTUK APA PUN TERKAIT MATERI BERLISENSI, BAIK SECARA TERSURAT, TERSIRAT, BERDASARKAN UNDANG-UNDANG, ATAU LAINNYA. INI TERMASUK, TANPA BATASAN, JAMINAN ATAS KEPEMILIKAN, KELAYAKAN UNTUK DIPERDAGANGKAN, KESESUAIAN UNTUK TUJUAN TERTENTU, TIDAK MELANGGAR, KETIADAAN CACAT TERSEMBUNYI ATAU LAINNYA, AKURASI, ATAU KEHADIRAN ATAU KETIADAAN KESALAHAN, BAIK DIKETAHUI ATAU DAPAT DIKETAHUI. DI MANA PENAFIAN JAMINAN TIDAK DIIZINKAN SECARA PENUH ATAU SEBAGIAN, PENAFIAN INI MUNGKIN TIDAK BERLAKU UNTUK ANDA. + +b. SEJAUH MUNGKIN, DALAM KEADAAN APA PUN PEMBERI LISENSI TIDAK AKAN BERTANGGUNG JAWAB KEPADA ANDA BERDASARKAN TEORI HUKUM APA PUN (TERMASUK, TANPA BATASAN, KELALAIAN) ATAU LAINNYA ATAS KERUGIAN LANGSUNG, KHUSUS, TIDAK LANGSUNG, INSIDENTAL, KONSEKUENSIAL, PUNITIF, CONTOH, ATAU KERUGIAN LAINNYA, BIAYA, PENGELUARAN, ATAU KERUSAKAN YANG TIMBUL DARI LISENSI PUBLIK INI ATAU PENGGUNAAN MATERI BERLISENSI, MESKIPUN PEMBERI LISENSI TELAH DIBERITAHU TENTANG KEMUNGKINAN KERUGIAN, BIAYA, PENGELUARAN, ATAU KERUSAKAN TERSEBUT. DI MANA PEMBATASAN TANGGUNG JAWAB TIDAK DIIZINKAN SECARA PENUH ATAU SEBAGIAN, PEMBATASAN INI MUNGKIN TIDAK BERLAKU UNTUK ANDA. + +c. Penafian jaminan dan pembatasan tanggung jawab yang diberikan di atas harus ditafsirkan sedemikian rupa sehingga, sejauh mungkin, paling mendekati penafian mutlak dan pelepasan semua tanggung jawab. + +### Bagian 6 -- Masa Berlaku dan Pengakhiran + +a. Lisensi Publik ini berlaku selama masa Hak Cipta dan Hak Serupa yang dilisensikan di sini. Namun, jika Anda gagal mematuhi Lisensi Publik ini, maka hak Anda berdasarkan Lisensi Publik ini akan berakhir secara otomatis. + +b. Di mana hak Anda untuk menggunakan Materi Berlisensi telah berakhir berdasarkan Bagian 6(a), hak tersebut akan dipulihkan: + 1. secara otomatis pada tanggal pelanggaran diperbaiki, asalkan diperbaiki dalam waktu 30 hari sejak Anda mengetahui pelanggaran tersebut; atau + 2. melalui pemulihan secara tegas oleh Pemberi Lisensi. + + Untuk menghindari keraguan, Bagian 6(b) ini tidak memengaruhi hak Pemberi Lisensi untuk mencari solusi atas pelanggaran Anda terhadap Lisensi Publik ini. + +c. Untuk menghindari keraguan, Pemberi Lisensi juga dapat menawarkan Materi Berlisensi di bawah syarat atau ketentuan terpisah atau menghentikan distribusi Materi Berlisensi kapan saja; namun, tindakan tersebut tidak akan mengakhiri Lisensi Publik ini. + +d. Bagian 1, 5, 6, 7, dan 8 tetap berlaku setelah pengakhiran Lisensi Publik ini. + +### Bagian 7 -- Ketentuan dan Syarat Lain + +a. Pemberi Lisensi tidak akan terikat oleh ketentuan atau syarat tambahan atau berbeda yang disampaikan oleh Anda kecuali secara tegas disetujui. + +b. Pengaturan, pemahaman, atau perjanjian apa pun terkait Materi Berlisensi yang tidak dinyatakan di sini adalah terpisah dari dan independen dari ketentuan dan syarat Lisensi Publik ini. + +### Bagian 8 -- Penafsiran + +a. Untuk menghindari keraguan, Lisensi Publik ini tidak, dan tidak boleh ditafsirkan untuk, mengurangi, membatasi, membatasi, atau memberlakukan syarat pada penggunaan Materi Berlisensi yang dapat dilakukan secara sah tanpa izin berdasarkan Lisensi Publik ini. + +b. Sejauh mungkin, jika ketentuan apa pun dari Lisensi Publik ini dianggap tidak dapat diberlakukan, ketentuan tersebut akan secara otomatis direformasi sejauh minimum yang diperlukan agar dapat diberlakukan. Jika ketentuan tersebut tidak dapat direformasi, ketentuan tersebut akan dipisahkan dari Lisensi Publik ini tanpa memengaruhi keberlakuan ketentuan dan syarat lainnya. + +c. Tidak ada ketentuan atau syarat dari Lisensi Publik ini yang akan diabaikan dan tidak ada kegagalan untuk mematuhi yang disetujui kecuali secara tegas disetujui oleh Pemberi Lisensi. + +d. Tidak ada dalam Lisensi Publik ini yang merupakan atau dapat ditafsirkan sebagai pembatasan atas, atau pelepasan, hak istimewa dan kekebalan yang berlaku untuk Pemberi Lisensi atau Anda, termasuk dari proses hukum di yurisdiksi atau otoritas mana pun. + +--- + +Creative Commons bukan merupakan pihak dalam lisensi publiknya. Meskipun demikian, Creative Commons dapat memilih untuk menerapkan salah satu lisensi publiknya pada materi yang diterbitkannya dan dalam kasus tersebut akan dianggap sebagai "Pemberi Lisensi." Teks lisensi publik Creative Commons didedikasikan untuk domain publik di bawah CC0 Public Domain Dedication. Kecuali untuk tujuan terbatas menunjukkan bahwa materi dibagikan di bawah lisensi publik Creative Commons atau sebagaimana diizinkan oleh kebijakan Creative Commons yang diterbitkan di creativecommons.org/policies, Creative Commons tidak mengizinkan penggunaan merek dagang "Creative Commons" atau merek dagang atau logo lainnya dari Creative Commons tanpa persetujuan tertulis sebelumnya, termasuk, tanpa batasan, sehubungan dengan modifikasi tidak sah apa pun terhadap lisensi publiknya atau pengaturan, pemahaman, atau perjanjian lainnya terkait penggunaan materi berlisensi. Untuk menghindari keraguan, paragraf ini bukan bagian dari lisensi publik. + +Creative Commons dapat dihubungi di creativecommons.org. + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/id/sketchnotes/README.md b/translations/id/sketchnotes/README.md new file mode 100644 index 00000000..a422eedd --- /dev/null +++ b/translations/id/sketchnotes/README.md @@ -0,0 +1,21 @@ + +Semua sketchnote kurikulum dapat diunduh di sini. + +🖨 Untuk mencetak dalam resolusi tinggi, versi TIFF tersedia di [repo ini](https://github.com/girliemac/a-picture-is-worth-a-1000-words/tree/main/ml/tiff). + +🎨 Dibuat oleh: [Tomomi Imura](https://github.com/girliemac) (Twitter: [@girlie_mac](https://twitter.com/girlie_mac)) + +[![CC BY-SA 4.0](https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg)](https://creativecommons.org/licenses/by-sa/4.0/) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/1-Introduction/1-intro-to-ML/README.md b/translations/ms/1-Introduction/1-intro-to-ML/README.md new file mode 100644 index 00000000..9bc4f5c5 --- /dev/null +++ b/translations/ms/1-Introduction/1-intro-to-ML/README.md @@ -0,0 +1,159 @@ + +# Pengenalan kepada pembelajaran mesin + +## [Kuiz sebelum kuliah](https://ff-quizzes.netlify.app/en/ml/) + +--- + +[![ML untuk pemula - Pengenalan kepada Pembelajaran Mesin untuk Pemula](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](https://youtu.be/6mSx_KJxcHI "ML untuk pemula - Pengenalan kepada Pembelajaran Mesin untuk Pemula") + +> 🎥 Klik imej di atas untuk video pendek yang menerangkan pelajaran ini. + +Selamat datang ke kursus ini tentang pembelajaran mesin klasik untuk pemula! Sama ada anda benar-benar baru dalam topik ini, atau seorang pengamal ML berpengalaman yang ingin menyegarkan pengetahuan dalam bidang tertentu, kami gembira anda menyertai kami! Kami ingin mencipta tempat permulaan yang mesra untuk kajian ML anda dan akan gembira untuk menilai, memberi maklum balas, dan menggabungkan [maklum balas](https://github.com/microsoft/ML-For-Beginners/discussions) anda. + +[![Pengenalan kepada ML](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Pengenalan kepada ML") + +> 🎥 Klik imej di atas untuk video: John Guttag dari MIT memperkenalkan pembelajaran mesin + +--- +## Memulakan pembelajaran mesin + +Sebelum memulakan kurikulum ini, anda perlu menyediakan komputer anda dan bersedia untuk menjalankan notebook secara tempatan. + +- **Konfigurasikan mesin anda dengan video ini**. Gunakan pautan berikut untuk belajar [cara memasang Python](https://youtu.be/CXZYvNRIAKM) dalam sistem anda dan [menyediakan editor teks](https://youtu.be/EU8eayHWoZg) untuk pembangunan. +- **Belajar Python**. Adalah disyorkan untuk mempunyai pemahaman asas tentang [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), bahasa pengaturcaraan yang berguna untuk saintis data yang kami gunakan dalam kursus ini. +- **Belajar Node.js dan JavaScript**. Kami juga menggunakan JavaScript beberapa kali dalam kursus ini semasa membina aplikasi web, jadi anda perlu mempunyai [node](https://nodejs.org) dan [npm](https://www.npmjs.com/) dipasang, serta [Visual Studio Code](https://code.visualstudio.com/) tersedia untuk pembangunan Python dan JavaScript. +- **Buat akaun GitHub**. Oleh kerana anda menemui kami di [GitHub](https://github.com), anda mungkin sudah mempunyai akaun, tetapi jika tidak, buat satu dan kemudian fork kurikulum ini untuk digunakan sendiri. (Jangan lupa beri kami bintang juga 😊) +- **Terokai Scikit-learn**. Biasakan diri dengan [Scikit-learn](https://scikit-learn.org/stable/user_guide.html), satu set perpustakaan ML yang kami rujuk dalam pelajaran ini. + +--- +## Apa itu pembelajaran mesin? + +Istilah 'pembelajaran mesin' adalah salah satu istilah yang paling popular dan sering digunakan hari ini. Terdapat kemungkinan besar anda pernah mendengar istilah ini sekurang-kurangnya sekali jika anda mempunyai sedikit pengetahuan tentang teknologi, tidak kira bidang kerja anda. Walau bagaimanapun, mekanik pembelajaran mesin adalah misteri bagi kebanyakan orang. Bagi pemula pembelajaran mesin, subjek ini kadangkala boleh terasa mengelirukan. Oleh itu, adalah penting untuk memahami apa sebenarnya pembelajaran mesin, dan mempelajarinya langkah demi langkah, melalui contoh praktikal. + +--- +## Kurva hype + +![kurva hype ml](../../../../1-Introduction/1-intro-to-ML/images/hype.png) + +> Google Trends menunjukkan 'kurva hype' terkini istilah 'pembelajaran mesin' + +--- +## Alam semesta yang misteri + +Kita hidup dalam alam semesta yang penuh dengan misteri yang menarik. Saintis hebat seperti Stephen Hawking, Albert Einstein, dan ramai lagi telah mendedikasikan hidup mereka untuk mencari maklumat bermakna yang membongkar misteri dunia di sekeliling kita. Ini adalah keadaan manusia untuk belajar: seorang kanak-kanak manusia belajar perkara baru dan membongkar struktur dunia mereka tahun demi tahun semasa mereka membesar menjadi dewasa. + +--- +## Otak kanak-kanak + +Otak dan deria seorang kanak-kanak memerhatikan fakta-fakta di sekeliling mereka dan secara beransur-ansur mempelajari corak tersembunyi kehidupan yang membantu kanak-kanak itu mencipta peraturan logik untuk mengenal pasti corak yang dipelajari. Proses pembelajaran otak manusia menjadikan manusia makhluk hidup yang paling canggih di dunia ini. Belajar secara berterusan dengan menemui corak tersembunyi dan kemudian berinovasi berdasarkan corak tersebut membolehkan kita menjadi lebih baik sepanjang hayat kita. Keupayaan pembelajaran dan kemampuan berkembang ini berkaitan dengan konsep yang dipanggil [keplastikan otak](https://www.simplypsychology.org/brain-plasticity.html). Secara luaran, kita boleh menarik beberapa persamaan motivasi antara proses pembelajaran otak manusia dan konsep pembelajaran mesin. + +--- +## Otak manusia + +[Otak manusia](https://www.livescience.com/29365-human-brain.html) memerhatikan perkara dari dunia nyata, memproses maklumat yang diperhatikan, membuat keputusan rasional, dan melakukan tindakan tertentu berdasarkan keadaan. Inilah yang kita panggil berkelakuan secara pintar. Apabila kita memprogramkan tiruan proses tingkah laku pintar kepada mesin, ia dipanggil kecerdasan buatan (AI). + +--- +## Beberapa istilah + +Walaupun istilah-istilah ini boleh mengelirukan, pembelajaran mesin (ML) adalah subset penting dalam kecerdasan buatan. **ML berkaitan dengan penggunaan algoritma khusus untuk mencari maklumat bermakna dan menemui corak tersembunyi daripada data yang diperhatikan untuk menyokong proses membuat keputusan secara rasional**. + +--- +## AI, ML, Pembelajaran Mendalam + +![AI, ML, pembelajaran mendalam, sains data](../../../../1-Introduction/1-intro-to-ML/images/ai-ml-ds.png) + +> Diagram menunjukkan hubungan antara AI, ML, pembelajaran mendalam, dan sains data. Infografik oleh [Jen Looper](https://twitter.com/jenlooper) yang diilhamkan oleh [grafik ini](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) + +--- +## Konsep yang akan dibincangkan + +Dalam kurikulum ini, kita akan membincangkan hanya konsep asas pembelajaran mesin yang mesti diketahui oleh pemula. Kami membincangkan apa yang kami panggil 'pembelajaran mesin klasik' terutamanya menggunakan Scikit-learn, perpustakaan yang sangat baik yang digunakan oleh ramai pelajar untuk mempelajari asas-asas. Untuk memahami konsep yang lebih luas tentang kecerdasan buatan atau pembelajaran mendalam, pengetahuan asas yang kukuh tentang pembelajaran mesin adalah sangat penting, dan kami ingin menawarkannya di sini. + +--- +## Dalam kursus ini anda akan belajar: + +- konsep asas pembelajaran mesin +- sejarah ML +- ML dan keadilan +- teknik regresi ML +- teknik klasifikasi ML +- teknik pengelompokan ML +- teknik pemprosesan bahasa semula jadi ML +- teknik ramalan siri masa ML +- pembelajaran pengukuhan +- aplikasi dunia nyata untuk ML + +--- +## Apa yang tidak akan dibincangkan + +- pembelajaran mendalam +- rangkaian neural +- AI + +Untuk pengalaman pembelajaran yang lebih baik, kami akan mengelakkan kerumitan rangkaian neural, 'pembelajaran mendalam' - pembinaan model berlapis-lapis menggunakan rangkaian neural - dan AI, yang akan kami bincangkan dalam kurikulum yang berbeza. Kami juga akan menawarkan kurikulum sains data yang akan datang untuk memberi fokus kepada aspek tersebut dalam bidang yang lebih besar ini. + +--- +## Mengapa belajar pembelajaran mesin? + +Pembelajaran mesin, dari perspektif sistem, didefinisikan sebagai penciptaan sistem automatik yang dapat mempelajari corak tersembunyi dari data untuk membantu membuat keputusan pintar. + +Motivasi ini secara longgar diilhamkan oleh bagaimana otak manusia mempelajari perkara tertentu berdasarkan data yang diperhatikan dari dunia luar. + +✅ Fikirkan sejenak mengapa sesebuah perniagaan ingin menggunakan strategi pembelajaran mesin berbanding mencipta enjin berasaskan peraturan yang dikodkan secara keras. + +--- +## Aplikasi pembelajaran mesin + +Aplikasi pembelajaran mesin kini hampir di mana-mana, dan sama meluasnya dengan data yang mengalir di sekitar masyarakat kita, yang dihasilkan oleh telefon pintar, peranti yang disambungkan, dan sistem lain. Memandangkan potensi besar algoritma pembelajaran mesin terkini, penyelidik telah meneroka keupayaannya untuk menyelesaikan masalah kehidupan nyata yang pelbagai dimensi dan pelbagai disiplin dengan hasil yang sangat positif. + +--- +## Contoh ML yang diterapkan + +**Anda boleh menggunakan pembelajaran mesin dalam pelbagai cara**: + +- Untuk meramalkan kemungkinan penyakit daripada sejarah perubatan atau laporan pesakit. +- Untuk memanfaatkan data cuaca bagi meramalkan kejadian cuaca. +- Untuk memahami sentimen dalam teks. +- Untuk mengesan berita palsu bagi menghentikan penyebaran propaganda. + +Kewangan, ekonomi, sains bumi, penerokaan angkasa, kejuruteraan bioperubatan, sains kognitif, dan bahkan bidang dalam kemanusiaan telah menyesuaikan pembelajaran mesin untuk menyelesaikan masalah berat pemprosesan data dalam domain mereka. + +--- +## Kesimpulan + +Pembelajaran mesin mengautomasi proses penemuan corak dengan mencari wawasan bermakna daripada data dunia nyata atau data yang dihasilkan. Ia telah membuktikan dirinya sangat berharga dalam aplikasi perniagaan, kesihatan, dan kewangan, antara lain. + +Dalam masa terdekat, memahami asas pembelajaran mesin akan menjadi keperluan bagi orang dari mana-mana bidang kerana penerimaannya yang meluas. + +--- +# 🚀 Cabaran + +Lukiskan, di atas kertas atau menggunakan aplikasi dalam talian seperti [Excalidraw](https://excalidraw.com/), pemahaman anda tentang perbezaan antara AI, ML, pembelajaran mendalam, dan sains data. Tambahkan beberapa idea tentang masalah yang sesuai untuk diselesaikan oleh setiap teknik ini. + +# [Kuiz selepas kuliah](https://ff-quizzes.netlify.app/en/ml/) + +--- +# Ulasan & Kajian Kendiri + +Untuk mengetahui lebih lanjut tentang cara anda boleh bekerja dengan algoritma ML di awan, ikuti [Laluan Pembelajaran](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott). + +Ikuti [Laluan Pembelajaran](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) tentang asas-asas ML. + +--- +# Tugasan + +[Mulakan](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/1-Introduction/1-intro-to-ML/assignment.md b/translations/ms/1-Introduction/1-intro-to-ML/assignment.md new file mode 100644 index 00000000..4671bf4c --- /dev/null +++ b/translations/ms/1-Introduction/1-intro-to-ML/assignment.md @@ -0,0 +1,23 @@ + +# Mula dan Beroperasi + +## Arahan + +Dalam tugasan yang tidak dinilai ini, anda perlu mengasah kemahiran Python dan menyediakan persekitaran anda agar dapat menjalankan notebook. + +Ikuti [Laluan Pembelajaran Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), dan kemudian sediakan sistem anda dengan menonton video pengenalan berikut: + +https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/1-Introduction/2-history-of-ML/README.md b/translations/ms/1-Introduction/2-history-of-ML/README.md new file mode 100644 index 00000000..ab711881 --- /dev/null +++ b/translations/ms/1-Introduction/2-history-of-ML/README.md @@ -0,0 +1,164 @@ + +# Sejarah pembelajaran mesin + +![Ringkasan Sejarah pembelajaran mesin dalam sketchnote](../../../../sketchnotes/ml-history.png) +> Sketchnote oleh [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [Kuiz pra-pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +--- + +[![ML untuk pemula - Sejarah Pembelajaran Mesin](https://img.youtube.com/vi/N6wxM4wZ7V0/0.jpg)](https://youtu.be/N6wxM4wZ7V0 "ML untuk pemula - Sejarah Pembelajaran Mesin") + +> 🎥 Klik imej di atas untuk video pendek yang menerangkan pelajaran ini. + +Dalam pelajaran ini, kita akan melalui pencapaian utama dalam sejarah pembelajaran mesin dan kecerdasan buatan. + +Sejarah kecerdasan buatan (AI) sebagai satu bidang berkait rapat dengan sejarah pembelajaran mesin, kerana algoritma dan kemajuan pengiraan yang mendasari ML menyumbang kepada pembangunan AI. Adalah berguna untuk diingat bahawa, walaupun bidang ini sebagai kawasan penyelidikan yang berbeza mula terbentuk pada tahun 1950-an, penemuan [algoritma, statistik, matematik, pengiraan dan teknikal yang penting](https://wikipedia.org/wiki/Timeline_of_machine_learning) telah mendahului dan bertindih dengan era ini. Malah, manusia telah memikirkan persoalan ini selama [ratusan tahun](https://wikipedia.org/wiki/History_of_artificial_intelligence): artikel ini membincangkan asas intelektual sejarah idea 'mesin yang berfikir.' + +--- +## Penemuan penting + +- 1763, 1812 [Teorem Bayes](https://wikipedia.org/wiki/Bayes%27_theorem) dan pendahulunya. Teorem ini dan aplikasinya mendasari inferens, menerangkan kebarangkalian sesuatu peristiwa berlaku berdasarkan pengetahuan sebelumnya. +- 1805 [Teori Kuadrat Terkecil](https://wikipedia.org/wiki/Least_squares) oleh ahli matematik Perancis Adrien-Marie Legendre. Teori ini, yang akan anda pelajari dalam unit Regresi kami, membantu dalam penyesuaian data. +- 1913 [Rantai Markov](https://wikipedia.org/wiki/Markov_chain), dinamakan sempena ahli matematik Rusia Andrey Markov, digunakan untuk menerangkan urutan peristiwa yang mungkin berlaku berdasarkan keadaan sebelumnya. +- 1957 [Perceptron](https://wikipedia.org/wiki/Perceptron) ialah sejenis pengklasifikasi linear yang dicipta oleh ahli psikologi Amerika Frank Rosenblatt yang mendasari kemajuan dalam pembelajaran mendalam. + +--- + +- 1967 [Jiran Terdekat](https://wikipedia.org/wiki/Nearest_neighbor) ialah algoritma yang pada asalnya direka untuk memetakan laluan. Dalam konteks ML, ia digunakan untuk mengesan corak. +- 1970 [Backpropagation](https://wikipedia.org/wiki/Backpropagation) digunakan untuk melatih [rangkaian neural feedforward](https://wikipedia.org/wiki/Feedforward_neural_network). +- 1982 [Rangkaian Neural Berulang](https://wikipedia.org/wiki/Recurrent_neural_network) ialah rangkaian neural tiruan yang berasal daripada rangkaian neural feedforward yang mencipta graf temporal. + +✅ Lakukan sedikit penyelidikan. Apakah tarikh lain yang menonjol sebagai titik penting dalam sejarah ML dan AI? + +--- +## 1950: Mesin yang berfikir + +Alan Turing, seorang individu yang benar-benar luar biasa yang telah diundi [oleh orang awam pada tahun 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) sebagai saintis terhebat abad ke-20, dikreditkan sebagai membantu meletakkan asas untuk konsep 'mesin yang boleh berfikir.' Beliau bergelut dengan skeptik dan keperluannya sendiri untuk bukti empirik tentang konsep ini sebahagiannya dengan mencipta [Ujian Turing](https://www.bbc.com/news/technology-18475646), yang akan anda terokai dalam pelajaran NLP kami. + +--- +## 1956: Projek Penyelidikan Musim Panas Dartmouth + +"Projek Penyelidikan Musim Panas Dartmouth mengenai kecerdasan buatan adalah acara penting untuk kecerdasan buatan sebagai satu bidang," dan di sinilah istilah 'kecerdasan buatan' dicipta ([sumber](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). + +> Setiap aspek pembelajaran atau mana-mana ciri kecerdasan boleh pada prinsipnya diterangkan dengan begitu tepat sehingga mesin boleh dibuat untuk mensimulasikannya. + +--- + +Penyelidik utama, profesor matematik John McCarthy, berharap "untuk meneruskan berdasarkan andaian bahawa setiap aspek pembelajaran atau mana-mana ciri kecerdasan boleh pada prinsipnya diterangkan dengan begitu tepat sehingga mesin boleh dibuat untuk mensimulasikannya." Para peserta termasuk seorang lagi tokoh terkenal dalam bidang ini, Marvin Minsky. + +Bengkel ini dikreditkan dengan memulakan dan menggalakkan beberapa perbincangan termasuk "kemunculan kaedah simbolik, sistem yang tertumpu pada domain terhad (sistem pakar awal), dan sistem deduktif berbanding sistem induktif." ([sumber](https://wikipedia.org/wiki/Dartmouth_workshop)). + +--- +## 1956 - 1974: "Tahun-tahun emas" + +Dari tahun 1950-an hingga pertengahan '70-an, optimisme tinggi dalam harapan bahawa AI boleh menyelesaikan banyak masalah. Pada tahun 1967, Marvin Minsky menyatakan dengan yakin bahawa "Dalam satu generasi ... masalah mencipta 'kecerdasan buatan' akan diselesaikan secara substansial." (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) + +Penyelidikan pemprosesan bahasa semula jadi berkembang pesat, carian diperhalusi dan menjadi lebih berkuasa, dan konsep 'dunia mikro' dicipta, di mana tugas mudah diselesaikan menggunakan arahan bahasa biasa. + +--- + +Penyelidikan dibiayai dengan baik oleh agensi kerajaan, kemajuan dibuat dalam pengiraan dan algoritma, dan prototaip mesin pintar dibina. Beberapa mesin ini termasuk: + +* [Shakey the robot](https://wikipedia.org/wiki/Shakey_the_robot), yang boleh bergerak dan memutuskan cara melaksanakan tugas secara 'bijak'. + + ![Shakey, robot pintar](../../../../1-Introduction/2-history-of-ML/images/shakey.jpg) + > Shakey pada tahun 1972 + +--- + +* Eliza, 'chatterbot' awal, boleh berbual dengan orang dan bertindak sebagai 'terapis' primitif. Anda akan belajar lebih lanjut tentang Eliza dalam pelajaran NLP. + + ![Eliza, bot](../../../../1-Introduction/2-history-of-ML/images/eliza.png) + > Versi Eliza, chatbot + +--- + +* "Blocks world" adalah contoh dunia mikro di mana blok boleh disusun dan diatur, dan eksperimen dalam mengajar mesin untuk membuat keputusan boleh diuji. Kemajuan yang dibina dengan perpustakaan seperti [SHRDLU](https://wikipedia.org/wiki/SHRDLU) membantu memacu pemprosesan bahasa ke hadapan. + + [![blocks world dengan SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "blocks world dengan SHRDLU") + + > 🎥 Klik imej di atas untuk video: Blocks world dengan SHRDLU + +--- +## 1974 - 1980: "Musim sejuk AI" + +Menjelang pertengahan tahun 1970-an, menjadi jelas bahawa kerumitan membuat 'mesin pintar' telah diremehkan dan janji yang diberikan, memandangkan kuasa pengiraan yang tersedia, telah dibesar-besarkan. Pembiayaan terhenti dan keyakinan dalam bidang ini perlahan. Beberapa isu yang menjejaskan keyakinan termasuk: +--- +- **Keterbatasan**. Kuasa pengiraan terlalu terhad. +- **Letupan kombinatorial**. Jumlah parameter yang perlu dilatih meningkat secara eksponen apabila lebih banyak diminta daripada komputer, tanpa evolusi selari kuasa dan keupayaan pengiraan. +- **Kekurangan data**. Kekurangan data menghalang proses pengujian, pembangunan, dan penambahbaikan algoritma. +- **Adakah kita bertanya soalan yang betul?**. Soalan yang diajukan mula dipersoalkan. Penyelidik mula menghadapi kritikan tentang pendekatan mereka: + - Ujian Turing dipersoalkan melalui, antara lain, teori 'bilik Cina' yang menyatakan bahawa, "memprogram komputer digital mungkin membuatnya kelihatan memahami bahasa tetapi tidak dapat menghasilkan pemahaman sebenar." ([sumber](https://plato.stanford.edu/entries/chinese-room/)) + - Etika memperkenalkan kecerdasan buatan seperti "terapis" ELIZA ke dalam masyarakat dicabar. + +--- + +Pada masa yang sama, pelbagai aliran pemikiran AI mula terbentuk. Satu dikotomi ditubuhkan antara amalan ["AI scruffy" vs. "AI neat"](https://wikipedia.org/wiki/Neats_and_scruffies). Makmal _scruffy_ menyesuaikan program selama berjam-jam sehingga mereka mendapat hasil yang diinginkan. Makmal _neat_ "fokus pada logik dan penyelesaian masalah formal". ELIZA dan SHRDLU adalah sistem _scruffy_ yang terkenal. Pada tahun 1980-an, apabila permintaan muncul untuk menjadikan sistem ML boleh dihasilkan semula, pendekatan _neat_ secara beransur-ansur mengambil tempat utama kerana hasilnya lebih boleh dijelaskan. + +--- +## Sistem pakar tahun 1980-an + +Apabila bidang ini berkembang, manfaatnya kepada perniagaan menjadi lebih jelas, dan pada tahun 1980-an begitu juga dengan penyebaran 'sistem pakar'. "Sistem pakar adalah antara bentuk perisian kecerdasan buatan (AI) yang pertama benar-benar berjaya." ([sumber](https://wikipedia.org/wiki/Expert_system)). + +Jenis sistem ini sebenarnya _hibrid_, terdiri daripada enjin peraturan yang mentakrifkan keperluan perniagaan, dan enjin inferens yang memanfaatkan sistem peraturan untuk membuat deduksi fakta baharu. + +Era ini juga menyaksikan perhatian yang semakin meningkat terhadap rangkaian neural. + +--- +## 1987 - 1993: 'Kedinginan' AI + +Penyebaran perkakasan sistem pakar khusus mempunyai kesan malang menjadi terlalu khusus. Kebangkitan komputer peribadi juga bersaing dengan sistem besar, khusus, berpusat ini. Demokratisasi pengkomputeran telah bermula, dan akhirnya membuka jalan untuk letupan moden data besar. + +--- +## 1993 - 2011 + +Era ini menyaksikan zaman baharu untuk ML dan AI untuk dapat menyelesaikan beberapa masalah yang telah disebabkan sebelum ini oleh kekurangan data dan kuasa pengiraan. Jumlah data mula meningkat dengan pesat dan menjadi lebih mudah diakses, baik dan buruk, terutamanya dengan kemunculan telefon pintar sekitar tahun 2007. Kuasa pengiraan berkembang secara eksponen, dan algoritma berkembang seiring. Bidang ini mula mencapai kematangan apabila zaman bebas masa lalu mula mengkristal menjadi satu disiplin yang sebenar. + +--- +## Kini + +Hari ini pembelajaran mesin dan AI menyentuh hampir setiap bahagian kehidupan kita. Era ini memerlukan pemahaman yang teliti tentang risiko dan kesan berpotensi algoritma ini terhadap kehidupan manusia. Seperti yang dinyatakan oleh Brad Smith dari Microsoft, "Teknologi maklumat menimbulkan isu yang menyentuh inti perlindungan hak asasi manusia seperti privasi dan kebebasan bersuara. Isu-isu ini meningkatkan tanggungjawab syarikat teknologi yang mencipta produk ini. Pada pandangan kami, ia juga memerlukan peraturan kerajaan yang bijak dan pembangunan norma tentang penggunaan yang boleh diterima" ([sumber](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). + +--- + +Masih belum dapat dipastikan apa yang akan berlaku pada masa depan, tetapi adalah penting untuk memahami sistem komputer ini serta perisian dan algoritma yang mereka jalankan. Kami berharap kurikulum ini akan membantu anda mendapatkan pemahaman yang lebih baik supaya anda boleh membuat keputusan sendiri. + +[![Sejarah pembelajaran mendalam](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 "Sejarah pembelajaran mendalam") +> 🎥 Klik imej di atas untuk video: Yann LeCun membincangkan sejarah pembelajaran mendalam dalam kuliah ini + +--- +## 🚀Cabaran + +Selidiki salah satu momen sejarah ini dan pelajari lebih lanjut tentang orang di sebaliknya. Terdapat watak-watak yang menarik, dan tiada penemuan saintifik yang pernah dicipta dalam vakum budaya. Apa yang anda temui? + +## [Kuiz selepas pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +--- +## Ulasan & Kajian Kendiri + +Berikut adalah item untuk ditonton dan didengar: + +[Podcast ini di mana Amy Boyd membincangkan evolusi AI](http://runasradio.com/Shows/Show/739) + +[![Sejarah AI oleh Amy Boyd](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "Sejarah AI oleh Amy Boyd") + +--- + +## Tugasan + +[Cipta garis masa](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/1-Introduction/2-history-of-ML/assignment.md b/translations/ms/1-Introduction/2-history-of-ML/assignment.md new file mode 100644 index 00000000..eb4d570c --- /dev/null +++ b/translations/ms/1-Introduction/2-history-of-ML/assignment.md @@ -0,0 +1,25 @@ + +# Buat Garis Masa + +## Arahan + +Menggunakan [repo ini](https://github.com/Digital-Humanities-Toolkit/timeline-builder), buat garis masa tentang aspek sejarah algoritma, matematik, statistik, AI, atau ML, atau gabungan daripadanya. Anda boleh memberi tumpuan kepada satu individu, satu idea, atau tempoh masa pemikiran yang panjang. Pastikan untuk menambah elemen multimedia. + +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | ------------------------------------------------- | --------------------------------------- | ---------------------------------------------------------------- | +| | Garis masa yang telah diterbitkan sebagai halaman GitHub | Kod tidak lengkap dan tidak diterbitkan | Garis masa tidak lengkap, kurang penyelidikan dan tidak diterbitkan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/1-Introduction/3-fairness/README.md b/translations/ms/1-Introduction/3-fairness/README.md new file mode 100644 index 00000000..eadb46ff --- /dev/null +++ b/translations/ms/1-Introduction/3-fairness/README.md @@ -0,0 +1,170 @@ + +# Membina Penyelesaian Pembelajaran Mesin dengan AI yang Bertanggungjawab + +![Ringkasan AI yang bertanggungjawab dalam Pembelajaran Mesin dalam bentuk sketchnote](../../../../sketchnotes/ml-fairness.png) +> Sketchnote oleh [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [Kuiz Pra-Kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Pengenalan + +Dalam kurikulum ini, anda akan mula meneroka bagaimana pembelajaran mesin boleh dan sedang memberi kesan kepada kehidupan seharian kita. Pada masa kini, sistem dan model terlibat dalam tugas membuat keputusan harian seperti diagnosis kesihatan, kelulusan pinjaman, atau pengesanan penipuan. Oleh itu, adalah penting bahawa model ini berfungsi dengan baik untuk memberikan hasil yang boleh dipercayai. Sama seperti mana-mana aplikasi perisian, sistem AI mungkin tidak memenuhi jangkaan atau menghasilkan hasil yang tidak diingini. Itulah sebabnya penting untuk memahami dan menjelaskan tingkah laku model AI. + +Bayangkan apa yang boleh berlaku apabila data yang anda gunakan untuk membina model ini kekurangan demografi tertentu seperti bangsa, jantina, pandangan politik, agama, atau secara tidak seimbang mewakili demografi tersebut. Bagaimana pula apabila output model ditafsirkan untuk memihak kepada sesetengah demografi? Apakah akibatnya kepada aplikasi tersebut? Selain itu, apa yang berlaku apabila model menghasilkan hasil yang buruk dan membahayakan orang? Siapa yang bertanggungjawab terhadap tingkah laku sistem AI? Ini adalah beberapa soalan yang akan kita terokai dalam kurikulum ini. + +Dalam pelajaran ini, anda akan: + +- Meningkatkan kesedaran tentang kepentingan keadilan dalam pembelajaran mesin dan bahaya berkaitan keadilan. +- Mengenali amalan meneroka outlier dan senario luar biasa untuk memastikan kebolehpercayaan dan keselamatan. +- Memahami keperluan untuk memperkasakan semua orang dengan mereka bentuk sistem yang inklusif. +- Meneroka betapa pentingnya melindungi privasi dan keselamatan data serta individu. +- Melihat kepentingan pendekatan kotak kaca untuk menjelaskan tingkah laku model AI. +- Berhati-hati tentang bagaimana akauntabiliti adalah penting untuk membina kepercayaan dalam sistem AI. + +## Prasyarat + +Sebagai prasyarat, sila ambil Laluan Pembelajaran "Prinsip AI yang Bertanggungjawab" dan tonton video di bawah mengenai topik ini: + +Ketahui lebih lanjut tentang AI yang Bertanggungjawab dengan mengikuti [Laluan Pembelajaran](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) + +[![Pendekatan Microsoft terhadap AI yang Bertanggungjawab](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Pendekatan Microsoft terhadap AI yang Bertanggungjawab") + +> 🎥 Klik imej di atas untuk video: Pendekatan Microsoft terhadap AI yang Bertanggungjawab + +## Keadilan + +Sistem AI harus melayan semua orang dengan adil dan mengelakkan memberi kesan yang berbeza kepada kumpulan orang yang serupa. Sebagai contoh, apabila sistem AI memberikan panduan tentang rawatan perubatan, permohonan pinjaman, atau pekerjaan, ia harus memberikan cadangan yang sama kepada semua orang dengan simptom, keadaan kewangan, atau kelayakan profesional yang serupa. Setiap daripada kita sebagai manusia membawa bias yang diwarisi yang mempengaruhi keputusan dan tindakan kita. Bias ini boleh kelihatan dalam data yang kita gunakan untuk melatih sistem AI. Manipulasi sedemikian kadang-kadang berlaku secara tidak sengaja. Selalunya sukar untuk secara sedar mengetahui bila anda memperkenalkan bias dalam data. + +**“Ketidakadilan”** merangkumi kesan negatif, atau “bahaya”, kepada sekumpulan orang, seperti yang ditakrifkan dalam istilah bangsa, jantina, umur, atau status kecacatan. Bahaya berkaitan keadilan utama boleh diklasifikasikan sebagai: + +- **Peruntukan**, jika jantina atau etnik, sebagai contoh, lebih diutamakan berbanding yang lain. +- **Kualiti perkhidmatan**. Jika anda melatih data untuk satu senario tertentu tetapi realiti jauh lebih kompleks, ia membawa kepada perkhidmatan yang kurang berprestasi. Sebagai contoh, dispenser sabun tangan yang tidak dapat mengesan orang dengan kulit gelap. [Rujukan](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) +- **Pencemaran nama baik**. Mengkritik dan melabel sesuatu atau seseorang secara tidak adil. Sebagai contoh, teknologi pelabelan imej secara terkenal melabelkan imej orang berkulit gelap sebagai gorila. +- **Perwakilan berlebihan atau kurang**. Idea bahawa kumpulan tertentu tidak dilihat dalam profesion tertentu, dan mana-mana perkhidmatan atau fungsi yang terus mempromosikan itu menyumbang kepada bahaya. +- **Stereotaip**. Mengaitkan kumpulan tertentu dengan atribut yang telah ditetapkan. Sebagai contoh, sistem terjemahan bahasa antara Bahasa Inggeris dan Bahasa Turki mungkin mempunyai ketidaktepatan disebabkan oleh perkataan dengan kaitan stereotaip kepada jantina. + +![terjemahan ke Bahasa Turki](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png) +> terjemahan ke Bahasa Turki + +![terjemahan kembali ke Bahasa Inggeris](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png) +> terjemahan kembali ke Bahasa Inggeris + +Apabila mereka bentuk dan menguji sistem AI, kita perlu memastikan bahawa AI adalah adil dan tidak diprogramkan untuk membuat keputusan yang berat sebelah atau diskriminasi, yang juga dilarang untuk dibuat oleh manusia. Menjamin keadilan dalam AI dan pembelajaran mesin kekal sebagai cabaran sosio-teknikal yang kompleks. + +### Kebolehpercayaan dan keselamatan + +Untuk membina kepercayaan, sistem AI perlu boleh dipercayai, selamat, dan konsisten di bawah keadaan biasa dan luar jangka. Adalah penting untuk mengetahui bagaimana sistem AI akan berkelakuan dalam pelbagai situasi, terutamanya apabila ia adalah outlier. Apabila membina penyelesaian AI, perlu ada fokus yang besar pada cara menangani pelbagai keadaan yang mungkin dihadapi oleh penyelesaian AI. Sebagai contoh, kereta pandu sendiri perlu meletakkan keselamatan orang sebagai keutamaan utama. Akibatnya, AI yang menggerakkan kereta perlu mempertimbangkan semua senario yang mungkin dihadapi oleh kereta seperti waktu malam, ribut petir atau salji, kanak-kanak berlari melintasi jalan, haiwan peliharaan, pembinaan jalan, dan sebagainya. Sejauh mana sistem AI boleh menangani pelbagai keadaan dengan kebolehpercayaan dan keselamatan mencerminkan tahap jangkaan yang dipertimbangkan oleh saintis data atau pembangun AI semasa mereka bentuk atau menguji sistem. + +> [🎥 Klik di sini untuk video: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl) + +### Inklusiviti + +Sistem AI harus direka untuk melibatkan dan memperkasakan semua orang. Apabila mereka bentuk dan melaksanakan sistem AI, saintis data dan pembangun AI mengenal pasti dan menangani halangan yang berpotensi dalam sistem yang boleh secara tidak sengaja mengecualikan orang. Sebagai contoh, terdapat 1 bilion orang kurang upaya di seluruh dunia. Dengan kemajuan AI, mereka boleh mengakses pelbagai maklumat dan peluang dengan lebih mudah dalam kehidupan seharian mereka. Dengan menangani halangan, ia mencipta peluang untuk berinovasi dan membangunkan produk AI dengan pengalaman yang lebih baik yang memberi manfaat kepada semua orang. + +> [🎥 Klik di sini untuk video: inklusiviti dalam AI](https://www.microsoft.com/videoplayer/embed/RE4vl9v) + +### Keselamatan dan privasi + +Sistem AI harus selamat dan menghormati privasi orang. Orang kurang percaya kepada sistem yang meletakkan privasi, maklumat, atau nyawa mereka dalam risiko. Apabila melatih model pembelajaran mesin, kita bergantung pada data untuk menghasilkan hasil terbaik. Dalam melakukannya, asal usul data dan integriti mesti dipertimbangkan. Sebagai contoh, adakah data dihantar oleh pengguna atau tersedia secara umum? Seterusnya, semasa bekerja dengan data, adalah penting untuk membangunkan sistem AI yang boleh melindungi maklumat sulit dan menahan serangan. Apabila AI menjadi lebih meluas, melindungi privasi dan mengamankan maklumat peribadi dan perniagaan yang penting menjadi semakin kritikal dan kompleks. Isu privasi dan keselamatan data memerlukan perhatian yang sangat teliti untuk AI kerana akses kepada data adalah penting untuk sistem AI membuat ramalan dan keputusan yang tepat dan bermaklumat tentang orang. + +> [🎥 Klik di sini untuk video: keselamatan dalam AI](https://www.microsoft.com/videoplayer/embed/RE4voJF) + +- Sebagai industri, kita telah membuat kemajuan yang ketara dalam privasi & keselamatan, yang didorong secara signifikan oleh peraturan seperti GDPR (Peraturan Perlindungan Data Umum). +- Namun dengan sistem AI, kita mesti mengakui ketegangan antara keperluan untuk lebih banyak data peribadi untuk menjadikan sistem lebih peribadi dan berkesan – dan privasi. +- Sama seperti kelahiran komputer yang disambungkan dengan internet, kita juga melihat peningkatan besar dalam jumlah isu keselamatan yang berkaitan dengan AI. +- Pada masa yang sama, kita telah melihat AI digunakan untuk meningkatkan keselamatan. Sebagai contoh, kebanyakan pengimbas anti-virus moden didorong oleh heuristik AI hari ini. +- Kita perlu memastikan bahawa proses Sains Data kita bergabung secara harmoni dengan amalan privasi dan keselamatan terkini. + +### Ketelusan + +Sistem AI harus dapat difahami. Bahagian penting ketelusan adalah menjelaskan tingkah laku sistem AI dan komponennya. Meningkatkan pemahaman tentang sistem AI memerlukan pihak berkepentingan memahami bagaimana dan mengapa ia berfungsi supaya mereka dapat mengenal pasti isu prestasi yang berpotensi, kebimbangan keselamatan dan privasi, bias, amalan pengecualian, atau hasil yang tidak diingini. Kami juga percaya bahawa mereka yang menggunakan sistem AI harus jujur dan terbuka tentang bila, mengapa, dan bagaimana mereka memilih untuk menggunakannya. Serta batasan sistem yang mereka gunakan. Sebagai contoh, jika sebuah bank menggunakan sistem AI untuk menyokong keputusan pemberian pinjaman kepada pengguna, adalah penting untuk memeriksa hasilnya dan memahami data mana yang mempengaruhi cadangan sistem. Kerajaan mula mengawal selia AI merentasi industri, jadi saintis data dan organisasi mesti menjelaskan jika sistem AI memenuhi keperluan peraturan, terutamanya apabila terdapat hasil yang tidak diingini. + +> [🎥 Klik di sini untuk video: ketelusan dalam AI](https://www.microsoft.com/videoplayer/embed/RE4voJF) + +- Oleh kerana sistem AI sangat kompleks, sukar untuk memahami bagaimana ia berfungsi dan mentafsir hasilnya. +- Kekurangan pemahaman ini mempengaruhi cara sistem ini diuruskan, dioperasikan, dan didokumentasikan. +- Kekurangan pemahaman ini lebih penting lagi mempengaruhi keputusan yang dibuat menggunakan hasil yang dihasilkan oleh sistem ini. + +### Akauntabiliti + +Orang yang mereka bentuk dan menggunakan sistem AI mesti bertanggungjawab terhadap cara sistem mereka beroperasi. Keperluan untuk akauntabiliti amat penting dengan teknologi penggunaan sensitif seperti pengecaman wajah. Baru-baru ini, terdapat permintaan yang semakin meningkat untuk teknologi pengecaman wajah, terutamanya daripada organisasi penguatkuasaan undang-undang yang melihat potensi teknologi dalam kegunaan seperti mencari kanak-kanak yang hilang. Walau bagaimanapun, teknologi ini berpotensi digunakan oleh kerajaan untuk meletakkan kebebasan asas rakyat mereka dalam risiko dengan, sebagai contoh, membolehkan pengawasan berterusan terhadap individu tertentu. Oleh itu, saintis data dan organisasi perlu bertanggungjawab terhadap bagaimana sistem AI mereka memberi kesan kepada individu atau masyarakat. + +[![Penyelidik AI Terkemuka Memberi Amaran tentang Pengawasan Massa Melalui Pengecaman Wajah](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Pendekatan Microsoft terhadap AI yang Bertanggungjawab") + +> 🎥 Klik imej di atas untuk video: Amaran tentang Pengawasan Massa Melalui Pengecaman Wajah + +Akhirnya, salah satu soalan terbesar untuk generasi kita, sebagai generasi pertama yang membawa AI kepada masyarakat, adalah bagaimana memastikan komputer akan kekal bertanggungjawab kepada manusia dan bagaimana memastikan orang yang mereka bentuk komputer kekal bertanggungjawab kepada semua orang. + +## Penilaian Impak + +Sebelum melatih model pembelajaran mesin, adalah penting untuk menjalankan penilaian impak untuk memahami tujuan sistem AI; apa kegunaan yang dimaksudkan; di mana ia akan digunakan; dan siapa yang akan berinteraksi dengan sistem tersebut. Ini berguna untuk pengulas atau penguji yang menilai sistem untuk mengetahui faktor apa yang perlu dipertimbangkan semasa mengenal pasti risiko yang berpotensi dan akibat yang dijangkakan. + +Berikut adalah kawasan fokus semasa menjalankan penilaian impak: + +* **Kesan buruk terhadap individu**. Menyedari sebarang sekatan atau keperluan, penggunaan yang tidak disokong atau sebarang batasan yang diketahui yang menghalang prestasi sistem adalah penting untuk memastikan sistem tidak digunakan dengan cara yang boleh menyebabkan bahaya kepada individu. +* **Keperluan data**. Memahami bagaimana dan di mana sistem akan menggunakan data membolehkan pengulas meneroka sebarang keperluan data yang perlu anda perhatikan (contohnya, peraturan data GDPR atau HIPPA). Selain itu, periksa sama ada sumber atau kuantiti data adalah mencukupi untuk latihan. +* **Ringkasan impak**. Kumpulkan senarai potensi bahaya yang boleh timbul daripada menggunakan sistem. Sepanjang kitaran hayat ML, semak sama ada isu yang dikenal pasti telah dikurangkan atau ditangani. +* **Matlamat yang boleh digunakan** untuk setiap enam prinsip teras. Nilai sama ada matlamat daripada setiap prinsip telah dicapai dan jika terdapat sebarang jurang. + +## Debugging dengan AI yang Bertanggungjawab + +Sama seperti debugging aplikasi perisian, debugging sistem AI adalah proses yang diperlukan untuk mengenal pasti dan menyelesaikan isu dalam sistem. Terdapat banyak faktor yang boleh mempengaruhi model tidak berprestasi seperti yang diharapkan atau bertanggungjawab. Kebanyakan metrik prestasi model tradisional adalah agregat kuantitatif prestasi model, yang tidak mencukupi untuk menganalisis bagaimana model melanggar prinsip AI yang bertanggungjawab. Tambahan pula, model pembelajaran mesin adalah kotak hitam yang menjadikannya sukar untuk memahami apa yang mendorong hasilnya atau memberikan penjelasan apabila ia membuat kesilapan. Kemudian dalam kursus ini, kita akan belajar bagaimana menggunakan papan pemuka AI yang Bertanggungjawab untuk membantu debugging sistem AI. Papan pemuka menyediakan alat holistik untuk saintis data dan pembangun AI untuk melaksanakan: + +* **Analisis ralat**. Untuk mengenal pasti pengedaran ralat model yang boleh menjejaskan keadilan atau kebolehpercayaan sistem. +* **Gambaran keseluruhan model**. Untuk menemui di mana terdapat perbezaan dalam prestasi model merentasi kohort data. +* **Analisis data**. Untuk memahami pengedaran data dan mengenal pasti sebarang potensi bias dalam data yang boleh membawa kepada isu keadilan, inklusiviti, dan kebolehpercayaan. +* **Kebolehinterpretasian model**. Untuk memahami apa yang mempengaruhi atau mempengaruhi ramalan model. Ini membantu dalam menjelaskan tingkah laku model, yang penting untuk ketelusan dan akauntabiliti. + +## 🚀 Cabaran + +Untuk mengelakkan bahaya daripada diperkenalkan sejak awal, kita harus: + +- mempunyai kepelbagaian latar belakang dan perspektif di kalangan orang yang bekerja pada sistem +- melabur dalam set data yang mencerminkan kepelbagaian masyarakat kita +- membangunkan kaedah yang lebih baik sepanjang kitaran hayat pembelajaran mesin untuk mengesan dan membetulkan AI yang bertanggungjawab apabila ia berlaku + +Fikirkan tentang senario kehidupan sebenar di mana ketidakpercayaan model jelas dalam pembinaan dan penggunaan model. Apa lagi yang perlu kita pertimbangkan? + +## [Kuiz Pasca-Kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Ulasan & Kajian Kendiri + +Dalam pelajaran ini, anda telah mempelajari beberapa asas konsep keadilan dan ketidakadilan dalam pembelajaran mesin. +Tonton bengkel ini untuk mendalami topik: + +- Dalam usaha AI yang bertanggungjawab: Membawa prinsip ke amalan oleh Besmira Nushi, Mehrnoosh Sameki dan Amit Sharma + +[![Responsible AI Toolbox: Kerangka sumber terbuka untuk membina AI yang bertanggungjawab](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Kerangka sumber terbuka untuk membina AI yang bertanggungjawab") + +> 🎥 Klik imej di atas untuk video: RAI Toolbox: Kerangka sumber terbuka untuk membina AI yang bertanggungjawab oleh Besmira Nushi, Mehrnoosh Sameki, dan Amit Sharma + +Juga, baca: + +- Pusat sumber RAI Microsoft: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- Kumpulan penyelidikan FATE Microsoft: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) + +RAI Toolbox: + +- [Repositori GitHub Responsible AI Toolbox](https://github.com/microsoft/responsible-ai-toolbox) + +Baca tentang alat Azure Machine Learning untuk memastikan keadilan: + +- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) + +## Tugasan + +[Terokai RAI Toolbox](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/1-Introduction/3-fairness/assignment.md b/translations/ms/1-Introduction/3-fairness/assignment.md new file mode 100644 index 00000000..a802c8ac --- /dev/null +++ b/translations/ms/1-Introduction/3-fairness/assignment.md @@ -0,0 +1,25 @@ + +# Terokai Alat AI Bertanggungjawab + +## Arahan + +Dalam pelajaran ini, anda telah mempelajari tentang Alat AI Bertanggungjawab, sebuah "projek sumber terbuka yang didorong oleh komuniti untuk membantu saintis data menganalisis dan memperbaiki sistem AI." Untuk tugasan ini, terokai salah satu [notebook](https://github.com/microsoft/responsible-ai-toolbox/blob/main/notebooks/responsibleaidashboard/getting-started.ipynb) RAI Toolbox dan laporkan penemuan anda dalam bentuk kertas kerja atau pembentangan. + +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | --------- | -------- | -------------------- | +| | Kertas kerja atau pembentangan PowerPoint disediakan yang membincangkan sistem Fairlearn, notebook yang dijalankan, dan kesimpulan yang diperoleh daripada menjalankannya | Kertas kerja disediakan tanpa kesimpulan | Tiada kertas kerja disediakan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/1-Introduction/4-techniques-of-ML/README.md b/translations/ms/1-Introduction/4-techniques-of-ML/README.md new file mode 100644 index 00000000..a4e7efa7 --- /dev/null +++ b/translations/ms/1-Introduction/4-techniques-of-ML/README.md @@ -0,0 +1,132 @@ + +# Teknik Pembelajaran Mesin + +Proses membina, menggunakan, dan mengekalkan model pembelajaran mesin serta data yang digunakan adalah sangat berbeza daripada banyak aliran kerja pembangunan lain. Dalam pelajaran ini, kita akan menjelaskan proses tersebut dan menggariskan teknik utama yang perlu anda ketahui. Anda akan: + +- Memahami proses yang mendasari pembelajaran mesin pada tahap tinggi. +- Meneroka konsep asas seperti 'model', 'ramalan', dan 'data latihan'. + +## [Kuiz pra-pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +[![ML untuk pemula - Teknik Pembelajaran Mesin](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML untuk pemula - Teknik Pembelajaran Mesin") + +> 🎥 Klik imej di atas untuk video pendek yang menerangkan pelajaran ini. + +## Pengenalan + +Secara umum, seni mencipta proses pembelajaran mesin (ML) terdiri daripada beberapa langkah: + +1. **Tentukan soalan**. Kebanyakan proses ML bermula dengan menanyakan soalan yang tidak dapat dijawab oleh program bersyarat atau enjin berasaskan peraturan yang mudah. Soalan-soalan ini sering berkisar pada ramalan berdasarkan koleksi data. +2. **Kumpul dan sediakan data**. Untuk menjawab soalan anda, anda memerlukan data. Kualiti dan, kadangkala, kuantiti data anda akan menentukan sejauh mana anda dapat menjawab soalan awal anda. Memvisualkan data adalah aspek penting dalam fasa ini. Fasa ini juga termasuk membahagikan data kepada kumpulan latihan dan ujian untuk membina model. +3. **Pilih kaedah latihan**. Bergantung pada soalan anda dan sifat data anda, anda perlu memilih cara untuk melatih model agar mencerminkan data anda dengan baik dan membuat ramalan yang tepat. Bahagian proses ML ini memerlukan kepakaran khusus dan, sering kali, sejumlah besar eksperimen. +4. **Latih model**. Menggunakan data latihan anda, anda akan menggunakan pelbagai algoritma untuk melatih model agar mengenali pola dalam data. Model mungkin menggunakan berat dalaman yang boleh disesuaikan untuk memberi keutamaan kepada bahagian tertentu data berbanding yang lain untuk membina model yang lebih baik. +5. **Nilai model**. Anda menggunakan data yang belum pernah dilihat sebelumnya (data ujian anda) daripada set yang dikumpulkan untuk melihat bagaimana prestasi model. +6. **Penalaan parameter**. Berdasarkan prestasi model anda, anda boleh mengulangi proses menggunakan parameter atau pembolehubah yang berbeza yang mengawal tingkah laku algoritma yang digunakan untuk melatih model. +7. **Ramalkan**. Gunakan input baru untuk menguji ketepatan model anda. + +## Soalan yang perlu ditanya + +Komputer sangat mahir dalam menemui pola tersembunyi dalam data. Kegunaan ini sangat membantu penyelidik yang mempunyai soalan tentang domain tertentu yang tidak dapat dijawab dengan mudah dengan mencipta enjin peraturan bersyarat. Sebagai contoh, dalam tugas aktuari, seorang saintis data mungkin dapat membina peraturan buatan tangan tentang kadar kematian perokok berbanding bukan perokok. + +Namun, apabila banyak pembolehubah lain dimasukkan ke dalam persamaan, model ML mungkin lebih efisien untuk meramalkan kadar kematian masa depan berdasarkan sejarah kesihatan masa lalu. Contoh yang lebih ceria mungkin membuat ramalan cuaca untuk bulan April di lokasi tertentu berdasarkan data yang merangkumi latitud, longitud, perubahan iklim, jarak ke laut, pola aliran jet, dan banyak lagi. + +✅ [Slide ini](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) tentang model cuaca menawarkan perspektif sejarah untuk menggunakan ML dalam analisis cuaca. + +## Tugas sebelum membina + +Sebelum memulakan pembinaan model anda, terdapat beberapa tugas yang perlu anda selesaikan. Untuk menguji soalan anda dan membentuk hipotesis berdasarkan ramalan model, anda perlu mengenal pasti dan mengkonfigurasi beberapa elemen. + +### Data + +Untuk menjawab soalan anda dengan sebarang kepastian, anda memerlukan sejumlah data yang mencukupi dan jenis yang betul. Terdapat dua perkara yang perlu dilakukan pada tahap ini: + +- **Kumpul data**. Mengambil kira pelajaran sebelumnya tentang keadilan dalam analisis data, kumpulkan data anda dengan berhati-hati. Sedar akan sumber data ini, sebarang bias yang mungkin ada, dan dokumentasikan asal usulnya. +- **Sediakan data**. Terdapat beberapa langkah dalam proses penyediaan data. Anda mungkin perlu menggabungkan data dan menormalkannya jika ia berasal dari sumber yang pelbagai. Anda boleh meningkatkan kualiti dan kuantiti data melalui pelbagai kaedah seperti menukar string kepada nombor (seperti yang kita lakukan dalam [Pengelompokan](../../5-Clustering/1-Visualize/README.md)). Anda juga boleh menghasilkan data baru berdasarkan data asal (seperti yang kita lakukan dalam [Klasifikasi](../../4-Classification/1-Introduction/README.md)). Anda boleh membersihkan dan mengedit data (seperti yang akan kita lakukan sebelum pelajaran [Aplikasi Web](../../3-Web-App/README.md)). Akhirnya, anda mungkin juga perlu mengacak dan mencampurkannya, bergantung pada teknik latihan anda. + +✅ Selepas mengumpul dan memproses data anda, luangkan masa untuk melihat sama ada bentuknya akan membolehkan anda menangani soalan yang dimaksudkan. Mungkin data tersebut tidak akan berfungsi dengan baik dalam tugas yang diberikan, seperti yang kita temui dalam pelajaran [Pengelompokan](../../5-Clustering/1-Visualize/README.md)! + +### Ciri dan Sasaran + +[Ciri](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) adalah sifat yang boleh diukur daripada data anda. Dalam banyak set data, ia dinyatakan sebagai tajuk lajur seperti 'tarikh', 'saiz', atau 'warna'. Pembolehubah ciri anda, biasanya diwakili sebagai `X` dalam kod, mewakili pembolehubah input yang akan digunakan untuk melatih model. + +Sasaran adalah perkara yang anda cuba ramalkan. Sasaran, biasanya diwakili sebagai `y` dalam kod, mewakili jawapan kepada soalan yang anda cuba tanyakan kepada data anda: pada bulan Disember, **warna** labu mana yang akan paling murah? Di San Francisco, kawasan kejiranan mana yang akan mempunyai **harga** hartanah terbaik? Kadangkala sasaran juga dirujuk sebagai atribut label. + +### Memilih pembolehubah ciri anda + +🎓 **Pemilihan Ciri dan Ekstraksi Ciri** Bagaimana anda tahu pembolehubah mana yang perlu dipilih semasa membina model? Anda mungkin akan melalui proses pemilihan ciri atau ekstraksi ciri untuk memilih pembolehubah yang betul untuk model yang paling berprestasi. Walau bagaimanapun, mereka tidak sama: "Ekstraksi ciri mencipta ciri baru daripada fungsi ciri asal, manakala pemilihan ciri mengembalikan subset ciri." ([sumber](https://wikipedia.org/wiki/Feature_selection)) + +### Visualkan data anda + +Aspek penting dalam alat saintis data adalah kuasa untuk memvisualkan data menggunakan beberapa pustaka yang sangat baik seperti Seaborn atau MatPlotLib. Mewakili data anda secara visual mungkin membolehkan anda menemui korelasi tersembunyi yang boleh anda manfaatkan. Visualisasi anda juga mungkin membantu anda menemui bias atau data yang tidak seimbang (seperti yang kita temui dalam [Klasifikasi](../../4-Classification/2-Classifiers-1/README.md)). + +### Bahagikan set data anda + +Sebelum latihan, anda perlu membahagikan set data anda kepada dua atau lebih bahagian yang tidak sama saiz tetapi masih mewakili data dengan baik. + +- **Latihan**. Bahagian set data ini digunakan untuk melatih model anda. Set ini membentuk sebahagian besar daripada set data asal. +- **Ujian**. Set ujian adalah kumpulan data bebas, sering kali diambil daripada data asal, yang anda gunakan untuk mengesahkan prestasi model yang dibina. +- **Pengesahan**. Set pengesahan adalah kumpulan contoh bebas yang lebih kecil yang anda gunakan untuk menala parameter hiper model, atau seni bina, untuk meningkatkan model. Bergantung pada saiz data anda dan soalan yang anda tanyakan, anda mungkin tidak perlu membina set ketiga ini (seperti yang kita perhatikan dalam [Ramalan Siri Masa](../../7-TimeSeries/1-Introduction/README.md)). + +## Membina model + +Menggunakan data latihan anda, matlamat anda adalah untuk membina model, atau representasi statistik data anda, menggunakan pelbagai algoritma untuk **melatih**nya. Melatih model mendedahkannya kepada data dan membolehkan ia membuat andaian tentang pola yang ditemui, disahkan, dan diterima atau ditolak. + +### Tentukan kaedah latihan + +Bergantung pada soalan anda dan sifat data anda, anda akan memilih kaedah untuk melatihnya. Melalui [dokumentasi Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - yang kita gunakan dalam kursus ini - anda boleh meneroka banyak cara untuk melatih model. Bergantung pada pengalaman anda, anda mungkin perlu mencuba beberapa kaedah yang berbeza untuk membina model terbaik. Anda mungkin akan melalui proses di mana saintis data menilai prestasi model dengan memberinya data yang belum dilihat, memeriksa ketepatan, bias, dan isu lain yang merosakkan kualiti, serta memilih kaedah latihan yang paling sesuai untuk tugas yang diberikan. + +### Latih model + +Dengan data latihan anda, anda bersedia untuk 'memasangkannya' untuk mencipta model. Anda akan perasan bahawa dalam banyak pustaka ML, anda akan menemui kod 'model.fit' - pada masa ini anda menghantar pembolehubah ciri anda sebagai array nilai (biasanya 'X') dan pembolehubah sasaran (biasanya 'y'). + +### Nilai model + +Setelah proses latihan selesai (ia boleh mengambil banyak iterasi, atau 'epoch', untuk melatih model besar), anda akan dapat menilai kualiti model dengan menggunakan data ujian untuk mengukur prestasinya. Data ini adalah subset daripada data asal yang belum dianalisis oleh model. Anda boleh mencetak jadual metrik tentang kualiti model anda. + +🎓 **Pemasangan model** + +Dalam konteks pembelajaran mesin, pemasangan model merujuk kepada ketepatan fungsi asas model semasa ia cuba menganalisis data yang tidak dikenali. + +🎓 **Underfitting** dan **overfitting** adalah masalah biasa yang merosakkan kualiti model, kerana model sama ada tidak cukup baik atau terlalu baik. Ini menyebabkan model membuat ramalan yang terlalu selaras atau terlalu longgar dengan data latihannya. Model yang terlalu sesuai meramalkan data latihan terlalu baik kerana ia telah mempelajari butiran dan bunyi data terlalu baik. Model yang kurang sesuai tidak tepat kerana ia tidak dapat menganalisis data latihannya atau data yang belum 'dilihat' dengan tepat. + +![model overfitting](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png) +> Infografik oleh [Jen Looper](https://twitter.com/jenlooper) + +## Penalaan parameter + +Setelah latihan awal anda selesai, perhatikan kualiti model dan pertimbangkan untuk meningkatkannya dengan menyesuaikan 'parameter hiper'nya. Baca lebih lanjut tentang proses ini [dalam dokumentasi](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). + +## Ramalan + +Ini adalah saat di mana anda boleh menggunakan data yang benar-benar baru untuk menguji ketepatan model anda. Dalam tetapan ML 'terapan', di mana anda membina aset web untuk menggunakan model dalam pengeluaran, proses ini mungkin melibatkan pengumpulan input pengguna (tekanan butang, sebagai contoh) untuk menetapkan pembolehubah dan menghantarnya kepada model untuk inferens, atau penilaian. + +Dalam pelajaran ini, anda akan menemui cara menggunakan langkah-langkah ini untuk menyediakan, membina, menguji, menilai, dan meramalkan - semua gerakan seorang saintis data dan banyak lagi, semasa anda maju dalam perjalanan anda untuk menjadi jurutera ML 'full stack'. + +--- + +## 🚀Cabaran + +Lukiskan carta alir yang mencerminkan langkah-langkah seorang pengamal ML. Di mana anda melihat diri anda sekarang dalam proses ini? Di mana anda meramalkan anda akan menghadapi kesukaran? Apa yang kelihatan mudah bagi anda? + +## [Kuiz selepas pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Ulasan & Kajian Kendiri + +Cari dalam talian untuk temu bual dengan saintis data yang membincangkan kerja harian mereka. Berikut adalah [satu](https://www.youtube.com/watch?v=Z3IjgbbCEfs). + +## Tugasan + +[Temu bual seorang saintis data](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/1-Introduction/4-techniques-of-ML/assignment.md b/translations/ms/1-Introduction/4-techniques-of-ML/assignment.md new file mode 100644 index 00000000..411dfbd6 --- /dev/null +++ b/translations/ms/1-Introduction/4-techniques-of-ML/assignment.md @@ -0,0 +1,25 @@ + +# Temu bual seorang saintis data + +## Arahan + +Di syarikat anda, dalam kumpulan pengguna, atau di kalangan rakan atau pelajar lain, berbincanglah dengan seseorang yang bekerja secara profesional sebagai saintis data. Tulis sebuah kertas pendek (500 perkataan) tentang pekerjaan harian mereka. Adakah mereka pakar, atau adakah mereka bekerja secara 'full stack'? + +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | ----------------------------------------------------------------------------------- | ---------------------------------------------------------------- | --------------------- | +| | Sebuah esei dengan panjang yang betul, dengan sumber yang dinyatakan, disediakan sebagai fail .doc | Esei kurang dinyatakan sumbernya atau lebih pendek daripada panjang yang diperlukan | Tiada esei disediakan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/1-Introduction/README.md b/translations/ms/1-Introduction/README.md new file mode 100644 index 00000000..5986860a --- /dev/null +++ b/translations/ms/1-Introduction/README.md @@ -0,0 +1,37 @@ + +# Pengenalan kepada pembelajaran mesin + +Dalam bahagian kurikulum ini, anda akan diperkenalkan kepada konsep asas yang mendasari bidang pembelajaran mesin, apa itu pembelajaran mesin, serta mempelajari sejarahnya dan teknik yang digunakan oleh para penyelidik untuk bekerja dengannya. Mari kita terokai dunia baru ML ini bersama-sama! + +![globe](../../../1-Introduction/images/globe.jpg) +> Foto oleh Bill Oxford di Unsplash + +### Pelajaran + +1. [Pengenalan kepada pembelajaran mesin](1-intro-to-ML/README.md) +1. [Sejarah pembelajaran mesin dan AI](2-history-of-ML/README.md) +1. [Keadilan dan pembelajaran mesin](3-fairness/README.md) +1. [Teknik pembelajaran mesin](4-techniques-of-ML/README.md) + +### Kredit + +"Pengenalan kepada Pembelajaran Mesin" ditulis dengan ♥️ oleh pasukan yang termasuk [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) dan [Jen Looper](https://twitter.com/jenlooper) + +"Sejarah Pembelajaran Mesin" ditulis dengan ♥️ oleh [Jen Looper](https://twitter.com/jenlooper) dan [Amy Boyd](https://twitter.com/AmyKateNicho) + +"Keadilan dan Pembelajaran Mesin" ditulis dengan ♥️ oleh [Tomomi Imura](https://twitter.com/girliemac) + +"Teknik Pembelajaran Mesin" ditulis dengan ♥️ oleh [Jen Looper](https://twitter.com/jenlooper) dan [Chris Noring](https://twitter.com/softchris) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/2-Regression/1-Tools/README.md b/translations/ms/2-Regression/1-Tools/README.md new file mode 100644 index 00000000..253e83c2 --- /dev/null +++ b/translations/ms/2-Regression/1-Tools/README.md @@ -0,0 +1,239 @@ + +# Bermula dengan Python dan Scikit-learn untuk model regresi + +![Ringkasan regresi dalam sketchnote](../../../../sketchnotes/ml-regression.png) + +> Sketchnote oleh [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [Kuiz sebelum kuliah](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Pelajaran ini tersedia dalam R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) + +## Pengenalan + +Dalam empat pelajaran ini, anda akan belajar cara membina model regresi. Kita akan membincangkan kegunaannya sebentar lagi. Tetapi sebelum memulakan apa-apa, pastikan anda mempunyai alat yang betul untuk memulakan proses ini! + +Dalam pelajaran ini, anda akan belajar cara: + +- Mengkonfigurasi komputer anda untuk tugas pembelajaran mesin secara tempatan. +- Bekerja dengan Jupyter notebooks. +- Menggunakan Scikit-learn, termasuk pemasangan. +- Meneroka regresi linear melalui latihan praktikal. + +## Pemasangan dan konfigurasi + +[![ML untuk pemula - Sediakan alat anda untuk membina model Pembelajaran Mesin](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML untuk pemula - Sediakan alat anda untuk membina model Pembelajaran Mesin") + +> 🎥 Klik imej di atas untuk video pendek tentang cara mengkonfigurasi komputer anda untuk ML. + +1. **Pasang Python**. Pastikan [Python](https://www.python.org/downloads/) dipasang pada komputer anda. Anda akan menggunakan Python untuk banyak tugas sains data dan pembelajaran mesin. Kebanyakan sistem komputer sudah mempunyai Python yang dipasang. Terdapat juga [Pakej Pengkodan Python](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) yang berguna untuk memudahkan pemasangan bagi sesetengah pengguna. + + Walau bagaimanapun, beberapa penggunaan Python memerlukan satu versi perisian, manakala yang lain memerlukan versi yang berbeza. Oleh itu, adalah berguna untuk bekerja dalam [persekitaran maya](https://docs.python.org/3/library/venv.html). + +2. **Pasang Visual Studio Code**. Pastikan anda mempunyai Visual Studio Code yang dipasang pada komputer anda. Ikuti arahan ini untuk [memasang Visual Studio Code](https://code.visualstudio.com/) untuk pemasangan asas. Anda akan menggunakan Python dalam Visual Studio Code dalam kursus ini, jadi anda mungkin ingin menyegarkan pengetahuan anda tentang cara [mengkonfigurasi Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) untuk pembangunan Python. + + > Biasakan diri dengan Python dengan melalui koleksi [modul pembelajaran ini](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) + > + > [![Sediakan Python dengan Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Sediakan Python dengan Visual Studio Code") + > + > 🎥 Klik imej di atas untuk video: menggunakan Python dalam VS Code. + +3. **Pasang Scikit-learn**, dengan mengikuti [arahan ini](https://scikit-learn.org/stable/install.html). Oleh kerana anda perlu memastikan bahawa anda menggunakan Python 3, disarankan agar anda menggunakan persekitaran maya. Perhatikan, jika anda memasang pustaka ini pada Mac M1, terdapat arahan khas pada halaman yang dipautkan di atas. + +4. **Pasang Jupyter Notebook**. Anda perlu [memasang pakej Jupyter](https://pypi.org/project/jupyter/). + +## Persekitaran pengarang ML anda + +Anda akan menggunakan **notebooks** untuk membangunkan kod Python anda dan mencipta model pembelajaran mesin. Jenis fail ini adalah alat biasa untuk saintis data, dan ia boleh dikenalpasti melalui akhiran atau sambungan `.ipynb`. + +Notebooks adalah persekitaran interaktif yang membolehkan pembangun untuk menulis kod serta menambah nota dan dokumentasi di sekitar kod, yang sangat berguna untuk projek eksperimen atau berorientasikan penyelidikan. + +[![ML untuk pemula - Sediakan Jupyter Notebooks untuk mula membina model regresi](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML untuk pemula - Sediakan Jupyter Notebooks untuk mula membina model regresi") + +> 🎥 Klik imej di atas untuk video pendek melalui latihan ini. + +### Latihan - bekerja dengan notebook + +Dalam folder ini, anda akan menemui fail _notebook.ipynb_. + +1. Buka _notebook.ipynb_ dalam Visual Studio Code. + + Pelayan Jupyter akan bermula dengan Python 3+ dimulakan. Anda akan menemui kawasan dalam notebook yang boleh `dijalankan`, iaitu potongan kod. Anda boleh menjalankan blok kod dengan memilih ikon yang kelihatan seperti butang main. + +2. Pilih ikon `md` dan tambahkan sedikit markdown, serta teks berikut **# Selamat datang ke notebook anda**. + + Seterusnya, tambahkan beberapa kod Python. + +3. Taip **print('hello notebook')** dalam blok kod. +4. Pilih anak panah untuk menjalankan kod. + + Anda sepatutnya melihat kenyataan yang dicetak: + + ```output + hello notebook + ``` + +![VS Code dengan notebook dibuka](../../../../2-Regression/1-Tools/images/notebook.jpg) + +Anda boleh menyelitkan kod anda dengan komen untuk mendokumentasikan notebook secara sendiri. + +✅ Fikirkan sebentar tentang betapa berbezanya persekitaran kerja pembangun web berbanding dengan saintis data. + +## Memulakan dengan Scikit-learn + +Sekarang Python telah disediakan dalam persekitaran tempatan anda, dan anda sudah selesa dengan Jupyter notebooks, mari kita menjadi sama selesa dengan Scikit-learn (disebut `sci` seperti dalam `science`). Scikit-learn menyediakan [API yang luas](https://scikit-learn.org/stable/modules/classes.html#api-ref) untuk membantu anda melaksanakan tugas ML. + +Menurut [laman web mereka](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn adalah pustaka pembelajaran mesin sumber terbuka yang menyokong pembelajaran terarah dan tidak terarah. Ia juga menyediakan pelbagai alat untuk pemasangan model, prapemprosesan data, pemilihan model dan penilaian, serta banyak utiliti lain." + +Dalam kursus ini, anda akan menggunakan Scikit-learn dan alat lain untuk membina model pembelajaran mesin untuk melaksanakan apa yang kita panggil tugas 'pembelajaran mesin tradisional'. Kami sengaja mengelakkan rangkaian neural dan pembelajaran mendalam, kerana ia lebih sesuai diliputi dalam kurikulum 'AI untuk Pemula' kami yang akan datang. + +Scikit-learn memudahkan untuk membina model dan menilai mereka untuk digunakan. Ia terutamanya memberi tumpuan kepada penggunaan data berangka dan mengandungi beberapa dataset siap sedia untuk digunakan sebagai alat pembelajaran. Ia juga termasuk model pra-bina untuk pelajar mencuba. Mari kita terokai proses memuatkan data yang telah dipakejkan dan menggunakan estimator terbina untuk model ML pertama dengan Scikit-learn menggunakan data asas. + +## Latihan - notebook Scikit-learn pertama anda + +> Tutorial ini diilhamkan oleh [contoh regresi linear](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) di laman web Scikit-learn. + +[![ML untuk pemula - Projek Regresi Linear Pertama Anda dalam Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML untuk pemula - Projek Regresi Linear Pertama Anda dalam Python") + +> 🎥 Klik imej di atas untuk video pendek melalui latihan ini. + +Dalam fail _notebook.ipynb_ yang berkaitan dengan pelajaran ini, kosongkan semua sel dengan menekan ikon 'tong sampah'. + +Dalam bahagian ini, anda akan bekerja dengan dataset kecil tentang diabetes yang dibina dalam Scikit-learn untuk tujuan pembelajaran. Bayangkan anda ingin menguji rawatan untuk pesakit diabetes. Model Pembelajaran Mesin mungkin membantu anda menentukan pesakit mana yang akan memberi tindak balas lebih baik terhadap rawatan, berdasarkan gabungan pembolehubah. Malah model regresi yang sangat asas, apabila divisualisasikan, mungkin menunjukkan maklumat tentang pembolehubah yang akan membantu anda mengatur ujian klinikal teori anda. + +✅ Terdapat banyak jenis kaedah regresi, dan yang mana anda pilih bergantung pada jawapan yang anda cari. Jika anda ingin meramalkan ketinggian yang mungkin untuk seseorang berdasarkan umur tertentu, anda akan menggunakan regresi linear, kerana anda mencari **nilai berangka**. Jika anda berminat untuk mengetahui sama ada jenis masakan harus dianggap vegan atau tidak, anda mencari **penugasan kategori**, jadi anda akan menggunakan regresi logistik. Anda akan belajar lebih lanjut tentang regresi logistik kemudian. Fikirkan sedikit tentang beberapa soalan yang boleh anda tanyakan kepada data, dan kaedah mana yang lebih sesuai. + +Mari kita mulakan tugas ini. + +### Import pustaka + +Untuk tugas ini, kita akan mengimport beberapa pustaka: + +- **matplotlib**. Ia adalah alat [grafik yang berguna](https://matplotlib.org/) dan kita akan menggunakannya untuk mencipta plot garis. +- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) adalah pustaka berguna untuk mengendalikan data berangka dalam Python. +- **sklearn**. Ini adalah pustaka [Scikit-learn](https://scikit-learn.org/stable/user_guide.html). + +Import beberapa pustaka untuk membantu tugas anda. + +1. Tambahkan import dengan menaip kod berikut: + + ```python + import matplotlib.pyplot as plt + import numpy as np + from sklearn import datasets, linear_model, model_selection + ``` + + Di atas, anda mengimport `matplotlib`, `numpy` dan anda mengimport `datasets`, `linear_model` dan `model_selection` dari `sklearn`. `model_selection` digunakan untuk membahagikan data kepada set latihan dan ujian. + +### Dataset diabetes + +Dataset [diabetes](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) yang dibina dalam Scikit-learn termasuk 442 sampel data tentang diabetes, dengan 10 pembolehubah ciri, beberapa daripadanya termasuk: + +- age: umur dalam tahun +- bmi: indeks jisim badan +- bp: tekanan darah purata +- s1 tc: T-Cells (sejenis sel darah putih) + +✅ Dataset ini termasuk konsep 'sex' sebagai pembolehubah ciri yang penting untuk penyelidikan tentang diabetes. Banyak dataset perubatan termasuk jenis klasifikasi binari ini. Fikirkan sedikit tentang bagaimana pengkategorian seperti ini mungkin mengecualikan bahagian tertentu populasi daripada rawatan. + +Sekarang, muatkan data X dan y. + +> 🎓 Ingat, ini adalah pembelajaran terarah, dan kita memerlukan sasaran 'y' yang bernama. + +Dalam sel kod baru, muatkan dataset diabetes dengan memanggil `load_diabetes()`. Input `return_X_y=True` menandakan bahawa `X` akan menjadi matriks data, dan `y` akan menjadi sasaran regresi. + +1. Tambahkan beberapa arahan cetak untuk menunjukkan bentuk matriks data dan elemen pertamanya: + + ```python + X, y = datasets.load_diabetes(return_X_y=True) + print(X.shape) + print(X[0]) + ``` + + Apa yang anda dapat sebagai respons adalah tuple. Apa yang anda lakukan adalah menetapkan dua nilai pertama tuple kepada `X` dan `y` masing-masing. Ketahui lebih lanjut [tentang tuple](https://wikipedia.org/wiki/Tuple). + + Anda boleh melihat bahawa data ini mempunyai 442 item yang dibentuk dalam array 10 elemen: + + ```text + (442, 10) + [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 + -0.04340085 -0.00259226 0.01990842 -0.01764613] + ``` + + ✅ Fikirkan sedikit tentang hubungan antara data dan sasaran regresi. Regresi linear meramalkan hubungan antara ciri X dan pembolehubah sasaran y. Bolehkah anda mencari [sasaran](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) untuk dataset diabetes dalam dokumentasi? Apa yang dataset ini tunjukkan, memandangkan sasaran? + +2. Seterusnya, pilih sebahagian dataset ini untuk diplot dengan memilih lajur ke-3 dataset. Anda boleh melakukannya dengan menggunakan operator `:` untuk memilih semua baris, dan kemudian memilih lajur ke-3 menggunakan indeks (2). Anda juga boleh membentuk semula data menjadi array 2D - seperti yang diperlukan untuk plot - dengan menggunakan `reshape(n_rows, n_columns)`. Jika salah satu parameter adalah -1, dimensi yang sepadan dikira secara automatik. + + ```python + X = X[:, 2] + X = X.reshape((-1,1)) + ``` + + ✅ Pada bila-bila masa, cetak data untuk memeriksa bentuknya. + +3. Sekarang setelah anda mempunyai data yang siap untuk diplot, anda boleh melihat sama ada mesin dapat membantu menentukan pemisahan logik antara nombor dalam dataset ini. Untuk melakukan ini, anda perlu membahagikan kedua-dua data (X) dan sasaran (y) kepada set ujian dan latihan. Scikit-learn mempunyai cara yang mudah untuk melakukan ini; anda boleh membahagikan data ujian anda pada titik tertentu. + + ```python + X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) + ``` + +4. Sekarang anda bersedia untuk melatih model anda! Muatkan model regresi linear dan latih dengan set latihan X dan y anda menggunakan `model.fit()`: + + ```python + model = linear_model.LinearRegression() + model.fit(X_train, y_train) + ``` + + ✅ `model.fit()` adalah fungsi yang akan anda lihat dalam banyak pustaka ML seperti TensorFlow. + +5. Kemudian, buat ramalan menggunakan data ujian, dengan menggunakan fungsi `predict()`. Ini akan digunakan untuk melukis garis antara kumpulan data model. + + ```python + y_pred = model.predict(X_test) + ``` + +6. Sekarang tiba masanya untuk menunjukkan data dalam plot. Matplotlib adalah alat yang sangat berguna untuk tugas ini. Buat scatterplot semua data ujian X dan y, dan gunakan ramalan untuk melukis garis di tempat yang paling sesuai, antara kumpulan data model. + + ```python + plt.scatter(X_test, y_test, color='black') + plt.plot(X_test, y_pred, color='blue', linewidth=3) + plt.xlabel('Scaled BMIs') + plt.ylabel('Disease Progression') + plt.title('A Graph Plot Showing Diabetes Progression Against BMI') + plt.show() + ``` + + ![scatterplot menunjukkan titik data tentang diabetes](../../../../2-Regression/1-Tools/images/scatterplot.png) +✅ Fikirkan sedikit tentang apa yang sedang berlaku di sini. Garis lurus sedang melalui banyak titik kecil data, tetapi apa sebenarnya yang sedang dilakukan? Bolehkah anda melihat bagaimana anda sepatutnya dapat menggunakan garis ini untuk meramalkan di mana titik data baru yang belum dilihat sepatutnya sesuai dalam hubungan dengan paksi y plot? Cuba nyatakan dalam kata-kata kegunaan praktikal model ini. + +Tahniah, anda telah membina model regresi linear pertama anda, mencipta ramalan dengannya, dan memaparkannya dalam plot! + +--- +## 🚀Cabaran + +Plotkan pemboleh ubah yang berbeza daripada dataset ini. Petunjuk: edit baris ini: `X = X[:,2]`. Berdasarkan sasaran dataset ini, apakah yang anda dapat temui tentang perkembangan diabetes sebagai penyakit? + +## [Kuiz selepas kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Ulasan & Kajian Kendiri + +Dalam tutorial ini, anda bekerja dengan regresi linear mudah, bukannya regresi univariat atau regresi berganda. Baca sedikit tentang perbezaan antara kaedah-kaedah ini, atau lihat [video ini](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef). + +Baca lebih lanjut tentang konsep regresi dan fikirkan tentang jenis soalan yang boleh dijawab oleh teknik ini. Ambil [tutorial ini](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) untuk mendalami pemahaman anda. + +## Tugasan + +[Dataset yang berbeza](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/2-Regression/1-Tools/assignment.md b/translations/ms/2-Regression/1-Tools/assignment.md new file mode 100644 index 00000000..3ace92d0 --- /dev/null +++ b/translations/ms/2-Regression/1-Tools/assignment.md @@ -0,0 +1,27 @@ + +# Regresi dengan Scikit-learn + +## Arahan + +Lihat dataset [Linnerud](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) dalam Scikit-learn. Dataset ini mempunyai pelbagai [sasaran](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset): 'Ia terdiri daripada tiga pemboleh ubah senaman (data) dan tiga pemboleh ubah fisiologi (sasaran) yang dikumpulkan daripada dua puluh lelaki pertengahan umur di sebuah kelab kecergasan'. + +Dengan menggunakan kata-kata anda sendiri, terangkan cara untuk mencipta model Regresi yang boleh memplotkan hubungan antara ukuran pinggang dan jumlah sit-up yang dilakukan. Lakukan perkara yang sama untuk titik data lain dalam dataset ini. + +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| ------------------------------ | ----------------------------------- | ----------------------------- | -------------------------- | +| Hantar perenggan deskriptif | Perenggan yang ditulis dengan baik dihantar | Beberapa ayat dihantar | Tiada penerangan diberikan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/2-Regression/1-Tools/solution/Julia/README.md b/translations/ms/2-Regression/1-Tools/solution/Julia/README.md new file mode 100644 index 00000000..4a663c77 --- /dev/null +++ b/translations/ms/2-Regression/1-Tools/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/2-Regression/2-Data/README.md b/translations/ms/2-Regression/2-Data/README.md new file mode 100644 index 00000000..3ec9c3d5 --- /dev/null +++ b/translations/ms/2-Regression/2-Data/README.md @@ -0,0 +1,226 @@ + +# Bina model regresi menggunakan Scikit-learn: sediakan dan visualisasikan data + +![Infografik visualisasi data](../../../../2-Regression/2-Data/images/data-visualization.png) + +Infografik oleh [Dasani Madipalli](https://twitter.com/dasani_decoded) + +## [Kuiz sebelum kuliah](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Pelajaran ini tersedia dalam R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html) + +## Pengenalan + +Sekarang anda telah bersedia dengan alat yang diperlukan untuk mula membina model pembelajaran mesin menggunakan Scikit-learn, anda sudah bersedia untuk mula bertanya soalan kepada data anda. Semasa anda bekerja dengan data dan menerapkan penyelesaian ML, adalah sangat penting untuk memahami cara bertanya soalan yang betul untuk membuka potensi dataset anda dengan tepat. + +Dalam pelajaran ini, anda akan belajar: + +- Cara menyediakan data anda untuk pembinaan model. +- Cara menggunakan Matplotlib untuk visualisasi data. + +## Bertanya soalan yang betul kepada data anda + +Soalan yang anda perlukan jawapannya akan menentukan jenis algoritma ML yang akan anda gunakan. Dan kualiti jawapan yang anda peroleh sangat bergantung pada sifat data anda. + +Lihat [data](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) yang disediakan untuk pelajaran ini. Anda boleh membuka fail .csv ini dalam VS Code. Sekilas pandang menunjukkan terdapat kekosongan dan campuran data string dan numerik. Terdapat juga kolum yang pelik dipanggil 'Package' di mana datanya adalah campuran antara 'sacks', 'bins' dan nilai lain. Data ini, sebenarnya, agak bersepah. + +[![ML untuk pemula - Cara Menganalisis dan Membersihkan Dataset](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML untuk pemula - Cara Menganalisis dan Membersihkan Dataset") + +> 🎥 Klik imej di atas untuk video pendek yang menunjukkan cara menyediakan data untuk pelajaran ini. + +Sebenarnya, adalah tidak biasa untuk menerima dataset yang sepenuhnya siap digunakan untuk mencipta model ML secara langsung. Dalam pelajaran ini, anda akan belajar cara menyediakan dataset mentah menggunakan pustaka Python standard. Anda juga akan belajar pelbagai teknik untuk memvisualisasikan data. + +## Kajian kes: 'pasaran labu' + +Dalam folder ini, anda akan menemui fail .csv dalam folder root `data` yang dipanggil [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) yang mengandungi 1757 baris data tentang pasaran labu, disusun mengikut kumpulan berdasarkan bandar. Ini adalah data mentah yang diekstrak daripada [Laporan Standard Pasaran Terminal Tanaman Khas](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) yang diedarkan oleh Jabatan Pertanian Amerika Syarikat. + +### Menyediakan data + +Data ini adalah dalam domain awam. Ia boleh dimuat turun dalam banyak fail berasingan, mengikut bandar, dari laman web USDA. Untuk mengelakkan terlalu banyak fail berasingan, kami telah menggabungkan semua data bandar ke dalam satu spreadsheet, jadi kami telah _menyediakan_ data sedikit. Seterusnya, mari kita lihat lebih dekat data ini. + +### Data labu - kesimpulan awal + +Apa yang anda perhatikan tentang data ini? Anda sudah melihat bahawa terdapat campuran string, nombor, kekosongan dan nilai pelik yang perlu anda fahami. + +Soalan apa yang boleh anda tanyakan kepada data ini, menggunakan teknik Regresi? Bagaimana dengan "Meramalkan harga labu yang dijual pada bulan tertentu". Melihat semula data, terdapat beberapa perubahan yang perlu anda lakukan untuk mencipta struktur data yang diperlukan untuk tugas ini. + +## Latihan - analisis data labu + +Mari gunakan [Pandas](https://pandas.pydata.org/), (nama ini bermaksud `Python Data Analysis`) alat yang sangat berguna untuk membentuk data, untuk menganalisis dan menyediakan data labu ini. + +### Pertama, periksa tarikh yang hilang + +Anda perlu mengambil langkah untuk memeriksa tarikh yang hilang: + +1. Tukarkan tarikh kepada format bulan (ini adalah tarikh AS, jadi formatnya adalah `MM/DD/YYYY`). +2. Ekstrak bulan ke kolum baru. + +Buka fail _notebook.ipynb_ dalam Visual Studio Code dan import spreadsheet ke dalam dataframe Pandas yang baru. + +1. Gunakan fungsi `head()` untuk melihat lima baris pertama. + + ```python + import pandas as pd + pumpkins = pd.read_csv('../data/US-pumpkins.csv') + pumpkins.head() + ``` + + ✅ Fungsi apa yang akan anda gunakan untuk melihat lima baris terakhir? + +1. Periksa jika terdapat data yang hilang dalam dataframe semasa: + + ```python + pumpkins.isnull().sum() + ``` + + Terdapat data yang hilang, tetapi mungkin ia tidak akan menjadi masalah untuk tugas ini. + +1. Untuk memudahkan dataframe anda bekerja, pilih hanya kolum yang anda perlukan, menggunakan fungsi `loc` yang mengekstrak dari dataframe asal sekumpulan baris (diberikan sebagai parameter pertama) dan kolum (diberikan sebagai parameter kedua). Ungkapan `:` dalam kes di bawah bermaksud "semua baris". + + ```python + columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] + pumpkins = pumpkins.loc[:, columns_to_select] + ``` + +### Kedua, tentukan harga purata labu + +Fikirkan cara menentukan harga purata labu dalam bulan tertentu. Kolum apa yang akan anda pilih untuk tugas ini? Petunjuk: anda memerlukan 3 kolum. + +Penyelesaian: ambil purata kolum `Low Price` dan `High Price` untuk mengisi kolum Harga baru, dan tukarkan kolum Tarikh untuk hanya menunjukkan bulan. Nasib baik, menurut pemeriksaan di atas, tiada data yang hilang untuk tarikh atau harga. + +1. Untuk mengira purata, tambahkan kod berikut: + + ```python + price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 + + month = pd.DatetimeIndex(pumpkins['Date']).month + + ``` + + ✅ Anda bebas untuk mencetak sebarang data yang anda ingin periksa menggunakan `print(month)`. + +2. Sekarang, salin data yang telah ditukar ke dalam dataframe Pandas yang baru: + + ```python + new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) + ``` + + Mencetak dataframe anda akan menunjukkan dataset yang bersih dan kemas di mana anda boleh membina model regresi baru anda. + +### Tetapi tunggu! Ada sesuatu yang pelik di sini + +Jika anda melihat kolum `Package`, labu dijual dalam pelbagai konfigurasi. Ada yang dijual dalam ukuran '1 1/9 bushel', ada yang dalam ukuran '1/2 bushel', ada yang per labu, ada yang per pound, dan ada yang dalam kotak besar dengan lebar yang berbeza. + +> Labu nampaknya sangat sukar untuk ditimbang secara konsisten + +Menggali data asal, menarik bahawa apa-apa dengan `Unit of Sale` yang sama dengan 'EACH' atau 'PER BIN' juga mempunyai jenis `Package` per inci, per bin, atau 'each'. Labu nampaknya sangat sukar untuk ditimbang secara konsisten, jadi mari kita tapis mereka dengan memilih hanya labu dengan string 'bushel' dalam kolum `Package`. + +1. Tambahkan penapis di bahagian atas fail, di bawah import .csv awal: + + ```python + pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] + ``` + + Jika anda mencetak data sekarang, anda boleh melihat bahawa anda hanya mendapatkan sekitar 415 baris data yang mengandungi labu mengikut bushel. + +### Tetapi tunggu! Ada satu lagi perkara yang perlu dilakukan + +Adakah anda perasan bahawa jumlah bushel berbeza setiap baris? Anda perlu menormalkan harga supaya anda menunjukkan harga per bushel, jadi lakukan beberapa pengiraan untuk menyeragamkannya. + +1. Tambahkan baris ini selepas blok yang mencipta dataframe new_pumpkins: + + ```python + new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) + + new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2) + ``` + +✅ Menurut [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), berat bushel bergantung pada jenis hasil, kerana ia adalah ukuran volum. "Bushel tomato, sebagai contoh, sepatutnya beratnya 56 paun... Daun dan sayur-sayuran mengambil lebih banyak ruang dengan berat yang lebih sedikit, jadi bushel bayam hanya 20 paun." Semuanya agak rumit! Mari kita tidak bersusah payah membuat penukaran bushel-ke-paun, dan sebaliknya harga mengikut bushel. Semua kajian tentang bushel labu ini, bagaimanapun, menunjukkan betapa pentingnya memahami sifat data anda! + +Sekarang, anda boleh menganalisis harga per unit berdasarkan ukuran bushel mereka. Jika anda mencetak data sekali lagi, anda boleh melihat bagaimana ia telah diseragamkan. + +✅ Adakah anda perasan bahawa labu yang dijual mengikut setengah bushel sangat mahal? Bolehkah anda mengetahui sebabnya? Petunjuk: labu kecil jauh lebih mahal daripada yang besar, mungkin kerana terdapat lebih banyak daripadanya per bushel, memandangkan ruang yang tidak digunakan yang diambil oleh satu labu pai besar yang berongga. + +## Strategi Visualisasi + +Sebahagian daripada peranan saintis data adalah untuk menunjukkan kualiti dan sifat data yang mereka kerjakan. Untuk melakukan ini, mereka sering mencipta visualisasi yang menarik, seperti plot, graf, dan carta, yang menunjukkan aspek data yang berbeza. Dengan cara ini, mereka dapat menunjukkan secara visual hubungan dan jurang yang sukar untuk ditemui. + +[![ML untuk pemula - Cara Memvisualisasikan Data dengan Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML untuk pemula - Cara Memvisualisasikan Data dengan Matplotlib") + +> 🎥 Klik imej di atas untuk video pendek yang menunjukkan cara memvisualisasikan data untuk pelajaran ini. + +Visualisasi juga boleh membantu menentukan teknik pembelajaran mesin yang paling sesuai untuk data. Plot taburan yang kelihatan mengikuti garis, sebagai contoh, menunjukkan bahawa data adalah calon yang baik untuk latihan regresi linear. + +Satu pustaka visualisasi data yang berfungsi dengan baik dalam Jupyter notebooks ialah [Matplotlib](https://matplotlib.org/) (yang juga anda lihat dalam pelajaran sebelumnya). + +> Dapatkan lebih banyak pengalaman dengan visualisasi data dalam [tutorial ini](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott). + +## Latihan - eksperimen dengan Matplotlib + +Cuba buat beberapa plot asas untuk memaparkan dataframe baru yang baru anda cipta. Apa yang akan ditunjukkan oleh plot garis asas? + +1. Import Matplotlib di bahagian atas fail, di bawah import Pandas: + + ```python + import matplotlib.pyplot as plt + ``` + +1. Jalankan semula keseluruhan notebook untuk menyegarkan. +1. Di bahagian bawah notebook, tambahkan sel untuk plot data sebagai kotak: + + ```python + price = new_pumpkins.Price + month = new_pumpkins.Month + plt.scatter(price, month) + plt.show() + ``` + + ![Plot taburan menunjukkan hubungan harga dengan bulan](../../../../2-Regression/2-Data/images/scatterplot.png) + + Adakah ini plot yang berguna? Adakah sesuatu mengenainya mengejutkan anda? + + Ia tidak begitu berguna kerana ia hanya memaparkan data anda sebagai taburan titik dalam bulan tertentu. + +### Jadikannya berguna + +Untuk mendapatkan carta yang memaparkan data berguna, anda biasanya perlu mengelompokkan data dengan cara tertentu. Mari cuba buat plot di mana paksi y menunjukkan bulan dan data menunjukkan taburan data. + +1. Tambahkan sel untuk mencipta carta bar yang dikelompokkan: + + ```python + new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') + plt.ylabel("Pumpkin Price") + ``` + + ![Carta bar menunjukkan hubungan harga dengan bulan](../../../../2-Regression/2-Data/images/barchart.png) + + Ini adalah visualisasi data yang lebih berguna! Ia nampaknya menunjukkan bahawa harga tertinggi untuk labu berlaku pada bulan September dan Oktober. Adakah itu memenuhi jangkaan anda? Mengapa atau mengapa tidak? + +--- + +## 🚀Cabaran + +Terokai pelbagai jenis visualisasi yang ditawarkan oleh Matplotlib. Jenis mana yang paling sesuai untuk masalah regresi? + +## [Kuiz selepas kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Ulasan & Kajian Kendiri + +Lihat pelbagai cara untuk memvisualisasikan data. Buat senarai pustaka yang tersedia dan catatkan mana yang terbaik untuk jenis tugas tertentu, contohnya visualisasi 2D vs. visualisasi 3D. Apa yang anda temui? + +## Tugasan + +[Menjelajahi visualisasi](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/2-Regression/2-Data/assignment.md b/translations/ms/2-Regression/2-Data/assignment.md new file mode 100644 index 00000000..d60d7a4b --- /dev/null +++ b/translations/ms/2-Regression/2-Data/assignment.md @@ -0,0 +1,23 @@ + +# Meneroka Visualisasi + +Terdapat beberapa perpustakaan yang tersedia untuk visualisasi data. Cipta beberapa visualisasi menggunakan data Labu dalam pelajaran ini dengan matplotlib dan seaborn dalam buku nota sampel. Perpustakaan mana yang lebih mudah digunakan? + +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | --------- | -------- | -------------------- | +| | Buku nota dihantar dengan dua penerokaan/visualisasi | Buku nota dihantar dengan satu penerokaan/visualisasi | Buku nota tidak dihantar | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/2-Regression/2-Data/solution/Julia/README.md b/translations/ms/2-Regression/2-Data/solution/Julia/README.md new file mode 100644 index 00000000..c633e9c6 --- /dev/null +++ b/translations/ms/2-Regression/2-Data/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/2-Regression/3-Linear/README.md b/translations/ms/2-Regression/3-Linear/README.md new file mode 100644 index 00000000..4dacbd90 --- /dev/null +++ b/translations/ms/2-Regression/3-Linear/README.md @@ -0,0 +1,380 @@ + +# Bina model regresi menggunakan Scikit-learn: empat cara regresi + +![Infografik regresi linear vs polinomial](../../../../2-Regression/3-Linear/images/linear-polynomial.png) +> Infografik oleh [Dasani Madipalli](https://twitter.com/dasani_decoded) +## [Kuiz pra-pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Pelajaran ini tersedia dalam R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) +### Pengenalan + +Setakat ini, anda telah meneroka apa itu regresi dengan data sampel yang dikumpulkan daripada dataset harga labu yang akan kita gunakan sepanjang pelajaran ini. Anda juga telah memvisualisasikannya menggunakan Matplotlib. + +Kini anda bersedia untuk mendalami regresi untuk ML. Walaupun visualisasi membolehkan anda memahami data, kekuatan sebenar Pembelajaran Mesin datang daripada _melatih model_. Model dilatih menggunakan data sejarah untuk secara automatik menangkap pergantungan data, dan ia membolehkan anda meramalkan hasil untuk data baharu yang belum pernah dilihat oleh model. + +Dalam pelajaran ini, anda akan mempelajari lebih lanjut tentang dua jenis regresi: _regresi linear asas_ dan _regresi polinomial_, bersama-sama dengan beberapa matematik yang mendasari teknik ini. Model-model ini akan membolehkan kita meramalkan harga labu bergantung pada data input yang berbeza. + +[![ML untuk pemula - Memahami Regresi Linear](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML untuk pemula - Memahami Regresi Linear") + +> 🎥 Klik imej di atas untuk video ringkas mengenai regresi linear. + +> Sepanjang kurikulum ini, kami mengandaikan pengetahuan matematik yang minimum, dan berusaha untuk menjadikannya mudah diakses oleh pelajar dari bidang lain, jadi perhatikan nota, 🧮 panggilan, diagram, dan alat pembelajaran lain untuk membantu pemahaman. + +### Prasyarat + +Anda seharusnya sudah biasa dengan struktur data labu yang sedang kita kaji. Anda boleh menemukannya telah dimuatkan dan dibersihkan dalam fail _notebook.ipynb_ pelajaran ini. Dalam fail tersebut, harga labu dipaparkan per gantang dalam bingkai data baharu. Pastikan anda boleh menjalankan notebook ini dalam kernel di Visual Studio Code. + +### Persediaan + +Sebagai peringatan, anda memuatkan data ini untuk bertanya soalan mengenainya. + +- Bilakah masa terbaik untuk membeli labu? +- Berapakah harga yang boleh saya jangkakan untuk satu kotak labu mini? +- Haruskah saya membelinya dalam bakul setengah gantang atau dalam kotak 1 1/9 gantang? +Mari kita teruskan menyelidiki data ini. + +Dalam pelajaran sebelumnya, anda telah mencipta bingkai data Pandas dan mengisinya dengan sebahagian daripada dataset asal, menstandardkan harga mengikut gantang. Dengan melakukan itu, bagaimanapun, anda hanya dapat mengumpulkan kira-kira 400 titik data dan hanya untuk bulan-bulan musim luruh. + +Lihat data yang telah dimuatkan dalam notebook yang disertakan dengan pelajaran ini. Data telah dimuatkan dan plot penyebaran awal telah dibuat untuk menunjukkan data bulan. Mungkin kita boleh mendapatkan sedikit lebih banyak perincian tentang sifat data dengan membersihkannya lebih lanjut. + +## Garis regresi linear + +Seperti yang anda pelajari dalam Pelajaran 1, tujuan latihan regresi linear adalah untuk dapat memplot garis untuk: + +- **Menunjukkan hubungan pemboleh ubah**. Menunjukkan hubungan antara pemboleh ubah +- **Membuat ramalan**. Membuat ramalan yang tepat tentang di mana titik data baharu akan berada dalam hubungan dengan garis tersebut. + +Adalah biasa bagi **Regresi Kuadrat Terkecil** untuk melukis jenis garis ini. Istilah 'kuadrat terkecil' bermaksud bahawa semua titik data di sekitar garis regresi dikwadratkan dan kemudian dijumlahkan. Sebaiknya, jumlah akhir itu sekecil mungkin, kerana kita mahukan bilangan kesalahan yang rendah, atau `kuadrat terkecil`. + +Kita melakukan ini kerana kita ingin memodelkan garis yang mempunyai jarak kumulatif paling kecil dari semua titik data kita. Kita juga mengkwadratkan istilah sebelum menjumlahkannya kerana kita lebih peduli dengan magnitudnya daripada arahnya. + +> **🧮 Tunjukkan matematiknya** +> +> Garis ini, yang disebut _garis terbaik_, dapat dinyatakan dengan [persamaan](https://en.wikipedia.org/wiki/Simple_linear_regression): +> +> ``` +> Y = a + bX +> ``` +> +> `X` adalah 'pemboleh ubah penjelasan'. `Y` adalah 'pemboleh ubah bergantung'. Kecerunan garis adalah `b` dan `a` adalah pemintas-y, yang merujuk kepada nilai `Y` apabila `X = 0`. +> +>![mengira kecerunan](../../../../2-Regression/3-Linear/images/slope.png) +> +> Pertama, kira kecerunan `b`. Infografik oleh [Jen Looper](https://twitter.com/jenlooper) +> +> Dalam kata lain, dan merujuk kepada soalan asal data labu kita: "ramalkan harga labu per gantang mengikut bulan", `X` akan merujuk kepada harga dan `Y` akan merujuk kepada bulan jualan. +> +>![lengkapkan persamaan](../../../../2-Regression/3-Linear/images/calculation.png) +> +> Kira nilai Y. Jika anda membayar sekitar $4, itu mesti bulan April! Infografik oleh [Jen Looper](https://twitter.com/jenlooper) +> +> Matematik yang mengira garis mesti menunjukkan kecerunan garis, yang juga bergantung pada pemintas, atau di mana `Y` terletak apabila `X = 0`. +> +> Anda boleh melihat kaedah pengiraan untuk nilai-nilai ini di laman web [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Juga lawati [kalkulator Kuadrat Terkecil](https://www.mathsisfun.com/data/least-squares-calculator.html) untuk melihat bagaimana nilai-nilai angka mempengaruhi garis. + +## Korelasi + +Satu lagi istilah yang perlu difahami ialah **Pekali Korelasi** antara pemboleh ubah X dan Y yang diberikan. Menggunakan plot penyebaran, anda boleh dengan cepat memvisualisasikan pekali ini. Plot dengan titik data yang tersebar dalam garis rapi mempunyai korelasi tinggi, tetapi plot dengan titik data yang tersebar di mana-mana antara X dan Y mempunyai korelasi rendah. + +Model regresi linear yang baik adalah model yang mempunyai Pekali Korelasi tinggi (lebih dekat kepada 1 daripada 0) menggunakan kaedah Regresi Kuadrat Terkecil dengan garis regresi. + +✅ Jalankan notebook yang disertakan dengan pelajaran ini dan lihat plot penyebaran Bulan ke Harga. Adakah data yang mengaitkan Bulan ke Harga untuk jualan labu kelihatan mempunyai korelasi tinggi atau rendah, menurut tafsiran visual anda terhadap plot penyebaran? Adakah itu berubah jika anda menggunakan ukuran yang lebih terperinci daripada `Bulan`, contohnya *hari dalam tahun* (iaitu bilangan hari sejak awal tahun)? + +Dalam kod di bawah, kita akan mengandaikan bahawa kita telah membersihkan data, dan memperoleh bingkai data yang disebut `new_pumpkins`, serupa dengan yang berikut: + +ID | Bulan | HariDalamTahun | Jenis | Bandar | Pakej | Harga Rendah | Harga Tinggi | Harga +---|-------|----------------|-------|--------|-------|--------------|--------------|------ +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 + +> Kod untuk membersihkan data tersedia dalam [`notebook.ipynb`](../../../../2-Regression/3-Linear/notebook.ipynb). Kami telah melakukan langkah pembersihan yang sama seperti dalam pelajaran sebelumnya, dan telah mengira lajur `HariDalamTahun` menggunakan ekspresi berikut: + +```python +day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) +``` + +Sekarang setelah anda memahami matematik di sebalik regresi linear, mari kita buat model Regresi untuk melihat sama ada kita boleh meramalkan pakej labu mana yang akan mempunyai harga labu terbaik. Seseorang yang membeli labu untuk ladang labu percutian mungkin mahukan maklumat ini untuk mengoptimumkan pembelian pakej labu untuk ladang tersebut. + +## Mencari Korelasi + +[![ML untuk pemula - Mencari Korelasi: Kunci kepada Regresi Linear](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML untuk pemula - Mencari Korelasi: Kunci kepada Regresi Linear") + +> 🎥 Klik imej di atas untuk video ringkas mengenai korelasi. + +Daripada pelajaran sebelumnya, anda mungkin telah melihat bahawa harga purata untuk bulan-bulan yang berbeza kelihatan seperti ini: + +Harga purata mengikut bulan + +Ini menunjukkan bahawa mungkin terdapat beberapa korelasi, dan kita boleh mencuba melatih model regresi linear untuk meramalkan hubungan antara `Bulan` dan `Harga`, atau antara `HariDalamTahun` dan `Harga`. Berikut adalah plot penyebaran yang menunjukkan hubungan yang terakhir: + +Plot penyebaran Harga vs. Hari dalam Tahun + +Mari kita lihat sama ada terdapat korelasi menggunakan fungsi `corr`: + +```python +print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) +print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) +``` + +Nampaknya korelasi agak kecil, -0.15 mengikut `Bulan` dan -0.17 mengikut `HariDalamTahun`, tetapi mungkin terdapat hubungan penting yang lain. Nampaknya terdapat kelompok harga yang berbeza yang sesuai dengan jenis labu yang berbeza. Untuk mengesahkan hipotesis ini, mari kita plot setiap kategori labu menggunakan warna yang berbeza. Dengan memberikan parameter `ax` kepada fungsi plot `scatter`, kita boleh memplot semua titik pada graf yang sama: + +```python +ax=None +colors = ['red','blue','green','yellow'] +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) +``` + +Plot penyebaran Harga vs. Hari dalam Tahun + +Penyelidikan kita menunjukkan bahawa jenis labu mempunyai lebih banyak kesan terhadap harga keseluruhan daripada tarikh jualan sebenar. Kita boleh melihat ini dengan graf bar: + +```python +new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') +``` + +Graf bar harga vs jenis labu + +Mari kita fokus buat sementara waktu hanya pada satu jenis labu, 'pie type', dan lihat kesan tarikh terhadap harga: + +```python +pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] +pie_pumpkins.plot.scatter('DayOfYear','Price') +``` +Plot penyebaran Harga vs. Hari dalam Tahun + +Jika kita kini mengira korelasi antara `Harga` dan `HariDalamTahun` menggunakan fungsi `corr`, kita akan mendapat sesuatu seperti `-0.27` - yang bermaksud bahawa melatih model ramalan masuk akal. + +> Sebelum melatih model regresi linear, adalah penting untuk memastikan data kita bersih. Regresi linear tidak berfungsi dengan baik dengan nilai yang hilang, oleh itu masuk akal untuk membuang semua sel kosong: + +```python +pie_pumpkins.dropna(inplace=True) +pie_pumpkins.info() +``` + +Pendekatan lain adalah dengan mengisi nilai kosong tersebut dengan nilai purata dari lajur yang sesuai. + +## Regresi Linear Mudah + +[![ML untuk pemula - Regresi Linear dan Polinomial menggunakan Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML untuk pemula - Regresi Linear dan Polinomial menggunakan Scikit-learn") + +> 🎥 Klik imej di atas untuk video ringkas mengenai regresi linear dan polinomial. + +Untuk melatih model Regresi Linear kita, kita akan menggunakan perpustakaan **Scikit-learn**. + +```python +from sklearn.linear_model import LinearRegression +from sklearn.metrics import mean_squared_error +from sklearn.model_selection import train_test_split +``` + +Kita mulakan dengan memisahkan nilai input (ciri) dan output yang dijangkakan (label) ke dalam array numpy yang berasingan: + +```python +X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) +y = pie_pumpkins['Price'] +``` + +> Perhatikan bahawa kita perlu melakukan `reshape` pada data input agar pakej Regresi Linear memahaminya dengan betul. Regresi Linear mengharapkan array 2D sebagai input, di mana setiap baris array sesuai dengan vektor ciri input. Dalam kes kita, kerana kita hanya mempunyai satu input - kita memerlukan array dengan bentuk N×1, di mana N adalah saiz dataset. + +Kemudian, kita perlu membahagikan data kepada dataset latihan dan ujian, supaya kita boleh mengesahkan model kita selepas latihan: + +```python +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) +``` + +Akhirnya, melatih model Regresi Linear sebenar hanya memerlukan dua baris kod. Kita mendefinisikan objek `LinearRegression`, dan melatihnya dengan data kita menggunakan kaedah `fit`: + +```python +lin_reg = LinearRegression() +lin_reg.fit(X_train,y_train) +``` + +Objek `LinearRegression` selepas `fit`-ting mengandungi semua pekali regresi, yang boleh diakses menggunakan sifat `.coef_`. Dalam kes kita, hanya ada satu pekali, yang seharusnya sekitar `-0.017`. Ini bermaksud bahawa harga nampaknya menurun sedikit dengan masa, tetapi tidak terlalu banyak, sekitar 2 sen sehari. Kita juga boleh mengakses titik persilangan regresi dengan paksi Y menggunakan `lin_reg.intercept_` - ia akan sekitar `21` dalam kes kita, menunjukkan harga pada awal tahun. + +Untuk melihat sejauh mana ketepatan model kita, kita boleh meramalkan harga pada dataset ujian, dan kemudian mengukur sejauh mana ramalan kita mendekati nilai yang dijangkakan. Ini boleh dilakukan menggunakan metrik ralat kuadrat purata (MSE), yang merupakan purata semua perbezaan kuadrat antara nilai yang dijangkakan dan yang diramalkan. + +```python +pred = lin_reg.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}%)') +``` +Kesalahan kita nampaknya berkisar pada 2 titik, iaitu ~17%. Tidak begitu baik. Satu lagi penunjuk kualiti model ialah **koefisien penentuan**, yang boleh diperoleh seperti ini: + +```python +score = lin_reg.score(X_train,y_train) +print('Model determination: ', score) +``` +Jika nilainya 0, ini bermakna model tidak mengambil kira data input, dan bertindak sebagai *peramal linear paling buruk*, iaitu hanya nilai purata hasil. Nilai 1 bermakna kita dapat meramal semua output yang dijangka dengan sempurna. Dalam kes kita, koefisien adalah sekitar 0.06, yang agak rendah. + +Kita juga boleh memplot data ujian bersama dengan garis regresi untuk melihat dengan lebih jelas bagaimana regresi berfungsi dalam kes kita: + +```python +plt.scatter(X_test,y_test) +plt.plot(X_test,pred) +``` + +Regresi linear + +## Regresi Polinomial + +Satu lagi jenis Regresi Linear ialah Regresi Polinomial. Walaupun kadangkala terdapat hubungan linear antara pemboleh ubah - semakin besar labu dalam isi padu, semakin tinggi harganya - kadangkala hubungan ini tidak boleh diplot sebagai satah atau garis lurus. + +✅ Berikut adalah [beberapa contoh lagi](https://online.stat.psu.edu/stat501/lesson/9/9.8) data yang boleh menggunakan Regresi Polinomial. + +Lihat semula hubungan antara Tarikh dan Harga. Adakah scatterplot ini kelihatan seperti ia semestinya dianalisis oleh garis lurus? Bukankah harga boleh berubah-ubah? Dalam kes ini, anda boleh mencuba regresi polinomial. + +✅ Polinomial adalah ekspresi matematik yang mungkin terdiri daripada satu atau lebih pemboleh ubah dan koefisien. + +Regresi polinomial mencipta garis melengkung untuk lebih sesuai dengan data tidak linear. Dalam kes kita, jika kita memasukkan pemboleh ubah `DayOfYear` kuasa dua ke dalam data input, kita sepatutnya dapat menyesuaikan data kita dengan lengkung parabola, yang akan mempunyai minimum pada titik tertentu dalam tahun tersebut. + +Scikit-learn termasuk [API pipeline](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) yang berguna untuk menggabungkan pelbagai langkah pemprosesan data bersama-sama. **Pipeline** ialah rangkaian **estimators**. Dalam kes kita, kita akan mencipta pipeline yang pertama menambah ciri polinomial kepada model kita, dan kemudian melatih regresi: + +```python +from sklearn.preprocessing import PolynomialFeatures +from sklearn.pipeline import make_pipeline + +pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) + +pipeline.fit(X_train,y_train) +``` + +Menggunakan `PolynomialFeatures(2)` bermakna kita akan memasukkan semua polinomial darjah kedua daripada data input. Dalam kes kita, ini hanya bermakna `DayOfYear`2, tetapi dengan dua pemboleh ubah input X dan Y, ini akan menambah X2, XY dan Y2. Kita juga boleh menggunakan polinomial darjah lebih tinggi jika kita mahu. + +Pipeline boleh digunakan dengan cara yang sama seperti objek `LinearRegression` asal, iaitu kita boleh `fit` pipeline, dan kemudian menggunakan `predict` untuk mendapatkan hasil ramalan. Berikut adalah graf yang menunjukkan data ujian, dan lengkung anggaran: + +Regresi polinomial + +Menggunakan Regresi Polinomial, kita boleh mendapatkan MSE yang sedikit lebih rendah dan penentuan yang lebih tinggi, tetapi tidak secara signifikan. Kita perlu mengambil kira ciri-ciri lain! + +> Anda boleh melihat bahawa harga labu paling rendah diperhatikan sekitar Halloween. Bagaimana anda boleh menjelaskan ini? + +🎃 Tahniah, anda baru sahaja mencipta model yang boleh membantu meramal harga labu pai. Anda mungkin boleh mengulangi prosedur yang sama untuk semua jenis labu, tetapi itu akan menjadi membosankan. Mari kita belajar sekarang bagaimana mengambil kira jenis labu dalam model kita! + +## Ciri Kategori + +Dalam dunia ideal, kita mahu dapat meramal harga untuk pelbagai jenis labu menggunakan model yang sama. Walau bagaimanapun, lajur `Variety` agak berbeza daripada lajur seperti `Month`, kerana ia mengandungi nilai bukan numerik. Lajur seperti ini dipanggil **kategori**. + +[![ML untuk pemula - Ramalan Ciri Kategori dengan Regresi Linear](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML untuk pemula - Ramalan Ciri Kategori dengan Regresi Linear") + +> 🎥 Klik imej di atas untuk video ringkas mengenai penggunaan ciri kategori. + +Di sini anda boleh melihat bagaimana harga purata bergantung pada jenis: + +Harga purata mengikut jenis + +Untuk mengambil kira jenis, kita perlu menukarnya kepada bentuk numerik terlebih dahulu, atau **encode**. Terdapat beberapa cara kita boleh melakukannya: + +* **Pengekodan numerik** yang mudah akan membina jadual pelbagai jenis, dan kemudian menggantikan nama jenis dengan indeks dalam jadual tersebut. Ini bukan idea terbaik untuk regresi linear, kerana regresi linear mengambil nilai numerik sebenar indeks, dan menambahnya kepada hasil, dengan mendarabkan dengan beberapa koefisien. Dalam kes kita, hubungan antara nombor indeks dan harga jelas tidak linear, walaupun kita memastikan bahawa indeks diatur dalam cara tertentu. +* **Pengekodan one-hot** akan menggantikan lajur `Variety` dengan 4 lajur berbeza, satu untuk setiap jenis. Setiap lajur akan mengandungi `1` jika baris yang sepadan adalah daripada jenis tertentu, dan `0` jika tidak. Ini bermakna akan ada empat koefisien dalam regresi linear, satu untuk setiap jenis labu, yang bertanggungjawab untuk "harga permulaan" (atau lebih tepat "harga tambahan") untuk jenis tertentu. + +Kod di bawah menunjukkan bagaimana kita boleh melakukan pengekodan one-hot untuk jenis: + +```python +pd.get_dummies(new_pumpkins['Variety']) +``` + + ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE +----|-----------|-----------|--------------------------|---------- +70 | 0 | 0 | 0 | 1 +71 | 0 | 0 | 0 | 1 +... | ... | ... | ... | ... +1738 | 0 | 1 | 0 | 0 +1739 | 0 | 1 | 0 | 0 +1740 | 0 | 1 | 0 | 0 +1741 | 0 | 1 | 0 | 0 +1742 | 0 | 1 | 0 | 0 + +Untuk melatih regresi linear menggunakan jenis yang telah dikodkan one-hot sebagai input, kita hanya perlu memulakan data `X` dan `y` dengan betul: + +```python +X = pd.get_dummies(new_pumpkins['Variety']) +y = new_pumpkins['Price'] +``` + +Selebihnya kod adalah sama seperti yang kita gunakan di atas untuk melatih Regresi Linear. Jika anda mencubanya, anda akan melihat bahawa ralat kuasa dua min adalah hampir sama, tetapi kita mendapat koefisien penentuan yang jauh lebih tinggi (~77%). Untuk mendapatkan ramalan yang lebih tepat, kita boleh mengambil kira lebih banyak ciri kategori, serta ciri numerik seperti `Month` atau `DayOfYear`. Untuk mendapatkan satu array besar ciri-ciri, kita boleh menggunakan `join`: + +```python +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'] +``` + +Di sini kita juga mengambil kira `City` dan jenis `Package`, yang memberikan kita MSE 2.84 (10%), dan penentuan 0.94! + +## Menggabungkan semuanya + +Untuk mencipta model terbaik, kita boleh menggunakan data gabungan (kategori yang dikodkan one-hot + numerik) daripada contoh di atas bersama dengan Regresi Polinomial. Berikut adalah kod lengkap untuk kemudahan anda: + +```python +# set up training data +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'] + +# make train-test split +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + +# setup and train the pipeline +pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) +pipeline.fit(X_train,y_train) + +# predict results for test data +pred = pipeline.predict(X_test) + +# calculate MSE and determination +mse = np.sqrt(mean_squared_error(y_test,pred)) +print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') + +score = pipeline.score(X_train,y_train) +print('Model determination: ', score) +``` + +Ini sepatutnya memberikan kita koefisien penentuan terbaik hampir 97%, dan MSE=2.23 (~8% ralat ramalan). + +| Model | MSE | Penentuan | +|-------|-----|-----------| +| `DayOfYear` Linear | 2.77 (17.2%) | 0.07 | +| `DayOfYear` Polynomial | 2.73 (17.0%) | 0.08 | +| `Variety` Linear | 5.24 (19.7%) | 0.77 | +| Semua ciri Linear | 2.84 (10.5%) | 0.94 | +| Semua ciri Polynomial | 2.23 (8.25%) | 0.97 | + +🏆 Syabas! Anda telah mencipta empat model Regresi dalam satu pelajaran, dan meningkatkan kualiti model kepada 97%. Dalam bahagian terakhir mengenai Regresi, anda akan belajar tentang Regresi Logistik untuk menentukan kategori. + +--- +## 🚀Cabaran + +Uji beberapa pemboleh ubah berbeza dalam notebook ini untuk melihat bagaimana korelasi berkait dengan ketepatan model. + +## [Kuiz selepas kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Kajian & Pembelajaran Kendiri + +Dalam pelajaran ini kita belajar tentang Regresi Linear. Terdapat jenis Regresi lain yang penting. Baca tentang teknik Stepwise, Ridge, Lasso dan Elasticnet. Kursus yang baik untuk belajar lebih lanjut ialah [Kursus Pembelajaran Statistik Stanford](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) + +## Tugasan + +[Bina Model](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/2-Regression/3-Linear/assignment.md b/translations/ms/2-Regression/3-Linear/assignment.md new file mode 100644 index 00000000..1c77891d --- /dev/null +++ b/translations/ms/2-Regression/3-Linear/assignment.md @@ -0,0 +1,25 @@ + +# Membina Model Regresi + +## Arahan + +Dalam pelajaran ini, anda telah ditunjukkan cara membina model menggunakan Regresi Linear dan Regresi Polinomial. Berdasarkan pengetahuan ini, cari satu set data atau gunakan salah satu set terbina dalam Scikit-learn untuk membina model baharu. Terangkan dalam buku nota anda mengapa anda memilih teknik tersebut, dan tunjukkan ketepatan model anda. Jika ia tidak tepat, terangkan sebabnya. + +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | ------------------------------------------------------------ | -------------------------- | ------------------------------- | +| | menyampaikan buku nota lengkap dengan penyelesaian yang didokumentasikan dengan baik | penyelesaian tidak lengkap | penyelesaian mempunyai kelemahan atau pepijat | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/2-Regression/3-Linear/solution/Julia/README.md b/translations/ms/2-Regression/3-Linear/solution/Julia/README.md new file mode 100644 index 00000000..26d05ff1 --- /dev/null +++ b/translations/ms/2-Regression/3-Linear/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/2-Regression/4-Logistic/README.md b/translations/ms/2-Regression/4-Logistic/README.md new file mode 100644 index 00000000..85a5c235 --- /dev/null +++ b/translations/ms/2-Regression/4-Logistic/README.md @@ -0,0 +1,408 @@ + +# Regresi Logistik untuk Meramal Kategori + +![Infografik regresi logistik vs. regresi linear](../../../../2-Regression/4-Logistic/images/linear-vs-logistic.png) + +## [Kuiz Pra-Pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Pelajaran ini tersedia dalam R!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html) + +## Pengenalan + +Dalam pelajaran terakhir mengenai Regresi, salah satu teknik asas _klasik_ ML, kita akan melihat Regresi Logistik. Anda boleh menggunakan teknik ini untuk mengenal pasti pola bagi meramal kategori binari. Adakah gula-gula ini coklat atau tidak? Adakah penyakit ini berjangkit atau tidak? Adakah pelanggan ini akan memilih produk ini atau tidak? + +Dalam pelajaran ini, anda akan belajar: + +- Perpustakaan baru untuk visualisasi data +- Teknik untuk regresi logistik + +✅ Tingkatkan pemahaman anda tentang bekerja dengan jenis regresi ini dalam [modul pembelajaran ini](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) + +## Prasyarat + +Setelah bekerja dengan data labu, kita kini cukup biasa dengannya untuk menyedari bahawa terdapat satu kategori binari yang boleh kita gunakan: `Color`. + +Mari bina model regresi logistik untuk meramal, berdasarkan beberapa pemboleh ubah, _warna labu yang mungkin_ (oren 🎃 atau putih 👻). + +> Mengapa kita bercakap tentang klasifikasi binari dalam pelajaran mengenai regresi? Hanya untuk kemudahan linguistik, kerana regresi logistik adalah [sebenarnya kaedah klasifikasi](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), walaupun berasaskan linear. Ketahui cara lain untuk mengklasifikasikan data dalam kumpulan pelajaran seterusnya. + +## Tentukan Soalan + +Untuk tujuan kita, kita akan menyatakannya sebagai binari: 'Putih' atau 'Bukan Putih'. Terdapat juga kategori 'berjalur' dalam dataset kita tetapi terdapat sedikit contoh, jadi kita tidak akan menggunakannya. Ia akan hilang apabila kita membuang nilai null daripada dataset, bagaimanapun. + +> 🎃 Fakta menarik, kita kadang-kadang memanggil labu putih sebagai labu 'hantu'. Ia tidak mudah untuk diukir, jadi ia tidak sepopular labu oren tetapi ia kelihatan menarik! Jadi kita juga boleh merumuskan semula soalan kita sebagai: 'Hantu' atau 'Bukan Hantu'. 👻 + +## Mengenai Regresi Logistik + +Regresi logistik berbeza daripada regresi linear, yang telah anda pelajari sebelum ini, dalam beberapa cara penting. + +[![ML untuk pemula - Memahami Regresi Logistik untuk Klasifikasi Pembelajaran Mesin](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "ML untuk pemula - Memahami Regresi Logistik untuk Klasifikasi Pembelajaran Mesin") + +> 🎥 Klik imej di atas untuk video ringkas mengenai regresi logistik. + +### Klasifikasi Binari + +Regresi logistik tidak menawarkan ciri yang sama seperti regresi linear. Yang pertama menawarkan ramalan tentang kategori binari ("putih atau bukan putih") manakala yang kedua mampu meramal nilai berterusan, contohnya berdasarkan asal labu dan masa penuaian, _berapa banyak harganya akan meningkat_. + +![Model Klasifikasi Labu](../../../../2-Regression/4-Logistic/images/pumpkin-classifier.png) +> Infografik oleh [Dasani Madipalli](https://twitter.com/dasani_decoded) + +### Klasifikasi Lain + +Terdapat jenis regresi logistik lain, termasuk multinomial dan ordinal: + +- **Multinomial**, yang melibatkan lebih daripada satu kategori - "Oren, Putih, dan Berjalur". +- **Ordinal**, yang melibatkan kategori yang diatur, berguna jika kita ingin mengatur hasil kita secara logik, seperti labu kita yang diatur mengikut bilangan saiz terhingga (mini, sm, med, lg, xl, xxl). + +![Regresi multinomial vs ordinal](../../../../2-Regression/4-Logistic/images/multinomial-vs-ordinal.png) + +### Pemboleh ubah TIDAK Perlu Berkorelasi + +Ingat bagaimana regresi linear berfungsi lebih baik dengan pemboleh ubah yang lebih berkorelasi? Regresi logistik adalah sebaliknya - pemboleh ubah tidak perlu sejajar. Ini berfungsi untuk data ini yang mempunyai korelasi yang agak lemah. + +### Anda Memerlukan Banyak Data Bersih + +Regresi logistik akan memberikan hasil yang lebih tepat jika anda menggunakan lebih banyak data; dataset kecil kita tidak optimum untuk tugas ini, jadi ingatlah perkara ini. + +[![ML untuk pemula - Analisis dan Penyediaan Data untuk Regresi Logistik](https://img.youtube.com/vi/B2X4H9vcXTs/0.jpg)](https://youtu.be/B2X4H9vcXTs "ML untuk pemula - Analisis dan Penyediaan Data untuk Regresi Logistik") + +> 🎥 Klik imej di atas untuk video ringkas mengenai penyediaan data untuk regresi linear + +✅ Fikirkan jenis data yang sesuai untuk regresi logistik + +## Latihan - kemas kini data + +Mula-mula, bersihkan data sedikit, buang nilai null dan pilih hanya beberapa lajur: + +1. Tambahkan kod berikut: + + ```python + + columns_to_select = ['City Name','Package','Variety', 'Origin','Item Size', 'Color'] + pumpkins = full_pumpkins.loc[:, columns_to_select] + + pumpkins.dropna(inplace=True) + ``` + + Anda sentiasa boleh melihat dataframe baru anda: + + ```python + pumpkins.info + ``` + +### Visualisasi - plot kategori + +Pada masa ini anda telah memuatkan [notebook permulaan](../../../../2-Regression/4-Logistic/notebook.ipynb) dengan data labu sekali lagi dan membersihkannya untuk mengekalkan dataset yang mengandungi beberapa pemboleh ubah, termasuk `Color`. Mari visualisasikan dataframe dalam notebook menggunakan perpustakaan yang berbeza: [Seaborn](https://seaborn.pydata.org/index.html), yang dibina di atas Matplotlib yang kita gunakan sebelum ini. + +Seaborn menawarkan beberapa cara menarik untuk memvisualisasikan data anda. Sebagai contoh, anda boleh membandingkan taburan data untuk setiap `Variety` dan `Color` dalam plot kategori. + +1. Buat plot sedemikian dengan menggunakan fungsi `catplot`, menggunakan data labu kita `pumpkins`, dan menentukan pemetaan warna untuk setiap kategori labu (oren atau putih): + + ```python + import seaborn as sns + + palette = { + 'ORANGE': 'orange', + 'WHITE': 'wheat', + } + + sns.catplot( + data=pumpkins, y="Variety", hue="Color", kind="count", + palette=palette, + ) + ``` + + ![Grid data yang divisualisasikan](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_1.png) + + Dengan memerhatikan data, anda boleh melihat bagaimana data Color berkaitan dengan Variety. + + ✅ Berdasarkan plot kategori ini, apakah beberapa penerokaan menarik yang boleh anda bayangkan? + +### Pra-pemprosesan data: pengekodan ciri dan label +Dataset labu kita mengandungi nilai string untuk semua lajur. Bekerja dengan data kategori adalah intuitif untuk manusia tetapi tidak untuk mesin. Algoritma pembelajaran mesin berfungsi dengan baik dengan nombor. Itulah sebabnya pengekodan adalah langkah yang sangat penting dalam fasa pra-pemprosesan data, kerana ia membolehkan kita menukar data kategori kepada data berangka, tanpa kehilangan sebarang maklumat. Pengekodan yang baik membawa kepada pembinaan model yang baik. + +Untuk pengekodan ciri terdapat dua jenis pengekod utama: + +1. Pengekod ordinal: sesuai untuk pemboleh ubah ordinal, iaitu pemboleh ubah kategori di mana datanya mengikuti susunan logik, seperti lajur `Item Size` dalam dataset kita. Ia mencipta pemetaan supaya setiap kategori diwakili oleh nombor, yang merupakan susunan kategori dalam lajur. + + ```python + from sklearn.preprocessing import OrdinalEncoder + + item_size_categories = [['sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo']] + ordinal_features = ['Item Size'] + ordinal_encoder = OrdinalEncoder(categories=item_size_categories) + ``` + +2. Pengekod kategori: sesuai untuk pemboleh ubah nominal, iaitu pemboleh ubah kategori di mana datanya tidak mengikuti susunan logik, seperti semua ciri yang berbeza daripada `Item Size` dalam dataset kita. Ia adalah pengekodan satu-haba, yang bermaksud bahawa setiap kategori diwakili oleh lajur binari: pemboleh ubah yang dikodkan adalah sama dengan 1 jika labu tergolong dalam Variety itu dan 0 sebaliknya. + + ```python + from sklearn.preprocessing import OneHotEncoder + + categorical_features = ['City Name', 'Package', 'Variety', 'Origin'] + categorical_encoder = OneHotEncoder(sparse_output=False) + ``` +Kemudian, `ColumnTransformer` digunakan untuk menggabungkan beberapa pengekod ke dalam satu langkah dan menerapkannya pada lajur yang sesuai. + +```python + from sklearn.compose import ColumnTransformer + + ct = ColumnTransformer(transformers=[ + ('ord', ordinal_encoder, ordinal_features), + ('cat', categorical_encoder, categorical_features) + ]) + + ct.set_output(transform='pandas') + encoded_features = ct.fit_transform(pumpkins) +``` +Sebaliknya, untuk mengekod label, kita menggunakan kelas `LabelEncoder` scikit-learn, yang merupakan kelas utiliti untuk membantu menormalkan label supaya ia hanya mengandungi nilai antara 0 dan n_classes-1 (di sini, 0 dan 1). + +```python + from sklearn.preprocessing import LabelEncoder + + label_encoder = LabelEncoder() + encoded_label = label_encoder.fit_transform(pumpkins['Color']) +``` +Setelah kita mengekod ciri dan label, kita boleh menggabungkannya ke dalam dataframe baru `encoded_pumpkins`. + +```python + encoded_pumpkins = encoded_features.assign(Color=encoded_label) +``` +✅ Apakah kelebihan menggunakan pengekod ordinal untuk lajur `Item Size`? + +### Analisis hubungan antara pemboleh ubah + +Sekarang kita telah memproses data kita, kita boleh menganalisis hubungan antara ciri dan label untuk mendapatkan idea tentang sejauh mana model akan dapat meramal label berdasarkan ciri. +Cara terbaik untuk melakukan analisis jenis ini adalah dengan memplotkan data. Kita akan menggunakan semula fungsi `catplot` Seaborn, untuk memvisualisasikan hubungan antara `Item Size`, `Variety` dan `Color` dalam plot kategori. Untuk memplotkan data dengan lebih baik kita akan menggunakan lajur `Item Size` yang dikodkan dan lajur `Variety` yang tidak dikodkan. + +```python + palette = { + 'ORANGE': 'orange', + 'WHITE': 'wheat', + } + pumpkins['Item Size'] = encoded_pumpkins['ord__Item Size'] + + g = sns.catplot( + data=pumpkins, + x="Item Size", y="Color", row='Variety', + kind="box", orient="h", + sharex=False, margin_titles=True, + height=1.8, aspect=4, palette=palette, + ) + g.set(xlabel="Item Size", ylabel="").set(xlim=(0,6)) + g.set_titles(row_template="{row_name}") +``` +![Catplot data yang divisualisasikan](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_2.png) + +### Gunakan plot swarm + +Oleh kerana Color adalah kategori binari (Putih atau Tidak), ia memerlukan 'pendekatan [khusus](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) untuk visualisasi'. Terdapat cara lain untuk memvisualisasikan hubungan kategori ini dengan pemboleh ubah lain. + +Anda boleh memvisualisasikan pemboleh ubah secara bersebelahan dengan plot Seaborn. + +1. Cuba plot 'swarm' untuk menunjukkan taburan nilai: + + ```python + palette = { + 0: 'orange', + 1: 'wheat' + } + sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette) + ``` + + ![Swarm data yang divisualisasikan](../../../../2-Regression/4-Logistic/images/swarm_2.png) + +**Perhatian**: kod di atas mungkin menghasilkan amaran, kerana seaborn gagal mewakili sejumlah besar titik data ke dalam plot swarm. Penyelesaian yang mungkin adalah mengurangkan saiz penanda, dengan menggunakan parameter 'size'. Walau bagaimanapun, sedar bahawa ini mempengaruhi kebolehbacaan plot. + +> **🧮 Tunjukkan Matematik** +> +> Regresi logistik bergantung pada konsep 'kebolehjadian maksimum' menggunakan [fungsi sigmoid](https://wikipedia.org/wiki/Sigmoid_function). Fungsi 'Sigmoid' pada plot kelihatan seperti bentuk 'S'. Ia mengambil nilai dan memetakan ke suatu tempat antara 0 dan 1. Lengkungnya juga dipanggil 'lengkung logistik'. Formula kelihatan seperti ini: +> +> ![fungsi logistik](../../../../2-Regression/4-Logistic/images/sigmoid.png) +> +> di mana titik tengah sigmoid berada pada titik 0 x, L adalah nilai maksimum lengkung, dan k adalah kecuraman lengkung. Jika hasil fungsi lebih daripada 0.5, label yang dimaksudkan akan diberikan kelas '1' daripada pilihan binari. Jika tidak, ia akan diklasifikasikan sebagai '0'. + +## Bina model anda + +Membina model untuk mencari klasifikasi binari ini adalah agak mudah dalam Scikit-learn. + +[![ML untuk pemula - Regresi Logistik untuk klasifikasi data](https://img.youtube.com/vi/MmZS2otPrQ8/0.jpg)](https://youtu.be/MmZS2otPrQ8 "ML untuk pemula - Regresi Logistik untuk klasifikasi data") + +> 🎥 Klik imej di atas untuk video ringkas mengenai membina model regresi linear + +1. Pilih pemboleh ubah yang ingin anda gunakan dalam model klasifikasi anda dan bahagikan set latihan dan ujian dengan memanggil `train_test_split()`: + + ```python + from sklearn.model_selection import train_test_split + + X = encoded_pumpkins[encoded_pumpkins.columns.difference(['Color'])] + y = encoded_pumpkins['Color'] + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + + ``` + +2. Kini anda boleh melatih model anda, dengan memanggil `fit()` dengan data latihan anda, dan cetak hasilnya: + + ```python + from sklearn.metrics import f1_score, classification_report + from sklearn.linear_model import LogisticRegression + + model = LogisticRegression() + model.fit(X_train, y_train) + predictions = model.predict(X_test) + + print(classification_report(y_test, predictions)) + print('Predicted labels: ', predictions) + print('F1-score: ', f1_score(y_test, predictions)) + ``` + + Lihat papan skor model anda. Ia tidak buruk, memandangkan anda hanya mempunyai kira-kira 1000 baris data: + + ```output + precision recall f1-score support + + 0 0.94 0.98 0.96 166 + 1 0.85 0.67 0.75 33 + + accuracy 0.92 199 + macro avg 0.89 0.82 0.85 199 + weighted avg 0.92 0.92 0.92 199 + + Predicted labels: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 + 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 + 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 0 0 0 1 0 0 0 0 0 0 0 0 1 1] + F1-score: 0.7457627118644068 + ``` + +## Pemahaman yang lebih baik melalui matriks kekeliruan + +Walaupun anda boleh mendapatkan laporan papan skor [terma](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) dengan mencetak item di atas, anda mungkin dapat memahami model anda dengan lebih mudah dengan menggunakan [matriks kekeliruan](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) untuk membantu kita memahami bagaimana model berfungsi. + +> 🎓 '[Matriks kekeliruan](https://wikipedia.org/wiki/Confusion_matrix)' (atau 'matriks ralat') ialah jadual yang menyatakan positif dan negatif sebenar vs. palsu model anda, dengan itu mengukur ketepatan ramalan. + +1. Untuk menggunakan matriks kekeliruan, panggil `confusion_matrix()`: + + ```python + from sklearn.metrics import confusion_matrix + confusion_matrix(y_test, predictions) + ``` + + Lihat matriks kekeliruan model anda: + + ```output + array([[162, 4], + [ 11, 22]]) + ``` + +Dalam Scikit-learn, baris matriks kekeliruan (paksi 0) adalah label sebenar dan lajur (paksi 1) adalah label yang diramal. + +| | 0 | 1 | +| :---: | :---: | :---: | +| 0 | TN | FP | +| 1 | FN | TP | + +Apa yang berlaku di sini? Katakan model kita diminta untuk mengklasifikasikan labu antara dua kategori binari, kategori 'putih' dan kategori 'bukan putih'. + +- Jika model anda meramal labu sebagai bukan putih dan ia tergolong dalam kategori 'bukan putih' dalam realiti kita memanggilnya negatif benar, ditunjukkan oleh nombor kiri atas. +- Jika model anda meramal labu sebagai putih dan ia tergolong dalam kategori 'bukan putih' dalam realiti kita memanggilnya negatif palsu, ditunjukkan oleh nombor kiri bawah. +- Jika model anda meramal labu sebagai bukan putih dan ia tergolong dalam kategori 'putih' dalam realiti kita memanggilnya positif palsu, ditunjukkan oleh nombor kanan atas. +- Jika model anda meramal labu sebagai putih dan ia tergolong dalam kategori 'putih' dalam realiti kita memanggilnya positif benar, ditunjukkan oleh nombor kanan bawah. + +Seperti yang anda mungkin telah teka, adalah lebih baik untuk mempunyai bilangan positif benar dan negatif benar yang lebih besar dan bilangan positif palsu dan negatif palsu yang lebih rendah, yang menunjukkan bahawa model berfungsi dengan lebih baik. +Bagaimana matriks kekeliruan berkaitan dengan ketepatan dan ingatan? Ingat, laporan klasifikasi yang dicetak di atas menunjukkan ketepatan (0.85) dan ingatan (0.67). + +Ketepatan = tp / (tp + fp) = 22 / (22 + 4) = 0.8461538461538461 + +Ingatan = tp / (tp + fn) = 22 / (22 + 11) = 0.6666666666666666 + +✅ S: Berdasarkan matriks kekeliruan, bagaimana prestasi model? J: Tidak buruk; terdapat sejumlah besar negatif benar tetapi juga beberapa negatif palsu. + +Mari kita ulang semula istilah yang kita lihat sebelum ini dengan bantuan pemetaan TP/TN dan FP/FN dalam matriks kekeliruan: + +🎓 Ketepatan: TP/(TP + FP) Bahagian contoh yang relevan di antara contoh yang diambil (contohnya, label mana yang dilabel dengan baik) + +🎓 Ingatan: TP/(TP + FN) Bahagian contoh yang relevan yang diambil, sama ada dilabel dengan baik atau tidak + +🎓 Skor f1: (2 * ketepatan * ingatan)/(ketepatan + ingatan) Purata berwajaran antara ketepatan dan ingatan, dengan yang terbaik adalah 1 dan yang terburuk adalah 0 + +🎓 Sokongan: Bilangan kejadian bagi setiap label yang diambil + +🎓 Ketepatan: (TP + TN)/(TP + TN + FP + FN) Peratusan label yang diramal dengan tepat untuk satu sampel. + +🎓 Purata Makro: Pengiraan purata metrik tanpa berat bagi setiap label, tanpa mengambil kira ketidakseimbangan label. + +🎓 Purata Berwajaran: Pengiraan purata metrik bagi setiap label, mengambil kira ketidakseimbangan label dengan menimbangnya berdasarkan sokongan mereka (bilangan contoh benar bagi setiap label). + +✅ Bolehkah anda fikirkan metrik mana yang perlu diperhatikan jika anda mahu model anda mengurangkan bilangan negatif palsu? + +## Visualisasi lengkung ROC model ini + +[![ML untuk pemula - Menganalisis Prestasi Regresi Logistik dengan Lengkung ROC](https://img.youtube.com/vi/GApO575jTA0/0.jpg)](https://youtu.be/GApO575jTA0 "ML untuk pemula - Menganalisis Prestasi Regresi Logistik dengan Lengkung ROC") + + +> 🎥 Klik imej di atas untuk video ringkas mengenai lengkung ROC + +Mari kita lakukan satu lagi visualisasi untuk melihat apa yang dipanggil 'ROC' curve: + +```python +from sklearn.metrics import roc_curve, roc_auc_score +import matplotlib +import matplotlib.pyplot as plt +%matplotlib inline + +y_scores = model.predict_proba(X_test) +fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1]) + +fig = plt.figure(figsize=(6, 6)) +plt.plot([0, 1], [0, 1], 'k--') +plt.plot(fpr, tpr) +plt.xlabel('False Positive Rate') +plt.ylabel('True Positive Rate') +plt.title('ROC Curve') +plt.show() +``` + +Menggunakan Matplotlib, plotkan [Receiving Operating Characteristic](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) atau ROC model. Lengkung ROC sering digunakan untuk mendapatkan pandangan tentang output pengklasifikasi dari segi positif benar vs. positif palsu. "Lengkung ROC biasanya memaparkan kadar positif benar pada paksi Y, dan kadar positif palsu pada paksi X." Oleh itu, kecuraman lengkung dan ruang antara garis tengah dan lengkung adalah penting: anda mahukan lengkung yang cepat naik dan melepasi garis. Dalam kes kita, terdapat positif palsu pada permulaan, dan kemudian garis naik dan melepasi dengan betul: + +![ROC](../../../../2-Regression/4-Logistic/images/ROC_2.png) + +Akhirnya, gunakan API [`roc_auc_score`](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score) Scikit-learn untuk mengira 'Area Under the Curve' (AUC) sebenar: + +```python +auc = roc_auc_score(y_test,y_scores[:,1]) +print(auc) +``` +Hasilnya ialah `0.9749908725812341`. Memandangkan AUC berkisar dari 0 hingga 1, anda mahukan skor yang besar, kerana model yang 100% betul dalam ramalannya akan mempunyai AUC sebanyak 1; dalam kes ini, model ini _agak baik_. + +Dalam pelajaran masa depan mengenai klasifikasi, anda akan belajar bagaimana untuk mengulangi proses bagi meningkatkan skor model anda. Tetapi buat masa ini, tahniah! Anda telah menyelesaikan pelajaran regresi ini! + +--- +## 🚀Cabaran + +Masih banyak lagi yang boleh diterokai mengenai regresi logistik! Tetapi cara terbaik untuk belajar adalah dengan bereksperimen. Cari dataset yang sesuai untuk jenis analisis ini dan bina model dengannya. Apa yang anda pelajari? tip: cuba [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) untuk dataset yang menarik. + +## [Kuiz selepas kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Ulasan & Kajian Kendiri + +Baca beberapa halaman pertama [kertas kerja dari Stanford ini](https://web.stanford.edu/~jurafsky/slp3/5.pdf) mengenai beberapa kegunaan praktikal untuk regresi logistik. Fikirkan tentang tugas yang lebih sesuai untuk satu jenis regresi berbanding yang lain yang telah kita pelajari setakat ini. Apa yang akan berfungsi dengan baik? + +## Tugasan + +[Ulangi regresi ini](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat penting, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/2-Regression/4-Logistic/assignment.md b/translations/ms/2-Regression/4-Logistic/assignment.md new file mode 100644 index 00000000..a50080a6 --- /dev/null +++ b/translations/ms/2-Regression/4-Logistic/assignment.md @@ -0,0 +1,25 @@ + +# Mencuba Semula Beberapa Regresi + +## Arahan + +Dalam pelajaran ini, anda telah menggunakan subset data labu. Sekarang, kembali kepada data asal dan cuba gunakan semuanya, yang telah dibersihkan dan distandardkan, untuk membina model Regresi Logistik. + +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | ----------------------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | +| | Notebook disediakan dengan model yang dijelaskan dengan baik dan berprestasi tinggi | Notebook disediakan dengan model yang berprestasi minimum | Notebook disediakan dengan model yang kurang berprestasi atau tiada | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/2-Regression/4-Logistic/solution/Julia/README.md b/translations/ms/2-Regression/4-Logistic/solution/Julia/README.md new file mode 100644 index 00000000..955efd11 --- /dev/null +++ b/translations/ms/2-Regression/4-Logistic/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/2-Regression/README.md b/translations/ms/2-Regression/README.md index 3305cda1..79c56025 100644 --- a/translations/ms/2-Regression/README.md +++ b/translations/ms/2-Regression/README.md @@ -1,43 +1,54 @@ -# Model Regresi untuk Pembelajaran Mesin -## Topik Regional: Model Regresi untuk Harga Labu di Amerika Utara 🎃 - -Di Amerika Utara, labu sering diukir menjadi wajah menakutkan untuk Halloween. Mari kita temukan lebih banyak tentang sayuran yang menarik ini! - -![jack-o-lanterns](../../../translated_images/jack-o-lanterns.181c661a9212457d7756f37219f660f1358af27554d856e5a991f16b4e15337c.ms.jpg) + +# Model regresi untuk pembelajaran mesin +## Topik serantau: Model regresi untuk harga labu di Amerika Utara 🎃 + +Di Amerika Utara, labu sering diukir menjadi wajah menakutkan untuk Halloween. Mari kita pelajari lebih lanjut tentang sayur-sayuran yang menarik ini! + +![jack-o-lanterns](../../../2-Regression/images/jack-o-lanterns.jpg) > Foto oleh Beth Teutschmann di Unsplash -## Apa yang Akan Anda Pelajari +## Apa yang akan anda pelajari -[![Pengenalan Regresi](https://img.youtube.com/vi/5QnJtDad4iQ/0.jpg)](https://youtu.be/5QnJtDad4iQ "Video Pengenalan Regresi - Klik untuk Menonton!") -> 🎥 Klik gambar di atas untuk video pengenalan singkat tentang pelajaran ini +[![Pengenalan kepada Regresi](https://img.youtube.com/vi/5QnJtDad4iQ/0.jpg)](https://youtu.be/5QnJtDad4iQ "Video pengenalan regresi - Klik untuk menonton!") +> 🎥 Klik imej di atas untuk video pengenalan ringkas kepada pelajaran ini -Pelajaran dalam bagian ini mencakup jenis-jenis regresi dalam konteks pembelajaran mesin. Model regresi dapat membantu menentukan _hubungan_ antara variabel. Jenis model ini dapat memprediksi nilai seperti panjang, suhu, atau usia, sehingga mengungkapkan hubungan antara variabel saat menganalisis titik data. +Pelajaran dalam bahagian ini merangkumi jenis regresi dalam konteks pembelajaran mesin. Model regresi boleh membantu menentukan _hubungan_ antara pemboleh ubah. Jenis model ini boleh meramalkan nilai seperti panjang, suhu, atau umur, sekaligus mendedahkan hubungan antara pemboleh ubah semasa menganalisis titik data. -Dalam serangkaian pelajaran ini, Anda akan menemukan perbedaan antara regresi linear dan logistik, dan kapan Anda harus memilih salah satu di atas yang lain. +Dalam siri pelajaran ini, anda akan mempelajari perbezaan antara regresi linear dan regresi logistik, serta bila anda harus memilih satu berbanding yang lain. -[![ML untuk Pemula - Pengenalan Model Regresi untuk Pembelajaran Mesin](https://img.youtube.com/vi/XA3OaoW86R8/0.jpg)](https://youtu.be/XA3OaoW86R8 "ML untuk Pemula - Pengenalan Model Regresi untuk Pembelajaran Mesin") +[![ML untuk pemula - Pengenalan kepada model regresi untuk Pembelajaran Mesin](https://img.youtube.com/vi/XA3OaoW86R8/0.jpg)](https://youtu.be/XA3OaoW86R8 "ML untuk pemula - Pengenalan kepada model regresi untuk Pembelajaran Mesin") -> 🎥 Klik gambar di atas untuk video pendek yang memperkenalkan model regresi. +> 🎥 Klik imej di atas untuk video pendek memperkenalkan model regresi. -Dalam kelompok pelajaran ini, Anda akan disiapkan untuk memulai tugas pembelajaran mesin, termasuk mengkonfigurasi Visual Studio Code untuk mengelola notebook, lingkungan umum bagi ilmuwan data. Anda akan menemukan Scikit-learn, sebuah pustaka untuk pembelajaran mesin, dan Anda akan membangun model pertama Anda, dengan fokus pada model Regresi dalam bab ini. +Dalam kumpulan pelajaran ini, anda akan bersedia untuk memulakan tugas pembelajaran mesin, termasuk mengkonfigurasi Visual Studio Code untuk menguruskan notebook, persekitaran biasa bagi saintis data. Anda akan mengenali Scikit-learn, sebuah perpustakaan untuk pembelajaran mesin, dan anda akan membina model pertama anda, dengan fokus pada model regresi dalam bab ini. -> Ada alat low-code yang berguna yang dapat membantu Anda belajar tentang bekerja dengan model regresi. Coba [Azure ML untuk tugas ini](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) +> Terdapat alat low-code yang berguna untuk membantu anda mempelajari cara bekerja dengan model regresi. Cuba [Azure ML untuk tugas ini](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) ### Pelajaran -1. [Alat Perdagangan](1-Tools/README.md) -2. [Mengelola Data](2-Data/README.md) -3. [Regresi Linear dan Polinomial](3-Linear/README.md) -4. [Regresi Logistik](4-Logistic/README.md) +1. [Alat yang digunakan](1-Tools/README.md) +2. [Pengurusan data](2-Data/README.md) +3. [Regresi linear dan polinomial](3-Linear/README.md) +4. [Regresi logistik](4-Logistic/README.md) --- ### Kredit "ML dengan regresi" ditulis dengan ♥️ oleh [Jen Looper](https://twitter.com/jenlooper) -♥️ Kontributor kuis termasuk: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) dan [Ornella Altunyan](https://twitter.com/ornelladotcom) +♥️ Penyumbang kuiz termasuk: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) dan [Ornella Altunyan](https://twitter.com/ornelladotcom) -Dataset labu disarankan oleh [proyek ini di Kaggle](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) dan datanya bersumber dari [Laporan Standar Pasar Terminal Tanaman Khusus](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) yang didistribusikan oleh Departemen Pertanian Amerika Serikat. Kami telah menambahkan beberapa poin tentang warna berdasarkan varietas untuk menormalkan distribusi. Data ini berada di domain publik. +Dataset labu dicadangkan oleh [projek ini di Kaggle](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) dan datanya diperoleh daripada [Laporan Standard Pasaran Terminal Tanaman Khas](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) yang diedarkan oleh Jabatan Pertanian Amerika Syarikat. Kami telah menambah beberapa titik berkaitan warna berdasarkan varieti untuk menormalkan taburan. Data ini adalah dalam domain awam. + +--- -**Penafian**: -Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI berasaskan mesin. Walaupun kami berusaha untuk ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab ke atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/3-Web-App/1-Web-App/README.md b/translations/ms/3-Web-App/1-Web-App/README.md index a9da9568..495f080b 100644 --- a/translations/ms/3-Web-App/1-Web-App/README.md +++ b/translations/ms/3-Web-App/1-Web-App/README.md @@ -1,58 +1,67 @@ -# Bina Aplikasi Web untuk Menggunakan Model ML - -Dalam pelajaran ini, anda akan melatih model ML pada set data yang sangat menarik: _Penampakan UFO selama abad yang lalu_, yang bersumber dari basis data NUFORC. + +# Membina Aplikasi Web untuk Menggunakan Model ML + +Dalam pelajaran ini, anda akan melatih model ML menggunakan set data yang luar biasa: _Penampakan UFO sepanjang abad yang lalu_, yang diperoleh daripada pangkalan data NUFORC. Anda akan belajar: - Cara 'pickle' model yang telah dilatih - Cara menggunakan model tersebut dalam aplikasi Flask -Kita akan melanjutkan penggunaan notebook untuk membersihkan data dan melatih model kita, tetapi anda dapat melangkah lebih jauh dengan mengeksplorasi penggunaan model 'di lapangan': dalam aplikasi web. +Kita akan terus menggunakan notebook untuk membersihkan data dan melatih model, tetapi anda boleh melangkah lebih jauh dengan meneroka penggunaan model 'di dunia nyata', iaitu dalam aplikasi web. -Untuk melakukan ini, anda perlu membangun aplikasi web menggunakan Flask. +Untuk melakukannya, anda perlu membina aplikasi web menggunakan Flask. -## [Kuis Pra-Kuliah](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/17/) +## [Kuiz sebelum kuliah](https://ff-quizzes.netlify.app/en/ml/) -## Membangun Aplikasi +## Membina aplikasi -Ada beberapa cara untuk membangun aplikasi web yang mengonsumsi model pembelajaran mesin. Arsitektur web anda mungkin mempengaruhi cara model anda dilatih. Bayangkan anda bekerja di sebuah perusahaan di mana kelompok ilmu data telah melatih model yang mereka ingin anda gunakan dalam aplikasi. +Terdapat beberapa cara untuk membina aplikasi web yang menggunakan model pembelajaran mesin. Seni bina web anda mungkin mempengaruhi cara model anda dilatih. Bayangkan anda bekerja dalam perniagaan di mana kumpulan sains data telah melatih model yang mereka mahu anda gunakan dalam aplikasi. ### Pertimbangan -Ada banyak pertanyaan yang perlu anda tanyakan: +Terdapat banyak soalan yang perlu anda tanya: -- **Apakah itu aplikasi web atau aplikasi seluler?** Jika anda membangun aplikasi seluler atau perlu menggunakan model dalam konteks IoT, anda dapat menggunakan [TensorFlow Lite](https://www.tensorflow.org/lite/) dan menggunakan model dalam aplikasi Android atau iOS. -- **Di mana model akan berada?** Di cloud atau lokal? -- **Dukungan offline.** Apakah aplikasi harus berfungsi secara offline? +- **Adakah ia aplikasi web atau aplikasi mudah alih?** Jika anda membina aplikasi mudah alih atau perlu menggunakan model dalam konteks IoT, anda boleh menggunakan [TensorFlow Lite](https://www.tensorflow.org/lite/) dan menggunakan model tersebut dalam aplikasi Android atau iOS. +- **Di mana model akan berada?** Di awan atau secara tempatan? +- **Sokongan luar talian.** Adakah aplikasi perlu berfungsi secara luar talian? - **Teknologi apa yang digunakan untuk melatih model?** Teknologi yang dipilih mungkin mempengaruhi alat yang perlu anda gunakan. - - **Menggunakan TensorFlow.** Jika anda melatih model menggunakan TensorFlow, misalnya, ekosistem tersebut menyediakan kemampuan untuk mengkonversi model TensorFlow untuk digunakan dalam aplikasi web dengan menggunakan [TensorFlow.js](https://www.tensorflow.org/js/). - - **Menggunakan PyTorch.** Jika anda membangun model menggunakan perpustakaan seperti [PyTorch](https://pytorch.org/), anda memiliki opsi untuk mengekspornya dalam format [ONNX](https://onnx.ai/) (Open Neural Network Exchange) untuk digunakan dalam aplikasi web JavaScript yang dapat menggunakan [Onnx Runtime](https://www.onnxruntime.ai/). Opsi ini akan dieksplorasi dalam pelajaran mendatang untuk model yang dilatih dengan Scikit-learn. - - **Menggunakan Lobe.ai atau Azure Custom Vision.** Jika anda menggunakan sistem ML SaaS (Software as a Service) seperti [Lobe.ai](https://lobe.ai/) atau [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) untuk melatih model, jenis perangkat lunak ini menyediakan cara untuk mengekspor model untuk banyak platform, termasuk membangun API khusus untuk di-query di cloud oleh aplikasi online anda. + - **Menggunakan TensorFlow.** Jika anda melatih model menggunakan TensorFlow, contohnya, ekosistem tersebut menyediakan keupayaan untuk menukar model TensorFlow untuk digunakan dalam aplikasi web dengan menggunakan [TensorFlow.js](https://www.tensorflow.org/js/). + - **Menggunakan PyTorch.** Jika anda membina model menggunakan pustaka seperti [PyTorch](https://pytorch.org/), anda mempunyai pilihan untuk mengeksportnya dalam format [ONNX](https://onnx.ai/) (Open Neural Network Exchange) untuk digunakan dalam aplikasi web JavaScript yang boleh menggunakan [Onnx Runtime](https://www.onnxruntime.ai/). Pilihan ini akan diteroka dalam pelajaran akan datang untuk model yang dilatih menggunakan Scikit-learn. + - **Menggunakan Lobe.ai atau Azure Custom Vision.** Jika anda menggunakan sistem ML SaaS (Perisian sebagai Perkhidmatan) seperti [Lobe.ai](https://lobe.ai/) atau [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) untuk melatih model, jenis perisian ini menyediakan cara untuk mengeksport model untuk pelbagai platform, termasuk membina API tersuai untuk ditanya di awan oleh aplikasi dalam talian anda. -Anda juga memiliki kesempatan untuk membangun seluruh aplikasi web Flask yang dapat melatih model itu sendiri dalam browser web. Ini juga dapat dilakukan menggunakan TensorFlow.js dalam konteks JavaScript. +Anda juga berpeluang untuk membina keseluruhan aplikasi web Flask yang boleh melatih model itu sendiri dalam pelayar web. Ini juga boleh dilakukan menggunakan TensorFlow.js dalam konteks JavaScript. -Untuk tujuan kita, karena kita telah bekerja dengan notebook berbasis Python, mari kita eksplorasi langkah-langkah yang perlu diambil untuk mengekspor model yang telah dilatih dari notebook tersebut ke format yang dapat dibaca oleh aplikasi web yang dibangun dengan Python. +Untuk tujuan kita, memandangkan kita telah bekerja dengan notebook berasaskan Python, mari kita teroka langkah-langkah yang perlu diambil untuk mengeksport model yang telah dilatih daripada notebook tersebut ke format yang boleh dibaca oleh aplikasi web yang dibina menggunakan Python. ## Alat -Untuk tugas ini, anda memerlukan dua alat: Flask dan Pickle, keduanya berjalan di Python. +Untuk tugas ini, anda memerlukan dua alat: Flask dan Pickle, kedua-duanya berjalan pada Python. -✅ Apa itu [Flask](https://palletsprojects.com/p/flask/)? Didefinisikan sebagai 'micro-framework' oleh penciptanya, Flask menyediakan fitur dasar kerangka kerja web menggunakan Python dan mesin templat untuk membangun halaman web. Lihat [modul Belajar ini](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) untuk berlatih membangun dengan Flask. +✅ Apa itu [Flask](https://palletsprojects.com/p/flask/)? Didefinisikan sebagai 'micro-framework' oleh penciptanya, Flask menyediakan ciri asas rangka kerja web menggunakan Python dan enjin templat untuk membina halaman web. Lihat [modul pembelajaran ini](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) untuk berlatih membina dengan Flask. -✅ Apa itu [Pickle](https://docs.python.org/3/library/pickle.html)? Pickle 🥒 adalah modul Python yang men-serialisasi dan de-serialisasi struktur objek Python. Ketika anda 'pickle' model, anda men-serialisasi atau meratakan strukturnya untuk digunakan di web. Hati-hati: pickle tidak secara intrinsik aman, jadi berhati-hatilah jika diminta untuk 'un-pickle' file. File yang di-pickle memiliki akhiran `.pkl`. +✅ Apa itu [Pickle](https://docs.python.org/3/library/pickle.html)? Pickle 🥒 ialah modul Python yang menyusun dan menyahsusun struktur objek Python. Apabila anda 'pickle' model, anda menyusun atau meratakan strukturnya untuk digunakan di web. Berhati-hati: pickle tidak secara intrinsik selamat, jadi berhati-hati jika diminta untuk 'un-pickle' fail. Fail yang telah dipickle mempunyai akhiran `.pkl`. ## Latihan - membersihkan data anda -Dalam pelajaran ini anda akan menggunakan data dari 80.000 penampakan UFO, dikumpulkan oleh [NUFORC](https://nuforc.org) (Pusat Pelaporan UFO Nasional). Data ini memiliki beberapa deskripsi menarik tentang penampakan UFO, misalnya: +Dalam pelajaran ini, anda akan menggunakan data daripada 80,000 penampakan UFO, yang dikumpulkan oleh [NUFORC](https://nuforc.org) (Pusat Pelaporan UFO Kebangsaan). Data ini mempunyai beberapa deskripsi menarik tentang penampakan UFO, contohnya: -- **Deskripsi contoh panjang.** "Seorang pria muncul dari sinar cahaya yang menyinari lapangan berumput di malam hari dan dia berlari menuju tempat parkir Texas Instruments". -- **Deskripsi contoh pendek.** "lampu-lampu mengejar kami". +- **Deskripsi contoh panjang.** "Seorang lelaki muncul dari pancaran cahaya yang bersinar di padang rumput pada waktu malam dan dia berlari ke arah tempat letak kereta Texas Instruments". +- **Deskripsi contoh pendek.** "lampu mengejar kami". -Spreadsheet [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) mencakup kolom tentang `city`, `state`, dan `country` di mana penampakan terjadi, objek `shape` dan `latitude` serta `longitude`. +Spreadsheet [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) termasuk lajur tentang `city`, `state` dan `country` di mana penampakan berlaku, `shape` objek dan `latitude` serta `longitude`nya. Dalam [notebook](../../../../3-Web-App/1-Web-App/notebook.ipynb) kosong yang disertakan dalam pelajaran ini: -1. impor `pandas`, `matplotlib`, dan `numpy` seperti yang anda lakukan dalam pelajaran sebelumnya dan impor spreadsheet ufos. Anda dapat melihat sampel set data: +1. import `pandas`, `matplotlib`, dan `numpy` seperti yang anda lakukan dalam pelajaran sebelumnya dan import spreadsheet ufos. Anda boleh melihat sampel set data: ```python import pandas as pd @@ -62,7 +71,7 @@ Dalam [notebook](../../../../3-Web-App/1-Web-App/notebook.ipynb) kosong yang dis ufos.head() ``` -1. Konversikan data ufos menjadi dataframe kecil dengan judul baru. Periksa nilai unik di bidang `Country`. +1. Tukarkan data ufos kepada dataframe kecil dengan tajuk baru. Periksa nilai unik dalam medan `Country`. ```python ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) @@ -70,7 +79,7 @@ Dalam [notebook](../../../../3-Web-App/1-Web-App/notebook.ipynb) kosong yang dis ufos.Country.unique() ``` -1. Sekarang, anda dapat mengurangi jumlah data yang perlu kita tangani dengan menghapus nilai null dan hanya mengimpor penampakan antara 1-60 detik: +1. Kini, anda boleh mengurangkan jumlah data yang perlu kita uruskan dengan membuang nilai null dan hanya mengimport penampakan antara 1-60 saat: ```python ufos.dropna(inplace=True) @@ -80,9 +89,9 @@ Dalam [notebook](../../../../3-Web-App/1-Web-App/notebook.ipynb) kosong yang dis ufos.info() ``` -1. Impor perpustakaan `LabelEncoder` dari Scikit-learn untuk mengonversi nilai teks untuk negara menjadi angka: +1. Import pustaka `LabelEncoder` dari Scikit-learn untuk menukar nilai teks bagi negara kepada nombor: - ✅ LabelEncoder mengkodekan data secara alfabetis + ✅ LabelEncoder menyandikan data mengikut abjad ```python from sklearn.preprocessing import LabelEncoder @@ -92,7 +101,7 @@ Dalam [notebook](../../../../3-Web-App/1-Web-App/notebook.ipynb) kosong yang dis ufos.head() ``` - Data anda harus terlihat seperti ini: + Data anda sepatutnya kelihatan seperti ini: ```output Seconds Country Latitude Longitude @@ -103,11 +112,11 @@ Dalam [notebook](../../../../3-Web-App/1-Web-App/notebook.ipynb) kosong yang dis 24 3.0 3 51.783333 -0.783333 ``` -## Latihan - membangun model anda +## Latihan - membina model anda -Sekarang anda dapat bersiap untuk melatih model dengan membagi data menjadi kelompok pelatihan dan pengujian. +Kini anda boleh bersedia untuk melatih model dengan membahagikan data kepada kumpulan latihan dan ujian. -1. Pilih tiga fitur yang ingin anda latih sebagai vektor X anda, dan vektor y akan menjadi `Country`. You want to be able to input `Seconds`, `Latitude` and `Longitude` dan mendapatkan id negara untuk dikembalikan. +1. Pilih tiga ciri yang ingin anda latih sebagai vektor X anda, dan vektor y akan menjadi `Country`. Anda ingin dapat memasukkan `Seconds`, `Latitude` dan `Longitude` dan mendapatkan id negara untuk dikembalikan. ```python from sklearn.model_selection import train_test_split @@ -134,13 +143,13 @@ Sekarang anda dapat bersiap untuk melatih model dengan membagi data menjadi kelo print('Accuracy: ', accuracy_score(y_test, predictions)) ``` -Akurasi tidak buruk **(sekitar 95%)**, tidak mengherankan, karena `Country` and `Latitude/Longitude` correlate. +Ketepatannya tidak buruk **(sekitar 95%)**, tidak mengejutkan, kerana `Country` dan `Latitude/Longitude` berkorelasi. -The model you created isn't very revolutionary as you should be able to infer a `Country` from its `Latitude` and `Longitude`, tetapi ini adalah latihan yang baik untuk mencoba melatih dari data mentah yang anda bersihkan, diekspor, dan kemudian menggunakan model ini dalam aplikasi web. +Model yang anda cipta tidak begitu revolusioner kerana anda sepatutnya dapat menyimpulkan `Country` daripada `Latitude` dan `Longitude`nya, tetapi ia adalah latihan yang baik untuk mencuba melatih daripada data mentah yang anda bersihkan, eksport, dan kemudian menggunakan model ini dalam aplikasi web. ## Latihan - 'pickle' model anda -Sekarang, saatnya untuk _pickle_ model anda! Anda dapat melakukannya dalam beberapa baris kode. Setelah itu di-_pickle_, muat model yang di-pickle dan uji terhadap array data sampel yang berisi nilai untuk detik, lintang, dan bujur, +Kini, tiba masanya untuk _pickle_ model anda! Anda boleh melakukannya dalam beberapa baris kod. Setelah ia _dipickle_, muatkan model yang dipickle dan uji terhadap array data sampel yang mengandungi nilai untuk seconds, latitude dan longitude, ```python import pickle @@ -151,15 +160,15 @@ model = pickle.load(open('ufo-model.pkl','rb')) print(model.predict([[50,44,-12]])) ``` -Model mengembalikan **'3'**, yang merupakan kode negara untuk Inggris. Luar biasa! 👽 +Model mengembalikan **'3'**, yang merupakan kod negara untuk UK. Hebat! 👽 -## Latihan - membangun aplikasi Flask +## Latihan - membina aplikasi Flask -Sekarang anda dapat membangun aplikasi Flask untuk memanggil model anda dan mengembalikan hasil serupa, tetapi dengan cara yang lebih menarik secara visual. +Kini anda boleh membina aplikasi Flask untuk memanggil model anda dan mengembalikan hasil yang serupa, tetapi dengan cara yang lebih menarik secara visual. -1. Mulailah dengan membuat folder bernama **web-app** di sebelah file _notebook.ipynb_ tempat file _ufo-model.pkl_ anda berada. +1. Mulakan dengan mencipta folder bernama **web-app** di sebelah fail _notebook.ipynb_ di mana fail _ufo-model.pkl_ anda berada. -1. Di dalam folder tersebut buat tiga folder lagi: **static**, dengan folder **css** di dalamnya, dan **templates**. Anda sekarang harus memiliki file dan direktori berikut: +1. Dalam folder itu, cipta tiga lagi folder: **static**, dengan folder **css** di dalamnya, dan **templates**. Anda sepatutnya kini mempunyai fail dan direktori berikut: ```output web-app/ @@ -170,9 +179,9 @@ Sekarang anda dapat membangun aplikasi Flask untuk memanggil model anda dan meng ufo-model.pkl ``` - ✅ Lihat folder solusi untuk melihat aplikasi yang sudah selesai + ✅ Rujuk folder penyelesaian untuk melihat aplikasi yang telah siap -1. File pertama yang dibuat dalam folder _web-app_ adalah file **requirements.txt**. Seperti _package.json_ dalam aplikasi JavaScript, file ini mencantumkan ketergantungan yang diperlukan oleh aplikasi. Dalam **requirements.txt** tambahkan baris: +1. Fail pertama yang perlu dicipta dalam folder _web-app_ ialah fail **requirements.txt**. Seperti _package.json_ dalam aplikasi JavaScript, fail ini menyenaraikan kebergantungan yang diperlukan oleh aplikasi. Dalam **requirements.txt** tambahkan baris: ```text scikit-learn @@ -181,25 +190,25 @@ Sekarang anda dapat membangun aplikasi Flask untuk memanggil model anda dan meng flask ``` -1. Sekarang, jalankan file ini dengan menavigasi ke _web-app_: +1. Kini, jalankan fail ini dengan menavigasi ke _web-app_: ```bash cd web-app ``` -1. Di terminal anda ketik `pip install`, untuk menginstal perpustakaan yang tercantum dalam _requirements.txt_: +1. Dalam terminal anda taip `pip install`, untuk memasang pustaka yang disenaraikan dalam _requirements.txt_: ```bash pip install -r requirements.txt ``` -1. Sekarang, anda siap membuat tiga file lagi untuk menyelesaikan aplikasi: +1. Kini, anda bersedia untuk mencipta tiga lagi fail untuk melengkapkan aplikasi: - 1. Buat **app.py** di root. - 2. Buat **index.html** di direktori _templates_. - 3. Buat **styles.css** di direktori _static/css_. + 1. Cipta **app.py** di root. + 2. Cipta **index.html** dalam direktori _templates_. + 3. Cipta **styles.css** dalam direktori _static/css_. -1. Buat file _styles.css_ dengan beberapa gaya: +1. Bina fail _styles.css_ dengan beberapa gaya: ```css body { @@ -233,7 +242,7 @@ Sekarang anda dapat membangun aplikasi Flask untuk memanggil model anda dan meng } ``` -1. Selanjutnya, buat file _index.html_: +1. Seterusnya, bina fail _index.html_: ```html @@ -268,11 +277,11 @@ Sekarang anda dapat membangun aplikasi Flask untuk memanggil model anda dan meng ``` - Lihatlah templating dalam file ini. Perhatikan sintaks 'mustache' di sekitar variabel yang akan disediakan oleh aplikasi, seperti teks prediksi: `{{}}`. There's also a form that posts a prediction to the `/predict` route. + Perhatikan templat dalam fail ini. Perhatikan sintaks 'mustache' di sekitar pembolehubah yang akan disediakan oleh aplikasi, seperti teks ramalan: `{{}}`. Terdapat juga borang yang menghantar ramalan ke laluan `/predict`. - Finally, you're ready to build the python file that drives the consumption of the model and the display of predictions: + Akhirnya, anda bersedia untuk membina fail python yang memacu penggunaan model dan paparan ramalan: -1. In `app.py` tambahkan: +1. Dalam `app.py` tambahkan: ```python import numpy as np @@ -309,40 +318,42 @@ Sekarang anda dapat membangun aplikasi Flask untuk memanggil model anda dan meng app.run(debug=True) ``` - > 💡 Tip: ketika anda menambahkan [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) while running the web app using Flask, any changes you make to your application will be reflected immediately without the need to restart the server. Beware! Don't enable this mode in a production app. + > 💡 Tip: apabila anda menambah [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) semasa menjalankan aplikasi web menggunakan Flask, sebarang perubahan yang anda buat pada aplikasi anda akan tercermin serta-merta tanpa perlu memulakan semula pelayan. Berhati-hati! Jangan aktifkan mod ini dalam aplikasi pengeluaran. -If you run `python app.py` or `python3 app.py` - your web server starts up, locally, and you can fill out a short form to get an answer to your burning question about where UFOs have been sighted! +Jika anda menjalankan `python app.py` atau `python3 app.py` - pelayan web anda akan bermula secara tempatan, dan anda boleh mengisi borang pendek untuk mendapatkan jawapan kepada soalan anda tentang di mana UFO telah dilihat! -Before doing that, take a look at the parts of `app.py`: +Sebelum melakukannya, lihat bahagian `app.py`: -1. First, dependencies are loaded and the app starts. -1. Then, the model is imported. -1. Then, index.html is rendered on the home route. +1. Pertama, kebergantungan dimuatkan dan aplikasi dimulakan. +1. Kemudian, model diimport. +1. Kemudian, index.html dirender pada laluan utama. -On the `/predict` route, several things happen when the form is posted: +Pada laluan `/predict`, beberapa perkara berlaku apabila borang dihantar: -1. The form variables are gathered and converted to a numpy array. They are then sent to the model and a prediction is returned. -2. The Countries that we want displayed are re-rendered as readable text from their predicted country code, and that value is sent back to index.html to be rendered in the template. +1. Pembolehubah borang dikumpulkan dan ditukar kepada array numpy. Ia kemudian dihantar ke model dan ramalan dikembalikan. +2. Negara-negara yang ingin dipaparkan dirender semula sebagai teks yang boleh dibaca daripada kod negara yang diramalkan, dan nilai tersebut dihantar kembali ke index.html untuk dirender dalam templat. -Using a model this way, with Flask and a pickled model, is relatively straightforward. The hardest thing is to understand what shape the data is that must be sent to the model to get a prediction. That all depends on how the model was trained. This one has three data points to be input in order to get a prediction. +Menggunakan model dengan cara ini, dengan Flask dan model yang dipickle, adalah agak mudah. Perkara yang paling sukar ialah memahami bentuk data yang mesti dihantar ke model untuk mendapatkan ramalan. Itu semua bergantung pada bagaimana model dilatih. Model ini mempunyai tiga titik data untuk dimasukkan bagi mendapatkan ramalan. -In a professional setting, you can see how good communication is necessary between the folks who train the model and those who consume it in a web or mobile app. In our case, it's only one person, you! +Dalam suasana profesional, anda dapat melihat betapa pentingnya komunikasi yang baik antara mereka yang melatih model dan mereka yang menggunakannya dalam aplikasi web atau mudah alih. Dalam kes kita, ia hanya satu orang, anda! --- -## 🚀 Challenge +## 🚀 Cabaran + +Daripada bekerja dalam notebook dan mengimport model ke aplikasi Flask, anda boleh melatih model terus dalam aplikasi Flask! Cuba tukarkan kod Python anda dalam notebook, mungkin selepas data anda dibersihkan, untuk melatih model dari dalam aplikasi pada laluan yang dipanggil `train`. Apakah kelebihan dan kekurangan menggunakan kaedah ini? -Instead of working in a notebook and importing the model to the Flask app, you could train the model right within the Flask app! Try converting your Python code in the notebook, perhaps after your data is cleaned, to train the model from within the app on a route called `train`. Apa pro dan kontra dari mengejar metode ini? +## [Kuiz selepas kuliah](https://ff-quizzes.netlify.app/en/ml/) -## [Kuis Pasca-Kuliah](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/18/) +## Ulasan & Kajian Kendiri -## Tinjauan & Studi Mandiri +Terdapat banyak cara untuk membina aplikasi web yang menggunakan model ML. Buat senarai cara anda boleh menggunakan JavaScript atau Python untuk membina aplikasi web yang memanfaatkan pembelajaran mesin. Pertimbangkan seni bina: adakah model harus kekal dalam aplikasi atau berada di awan? Jika yang terakhir, bagaimana anda akan mengaksesnya? Lukiskan model seni bina untuk penyelesaian web ML yang diterapkan. -Ada banyak cara untuk membangun aplikasi web yang mengonsumsi model ML. Buatlah daftar cara-cara yang dapat anda gunakan JavaScript atau Python untuk membangun aplikasi web yang memanfaatkan pembelajaran mesin. Pertimbangkan arsitektur: apakah model harus tetap dalam aplikasi atau hidup di cloud? Jika yang terakhir, bagaimana anda mengaksesnya? Gambarlah model arsitektur untuk solusi web ML yang diterapkan. +## Tugasan -## Tugas +[Cuba model yang berbeza](assignment.md) -[Cobalah model yang berbeda](assignment.md) +--- -**Penafian**: -Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI berasaskan mesin. Walaupun kami berusaha untuk ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat penting, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/3-Web-App/1-Web-App/assignment.md b/translations/ms/3-Web-App/1-Web-App/assignment.md index 841fc6d8..96bc0d4b 100644 --- a/translations/ms/3-Web-App/1-Web-App/assignment.md +++ b/translations/ms/3-Web-App/1-Web-App/assignment.md @@ -1,14 +1,25 @@ + # Cuba model yang berbeza ## Arahan -Sekarang anda telah membina satu aplikasi web menggunakan model Regresi terlatih, gunakan salah satu model dari pelajaran Regresi sebelumnya untuk membuat semula aplikasi web ini. Anda boleh mengekalkan gaya atau merekanya dengan cara yang berbeza untuk mencerminkan data labu. Berhati-hati untuk mengubah input agar sesuai dengan kaedah latihan model anda. +Sekarang setelah anda membina satu aplikasi web menggunakan model Regresi yang telah dilatih, gunakan salah satu model daripada pelajaran Regresi sebelumnya untuk membuat semula aplikasi web ini. Anda boleh mengekalkan gaya atau mereka bentuknya secara berbeza untuk mencerminkan data labu. Berhati-hati untuk menukar input agar sesuai dengan kaedah latihan model anda. ## Rubrik -| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | | -------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | -------------------------------------- | -| | Aplikasi web berfungsi seperti yang diharapkan dan dideploy ke awan | Aplikasi web mengandungi kesilapan atau menunjukkan hasil yang tidak dijangka | Aplikasi web tidak berfungsi dengan betul | +| | Aplikasi web berfungsi seperti yang diharapkan dan telah diterbitkan ke awan | Aplikasi web mengandungi kekurangan atau menunjukkan hasil yang tidak dijangka | Aplikasi web tidak berfungsi dengan baik | -**Penafian**: -Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI berasaskan mesin. Walaupun kami berusaha untuk ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber berwibawa. Untuk maklumat kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab ke atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/3-Web-App/README.md b/translations/ms/3-Web-App/README.md index 4eb3dbf1..94c5ace6 100644 --- a/translations/ms/3-Web-App/README.md +++ b/translations/ms/3-Web-App/README.md @@ -1,8 +1,17 @@ + # Bina aplikasi web untuk menggunakan model ML anda -Dalam bahagian kurikulum ini, anda akan diperkenalkan kepada topik ML terapan: bagaimana untuk menyimpan model Scikit-learn anda sebagai fail yang boleh digunakan untuk membuat ramalan dalam aplikasi web. Setelah model disimpan, anda akan belajar bagaimana menggunakannya dalam aplikasi web yang dibina dalam Flask. Anda akan mula dengan mencipta model menggunakan beberapa data tentang penampakan UFO! Kemudian, anda akan membina aplikasi web yang membolehkan anda memasukkan beberapa saat dengan nilai latitud dan longitud untuk meramalkan negara mana yang melaporkan melihat UFO. +Dalam bahagian kurikulum ini, anda akan diperkenalkan kepada topik ML yang diterapkan: bagaimana untuk menyimpan model Scikit-learn anda sebagai fail yang boleh digunakan untuk membuat ramalan dalam aplikasi web. Setelah model disimpan, anda akan belajar cara menggunakannya dalam aplikasi web yang dibina menggunakan Flask. Anda akan mula dengan mencipta model menggunakan data yang berkaitan dengan penampakan UFO! Kemudian, anda akan membina aplikasi web yang membolehkan anda memasukkan bilangan saat bersama nilai latitud dan longitud untuk meramalkan negara mana yang melaporkan melihat UFO. -![UFO Parking](../../../translated_images/ufo.9e787f5161da9d4d1dafc537e1da09be8210f2ee996cb638aa5cee1d92867a04.ms.jpg) +![UFO Parking](../../../3-Web-App/images/ufo.jpg) Foto oleh Michael Herren di Unsplash @@ -16,9 +25,11 @@ Foto oleh +# Pengenalan kepada klasifikasi + +Dalam empat pelajaran ini, anda akan meneroka fokus asas pembelajaran mesin klasik - _klasifikasi_. Kita akan menggunakan pelbagai algoritma klasifikasi dengan dataset tentang semua masakan hebat dari Asia dan India. Semoga anda lapar! + +![hanya secubit!](../../../../4-Classification/1-Introduction/images/pinch.png) + +> Raikan masakan pan-Asia dalam pelajaran ini! Imej oleh [Jen Looper](https://twitter.com/jenlooper) + +Klasifikasi adalah satu bentuk [pembelajaran terkawal](https://wikipedia.org/wiki/Supervised_learning) yang mempunyai banyak persamaan dengan teknik regresi. Jika pembelajaran mesin berkaitan dengan meramalkan nilai atau nama sesuatu menggunakan dataset, maka klasifikasi biasanya terbahagi kepada dua kumpulan: _klasifikasi binari_ dan _klasifikasi pelbagai kelas_. + +[![Pengenalan kepada klasifikasi](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "Pengenalan kepada klasifikasi") + +> 🎥 Klik imej di atas untuk video: John Guttag dari MIT memperkenalkan klasifikasi + +Ingat: + +- **Regresi linear** membantu anda meramalkan hubungan antara pemboleh ubah dan membuat ramalan tepat tentang di mana titik data baru akan berada dalam hubungan dengan garis tersebut. Sebagai contoh, anda boleh meramalkan _berapa harga labu pada bulan September berbanding Disember_. +- **Regresi logistik** membantu anda menemui "kategori binari": pada titik harga ini, _adakah labu ini berwarna oren atau tidak-oren_? + +Klasifikasi menggunakan pelbagai algoritma untuk menentukan cara lain dalam menentukan label atau kelas titik data. Mari kita bekerja dengan data masakan ini untuk melihat sama ada, dengan memerhatikan sekumpulan bahan, kita boleh menentukan asal-usul masakannya. + +## [Kuiz pra-pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Pelajaran ini tersedia dalam R!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html) + +### Pengenalan + +Klasifikasi adalah salah satu aktiviti asas bagi penyelidik pembelajaran mesin dan saintis data. Daripada klasifikasi asas nilai binari ("adakah e-mel ini spam atau tidak?"), kepada klasifikasi imej kompleks dan segmentasi menggunakan penglihatan komputer, sentiasa berguna untuk dapat menyusun data ke dalam kelas dan bertanya soalan mengenainya. + +Untuk menyatakan proses ini dengan cara yang lebih saintifik, kaedah klasifikasi anda mencipta model ramalan yang membolehkan anda memetakan hubungan antara pemboleh ubah input kepada pemboleh ubah output. + +![klasifikasi binari vs. pelbagai kelas](../../../../4-Classification/1-Introduction/images/binary-multiclass.png) + +> Masalah binari vs. pelbagai kelas untuk algoritma klasifikasi. Infografik oleh [Jen Looper](https://twitter.com/jenlooper) + +Sebelum memulakan proses membersihkan data, memvisualisasikannya, dan menyediakan data untuk tugas ML kita, mari kita belajar sedikit tentang pelbagai cara pembelajaran mesin boleh digunakan untuk mengklasifikasikan data. + +Berasal daripada [statistik](https://wikipedia.org/wiki/Statistical_classification), klasifikasi menggunakan pembelajaran mesin klasik menggunakan ciri-ciri seperti `smoker`, `weight`, dan `age` untuk menentukan _kemungkinan menghidap penyakit X_. Sebagai teknik pembelajaran terkawal yang serupa dengan latihan regresi yang anda lakukan sebelum ini, data anda dilabelkan dan algoritma ML menggunakan label tersebut untuk mengklasifikasikan dan meramalkan kelas (atau 'ciri') dataset dan menetapkannya kepada kumpulan atau hasil. + +✅ Luangkan masa untuk membayangkan dataset tentang masakan. Apakah yang boleh dijawab oleh model pelbagai kelas? Apakah yang boleh dijawab oleh model binari? Bagaimana jika anda ingin menentukan sama ada sesuatu masakan cenderung menggunakan fenugreek? Bagaimana jika anda ingin melihat sama ada, dengan kehadiran beg runcit penuh dengan bunga lawang, artichoke, kembang kol, dan lobak pedas, anda boleh mencipta hidangan India yang tipikal? + +[![Bakul misteri yang gila](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "Bakul misteri yang gila") + +> 🎥 Klik imej di atas untuk video. Premis utama rancangan 'Chopped' adalah 'bakul misteri' di mana chef perlu membuat hidangan daripada pilihan bahan yang rawak. Pasti model ML akan membantu! + +## Hello 'classifier' + +Soalan yang ingin kita tanyakan kepada dataset masakan ini sebenarnya adalah soalan **pelbagai kelas**, kerana kita mempunyai beberapa kemungkinan masakan kebangsaan untuk diterokai. Berdasarkan sekumpulan bahan, kelas mana daripada banyak kelas ini yang sesuai dengan data? + +Scikit-learn menawarkan beberapa algoritma berbeza untuk digunakan bagi mengklasifikasikan data, bergantung kepada jenis masalah yang ingin anda selesaikan. Dalam dua pelajaran seterusnya, anda akan belajar tentang beberapa algoritma ini. + +## Latihan - bersihkan dan seimbangkan data anda + +Tugas pertama sebelum memulakan projek ini adalah membersihkan dan **menyeimbangkan** data anda untuk mendapatkan hasil yang lebih baik. Mulakan dengan fail kosong _notebook.ipynb_ dalam root folder ini. + +Perkara pertama yang perlu dipasang ialah [imblearn](https://imbalanced-learn.org/stable/). Ini adalah pakej Scikit-learn yang akan membolehkan anda menyeimbangkan data dengan lebih baik (anda akan belajar lebih lanjut tentang tugas ini sebentar lagi). + +1. Untuk memasang `imblearn`, jalankan `pip install`, seperti berikut: + + ```python + pip install imblearn + ``` + +1. Import pakej yang anda perlukan untuk mengimport data anda dan memvisualisasikannya, juga import `SMOTE` daripada `imblearn`. + + ```python + import pandas as pd + import matplotlib.pyplot as plt + import matplotlib as mpl + import numpy as np + from imblearn.over_sampling import SMOTE + ``` + + Sekarang anda sudah bersedia untuk membaca dan mengimport data seterusnya. + +1. Tugas seterusnya adalah mengimport data: + + ```python + df = pd.read_csv('../data/cuisines.csv') + ``` + + Menggunakan `read_csv()` akan membaca kandungan fail csv _cusines.csv_ dan meletakkannya dalam pemboleh ubah `df`. + +1. Periksa bentuk data: + + ```python + df.head() + ``` + + Lima baris pertama kelihatan seperti ini: + + ```output + | | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | + | --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- | + | 0 | 65 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 1 | 66 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 2 | 67 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 3 | 68 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 4 | 69 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + ``` + +1. Dapatkan maklumat tentang data ini dengan memanggil `info()`: + + ```python + df.info() + ``` + + Output anda menyerupai: + + ```output + + RangeIndex: 2448 entries, 0 to 2447 + Columns: 385 entries, Unnamed: 0 to zucchini + dtypes: int64(384), object(1) + memory usage: 7.2+ MB + ``` + +## Latihan - belajar tentang masakan + +Sekarang kerja mula menjadi lebih menarik. Mari kita temui pengagihan data, mengikut masakan. + +1. Plot data sebagai bar dengan memanggil `barh()`: + + ```python + df.cuisine.value_counts().plot.barh() + ``` + + ![pengagihan data masakan](../../../../4-Classification/1-Introduction/images/cuisine-dist.png) + + Terdapat bilangan masakan yang terhad, tetapi pengagihan data tidak sekata. Anda boleh membetulkannya! Sebelum melakukannya, terokai sedikit lagi. + +1. Ketahui berapa banyak data yang tersedia bagi setiap masakan dan cetak: + + ```python + thai_df = df[(df.cuisine == "thai")] + japanese_df = df[(df.cuisine == "japanese")] + chinese_df = df[(df.cuisine == "chinese")] + indian_df = df[(df.cuisine == "indian")] + korean_df = df[(df.cuisine == "korean")] + + print(f'thai df: {thai_df.shape}') + print(f'japanese df: {japanese_df.shape}') + print(f'chinese df: {chinese_df.shape}') + print(f'indian df: {indian_df.shape}') + print(f'korean df: {korean_df.shape}') + ``` + + Output kelihatan seperti ini: + + ```output + thai df: (289, 385) + japanese df: (320, 385) + chinese df: (442, 385) + indian df: (598, 385) + korean df: (799, 385) + ``` + +## Menemui bahan-bahan + +Sekarang anda boleh menyelami data dengan lebih mendalam dan mengetahui apakah bahan-bahan tipikal bagi setiap masakan. Anda harus membersihkan data berulang yang mencipta kekeliruan antara masakan, jadi mari kita belajar tentang masalah ini. + +1. Cipta fungsi `create_ingredient()` dalam Python untuk mencipta dataframe bahan. Fungsi ini akan bermula dengan membuang lajur yang tidak membantu dan menyusun bahan mengikut kiraannya: + + ```python + def create_ingredient_df(df): + ingredient_df = df.T.drop(['cuisine','Unnamed: 0']).sum(axis=1).to_frame('value') + ingredient_df = ingredient_df[(ingredient_df.T != 0).any()] + ingredient_df = ingredient_df.sort_values(by='value', ascending=False, + inplace=False) + return ingredient_df + ``` + + Sekarang anda boleh menggunakan fungsi itu untuk mendapatkan idea tentang sepuluh bahan paling popular mengikut masakan. + +1. Panggil `create_ingredient()` dan plot dengan memanggil `barh()`: + + ```python + thai_ingredient_df = create_ingredient_df(thai_df) + thai_ingredient_df.head(10).plot.barh() + ``` + + ![thai](../../../../4-Classification/1-Introduction/images/thai.png) + +1. Lakukan perkara yang sama untuk data Jepun: + + ```python + japanese_ingredient_df = create_ingredient_df(japanese_df) + japanese_ingredient_df.head(10).plot.barh() + ``` + + ![jepun](../../../../4-Classification/1-Introduction/images/japanese.png) + +1. Sekarang untuk bahan Cina: + + ```python + chinese_ingredient_df = create_ingredient_df(chinese_df) + chinese_ingredient_df.head(10).plot.barh() + ``` + + ![cina](../../../../4-Classification/1-Introduction/images/chinese.png) + +1. Plot bahan India: + + ```python + indian_ingredient_df = create_ingredient_df(indian_df) + indian_ingredient_df.head(10).plot.barh() + ``` + + ![india](../../../../4-Classification/1-Introduction/images/indian.png) + +1. Akhir sekali, plot bahan Korea: + + ```python + korean_ingredient_df = create_ingredient_df(korean_df) + korean_ingredient_df.head(10).plot.barh() + ``` + + ![korea](../../../../4-Classification/1-Introduction/images/korean.png) + +1. Sekarang, buang bahan yang paling biasa yang mencipta kekeliruan antara masakan yang berbeza, dengan memanggil `drop()`: + + Semua orang suka nasi, bawang putih dan halia! + + ```python + feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) + labels_df = df.cuisine #.unique() + feature_df.head() + ``` + +## Seimbangkan dataset + +Sekarang setelah anda membersihkan data, gunakan [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "Teknik Pengambilan Sampel Lebihan Minoriti Sintetik" - untuk menyeimbangkannya. + +1. Panggil `fit_resample()`, strategi ini menjana sampel baru melalui interpolasi. + + ```python + oversample = SMOTE() + transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) + ``` + + Dengan menyeimbangkan data anda, anda akan mendapat hasil yang lebih baik semasa mengklasifikasikannya. Fikirkan tentang klasifikasi binari. Jika kebanyakan data anda adalah satu kelas, model ML akan meramalkan kelas itu lebih kerap, hanya kerana terdapat lebih banyak data untuknya. Menyeimbangkan data mengambil data yang berat sebelah dan membantu menghapuskan ketidakseimbangan ini. + +1. Sekarang anda boleh memeriksa bilangan label bagi setiap bahan: + + ```python + print(f'new label count: {transformed_label_df.value_counts()}') + print(f'old label count: {df.cuisine.value_counts()}') + ``` + + Output anda kelihatan seperti ini: + + ```output + new label count: korean 799 + chinese 799 + indian 799 + japanese 799 + thai 799 + Name: cuisine, dtype: int64 + old label count: korean 799 + indian 598 + chinese 442 + japanese 320 + thai 289 + Name: cuisine, dtype: int64 + ``` + + Data kini bersih, seimbang, dan sangat lazat! + +1. Langkah terakhir adalah menyimpan data yang seimbang, termasuk label dan ciri, ke dalam dataframe baru yang boleh dieksport ke fail: + + ```python + transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') + ``` + +1. Anda boleh melihat data sekali lagi menggunakan `transformed_df.head()` dan `transformed_df.info()`. Simpan salinan data ini untuk digunakan dalam pelajaran masa depan: + + ```python + transformed_df.head() + transformed_df.info() + transformed_df.to_csv("../data/cleaned_cuisines.csv") + ``` + + CSV segar ini kini boleh didapati dalam folder data root. + +--- + +## 🚀Cabaran + +Kurikulum ini mengandungi beberapa dataset yang menarik. Terokai folder `data` dan lihat sama ada terdapat dataset yang sesuai untuk klasifikasi binari atau pelbagai kelas? Apakah soalan yang akan anda tanyakan kepada dataset ini? + +## [Kuiz pasca-pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Kajian & Pembelajaran Kendiri + +Terokai API SMOTE. Apakah kes penggunaan yang paling sesuai untuknya? Apakah masalah yang diselesaikannya? + +## Tugasan + +[Terokai kaedah klasifikasi](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/4-Classification/1-Introduction/assignment.md b/translations/ms/4-Classification/1-Introduction/assignment.md new file mode 100644 index 00000000..6c7c3ba9 --- /dev/null +++ b/translations/ms/4-Classification/1-Introduction/assignment.md @@ -0,0 +1,25 @@ + +# Terokai kaedah pengelasan + +## Arahan + +Dalam [dokumentasi Scikit-learn](https://scikit-learn.org/stable/supervised_learning.html), anda akan menemui senarai besar cara untuk mengelaskan data. Lakukan sedikit pencarian dalam dokumen ini: matlamat anda adalah untuk mencari kaedah pengelasan dan padankan dengan set data dalam kurikulum ini, soalan yang boleh anda tanyakan mengenainya, dan teknik pengelasan. Buat spreadsheet atau jadual dalam fail .doc dan terangkan bagaimana set data tersebut akan berfungsi dengan algoritma pengelasan. + +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| | dokumen disediakan yang merangkumi 5 algoritma bersama teknik pengelasan. Gambaran keseluruhan dijelaskan dengan baik dan terperinci. | dokumen disediakan yang merangkumi 3 algoritma bersama teknik pengelasan. Gambaran keseluruhan dijelaskan dengan baik dan terperinci. | dokumen disediakan yang merangkumi kurang daripada tiga algoritma bersama teknik pengelasan dan gambaran keseluruhan tidak dijelaskan dengan baik atau terperinci. | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/4-Classification/1-Introduction/solution/Julia/README.md b/translations/ms/4-Classification/1-Introduction/solution/Julia/README.md new file mode 100644 index 00000000..5636d797 --- /dev/null +++ b/translations/ms/4-Classification/1-Introduction/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/4-Classification/2-Classifiers-1/README.md b/translations/ms/4-Classification/2-Classifiers-1/README.md new file mode 100644 index 00000000..c3e27b8a --- /dev/null +++ b/translations/ms/4-Classification/2-Classifiers-1/README.md @@ -0,0 +1,253 @@ + +# Pengelas Masakan 1 + +Dalam pelajaran ini, anda akan menggunakan dataset yang telah disimpan dari pelajaran sebelumnya yang penuh dengan data seimbang dan bersih mengenai masakan. + +Anda akan menggunakan dataset ini dengan pelbagai pengelas untuk _meramalkan jenis masakan berdasarkan kumpulan bahan_. Semasa melakukannya, anda akan mempelajari lebih lanjut tentang beberapa cara algoritma boleh digunakan untuk tugas klasifikasi. + +## [Kuiz sebelum kuliah](https://ff-quizzes.netlify.app/en/ml/) +# Persediaan + +Dengan andaian anda telah menyelesaikan [Pelajaran 1](../1-Introduction/README.md), pastikan fail _cleaned_cuisines.csv_ wujud dalam folder root `/data` untuk keempat-empat pelajaran ini. + +## Latihan - ramalkan jenis masakan + +1. Bekerja dalam folder _notebook.ipynb_ pelajaran ini, import fail tersebut bersama perpustakaan Pandas: + + ```python + import pandas as pd + cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv") + cuisines_df.head() + ``` + + Data kelihatan seperti ini: + +| | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | +| --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- | +| 0 | 0 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 1 | 1 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 2 | 2 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 3 | 3 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 4 | 4 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + + +1. Sekarang, import beberapa lagi perpustakaan: + + ```python + from sklearn.linear_model import LogisticRegression + from sklearn.model_selection import train_test_split, cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve + from sklearn.svm import SVC + import numpy as np + ``` + +1. Bahagikan koordinat X dan y kepada dua dataframe untuk latihan. `cuisine` boleh menjadi dataframe label: + + ```python + cuisines_label_df = cuisines_df['cuisine'] + cuisines_label_df.head() + ``` + + Ia akan kelihatan seperti ini: + + ```output + 0 indian + 1 indian + 2 indian + 3 indian + 4 indian + Name: cuisine, dtype: object + ``` + +1. Buang lajur `Unnamed: 0` dan lajur `cuisine`, panggil `drop()`. Simpan data yang selebihnya sebagai ciri yang boleh dilatih: + + ```python + cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) + cuisines_feature_df.head() + ``` + + Ciri-ciri anda kelihatan seperti ini: + +| | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | artemisia | artichoke | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | +| ---: | -----: | -------: | ----: | ---------: | ----: | -----------: | ------: | -------: | --------: | --------: | ---: | ------: | ----------: | ---------: | ----------------------: | ---: | ---: | ---: | ----: | -----: | -------: | +| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | + +Sekarang anda bersedia untuk melatih model anda! + +## Memilih pengelas + +Sekarang data anda bersih dan sedia untuk latihan, anda perlu memutuskan algoritma mana yang akan digunakan untuk tugas ini. + +Scikit-learn mengelompokkan klasifikasi di bawah Pembelajaran Terkawal, dan dalam kategori itu anda akan menemui banyak cara untuk mengelas. [Kepelbagaian](https://scikit-learn.org/stable/supervised_learning.html) ini mungkin kelihatan mengelirukan pada pandangan pertama. Kaedah berikut semuanya termasuk teknik klasifikasi: + +- Model Linear +- Support Vector Machines +- Stochastic Gradient Descent +- Nearest Neighbors +- Gaussian Processes +- Decision Trees +- Kaedah Ensemble (Voting Classifier) +- Algoritma Multiclass dan multioutput (klasifikasi multilabel dan multiclass-multioutput) + +> Anda juga boleh menggunakan [rangkaian neural untuk mengelas data](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification), tetapi itu di luar skop pelajaran ini. + +### Pengelas mana yang perlu dipilih? + +Jadi, pengelas mana yang patut anda pilih? Selalunya, mencuba beberapa pengelas dan mencari hasil yang baik adalah cara untuk menguji. Scikit-learn menawarkan [perbandingan sisi-sisi](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) pada dataset yang dicipta, membandingkan KNeighbors, SVC dua cara, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB dan QuadraticDiscrinationAnalysis, menunjukkan hasil yang divisualisasikan: + +![perbandingan pengelas](../../../../4-Classification/2-Classifiers-1/images/comparison.png) +> Plot yang dihasilkan dalam dokumentasi Scikit-learn + +> AutoML menyelesaikan masalah ini dengan mudah dengan menjalankan perbandingan ini di awan, membolehkan anda memilih algoritma terbaik untuk data anda. Cuba [di sini](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott) + +### Pendekatan yang lebih baik + +Pendekatan yang lebih baik daripada meneka secara rawak adalah dengan mengikuti idea dalam [ML Cheat Sheet](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott) yang boleh dimuat turun ini. Di sini, kita mendapati bahawa, untuk masalah multiclass kita, kita mempunyai beberapa pilihan: + +![cheatsheet untuk masalah multiclass](../../../../4-Classification/2-Classifiers-1/images/cheatsheet.png) +> Bahagian dari Algorithm Cheat Sheet Microsoft, memperincikan pilihan klasifikasi multiclass + +✅ Muat turun cheat sheet ini, cetak, dan gantungkan di dinding anda! + +### Penalaran + +Mari kita lihat jika kita boleh membuat penalaran melalui pendekatan yang berbeza berdasarkan kekangan yang kita ada: + +- **Rangkaian neural terlalu berat**. Memandangkan dataset kita bersih tetapi minimal, dan fakta bahawa kita menjalankan latihan secara tempatan melalui notebook, rangkaian neural terlalu berat untuk tugas ini. +- **Tiada pengelas dua kelas**. Kita tidak menggunakan pengelas dua kelas, jadi itu menyingkirkan one-vs-all. +- **Decision tree atau logistic regression boleh berfungsi**. Decision tree mungkin berfungsi, atau logistic regression untuk data multiclass. +- **Multiclass Boosted Decision Trees menyelesaikan masalah yang berbeza**. Multiclass boosted decision tree paling sesuai untuk tugas bukan parametrik, contohnya tugas yang direka untuk membina ranking, jadi ia tidak berguna untuk kita. + +### Menggunakan Scikit-learn + +Kita akan menggunakan Scikit-learn untuk menganalisis data kita. Walau bagaimanapun, terdapat banyak cara untuk menggunakan logistic regression dalam Scikit-learn. Lihat [parameter untuk diteruskan](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). + +Secara asasnya terdapat dua parameter penting - `multi_class` dan `solver` - yang perlu kita tentukan, apabila kita meminta Scikit-learn untuk melakukan logistic regression. Nilai `multi_class` menerapkan tingkah laku tertentu. Nilai solver adalah algoritma yang akan digunakan. Tidak semua solver boleh digabungkan dengan semua nilai `multi_class`. + +Menurut dokumen, dalam kes multiclass, algoritma latihan: + +- **Menggunakan skema one-vs-rest (OvR)**, jika pilihan `multi_class` ditetapkan kepada `ovr` +- **Menggunakan cross-entropy loss**, jika pilihan `multi_class` ditetapkan kepada `multinomial`. (Pada masa ini pilihan `multinomial` hanya disokong oleh solver ‘lbfgs’, ‘sag’, ‘saga’ dan ‘newton-cg’.)" + +> 🎓 'Skema' di sini boleh sama ada 'ovr' (one-vs-rest) atau 'multinomial'. Oleh kerana logistic regression sebenarnya direka untuk menyokong klasifikasi binari, skema ini membolehkannya menangani tugas klasifikasi multiclass dengan lebih baik. [sumber](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/) + +> 🎓 'Solver' ditakrifkan sebagai "algoritma yang digunakan dalam masalah pengoptimuman". [sumber](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). + +Scikit-learn menawarkan jadual ini untuk menerangkan bagaimana solver menangani cabaran yang berbeza yang disebabkan oleh struktur data yang berbeza: + +![solvers](../../../../4-Classification/2-Classifiers-1/images/solvers.png) + +## Latihan - bahagikan data + +Kita boleh fokus pada logistic regression untuk percubaan latihan pertama kita kerana anda baru-baru ini mempelajarinya dalam pelajaran sebelumnya. +Bahagikan data anda kepada kumpulan latihan dan ujian dengan memanggil `train_test_split()`: + +```python +X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) +``` + +## Latihan - gunakan logistic regression + +Oleh kerana anda menggunakan kes multiclass, anda perlu memilih _skema_ yang akan digunakan dan _solver_ yang akan ditetapkan. Gunakan LogisticRegression dengan tetapan multiclass dan solver **liblinear** untuk latihan. + +1. Cipta logistic regression dengan multi_class ditetapkan kepada `ovr` dan solver ditetapkan kepada `liblinear`: + + ```python + lr = LogisticRegression(multi_class='ovr',solver='liblinear') + model = lr.fit(X_train, np.ravel(y_train)) + + accuracy = model.score(X_test, y_test) + print ("Accuracy is {}".format(accuracy)) + ``` + + ✅ Cuba solver lain seperti `lbfgs`, yang sering ditetapkan sebagai default +Gunakan fungsi Pandas [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html) untuk meratakan data anda apabila diperlukan. +Ketepatan adalah baik pada lebih **80%**! + +1. Anda boleh melihat model ini berfungsi dengan menguji satu baris data (#50): + + ```python + print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}') + print(f'cuisine: {y_test.iloc[50]}') + ``` + + Hasilnya dicetak: + + ```output + ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object') + cuisine: indian + ``` + + ✅ Cuba nombor baris yang berbeza dan periksa hasilnya + +1. Dengan lebih mendalam, anda boleh memeriksa ketepatan ramalan ini: + + ```python + test= X_test.iloc[50].values.reshape(-1, 1).T + proba = model.predict_proba(test) + classes = model.classes_ + resultdf = pd.DataFrame(data=proba, columns=classes) + + topPrediction = resultdf.T.sort_values(by=[0], ascending = [False]) + topPrediction.head() + ``` + + Hasilnya dicetak - masakan India adalah tekaan terbaiknya, dengan kebarangkalian yang baik: + + | | 0 | + | -------: | -------: | + | indian | 0.715851 | + | chinese | 0.229475 | + | japanese | 0.029763 | + | korean | 0.017277 | + | thai | 0.007634 | + + ✅ Bolehkah anda jelaskan mengapa model ini cukup yakin bahawa ini adalah masakan India? + +1. Dapatkan lebih banyak perincian dengan mencetak laporan klasifikasi, seperti yang anda lakukan dalam pelajaran regresi: + + ```python + y_pred = model.predict(X_test) + print(classification_report(y_test,y_pred)) + ``` + + | | precision | recall | f1-score | support | + | ------------ | --------- | ------ | -------- | ------- | + | chinese | 0.73 | 0.71 | 0.72 | 229 | + | indian | 0.91 | 0.93 | 0.92 | 254 | + | japanese | 0.70 | 0.75 | 0.72 | 220 | + | korean | 0.86 | 0.76 | 0.81 | 242 | + | thai | 0.79 | 0.85 | 0.82 | 254 | + | accuracy | 0.80 | 1199 | | | + | macro avg | 0.80 | 0.80 | 0.80 | 1199 | + | weighted avg | 0.80 | 0.80 | 0.80 | 1199 | + +## 🚀Cabaran + +Dalam pelajaran ini, anda menggunakan data yang telah dibersihkan untuk membina model pembelajaran mesin yang boleh meramalkan masakan kebangsaan berdasarkan siri bahan-bahan. Luangkan masa untuk membaca pelbagai pilihan yang disediakan oleh Scikit-learn untuk mengklasifikasikan data. Selami lebih mendalam konsep 'solver' untuk memahami apa yang berlaku di sebalik tabir. + +## [Kuiz selepas kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Ulasan & Kajian Kendiri + +Selami sedikit lagi matematik di sebalik regresi logistik dalam [pelajaran ini](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf) +## Tugasan + +[Kaji tentang solvers](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/4-Classification/2-Classifiers-1/assignment.md b/translations/ms/4-Classification/2-Classifiers-1/assignment.md new file mode 100644 index 00000000..9d8ea232 --- /dev/null +++ b/translations/ms/4-Classification/2-Classifiers-1/assignment.md @@ -0,0 +1,23 @@ + +# Kajian tentang penyelesai masalah +## Arahan + +Dalam pelajaran ini, anda telah mempelajari tentang pelbagai penyelesai masalah yang menggabungkan algoritma dengan proses pembelajaran mesin untuk mencipta model yang tepat. Teliti penyelesai masalah yang disenaraikan dalam pelajaran dan pilih dua daripadanya. Dengan kata-kata anda sendiri, bandingkan dan bezakan kedua-dua penyelesai masalah ini. Masalah jenis apa yang mereka selesaikan? Bagaimana mereka berfungsi dengan pelbagai struktur data? Mengapa anda memilih satu berbanding yang lain? +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------- | +| | Fail .doc disediakan dengan dua perenggan, satu untuk setiap penyelesai masalah, membandingkan mereka dengan teliti. | Fail .doc disediakan dengan hanya satu perenggan | Tugasan tidak lengkap | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/4-Classification/2-Classifiers-1/solution/Julia/README.md b/translations/ms/4-Classification/2-Classifiers-1/solution/Julia/README.md new file mode 100644 index 00000000..93a82dec --- /dev/null +++ b/translations/ms/4-Classification/2-Classifiers-1/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/4-Classification/3-Classifiers-2/README.md b/translations/ms/4-Classification/3-Classifiers-2/README.md new file mode 100644 index 00000000..1169a832 --- /dev/null +++ b/translations/ms/4-Classification/3-Classifiers-2/README.md @@ -0,0 +1,249 @@ + +# Pengelas Masakan 2 + +Dalam pelajaran klasifikasi kedua ini, anda akan meneroka lebih banyak cara untuk mengklasifikasikan data berangka. Anda juga akan mempelajari implikasi memilih satu pengelas berbanding yang lain. + +## [Kuiz pra-kuliah](https://ff-quizzes.netlify.app/en/ml/) + +### Prasyarat + +Kami mengandaikan bahawa anda telah menyelesaikan pelajaran sebelumnya dan mempunyai dataset yang telah dibersihkan dalam folder `data` anda yang dinamakan _cleaned_cuisines.csv_ di akar folder 4-pelajaran ini. + +### Persediaan + +Kami telah memuatkan fail _notebook.ipynb_ anda dengan dataset yang telah dibersihkan dan telah membahagikannya kepada dataframe X dan y, sedia untuk proses pembinaan model. + +## Peta klasifikasi + +Sebelumnya, anda telah mempelajari pelbagai pilihan yang anda ada ketika mengklasifikasikan data menggunakan helaian rujukan Microsoft. Scikit-learn menawarkan helaian rujukan yang serupa tetapi lebih terperinci yang dapat membantu mempersempit pilihan penganggar anda (istilah lain untuk pengelas): + +![Peta ML dari Scikit-learn](../../../../4-Classification/3-Classifiers-2/images/map.png) +> Tip: [lawati peta ini secara dalam talian](https://scikit-learn.org/stable/tutorial/machine_learning_map/) dan klik sepanjang laluan untuk membaca dokumentasi. + +### Rancangan + +Peta ini sangat berguna apabila anda mempunyai pemahaman yang jelas tentang data anda, kerana anda boleh 'berjalan' di sepanjang laluannya untuk membuat keputusan: + +- Kami mempunyai >50 sampel +- Kami ingin meramalkan kategori +- Kami mempunyai data berlabel +- Kami mempunyai kurang daripada 100K sampel +- ✨ Kami boleh memilih Linear SVC +- Jika itu tidak berfungsi, kerana kami mempunyai data berangka + - Kami boleh mencuba ✨ KNeighbors Classifier + - Jika itu tidak berfungsi, cuba ✨ SVC dan ✨ Ensemble Classifiers + +Ini adalah laluan yang sangat berguna untuk diikuti. + +## Latihan - bahagikan data + +Mengikuti laluan ini, kita harus bermula dengan mengimport beberapa perpustakaan yang diperlukan. + +1. Import perpustakaan yang diperlukan: + + ```python + from sklearn.neighbors import KNeighborsClassifier + from sklearn.linear_model import LogisticRegression + from sklearn.svm import SVC + from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier + from sklearn.model_selection import train_test_split, cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve + import numpy as np + ``` + +1. Bahagikan data latihan dan ujian anda: + + ```python + X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) + ``` + +## Pengelas Linear SVC + +Support-Vector clustering (SVC) adalah sebahagian daripada keluarga teknik ML Support-Vector Machines (pelajari lebih lanjut tentang ini di bawah). Dalam kaedah ini, anda boleh memilih 'kernel' untuk menentukan cara mengelompokkan label. Parameter 'C' merujuk kepada 'regularisasi' yang mengawal pengaruh parameter. Kernel boleh menjadi salah satu daripada [beberapa](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC); di sini kami menetapkannya kepada 'linear' untuk memastikan kami menggunakan Linear SVC. Kebarangkalian secara lalai adalah 'false'; di sini kami menetapkannya kepada 'true' untuk mendapatkan anggaran kebarangkalian. Kami menetapkan keadaan rawak kepada '0' untuk mengacak data bagi mendapatkan kebarangkalian. + +### Latihan - gunakan Linear SVC + +Mulakan dengan mencipta array pengelas. Anda akan menambah secara progresif ke array ini semasa kami menguji. + +1. Mulakan dengan Linear SVC: + + ```python + C = 10 + # Create different classifiers. + classifiers = { + 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) + } + ``` + +2. Latih model anda menggunakan Linear SVC dan cetak laporan: + + ```python + n_classifiers = len(classifiers) + + for index, (name, classifier) in enumerate(classifiers.items()): + classifier.fit(X_train, np.ravel(y_train)) + + y_pred = classifier.predict(X_test) + accuracy = accuracy_score(y_test, y_pred) + print("Accuracy (train) for %s: %0.1f%% " % (name, accuracy * 100)) + print(classification_report(y_test,y_pred)) + ``` + + Hasilnya agak baik: + + ```output + Accuracy (train) for Linear SVC: 78.6% + precision recall f1-score support + + chinese 0.71 0.67 0.69 242 + indian 0.88 0.86 0.87 234 + japanese 0.79 0.74 0.76 254 + korean 0.85 0.81 0.83 242 + thai 0.71 0.86 0.78 227 + + accuracy 0.79 1199 + macro avg 0.79 0.79 0.79 1199 + weighted avg 0.79 0.79 0.79 1199 + ``` + +## Pengelas K-Neighbors + +K-Neighbors adalah sebahagian daripada keluarga kaedah ML "neighbors", yang boleh digunakan untuk pembelajaran yang diawasi dan tidak diawasi. Dalam kaedah ini, sejumlah titik yang telah ditentukan dibuat dan data dikumpulkan di sekitar titik-titik ini supaya label umum dapat diramalkan untuk data tersebut. + +### Latihan - gunakan pengelas K-Neighbors + +Pengelas sebelumnya adalah baik dan berfungsi dengan baik dengan data, tetapi mungkin kita boleh mendapatkan ketepatan yang lebih baik. Cuba pengelas K-Neighbors. + +1. Tambahkan satu baris ke array pengelas anda (tambahkan koma selepas item Linear SVC): + + ```python + 'KNN classifier': KNeighborsClassifier(C), + ``` + + Hasilnya sedikit lebih buruk: + + ```output + Accuracy (train) for KNN classifier: 73.8% + precision recall f1-score support + + chinese 0.64 0.67 0.66 242 + indian 0.86 0.78 0.82 234 + japanese 0.66 0.83 0.74 254 + korean 0.94 0.58 0.72 242 + thai 0.71 0.82 0.76 227 + + accuracy 0.74 1199 + macro avg 0.76 0.74 0.74 1199 + weighted avg 0.76 0.74 0.74 1199 + ``` + + ✅ Pelajari tentang [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) + +## Pengelas Support Vector + +Pengelas Support-Vector adalah sebahagian daripada keluarga [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine) kaedah ML yang digunakan untuk tugas klasifikasi dan regresi. SVM "memetakan contoh latihan ke titik dalam ruang" untuk memaksimumkan jarak antara dua kategori. Data berikutnya dipetakan ke dalam ruang ini supaya kategorinya dapat diramalkan. + +### Latihan - gunakan pengelas Support Vector + +Mari cuba mendapatkan ketepatan yang lebih baik dengan pengelas Support Vector. + +1. Tambahkan koma selepas item K-Neighbors, dan kemudian tambahkan baris ini: + + ```python + 'SVC': SVC(), + ``` + + Hasilnya sangat baik! + + ```output + Accuracy (train) for SVC: 83.2% + precision recall f1-score support + + chinese 0.79 0.74 0.76 242 + indian 0.88 0.90 0.89 234 + japanese 0.87 0.81 0.84 254 + korean 0.91 0.82 0.86 242 + thai 0.74 0.90 0.81 227 + + accuracy 0.83 1199 + macro avg 0.84 0.83 0.83 1199 + weighted avg 0.84 0.83 0.83 1199 + ``` + + ✅ Pelajari tentang [Support-Vectors](https://scikit-learn.org/stable/modules/svm.html#svm) + +## Pengelas Ensemble + +Mari ikuti laluan hingga ke penghujungnya, walaupun ujian sebelumnya sudah cukup baik. Mari cuba beberapa 'Pengelas Ensemble', khususnya Random Forest dan AdaBoost: + +```python + 'RFST': RandomForestClassifier(n_estimators=100), + 'ADA': AdaBoostClassifier(n_estimators=100) +``` + +Hasilnya sangat baik, terutamanya untuk Random Forest: + +```output +Accuracy (train) for RFST: 84.5% + precision recall f1-score support + + chinese 0.80 0.77 0.78 242 + indian 0.89 0.92 0.90 234 + japanese 0.86 0.84 0.85 254 + korean 0.88 0.83 0.85 242 + thai 0.80 0.87 0.83 227 + + accuracy 0.84 1199 + macro avg 0.85 0.85 0.84 1199 +weighted avg 0.85 0.84 0.84 1199 + +Accuracy (train) for ADA: 72.4% + precision recall f1-score support + + chinese 0.64 0.49 0.56 242 + indian 0.91 0.83 0.87 234 + japanese 0.68 0.69 0.69 254 + korean 0.73 0.79 0.76 242 + thai 0.67 0.83 0.74 227 + + accuracy 0.72 1199 + macro avg 0.73 0.73 0.72 1199 +weighted avg 0.73 0.72 0.72 1199 +``` + +✅ Pelajari tentang [Pengelas Ensemble](https://scikit-learn.org/stable/modules/ensemble.html) + +Kaedah Pembelajaran Mesin ini "menggabungkan ramalan beberapa penganggar asas" untuk meningkatkan kualiti model. Dalam contoh kami, kami menggunakan Random Trees dan AdaBoost. + +- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), kaedah purata, membina 'hutan' daripada 'pokok keputusan' yang diselitkan dengan keacakan untuk mengelakkan overfitting. Parameter n_estimators ditetapkan kepada bilangan pokok. + +- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) menyesuaikan pengelas kepada dataset dan kemudian menyesuaikan salinan pengelas tersebut kepada dataset yang sama. Ia memberi tumpuan kepada berat item yang diklasifikasikan secara salah dan menyesuaikan fit untuk pengelas seterusnya untuk membetulkan. + +--- + +## 🚀Cabaran + +Setiap teknik ini mempunyai sejumlah besar parameter yang boleh anda ubah. Kajilah parameter lalai setiap satu dan fikirkan apa yang akan berlaku jika anda mengubah parameter ini terhadap kualiti model. + +## [Kuiz pasca-kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Ulasan & Kajian Kendiri + +Terdapat banyak istilah dalam pelajaran ini, jadi luangkan masa untuk mengkaji [senarai ini](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) istilah berguna! + +## Tugasan + +[Parameter play](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/4-Classification/3-Classifiers-2/assignment.md b/translations/ms/4-Classification/3-Classifiers-2/assignment.md new file mode 100644 index 00000000..0ab21d96 --- /dev/null +++ b/translations/ms/4-Classification/3-Classifiers-2/assignment.md @@ -0,0 +1,25 @@ + +# Parameter Play + +## Arahan + +Terdapat banyak parameter yang ditetapkan secara lalai apabila bekerja dengan pengklasifikasi ini. Intellisense dalam VS Code boleh membantu anda menyelidiki parameter-parameter tersebut. Gunakan salah satu Teknik Pengklasifikasian ML dalam pelajaran ini dan latih semula model dengan mengubah nilai parameter yang berbeza. Bina sebuah notebook yang menerangkan mengapa sesetengah perubahan membantu kualiti model manakala yang lain merosakkannya. Berikan jawapan yang terperinci. + +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | ----------------------------- | +| | Sebuah notebook disediakan dengan pengklasifikasi yang dibina sepenuhnya dan parameternya diubah serta perubahan diterangkan dalam kotak teks | Sebuah notebook disediakan sebahagian atau diterangkan dengan kurang baik | Sebuah notebook yang mempunyai pepijat atau cacat | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/4-Classification/3-Classifiers-2/solution/Julia/README.md b/translations/ms/4-Classification/3-Classifiers-2/solution/Julia/README.md new file mode 100644 index 00000000..964d85e7 --- /dev/null +++ b/translations/ms/4-Classification/3-Classifiers-2/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/4-Classification/4-Applied/README.md b/translations/ms/4-Classification/4-Applied/README.md new file mode 100644 index 00000000..f88964c5 --- /dev/null +++ b/translations/ms/4-Classification/4-Applied/README.md @@ -0,0 +1,329 @@ + +# Membina Aplikasi Web Pencadang Masakan + +Dalam pelajaran ini, anda akan membina model klasifikasi menggunakan beberapa teknik yang telah dipelajari dalam pelajaran sebelumnya dan dataset masakan yang lazat yang digunakan sepanjang siri ini. Selain itu, anda akan membina aplikasi web kecil untuk menggunakan model yang disimpan, dengan memanfaatkan runtime web Onnx. + +Salah satu kegunaan praktikal pembelajaran mesin yang paling berguna ialah membina sistem cadangan, dan anda boleh mengambil langkah pertama ke arah itu hari ini! + +[![Mempersembahkan aplikasi web ini](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "Applied ML") + +> 🎥 Klik imej di atas untuk video: Jen Looper membina aplikasi web menggunakan data masakan yang telah diklasifikasikan + +## [Kuiz pra-pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +Dalam pelajaran ini, anda akan belajar: + +- Cara membina model dan menyimpannya sebagai model Onnx +- Cara menggunakan Netron untuk memeriksa model +- Cara menggunakan model anda dalam aplikasi web untuk inferens + +## Bina model anda + +Membina sistem ML yang diterapkan adalah bahagian penting dalam memanfaatkan teknologi ini untuk sistem perniagaan anda. Anda boleh menggunakan model dalam aplikasi web anda (dan dengan itu menggunakannya dalam konteks luar talian jika diperlukan) dengan menggunakan Onnx. + +Dalam [pelajaran sebelumnya](../../3-Web-App/1-Web-App/README.md), anda telah membina model Regresi tentang penampakan UFO, "pickled" model tersebut, dan menggunakannya dalam aplikasi Flask. Walaupun seni bina ini sangat berguna untuk diketahui, ia adalah aplikasi Python full-stack, dan keperluan anda mungkin termasuk penggunaan aplikasi JavaScript. + +Dalam pelajaran ini, anda boleh membina sistem asas berasaskan JavaScript untuk inferens. Namun, pertama sekali, anda perlu melatih model dan menukarkannya untuk digunakan dengan Onnx. + +## Latihan - latih model klasifikasi + +Pertama, latih model klasifikasi menggunakan dataset masakan yang telah dibersihkan yang kita gunakan. + +1. Mulakan dengan mengimport pustaka yang berguna: + + ```python + !pip install skl2onnx + import pandas as pd + ``` + + Anda memerlukan '[skl2onnx](https://onnx.ai/sklearn-onnx/)' untuk membantu menukar model Scikit-learn anda ke format Onnx. + +1. Kemudian, bekerja dengan data anda dengan cara yang sama seperti yang anda lakukan dalam pelajaran sebelumnya, dengan membaca fail CSV menggunakan `read_csv()`: + + ```python + data = pd.read_csv('../data/cleaned_cuisines.csv') + data.head() + ``` + +1. Buang dua lajur pertama yang tidak diperlukan dan simpan data yang tinggal sebagai 'X': + + ```python + X = data.iloc[:,2:] + X.head() + ``` + +1. Simpan label sebagai 'y': + + ```python + y = data[['cuisine']] + y.head() + + ``` + +### Mulakan rutin latihan + +Kami akan menggunakan pustaka 'SVC' yang mempunyai ketepatan yang baik. + +1. Import pustaka yang sesuai dari Scikit-learn: + + ```python + from sklearn.model_selection import train_test_split + from sklearn.svm import SVC + from sklearn.model_selection import cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report + ``` + +1. Pisahkan set latihan dan ujian: + + ```python + X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3) + ``` + +1. Bina model Klasifikasi SVC seperti yang anda lakukan dalam pelajaran sebelumnya: + + ```python + model = SVC(kernel='linear', C=10, probability=True,random_state=0) + model.fit(X_train,y_train.values.ravel()) + ``` + +1. Sekarang, uji model anda dengan memanggil `predict()`: + + ```python + y_pred = model.predict(X_test) + ``` + +1. Cetak laporan klasifikasi untuk memeriksa kualiti model: + + ```python + print(classification_report(y_test,y_pred)) + ``` + + Seperti yang kita lihat sebelum ini, ketepatannya adalah baik: + + ```output + precision recall f1-score support + + chinese 0.72 0.69 0.70 257 + indian 0.91 0.87 0.89 243 + japanese 0.79 0.77 0.78 239 + korean 0.83 0.79 0.81 236 + thai 0.72 0.84 0.78 224 + + accuracy 0.79 1199 + macro avg 0.79 0.79 0.79 1199 + weighted avg 0.79 0.79 0.79 1199 + ``` + +### Tukar model anda ke Onnx + +Pastikan untuk melakukan penukaran dengan nombor Tensor yang betul. Dataset ini mempunyai 380 bahan yang disenaraikan, jadi anda perlu mencatatkan nombor itu dalam `FloatTensorType`: + +1. Tukar menggunakan nombor tensor sebanyak 380. + + ```python + from skl2onnx import convert_sklearn + from skl2onnx.common.data_types import FloatTensorType + + initial_type = [('float_input', FloatTensorType([None, 380]))] + options = {id(model): {'nocl': True, 'zipmap': False}} + ``` + +1. Cipta fail onx dan simpan sebagai **model.onnx**: + + ```python + onx = convert_sklearn(model, initial_types=initial_type, options=options) + with open("./model.onnx", "wb") as f: + f.write(onx.SerializeToString()) + ``` + + > Nota, anda boleh memasukkan [pilihan](https://onnx.ai/sklearn-onnx/parameterized.html) dalam skrip penukaran anda. Dalam kes ini, kami memasukkan 'nocl' sebagai True dan 'zipmap' sebagai False. Oleh kerana ini adalah model klasifikasi, anda mempunyai pilihan untuk membuang ZipMap yang menghasilkan senarai kamus (tidak diperlukan). `nocl` merujuk kepada maklumat kelas yang disertakan dalam model. Kurangkan saiz model anda dengan menetapkan `nocl` kepada 'True'. + +Menjalankan keseluruhan notebook kini akan membina model Onnx dan menyimpannya ke folder ini. + +## Lihat model anda + +Model Onnx tidak begitu kelihatan dalam Visual Studio Code, tetapi terdapat perisian percuma yang sangat baik yang digunakan oleh ramai penyelidik untuk memvisualisasikan model bagi memastikan ia dibina dengan betul. Muat turun [Netron](https://github.com/lutzroeder/Netron) dan buka fail model.onnx anda. Anda boleh melihat model ringkas anda divisualisasikan, dengan 380 input dan pengklasifikasi disenaraikan: + +![Visual Netron](../../../../4-Classification/4-Applied/images/netron.png) + +Netron adalah alat yang berguna untuk melihat model anda. + +Kini anda bersedia untuk menggunakan model yang menarik ini dalam aplikasi web. Mari kita bina aplikasi yang akan berguna apabila anda melihat ke dalam peti sejuk anda dan cuba menentukan kombinasi bahan lebihan yang boleh digunakan untuk memasak masakan tertentu, seperti yang ditentukan oleh model anda. + +## Bina aplikasi web pencadang + +Anda boleh menggunakan model anda secara langsung dalam aplikasi web. Seni bina ini juga membolehkan anda menjalankannya secara tempatan dan bahkan di luar talian jika diperlukan. Mulakan dengan mencipta fail `index.html` dalam folder yang sama di mana anda menyimpan fail `model.onnx` anda. + +1. Dalam fail ini _index.html_, tambahkan markup berikut: + + ```html + + +
                      + Cuisine Matcher +
                      + + ... + + + ``` + +1. Sekarang, bekerja dalam tag `body`, tambahkan sedikit markup untuk menunjukkan senarai kotak semak yang mencerminkan beberapa bahan: + + ```html +

                      Check your refrigerator. What can you create?

                      +
                      +
                      + + +
                      + +
                      + + +
                      + +
                      + + +
                      + +
                      + + +
                      + +
                      + + +
                      + +
                      + + +
                      + +
                      + + +
                      +
                      +
                      + +
                      + ``` + + Perhatikan bahawa setiap kotak semak diberikan nilai. Ini mencerminkan indeks di mana bahan tersebut ditemui mengikut dataset. Sebagai contoh, epal dalam senarai abjad ini, menduduki lajur kelima, jadi nilainya adalah '4' kerana kita mula mengira dari 0. Anda boleh merujuk kepada [lembaran kerja bahan](../../../../4-Classification/data/ingredient_indexes.csv) untuk mengetahui indeks bahan tertentu. + + Meneruskan kerja anda dalam fail index.html, tambahkan blok skrip di mana model dipanggil selepas penutupan akhir ``. + +1. Pertama, import [Onnx Runtime](https://www.onnxruntime.ai/): + + ```html + + ``` + + > Onnx Runtime digunakan untuk membolehkan menjalankan model Onnx anda merentasi pelbagai platform perkakasan, termasuk pengoptimuman dan API untuk digunakan. + +1. Setelah Runtime tersedia, anda boleh memanggilnya: + + ```html + + ``` + +Dalam kod ini, beberapa perkara berlaku: + +1. Anda mencipta array dengan 380 nilai yang mungkin (1 atau 0) untuk ditetapkan dan dihantar ke model untuk inferens, bergantung pada sama ada kotak semak bahan ditandakan. +2. Anda mencipta array kotak semak dan cara untuk menentukan sama ada ia ditandakan dalam fungsi `init` yang dipanggil apabila aplikasi dimulakan. Apabila kotak semak ditandakan, array `ingredients` diubah untuk mencerminkan bahan yang dipilih. +3. Anda mencipta fungsi `testCheckboxes` yang memeriksa sama ada mana-mana kotak semak ditandakan. +4. Anda menggunakan fungsi `startInference` apabila butang ditekan dan, jika mana-mana kotak semak ditandakan, anda memulakan inferens. +5. Rutin inferens termasuk: + 1. Menyediakan muatan asinkron model + 2. Mencipta struktur Tensor untuk dihantar ke model + 3. Mencipta 'feeds' yang mencerminkan input `float_input` yang anda cipta semasa melatih model anda (anda boleh menggunakan Netron untuk mengesahkan nama itu) + 4. Menghantar 'feeds' ini ke model dan menunggu respons + +## Uji aplikasi anda + +Buka sesi terminal dalam Visual Studio Code dalam folder di mana fail index.html anda berada. Pastikan anda mempunyai [http-server](https://www.npmjs.com/package/http-server) dipasang secara global, dan taip `http-server` pada prompt. Satu localhost akan dibuka dan anda boleh melihat aplikasi web anda. Periksa masakan yang disyorkan berdasarkan pelbagai bahan: + +![Aplikasi web bahan](../../../../4-Classification/4-Applied/images/web-app.png) + +Tahniah, anda telah mencipta aplikasi web 'cadangan' dengan beberapa medan. Luangkan masa untuk membina sistem ini! + +## 🚀Cabaran + +Aplikasi web anda sangat minimal, jadi teruskan membangunkannya menggunakan bahan dan indeksnya daripada data [ingredient_indexes](../../../../4-Classification/data/ingredient_indexes.csv). Kombinasi rasa apa yang berfungsi untuk mencipta hidangan kebangsaan tertentu? + +## [Kuiz pasca-pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Kajian & Pembelajaran Kendiri + +Walaupun pelajaran ini hanya menyentuh tentang kegunaan mencipta sistem cadangan untuk bahan makanan, bidang aplikasi ML ini sangat kaya dengan contoh. Baca lebih lanjut tentang bagaimana sistem ini dibina: + +- https://www.sciencedirect.com/topics/computer-science/recommendation-engine +- https://www.technologyreview.com/2014/08/25/171547/the-ultimate-challenge-for-recommendation-engines/ +- https://www.technologyreview.com/2015/03/23/168831/everything-is-a-recommendation/ + +## Tugasan + +[Bina pencadang baru](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/4-Classification/4-Applied/assignment.md b/translations/ms/4-Classification/4-Applied/assignment.md new file mode 100644 index 00000000..2bbea28a --- /dev/null +++ b/translations/ms/4-Classification/4-Applied/assignment.md @@ -0,0 +1,25 @@ + +# Bina sistem cadangan + +## Arahan + +Berdasarkan latihan anda dalam pelajaran ini, anda kini tahu cara membina aplikasi web berasaskan JavaScript menggunakan Onnx Runtime dan model Onnx yang telah ditukar. Cuba bina sistem cadangan baharu menggunakan data daripada pelajaran ini atau sumber lain (sila beri kredit). Anda mungkin mencipta sistem cadangan haiwan peliharaan berdasarkan pelbagai atribut personaliti, atau sistem cadangan genre muzik berdasarkan mood seseorang. Jadilah kreatif! + +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | ---------------------------------------------------------------------- | ------------------------------------- | --------------------------------- | +| | Aplikasi web dan notebook disediakan, kedua-duanya didokumentasikan dengan baik dan berfungsi | Salah satu daripadanya hilang atau mempunyai kekurangan | Kedua-duanya sama ada hilang atau mempunyai kekurangan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/4-Classification/README.md b/translations/ms/4-Classification/README.md new file mode 100644 index 00000000..33c8d670 --- /dev/null +++ b/translations/ms/4-Classification/README.md @@ -0,0 +1,41 @@ + +# Memulakan dengan klasifikasi + +## Topik serantau: Masakan Asia dan India yang lazat 🍜 + +Di Asia dan India, tradisi makanan sangat pelbagai dan amat lazat! Mari kita lihat data tentang masakan serantau untuk memahami bahan-bahan mereka. + +![Penjual makanan Thai](../../../4-Classification/images/thai-food.jpg) +> Foto oleh
                      Lisheng Chang di Unsplash + +## Apa yang akan anda pelajari + +Dalam bahagian ini, anda akan membina pengetahuan daripada kajian terdahulu tentang Regresi dan mempelajari tentang pengklasifikasi lain yang boleh anda gunakan untuk memahami data dengan lebih baik. + +> Terdapat alat low-code yang berguna untuk membantu anda mempelajari cara bekerja dengan model klasifikasi. Cuba [Azure ML untuk tugasan ini](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +## Pelajaran + +1. [Pengenalan kepada klasifikasi](1-Introduction/README.md) +2. [Lebih banyak pengklasifikasi](2-Classifiers-1/README.md) +3. [Pengklasifikasi lain lagi](3-Classifiers-2/README.md) +4. [ML terapan: bina aplikasi web](4-Applied/README.md) + +## Kredit + +"Memulakan dengan klasifikasi" ditulis dengan ♥️ oleh [Cassie Breviu](https://www.twitter.com/cassiebreviu) dan [Jen Looper](https://www.twitter.com/jenlooper) + +Dataset masakan yang lazat diperoleh daripada [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines). + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat penting, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/5-Clustering/1-Visualize/README.md b/translations/ms/5-Clustering/1-Visualize/README.md new file mode 100644 index 00000000..4a500d57 --- /dev/null +++ b/translations/ms/5-Clustering/1-Visualize/README.md @@ -0,0 +1,347 @@ + +# Pengenalan kepada pengelompokan + +Pengelompokan adalah sejenis [Pembelajaran Tanpa Pengawasan](https://wikipedia.org/wiki/Unsupervised_learning) yang mengandaikan bahawa dataset tidak berlabel atau inputnya tidak dipadankan dengan output yang telah ditentukan. Ia menggunakan pelbagai algoritma untuk menyusun data yang tidak berlabel dan menyediakan kumpulan berdasarkan corak yang dikenalpasti dalam data. + +[![No One Like You oleh PSquare](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](https://youtu.be/ty2advRiWJM "No One Like You oleh PSquare") + +> 🎥 Klik imej di atas untuk video. Sambil anda belajar pembelajaran mesin dengan pengelompokan, nikmati beberapa lagu Dance Hall Nigeria - ini adalah lagu yang sangat popular dari tahun 2014 oleh PSquare. + +## [Kuiz sebelum kuliah](https://ff-quizzes.netlify.app/en/ml/) + +### Pengenalan + +[Pengelompokan](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) sangat berguna untuk penerokaan data. Mari kita lihat jika ia boleh membantu mengenal pasti trend dan corak dalam cara penonton Nigeria menikmati muzik. + +✅ Luangkan masa untuk memikirkan kegunaan pengelompokan. Dalam kehidupan sebenar, pengelompokan berlaku apabila anda mempunyai timbunan pakaian dan perlu menyusun pakaian ahli keluarga anda 🧦👕👖🩲. Dalam sains data, pengelompokan berlaku apabila cuba menganalisis pilihan pengguna, atau menentukan ciri-ciri dataset yang tidak berlabel. Pengelompokan, dalam satu cara, membantu memahami kekacauan, seperti laci stokin. + +[![Pengenalan kepada ML](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Pengenalan kepada Pengelompokan") + +> 🎥 Klik imej di atas untuk video: John Guttag dari MIT memperkenalkan pengelompokan + +Dalam persekitaran profesional, pengelompokan boleh digunakan untuk menentukan perkara seperti segmentasi pasaran, menentukan kumpulan umur yang membeli barangan tertentu, sebagai contoh. Kegunaan lain adalah pengesanan anomali, mungkin untuk mengesan penipuan daripada dataset transaksi kad kredit. Atau anda mungkin menggunakan pengelompokan untuk mengenal pasti tumor dalam sekumpulan imbasan perubatan. + +✅ Luangkan masa untuk memikirkan bagaimana anda mungkin pernah menemui pengelompokan 'di alam nyata', dalam perbankan, e-dagang, atau perniagaan. + +> 🎓 Menariknya, analisis pengelompokan berasal dari bidang Antropologi dan Psikologi pada tahun 1930-an. Bolehkah anda bayangkan bagaimana ia mungkin digunakan? + +Sebagai alternatif, anda boleh menggunakannya untuk mengelompokkan hasil carian - seperti pautan membeli-belah, imej, atau ulasan, sebagai contoh. Pengelompokan berguna apabila anda mempunyai dataset yang besar yang ingin anda kurangkan dan pada dataset tersebut anda ingin melakukan analisis yang lebih terperinci, jadi teknik ini boleh digunakan untuk mempelajari data sebelum model lain dibina. + +✅ Setelah data anda diatur dalam kelompok, anda memberikan Id kelompok, dan teknik ini boleh berguna apabila ingin menjaga privasi dataset; anda boleh merujuk kepada titik data dengan Id kelompoknya, dan bukannya data yang lebih mendedahkan. Bolehkah anda memikirkan sebab lain mengapa anda merujuk kepada Id kelompok dan bukannya elemen lain dalam kelompok untuk mengenal pasti data? + +Perdalam pemahaman anda tentang teknik pengelompokan dalam [modul pembelajaran ini](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott) + +## Memulakan pengelompokan + +[Scikit-learn menawarkan pelbagai kaedah](https://scikit-learn.org/stable/modules/clustering.html) untuk melakukan pengelompokan. Jenis yang anda pilih akan bergantung pada kes penggunaan anda. Menurut dokumentasi, setiap kaedah mempunyai pelbagai manfaat. Berikut adalah jadual ringkas kaedah yang disokong oleh Scikit-learn dan kes penggunaan yang sesuai: + +| Nama kaedah | Kes penggunaan | +| :--------------------------- | :-------------------------------------------------------------------- | +| K-Means | tujuan umum, induktif | +| Affinity propagation | banyak, kelompok tidak sekata, induktif | +| Mean-shift | banyak, kelompok tidak sekata, induktif | +| Spectral clustering | sedikit, kelompok sekata, transduktif | +| Ward hierarchical clustering | banyak, kelompok terhad, transduktif | +| Agglomerative clustering | banyak, terhad, jarak bukan Euclidean, transduktif | +| DBSCAN | geometri tidak rata, kelompok tidak sekata, transduktif | +| OPTICS | geometri tidak rata, kelompok tidak sekata dengan ketumpatan berubah, transduktif | +| Gaussian mixtures | geometri rata, induktif | +| BIRCH | dataset besar dengan outlier, induktif | + +> 🎓 Cara kita mencipta kelompok banyak berkaitan dengan cara kita mengumpulkan titik data ke dalam kumpulan. Mari kita jelaskan beberapa istilah: +> +> 🎓 ['Transduktif' vs. 'Induktif'](https://wikipedia.org/wiki/Transduction_(machine_learning)) +> +> Inferens transduktif diperoleh daripada kes latihan yang diperhatikan yang memetakan kepada kes ujian tertentu. Inferens induktif diperoleh daripada kes latihan yang memetakan kepada peraturan umum yang hanya kemudian digunakan pada kes ujian. +> +> Contoh: Bayangkan anda mempunyai dataset yang hanya sebahagiannya berlabel. Beberapa perkara adalah 'rekod', beberapa 'cd', dan beberapa kosong. Tugas anda adalah memberikan label untuk yang kosong. Jika anda memilih pendekatan induktif, anda akan melatih model mencari 'rekod' dan 'cd', dan menerapkan label tersebut pada data yang tidak berlabel. Pendekatan ini akan menghadapi kesukaran mengklasifikasikan perkara yang sebenarnya 'kaset'. Pendekatan transduktif, sebaliknya, menangani data yang tidak diketahui ini dengan lebih berkesan kerana ia berfungsi untuk mengelompokkan item serupa bersama-sama dan kemudian menerapkan label pada kumpulan. Dalam kes ini, kelompok mungkin mencerminkan 'benda muzik bulat' dan 'benda muzik segi empat'. +> +> 🎓 ['Geometri tidak rata' vs. 'rata'](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering) +> +> Berasal daripada istilah matematik, geometri tidak rata vs. rata merujuk kepada ukuran jarak antara titik dengan cara 'rata' ([Euclidean](https://wikipedia.org/wiki/Euclidean_geometry)) atau 'tidak rata' (bukan Euclidean). +> +>'Rata' dalam konteks ini merujuk kepada geometri Euclidean (bahagian daripadanya diajar sebagai geometri 'dataran'), dan tidak rata merujuk kepada geometri bukan Euclidean. Apa kaitan geometri dengan pembelajaran mesin? Nah, sebagai dua bidang yang berakar dalam matematik, mesti ada cara umum untuk mengukur jarak antara titik dalam kelompok, dan itu boleh dilakukan dengan cara 'rata' atau 'tidak rata', bergantung pada sifat data. [Jarak Euclidean](https://wikipedia.org/wiki/Euclidean_distance) diukur sebagai panjang segmen garis antara dua titik. [Jarak bukan Euclidean](https://wikipedia.org/wiki/Non-Euclidean_geometry) diukur sepanjang lengkung. Jika data anda, yang divisualisasikan, nampaknya tidak wujud pada dataran, anda mungkin perlu menggunakan algoritma khusus untuk menanganinya. +> +![Infografik Geometri Rata vs Tidak Rata](../../../../5-Clustering/1-Visualize/images/flat-nonflat.png) +> Infografik oleh [Dasani Madipalli](https://twitter.com/dasani_decoded) +> +> 🎓 ['Jarak'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf) +> +> Kelompok ditentukan oleh matriks jaraknya, contohnya jarak antara titik. Jarak ini boleh diukur dengan beberapa cara. Kelompok Euclidean ditentukan oleh purata nilai titik, dan mengandungi 'centroid' atau titik tengah. Jarak diukur dengan jarak ke centroid tersebut. Jarak bukan Euclidean merujuk kepada 'clustroid', titik yang paling dekat dengan titik lain. Clustroid pula boleh ditentukan dengan pelbagai cara. +> +> 🎓 ['Terhad'](https://wikipedia.org/wiki/Constrained_clustering) +> +> [Pengelompokan Terhad](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) memperkenalkan pembelajaran 'semi-supervised' ke dalam kaedah tanpa pengawasan ini. Hubungan antara titik ditandai sebagai 'tidak boleh dihubungkan' atau 'mesti dihubungkan' jadi beberapa peraturan dipaksa pada dataset. +> +>Contoh: Jika algoritma dilepaskan pada sekumpulan data yang tidak berlabel atau separa berlabel, kelompok yang dihasilkannya mungkin berkualiti rendah. Dalam contoh di atas, kelompok mungkin mengelompokkan 'benda muzik bulat' dan 'benda muzik segi empat' dan 'benda segi tiga' dan 'kuih'. Jika diberikan beberapa kekangan, atau peraturan untuk diikuti ("item mesti diperbuat daripada plastik", "item perlu dapat menghasilkan muzik") ini boleh membantu 'mengekang' algoritma untuk membuat pilihan yang lebih baik. +> +> 🎓 'Ketumpatan' +> +> Data yang 'berisik' dianggap 'padat'. Jarak antara titik dalam setiap kelompoknya mungkin terbukti, pada pemeriksaan, lebih atau kurang padat, atau 'sesak' dan oleh itu data ini perlu dianalisis dengan kaedah pengelompokan yang sesuai. [Artikel ini](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) menunjukkan perbezaan antara menggunakan pengelompokan K-Means vs. algoritma HDBSCAN untuk meneroka dataset berisik dengan ketumpatan kelompok yang tidak sekata. + +## Algoritma pengelompokan + +Terdapat lebih daripada 100 algoritma pengelompokan, dan penggunaannya bergantung pada sifat data yang ada. Mari kita bincangkan beberapa yang utama: + +- **Pengelompokan hierarki**. Jika objek diklasifikasikan berdasarkan jaraknya dengan objek berdekatan, dan bukannya dengan objek yang lebih jauh, kelompok dibentuk berdasarkan jarak anggotanya ke dan dari objek lain. Pengelompokan agglomeratif Scikit-learn adalah hierarki. + + ![Infografik Pengelompokan Hierarki](../../../../5-Clustering/1-Visualize/images/hierarchical.png) + > Infografik oleh [Dasani Madipalli](https://twitter.com/dasani_decoded) + +- **Pengelompokan centroid**. Algoritma popular ini memerlukan pilihan 'k', atau bilangan kelompok untuk dibentuk, selepas itu algoritma menentukan titik tengah kelompok dan mengumpulkan data di sekitar titik tersebut. [Pengelompokan K-means](https://wikipedia.org/wiki/K-means_clustering) adalah versi pengelompokan centroid yang popular. Pusat ditentukan oleh purata terdekat, maka namanya. Jarak kuadrat dari kelompok diminimumkan. + + ![Infografik Pengelompokan Centroid](../../../../5-Clustering/1-Visualize/images/centroid.png) + > Infografik oleh [Dasani Madipalli](https://twitter.com/dasani_decoded) + +- **Pengelompokan berdasarkan pengedaran**. Berdasarkan pemodelan statistik, pengelompokan berdasarkan pengedaran berpusat pada menentukan kebarangkalian bahawa titik data tergolong dalam kelompok, dan menetapkannya dengan sewajarnya. Kaedah campuran Gaussian tergolong dalam jenis ini. + +- **Pengelompokan berdasarkan ketumpatan**. Titik data ditetapkan kepada kelompok berdasarkan ketumpatannya, atau pengelompokan di sekeliling satu sama lain. Titik data yang jauh dari kumpulan dianggap sebagai outlier atau bunyi. DBSCAN, Mean-shift dan OPTICS tergolong dalam jenis pengelompokan ini. + +- **Pengelompokan berdasarkan grid**. Untuk dataset multi-dimensi, grid dibuat dan data dibahagikan di antara sel grid, dengan itu mencipta kelompok. + +## Latihan - kelompokkan data anda + +Pengelompokan sebagai teknik sangat dibantu oleh visualisasi yang baik, jadi mari kita mulakan dengan memvisualisasikan data muzik kita. Latihan ini akan membantu kita memutuskan kaedah pengelompokan mana yang paling berkesan digunakan untuk sifat data ini. + +1. Buka fail [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) dalam folder ini. + +1. Import pakej `Seaborn` untuk visualisasi data yang baik. + + ```python + !pip install seaborn + ``` + +1. Tambahkan data lagu dari [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv). Muatkan dataframe dengan beberapa data tentang lagu-lagu tersebut. Bersiaplah untuk meneroka data ini dengan mengimport perpustakaan dan memaparkan data: + + ```python + import matplotlib.pyplot as plt + import pandas as pd + + df = pd.read_csv("../data/nigerian-songs.csv") + df.head() + ``` + + Periksa beberapa baris pertama data: + + | | nama | album | artis | genre_teratas_artis | tarikh_keluar | panjang | populariti | keboleh_menari | keakustikan | tenaga | instrumentalness | keliveness | kekuatan | keboleh_bersuara | tempo | tanda_masa | + | --- | ------------------------ | ---------------------------- | ------------------- | ------------------- | ------------- | ------- | ---------- | -------------- | ----------- | ------ | ---------------- | ---------- | -------- | ---------------- | ------- | -------------- | + | 0 | Sparky | Mandy & The Jungle | Cruel Santino | alternative r&b | 2019 | 144000 | 48 | 0.666 | 0.851 | 0.42 | 0.534 | 0.11 | -6.699 | 0.0829 | 133.015 | 5 | + | 1 | shuga rush | EVERYTHING YOU HEARD IS TRUE | Odunsi (The Engine) | afropop | 2020 | 89488 | 30 | 0.71 | 0.0822 | 0.683 | 0.000169 | 0.101 | -5.64 | 0.36 | 129.993 | 3 | +| 2 | LITT! | LITT! | AYLØ | indie r&b | 2018 | 207758 | 40 | 0.836 | 0.272 | 0.564 | 0.000537 | 0.11 | -7.127 | 0.0424 | 130.005 | 4 | +| 3 | Confident / Feeling Cool | Enjoy Your Life | Lady Donli | nigerian pop | 2019 | 175135 | 14 | 0.894 | 0.798 | 0.611 | 0.000187 | 0.0964 | -4.961 | 0.113 | 111.087 | 4 | +| 4 | wanted you | rare. | Odunsi (The Engine) | afropop | 2018 | 152049 | 25 | 0.702 | 0.116 | 0.833 | 0.91 | 0.348 | -6.044 | 0.0447 | 105.115 | 4 | + +1. Dapatkan maklumat tentang dataframe dengan memanggil `info()`: + + ```python + df.info() + ``` + + Outputnya kelihatan seperti ini: + + ```output + + RangeIndex: 530 entries, 0 to 529 + Data columns (total 16 columns): + # Column Non-Null Count Dtype + --- ------ -------------- ----- + 0 name 530 non-null object + 1 album 530 non-null object + 2 artist 530 non-null object + 3 artist_top_genre 530 non-null object + 4 release_date 530 non-null int64 + 5 length 530 non-null int64 + 6 popularity 530 non-null int64 + 7 danceability 530 non-null float64 + 8 acousticness 530 non-null float64 + 9 energy 530 non-null float64 + 10 instrumentalness 530 non-null float64 + 11 liveness 530 non-null float64 + 12 loudness 530 non-null float64 + 13 speechiness 530 non-null float64 + 14 tempo 530 non-null float64 + 15 time_signature 530 non-null int64 + dtypes: float64(8), int64(4), object(4) + memory usage: 66.4+ KB + ``` + +1. Periksa semula nilai null dengan memanggil `isnull()` dan pastikan jumlahnya adalah 0: + + ```python + df.isnull().sum() + ``` + + Nampak baik: + + ```output + name 0 + album 0 + artist 0 + artist_top_genre 0 + release_date 0 + length 0 + popularity 0 + danceability 0 + acousticness 0 + energy 0 + instrumentalness 0 + liveness 0 + loudness 0 + speechiness 0 + tempo 0 + time_signature 0 + dtype: int64 + ``` + +1. Huraikan data: + + ```python + df.describe() + ``` + + | | release_date | length | popularity | danceability | acousticness | energy | instrumentalness | liveness | loudness | speechiness | tempo | time_signature | + | ----- | ------------ | ----------- | ---------- | ------------ | ------------ | -------- | ---------------- | -------- | --------- | ----------- | ---------- | -------------- | + | count | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | + | mean | 2015.390566 | 222298.1698 | 17.507547 | 0.741619 | 0.265412 | 0.760623 | 0.016305 | 0.147308 | -4.953011 | 0.130748 | 116.487864 | 3.986792 | + | std | 3.131688 | 39696.82226 | 18.992212 | 0.117522 | 0.208342 | 0.148533 | 0.090321 | 0.123588 | 2.464186 | 0.092939 | 23.518601 | 0.333701 | + | min | 1998 | 89488 | 0 | 0.255 | 0.000665 | 0.111 | 0 | 0.0283 | -19.362 | 0.0278 | 61.695 | 3 | + | 25% | 2014 | 199305 | 0 | 0.681 | 0.089525 | 0.669 | 0 | 0.07565 | -6.29875 | 0.0591 | 102.96125 | 4 | + | 50% | 2016 | 218509 | 13 | 0.761 | 0.2205 | 0.7845 | 0.000004 | 0.1035 | -4.5585 | 0.09795 | 112.7145 | 4 | + | 75% | 2017 | 242098.5 | 31 | 0.8295 | 0.403 | 0.87575 | 0.000234 | 0.164 | -3.331 | 0.177 | 125.03925 | 4 | + | max | 2020 | 511738 | 73 | 0.966 | 0.954 | 0.995 | 0.91 | 0.811 | 0.582 | 0.514 | 206.007 | 5 | + +> 🤔 Jika kita bekerja dengan pengelompokan, kaedah tanpa pengawasan yang tidak memerlukan data berlabel, mengapa kita menunjukkan data ini dengan label? Dalam fasa penerokaan data, ia berguna, tetapi ia tidak diperlukan untuk algoritma pengelompokan berfungsi. Anda juga boleh membuang tajuk lajur dan merujuk data mengikut nombor lajur. + +Lihat nilai umum data. Perhatikan bahawa populariti boleh menjadi '0', yang menunjukkan lagu-lagu yang tidak mempunyai ranking. Mari kita buang nilai-nilai tersebut sebentar lagi. + +1. Gunakan barplot untuk mengetahui genre yang paling popular: + + ```python + import seaborn as sns + + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top[:5].index,y=top[:5].values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + + ![most popular](../../../../5-Clustering/1-Visualize/images/popular.png) + +✅ Jika anda ingin melihat lebih banyak nilai teratas, ubah top `[:5]` kepada nilai yang lebih besar, atau buang untuk melihat semuanya. + +Perhatikan, apabila genre teratas digambarkan sebagai 'Missing', itu bermaksud Spotify tidak mengklasifikasikannya, jadi mari kita buang data tersebut. + +1. Buang data yang hilang dengan menapisnya keluar + + ```python + df = df[df['artist_top_genre'] != 'Missing'] + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top.index,y=top.values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + + Sekarang periksa semula genre: + + ![most popular](../../../../5-Clustering/1-Visualize/images/all-genres.png) + +1. Tiga genre teratas jelas mendominasi dataset ini. Mari kita fokus pada `afro dancehall`, `afropop`, dan `nigerian pop`, serta tapis dataset untuk membuang apa-apa dengan nilai populariti 0 (bermaksud ia tidak diklasifikasikan dengan populariti dalam dataset dan boleh dianggap sebagai gangguan untuk tujuan kita): + + ```python + df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')] + df = df[(df['popularity'] > 0)] + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top.index,y=top.values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + +1. Lakukan ujian pantas untuk melihat jika data berkorelasi dengan cara yang sangat kuat: + + ```python + corrmat = df.corr(numeric_only=True) + f, ax = plt.subplots(figsize=(12, 9)) + sns.heatmap(corrmat, vmax=.8, square=True) + ``` + + ![correlations](../../../../5-Clustering/1-Visualize/images/correlation.png) + + Satu-satunya korelasi kuat adalah antara `energy` dan `loudness`, yang tidak terlalu mengejutkan, memandangkan muzik yang kuat biasanya cukup bertenaga. Selain itu, korelasi agak lemah. Ia akan menarik untuk melihat apa yang algoritma pengelompokan dapat buat dengan data ini. + + > 🎓 Perhatikan bahawa korelasi tidak bermaksud sebab-akibat! Kita mempunyai bukti korelasi tetapi tiada bukti sebab-akibat. [Laman web yang menghiburkan](https://tylervigen.com/spurious-correlations) mempunyai beberapa visual yang menekankan perkara ini. + +Adakah terdapat penumpuan dalam dataset ini sekitar populariti lagu dan kebolehmenariannya? Grid Facet menunjukkan terdapat lingkaran sepusat yang sejajar, tanpa mengira genre. Mungkinkah citarasa Nigeria berkumpul pada tahap kebolehmenarian tertentu untuk genre ini? + +✅ Cuba titik data yang berbeza (energy, loudness, speechiness) dan lebih banyak atau genre muzik yang berbeza. Apa yang boleh anda temui? Lihat jadual `df.describe()` untuk melihat penyebaran umum titik data. + +### Latihan - pengedaran data + +Adakah tiga genre ini berbeza secara signifikan dalam persepsi kebolehmenarian mereka, berdasarkan populariti? + +1. Periksa pengedaran data tiga genre teratas kita untuk populariti dan kebolehmenarian di sepanjang paksi x dan y yang diberikan. + + ```python + sns.set_theme(style="ticks") + + g = sns.jointplot( + data=df, + x="popularity", y="danceability", hue="artist_top_genre", + kind="kde", + ) + ``` + + Anda boleh menemui lingkaran sepusat di sekitar titik penumpuan umum, menunjukkan pengedaran titik. + + > 🎓 Perhatikan bahawa contoh ini menggunakan graf KDE (Kernel Density Estimate) yang mewakili data menggunakan lengkung ketumpatan kebarangkalian berterusan. Ini membolehkan kita mentafsir data apabila bekerja dengan pelbagai pengedaran. + + Secara umum, tiga genre ini sejajar secara longgar dari segi populariti dan kebolehmenarian. Menentukan kelompok dalam data yang sejajar secara longgar ini akan menjadi cabaran: + + ![distribution](../../../../5-Clustering/1-Visualize/images/distribution.png) + +1. Buat plot taburan: + + ```python + sns.FacetGrid(df, hue="artist_top_genre", height=5) \ + .map(plt.scatter, "popularity", "danceability") \ + .add_legend() + ``` + + Plot taburan paksi yang sama menunjukkan corak penumpuan yang serupa + + ![Facetgrid](../../../../5-Clustering/1-Visualize/images/facetgrid.png) + +Secara umum, untuk pengelompokan, anda boleh menggunakan plot taburan untuk menunjukkan kelompok data, jadi menguasai jenis visualisasi ini sangat berguna. Dalam pelajaran seterusnya, kita akan mengambil data yang telah ditapis ini dan menggunakan pengelompokan k-means untuk menemui kelompok dalam data ini yang kelihatan bertindih dengan cara yang menarik. + +--- + +## 🚀Cabaran + +Sebagai persediaan untuk pelajaran seterusnya, buat carta tentang pelbagai algoritma pengelompokan yang mungkin anda temui dan gunakan dalam persekitaran pengeluaran. Masalah jenis apa yang cuba diselesaikan oleh pengelompokan? + +## [Kuiz selepas kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Kajian & Pembelajaran Kendiri + +Sebelum anda menggunakan algoritma pengelompokan, seperti yang telah kita pelajari, adalah idea yang baik untuk memahami sifat dataset anda. Baca lebih lanjut tentang topik ini [di sini](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) + +[Artikel yang berguna ini](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) menerangkan cara pelbagai algoritma pengelompokan berfungsi, berdasarkan bentuk data yang berbeza. + +## Tugasan + +[Selidik visualisasi lain untuk pengelompokan](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/5-Clustering/1-Visualize/assignment.md b/translations/ms/5-Clustering/1-Visualize/assignment.md new file mode 100644 index 00000000..090b05aa --- /dev/null +++ b/translations/ms/5-Clustering/1-Visualize/assignment.md @@ -0,0 +1,25 @@ + +# Kajian Visualisasi Lain untuk Pengelompokan + +## Arahan + +Dalam pelajaran ini, anda telah bekerja dengan beberapa teknik visualisasi untuk memahami cara memplot data anda sebagai persediaan untuk pengelompokkannya. Scatterplot, khususnya, sangat berguna untuk mencari kumpulan objek. Kajilah pelbagai cara dan pustaka yang berbeza untuk mencipta scatterplot dan dokumentasikan kerja anda dalam sebuah buku nota. Anda boleh menggunakan data daripada pelajaran ini, pelajaran lain, atau data yang anda peroleh sendiri (pastikan anda memberikan kredit kepada sumbernya, bagaimanapun, dalam buku nota anda). Plotkan beberapa data menggunakan scatterplot dan terangkan apa yang anda temui. + +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | -------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ----------------------------------- | +| | Buku nota disediakan dengan lima scatterplot yang didokumentasikan dengan baik | Buku nota disediakan dengan kurang daripada lima scatterplot dan kurang didokumentasikan | Buku nota yang tidak lengkap disediakan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/5-Clustering/1-Visualize/solution/Julia/README.md b/translations/ms/5-Clustering/1-Visualize/solution/Julia/README.md new file mode 100644 index 00000000..4c7551bb --- /dev/null +++ b/translations/ms/5-Clustering/1-Visualize/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/5-Clustering/2-K-Means/README.md b/translations/ms/5-Clustering/2-K-Means/README.md new file mode 100644 index 00000000..03a4d11b --- /dev/null +++ b/translations/ms/5-Clustering/2-K-Means/README.md @@ -0,0 +1,261 @@ + +# Pengelompokan K-Means + +## [Kuiz Pra-Kuliah](https://ff-quizzes.netlify.app/en/ml/) + +Dalam pelajaran ini, anda akan belajar cara mencipta kelompok menggunakan Scikit-learn dan dataset muzik Nigeria yang telah anda import sebelum ini. Kita akan membincangkan asas K-Means untuk Pengelompokan. Ingatlah bahawa, seperti yang anda pelajari dalam pelajaran sebelumnya, terdapat banyak cara untuk bekerja dengan kelompok dan kaedah yang anda gunakan bergantung pada data anda. Kita akan mencuba K-Means kerana ia adalah teknik pengelompokan yang paling biasa. Mari kita mulakan! + +Istilah yang akan anda pelajari: + +- Skor Silhouette +- Kaedah Elbow +- Inertia +- Varians + +## Pengenalan + +[Pengelompokan K-Means](https://wikipedia.org/wiki/K-means_clustering) adalah kaedah yang berasal dari bidang pemprosesan isyarat. Ia digunakan untuk membahagikan dan mempartisi kumpulan data kepada 'k' kelompok menggunakan siri pemerhatian. Setiap pemerhatian berfungsi untuk mengelompokkan titik data yang diberikan kepada 'mean' terdekatnya, atau titik pusat kelompok. + +Kelompok ini boleh divisualisasikan sebagai [diagram Voronoi](https://wikipedia.org/wiki/Voronoi_diagram), yang merangkumi satu titik (atau 'benih') dan wilayah yang berkaitan dengannya. + +![diagram voronoi](../../../../5-Clustering/2-K-Means/images/voronoi.png) + +> infografik oleh [Jen Looper](https://twitter.com/jenlooper) + +Proses pengelompokan K-Means [dijalankan dalam tiga langkah](https://scikit-learn.org/stable/modules/clustering.html#k-means): + +1. Algoritma memilih k-nombor titik pusat dengan mengambil sampel daripada dataset. Selepas itu, ia berulang: + 1. Ia menetapkan setiap sampel kepada centroid terdekat. + 2. Ia mencipta centroid baru dengan mengambil nilai purata semua sampel yang ditetapkan kepada centroid sebelumnya. + 3. Kemudian, ia mengira perbezaan antara centroid baru dan lama dan mengulangi sehingga centroid stabil. + +Satu kelemahan menggunakan K-Means adalah anda perlu menetapkan 'k', iaitu bilangan centroid. Nasib baik, 'kaedah elbow' membantu menganggarkan nilai permulaan yang baik untuk 'k'. Anda akan mencubanya sebentar lagi. + +## Prasyarat + +Anda akan bekerja dalam fail [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/notebook.ipynb) pelajaran ini yang merangkumi import data dan pembersihan awal yang anda lakukan dalam pelajaran sebelumnya. + +## Latihan - persediaan + +Mulakan dengan melihat semula data lagu. + +1. Cipta boxplot, panggil `boxplot()` untuk setiap lajur: + + ```python + plt.figure(figsize=(20,20), dpi=200) + + plt.subplot(4,3,1) + sns.boxplot(x = 'popularity', data = df) + + plt.subplot(4,3,2) + sns.boxplot(x = 'acousticness', data = df) + + plt.subplot(4,3,3) + sns.boxplot(x = 'energy', data = df) + + plt.subplot(4,3,4) + sns.boxplot(x = 'instrumentalness', data = df) + + plt.subplot(4,3,5) + sns.boxplot(x = 'liveness', data = df) + + plt.subplot(4,3,6) + sns.boxplot(x = 'loudness', data = df) + + plt.subplot(4,3,7) + sns.boxplot(x = 'speechiness', data = df) + + plt.subplot(4,3,8) + sns.boxplot(x = 'tempo', data = df) + + plt.subplot(4,3,9) + sns.boxplot(x = 'time_signature', data = df) + + plt.subplot(4,3,10) + sns.boxplot(x = 'danceability', data = df) + + plt.subplot(4,3,11) + sns.boxplot(x = 'length', data = df) + + plt.subplot(4,3,12) + sns.boxplot(x = 'release_date', data = df) + ``` + + Data ini agak bising: dengan memerhatikan setiap lajur sebagai boxplot, anda boleh melihat nilai luar. + + ![nilai luar](../../../../5-Clustering/2-K-Means/images/boxplots.png) + +Anda boleh melalui dataset dan membuang nilai luar ini, tetapi itu akan menjadikan data agak minimum. + +1. Buat masa ini, pilih lajur mana yang akan anda gunakan untuk latihan pengelompokan anda. Pilih yang mempunyai julat serupa dan kodkan lajur `artist_top_genre` sebagai data berangka: + + ```python + from sklearn.preprocessing import LabelEncoder + le = LabelEncoder() + + X = df.loc[:, ('artist_top_genre','popularity','danceability','acousticness','loudness','energy')] + + y = df['artist_top_genre'] + + X['artist_top_genre'] = le.fit_transform(X['artist_top_genre']) + + y = le.transform(y) + ``` + +1. Sekarang anda perlu memilih berapa banyak kelompok untuk disasarkan. Anda tahu terdapat 3 genre lagu yang kita ambil daripada dataset, jadi mari cuba 3: + + ```python + from sklearn.cluster import KMeans + + nclusters = 3 + seed = 0 + + km = KMeans(n_clusters=nclusters, random_state=seed) + km.fit(X) + + # Predict the cluster for each data point + + y_cluster_kmeans = km.predict(X) + y_cluster_kmeans + ``` + +Anda melihat array dicetak dengan kelompok yang diramalkan (0, 1, atau 2) untuk setiap baris dalam dataframe. + +1. Gunakan array ini untuk mengira 'skor silhouette': + + ```python + from sklearn import metrics + score = metrics.silhouette_score(X, y_cluster_kmeans) + score + ``` + +## Skor Silhouette + +Cari skor silhouette yang lebih dekat dengan 1. Skor ini berbeza dari -1 hingga 1, dan jika skor adalah 1, kelompok adalah padat dan terpisah dengan baik daripada kelompok lain. Nilai dekat 0 mewakili kelompok yang bertindih dengan sampel yang sangat dekat dengan sempadan keputusan kelompok jiran. [(Sumber)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam) + +Skor kita adalah **.53**, jadi berada di tengah-tengah. Ini menunjukkan bahawa data kita tidak begitu sesuai untuk jenis pengelompokan ini, tetapi mari kita teruskan. + +### Latihan - bina model + +1. Import `KMeans` dan mulakan proses pengelompokan. + + ```python + from sklearn.cluster import KMeans + wcss = [] + + for i in range(1, 11): + kmeans = KMeans(n_clusters = i, init = 'k-means++', random_state = 42) + kmeans.fit(X) + wcss.append(kmeans.inertia_) + + ``` + + Terdapat beberapa bahagian di sini yang memerlukan penjelasan. + + > 🎓 range: Ini adalah iterasi proses pengelompokan + + > 🎓 random_state: "Menentukan penjanaan nombor rawak untuk inisialisasi centroid." [Sumber](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans) + + > 🎓 WCSS: "jumlah kuadrat dalam kelompok" mengukur jarak purata kuadrat semua titik dalam kelompok ke centroid kelompok. [Sumber](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce). + + > 🎓 Inertia: Algoritma K-Means cuba memilih centroid untuk meminimumkan 'inertia', "ukuran sejauh mana kelompok adalah koheren secara dalaman." [Sumber](https://scikit-learn.org/stable/modules/clustering.html). Nilai ditambahkan kepada pembolehubah wcss pada setiap iterasi. + + > 🎓 k-means++: Dalam [Scikit-learn](https://scikit-learn.org/stable/modules/clustering.html#k-means) anda boleh menggunakan pengoptimuman 'k-means++', yang "menginisialisasi centroid untuk menjadi (secara umum) jauh antara satu sama lain, menghasilkan keputusan yang mungkin lebih baik daripada inisialisasi rawak. + +### Kaedah Elbow + +Sebelumnya, anda mengandaikan bahawa, kerana anda telah menyasarkan 3 genre lagu, anda harus memilih 3 kelompok. Tetapi adakah itu benar? + +1. Gunakan 'kaedah elbow' untuk memastikan. + + ```python + plt.figure(figsize=(10,5)) + sns.lineplot(x=range(1, 11), y=wcss, marker='o', color='red') + plt.title('Elbow') + plt.xlabel('Number of clusters') + plt.ylabel('WCSS') + plt.show() + ``` + + Gunakan pembolehubah `wcss` yang anda bina dalam langkah sebelumnya untuk mencipta carta yang menunjukkan di mana 'bengkok' dalam elbow, yang menunjukkan bilangan kelompok optimum. Mungkin memang **3**! + + ![kaedah elbow](../../../../5-Clustering/2-K-Means/images/elbow.png) + +## Latihan - paparkan kelompok + +1. Cuba proses sekali lagi, kali ini menetapkan tiga kelompok, dan paparkan kelompok sebagai scatterplot: + + ```python + from sklearn.cluster import KMeans + kmeans = KMeans(n_clusters = 3) + kmeans.fit(X) + labels = kmeans.predict(X) + plt.scatter(df['popularity'],df['danceability'],c = labels) + plt.xlabel('popularity') + plt.ylabel('danceability') + plt.show() + ``` + +1. Periksa ketepatan model: + + ```python + labels = kmeans.labels_ + + correct_labels = sum(y == labels) + + print("Result: %d out of %d samples were correctly labeled." % (correct_labels, y.size)) + + print('Accuracy score: {0:0.2f}'. format(correct_labels/float(y.size))) + ``` + + Ketepatan model ini tidak begitu baik, dan bentuk kelompok memberikan petunjuk mengapa. + + ![kelompok](../../../../5-Clustering/2-K-Means/images/clusters.png) + + Data ini terlalu tidak seimbang, terlalu sedikit berkorelasi dan terdapat terlalu banyak varians antara nilai lajur untuk dikelompokkan dengan baik. Malah, kelompok yang terbentuk mungkin sangat dipengaruhi atau berat sebelah oleh tiga kategori genre yang kita tentukan di atas. Itu adalah proses pembelajaran! + + Dalam dokumentasi Scikit-learn, anda boleh melihat bahawa model seperti ini, dengan kelompok yang tidak begitu jelas, mempunyai masalah 'varians': + + ![model bermasalah](../../../../5-Clustering/2-K-Means/images/problems.png) + > Infografik dari Scikit-learn + +## Varians + +Varians ditakrifkan sebagai "purata perbezaan kuadrat dari Mean" [(Sumber)](https://www.mathsisfun.com/data/standard-deviation.html). Dalam konteks masalah pengelompokan ini, ia merujuk kepada data di mana nombor dalam dataset kita cenderung menyimpang terlalu banyak daripada mean. + +✅ Ini adalah masa yang baik untuk memikirkan semua cara anda boleh membetulkan masalah ini. Ubah data sedikit lagi? Gunakan lajur yang berbeza? Gunakan algoritma yang berbeza? Petunjuk: Cuba [skala data anda](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) untuk menormalkannya dan uji lajur lain. + +> Cuba '[kalkulator varians](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)' ini untuk memahami konsep dengan lebih baik. + +--- + +## 🚀Cabaran + +Luangkan masa dengan notebook ini, ubah parameter. Bolehkah anda meningkatkan ketepatan model dengan membersihkan data lebih banyak (contohnya, membuang nilai luar)? Anda boleh menggunakan berat untuk memberikan lebih banyak berat kepada sampel data tertentu. Apa lagi yang boleh anda lakukan untuk mencipta kelompok yang lebih baik? + +Petunjuk: Cuba skala data anda. Terdapat kod yang dikomen dalam notebook yang menambah penskalaan standard untuk menjadikan lajur data lebih serupa dari segi julat. Anda akan mendapati bahawa walaupun skor silhouette menurun, 'bengkok' dalam graf elbow menjadi lebih lancar. Ini kerana membiarkan data tidak berskala membolehkan data dengan kurang varians membawa lebih banyak berat. Baca lebih lanjut mengenai masalah ini [di sini](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226). + +## [Kuiz Pasca-Kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Ulasan & Kajian Kendiri + +Lihat Simulator K-Means [seperti ini](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). Anda boleh menggunakan alat ini untuk memvisualisasikan titik data sampel dan menentukan centroidnya. Anda boleh mengedit keacakan data, bilangan kelompok dan bilangan centroid. Adakah ini membantu anda mendapatkan idea tentang bagaimana data boleh dikelompokkan? + +Juga, lihat [handout tentang K-Means](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) dari Stanford. + +## Tugasan + +[Cuba kaedah pengelompokan yang berbeza](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/5-Clustering/2-K-Means/assignment.md b/translations/ms/5-Clustering/2-K-Means/assignment.md new file mode 100644 index 00000000..93b568ff --- /dev/null +++ b/translations/ms/5-Clustering/2-K-Means/assignment.md @@ -0,0 +1,25 @@ + +# Cuba kaedah pengelompokan yang berbeza + +## Arahan + +Dalam pelajaran ini, anda telah mempelajari tentang pengelompokan K-Means. Kadangkala K-Means tidak sesuai untuk data anda. Buat sebuah notebook menggunakan data sama ada daripada pelajaran ini atau dari sumber lain (nyatakan sumbernya) dan tunjukkan kaedah pengelompokan yang berbeza TANPA menggunakan K-Means. Apa yang anda pelajari? + +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | --------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------- | +| | Sebuah notebook disediakan dengan model pengelompokan yang didokumentasikan dengan baik | Sebuah notebook disediakan tanpa dokumentasi yang baik dan/atau tidak lengkap | Kerja yang tidak lengkap diserahkan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/5-Clustering/2-K-Means/solution/Julia/README.md b/translations/ms/5-Clustering/2-K-Means/solution/Julia/README.md new file mode 100644 index 00000000..552134e9 --- /dev/null +++ b/translations/ms/5-Clustering/2-K-Means/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/5-Clustering/README.md b/translations/ms/5-Clustering/README.md new file mode 100644 index 00000000..bcdd405b --- /dev/null +++ b/translations/ms/5-Clustering/README.md @@ -0,0 +1,42 @@ + +# Model pengelompokan untuk pembelajaran mesin + +Pengelompokan adalah tugas pembelajaran mesin di mana ia mencari objek yang menyerupai satu sama lain dan mengelompokkannya ke dalam kumpulan yang dipanggil kluster. Apa yang membezakan pengelompokan daripada pendekatan lain dalam pembelajaran mesin ialah prosesnya berlaku secara automatik, malah boleh dikatakan ia bertentangan dengan pembelajaran terarah. + +## Topik serantau: model pengelompokan untuk citarasa muzik penonton Nigeria 🎧 + +Penonton Nigeria yang pelbagai mempunyai citarasa muzik yang berbeza-beza. Dengan menggunakan data yang diambil dari Spotify (diilhamkan oleh [artikel ini](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421)), mari kita lihat beberapa muzik yang popular di Nigeria. Dataset ini merangkumi data tentang skor 'danceability', 'acousticness', kelantangan, 'speechiness', populariti, dan tenaga pelbagai lagu. Ia akan menjadi menarik untuk menemui corak dalam data ini! + +![Turntable](../../../5-Clustering/images/turntable.jpg) + +> Foto oleh Marcela Laskoski di Unsplash + +Dalam siri pelajaran ini, anda akan menemui cara baharu untuk menganalisis data menggunakan teknik pengelompokan. Pengelompokan sangat berguna apabila dataset anda tidak mempunyai label. Jika dataset anda mempunyai label, maka teknik klasifikasi seperti yang telah anda pelajari dalam pelajaran sebelumnya mungkin lebih berguna. Tetapi dalam kes di mana anda ingin mengelompokkan data yang tidak berlabel, pengelompokan adalah cara yang hebat untuk menemui corak. + +> Terdapat alat low-code yang berguna untuk membantu anda mempelajari cara bekerja dengan model pengelompokan. Cuba [Azure ML untuk tugas ini](https://docs.microsoft.com/learn/modules/create-clustering-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +## Pelajaran + +1. [Pengenalan kepada pengelompokan](1-Visualize/README.md) +2. [Pengelompokan K-Means](2-K-Means/README.md) + +## Kredit + +Pelajaran ini ditulis dengan 🎶 oleh [Jen Looper](https://www.twitter.com/jenlooper) dengan ulasan berguna oleh [Rishit Dagli](https://rishit_dagli) dan [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan). + +Dataset [Lagu Nigeria](https://www.kaggle.com/sootersaalu/nigerian-songs-spotify) diperoleh dari Kaggle sebagai hasil pengambilan data dari Spotify. + +Contoh K-Means yang berguna yang membantu dalam mencipta pelajaran ini termasuk [eksplorasi iris](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering), [notebook pengenalan](https://www.kaggle.com/prashant111/k-means-clustering-with-python), dan [contoh NGO hipotetikal](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering). + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/6-NLP/1-Introduction-to-NLP/README.md b/translations/ms/6-NLP/1-Introduction-to-NLP/README.md new file mode 100644 index 00000000..d022d1b6 --- /dev/null +++ b/translations/ms/6-NLP/1-Introduction-to-NLP/README.md @@ -0,0 +1,179 @@ + +# Pengenalan kepada pemprosesan bahasa semula jadi + +Pelajaran ini merangkumi sejarah ringkas dan konsep penting tentang *pemprosesan bahasa semula jadi*, satu cabang daripada *linguistik komputer*. + +## [Kuiz pra-kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Pengenalan + +NLP, seperti yang biasa dikenali, adalah salah satu bidang yang paling terkenal di mana pembelajaran mesin telah diterapkan dan digunakan dalam perisian pengeluaran. + +✅ Bolehkah anda memikirkan perisian yang anda gunakan setiap hari yang mungkin mempunyai elemen NLP? Bagaimana pula dengan program pemprosesan kata atau aplikasi mudah alih yang anda gunakan secara berkala? + +Anda akan belajar tentang: + +- **Idea tentang bahasa**. Bagaimana bahasa berkembang dan apakah bidang utama kajian. +- **Definisi dan konsep**. Anda juga akan mempelajari definisi dan konsep tentang bagaimana komputer memproses teks, termasuk penguraian, tatabahasa, dan mengenal pasti kata nama dan kata kerja. Terdapat beberapa tugas pengekodan dalam pelajaran ini, dan beberapa konsep penting diperkenalkan yang akan anda pelajari untuk kod dalam pelajaran seterusnya. + +## Linguistik komputer + +Linguistik komputer adalah bidang penyelidikan dan pembangunan selama beberapa dekad yang mengkaji bagaimana komputer boleh bekerja dengan, dan bahkan memahami, menterjemah, serta berkomunikasi dengan bahasa. Pemprosesan bahasa semula jadi (NLP) adalah bidang berkaitan yang memberi tumpuan kepada bagaimana komputer boleh memproses bahasa 'semula jadi', atau bahasa manusia. + +### Contoh - pendikte telefon + +Jika anda pernah mendikte kepada telefon anda daripada menaip atau bertanya kepada pembantu maya soalan, ucapan anda telah ditukar kepada bentuk teks dan kemudian diproses atau *diuraikan* daripada bahasa yang anda gunakan. Kata kunci yang dikesan kemudian diproses ke dalam format yang telefon atau pembantu boleh fahami dan bertindak balas. + +![pemahaman](../../../../6-NLP/1-Introduction-to-NLP/images/comprehension.png) +> Pemahaman linguistik sebenar adalah sukar! Imej oleh [Jen Looper](https://twitter.com/jenlooper) + +### Bagaimana teknologi ini menjadi mungkin? + +Ini menjadi mungkin kerana seseorang telah menulis program komputer untuk melakukannya. Beberapa dekad yang lalu, beberapa penulis fiksyen sains meramalkan bahawa manusia akan lebih banyak bercakap dengan komputer mereka, dan komputer akan sentiasa memahami dengan tepat apa yang dimaksudkan. Malangnya, ia ternyata menjadi masalah yang lebih sukar daripada yang dibayangkan oleh ramai orang, dan walaupun ia adalah masalah yang lebih difahami hari ini, terdapat cabaran besar dalam mencapai pemprosesan bahasa semula jadi yang 'sempurna' apabila ia berkaitan dengan memahami maksud ayat. Ini adalah masalah yang sangat sukar apabila ia berkaitan dengan memahami humor atau mengesan emosi seperti sindiran dalam ayat. + +Pada ketika ini, anda mungkin teringat kelas sekolah di mana guru mengajar bahagian tatabahasa dalam ayat. Di beberapa negara, pelajar diajar tatabahasa dan linguistik sebagai subjek khusus, tetapi di banyak negara, topik ini termasuk sebagai sebahagian daripada pembelajaran bahasa: sama ada bahasa pertama anda di sekolah rendah (belajar membaca dan menulis) dan mungkin bahasa kedua di sekolah menengah. Jangan risau jika anda bukan pakar dalam membezakan kata nama daripada kata kerja atau kata keterangan daripada kata sifat! + +Jika anda bergelut dengan perbezaan antara *present simple* dan *present progressive*, anda tidak keseorangan. Ini adalah perkara yang mencabar bagi ramai orang, termasuk penutur asli sesuatu bahasa. Berita baiknya ialah komputer sangat baik dalam menerapkan peraturan formal, dan anda akan belajar menulis kod yang boleh *menguraikan* ayat sebaik manusia. Cabaran yang lebih besar yang akan anda kaji kemudian ialah memahami *maksud* dan *sentimen* sesuatu ayat. + +## Prasyarat + +Untuk pelajaran ini, prasyarat utama adalah dapat membaca dan memahami bahasa pelajaran ini. Tiada masalah matematik atau persamaan untuk diselesaikan. Walaupun penulis asal menulis pelajaran ini dalam bahasa Inggeris, ia juga diterjemahkan ke dalam bahasa lain, jadi anda mungkin sedang membaca terjemahan. Terdapat contoh di mana beberapa bahasa yang berbeza digunakan (untuk membandingkan peraturan tatabahasa yang berbeza bagi bahasa yang berbeza). Ini *tidak* diterjemahkan, tetapi teks penjelasan diterjemahkan, jadi maksudnya seharusnya jelas. + +Untuk tugas pengekodan, anda akan menggunakan Python dan contoh-contohnya menggunakan Python 3.8. + +Dalam bahagian ini, anda akan memerlukan, dan menggunakan: + +- **Pemahaman Python 3**. Pemahaman bahasa pengaturcaraan dalam Python 3, pelajaran ini menggunakan input, gelung, pembacaan fail, dan array. +- **Visual Studio Code + sambungan**. Kami akan menggunakan Visual Studio Code dan sambungan Pythonnya. Anda juga boleh menggunakan IDE Python pilihan anda. +- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) adalah pustaka pemprosesan teks yang dipermudahkan untuk Python. Ikuti arahan di laman TextBlob untuk memasangnya pada sistem anda (pasang korpora juga, seperti yang ditunjukkan di bawah): + + ```bash + pip install -U textblob + python -m textblob.download_corpora + ``` + +> 💡 Petua: Anda boleh menjalankan Python secara langsung dalam persekitaran VS Code. Semak [dokumen](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) untuk maklumat lanjut. + +## Berbicara dengan mesin + +Sejarah usaha untuk membuat komputer memahami bahasa manusia telah berlangsung selama beberapa dekad, dan salah seorang saintis terawal yang mempertimbangkan pemprosesan bahasa semula jadi ialah *Alan Turing*. + +### Ujian 'Turing' + +Apabila Turing sedang menyelidik *kecerdasan buatan* pada tahun 1950-an, beliau mempertimbangkan sama ada ujian perbualan boleh diberikan kepada manusia dan komputer (melalui korespondensi bertulis) di mana manusia dalam perbualan itu tidak pasti sama ada mereka sedang berbual dengan manusia lain atau komputer. + +Jika, selepas tempoh perbualan tertentu, manusia tidak dapat menentukan sama ada jawapan itu daripada komputer atau tidak, maka bolehkah komputer itu dikatakan *berfikir*? + +### Inspirasi - 'permainan tiruan' + +Idea ini datang daripada permainan parti yang dipanggil *The Imitation Game* di mana seorang penyiasat berada sendirian di dalam bilik dan ditugaskan untuk menentukan siapa di antara dua orang (di bilik lain) adalah lelaki dan perempuan masing-masing. Penyiasat boleh menghantar nota, dan mesti cuba memikirkan soalan di mana jawapan bertulis mendedahkan jantina orang misteri. Sudah tentu, pemain di bilik lain cuba mengelirukan penyiasat dengan menjawab soalan sedemikian rupa untuk mengelirukan atau mengelirukan penyiasat, sambil juga memberikan penampilan menjawab dengan jujur. + +### Membangunkan Eliza + +Pada tahun 1960-an, seorang saintis MIT bernama *Joseph Weizenbaum* membangunkan [*Eliza*](https://wikipedia.org/wiki/ELIZA), seorang 'terapis' komputer yang akan bertanya soalan kepada manusia dan memberikan penampilan memahami jawapan mereka. Walau bagaimanapun, walaupun Eliza boleh menguraikan ayat dan mengenal pasti struktur tatabahasa tertentu dan kata kunci untuk memberikan jawapan yang munasabah, ia tidak boleh dikatakan *memahami* ayat tersebut. Jika Eliza diberikan ayat dengan format "**Saya** sedih", ia mungkin menyusun semula dan menggantikan kata-kata dalam ayat untuk membentuk jawapan "Berapa lama **anda telah** sedih". + +Ini memberikan gambaran bahawa Eliza memahami kenyataan itu dan sedang bertanya soalan susulan, sedangkan sebenarnya, ia hanya menukar masa dan menambah beberapa perkataan. Jika Eliza tidak dapat mengenal pasti kata kunci yang mempunyai jawapan, ia sebaliknya akan memberikan jawapan rawak yang boleh digunakan untuk banyak kenyataan yang berbeza. Eliza boleh dengan mudah dikelirukan, contohnya jika pengguna menulis "**Anda adalah** sebuah basikal", ia mungkin menjawab "Berapa lama **saya telah** sebuah basikal?", bukannya jawapan yang lebih munasabah. + +[![Berbual dengan Eliza](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "Berbual dengan Eliza") + +> 🎥 Klik imej di atas untuk video tentang program ELIZA asal + +> Nota: Anda boleh membaca penerangan asal tentang [Eliza](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) yang diterbitkan pada tahun 1966 jika anda mempunyai akaun ACM. Sebagai alternatif, baca tentang Eliza di [wikipedia](https://wikipedia.org/wiki/ELIZA) + +## Latihan - pengekodan bot perbualan asas + +Bot perbualan, seperti Eliza, adalah program yang mendapatkan input pengguna dan kelihatan memahami serta bertindak balas dengan bijak. Tidak seperti Eliza, bot kita tidak akan mempunyai beberapa peraturan yang memberikan penampilan perbualan yang bijak. Sebaliknya, bot kita hanya akan mempunyai satu keupayaan, iaitu meneruskan perbualan dengan jawapan rawak yang mungkin berfungsi dalam hampir mana-mana perbualan remeh. + +### Rancangan + +Langkah-langkah anda semasa membina bot perbualan: + +1. Cetak arahan yang menasihati pengguna cara berinteraksi dengan bot +2. Mulakan gelung + 1. Terima input pengguna + 2. Jika pengguna meminta keluar, maka keluar + 3. Proses input pengguna dan tentukan jawapan (dalam kes ini, jawapan adalah pilihan rawak daripada senarai kemungkinan jawapan generik) + 4. Cetak jawapan +3. Kembali ke langkah 2 + +### Membina bot + +Mari kita bina bot seterusnya. Kita akan mulakan dengan mendefinisikan beberapa frasa. + +1. Cipta bot ini sendiri dalam Python dengan jawapan rawak berikut: + + ```python + random_responses = ["That is quite interesting, please tell me more.", + "I see. Do go on.", + "Why do you say that?", + "Funny weather we've been having, isn't it?", + "Let's change the subject.", + "Did you catch the game last night?"] + ``` + + Berikut adalah beberapa output contoh untuk panduan anda (input pengguna adalah pada baris yang bermula dengan `>`): + + ```output + Hello, I am Marvin, the simple robot. + You can end this conversation at any time by typing 'bye' + After typing each answer, press 'enter' + How are you today? + > I am good thanks + That is quite interesting, please tell me more. + > today I went for a walk + Did you catch the game last night? + > I did, but my team lost + Funny weather we've been having, isn't it? + > yes but I hope next week is better + Let's change the subject. + > ok, lets talk about music + Why do you say that? + > because I like music! + Why do you say that? + > bye + It was nice talking to you, goodbye! + ``` + + Satu penyelesaian yang mungkin untuk tugas ini adalah [di sini](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/1-Introduction-to-NLP/solution/bot.py) + + ✅ Berhenti dan pertimbangkan + + 1. Adakah anda fikir jawapan rawak akan 'mengelirukan' seseorang untuk berfikir bahawa bot sebenarnya memahami mereka? + 2. Apakah ciri yang diperlukan oleh bot untuk menjadi lebih berkesan? + 3. Jika bot benar-benar boleh 'memahami' maksud ayat, adakah ia perlu 'mengingati' maksud ayat sebelumnya dalam perbualan juga? + +--- + +## 🚀Cabaran + +Pilih salah satu elemen "berhenti dan pertimbangkan" di atas dan cuba melaksanakannya dalam kod atau tulis penyelesaian di atas kertas menggunakan pseudokod. + +Dalam pelajaran seterusnya, anda akan belajar tentang beberapa pendekatan lain untuk menguraikan bahasa semula jadi dan pembelajaran mesin. + +## [Kuiz pasca-kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Ulasan & Kajian Kendiri + +Lihat rujukan di bawah sebagai peluang pembacaan lanjut. + +### Rujukan + +1. Schubert, Lenhart, "Computational Linguistics", *The Stanford Encyclopedia of Philosophy* (Spring 2020 Edition), Edward N. Zalta (ed.), URL = . +2. Princeton University "About WordNet." [WordNet](https://wordnet.princeton.edu/). Princeton University. 2010. + +## Tugasan + +[Carian bot](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/6-NLP/1-Introduction-to-NLP/assignment.md b/translations/ms/6-NLP/1-Introduction-to-NLP/assignment.md new file mode 100644 index 00000000..0f131de3 --- /dev/null +++ b/translations/ms/6-NLP/1-Introduction-to-NLP/assignment.md @@ -0,0 +1,25 @@ + +# Cari bot + +## Arahan + +Bot ada di mana-mana. Tugasan anda: cari satu dan jadikan ia milik anda! Anda boleh menemui mereka di laman web, dalam aplikasi perbankan, dan melalui telefon, contohnya apabila anda menghubungi syarikat perkhidmatan kewangan untuk nasihat atau maklumat akaun. Analisis bot tersebut dan lihat jika anda boleh mengelirukannya. Jika anda berjaya mengelirukan bot, mengapa anda fikir perkara itu berlaku? Tulis sebuah kertas pendek tentang pengalaman anda. + +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | ------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | --------------------- | +| | Sebuah kertas penuh ditulis, menerangkan anggaran seni bina bot dan menggariskan pengalaman anda dengannya | Kertas tidak lengkap atau kurang penyelidikan | Tiada kertas dihantar | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/6-NLP/2-Tasks/README.md b/translations/ms/6-NLP/2-Tasks/README.md new file mode 100644 index 00000000..f328eb66 --- /dev/null +++ b/translations/ms/6-NLP/2-Tasks/README.md @@ -0,0 +1,228 @@ + +# Tugas Pemprosesan Bahasa Semula Jadi dan Teknik-Tekniknya + +Untuk kebanyakan *tugas pemprosesan bahasa semula jadi*, teks yang akan diproses mesti dipecahkan, diperiksa, dan hasilnya disimpan atau dirujuk silang dengan peraturan dan set data. Tugas-tugas ini membolehkan pengaturcara mendapatkan _makna_ atau _niat_ atau hanya _kekerapan_ istilah dan perkataan dalam teks. + +## [Kuiz Pra-Kuliah](https://ff-quizzes.netlify.app/en/ml/) + +Mari kita terokai teknik-teknik biasa yang digunakan dalam pemprosesan teks. Digabungkan dengan pembelajaran mesin, teknik-teknik ini membantu anda menganalisis sejumlah besar teks dengan cekap. Sebelum menerapkan ML kepada tugas-tugas ini, mari kita fahami masalah yang dihadapi oleh pakar NLP. + +## Tugas-Tugas Biasa dalam NLP + +Terdapat pelbagai cara untuk menganalisis teks yang sedang anda kerjakan. Terdapat tugas-tugas yang boleh anda laksanakan dan melalui tugas-tugas ini anda dapat memahami teks dan membuat kesimpulan. Biasanya, anda melaksanakan tugas-tugas ini secara berurutan. + +### Tokenisasi + +Kemungkinan besar perkara pertama yang perlu dilakukan oleh kebanyakan algoritma NLP ialah memecahkan teks kepada token, atau perkataan. Walaupun ini kedengaran mudah, mengambil kira tanda baca dan pemisah perkataan serta ayat dalam pelbagai bahasa boleh menjadi rumit. Anda mungkin perlu menggunakan pelbagai kaedah untuk menentukan sempadan. + +![tokenization](../../../../6-NLP/2-Tasks/images/tokenization.png) +> Tokenisasi ayat daripada **Pride and Prejudice**. Infografik oleh [Jen Looper](https://twitter.com/jenlooper) + +### Embedding + +[Word embeddings](https://wikipedia.org/wiki/Word_embedding) adalah cara untuk menukar data teks anda kepada bentuk numerik. Embedding dilakukan dengan cara supaya perkataan yang mempunyai makna serupa atau perkataan yang digunakan bersama-sama berkumpul bersama. + +![word embeddings](../../../../6-NLP/2-Tasks/images/embedding.png) +> "I have the highest respect for your nerves, they are my old friends." - Word embeddings untuk ayat dalam **Pride and Prejudice**. Infografik oleh [Jen Looper](https://twitter.com/jenlooper) + +✅ Cuba [alat menarik ini](https://projector.tensorflow.org/) untuk bereksperimen dengan word embeddings. Klik pada satu perkataan menunjukkan kumpulan perkataan serupa: 'toy' berkumpul dengan 'disney', 'lego', 'playstation', dan 'console'. + +### Parsing & Tagging Bahagian Ucapan + +Setiap perkataan yang telah ditokenkan boleh ditandai sebagai bahagian ucapan - kata nama, kata kerja, atau kata sifat. Ayat `the quick red fox jumped over the lazy brown dog` mungkin ditandai POS sebagai fox = kata nama, jumped = kata kerja. + +![parsing](../../../../6-NLP/2-Tasks/images/parse.png) + +> Parsing ayat daripada **Pride and Prejudice**. Infografik oleh [Jen Looper](https://twitter.com/jenlooper) + +Parsing ialah mengenal pasti perkataan yang berkaitan antara satu sama lain dalam ayat - contohnya `the quick red fox jumped` ialah urutan kata sifat-kata nama-kata kerja yang berasingan daripada urutan `lazy brown dog`. + +### Kekerapan Perkataan dan Frasa + +Prosedur yang berguna semasa menganalisis sejumlah besar teks ialah membina kamus setiap perkataan atau frasa yang menarik dan berapa kerap ia muncul. Frasa `the quick red fox jumped over the lazy brown dog` mempunyai kekerapan perkataan sebanyak 2 untuk the. + +Mari kita lihat contoh teks di mana kita mengira kekerapan perkataan. Puisi Rudyard Kipling, The Winners, mengandungi ayat berikut: + +```output +What the moral? Who rides may read. +When the night is thick and the tracks are blind +A friend at a pinch is a friend, indeed, +But a fool to wait for the laggard behind. +Down to Gehenna or up to the Throne, +He travels the fastest who travels alone. +``` + +Oleh kerana kekerapan frasa boleh sensitif huruf besar atau tidak sensitif huruf besar seperti yang diperlukan, frasa `a friend` mempunyai kekerapan sebanyak 2 dan `the` mempunyai kekerapan sebanyak 6, dan `travels` ialah 2. + +### N-grams + +Teks boleh dipecahkan kepada urutan perkataan dengan panjang tertentu, satu perkataan (unigram), dua perkataan (bigram), tiga perkataan (trigram) atau sebarang bilangan perkataan (n-grams). + +Sebagai contoh, `the quick red fox jumped over the lazy brown dog` dengan skor n-gram sebanyak 2 menghasilkan n-grams berikut: + +1. the quick +2. quick red +3. red fox +4. fox jumped +5. jumped over +6. over the +7. the lazy +8. lazy brown +9. brown dog + +Ia mungkin lebih mudah untuk menggambarkannya sebagai kotak gelongsor di atas ayat. Berikut ialah n-grams untuk 3 perkataan, n-gram ditunjukkan dalam huruf tebal dalam setiap ayat: + +1. **the quick red** fox jumped over the lazy brown dog +2. the **quick red fox** jumped over the lazy brown dog +3. the quick **red fox jumped** over the lazy brown dog +4. the quick red **fox jumped over** the lazy brown dog +5. the quick red fox **jumped over the** lazy brown dog +6. the quick red fox jumped **over the lazy** brown dog +7. the quick red fox jumped over **the lazy brown** dog +8. the quick red fox jumped over the **lazy brown dog** + +![n-grams sliding window](../../../../6-NLP/2-Tasks/images/n-grams.gif) + +> Nilai N-gram sebanyak 3: Infografik oleh [Jen Looper](https://twitter.com/jenlooper) + +### Ekstraksi Frasa Kata Nama + +Dalam kebanyakan ayat, terdapat kata nama yang menjadi subjek atau objek ayat. Dalam bahasa Inggeris, ia sering dapat dikenalpasti dengan 'a', 'an', atau 'the' yang mendahuluinya. Mengenalpasti subjek atau objek ayat dengan 'mengekstrak frasa kata nama' adalah tugas biasa dalam NLP apabila cuba memahami makna ayat. + +✅ Dalam ayat "I cannot fix on the hour, or the spot, or the look or the words, which laid the foundation. It is too long ago. I was in the middle before I knew that I had begun.", bolehkah anda mengenalpasti frasa kata nama? + +Dalam ayat `the quick red fox jumped over the lazy brown dog` terdapat 2 frasa kata nama: **quick red fox** dan **lazy brown dog**. + +### Analisis Sentimen + +Satu ayat atau teks boleh dianalisis untuk sentimen, atau betapa *positif* atau *negatif*nya ia. Sentimen diukur dalam *polariti* dan *objektiviti/subjektiviti*. Polariti diukur dari -1.0 hingga 1.0 (negatif ke positif) dan 0.0 hingga 1.0 (paling objektif ke paling subjektif). + +✅ Nanti anda akan belajar bahawa terdapat pelbagai cara untuk menentukan sentimen menggunakan pembelajaran mesin, tetapi satu cara ialah mempunyai senarai perkataan dan frasa yang dikategorikan sebagai positif atau negatif oleh pakar manusia dan menerapkan model itu kepada teks untuk mengira skor polariti. Bolehkah anda melihat bagaimana ini berfungsi dalam beberapa keadaan dan kurang berfungsi dalam keadaan lain? + +### Infleksi + +Infleksi membolehkan anda mengambil satu perkataan dan mendapatkan bentuk tunggal atau jamak perkataan tersebut. + +### Lematisasi + +*Lemma* ialah akar atau kata dasar untuk satu set perkataan, contohnya *flew*, *flies*, *flying* mempunyai lemma kata kerja *fly*. + +Terdapat juga pangkalan data berguna yang tersedia untuk penyelidik NLP, terutamanya: + +### WordNet + +[WordNet](https://wordnet.princeton.edu/) ialah pangkalan data perkataan, sinonim, antonim dan banyak butiran lain untuk setiap perkataan dalam pelbagai bahasa. Ia sangat berguna apabila cuba membina terjemahan, pemeriksa ejaan, atau alat bahasa dari sebarang jenis. + +## Perpustakaan NLP + +Nasib baik, anda tidak perlu membina semua teknik ini sendiri, kerana terdapat perpustakaan Python yang sangat baik tersedia yang menjadikannya lebih mudah diakses oleh pembangun yang tidak pakar dalam pemprosesan bahasa semula jadi atau pembelajaran mesin. Pelajaran seterusnya termasuk lebih banyak contoh ini, tetapi di sini anda akan belajar beberapa contoh berguna untuk membantu anda dengan tugas seterusnya. + +### Latihan - menggunakan perpustakaan `TextBlob` + +Mari gunakan perpustakaan bernama TextBlob kerana ia mengandungi API yang berguna untuk menangani jenis tugas ini. TextBlob "berdiri di atas bahu gergasi [NLTK](https://nltk.org) dan [pattern](https://github.com/clips/pattern), dan berfungsi dengan baik dengan kedua-duanya." Ia mempunyai sejumlah besar ML yang tertanam dalam API-nya. + +> Nota: Panduan [Quick Start](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) yang berguna tersedia untuk TextBlob yang disyorkan untuk pembangun Python berpengalaman + +Apabila cuba mengenalpasti *noun phrases*, TextBlob menawarkan beberapa pilihan ekstraktor untuk mencari frasa kata nama. + +1. Lihat `ConllExtractor`. + + ```python + from textblob import TextBlob + from textblob.np_extractors import ConllExtractor + # import and create a Conll extractor to use later + extractor = ConllExtractor() + + # later when you need a noun phrase extractor: + user_input = input("> ") + user_input_blob = TextBlob(user_input, np_extractor=extractor) # note non-default extractor specified + np = user_input_blob.noun_phrases + ``` + + > Apa yang sedang berlaku di sini? [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) ialah "Ekstraktor frasa kata nama yang menggunakan chunk parsing yang dilatih dengan korpus latihan ConLL-2000." ConLL-2000 merujuk kepada Persidangan Pembelajaran Bahasa Semula Jadi Komputasi pada tahun 2000. Setiap tahun persidangan itu mengadakan bengkel untuk menangani masalah NLP yang sukar, dan pada tahun 2000 ia adalah noun chunking. Model dilatih pada Wall Street Journal, dengan "bahagian 15-18 sebagai data latihan (211727 token) dan bahagian 20 sebagai data ujian (47377 token)". Anda boleh melihat prosedur yang digunakan [di sini](https://www.clips.uantwerpen.be/conll2000/chunking/) dan [hasilnya](https://ifarm.nl/erikt/research/np-chunking.html). + +### Cabaran - meningkatkan bot anda dengan NLP + +Dalam pelajaran sebelumnya anda telah membina bot Q&A yang sangat ringkas. Sekarang, anda akan menjadikan Marvin lebih bersimpati dengan menganalisis input anda untuk sentimen dan mencetak respons yang sesuai dengan sentimen tersebut. Anda juga perlu mengenalpasti `noun_phrase` dan bertanya mengenainya. + +Langkah-langkah anda semasa membina bot perbualan yang lebih baik: + +1. Cetak arahan yang menasihati pengguna cara berinteraksi dengan bot +2. Mulakan gelung + 1. Terima input pengguna + 2. Jika pengguna meminta untuk keluar, maka keluar + 3. Proses input pengguna dan tentukan respons sentimen yang sesuai + 4. Jika frasa kata nama dikesan dalam sentimen, jadikan ia bentuk jamak dan minta input lanjut mengenai topik tersebut + 5. Cetak respons +3. Kembali ke langkah 2 + +Berikut ialah petikan kod untuk menentukan sentimen menggunakan TextBlob. Perhatikan bahawa terdapat hanya empat *gradien* respons sentimen (anda boleh mempunyai lebih banyak jika anda mahu): + +```python +if user_input_blob.polarity <= -0.5: + response = "Oh dear, that sounds bad. " +elif user_input_blob.polarity <= 0: + response = "Hmm, that's not great. " +elif user_input_blob.polarity <= 0.5: + response = "Well, that sounds positive. " +elif user_input_blob.polarity <= 1: + response = "Wow, that sounds great. " +``` + +Berikut ialah beberapa output contoh untuk panduan anda (input pengguna berada pada baris yang bermula dengan >): + +```output +Hello, I am Marvin, the friendly robot. +You can end this conversation at any time by typing 'bye' +After typing each answer, press 'enter' +How are you today? +> I am ok +Well, that sounds positive. Can you tell me more? +> I went for a walk and saw a lovely cat +Well, that sounds positive. Can you tell me more about lovely cats? +> cats are the best. But I also have a cool dog +Wow, that sounds great. Can you tell me more about cool dogs? +> I have an old hounddog but he is sick +Hmm, that's not great. Can you tell me more about old hounddogs? +> bye +It was nice talking to you, goodbye! +``` + +Satu penyelesaian yang mungkin untuk tugas ini adalah [di sini](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/2-Tasks/solution/bot.py) + +✅ Pemeriksaan Pengetahuan + +1. Adakah anda fikir respons yang bersimpati akan 'menipu' seseorang untuk berfikir bahawa bot itu benar-benar memahami mereka? +2. Adakah mengenalpasti frasa kata nama menjadikan bot lebih 'boleh dipercayai'? +3. Mengapa mengekstrak 'frasa kata nama' daripada ayat adalah perkara yang berguna untuk dilakukan? + +--- + +Laksanakan bot dalam pemeriksaan pengetahuan sebelumnya dan uji pada rakan. Bolehkah ia menipu mereka? Bolehkah anda menjadikan bot anda lebih 'boleh dipercayai'? + +## 🚀Cabaran + +Ambil satu tugas dalam pemeriksaan pengetahuan sebelumnya dan cuba laksanakannya. Uji bot pada rakan. Bolehkah ia menipu mereka? Bolehkah anda menjadikan bot anda lebih 'boleh dipercayai'? + +## [Kuiz Pasca-Kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Ulasan & Kajian Kendiri + +Dalam beberapa pelajaran seterusnya anda akan belajar lebih lanjut tentang analisis sentimen. Kajilah teknik menarik ini dalam artikel seperti di [KDNuggets](https://www.kdnuggets.com/tag/nlp) + +## Tugasan + +[Make a bot talk back](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/6-NLP/2-Tasks/assignment.md b/translations/ms/6-NLP/2-Tasks/assignment.md new file mode 100644 index 00000000..e92b60e5 --- /dev/null +++ b/translations/ms/6-NLP/2-Tasks/assignment.md @@ -0,0 +1,25 @@ + +# Membuat Bot Berinteraksi Balik + +## Arahan + +Dalam pelajaran sebelum ini, anda telah memprogramkan bot asas untuk berbual. Bot ini memberikan jawapan secara rawak sehingga anda mengatakan 'bye'. Bolehkah anda menjadikan jawapan bot ini kurang rawak, dan mencetuskan jawapan apabila anda mengatakan perkara tertentu, seperti 'kenapa' atau 'bagaimana'? Fikirkan bagaimana pembelajaran mesin mungkin menjadikan kerja seperti ini kurang manual semasa anda memperluaskan bot anda. Anda boleh menggunakan perpustakaan NLTK atau TextBlob untuk memudahkan tugas anda. + +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | --------------------------------------------- | ------------------------------------------------ | ----------------------- | +| | Fail bot.py baharu disediakan dan didokumentasikan | Fail bot baharu disediakan tetapi mengandungi pepijat | Fail tidak disediakan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/6-NLP/3-Translation-Sentiment/README.md b/translations/ms/6-NLP/3-Translation-Sentiment/README.md new file mode 100644 index 00000000..bc07942f --- /dev/null +++ b/translations/ms/6-NLP/3-Translation-Sentiment/README.md @@ -0,0 +1,200 @@ + +# Terjemahan dan analisis sentimen dengan ML + +Dalam pelajaran sebelumnya, anda telah belajar cara membina bot asas menggunakan `TextBlob`, sebuah perpustakaan yang menggabungkan ML di belakang tabir untuk melaksanakan tugas NLP asas seperti pengekstrakan frasa kata nama. Satu lagi cabaran penting dalam linguistik komputer ialah _terjemahan_ yang tepat bagi ayat daripada satu bahasa lisan atau tulisan kepada bahasa lain. + +## [Kuiz pra-kuliah](https://ff-quizzes.netlify.app/en/ml/) + +Terjemahan adalah masalah yang sangat sukar kerana terdapat ribuan bahasa dan setiap satu mempunyai peraturan tatabahasa yang sangat berbeza. Satu pendekatan ialah menukar peraturan tatabahasa formal untuk satu bahasa, seperti Bahasa Inggeris, kepada struktur yang tidak bergantung kepada bahasa, dan kemudian menterjemahkannya dengan menukar kembali kepada bahasa lain. Pendekatan ini bermaksud anda akan mengambil langkah berikut: + +1. **Pengenalpastian**. Kenal pasti atau tag perkataan dalam bahasa input sebagai kata nama, kata kerja, dan sebagainya. +2. **Buat terjemahan**. Hasilkan terjemahan langsung bagi setiap perkataan dalam format bahasa sasaran. + +### Contoh ayat, Bahasa Inggeris ke Bahasa Ireland + +Dalam 'Bahasa Inggeris', ayat _I feel happy_ terdiri daripada tiga perkataan dalam susunan: + +- **subjek** (I) +- **kata kerja** (feel) +- **kata sifat** (happy) + +Namun, dalam bahasa 'Ireland', ayat yang sama mempunyai struktur tatabahasa yang sangat berbeza - emosi seperti "*happy*" atau "*sad*" dinyatakan sebagai sesuatu yang *berada pada* anda. + +Frasa Bahasa Inggeris `I feel happy` dalam Bahasa Ireland akan menjadi `Tá athas orm`. Terjemahan *literal* adalah `Happy is upon me`. + +Seorang penutur Bahasa Ireland yang menterjemah ke Bahasa Inggeris akan mengatakan `I feel happy`, bukan `Happy is upon me`, kerana mereka memahami maksud ayat tersebut, walaupun perkataan dan struktur ayatnya berbeza. + +Susunan formal untuk ayat dalam Bahasa Ireland adalah: + +- **kata kerja** (Tá atau is) +- **kata sifat** (athas, atau happy) +- **subjek** (orm, atau upon me) + +## Terjemahan + +Program terjemahan yang naif mungkin hanya menterjemah perkataan, tanpa mengambil kira struktur ayat. + +✅ Jika anda telah belajar bahasa kedua (atau ketiga atau lebih) sebagai orang dewasa, anda mungkin bermula dengan berfikir dalam bahasa asal anda, menterjemah konsep perkataan demi perkataan dalam kepala anda kepada bahasa kedua, dan kemudian menyebut terjemahan anda. Ini serupa dengan apa yang dilakukan oleh program terjemahan komputer yang naif. Penting untuk melepasi fasa ini untuk mencapai kefasihan! + +Terjemahan naif membawa kepada terjemahan yang buruk (dan kadang-kadang lucu): `I feel happy` diterjemahkan secara literal kepada `Mise bhraitheann athas` dalam Bahasa Ireland. Ini bermaksud (secara literal) `me feel happy` dan bukan ayat Bahasa Ireland yang sah. Walaupun Bahasa Inggeris dan Bahasa Ireland adalah bahasa yang dituturkan di dua pulau yang berdekatan, mereka adalah bahasa yang sangat berbeza dengan struktur tatabahasa yang berbeza. + +> Anda boleh menonton beberapa video tentang tradisi linguistik Ireland seperti [yang ini](https://www.youtube.com/watch?v=mRIaLSdRMMs) + +### Pendekatan pembelajaran mesin + +Setakat ini, anda telah belajar tentang pendekatan peraturan formal untuk pemprosesan bahasa semula jadi. Satu lagi pendekatan ialah mengabaikan maksud perkataan, dan _sebaliknya menggunakan pembelajaran mesin untuk mengesan corak_. Ini boleh berfungsi dalam terjemahan jika anda mempunyai banyak teks (sebuah *corpus*) atau teks (*corpora*) dalam kedua-dua bahasa asal dan sasaran. + +Sebagai contoh, pertimbangkan kes *Pride and Prejudice*, sebuah novel Bahasa Inggeris terkenal yang ditulis oleh Jane Austen pada tahun 1813. Jika anda merujuk buku itu dalam Bahasa Inggeris dan terjemahan manusia bagi buku itu dalam *Bahasa Perancis*, anda boleh mengesan frasa dalam satu yang diterjemahkan secara _idiomatik_ ke dalam yang lain. Anda akan melakukannya sebentar lagi. + +Sebagai contoh, apabila frasa Bahasa Inggeris seperti `I have no money` diterjemahkan secara literal ke Bahasa Perancis, ia mungkin menjadi `Je n'ai pas de monnaie`. "Monnaie" adalah 'false cognate' Bahasa Perancis yang rumit, kerana 'money' dan 'monnaie' bukan sinonim. Terjemahan yang lebih baik yang mungkin dibuat oleh manusia adalah `Je n'ai pas d'argent`, kerana ia lebih baik menyampaikan maksud bahawa anda tidak mempunyai wang (daripada 'duit syiling' yang merupakan maksud 'monnaie'). + +![monnaie](../../../../6-NLP/3-Translation-Sentiment/images/monnaie.png) + +> Imej oleh [Jen Looper](https://twitter.com/jenlooper) + +Jika model ML mempunyai cukup terjemahan manusia untuk membina model, ia boleh meningkatkan ketepatan terjemahan dengan mengenal pasti corak biasa dalam teks yang telah diterjemahkan sebelum ini oleh penutur manusia pakar kedua-dua bahasa. + +### Latihan - terjemahan + +Anda boleh menggunakan `TextBlob` untuk menterjemah ayat. Cuba baris pertama yang terkenal dari **Pride and Prejudice**: + +```python +from textblob import TextBlob + +blob = TextBlob( + "It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife!" +) +print(blob.translate(to="fr")) + +``` + +`TextBlob` melakukan kerja yang cukup baik dalam terjemahan: "C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme!". + +Boleh dikatakan bahawa terjemahan TextBlob jauh lebih tepat, sebenarnya, daripada terjemahan Bahasa Perancis tahun 1932 bagi buku itu oleh V. Leconte dan Ch. Pressoir: + +"C'est une vérité universelle qu'un célibataire pourvu d'une belle fortune doit avoir envie de se marier, et, si peu que l'on sache de son sentiment à cet egard, lorsqu'il arrive dans une nouvelle résidence, cette idée est si bien fixée dans l'esprit de ses voisins qu'ils le considèrent sur-le-champ comme la propriété légitime de l'une ou l'autre de leurs filles." + +Dalam kes ini, terjemahan yang dimaklumkan oleh ML melakukan kerja yang lebih baik daripada penterjemah manusia yang secara tidak perlu meletakkan kata-kata dalam mulut pengarang asal untuk 'kejelasan'. + +> Apa yang sedang berlaku di sini? dan mengapa TextBlob begitu baik dalam terjemahan? Sebenarnya, ia menggunakan Google Translate di belakang tabir, AI yang canggih yang mampu menganalisis berjuta-juta frasa untuk meramalkan rentetan terbaik untuk tugas yang diberikan. Tiada apa-apa yang manual berlaku di sini dan anda memerlukan sambungan internet untuk menggunakan `blob.translate`. + +✅ Cuba beberapa ayat lagi. Mana yang lebih baik, terjemahan ML atau manusia? Dalam kes mana? + +## Analisis sentimen + +Satu lagi bidang di mana pembelajaran mesin boleh berfungsi dengan sangat baik ialah analisis sentimen. Pendekatan bukan ML untuk sentimen adalah dengan mengenal pasti perkataan dan frasa yang 'positif' dan 'negatif'. Kemudian, diberikan teks baharu, hitung nilai keseluruhan perkataan positif, negatif dan neutral untuk mengenal pasti sentimen keseluruhan. + +Pendekatan ini mudah ditipu seperti yang mungkin anda lihat dalam tugas Marvin - ayat `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` adalah ayat sentimen negatif yang sarkastik, tetapi algoritma mudah mengesan 'great', 'wonderful', 'glad' sebagai positif dan 'waste', 'lost' dan 'dark' sebagai negatif. Sentimen keseluruhan dipengaruhi oleh perkataan yang bercanggah ini. + +✅ Berhenti sejenak dan fikirkan bagaimana kita menyampaikan sarkasme sebagai penutur manusia. Nada suara memainkan peranan besar. Cuba ucapkan frasa "Well, that film was awesome" dengan cara yang berbeza untuk mengetahui bagaimana suara anda menyampaikan maksud. + +### Pendekatan ML + +Pendekatan ML adalah dengan mengumpulkan secara manual teks negatif dan positif - tweet, ulasan filem, atau apa sahaja di mana manusia telah memberikan skor *dan* pendapat bertulis. Kemudian teknik NLP boleh digunakan pada pendapat dan skor, supaya corak muncul (contohnya, ulasan filem positif cenderung mempunyai frasa 'Oscar worthy' lebih daripada ulasan filem negatif, atau ulasan restoran positif mengatakan 'gourmet' jauh lebih banyak daripada 'disgusting'). + +> ⚖️ **Contoh**: Jika anda bekerja di pejabat seorang ahli politik dan terdapat undang-undang baharu yang sedang dibahaskan, pengundi mungkin menulis kepada pejabat dengan e-mel yang menyokong atau menentang undang-undang baharu tertentu. Katakan anda ditugaskan membaca e-mel dan menyusunnya dalam 2 timbunan, *menyokong* dan *menentang*. Jika terdapat banyak e-mel, anda mungkin berasa terbeban untuk membaca semuanya. Bukankah lebih baik jika bot boleh membaca semuanya untuk anda, memahaminya dan memberitahu anda dalam timbunan mana setiap e-mel patut diletakkan? +> +> Satu cara untuk mencapai itu adalah dengan menggunakan Pembelajaran Mesin. Anda akan melatih model dengan sebahagian daripada e-mel *menentang* dan sebahagian daripada e-mel *menyokong*. Model akan cenderung mengaitkan frasa dan perkataan dengan pihak menentang dan pihak menyokong, *tetapi ia tidak akan memahami sebarang kandungan*, hanya bahawa perkataan dan corak tertentu lebih cenderung muncul dalam e-mel *menentang* atau *menyokong*. Anda boleh mengujinya dengan beberapa e-mel yang anda tidak gunakan untuk melatih model, dan lihat jika ia sampai kepada kesimpulan yang sama seperti anda. Kemudian, setelah anda berpuas hati dengan ketepatan model, anda boleh memproses e-mel masa depan tanpa perlu membaca setiap satu. + +✅ Adakah proses ini terdengar seperti proses yang telah anda gunakan dalam pelajaran sebelumnya? + +## Latihan - ayat sentimental + +Sentimen diukur dengan *polarity* dari -1 hingga 1, bermaksud -1 adalah sentimen paling negatif, dan 1 adalah sentimen paling positif. Sentimen juga diukur dengan skor 0 - 1 untuk objektiviti (0) dan subjektiviti (1). + +Lihat semula *Pride and Prejudice* oleh Jane Austen. Teks tersedia di sini di [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm). Contoh di bawah menunjukkan program pendek yang menganalisis sentimen ayat pertama dan terakhir dari buku tersebut dan memaparkan skor polariti dan subjektiviti/objektiviti sentimennya. + +Anda harus menggunakan perpustakaan `TextBlob` (dijelaskan di atas) untuk menentukan `sentiment` (anda tidak perlu menulis kalkulator sentimen anda sendiri) dalam tugas berikut. + +```python +from textblob import TextBlob + +quote1 = """It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife.""" + +quote2 = """Darcy, as well as Elizabeth, really loved them; and they were both ever sensible of the warmest gratitude towards the persons who, by bringing her into Derbyshire, had been the means of uniting them.""" + +sentiment1 = TextBlob(quote1).sentiment +sentiment2 = TextBlob(quote2).sentiment + +print(quote1 + " has a sentiment of " + str(sentiment1)) +print(quote2 + " has a sentiment of " + str(sentiment2)) +``` + +Anda melihat output berikut: + +```output +It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want # of a wife. has a sentiment of Sentiment(polarity=0.20952380952380953, subjectivity=0.27142857142857146) + +Darcy, as well as Elizabeth, really loved them; and they were + both ever sensible of the warmest gratitude towards the persons + who, by bringing her into Derbyshire, had been the means of + uniting them. has a sentiment of Sentiment(polarity=0.7, subjectivity=0.8) +``` + +## Cabaran - periksa polariti sentimen + +Tugas anda adalah untuk menentukan, menggunakan polariti sentimen, sama ada *Pride and Prejudice* mempunyai lebih banyak ayat yang benar-benar positif daripada yang benar-benar negatif. Untuk tugas ini, anda boleh menganggap bahawa skor polariti 1 atau -1 adalah benar-benar positif atau negatif masing-masing. + +**Langkah-langkah:** + +1. Muat turun salinan [Pride and Prejudice](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) dari Project Gutenberg sebagai fail .txt. Buang metadata di awal dan akhir fail, tinggalkan hanya teks asal +2. Buka fail dalam Python dan ekstrak kandungannya sebagai string +3. Buat TextBlob menggunakan string buku +4. Analisis setiap ayat dalam buku dalam gelung + 1. Jika polariti adalah 1 atau -1 simpan ayat dalam array atau senarai mesej positif atau negatif +5. Pada akhirnya, cetak semua ayat positif dan negatif (secara berasingan) dan jumlah setiap satu. + +Berikut adalah [penyelesaian](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb) sebagai contoh. + +✅ Pemeriksaan Pengetahuan + +1. Sentimen berdasarkan perkataan yang digunakan dalam ayat, tetapi adakah kod *memahami* perkataan tersebut? +2. Adakah anda fikir polariti sentimen adalah tepat, atau dengan kata lain, adakah anda *bersetuju* dengan skor tersebut? + 1. Khususnya, adakah anda bersetuju atau tidak bersetuju dengan polariti **positif** mutlak bagi ayat berikut? + * “What an excellent father you have, girls!” said she, when the door was shut. + * “Your examination of Mr. Darcy is over, I presume,” said Miss Bingley; “and pray what is the result?” “I am perfectly convinced by it that Mr. Darcy has no defect. + * How wonderfully these sort of things occur! + * I have the greatest dislike in the world to that sort of thing. + * Charlotte is an excellent manager, I dare say. + * “This is delightful indeed! + * I am so happy! + * Your idea of the ponies is delightful. + 2. Tiga ayat berikut telah diberi skor dengan sentimen positif mutlak, tetapi setelah dibaca dengan teliti, mereka bukan ayat positif. Mengapa analisis sentimen menganggap mereka ayat positif? + * Happy shall I be, when his stay at Netherfield is over!” “I wish I could say anything to comfort you,” replied Elizabeth; “but it is wholly out of my power. + * If I could but see you as happy! + * Our distress, my dear Lizzy, is very great. + 3. Adakah anda bersetuju atau tidak bersetuju dengan polariti **negatif** mutlak bagi ayat berikut? + - Everybody is disgusted with his pride. + - “I should like to know how he behaves among strangers.” “You shall hear then—but prepare yourself for something very dreadful. + - The pause was to Elizabeth’s feelings dreadful. + - It would be dreadful! + +✅ Mana-mana peminat Jane Austen akan memahami bahawa dia sering menggunakan bukunya untuk mengkritik aspek yang lebih tidak masuk akal dalam masyarakat Inggeris Regency. Elizabeth Bennett, watak utama dalam *Pride and Prejudice*, adalah pemerhati sosial yang tajam (seperti pengarangnya) dan bahasanya sering sangat bernuansa. Malah Mr. Darcy (watak cinta dalam cerita) mencatatkan penggunaan bahasa Elizabeth yang suka bermain dan menggoda: "I have had the pleasure of your acquaintance long enough to know that you find great enjoyment in occasionally professing opinions which in fact are not your own." + +--- + +## 🚀Cabaran + +Bolehkah anda menjadikan Marvin lebih baik dengan mengekstrak ciri lain daripada input pengguna? + +## [Kuiz pasca-kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Ulasan & Kajian Kendiri +Terdapat banyak cara untuk mengekstrak sentimen daripada teks. Fikirkan tentang aplikasi perniagaan yang mungkin menggunakan teknik ini. Fikirkan bagaimana ia boleh menjadi tidak tepat. Baca lebih lanjut mengenai sistem perusahaan canggih yang menganalisis sentimen seperti [Azure Text Analysis](https://docs.microsoft.com/azure/cognitive-services/Text-Analytics/how-tos/text-analytics-how-to-sentiment-analysis?tabs=version-3-1?WT.mc_id=academic-77952-leestott). Uji beberapa ayat daripada Pride and Prejudice di atas dan lihat sama ada ia dapat mengesan nuansa. + +## Tugasan + +[Lesen puitis](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/6-NLP/3-Translation-Sentiment/assignment.md b/translations/ms/6-NLP/3-Translation-Sentiment/assignment.md new file mode 100644 index 00000000..33ca59f4 --- /dev/null +++ b/translations/ms/6-NLP/3-Translation-Sentiment/assignment.md @@ -0,0 +1,25 @@ + +# Lesen Puitis + +## Arahan + +Dalam [notebook ini](https://www.kaggle.com/jenlooper/emily-dickinson-word-frequency), anda boleh menemui lebih daripada 500 puisi Emily Dickinson yang telah dianalisis untuk sentimen menggunakan analitik teks Azure. Menggunakan dataset ini, analisislah ia menggunakan teknik yang diterangkan dalam pelajaran. Adakah sentimen yang dicadangkan oleh puisi sepadan dengan keputusan perkhidmatan Azure yang lebih canggih? Mengapa atau mengapa tidak, menurut pendapat anda? Adakah terdapat sesuatu yang mengejutkan anda? + +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | -------------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------ | +| | Notebook disediakan dengan analisis kukuh terhadap sampel output pengarang | Notebook tidak lengkap atau tidak melakukan analisis | Tiada notebook disediakan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/6-NLP/3-Translation-Sentiment/solution/Julia/README.md b/translations/ms/6-NLP/3-Translation-Sentiment/solution/Julia/README.md new file mode 100644 index 00000000..f92ddc4e --- /dev/null +++ b/translations/ms/6-NLP/3-Translation-Sentiment/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/6-NLP/3-Translation-Sentiment/solution/R/README.md b/translations/ms/6-NLP/3-Translation-Sentiment/solution/R/README.md new file mode 100644 index 00000000..97b72ccc --- /dev/null +++ b/translations/ms/6-NLP/3-Translation-Sentiment/solution/R/README.md @@ -0,0 +1,15 @@ + +ini adalah pemegang tempat sementara + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/6-NLP/4-Hotel-Reviews-1/README.md b/translations/ms/6-NLP/4-Hotel-Reviews-1/README.md new file mode 100644 index 00000000..c638a876 --- /dev/null +++ b/translations/ms/6-NLP/4-Hotel-Reviews-1/README.md @@ -0,0 +1,417 @@ + +# Analisis Sentimen dengan Ulasan Hotel - Memproses Data + +Dalam bahagian ini, anda akan menggunakan teknik yang dipelajari dalam pelajaran sebelumnya untuk melakukan analisis data eksploratori pada set data yang besar. Setelah anda memahami kegunaan pelbagai kolum dengan baik, anda akan belajar: + +- cara membuang kolum yang tidak diperlukan +- cara mengira data baru berdasarkan kolum sedia ada +- cara menyimpan set data yang dihasilkan untuk digunakan dalam cabaran akhir + +## [Kuiz Pra-Pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +### Pengenalan + +Setakat ini, anda telah mempelajari bagaimana data teks sangat berbeza daripada jenis data numerik. Jika ia adalah teks yang ditulis atau diucapkan oleh manusia, ia boleh dianalisis untuk mencari pola dan frekuensi, sentimen, dan makna. Pelajaran ini membawa anda ke dalam set data sebenar dengan cabaran sebenar: **[515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)** yang termasuk [lesen CC0: Domain Awam](https://creativecommons.org/publicdomain/zero/1.0/). Data ini diambil dari Booking.com daripada sumber awam. Pencipta set data ini ialah Jiashen Liu. + +### Persediaan + +Anda akan memerlukan: + +* Keupayaan untuk menjalankan notebook .ipynb menggunakan Python 3 +* pandas +* NLTK, [yang perlu anda pasang secara tempatan](https://www.nltk.org/install.html) +* Set data yang tersedia di Kaggle [515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe). Saiznya sekitar 230 MB selepas dinyahzip. Muat turun ke folder root `/data` yang berkaitan dengan pelajaran NLP ini. + +## Analisis Data Eksploratori + +Cabaran ini mengandaikan bahawa anda sedang membina bot cadangan hotel menggunakan analisis sentimen dan skor ulasan tetamu. Set data yang akan anda gunakan termasuk ulasan 1493 hotel yang berbeza di 6 bandar. + +Menggunakan Python, set data ulasan hotel, dan analisis sentimen NLTK, anda boleh mengetahui: + +* Apakah kata-kata dan frasa yang paling kerap digunakan dalam ulasan? +* Adakah *tag* rasmi yang menerangkan hotel berkorelasi dengan skor ulasan (contohnya, adakah ulasan lebih negatif untuk hotel tertentu oleh *Keluarga dengan anak kecil* berbanding *Pengembara solo*, mungkin menunjukkan ia lebih sesuai untuk *Pengembara solo*?) +* Adakah skor sentimen NLTK 'bersetuju' dengan skor numerik pengulas hotel? + +#### Set Data + +Mari kita terokai set data yang telah anda muat turun dan simpan secara tempatan. Buka fail ini dalam editor seperti VS Code atau Excel. + +Header dalam set data adalah seperti berikut: + +*Hotel_Address, Additional_Number_of_Scoring, Review_Date, Average_Score, Hotel_Name, Reviewer_Nationality, Negative_Review, Review_Total_Negative_Word_Counts, Total_Number_of_Reviews, Positive_Review, Review_Total_Positive_Word_Counts, Total_Number_of_Reviews_Reviewer_Has_Given, Reviewer_Score, Tags, days_since_review, lat, lng* + +Berikut adalah pengelompokan yang mungkin lebih mudah untuk diperiksa: +##### Kolum Hotel + +* `Hotel_Name`, `Hotel_Address`, `lat` (latitude), `lng` (longitude) + * Menggunakan *lat* dan *lng*, anda boleh memplot peta dengan Python yang menunjukkan lokasi hotel (mungkin dengan kod warna untuk ulasan negatif dan positif) + * Hotel_Address tidak begitu berguna kepada kita, dan kita mungkin menggantikannya dengan negara untuk memudahkan pengisihan & pencarian + +**Kolum Meta-Ulasan Hotel** + +* `Average_Score` + * Menurut pencipta set data, kolum ini adalah *Skor Purata hotel, dikira berdasarkan ulasan terbaru dalam setahun terakhir*. Ini kelihatan seperti cara yang tidak biasa untuk mengira skor, tetapi ia adalah data yang diambil, jadi kita mungkin menerimanya buat masa ini. + + ✅ Berdasarkan kolum lain dalam data ini, bolehkah anda memikirkan cara lain untuk mengira skor purata? + +* `Total_Number_of_Reviews` + * Jumlah ulasan yang diterima oleh hotel ini - tidak jelas (tanpa menulis kod) sama ada ini merujuk kepada ulasan dalam set data. +* `Additional_Number_of_Scoring` + * Ini bermaksud skor ulasan diberikan tetapi tiada ulasan positif atau negatif ditulis oleh pengulas + +**Kolum Ulasan** + +- `Reviewer_Score` + - Ini adalah nilai numerik dengan maksimum 1 tempat perpuluhan antara nilai minimum dan maksimum 2.5 dan 10 + - Tidak dijelaskan mengapa 2.5 adalah skor terendah yang mungkin +- `Negative_Review` + - Jika pengulas tidak menulis apa-apa, medan ini akan mempunyai "**No Negative**" + - Perhatikan bahawa pengulas mungkin menulis ulasan positif dalam kolum ulasan negatif (contohnya, "tiada apa yang buruk tentang hotel ini") +- `Review_Total_Negative_Word_Counts` + - Jumlah kata negatif yang lebih tinggi menunjukkan skor yang lebih rendah (tanpa memeriksa sentimen) +- `Positive_Review` + - Jika pengulas tidak menulis apa-apa, medan ini akan mempunyai "**No Positive**" + - Perhatikan bahawa pengulas mungkin menulis ulasan negatif dalam kolum ulasan positif (contohnya, "tiada apa yang baik tentang hotel ini sama sekali") +- `Review_Total_Positive_Word_Counts` + - Jumlah kata positif yang lebih tinggi menunjukkan skor yang lebih tinggi (tanpa memeriksa sentimen) +- `Review_Date` dan `days_since_review` + - Ukuran kesegaran atau keusangan mungkin diterapkan pada ulasan (ulasan lama mungkin tidak seakurat ulasan baru kerana pengurusan hotel berubah, atau renovasi telah dilakukan, atau kolam renang ditambah dll.) +- `Tags` + - Ini adalah deskriptor pendek yang mungkin dipilih oleh pengulas untuk menerangkan jenis tetamu mereka (contohnya, solo atau keluarga), jenis bilik yang mereka miliki, tempoh penginapan dan bagaimana ulasan dikirimkan. + - Malangnya, menggunakan tag ini bermasalah, lihat bahagian di bawah yang membincangkan kegunaannya + +**Kolum Pengulas** + +- `Total_Number_of_Reviews_Reviewer_Has_Given` + - Ini mungkin menjadi faktor dalam model cadangan, contohnya, jika anda dapat menentukan bahawa pengulas yang lebih prolifik dengan ratusan ulasan lebih cenderung negatif daripada positif. Walau bagaimanapun, pengulas mana-mana ulasan tertentu tidak dikenal pasti dengan kod unik, dan oleh itu tidak dapat dihubungkan dengan satu set ulasan. Terdapat 30 pengulas dengan 100 atau lebih ulasan, tetapi sukar untuk melihat bagaimana ini dapat membantu model cadangan. +- `Reviewer_Nationality` + - Sesetengah orang mungkin berpendapat bahawa kebangsaan tertentu lebih cenderung memberikan ulasan positif atau negatif kerana kecenderungan kebangsaan. Berhati-hati membina pandangan anekdot seperti ini ke dalam model anda. Ini adalah stereotaip kebangsaan (dan kadangkala perkauman), dan setiap pengulas adalah individu yang menulis ulasan berdasarkan pengalaman mereka. Ia mungkin telah ditapis melalui banyak lensa seperti penginapan hotel sebelumnya, jarak perjalanan, dan temperamen peribadi mereka. Berfikir bahawa kebangsaan mereka adalah sebab skor ulasan adalah sukar untuk dibenarkan. + +##### Contoh + +| Skor Purata | Jumlah Ulasan | Skor Pengulas | Ulasan
                      Negatif | Ulasan Positif | Tags | +| -------------- | ---------------------- | ---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------- | +| 7.8 | 1945 | 2.5 | Ini bukan hotel tetapi tapak pembinaan Saya diganggu dari awal pagi dan sepanjang hari dengan bunyi pembinaan yang tidak dapat diterima semasa berehat selepas perjalanan jauh dan bekerja di bilik Orang bekerja sepanjang hari dengan alat pemecah di bilik bersebelahan Saya meminta pertukaran bilik tetapi tiada bilik senyap tersedia Untuk membuat keadaan lebih buruk saya dikenakan bayaran berlebihan Saya keluar pada waktu petang kerana saya perlu meninggalkan penerbangan awal dan menerima bil yang sesuai Sehari kemudian hotel membuat caj lain tanpa persetujuan saya melebihi harga yang ditempah Tempat yang mengerikan Jangan hukum diri anda dengan menempah di sini | Tiada apa Tempat yang mengerikan Jauhkan diri | Perjalanan perniagaan Pasangan Bilik Double Standard Menginap 2 malam | + +Seperti yang anda lihat, tetamu ini tidak mempunyai pengalaman yang baik di hotel ini. Hotel ini mempunyai skor purata yang baik iaitu 7.8 dan 1945 ulasan, tetapi pengulas ini memberikannya 2.5 dan menulis 115 kata tentang betapa negatifnya penginapan mereka. Jika mereka tidak menulis apa-apa dalam kolum Ulasan_Positive, anda mungkin menganggap tiada apa yang positif, tetapi mereka menulis 7 kata amaran. Jika kita hanya mengira kata-kata tanpa makna, atau sentimen kata-kata, kita mungkin mempunyai pandangan yang berat sebelah terhadap niat pengulas. Anehnya, skor mereka 2.5 membingungkan, kerana jika penginapan hotel itu sangat buruk, mengapa memberikan sebarang mata? Menyelidiki set data dengan teliti, anda akan melihat bahawa skor terendah yang mungkin adalah 2.5, bukan 0. Skor tertinggi yang mungkin adalah 10. + +##### Tags + +Seperti yang disebutkan di atas, pada pandangan pertama, idea untuk menggunakan `Tags` untuk mengkategorikan data masuk akal. Malangnya, tag ini tidak diseragamkan, yang bermaksud bahawa dalam hotel tertentu, opsinya mungkin *Single room*, *Twin room*, dan *Double room*, tetapi dalam hotel berikutnya, ia adalah *Deluxe Single Room*, *Classic Queen Room*, dan *Executive King Room*. Ini mungkin perkara yang sama, tetapi terdapat begitu banyak variasi sehingga pilihannya menjadi: + +1. Cuba menukar semua istilah kepada satu standard, yang sangat sukar, kerana tidak jelas apa laluan penukaran dalam setiap kes (contohnya, *Classic single room* dipetakan kepada *Single room* tetapi *Superior Queen Room with Courtyard Garden or City View* jauh lebih sukar untuk dipetakan) + +1. Kita boleh mengambil pendekatan NLP dan mengukur frekuensi istilah tertentu seperti *Solo*, *Business Traveller*, atau *Family with young kids* seperti yang berlaku pada setiap hotel, dan faktor itu ke dalam cadangan + +Tags biasanya (tetapi tidak selalu) adalah satu medan yang mengandungi senarai 5 hingga 6 nilai yang dipisahkan koma yang sejajar dengan *Jenis perjalanan*, *Jenis tetamu*, *Jenis bilik*, *Bilangan malam*, dan *Jenis peranti ulasan dikirimkan*. Walau bagaimanapun, kerana sesetengah pengulas tidak mengisi setiap medan (mereka mungkin meninggalkan satu kosong), nilai-nilai tidak selalu dalam urutan yang sama. + +Sebagai contoh, ambil *Jenis kumpulan*. Terdapat 1025 kemungkinan unik dalam medan ini dalam kolum `Tags`, dan malangnya hanya sebahagian daripadanya merujuk kepada kumpulan (sesetengah adalah jenis bilik dll.). Jika anda menapis hanya yang menyebut keluarga, hasilnya mengandungi banyak hasil jenis *Family room*. Jika anda memasukkan istilah *with*, iaitu mengira nilai *Family with*, hasilnya lebih baik, dengan lebih daripada 80,000 daripada 515,000 hasil mengandungi frasa "Family with young children" atau "Family with older children". + +Ini bermakna kolum tags tidak sepenuhnya tidak berguna kepada kita, tetapi ia memerlukan usaha untuk menjadikannya berguna. + +##### Skor Purata Hotel + +Terdapat beberapa keanehan atau percanggahan dengan set data yang saya tidak dapat memahami, tetapi digambarkan di sini supaya anda menyedarinya semasa membina model anda. Jika anda memahaminya, sila maklumkan kepada kami dalam bahagian perbincangan! + +Set data mempunyai kolum berikut yang berkaitan dengan skor purata dan jumlah ulasan: + +1. Hotel_Name +2. Additional_Number_of_Scoring +3. Average_Score +4. Total_Number_of_Reviews +5. Reviewer_Score + +Hotel tunggal dengan jumlah ulasan terbanyak dalam set data ini ialah *Britannia International Hotel Canary Wharf* dengan 4789 ulasan daripada 515,000. Tetapi jika kita melihat nilai `Total_Number_of_Reviews` untuk hotel ini, ia adalah 9086. Anda mungkin mengandaikan bahawa terdapat banyak lagi skor tanpa ulasan, jadi mungkin kita harus menambah nilai kolum `Additional_Number_of_Scoring`. Nilai itu adalah 2682, dan menambahnya kepada 4789 memberikan kita 7,471 yang masih kekurangan 1615 daripada `Total_Number_of_Reviews`. + +Jika anda mengambil kolum `Average_Score`, anda mungkin mengandaikan ia adalah purata ulasan dalam set data, tetapi deskripsi dari Kaggle adalah "*Skor Purata hotel, dikira berdasarkan ulasan terbaru dalam setahun terakhir*". Itu tidak kelihatan begitu berguna, tetapi kita boleh mengira purata kita sendiri berdasarkan skor ulasan dalam set data. Menggunakan hotel yang sama sebagai contoh, skor purata hotel diberikan sebagai 7.1 tetapi skor yang dikira (purata skor pengulas *dalam* set data) adalah 6.8. Ini hampir sama, tetapi bukan nilai yang sama, dan kita hanya boleh mengandaikan bahawa skor yang diberikan dalam ulasan `Additional_Number_of_Scoring` meningkatkan purata kepada 7.1. Malangnya tanpa cara untuk menguji atau membuktikan andaian itu, sukar untuk menggunakan atau mempercayai `Average_Score`, `Additional_Number_of_Scoring` dan `Total_Number_of_Reviews` apabila ia berdasarkan, atau merujuk kepada, data yang kita tidak miliki. + +Untuk merumitkan lagi, hotel dengan jumlah ulasan kedua tertinggi mempunyai skor purata yang dikira sebanyak 8.12 dan `Average_Score` dalam set data adalah 8.1. Adakah skor ini kebetulan atau adakah hotel pertama adalah percanggahan? + +Dengan kemungkinan bahawa hotel ini mungkin adalah outlier, dan mungkin kebanyakan nilai sesuai (tetapi beberapa tidak atas sebab tertentu), kita akan menulis program pendek seterusnya untuk meneroka nilai dalam set data dan menentukan penggunaan yang betul (atau tidak) nilai-nilai tersebut. +> 🚨 Nota penting +> +> Apabila bekerja dengan dataset ini, anda akan menulis kod yang mengira sesuatu daripada teks tanpa perlu membaca atau menganalisis teks itu sendiri. Inilah intipati NLP, mentafsirkan makna atau sentimen tanpa memerlukan manusia melakukannya. Walau bagaimanapun, ada kemungkinan anda akan membaca beberapa ulasan negatif. Saya menggesa anda untuk tidak melakukannya, kerana anda tidak perlu. Sebahagian daripadanya adalah remeh, atau ulasan negatif hotel yang tidak relevan, seperti "Cuaca tidak bagus", sesuatu yang di luar kawalan hotel, atau sesiapa pun. Tetapi ada sisi gelap kepada beberapa ulasan juga. Kadang-kadang ulasan negatif bersifat perkauman, seksis, atau diskriminasi umur. Ini adalah sesuatu yang malang tetapi dijangka dalam dataset yang diambil dari laman web awam. Sesetengah pengulas meninggalkan ulasan yang mungkin anda anggap tidak menyenangkan, tidak selesa, atau menyedihkan. Lebih baik biarkan kod mengukur sentimen daripada membacanya sendiri dan merasa terganggu. Walau bagaimanapun, hanya sebilangan kecil yang menulis perkara sedemikian, tetapi mereka tetap wujud. +## Latihan - Penerokaan Data +### Muatkan Data + +Cukup sudah memeriksa data secara visual, sekarang anda akan menulis kod dan mendapatkan jawapan! Bahagian ini menggunakan pustaka pandas. Tugas pertama anda adalah memastikan anda boleh memuatkan dan membaca data CSV. Pustaka pandas mempunyai pemuat CSV yang pantas, dan hasilnya diletakkan dalam dataframe, seperti dalam pelajaran sebelumnya. CSV yang kita muatkan mempunyai lebih setengah juta baris, tetapi hanya 17 lajur. Pandas memberikan banyak cara yang berkuasa untuk berinteraksi dengan dataframe, termasuk keupayaan untuk melakukan operasi pada setiap baris. + +Mulai dari sini dalam pelajaran ini, akan ada potongan kod dan beberapa penjelasan tentang kod serta perbincangan tentang apa maksud hasilnya. Gunakan _notebook.ipynb_ yang disertakan untuk kod anda. + +Mari kita mulakan dengan memuatkan fail data yang akan anda gunakan: + +```python +# Load the hotel reviews from CSV +import pandas as pd +import time +# importing time so the start and end time can be used to calculate file loading time +print("Loading data file now, this could take a while depending on file size") +start = time.time() +# df is 'DataFrame' - make sure you downloaded the file to the data folder +df = pd.read_csv('../../data/Hotel_Reviews.csv') +end = time.time() +print("Loading took " + str(round(end - start, 2)) + " seconds") +``` + +Sekarang data telah dimuatkan, kita boleh melakukan beberapa operasi ke atasnya. Simpan kod ini di bahagian atas program anda untuk bahagian seterusnya. + +## Terokai Data + +Dalam kes ini, data sudah *bersih*, yang bermaksud ia sedia untuk digunakan dan tidak mempunyai aksara dalam bahasa lain yang mungkin mengganggu algoritma yang hanya mengharapkan aksara bahasa Inggeris. + +✅ Anda mungkin perlu bekerja dengan data yang memerlukan pemprosesan awal untuk memformatnya sebelum menerapkan teknik NLP, tetapi tidak kali ini. Jika anda perlu, bagaimana anda akan menangani aksara bukan bahasa Inggeris? + +Luangkan masa untuk memastikan bahawa setelah data dimuatkan, anda boleh menerokainya dengan kod. Sangat mudah untuk ingin fokus pada lajur `Negative_Review` dan `Positive_Review`. Lajur-lajur ini dipenuhi dengan teks semula jadi untuk algoritma NLP anda proseskan. Tetapi tunggu! Sebelum anda melompat ke NLP dan analisis sentimen, anda harus mengikuti kod di bawah untuk memastikan nilai yang diberikan dalam dataset sepadan dengan nilai yang anda kira menggunakan pandas. + +## Operasi Dataframe + +Tugas pertama dalam pelajaran ini adalah memeriksa sama ada penegasan berikut adalah betul dengan menulis beberapa kod yang memeriksa dataframe (tanpa mengubahnya). + +> Seperti banyak tugas pengaturcaraan, terdapat beberapa cara untuk menyelesaikannya, tetapi nasihat yang baik adalah melakukannya dengan cara yang paling mudah dan senang, terutamanya jika ia akan lebih mudah difahami apabila anda kembali kepada kod ini di masa depan. Dengan dataframe, terdapat API yang komprehensif yang sering mempunyai cara untuk melakukan apa yang anda mahu dengan cekap. + +Anggap soalan berikut sebagai tugas pengkodan dan cuba jawab tanpa melihat penyelesaiannya. + +1. Cetak *bentuk* dataframe yang baru sahaja anda muatkan (bentuk adalah bilangan baris dan lajur). +2. Kira kekerapan untuk kebangsaan pengulas: + 1. Berapa banyak nilai yang berbeza untuk lajur `Reviewer_Nationality` dan apakah nilai-nilai tersebut? + 2. Kebangsaan pengulas mana yang paling biasa dalam dataset (cetak negara dan bilangan ulasan)? + 3. Apakah 10 kebangsaan yang paling kerap ditemui seterusnya, dan kiraan kekerapan mereka? +3. Apakah hotel yang paling kerap diulas untuk setiap 10 kebangsaan pengulas teratas? +4. Berapa banyak ulasan per hotel (kekerapan ulasan hotel) dalam dataset? +5. Walaupun terdapat lajur `Average_Score` untuk setiap hotel dalam dataset, anda juga boleh mengira skor purata (mengambil purata semua skor pengulas dalam dataset untuk setiap hotel). Tambahkan lajur baru ke dataframe anda dengan tajuk lajur `Calc_Average_Score` yang mengandungi purata yang dikira itu. +6. Adakah mana-mana hotel mempunyai `Average_Score` dan `Calc_Average_Score` yang sama (dibundarkan kepada 1 tempat perpuluhan)? + 1. Cuba tulis fungsi Python yang mengambil Siri (baris) sebagai argumen dan membandingkan nilai-nilai tersebut, mencetak mesej apabila nilai-nilai tidak sama. Kemudian gunakan kaedah `.apply()` untuk memproses setiap baris dengan fungsi tersebut. +7. Kira dan cetak berapa banyak baris yang mempunyai nilai lajur `Negative_Review` "No Negative". +8. Kira dan cetak berapa banyak baris yang mempunyai nilai lajur `Positive_Review` "No Positive". +9. Kira dan cetak berapa banyak baris yang mempunyai nilai lajur `Positive_Review` "No Positive" **dan** nilai lajur `Negative_Review` "No Negative". + +### Jawapan Kod + +1. Cetak *bentuk* dataframe yang baru sahaja anda muatkan (bentuk adalah bilangan baris dan lajur). + + ```python + print("The shape of the data (rows, cols) is " + str(df.shape)) + > The shape of the data (rows, cols) is (515738, 17) + ``` + +2. Kira kekerapan untuk kebangsaan pengulas: + + 1. Berapa banyak nilai yang berbeza untuk lajur `Reviewer_Nationality` dan apakah nilai-nilai tersebut? + 2. Kebangsaan pengulas mana yang paling biasa dalam dataset (cetak negara dan bilangan ulasan)? + + ```python + # value_counts() creates a Series object that has index and values in this case, the country and the frequency they occur in reviewer nationality + nationality_freq = df["Reviewer_Nationality"].value_counts() + print("There are " + str(nationality_freq.size) + " different nationalities") + # print first and last rows of the Series. Change to nationality_freq.to_string() to print all of the data + print(nationality_freq) + + There are 227 different nationalities + United Kingdom 245246 + United States of America 35437 + Australia 21686 + Ireland 14827 + United Arab Emirates 10235 + ... + Comoros 1 + Palau 1 + Northern Mariana Islands 1 + Cape Verde 1 + Guinea 1 + Name: Reviewer_Nationality, Length: 227, dtype: int64 + ``` + + 3. Apakah 10 kebangsaan yang paling kerap ditemui seterusnya, dan kiraan kekerapan mereka? + + ```python + print("The highest frequency reviewer nationality is " + str(nationality_freq.index[0]).strip() + " with " + str(nationality_freq[0]) + " reviews.") + # Notice there is a leading space on the values, strip() removes that for printing + # What is the top 10 most common nationalities and their frequencies? + print("The next 10 highest frequency reviewer nationalities are:") + print(nationality_freq[1:11].to_string()) + + The highest frequency reviewer nationality is United Kingdom with 245246 reviews. + The next 10 highest frequency reviewer nationalities are: + United States of America 35437 + Australia 21686 + Ireland 14827 + United Arab Emirates 10235 + Saudi Arabia 8951 + Netherlands 8772 + Switzerland 8678 + Germany 7941 + Canada 7894 + France 7296 + ``` + +3. Apakah hotel yang paling kerap diulas untuk setiap 10 kebangsaan pengulas teratas? + + ```python + # What was the most frequently reviewed hotel for the top 10 nationalities + # Normally with pandas you will avoid an explicit loop, but wanted to show creating a new dataframe using criteria (don't do this with large amounts of data because it could be very slow) + for nat in nationality_freq[:10].index: + # First, extract all the rows that match the criteria into a new dataframe + nat_df = df[df["Reviewer_Nationality"] == nat] + # Now get the hotel freq + freq = nat_df["Hotel_Name"].value_counts() + print("The most reviewed hotel for " + str(nat).strip() + " was " + str(freq.index[0]) + " with " + str(freq[0]) + " reviews.") + + The most reviewed hotel for United Kingdom was Britannia International Hotel Canary Wharf with 3833 reviews. + The most reviewed hotel for United States of America was Hotel Esther a with 423 reviews. + The most reviewed hotel for Australia was Park Plaza Westminster Bridge London with 167 reviews. + The most reviewed hotel for Ireland was Copthorne Tara Hotel London Kensington with 239 reviews. + The most reviewed hotel for United Arab Emirates was Millennium Hotel London Knightsbridge with 129 reviews. + The most reviewed hotel for Saudi Arabia was The Cumberland A Guoman Hotel with 142 reviews. + The most reviewed hotel for Netherlands was Jaz Amsterdam with 97 reviews. + The most reviewed hotel for Switzerland was Hotel Da Vinci with 97 reviews. + The most reviewed hotel for Germany was Hotel Da Vinci with 86 reviews. + The most reviewed hotel for Canada was St James Court A Taj Hotel London with 61 reviews. + ``` + +4. Berapa banyak ulasan per hotel (kekerapan ulasan hotel) dalam dataset? + + ```python + # First create a new dataframe based on the old one, removing the uneeded columns + hotel_freq_df = df.drop(["Hotel_Address", "Additional_Number_of_Scoring", "Review_Date", "Average_Score", "Reviewer_Nationality", "Negative_Review", "Review_Total_Negative_Word_Counts", "Positive_Review", "Review_Total_Positive_Word_Counts", "Total_Number_of_Reviews_Reviewer_Has_Given", "Reviewer_Score", "Tags", "days_since_review", "lat", "lng"], axis = 1) + + # Group the rows by Hotel_Name, count them and put the result in a new column Total_Reviews_Found + hotel_freq_df['Total_Reviews_Found'] = hotel_freq_df.groupby('Hotel_Name').transform('count') + + # Get rid of all the duplicated rows + hotel_freq_df = hotel_freq_df.drop_duplicates(subset = ["Hotel_Name"]) + display(hotel_freq_df) + ``` + | Nama_Hotel | Jumlah_Ulasan_Hotel | Jumlah_Ulasan_Ditemui | + | :----------------------------------------: | :------------------: | :-------------------: | + | Britannia International Hotel Canary Wharf | 9086 | 4789 | + | Park Plaza Westminster Bridge London | 12158 | 4169 | + | Copthorne Tara Hotel London Kensington | 7105 | 3578 | + | ... | ... | ... | + | Mercure Paris Porte d Orleans | 110 | 10 | + | Hotel Wagner | 135 | 10 | + | Hotel Gallitzinberg | 173 | 8 | + + Anda mungkin perasan bahawa hasil *dikira dalam dataset* tidak sepadan dengan nilai dalam `Total_Number_of_Reviews`. Tidak jelas sama ada nilai ini dalam dataset mewakili jumlah ulasan hotel yang sebenar, tetapi tidak semua telah diambil, atau pengiraan lain. `Total_Number_of_Reviews` tidak digunakan dalam model kerana ketidakjelasan ini. + +5. Walaupun terdapat lajur `Average_Score` untuk setiap hotel dalam dataset, anda juga boleh mengira skor purata (mengambil purata semua skor pengulas dalam dataset untuk setiap hotel). Tambahkan lajur baru ke dataframe anda dengan tajuk lajur `Calc_Average_Score` yang mengandungi purata yang dikira itu. Cetak lajur `Hotel_Name`, `Average_Score`, dan `Calc_Average_Score`. + + ```python + # define a function that takes a row and performs some calculation with it + def get_difference_review_avg(row): + return row["Average_Score"] - row["Calc_Average_Score"] + + # 'mean' is mathematical word for 'average' + df['Calc_Average_Score'] = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) + + # Add a new column with the difference between the two average scores + df["Average_Score_Difference"] = df.apply(get_difference_review_avg, axis = 1) + + # Create a df without all the duplicates of Hotel_Name (so only 1 row per hotel) + review_scores_df = df.drop_duplicates(subset = ["Hotel_Name"]) + + # Sort the dataframe to find the lowest and highest average score difference + review_scores_df = review_scores_df.sort_values(by=["Average_Score_Difference"]) + + display(review_scores_df[["Average_Score_Difference", "Average_Score", "Calc_Average_Score", "Hotel_Name"]]) + ``` + + Anda mungkin juga tertanya-tanya tentang nilai `Average_Score` dan mengapa ia kadang-kadang berbeza daripada skor purata yang dikira. Oleh kerana kita tidak dapat mengetahui mengapa sesetengah nilai sepadan, tetapi yang lain mempunyai perbezaan, adalah lebih selamat dalam kes ini untuk menggunakan skor ulasan yang kita ada untuk mengira purata sendiri. Walau bagaimanapun, perbezaannya biasanya sangat kecil, berikut adalah hotel dengan penyimpangan terbesar daripada purata dataset dan purata yang dikira: + + | Perbezaan_Skor_Purata | Skor_Purata | Skor_Purata_Dikira | Nama_Hotel | + | :--------------------: | :---------: | :----------------: | --------------------------------------------: | + | -0.8 | 7.7 | 8.5 | Best Western Hotel Astoria | + | -0.7 | 8.8 | 9.5 | Hotel Stendhal Place Vend me Paris MGallery | + | -0.7 | 7.5 | 8.2 | Mercure Paris Porte d Orleans | + | -0.7 | 7.9 | 8.6 | Renaissance Paris Vendome Hotel | + | -0.5 | 7.0 | 7.5 | Hotel Royal Elys es | + | ... | ... | ... | ... | + | 0.7 | 7.5 | 6.8 | Mercure Paris Op ra Faubourg Montmartre | + | 0.8 | 7.1 | 6.3 | Holiday Inn Paris Montparnasse Pasteur | + | 0.9 | 6.8 | 5.9 | Villa Eugenie | + | 0.9 | 8.6 | 7.7 | MARQUIS Faubourg St Honor Relais Ch teaux | + | 1.3 | 7.2 | 5.9 | Kube Hotel Ice Bar | + + Dengan hanya 1 hotel mempunyai perbezaan skor lebih daripada 1, ini bermakna kita mungkin boleh mengabaikan perbezaan dan menggunakan skor purata yang dikira. + +6. Kira dan cetak berapa banyak baris yang mempunyai nilai lajur `Negative_Review` "No Negative". + +7. Kira dan cetak berapa banyak baris yang mempunyai nilai lajur `Positive_Review` "No Positive". + +8. Kira dan cetak berapa banyak baris yang mempunyai nilai lajur `Positive_Review` "No Positive" **dan** nilai lajur `Negative_Review` "No Negative". + + ```python + # with lambdas: + start = time.time() + no_negative_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" else False , axis=1) + print("Number of No Negative reviews: " + str(len(no_negative_reviews[no_negative_reviews == True].index))) + + no_positive_reviews = df.apply(lambda x: True if x['Positive_Review'] == "No Positive" else False , axis=1) + print("Number of No Positive reviews: " + str(len(no_positive_reviews[no_positive_reviews == True].index))) + + both_no_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" and x['Positive_Review'] == "No Positive" else False , axis=1) + print("Number of both No Negative and No Positive reviews: " + str(len(both_no_reviews[both_no_reviews == True].index))) + end = time.time() + print("Lambdas took " + str(round(end - start, 2)) + " seconds") + + Number of No Negative reviews: 127890 + Number of No Positive reviews: 35946 + Number of both No Negative and No Positive reviews: 127 + Lambdas took 9.64 seconds + ``` + +## Cara Lain + +Cara lain untuk mengira item tanpa Lambdas, dan gunakan sum untuk mengira baris: + + ```python + # without lambdas (using a mixture of notations to show you can use both) + start = time.time() + no_negative_reviews = sum(df.Negative_Review == "No Negative") + print("Number of No Negative reviews: " + str(no_negative_reviews)) + + no_positive_reviews = sum(df["Positive_Review"] == "No Positive") + print("Number of No Positive reviews: " + str(no_positive_reviews)) + + both_no_reviews = sum((df.Negative_Review == "No Negative") & (df.Positive_Review == "No Positive")) + print("Number of both No Negative and No Positive reviews: " + str(both_no_reviews)) + + end = time.time() + print("Sum took " + str(round(end - start, 2)) + " seconds") + + Number of No Negative reviews: 127890 + Number of No Positive reviews: 35946 + Number of both No Negative and No Positive reviews: 127 + Sum took 0.19 seconds + ``` + + Anda mungkin perasan bahawa terdapat 127 baris yang mempunyai kedua-dua nilai "No Negative" dan "No Positive" untuk lajur `Negative_Review` dan `Positive_Review` masing-masing. Ini bermakna pengulas memberikan hotel skor numerik, tetapi enggan menulis ulasan positif atau negatif. Nasib baik ini adalah jumlah baris yang kecil (127 daripada 515738, atau 0.02%), jadi ia mungkin tidak akan mempengaruhi model atau hasil kita dalam arah tertentu, tetapi anda mungkin tidak menjangkakan dataset ulasan mempunyai baris tanpa ulasan, jadi ia berbaloi untuk meneroka data untuk menemui baris seperti ini. + +Sekarang anda telah meneroka dataset, dalam pelajaran seterusnya anda akan menapis data dan menambah analisis sentimen. + +--- +## 🚀Cabaran + +Pelajaran ini menunjukkan, seperti yang kita lihat dalam pelajaran sebelumnya, betapa pentingnya memahami data anda dan keanehannya sebelum melakukan operasi ke atasnya. Data berasaskan teks, khususnya, memerlukan pemeriksaan yang teliti. Terokai pelbagai dataset yang berat dengan teks dan lihat jika anda boleh menemui kawasan yang boleh memperkenalkan bias atau sentimen yang tidak seimbang ke dalam model. + +## [Kuiz selepas kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Kajian & Pembelajaran Kendiri + +Ambil [Laluan Pembelajaran ini tentang NLP](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott) untuk menemui alat yang boleh dicuba semasa membina model yang berat dengan ucapan dan teks. + +## Tugasan + +[NLTK](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/6-NLP/4-Hotel-Reviews-1/assignment.md b/translations/ms/6-NLP/4-Hotel-Reviews-1/assignment.md new file mode 100644 index 00000000..05452e42 --- /dev/null +++ b/translations/ms/6-NLP/4-Hotel-Reviews-1/assignment.md @@ -0,0 +1,19 @@ + +# NLTK + +## Arahan + +NLTK adalah perpustakaan terkenal untuk digunakan dalam linguistik komputasi dan NLP. Ambil peluang ini untuk membaca '[buku NLTK](https://www.nltk.org/book/)' dan cuba latihan-latihannya. Dalam tugasan yang tidak diberi gred ini, anda akan mengenali perpustakaan ini dengan lebih mendalam. + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md b/translations/ms/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md new file mode 100644 index 00000000..d73eed82 --- /dev/null +++ b/translations/ms/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/6-NLP/4-Hotel-Reviews-1/solution/R/README.md b/translations/ms/6-NLP/4-Hotel-Reviews-1/solution/R/README.md new file mode 100644 index 00000000..bf572c4c --- /dev/null +++ b/translations/ms/6-NLP/4-Hotel-Reviews-1/solution/R/README.md @@ -0,0 +1,15 @@ + +ini adalah pemegang tempat sementara + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/6-NLP/5-Hotel-Reviews-2/README.md b/translations/ms/6-NLP/5-Hotel-Reviews-2/README.md new file mode 100644 index 00000000..53954eb5 --- /dev/null +++ b/translations/ms/6-NLP/5-Hotel-Reviews-2/README.md @@ -0,0 +1,389 @@ + +# Analisis Sentimen dengan Ulasan Hotel + +Sekarang setelah anda meneroka dataset dengan terperinci, tiba masanya untuk menapis kolum dan menggunakan teknik NLP pada dataset untuk mendapatkan wawasan baru tentang hotel. + +## [Kuiz pra-kuliah](https://ff-quizzes.netlify.app/en/ml/) + +### Operasi Penapisan & Analisis Sentimen + +Seperti yang mungkin anda perasan, dataset ini mempunyai beberapa isu. Beberapa kolum dipenuhi dengan maklumat yang tidak berguna, sementara yang lain kelihatan tidak tepat. Jika ia betul sekalipun, tidak jelas bagaimana ia dikira, dan jawapan tidak dapat disahkan secara bebas melalui pengiraan anda sendiri. + +## Latihan: Pemprosesan Data Tambahan + +Bersihkan data sedikit lagi. Tambahkan kolum yang akan berguna kemudian, ubah nilai dalam kolum lain, dan buang beberapa kolum sepenuhnya. + +1. Pemprosesan kolum awal + + 1. Buang `lat` dan `lng` + + 2. Gantikan nilai `Hotel_Address` dengan nilai berikut (jika alamat mengandungi nama bandar dan negara yang sama, ubah kepada hanya bandar dan negara). + + Berikut adalah satu-satunya bandar dan negara dalam dataset: + + Amsterdam, Netherlands + + Barcelona, Spain + + London, United Kingdom + + Milan, Italy + + Paris, France + + Vienna, Austria + + ```python + def replace_address(row): + if "Netherlands" in row["Hotel_Address"]: + return "Amsterdam, Netherlands" + elif "Barcelona" in row["Hotel_Address"]: + return "Barcelona, Spain" + elif "United Kingdom" in row["Hotel_Address"]: + return "London, United Kingdom" + elif "Milan" in row["Hotel_Address"]: + return "Milan, Italy" + elif "France" in row["Hotel_Address"]: + return "Paris, France" + elif "Vienna" in row["Hotel_Address"]: + return "Vienna, Austria" + + # Replace all the addresses with a shortened, more useful form + df["Hotel_Address"] = df.apply(replace_address, axis = 1) + # The sum of the value_counts() should add up to the total number of reviews + print(df["Hotel_Address"].value_counts()) + ``` + + Kini anda boleh membuat pertanyaan data peringkat negara: + + ```python + display(df.groupby("Hotel_Address").agg({"Hotel_Name": "nunique"})) + ``` + + | Hotel_Address | Hotel_Name | + | :--------------------- | :--------: | + | Amsterdam, Netherlands | 105 | + | Barcelona, Spain | 211 | + | London, United Kingdom | 400 | + | Milan, Italy | 162 | + | Paris, France | 458 | + | Vienna, Austria | 158 | + +2. Proses kolum Meta-ulasan Hotel + + 1. Buang `Additional_Number_of_Scoring` + + 2. Gantikan `Total_Number_of_Reviews` dengan jumlah ulasan sebenar untuk hotel tersebut yang terdapat dalam dataset + + 3. Gantikan `Average_Score` dengan skor yang dikira sendiri + + ```python + # Drop `Additional_Number_of_Scoring` + df.drop(["Additional_Number_of_Scoring"], axis = 1, inplace=True) + # Replace `Total_Number_of_Reviews` and `Average_Score` with our own calculated values + df.Total_Number_of_Reviews = df.groupby('Hotel_Name').transform('count') + df.Average_Score = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) + ``` + +3. Proses kolum ulasan + + 1. Buang `Review_Total_Negative_Word_Counts`, `Review_Total_Positive_Word_Counts`, `Review_Date` dan `days_since_review` + + 2. Kekalkan `Reviewer_Score`, `Negative_Review`, dan `Positive_Review` seperti sedia ada + + 3. Kekalkan `Tags` buat masa ini + + - Kita akan melakukan beberapa operasi penapisan tambahan pada tag dalam bahagian seterusnya dan kemudian tag akan dibuang + +4. Proses kolum pengulas + + 1. Buang `Total_Number_of_Reviews_Reviewer_Has_Given` + + 2. Kekalkan `Reviewer_Nationality` + +### Kolum Tag + +Kolum `Tag` bermasalah kerana ia adalah senarai (dalam bentuk teks) yang disimpan dalam kolum. Malangnya, susunan dan bilangan sub bahagian dalam kolum ini tidak selalu sama. Sukar bagi manusia untuk mengenal pasti frasa yang betul untuk diperhatikan, kerana terdapat 515,000 baris, dan 1427 hotel, dan setiap satu mempunyai pilihan yang sedikit berbeza yang boleh dipilih oleh pengulas. Di sinilah NLP berguna. Anda boleh mengimbas teks dan mencari frasa yang paling biasa, serta mengiranya. + +Malangnya, kita tidak berminat dengan perkataan tunggal, tetapi frasa berbilang perkataan (contohnya *Perjalanan perniagaan*). Menjalankan algoritma pengedaran kekerapan frasa berbilang perkataan pada data sebanyak itu (6762646 perkataan) boleh mengambil masa yang luar biasa, tetapi tanpa melihat data, nampaknya itu adalah perbelanjaan yang perlu. Di sinilah analisis data eksplorasi berguna, kerana anda telah melihat sampel tag seperti `[' Perjalanan perniagaan ', ' Pengembara solo ', ' Bilik Single ', ' Menginap 5 malam ', ' Dihantar dari peranti mudah alih ']`, anda boleh mula bertanya sama ada mungkin untuk mengurangkan pemprosesan yang perlu dilakukan. Nasib baik, ia boleh - tetapi pertama anda perlu mengikuti beberapa langkah untuk memastikan tag yang menarik. + +### Penapisan tag + +Ingat bahawa matlamat dataset adalah untuk menambah sentimen dan kolum yang akan membantu anda memilih hotel terbaik (untuk diri sendiri atau mungkin untuk tugas pelanggan yang meminta anda membuat bot cadangan hotel). Anda perlu bertanya kepada diri sendiri sama ada tag berguna atau tidak dalam dataset akhir. Berikut adalah satu tafsiran (jika anda memerlukan dataset untuk tujuan lain, tag yang berbeza mungkin kekal/keluar daripada pemilihan): + +1. Jenis perjalanan adalah relevan, dan itu harus kekal +2. Jenis kumpulan tetamu adalah penting, dan itu harus kekal +3. Jenis bilik, suite, atau studio yang tetamu menginap tidak relevan (semua hotel pada dasarnya mempunyai bilik yang sama) +4. Peranti yang ulasan dihantar tidak relevan +5. Bilangan malam pengulas menginap *mungkin* relevan jika anda mengaitkan penginapan yang lebih lama dengan mereka menyukai hotel lebih banyak, tetapi ini agak tidak relevan + +Secara ringkas, **kekalkan 2 jenis tag dan buang yang lain**. + +Pertama, anda tidak mahu mengira tag sehingga ia berada dalam format yang lebih baik, jadi itu bermakna membuang kurungan dan tanda petik. Anda boleh melakukannya dengan beberapa cara, tetapi anda mahukan cara yang paling pantas kerana ia boleh mengambil masa yang lama untuk memproses banyak data. Nasib baik, pandas mempunyai cara mudah untuk melakukan setiap langkah ini. + +```Python +# Remove opening and closing brackets +df.Tags = df.Tags.str.strip("[']") +# remove all quotes too +df.Tags = df.Tags.str.replace(" ', '", ",", regex = False) +``` + +Setiap tag menjadi sesuatu seperti: `Perjalanan perniagaan, Pengembara solo, Bilik Single, Menginap 5 malam, Dihantar dari peranti mudah alih`. + +Seterusnya kita menemui masalah. Beberapa ulasan, atau baris, mempunyai 5 kolum, ada yang 3, ada yang 6. Ini adalah hasil daripada cara dataset dicipta, dan sukar untuk diperbaiki. Anda mahu mendapatkan kiraan kekerapan setiap frasa, tetapi ia berada dalam susunan yang berbeza dalam setiap ulasan, jadi kiraan mungkin tidak tepat, dan hotel mungkin tidak mendapat tag yang sepatutnya. + +Sebaliknya, anda akan menggunakan susunan yang berbeza untuk kelebihan kita, kerana setiap tag adalah berbilang perkataan tetapi juga dipisahkan oleh koma! Cara paling mudah untuk melakukan ini adalah dengan mencipta 6 kolum sementara dengan setiap tag dimasukkan ke dalam kolum yang sepadan dengan susunannya dalam tag. Anda kemudian boleh menggabungkan 6 kolum menjadi satu kolum besar dan menjalankan kaedah `value_counts()` pada kolum yang terhasil. Apabila mencetaknya, anda akan melihat terdapat 2428 tag unik. Berikut adalah sampel kecil: + +| Tag | Kiraan | +| ------------------------------ | ------ | +| Perjalanan santai | 417778 | +| Dihantar dari peranti mudah alih | 307640 | +| Pasangan | 252294 | +| Menginap 1 malam | 193645 | +| Menginap 2 malam | 133937 | +| Pengembara solo | 108545 | +| Menginap 3 malam | 95821 | +| Perjalanan perniagaan | 82939 | +| Kumpulan | 65392 | +| Keluarga dengan anak kecil | 61015 | +| Menginap 4 malam | 47817 | +| Bilik Double | 35207 | +| Bilik Double Standard | 32248 | +| Bilik Double Superior | 31393 | +| Keluarga dengan anak besar | 26349 | +| Bilik Double Deluxe | 24823 | +| Bilik Double atau Twin | 22393 | +| Menginap 5 malam | 20845 | +| Bilik Double atau Twin Standard | 17483 | +| Bilik Double Classic | 16989 | +| Bilik Double atau Twin Superior | 13570 | +| 2 bilik | 12393 | + +Beberapa tag biasa seperti `Dihantar dari peranti mudah alih` tidak berguna kepada kita, jadi mungkin bijak untuk membuangnya sebelum mengira kejadian frasa, tetapi ia adalah operasi yang sangat pantas sehingga anda boleh membiarkannya dan mengabaikannya. + +### Membuang tag tempoh penginapan + +Membuang tag ini adalah langkah pertama, ia mengurangkan jumlah tag yang perlu dipertimbangkan sedikit. Perhatikan bahawa anda tidak membuangnya daripada dataset, hanya memilih untuk membuangnya daripada pertimbangan sebagai nilai untuk dikira/disimpan dalam dataset ulasan. + +| Tempoh penginapan | Kiraan | +| ------------------ | ------ | +| Menginap 1 malam | 193645 | +| Menginap 2 malam | 133937 | +| Menginap 3 malam | 95821 | +| Menginap 4 malam | 47817 | +| Menginap 5 malam | 20845 | +| Menginap 6 malam | 9776 | +| Menginap 7 malam | 7399 | +| Menginap 8 malam | 2502 | +| Menginap 9 malam | 1293 | +| ... | ... | + +Terdapat pelbagai jenis bilik, suite, studio, apartmen dan sebagainya. Semuanya bermaksud perkara yang hampir sama dan tidak relevan kepada anda, jadi buang mereka daripada pertimbangan. + +| Jenis bilik | Kiraan | +| ---------------------------- | ------ | +| Bilik Double | 35207 | +| Bilik Double Standard | 32248 | +| Bilik Double Superior | 31393 | +| Bilik Double Deluxe | 24823 | +| Bilik Double atau Twin | 22393 | +| Bilik Double atau Twin Standard | 17483 | +| Bilik Double Classic | 16989 | +| Bilik Double atau Twin Superior | 13570 | + +Akhirnya, dan ini menggembirakan (kerana ia tidak memerlukan banyak pemprosesan sama sekali), anda akan tinggal dengan tag berikut yang *berguna*: + +| Tag | Kiraan | +| --------------------------------------------- | ------ | +| Perjalanan santai | 417778 | +| Pasangan | 252294 | +| Pengembara solo | 108545 | +| Perjalanan perniagaan | 82939 | +| Kumpulan (digabungkan dengan Pengembara dengan rakan) | 67535 | +| Keluarga dengan anak kecil | 61015 | +| Keluarga dengan anak besar | 26349 | +| Dengan haiwan peliharaan | 1405 | + +Anda boleh berhujah bahawa `Pengembara dengan rakan` adalah sama dengan `Kumpulan` lebih kurang, dan itu adalah wajar untuk menggabungkan kedua-duanya seperti di atas. Kod untuk mengenal pasti tag yang betul adalah [notebook Tags](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb). + +Langkah terakhir adalah mencipta kolum baru untuk setiap tag ini. Kemudian, untuk setiap baris ulasan, jika kolum `Tag` sepadan dengan salah satu kolum baru, tambahkan 1, jika tidak, tambahkan 0. Hasil akhirnya adalah kiraan berapa ramai pengulas memilih hotel ini (secara agregat) untuk, contohnya, perniagaan vs santai, atau untuk membawa haiwan peliharaan, dan ini adalah maklumat berguna apabila mencadangkan hotel. + +```python +# Process the Tags into new columns +# The file Hotel_Reviews_Tags.py, identifies the most important tags +# Leisure trip, Couple, Solo traveler, Business trip, Group combined with Travelers with friends, +# Family with young children, Family with older children, With a pet +df["Leisure_trip"] = df.Tags.apply(lambda tag: 1 if "Leisure trip" in tag else 0) +df["Couple"] = df.Tags.apply(lambda tag: 1 if "Couple" in tag else 0) +df["Solo_traveler"] = df.Tags.apply(lambda tag: 1 if "Solo traveler" in tag else 0) +df["Business_trip"] = df.Tags.apply(lambda tag: 1 if "Business trip" in tag else 0) +df["Group"] = df.Tags.apply(lambda tag: 1 if "Group" in tag or "Travelers with friends" in tag else 0) +df["Family_with_young_children"] = df.Tags.apply(lambda tag: 1 if "Family with young children" in tag else 0) +df["Family_with_older_children"] = df.Tags.apply(lambda tag: 1 if "Family with older children" in tag else 0) +df["With_a_pet"] = df.Tags.apply(lambda tag: 1 if "With a pet" in tag else 0) + +``` + +### Simpan fail anda + +Akhirnya, simpan dataset seperti sekarang dengan nama baru. + +```python +df.drop(["Review_Total_Negative_Word_Counts", "Review_Total_Positive_Word_Counts", "days_since_review", "Total_Number_of_Reviews_Reviewer_Has_Given"], axis = 1, inplace=True) + +# Saving new data file with calculated columns +print("Saving results to Hotel_Reviews_Filtered.csv") +df.to_csv(r'../data/Hotel_Reviews_Filtered.csv', index = False) +``` + +## Operasi Analisis Sentimen + +Dalam bahagian terakhir ini, anda akan menggunakan analisis sentimen pada kolum ulasan dan menyimpan hasilnya dalam dataset. + +## Latihan: muat dan simpan data yang ditapis + +Perhatikan bahawa sekarang anda memuat dataset yang ditapis yang disimpan dalam bahagian sebelumnya, **bukan** dataset asal. + +```python +import time +import pandas as pd +import nltk as nltk +from nltk.corpus import stopwords +from nltk.sentiment.vader import SentimentIntensityAnalyzer +nltk.download('vader_lexicon') + +# Load the filtered hotel reviews from CSV +df = pd.read_csv('../../data/Hotel_Reviews_Filtered.csv') + +# You code will be added here + + +# Finally remember to save the hotel reviews with new NLP data added +print("Saving results to Hotel_Reviews_NLP.csv") +df.to_csv(r'../data/Hotel_Reviews_NLP.csv', index = False) +``` + +### Membuang kata-kata biasa + +Jika anda menjalankan Analisis Sentimen pada kolum ulasan Negatif dan Positif, ia boleh mengambil masa yang lama. Diuji pada komputer riba ujian yang berkuasa dengan CPU pantas, ia mengambil masa 12 - 14 minit bergantung pada perpustakaan sentimen yang digunakan. Itu adalah masa yang (relatif) lama, jadi berbaloi untuk menyiasat jika ia boleh dipercepatkan. + +Membuang kata-kata biasa, atau kata-kata Inggeris yang biasa yang tidak mengubah sentimen ayat, adalah langkah pertama. Dengan membuangnya, analisis sentimen sepatutnya berjalan lebih pantas, tetapi tidak kurang tepat (kerana kata-kata biasa tidak mempengaruhi sentimen, tetapi ia memperlahankan analisis). + +Ulasan negatif yang paling panjang adalah 395 perkataan, tetapi selepas membuang kata-kata biasa, ia menjadi 195 perkataan. + +Membuang kata-kata biasa juga merupakan operasi yang pantas, membuang kata-kata biasa daripada 2 kolum ulasan dalam 515,000 baris mengambil masa 3.3 saat pada peranti ujian. Ia mungkin mengambil masa sedikit lebih atau kurang untuk anda bergantung pada kelajuan CPU peranti anda, RAM, sama ada anda mempunyai SSD atau tidak, dan beberapa faktor lain. Kependekan relatif operasi ini bermakna jika ia meningkatkan masa analisis sentimen, maka ia berbaloi untuk dilakukan. + +```python +from nltk.corpus import stopwords + +# Load the hotel reviews from CSV +df = pd.read_csv("../../data/Hotel_Reviews_Filtered.csv") + +# Remove stop words - can be slow for a lot of text! +# Ryan Han (ryanxjhan on Kaggle) has a great post measuring performance of different stop words removal approaches +# https://www.kaggle.com/ryanxjhan/fast-stop-words-removal # using the approach that Ryan recommends +start = time.time() +cache = set(stopwords.words("english")) +def remove_stopwords(review): + text = " ".join([word for word in review.split() if word not in cache]) + return text + +# Remove the stop words from both columns +df.Negative_Review = df.Negative_Review.apply(remove_stopwords) +df.Positive_Review = df.Positive_Review.apply(remove_stopwords) +``` + +### Melakukan analisis sentimen + +Sekarang anda harus mengira analisis sentimen untuk kedua-dua kolum ulasan negatif dan positif, dan menyimpan hasilnya dalam 2 kolum baru. Ujian sentimen adalah untuk membandingkannya dengan skor pengulas untuk ulasan yang sama. Sebagai contoh, jika sentimen menganggap ulasan negatif mempunyai sentimen 1 (sentimen yang sangat positif) dan sentimen ulasan positif juga 1, tetapi pengulas memberikan hotel skor terendah yang mungkin, maka sama ada teks ulasan tidak sepadan dengan skor, atau penganalisis sentimen tidak dapat mengenali sentimen dengan betul. Anda harus menjangkakan beberapa skor sentimen yang benar-benar salah, dan sering kali itu dapat dijelaskan, contohnya ulasan mungkin sangat sarkastik "Sudah tentu saya SUKA tidur di bilik tanpa pemanas" dan penganalisis sentimen menganggap itu adalah sentimen positif, walaupun manusia yang membacanya akan tahu ia adalah sindiran. +NLTK menyediakan pelbagai penganalisis sentimen untuk dipelajari, dan anda boleh menggantikannya serta melihat sama ada sentimen lebih atau kurang tepat. Analisis sentimen VADER digunakan di sini. + +> Hutto, C.J. & Gilbert, E.E. (2014). VADER: Model Berasaskan Peraturan yang Ringkas untuk Analisis Sentimen Teks Media Sosial. Persidangan Antarabangsa Kelapan mengenai Weblogs dan Media Sosial (ICWSM-14). Ann Arbor, MI, Jun 2014. + +```python +from nltk.sentiment.vader import SentimentIntensityAnalyzer + +# Create the vader sentiment analyser (there are others in NLTK you can try too) +vader_sentiment = SentimentIntensityAnalyzer() +# Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014. + +# There are 3 possibilities of input for a review: +# It could be "No Negative", in which case, return 0 +# It could be "No Positive", in which case, return 0 +# It could be a review, in which case calculate the sentiment +def calc_sentiment(review): + if review == "No Negative" or review == "No Positive": + return 0 + return vader_sentiment.polarity_scores(review)["compound"] +``` + +Kemudian dalam program anda apabila anda bersedia untuk mengira sentimen, anda boleh menerapkannya pada setiap ulasan seperti berikut: + +```python +# Add a negative sentiment and positive sentiment column +print("Calculating sentiment columns for both positive and negative reviews") +start = time.time() +df["Negative_Sentiment"] = df.Negative_Review.apply(calc_sentiment) +df["Positive_Sentiment"] = df.Positive_Review.apply(calc_sentiment) +end = time.time() +print("Calculating sentiment took " + str(round(end - start, 2)) + " seconds") +``` + +Ini mengambil masa kira-kira 120 saat pada komputer saya, tetapi ia akan berbeza pada setiap komputer. Jika anda ingin mencetak hasilnya dan melihat sama ada sentimen sepadan dengan ulasan: + +```python +df = df.sort_values(by=["Negative_Sentiment"], ascending=True) +print(df[["Negative_Review", "Negative_Sentiment"]]) +df = df.sort_values(by=["Positive_Sentiment"], ascending=True) +print(df[["Positive_Review", "Positive_Sentiment"]]) +``` + +Perkara terakhir yang perlu dilakukan dengan fail sebelum menggunakannya dalam cabaran adalah menyimpannya! Anda juga harus mempertimbangkan untuk menyusun semula semua lajur baru anda supaya ia mudah digunakan (untuk manusia, ini adalah perubahan kosmetik). + +```python +# Reorder the columns (This is cosmetic, but to make it easier to explore the data later) +df = df.reindex(["Hotel_Name", "Hotel_Address", "Total_Number_of_Reviews", "Average_Score", "Reviewer_Score", "Negative_Sentiment", "Positive_Sentiment", "Reviewer_Nationality", "Leisure_trip", "Couple", "Solo_traveler", "Business_trip", "Group", "Family_with_young_children", "Family_with_older_children", "With_a_pet", "Negative_Review", "Positive_Review"], axis=1) + +print("Saving results to Hotel_Reviews_NLP.csv") +df.to_csv(r"../data/Hotel_Reviews_NLP.csv", index = False) +``` + +Anda harus menjalankan keseluruhan kod untuk [notebook analisis](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) (selepas anda menjalankan [notebook penapisan anda](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) untuk menghasilkan fail Hotel_Reviews_Filtered.csv). + +Untuk mengulas semula, langkah-langkahnya adalah: + +1. Fail dataset asal **Hotel_Reviews.csv** diterokai dalam pelajaran sebelumnya dengan [notebook penerokaan](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb) +2. Hotel_Reviews.csv ditapis oleh [notebook penapisan](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) menghasilkan **Hotel_Reviews_Filtered.csv** +3. Hotel_Reviews_Filtered.csv diproses oleh [notebook analisis sentimen](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) menghasilkan **Hotel_Reviews_NLP.csv** +4. Gunakan Hotel_Reviews_NLP.csv dalam Cabaran NLP di bawah + +### Kesimpulan + +Apabila anda bermula, anda mempunyai dataset dengan lajur dan data tetapi tidak semuanya boleh disahkan atau digunakan. Anda telah meneroka data, menapis apa yang tidak diperlukan, menukar tag kepada sesuatu yang berguna, mengira purata anda sendiri, menambah beberapa lajur sentimen dan diharapkan, mempelajari beberapa perkara menarik tentang pemprosesan teks semula jadi. + +## [Kuiz selepas kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Cabaran + +Sekarang setelah anda menganalisis dataset anda untuk sentimen, cuba gunakan strategi yang telah anda pelajari dalam kurikulum ini (pengelompokan, mungkin?) untuk menentukan corak sekitar sentimen. + +## Ulasan & Kajian Kendiri + +Ambil [modul pembelajaran ini](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott) untuk mempelajari lebih lanjut dan menggunakan alat yang berbeza untuk meneroka sentimen dalam teks. + +## Tugasan + +[Cuba dataset yang berbeza](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/6-NLP/5-Hotel-Reviews-2/assignment.md b/translations/ms/6-NLP/5-Hotel-Reviews-2/assignment.md new file mode 100644 index 00000000..63373dd8 --- /dev/null +++ b/translations/ms/6-NLP/5-Hotel-Reviews-2/assignment.md @@ -0,0 +1,25 @@ + +# Cuba dataset yang berbeza + +## Arahan + +Sekarang anda telah mempelajari tentang menggunakan NLTK untuk menetapkan sentimen kepada teks, cuba dataset yang berbeza. Anda mungkin perlu melakukan pemprosesan data mengenainya, jadi buatlah notebook dan dokumentasikan proses pemikiran anda. Apa yang anda temui? + +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | ----------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | ---------------------- | +| | Notebook lengkap dan dataset disediakan dengan sel yang didokumentasikan dengan baik menerangkan bagaimana sentimen ditetapkan | Notebook kekurangan penjelasan yang baik | Notebook mempunyai kelemahan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md b/translations/ms/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md new file mode 100644 index 00000000..c960a07b --- /dev/null +++ b/translations/ms/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/6-NLP/5-Hotel-Reviews-2/solution/R/README.md b/translations/ms/6-NLP/5-Hotel-Reviews-2/solution/R/README.md new file mode 100644 index 00000000..ff60393c --- /dev/null +++ b/translations/ms/6-NLP/5-Hotel-Reviews-2/solution/R/README.md @@ -0,0 +1,15 @@ + +ini adalah pemegang tempat sementara + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/6-NLP/README.md b/translations/ms/6-NLP/README.md new file mode 100644 index 00000000..92a2b29f --- /dev/null +++ b/translations/ms/6-NLP/README.md @@ -0,0 +1,38 @@ + +# Memulakan dengan pemprosesan bahasa semula jadi + +Pemprosesan bahasa semula jadi (NLP) adalah keupayaan program komputer untuk memahami bahasa manusia seperti yang dituturkan dan ditulis -- dirujuk sebagai bahasa semula jadi. Ia merupakan komponen kecerdasan buatan (AI). NLP telah wujud selama lebih daripada 50 tahun dan berakar umbi dalam bidang linguistik. Keseluruhan bidang ini bertujuan membantu mesin memahami dan memproses bahasa manusia. Ini kemudian boleh digunakan untuk melaksanakan tugas seperti semakan ejaan atau terjemahan mesin. Ia mempunyai pelbagai aplikasi dunia nyata dalam beberapa bidang, termasuk penyelidikan perubatan, enjin carian dan kecerdasan perniagaan. + +## Topik serantau: Bahasa dan kesusasteraan Eropah serta hotel romantik di Eropah ❤️ + +Dalam bahagian kurikulum ini, anda akan diperkenalkan kepada salah satu penggunaan pembelajaran mesin yang paling meluas: pemprosesan bahasa semula jadi (NLP). Berasal daripada linguistik komputer, kategori kecerdasan buatan ini adalah jambatan antara manusia dan mesin melalui komunikasi suara atau teks. + +Dalam pelajaran ini, kita akan mempelajari asas-asas NLP dengan membina bot perbualan kecil untuk memahami bagaimana pembelajaran mesin membantu menjadikan perbualan ini semakin 'bijak'. Anda akan mengembara ke masa lampau, berbual dengan Elizabeth Bennett dan Mr. Darcy daripada novel klasik Jane Austen, **Pride and Prejudice**, yang diterbitkan pada tahun 1813. Kemudian, anda akan memperluaskan pengetahuan anda dengan mempelajari analisis sentimen melalui ulasan hotel di Eropah. + +![Buku Pride and Prejudice dan teh](../../../6-NLP/images/p&p.jpg) +> Foto oleh Elaine Howlin di Unsplash + +## Pelajaran + +1. [Pengenalan kepada pemprosesan bahasa semula jadi](1-Introduction-to-NLP/README.md) +2. [Tugas dan teknik NLP yang biasa](2-Tasks/README.md) +3. [Terjemahan dan analisis sentimen dengan pembelajaran mesin](3-Translation-Sentiment/README.md) +4. [Menyediakan data anda](4-Hotel-Reviews-1/README.md) +5. [NLTK untuk Analisis Sentimen](5-Hotel-Reviews-2/README.md) + +## Kredit + +Pelajaran pemprosesan bahasa semula jadi ini ditulis dengan ☕ oleh [Stephen Howell](https://twitter.com/Howell_MSFT) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/6-NLP/data/README.md b/translations/ms/6-NLP/data/README.md new file mode 100644 index 00000000..ce5ec5fc --- /dev/null +++ b/translations/ms/6-NLP/data/README.md @@ -0,0 +1,15 @@ + +Muat turun data ulasan hotel ke folder ini. + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/7-TimeSeries/1-Introduction/README.md b/translations/ms/7-TimeSeries/1-Introduction/README.md new file mode 100644 index 00000000..2fa6a871 --- /dev/null +++ b/translations/ms/7-TimeSeries/1-Introduction/README.md @@ -0,0 +1,199 @@ + +# Pengenalan kepada ramalan siri masa + +![Ringkasan siri masa dalam sketchnote](../../../../sketchnotes/ml-timeseries.png) + +> Sketchnote oleh [Tomomi Imura](https://www.twitter.com/girlie_mac) + +Dalam pelajaran ini dan pelajaran berikutnya, anda akan mempelajari sedikit tentang ramalan siri masa, satu bahagian menarik dan bernilai dalam repertoir seorang saintis ML yang kurang dikenali berbanding topik lain. Ramalan siri masa adalah seperti 'bola kristal': berdasarkan prestasi masa lalu sesuatu pemboleh ubah seperti harga, anda boleh meramalkan nilai potensinya di masa depan. + +[![Pengenalan kepada ramalan siri masa](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](https://youtu.be/cBojo1hsHiI "Pengenalan kepada ramalan siri masa") + +> 🎥 Klik imej di atas untuk video tentang ramalan siri masa + +## [Kuiz sebelum kuliah](https://ff-quizzes.netlify.app/en/ml/) + +Ia adalah bidang yang berguna dan menarik dengan nilai sebenar kepada perniagaan, memandangkan aplikasinya secara langsung kepada masalah harga, inventori, dan isu rantaian bekalan. Walaupun teknik pembelajaran mendalam telah mula digunakan untuk mendapatkan lebih banyak wawasan bagi meramalkan prestasi masa depan, ramalan siri masa kekal sebagai bidang yang banyak dipengaruhi oleh teknik ML klasik. + +> Kurikulum siri masa yang berguna dari Penn State boleh didapati [di sini](https://online.stat.psu.edu/stat510/lesson/1) + +## Pengenalan + +Bayangkan anda menguruskan rangkaian meter parkir pintar yang menyediakan data tentang kekerapan ia digunakan dan untuk berapa lama sepanjang masa. + +> Bagaimana jika anda boleh meramalkan, berdasarkan prestasi masa lalu meter tersebut, nilai masa depannya mengikut undang-undang penawaran dan permintaan? + +Meramalkan dengan tepat bila untuk bertindak bagi mencapai matlamat anda adalah cabaran yang boleh ditangani oleh ramalan siri masa. Ia mungkin tidak menggembirakan orang ramai apabila dikenakan bayaran lebih tinggi pada waktu sibuk ketika mereka mencari tempat parkir, tetapi ia pasti cara untuk menjana pendapatan bagi membersihkan jalan! + +Mari kita terokai beberapa jenis algoritma siri masa dan mulakan buku nota untuk membersihkan dan menyediakan data. Data yang akan anda analisis diambil daripada pertandingan ramalan GEFCom2014. Ia terdiri daripada 3 tahun nilai beban elektrik dan suhu setiap jam antara tahun 2012 dan 2014. Berdasarkan corak sejarah beban elektrik dan suhu, anda boleh meramalkan nilai masa depan beban elektrik. + +Dalam contoh ini, anda akan belajar bagaimana untuk meramalkan satu langkah masa ke hadapan, menggunakan data beban sejarah sahaja. Sebelum memulakan, bagaimanapun, adalah berguna untuk memahami apa yang berlaku di belakang tabir. + +## Beberapa definisi + +Apabila menemui istilah 'siri masa', anda perlu memahami penggunaannya dalam beberapa konteks yang berbeza. + +🎓 **Siri masa** + +Dalam matematik, "siri masa adalah satu siri titik data yang diindeks (atau disenaraikan atau diplotkan) mengikut susunan masa. Selalunya, siri masa adalah urutan yang diambil pada titik masa yang sama jaraknya." Contoh siri masa ialah nilai penutupan harian [Dow Jones Industrial Average](https://wikipedia.org/wiki/Time_series). Penggunaan plot siri masa dan pemodelan statistik sering ditemui dalam pemprosesan isyarat, ramalan cuaca, ramalan gempa bumi, dan bidang lain di mana peristiwa berlaku dan titik data boleh diplotkan sepanjang masa. + +🎓 **Analisis siri masa** + +Analisis siri masa adalah analisis data siri masa yang disebutkan di atas. Data siri masa boleh mengambil bentuk yang berbeza, termasuk 'siri masa terganggu' yang mengesan corak dalam evolusi siri masa sebelum dan selepas peristiwa yang mengganggu. Jenis analisis yang diperlukan untuk siri masa bergantung pada sifat data. Data siri masa itu sendiri boleh berbentuk siri nombor atau aksara. + +Analisis yang akan dilakukan menggunakan pelbagai kaedah, termasuk domain frekuensi dan domain masa, linear dan tidak linear, dan banyak lagi. [Ketahui lebih lanjut](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) tentang pelbagai cara untuk menganalisis jenis data ini. + +🎓 **Ramalan siri masa** + +Ramalan siri masa adalah penggunaan model untuk meramalkan nilai masa depan berdasarkan corak yang ditunjukkan oleh data yang dikumpulkan sebelumnya seperti yang berlaku pada masa lalu. Walaupun mungkin menggunakan model regresi untuk meneroka data siri masa, dengan indeks masa sebagai pemboleh ubah x pada plot, data sedemikian paling baik dianalisis menggunakan jenis model khas. + +Data siri masa adalah senarai pemerhatian yang teratur, tidak seperti data yang boleh dianalisis oleh regresi linear. Yang paling biasa ialah ARIMA, akronim yang bermaksud "Autoregressive Integrated Moving Average". + +[Model ARIMA](https://online.stat.psu.edu/stat510/lesson/1/1.1) "mengaitkan nilai semasa siri dengan nilai masa lalu dan kesilapan ramalan masa lalu." Ia paling sesuai untuk menganalisis data domain masa, di mana data diatur mengikut masa. + +> Terdapat beberapa jenis model ARIMA, yang boleh anda pelajari [di sini](https://people.duke.edu/~rnau/411arim.htm) dan yang akan anda sentuh dalam pelajaran seterusnya. + +Dalam pelajaran seterusnya, anda akan membina model ARIMA menggunakan [Univariate Time Series](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm), yang memberi tumpuan kepada satu pemboleh ubah yang mengubah nilainya sepanjang masa. Contoh jenis data ini ialah [set data ini](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm) yang merekodkan kepekatan C02 bulanan di Observatori Mauna Loa: + +| CO2 | YearMonth | Year | Month | +| :----: | :-------: | :---: | :---: | +| 330.62 | 1975.04 | 1975 | 1 | +| 331.40 | 1975.13 | 1975 | 2 | +| 331.87 | 1975.21 | 1975 | 3 | +| 333.18 | 1975.29 | 1975 | 4 | +| 333.92 | 1975.38 | 1975 | 5 | +| 333.43 | 1975.46 | 1975 | 6 | +| 331.85 | 1975.54 | 1975 | 7 | +| 330.01 | 1975.63 | 1975 | 8 | +| 328.51 | 1975.71 | 1975 | 9 | +| 328.41 | 1975.79 | 1975 | 10 | +| 329.25 | 1975.88 | 1975 | 11 | +| 330.97 | 1975.96 | 1975 | 12 | + +✅ Kenal pasti pemboleh ubah yang berubah sepanjang masa dalam set data ini + +## Ciri-ciri data siri masa yang perlu dipertimbangkan + +Apabila melihat data siri masa, anda mungkin perasan bahawa ia mempunyai [ciri-ciri tertentu](https://online.stat.psu.edu/stat510/lesson/1/1.1) yang perlu anda ambil kira dan kurangkan untuk memahami coraknya dengan lebih baik. Jika anda menganggap data siri masa sebagai berpotensi memberikan 'isyarat' yang ingin anda analisis, ciri-ciri ini boleh dianggap sebagai 'gangguan'. Anda sering perlu mengurangkan 'gangguan' ini dengan mengimbangi beberapa ciri ini menggunakan teknik statistik tertentu. + +Berikut adalah beberapa konsep yang perlu anda ketahui untuk dapat bekerja dengan siri masa: + +🎓 **Trend** + +Trend ditakrifkan sebagai peningkatan dan penurunan yang boleh diukur sepanjang masa. [Baca lebih lanjut](https://machinelearningmastery.com/time-series-trends-in-python). Dalam konteks siri masa, ia berkaitan dengan cara menggunakan dan, jika perlu, menghapuskan trend daripada siri masa anda. + +🎓 **[Musim](https://machinelearningmastery.com/time-series-seasonality-with-python/)** + +Musim ditakrifkan sebagai turun naik berkala, seperti lonjakan jualan semasa musim perayaan, contohnya. [Lihat](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm) bagaimana jenis plot yang berbeza memaparkan musim dalam data. + +🎓 **Nilai luar** + +Nilai luar adalah jauh daripada varians data standard. + +🎓 **Kitaran jangka panjang** + +Bebas daripada musim, data mungkin memaparkan kitaran jangka panjang seperti kemerosotan ekonomi yang berlangsung lebih lama daripada setahun. + +🎓 **Varians tetap** + +Sepanjang masa, sesetengah data memaparkan turun naik tetap, seperti penggunaan tenaga setiap hari dan malam. + +🎓 **Perubahan mendadak** + +Data mungkin memaparkan perubahan mendadak yang mungkin memerlukan analisis lanjut. Penutupan perniagaan secara mendadak akibat COVID, contohnya, menyebabkan perubahan dalam data. + +✅ Berikut adalah [plot siri masa sampel](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python) yang menunjukkan perbelanjaan mata wang dalam permainan setiap hari selama beberapa tahun. Bolehkah anda mengenal pasti mana-mana ciri yang disenaraikan di atas dalam data ini? + +![Perbelanjaan mata wang dalam permainan](../../../../7-TimeSeries/1-Introduction/images/currency.png) + +## Latihan - bermula dengan data penggunaan kuasa + +Mari kita mulakan dengan mencipta model siri masa untuk meramalkan penggunaan kuasa masa depan berdasarkan penggunaan masa lalu. + +> Data dalam contoh ini diambil daripada pertandingan ramalan GEFCom2014. Ia terdiri daripada 3 tahun nilai beban elektrik dan suhu setiap jam antara tahun 2012 dan 2014. +> +> Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli dan Rob J. Hyndman, "Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond", International Journal of Forecasting, vol.32, no.3, pp 896-913, July-September, 2016. + +1. Dalam folder `working` pelajaran ini, buka fail _notebook.ipynb_. Mulakan dengan menambah perpustakaan yang akan membantu anda memuatkan dan memvisualisasikan data + + ```python + import os + import matplotlib.pyplot as plt + from common.utils import load_data + %matplotlib inline + ``` + + Perhatikan, anda menggunakan fail dari folder `common` yang disertakan yang menyediakan persekitaran anda dan mengendalikan muat turun data. + +2. Seterusnya, periksa data sebagai dataframe dengan memanggil `load_data()` dan `head()`: + + ```python + data_dir = './data' + energy = load_data(data_dir)[['load']] + energy.head() + ``` + + Anda boleh melihat bahawa terdapat dua lajur yang mewakili tarikh dan beban: + + | | load | + | :-----------------: | :----: | + | 2012-01-01 00:00:00 | 2698.0 | + | 2012-01-01 01:00:00 | 2558.0 | + | 2012-01-01 02:00:00 | 2444.0 | + | 2012-01-01 03:00:00 | 2402.0 | + | 2012-01-01 04:00:00 | 2403.0 | + +3. Sekarang, plot data dengan memanggil `plot()`: + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![plot tenaga](../../../../7-TimeSeries/1-Introduction/images/energy-plot.png) + +4. Sekarang, plot minggu pertama Julai 2014, dengan memberikannya sebagai input kepada `energy` dalam pola `[dari tarikh]: [ke tarikh]`: + + ```python + energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![july](../../../../7-TimeSeries/1-Introduction/images/july-2014.png) + + Plot yang cantik! Lihat plot ini dan lihat jika anda boleh menentukan mana-mana ciri yang disenaraikan di atas. Apa yang boleh kita simpulkan dengan memvisualisasikan data? + +Dalam pelajaran seterusnya, anda akan mencipta model ARIMA untuk menghasilkan beberapa ramalan. + +--- + +## 🚀Cabaran + +Buat senarai semua industri dan bidang penyelidikan yang anda boleh fikirkan yang akan mendapat manfaat daripada ramalan siri masa. Bolehkah anda memikirkan aplikasi teknik ini dalam seni? Dalam Ekonometrik? Ekologi? Runcit? Industri? Kewangan? Di mana lagi? + +## [Kuiz selepas kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Kajian & Pembelajaran Kendiri + +Walaupun kita tidak akan membincangkannya di sini, rangkaian neural kadangkala digunakan untuk meningkatkan kaedah klasik ramalan siri masa. Baca lebih lanjut mengenainya [dalam artikel ini](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412) + +## Tugasan + +[Visualisasikan lebih banyak siri masa](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/7-TimeSeries/1-Introduction/assignment.md b/translations/ms/7-TimeSeries/1-Introduction/assignment.md new file mode 100644 index 00000000..6f4fb074 --- /dev/null +++ b/translations/ms/7-TimeSeries/1-Introduction/assignment.md @@ -0,0 +1,25 @@ + +# Visualisasi Beberapa Lagi Siri Masa + +## Arahan + +Anda telah mula belajar tentang Ramalan Siri Masa dengan melihat jenis data yang memerlukan pemodelan khas ini. Anda telah memvisualisasikan beberapa data berkaitan tenaga. Sekarang, cari data lain yang akan mendapat manfaat daripada Ramalan Siri Masa. Cari tiga contoh (cuba [Kaggle](https://kaggle.com) dan [Azure Open Datasets](https://azure.microsoft.com/en-us/services/open-datasets/catalog/?WT.mc_id=academic-77952-leestott)) dan buat sebuah notebook untuk memvisualisasikannya. Catatkan sebarang ciri khas yang mereka ada (musim, perubahan mendadak, atau trend lain) dalam notebook tersebut. + +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | ------------------------------------------------------ | ---------------------------------------------------- | ----------------------------------------------------------------------------------------- | +| | Tiga set data diplot dan dijelaskan dalam notebook | Dua set data diplot dan dijelaskan dalam notebook | Beberapa set data diplot atau dijelaskan dalam notebook atau data yang disediakan tidak mencukupi | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/7-TimeSeries/1-Introduction/solution/Julia/README.md b/translations/ms/7-TimeSeries/1-Introduction/solution/Julia/README.md new file mode 100644 index 00000000..22471a6c --- /dev/null +++ b/translations/ms/7-TimeSeries/1-Introduction/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/7-TimeSeries/1-Introduction/solution/R/README.md b/translations/ms/7-TimeSeries/1-Introduction/solution/R/README.md new file mode 100644 index 00000000..f95ff868 --- /dev/null +++ b/translations/ms/7-TimeSeries/1-Introduction/solution/R/README.md @@ -0,0 +1,15 @@ + +ini adalah pemegang tempat sementara + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/7-TimeSeries/2-ARIMA/README.md b/translations/ms/7-TimeSeries/2-ARIMA/README.md new file mode 100644 index 00000000..98c7915c --- /dev/null +++ b/translations/ms/7-TimeSeries/2-ARIMA/README.md @@ -0,0 +1,409 @@ + +# Ramalan siri masa dengan ARIMA + +Dalam pelajaran sebelumnya, anda telah mempelajari sedikit tentang ramalan siri masa dan memuatkan dataset yang menunjukkan turun naik beban elektrik sepanjang tempoh masa. + +[![Pengenalan kepada ARIMA](https://img.youtube.com/vi/IUSk-YDau10/0.jpg)](https://youtu.be/IUSk-YDau10 "Pengenalan kepada ARIMA") + +> 🎥 Klik imej di atas untuk video: Pengenalan ringkas kepada model ARIMA. Contoh dilakukan dalam R, tetapi konsepnya adalah universal. + +## [Kuiz pra-pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Pengenalan + +Dalam pelajaran ini, anda akan meneroka cara khusus untuk membina model dengan [ARIMA: *A*uto*R*egressive *I*ntegrated *M*oving *A*verage](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average). Model ARIMA sangat sesuai untuk data yang menunjukkan [ketidakstasioner](https://wikipedia.org/wiki/Stationary_process). + +## Konsep umum + +Untuk bekerja dengan ARIMA, terdapat beberapa konsep yang perlu anda ketahui: + +- 🎓 **Stasioneriti**. Dalam konteks statistik, stasioneriti merujuk kepada data yang taburannya tidak berubah apabila dialihkan dalam masa. Data yang tidak stasioner menunjukkan turun naik akibat trend yang perlu diubah untuk dianalisis. Musim, sebagai contoh, boleh memperkenalkan turun naik dalam data dan boleh dihapuskan melalui proses 'seasonal-differencing'. + +- 🎓 **[Differencing](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**. Differencing data, sekali lagi dalam konteks statistik, merujuk kepada proses mengubah data yang tidak stasioner untuk menjadikannya stasioner dengan menghapuskan trend yang tidak tetap. "Differencing menghapuskan perubahan dalam tahap siri masa, menghapuskan trend dan musim, dan seterusnya menstabilkan purata siri masa." [Kertas oleh Shixiong et al](https://arxiv.org/abs/1904.07632) + +## ARIMA dalam konteks siri masa + +Mari kita pecahkan bahagian ARIMA untuk memahami dengan lebih baik bagaimana ia membantu kita memodelkan siri masa dan membuat ramalan terhadapnya. + +- **AR - untuk AutoRegressive**. Model autoregressive, seperti namanya, melihat 'ke belakang' dalam masa untuk menganalisis nilai sebelumnya dalam data anda dan membuat andaian mengenainya. Nilai sebelumnya ini dipanggil 'lags'. Contohnya ialah data yang menunjukkan jualan bulanan pensel. Jumlah jualan setiap bulan akan dianggap sebagai 'pembolehubah yang berkembang' dalam dataset. Model ini dibina sebagai "pembolehubah yang berkembang diregreskan pada nilai lagged (iaitu, sebelumnya) sendiri." [wikipedia](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) + +- **I - untuk Integrated**. Berbeza dengan model 'ARMA' yang serupa, 'I' dalam ARIMA merujuk kepada aspek *[integrated](https://wikipedia.org/wiki/Order_of_integration)*. Data 'diintegrasikan' apabila langkah-langkah differencing digunakan untuk menghapuskan ketidakstasioner. + +- **MA - untuk Moving Average**. Aspek [moving-average](https://wikipedia.org/wiki/Moving-average_model) model ini merujuk kepada pembolehubah output yang ditentukan dengan memerhatikan nilai lag semasa dan sebelumnya. + +Kesimpulan: ARIMA digunakan untuk membuat model sesuai dengan bentuk khas data siri masa sebaik mungkin. + +## Latihan - bina model ARIMA + +Buka folder [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/working) dalam pelajaran ini dan cari fail [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/2-ARIMA/working/notebook.ipynb). + +1. Jalankan notebook untuk memuatkan pustaka Python `statsmodels`; anda akan memerlukan ini untuk model ARIMA. + +1. Muatkan pustaka yang diperlukan. + +1. Sekarang, muatkan beberapa pustaka lagi yang berguna untuk memplot data: + + ```python + import os + import warnings + import matplotlib.pyplot as plt + import numpy as np + import pandas as pd + import datetime as dt + import math + + from pandas.plotting import autocorrelation_plot + from statsmodels.tsa.statespace.sarimax import SARIMAX + from sklearn.preprocessing import MinMaxScaler + from common.utils import load_data, mape + from IPython.display import Image + + %matplotlib inline + pd.options.display.float_format = '{:,.2f}'.format + np.set_printoptions(precision=2) + warnings.filterwarnings("ignore") # specify to ignore warning messages + ``` + +1. Muatkan data dari fail `/data/energy.csv` ke dalam dataframe Pandas dan lihat: + + ```python + energy = load_data('./data')[['load']] + energy.head(10) + ``` + +1. Plot semua data tenaga yang tersedia dari Januari 2012 hingga Disember 2014. Tidak ada kejutan kerana kita telah melihat data ini dalam pelajaran terakhir: + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + Sekarang, mari kita bina model! + +### Cipta dataset latihan dan ujian + +Sekarang data anda telah dimuatkan, anda boleh memisahkannya kepada set latihan dan ujian. Anda akan melatih model anda pada set latihan. Seperti biasa, selepas model selesai dilatih, anda akan menilai ketepatannya menggunakan set ujian. Anda perlu memastikan bahawa set ujian meliputi tempoh masa yang lebih lewat daripada set latihan untuk memastikan model tidak mendapat maklumat daripada tempoh masa akan datang. + +1. Peruntukkan tempoh dua bulan dari 1 September hingga 31 Oktober 2014 kepada set latihan. Set ujian akan merangkumi tempoh dua bulan dari 1 November hingga 31 Disember 2014: + + ```python + train_start_dt = '2014-11-01 00:00:00' + test_start_dt = '2014-12-30 00:00:00' + ``` + + Oleh kerana data ini mencerminkan penggunaan tenaga harian, terdapat corak bermusim yang kuat, tetapi penggunaan paling serupa dengan penggunaan pada hari-hari yang lebih baru. + +1. Visualisasikan perbezaan: + + ```python + energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ + .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ + .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![data latihan dan ujian](../../../../7-TimeSeries/2-ARIMA/images/train-test.png) + + Oleh itu, menggunakan tetingkap masa yang agak kecil untuk melatih data sepatutnya mencukupi. + + > Nota: Oleh kerana fungsi yang kita gunakan untuk memuatkan model ARIMA menggunakan pengesahan dalam-sampel semasa pemuatan, kita akan mengabaikan data pengesahan. + +### Sediakan data untuk latihan + +Sekarang, anda perlu menyediakan data untuk latihan dengan melakukan penapisan dan penskalaan data anda. Tapis dataset anda untuk hanya memasukkan tempoh masa dan lajur yang diperlukan, dan skala untuk memastikan data diproyeksikan dalam selang 0,1. + +1. Tapis dataset asal untuk hanya memasukkan tempoh masa yang disebutkan sebelum ini bagi setiap set dan hanya memasukkan lajur 'load' yang diperlukan serta tarikh: + + ```python + train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] + test = energy.copy()[energy.index >= test_start_dt][['load']] + + print('Training data shape: ', train.shape) + print('Test data shape: ', test.shape) + ``` + + Anda boleh melihat bentuk data: + + ```output + Training data shape: (1416, 1) + Test data shape: (48, 1) + ``` + +1. Skala data untuk berada dalam julat (0, 1). + + ```python + scaler = MinMaxScaler() + train['load'] = scaler.fit_transform(train) + train.head(10) + ``` + +1. Visualisasikan data asal vs. data yang telah diskala: + + ```python + energy[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']].rename(columns={'load':'original load'}).plot.hist(bins=100, fontsize=12) + train.rename(columns={'load':'scaled load'}).plot.hist(bins=100, fontsize=12) + plt.show() + ``` + + ![asal](../../../../7-TimeSeries/2-ARIMA/images/original.png) + + > Data asal + + ![diskala](../../../../7-TimeSeries/2-ARIMA/images/scaled.png) + + > Data yang telah diskala + +1. Sekarang setelah anda menentukur data yang telah diskala, anda boleh menskalakan data ujian: + + ```python + test['load'] = scaler.transform(test) + test.head() + ``` + +### Laksanakan ARIMA + +Sudah tiba masanya untuk melaksanakan ARIMA! Anda kini akan menggunakan pustaka `statsmodels` yang telah anda pasang sebelum ini. + +Sekarang anda perlu mengikuti beberapa langkah: + + 1. Tentukan model dengan memanggil `SARIMAX()` dan memasukkan parameter model: parameter p, d, dan q, serta parameter P, D, dan Q. + 2. Sediakan model untuk data latihan dengan memanggil fungsi fit(). + 3. Buat ramalan dengan memanggil fungsi `forecast()` dan menentukan bilangan langkah (horizon) untuk diramalkan. + +> 🎓 Apakah semua parameter ini? Dalam model ARIMA terdapat 3 parameter yang digunakan untuk membantu memodelkan aspek utama siri masa: musim, trend, dan bunyi. Parameter ini adalah: + +`p`: parameter yang berkaitan dengan aspek auto-regressive model, yang menggabungkan nilai *masa lalu*. +`d`: parameter yang berkaitan dengan bahagian integrated model, yang mempengaruhi jumlah *differencing* (🎓 ingat differencing 👆?) yang digunakan pada siri masa. +`q`: parameter yang berkaitan dengan bahagian moving-average model. + +> Nota: Jika data anda mempunyai aspek bermusim - seperti data ini -, kita menggunakan model ARIMA bermusim (SARIMA). Dalam kes ini, anda perlu menggunakan satu set parameter lain: `P`, `D`, dan `Q` yang menerangkan hubungan yang sama seperti `p`, `d`, dan `q`, tetapi berkaitan dengan komponen bermusim model. + +1. Mulakan dengan menetapkan nilai horizon pilihan anda. Mari cuba 3 jam: + + ```python + # Specify the number of steps to forecast ahead + HORIZON = 3 + print('Forecasting horizon:', HORIZON, 'hours') + ``` + + Memilih nilai terbaik untuk parameter model ARIMA boleh menjadi cabaran kerana ia agak subjektif dan memakan masa. Anda mungkin mempertimbangkan untuk menggunakan fungsi `auto_arima()` daripada pustaka [`pyramid`](https://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html). + +1. Buat masa ini cuba beberapa pilihan manual untuk mencari model yang baik. + + ```python + order = (4, 1, 0) + seasonal_order = (1, 1, 0, 24) + + model = SARIMAX(endog=train, order=order, seasonal_order=seasonal_order) + results = model.fit() + + print(results.summary()) + ``` + + Jadual hasil dicetak. + +Anda telah membina model pertama anda! Sekarang kita perlu mencari cara untuk menilainya. + +### Nilai model anda + +Untuk menilai model anda, anda boleh melakukan pengesahan `walk forward`. Dalam praktiknya, model siri masa dilatih semula setiap kali data baru tersedia. Ini membolehkan model membuat ramalan terbaik pada setiap langkah masa. + +Bermula dari awal siri masa menggunakan teknik ini, latih model pada set data latihan. Kemudian buat ramalan pada langkah masa seterusnya. Ramalan dinilai terhadap nilai yang diketahui. Set latihan kemudian diperluaskan untuk memasukkan nilai yang diketahui dan proses diulang. + +> Nota: Anda harus mengekalkan tetingkap set latihan tetap untuk latihan yang lebih cekap supaya setiap kali anda menambah pemerhatian baru ke set latihan, anda menghapuskan pemerhatian dari permulaan set. + +Proses ini memberikan anggaran yang lebih kukuh tentang bagaimana model akan berfungsi dalam praktik. Walau bagaimanapun, ia datang dengan kos pengiraan untuk mencipta begitu banyak model. Ini boleh diterima jika data kecil atau jika model mudah, tetapi boleh menjadi isu pada skala besar. + +Pengesahan walk-forward adalah standard emas untuk penilaian model siri masa dan disyorkan untuk projek anda sendiri. + +1. Pertama, cipta titik data ujian untuk setiap langkah HORIZON. + + ```python + test_shifted = test.copy() + + for t in range(1, HORIZON+1): + test_shifted['load+'+str(t)] = test_shifted['load'].shift(-t, freq='H') + + test_shifted = test_shifted.dropna(how='any') + test_shifted.head(5) + ``` + + | | | load | load+1 | load+2 | + | ---------- | -------- | ---- | ------ | ------ | + | 2014-12-30 | 00:00:00 | 0.33 | 0.29 | 0.27 | + | 2014-12-30 | 01:00:00 | 0.29 | 0.27 | 0.27 | + | 2014-12-30 | 02:00:00 | 0.27 | 0.27 | 0.30 | + | 2014-12-30 | 03:00:00 | 0.27 | 0.30 | 0.41 | + | 2014-12-30 | 04:00:00 | 0.30 | 0.41 | 0.57 | + + Data dialihkan secara mendatar mengikut titik horizon. + +1. Buat ramalan pada data ujian anda menggunakan pendekatan tetingkap gelongsor dalam gelung sepanjang panjang data ujian: + + ```python + %%time + training_window = 720 # dedicate 30 days (720 hours) for training + + train_ts = train['load'] + test_ts = test_shifted + + history = [x for x in train_ts] + history = history[(-training_window):] + + predictions = list() + + order = (2, 1, 0) + seasonal_order = (1, 1, 0, 24) + + for t in range(test_ts.shape[0]): + model = SARIMAX(endog=history, order=order, seasonal_order=seasonal_order) + model_fit = model.fit() + yhat = model_fit.forecast(steps = HORIZON) + predictions.append(yhat) + obs = list(test_ts.iloc[t]) + # move the training window + history.append(obs[0]) + history.pop(0) + print(test_ts.index[t]) + print(t+1, ': predicted =', yhat, 'expected =', obs) + ``` + + Anda boleh melihat latihan berlaku: + + ```output + 2014-12-30 00:00:00 + 1 : predicted = [0.32 0.29 0.28] expected = [0.32945389435989236, 0.2900626678603402, 0.2739480752014323] + + 2014-12-30 01:00:00 + 2 : predicted = [0.3 0.29 0.3 ] expected = [0.2900626678603402, 0.2739480752014323, 0.26812891674127126] + + 2014-12-30 02:00:00 + 3 : predicted = [0.27 0.28 0.32] expected = [0.2739480752014323, 0.26812891674127126, 0.3025962399283795] + ``` + +1. Bandingkan ramalan dengan beban sebenar: + + ```python + eval_df = pd.DataFrame(predictions, columns=['t+'+str(t) for t in range(1, HORIZON+1)]) + eval_df['timestamp'] = test.index[0:len(test.index)-HORIZON+1] + eval_df = pd.melt(eval_df, id_vars='timestamp', value_name='prediction', var_name='h') + eval_df['actual'] = np.array(np.transpose(test_ts)).ravel() + eval_df[['prediction', 'actual']] = scaler.inverse_transform(eval_df[['prediction', 'actual']]) + eval_df.head() + ``` + + Output + | | | timestamp | h | prediction | actual | + | --- | ---------- | --------- | --- | ---------- | -------- | + | 0 | 2014-12-30 | 00:00:00 | t+1 | 3,008.74 | 3,023.00 | + | 1 | 2014-12-30 | 01:00:00 | t+1 | 2,955.53 | 2,935.00 | + | 2 | 2014-12-30 | 02:00:00 | t+1 | 2,900.17 | 2,899.00 | + | 3 | 2014-12-30 | 03:00:00 | t+1 | 2,917.69 | 2,886.00 | + | 4 | 2014-12-30 | 04:00:00 | t+1 | 2,946.99 | 2,963.00 | + + Perhatikan ramalan data setiap jam, dibandingkan dengan beban sebenar. Seberapa tepatkah ini? + +### Periksa ketepatan model + +Periksa ketepatan model anda dengan menguji ralat peratusan mutlak purata (MAPE) model tersebut ke atas semua ramalan. +> **🧮 Tunjukkan matematik** +> +> ![MAPE](../../../../7-TimeSeries/2-ARIMA/images/mape.png) +> +> [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) digunakan untuk menunjukkan ketepatan ramalan sebagai nisbah yang ditakrifkan oleh formula di atas. Perbezaan antara nilai sebenar + +dan nilai ramalan + +dibahagikan dengan nilai sebenar. "Nilai mutlak dalam pengiraan ini dijumlahkan untuk setiap titik ramalan dalam masa dan dibahagikan dengan bilangan titik yang sesuai n." [wikipedia](https://wikipedia.org/wiki/Mean_absolute_percentage_error) +1. Ungkapkan persamaan dalam kod: + + ```python + if(HORIZON > 1): + eval_df['APE'] = (eval_df['prediction'] - eval_df['actual']).abs() / eval_df['actual'] + print(eval_df.groupby('h')['APE'].mean()) + ``` + +1. Kira MAPE untuk satu langkah: + + ```python + print('One step forecast MAPE: ', (mape(eval_df[eval_df['h'] == 't+1']['prediction'], eval_df[eval_df['h'] == 't+1']['actual']))*100, '%') + ``` + + MAPE ramalan satu langkah: 0.5570581332313952 % + +1. Cetak MAPE ramalan berbilang langkah: + + ```python + print('Multi-step forecast MAPE: ', mape(eval_df['prediction'], eval_df['actual'])*100, '%') + ``` + + ```output + Multi-step forecast MAPE: 1.1460048657704118 % + ``` + + Nombor yang rendah adalah terbaik: pertimbangkan bahawa ramalan dengan MAPE 10 adalah tersasar sebanyak 10%. + +1. Tetapi seperti biasa, lebih mudah untuk melihat ukuran ketepatan seperti ini secara visual, jadi mari kita plotkan: + + ```python + if(HORIZON == 1): + ## Plotting single step forecast + eval_df.plot(x='timestamp', y=['actual', 'prediction'], style=['r', 'b'], figsize=(15, 8)) + + else: + ## Plotting multi step forecast + plot_df = eval_df[(eval_df.h=='t+1')][['timestamp', 'actual']] + for t in range(1, HORIZON+1): + plot_df['t+'+str(t)] = eval_df[(eval_df.h=='t+'+str(t))]['prediction'].values + + fig = plt.figure(figsize=(15, 8)) + ax = plt.plot(plot_df['timestamp'], plot_df['actual'], color='red', linewidth=4.0) + ax = fig.add_subplot(111) + for t in range(1, HORIZON+1): + x = plot_df['timestamp'][(t-1):] + y = plot_df['t+'+str(t)][0:len(x)] + ax.plot(x, y, color='blue', linewidth=4*math.pow(.9,t), alpha=math.pow(0.8,t)) + + ax.legend(loc='best') + + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![model siri masa](../../../../7-TimeSeries/2-ARIMA/images/accuracy.png) + +🏆 Plot yang sangat baik, menunjukkan model dengan ketepatan yang bagus. Syabas! + +--- + +## 🚀Cabaran + +Selidiki cara-cara untuk menguji ketepatan Model Siri Masa. Kita menyentuh tentang MAPE dalam pelajaran ini, tetapi adakah kaedah lain yang boleh digunakan? Lakukan penyelidikan dan buat anotasi. Dokumen yang berguna boleh didapati [di sini](https://otexts.com/fpp2/accuracy.html) + +## [Kuiz selepas kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Ulasan & Kajian Kendiri + +Pelajaran ini hanya menyentuh asas Peramalan Siri Masa dengan ARIMA. Luangkan masa untuk mendalami pengetahuan anda dengan menyelidiki [repositori ini](https://microsoft.github.io/forecasting/) dan pelbagai jenis modelnya untuk mempelajari cara lain membina model Siri Masa. + +## Tugasan + +[Model ARIMA baharu](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/7-TimeSeries/2-ARIMA/assignment.md b/translations/ms/7-TimeSeries/2-ARIMA/assignment.md new file mode 100644 index 00000000..0da13867 --- /dev/null +++ b/translations/ms/7-TimeSeries/2-ARIMA/assignment.md @@ -0,0 +1,25 @@ + +# Model ARIMA baharu + +## Arahan + +Sekarang setelah anda membina model ARIMA, bina satu lagi dengan data baharu (cuba salah satu [set data ini dari Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Anotasikan kerja anda dalam sebuah notebook, visualisasikan data dan model anda, dan uji ketepatannya menggunakan MAPE. + +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ----------------------------------- | +| | Sebuah notebook disediakan dengan model ARIMA baharu yang dibina, diuji dan dijelaskan dengan visualisasi serta ketepatan dinyatakan. | Notebook yang disediakan tidak dianotasikan atau mengandungi ralat | Notebook yang tidak lengkap disediakan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/7-TimeSeries/2-ARIMA/solution/Julia/README.md b/translations/ms/7-TimeSeries/2-ARIMA/solution/Julia/README.md new file mode 100644 index 00000000..32fd7393 --- /dev/null +++ b/translations/ms/7-TimeSeries/2-ARIMA/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/7-TimeSeries/2-ARIMA/solution/R/README.md b/translations/ms/7-TimeSeries/2-ARIMA/solution/R/README.md new file mode 100644 index 00000000..8d6166e6 --- /dev/null +++ b/translations/ms/7-TimeSeries/2-ARIMA/solution/R/README.md @@ -0,0 +1,15 @@ + +ini adalah pemegang tempat sementara + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat penting, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/7-TimeSeries/3-SVR/README.md b/translations/ms/7-TimeSeries/3-SVR/README.md new file mode 100644 index 00000000..35a62e3a --- /dev/null +++ b/translations/ms/7-TimeSeries/3-SVR/README.md @@ -0,0 +1,393 @@ + +# Ramalan Siri Masa dengan Support Vector Regressor + +Dalam pelajaran sebelumnya, anda telah belajar cara menggunakan model ARIMA untuk membuat ramalan siri masa. Kini anda akan melihat model Support Vector Regressor, iaitu model regresi yang digunakan untuk meramalkan data berterusan. + +## [Kuiz pra-pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Pengenalan + +Dalam pelajaran ini, anda akan meneroka cara khusus untuk membina model dengan [**SVM**: **S**upport **V**ector **M**achine](https://en.wikipedia.org/wiki/Support-vector_machine) untuk regresi, atau **SVR: Support Vector Regressor**. + +### SVR dalam konteks siri masa [^1] + +Sebelum memahami kepentingan SVR dalam ramalan siri masa, berikut adalah beberapa konsep penting yang perlu anda ketahui: + +- **Regresi:** Teknik pembelajaran terarah untuk meramalkan nilai berterusan daripada set input yang diberikan. Idea utamanya adalah untuk memadankan lengkung (atau garis) dalam ruang ciri yang mempunyai bilangan titik data maksimum. [Klik di sini](https://en.wikipedia.org/wiki/Regression_analysis) untuk maklumat lanjut. +- **Support Vector Machine (SVM):** Jenis model pembelajaran mesin terarah yang digunakan untuk klasifikasi, regresi dan pengesanan pencilan. Model ini adalah hyperplane dalam ruang ciri, yang dalam kes klasifikasi bertindak sebagai sempadan, dan dalam kes regresi bertindak sebagai garis terbaik. Dalam SVM, fungsi Kernel biasanya digunakan untuk mengubah dataset ke ruang dengan bilangan dimensi yang lebih tinggi supaya ia mudah dipisahkan. [Klik di sini](https://en.wikipedia.org/wiki/Support-vector_machine) untuk maklumat lanjut tentang SVM. +- **Support Vector Regressor (SVR):** Jenis SVM, untuk mencari garis terbaik (yang dalam kes SVM adalah hyperplane) yang mempunyai bilangan titik data maksimum. + +### Mengapa SVR? [^1] + +Dalam pelajaran sebelumnya, anda telah belajar tentang ARIMA, yang merupakan kaedah linear statistik yang sangat berjaya untuk meramalkan data siri masa. Walau bagaimanapun, dalam banyak kes, data siri masa mempunyai *ketidaklinearan*, yang tidak dapat dipetakan oleh model linear. Dalam kes sebegini, keupayaan SVM untuk mempertimbangkan ketidaklinearan dalam data untuk tugas regresi menjadikan SVR berjaya dalam ramalan siri masa. + +## Latihan - bina model SVR + +Langkah-langkah awal untuk penyediaan data adalah sama seperti pelajaran sebelumnya tentang [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA). + +Buka folder [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/3-SVR/working) dalam pelajaran ini dan cari fail [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/3-SVR/working/notebook.ipynb).[^2] + +1. Jalankan notebook dan import pustaka yang diperlukan: [^2] + + ```python + import sys + sys.path.append('../../') + ``` + + ```python + import os + import warnings + import matplotlib.pyplot as plt + import numpy as np + import pandas as pd + import datetime as dt + import math + + from sklearn.svm import SVR + from sklearn.preprocessing import MinMaxScaler + from common.utils import load_data, mape + ``` + +2. Muatkan data dari fail `/data/energy.csv` ke dalam dataframe Pandas dan lihat: [^2] + + ```python + energy = load_data('../../data')[['load']] + ``` + +3. Plot semua data tenaga yang tersedia dari Januari 2012 hingga Disember 2014: [^2] + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![data penuh](../../../../7-TimeSeries/3-SVR/images/full-data.png) + + Sekarang, mari kita bina model SVR kita. + +### Cipta dataset latihan dan ujian + +Sekarang data anda telah dimuatkan, anda boleh memisahkannya kepada set latihan dan ujian. Kemudian anda akan mengubah bentuk data untuk mencipta dataset berdasarkan langkah masa yang diperlukan untuk SVR. Anda akan melatih model anda pada set latihan. Selepas model selesai dilatih, anda akan menilai ketepatannya pada set latihan, set ujian dan kemudian dataset penuh untuk melihat prestasi keseluruhan. Anda perlu memastikan bahawa set ujian merangkumi tempoh masa yang lebih lewat daripada set latihan untuk memastikan model tidak mendapat maklumat daripada tempoh masa akan datang [^2] (situasi yang dikenali sebagai *Overfitting*). + +1. Peruntukkan tempoh dua bulan dari 1 September hingga 31 Oktober 2014 kepada set latihan. Set ujian akan merangkumi tempoh dua bulan dari 1 November hingga 31 Disember 2014: [^2] + + ```python + train_start_dt = '2014-11-01 00:00:00' + test_start_dt = '2014-12-30 00:00:00' + ``` + +2. Visualisasikan perbezaan: [^2] + + ```python + energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ + .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ + .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![data latihan dan ujian](../../../../7-TimeSeries/3-SVR/images/train-test.png) + +### Sediakan data untuk latihan + +Sekarang, anda perlu menyediakan data untuk latihan dengan melakukan penapisan dan penskalaan data anda. Tapis dataset anda untuk hanya memasukkan tempoh masa dan lajur yang diperlukan, serta penskalaan untuk memastikan data diproyeksikan dalam julat 0,1. + +1. Tapis dataset asal untuk hanya memasukkan tempoh masa yang disebutkan bagi setiap set dan hanya memasukkan lajur 'load' yang diperlukan serta tarikh: [^2] + + ```python + train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] + test = energy.copy()[energy.index >= test_start_dt][['load']] + + print('Training data shape: ', train.shape) + print('Test data shape: ', test.shape) + ``` + + ```output + Training data shape: (1416, 1) + Test data shape: (48, 1) + ``` + +2. Skala data latihan untuk berada dalam julat (0, 1): [^2] + + ```python + scaler = MinMaxScaler() + train['load'] = scaler.fit_transform(train) + ``` + +4. Sekarang, skala data ujian: [^2] + + ```python + test['load'] = scaler.transform(test) + ``` + +### Cipta data dengan langkah masa [^1] + +Untuk SVR, anda mengubah data input supaya berbentuk `[batch, timesteps]`. Jadi, anda mengubah bentuk `train_data` dan `test_data` yang sedia ada supaya terdapat dimensi baharu yang merujuk kepada langkah masa. + +```python +# Converting to numpy arrays +train_data = train.values +test_data = test.values +``` + +Untuk contoh ini, kita ambil `timesteps = 5`. Jadi, input kepada model adalah data untuk 4 langkah masa pertama, dan output akan menjadi data untuk langkah masa ke-5. + +```python +timesteps=5 +``` + +Menukar data latihan kepada tensor 2D menggunakan list comprehension bersarang: + +```python +train_data_timesteps=np.array([[j for j in train_data[i:i+timesteps]] for i in range(0,len(train_data)-timesteps+1)])[:,:,0] +train_data_timesteps.shape +``` + +```output +(1412, 5) +``` + +Menukar data ujian kepada tensor 2D: + +```python +test_data_timesteps=np.array([[j for j in test_data[i:i+timesteps]] for i in range(0,len(test_data)-timesteps+1)])[:,:,0] +test_data_timesteps.shape +``` + +```output +(44, 5) +``` + +Memilih input dan output daripada data latihan dan ujian: + +```python +x_train, y_train = train_data_timesteps[:,:timesteps-1],train_data_timesteps[:,[timesteps-1]] +x_test, y_test = test_data_timesteps[:,:timesteps-1],test_data_timesteps[:,[timesteps-1]] + +print(x_train.shape, y_train.shape) +print(x_test.shape, y_test.shape) +``` + +```output +(1412, 4) (1412, 1) +(44, 4) (44, 1) +``` + +### Laksanakan SVR [^1] + +Sekarang, tiba masanya untuk melaksanakan SVR. Untuk membaca lebih lanjut tentang pelaksanaan ini, anda boleh merujuk kepada [dokumentasi ini](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html). Untuk pelaksanaan kita, kita ikuti langkah-langkah ini: + + 1. Tentukan model dengan memanggil `SVR()` dan memasukkan hyperparameter model: kernel, gamma, c dan epsilon + 2. Sediakan model untuk data latihan dengan memanggil fungsi `fit()` + 3. Buat ramalan dengan memanggil fungsi `predict()` + +Sekarang kita cipta model SVR. Di sini kita gunakan [RBF kernel](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel), dan tetapkan hyperparameter gamma, C dan epsilon sebagai 0.5, 10 dan 0.05 masing-masing. + +```python +model = SVR(kernel='rbf',gamma=0.5, C=10, epsilon = 0.05) +``` + +#### Fit model pada data latihan [^1] + +```python +model.fit(x_train, y_train[:,0]) +``` + +```output +SVR(C=10, cache_size=200, coef0=0.0, degree=3, epsilon=0.05, gamma=0.5, + kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False) +``` + +#### Buat ramalan model [^1] + +```python +y_train_pred = model.predict(x_train).reshape(-1,1) +y_test_pred = model.predict(x_test).reshape(-1,1) + +print(y_train_pred.shape, y_test_pred.shape) +``` + +```output +(1412, 1) (44, 1) +``` + +Anda telah membina SVR anda! Sekarang kita perlu menilainya. + +### Nilai model anda [^1] + +Untuk penilaian, pertama kita akan skala semula data kepada skala asal kita. Kemudian, untuk memeriksa prestasi, kita akan plot siri masa asal dan yang diramalkan, serta mencetak hasil MAPE. + +Skala semula output yang diramalkan dan asal: + +```python +# Scaling the predictions +y_train_pred = scaler.inverse_transform(y_train_pred) +y_test_pred = scaler.inverse_transform(y_test_pred) + +print(len(y_train_pred), len(y_test_pred)) +``` + +```python +# Scaling the original values +y_train = scaler.inverse_transform(y_train) +y_test = scaler.inverse_transform(y_test) + +print(len(y_train), len(y_test)) +``` + +#### Periksa prestasi model pada data latihan dan ujian [^1] + +Kita ekstrak cap masa daripada dataset untuk ditunjukkan pada paksi-x plot kita. Perhatikan bahawa kita menggunakan ```timesteps-1``` nilai pertama sebagai input untuk output pertama, jadi cap masa untuk output akan bermula selepas itu. + +```python +train_timestamps = energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)].index[timesteps-1:] +test_timestamps = energy[test_start_dt:].index[timesteps-1:] + +print(len(train_timestamps), len(test_timestamps)) +``` + +```output +1412 44 +``` + +Plot ramalan untuk data latihan: + +```python +plt.figure(figsize=(25,6)) +plt.plot(train_timestamps, y_train, color = 'red', linewidth=2.0, alpha = 0.6) +plt.plot(train_timestamps, y_train_pred, color = 'blue', linewidth=0.8) +plt.legend(['Actual','Predicted']) +plt.xlabel('Timestamp') +plt.title("Training data prediction") +plt.show() +``` + +![ramalan data latihan](../../../../7-TimeSeries/3-SVR/images/train-data-predict.png) + +Cetak MAPE untuk data latihan + +```python +print('MAPE for training data: ', mape(y_train_pred, y_train)*100, '%') +``` + +```output +MAPE for training data: 1.7195710200875551 % +``` + +Plot ramalan untuk data ujian + +```python +plt.figure(figsize=(10,3)) +plt.plot(test_timestamps, y_test, color = 'red', linewidth=2.0, alpha = 0.6) +plt.plot(test_timestamps, y_test_pred, color = 'blue', linewidth=0.8) +plt.legend(['Actual','Predicted']) +plt.xlabel('Timestamp') +plt.show() +``` + +![ramalan data ujian](../../../../7-TimeSeries/3-SVR/images/test-data-predict.png) + +Cetak MAPE untuk data ujian + +```python +print('MAPE for testing data: ', mape(y_test_pred, y_test)*100, '%') +``` + +```output +MAPE for testing data: 1.2623790187854018 % +``` + +🏆 Anda mendapat keputusan yang sangat baik pada dataset ujian! + +### Periksa prestasi model pada dataset penuh [^1] + +```python +# Extracting load values as numpy array +data = energy.copy().values + +# Scaling +data = scaler.transform(data) + +# Transforming to 2D tensor as per model input requirement +data_timesteps=np.array([[j for j in data[i:i+timesteps]] for i in range(0,len(data)-timesteps+1)])[:,:,0] +print("Tensor shape: ", data_timesteps.shape) + +# Selecting inputs and outputs from data +X, Y = data_timesteps[:,:timesteps-1],data_timesteps[:,[timesteps-1]] +print("X shape: ", X.shape,"\nY shape: ", Y.shape) +``` + +```output +Tensor shape: (26300, 5) +X shape: (26300, 4) +Y shape: (26300, 1) +``` + +```python +# Make model predictions +Y_pred = model.predict(X).reshape(-1,1) + +# Inverse scale and reshape +Y_pred = scaler.inverse_transform(Y_pred) +Y = scaler.inverse_transform(Y) +``` + +```python +plt.figure(figsize=(30,8)) +plt.plot(Y, color = 'red', linewidth=2.0, alpha = 0.6) +plt.plot(Y_pred, color = 'blue', linewidth=0.8) +plt.legend(['Actual','Predicted']) +plt.xlabel('Timestamp') +plt.show() +``` + +![ramalan data penuh](../../../../7-TimeSeries/3-SVR/images/full-data-predict.png) + +```python +print('MAPE: ', mape(Y_pred, Y)*100, '%') +``` + +```output +MAPE: 2.0572089029888656 % +``` + +🏆 Plot yang sangat bagus, menunjukkan model dengan ketepatan yang baik. Syabas! + +--- + +## 🚀Cabaran + +- Cuba ubah hyperparameter (gamma, C, epsilon) semasa mencipta model dan nilai pada data untuk melihat set hyperparameter mana yang memberikan keputusan terbaik pada data ujian. Untuk mengetahui lebih lanjut tentang hyperparameter ini, anda boleh merujuk kepada dokumen [di sini](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel). +- Cuba gunakan fungsi kernel yang berbeza untuk model dan analisis prestasi mereka pada dataset. Dokumen yang berguna boleh didapati [di sini](https://scikit-learn.org/stable/modules/svm.html#kernel-functions). +- Cuba gunakan nilai yang berbeza untuk `timesteps` untuk model melihat ke belakang untuk membuat ramalan. + +## [Kuiz pasca-pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +## Ulasan & Kajian Kendiri + +Pelajaran ini bertujuan untuk memperkenalkan aplikasi SVR untuk Ramalan Siri Masa. Untuk membaca lebih lanjut tentang SVR, anda boleh merujuk kepada [blog ini](https://www.analyticsvidhya.com/blog/2020/03/support-vector-regression-tutorial-for-machine-learning/). [Dokumentasi ini pada scikit-learn](https://scikit-learn.org/stable/modules/svm.html) menyediakan penjelasan yang lebih komprehensif tentang SVM secara umum, [SVRs](https://scikit-learn.org/stable/modules/svm.html#regression) dan juga butiran pelaksanaan lain seperti [fungsi kernel](https://scikit-learn.org/stable/modules/svm.html#kernel-functions) yang berbeza yang boleh digunakan, dan parameternya. + +## Tugasan + +[Model SVR baharu](assignment.md) + +## Kredit + +[^1]: Teks, kod dan output dalam bahagian ini disumbangkan oleh [@AnirbanMukherjeeXD](https://github.com/AnirbanMukherjeeXD) +[^2]: Teks, kod dan output dalam bahagian ini diambil daripada [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/7-TimeSeries/3-SVR/assignment.md b/translations/ms/7-TimeSeries/3-SVR/assignment.md new file mode 100644 index 00000000..14e03e9f --- /dev/null +++ b/translations/ms/7-TimeSeries/3-SVR/assignment.md @@ -0,0 +1,27 @@ + +# Model SVR Baru + +## Arahan [^1] + +Sekarang anda telah membina model SVR, bina satu lagi dengan data baharu (cuba salah satu [set data ini dari Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Anotasikan kerja anda dalam sebuah notebook, visualkan data dan model anda, dan uji ketepatannya menggunakan plot yang sesuai dan MAPE. Juga cuba laraskan pelbagai hiperparameter dan gunakan nilai yang berbeza untuk timesteps. + +## Rubrik [^1] + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | ------------------------------------------------------------ | --------------------------------------------------------- | ----------------------------------- | +| | Sebuah notebook disediakan dengan model SVR yang dibina, diuji dan dijelaskan dengan visualisasi serta ketepatan dinyatakan. | Notebook yang disediakan tidak dianotasikan atau mengandungi ralat. | Notebook yang tidak lengkap disediakan | + +[^1]: Teks dalam bahagian ini berdasarkan [tugasan dari ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat penting, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/7-TimeSeries/README.md b/translations/ms/7-TimeSeries/README.md new file mode 100644 index 00000000..785eb643 --- /dev/null +++ b/translations/ms/7-TimeSeries/README.md @@ -0,0 +1,37 @@ + +# Pengenalan kepada ramalan siri masa + +Apakah ramalan siri masa? Ia adalah tentang meramalkan peristiwa masa depan dengan menganalisis trend masa lalu. + +## Topik serantau: penggunaan elektrik di seluruh dunia ✨ + +Dalam dua pelajaran ini, anda akan diperkenalkan kepada ramalan siri masa, satu bidang pembelajaran mesin yang agak kurang dikenali tetapi sangat berharga untuk aplikasi industri dan perniagaan, serta bidang lain. Walaupun rangkaian neural boleh digunakan untuk meningkatkan kegunaan model-model ini, kita akan mengkajinya dalam konteks pembelajaran mesin klasik kerana model membantu meramalkan prestasi masa depan berdasarkan data masa lalu. + +Fokus serantau kita adalah penggunaan elektrik di seluruh dunia, satu set data yang menarik untuk mempelajari cara meramalkan penggunaan kuasa masa depan berdasarkan corak beban masa lalu. Anda boleh melihat bagaimana jenis ramalan ini sangat berguna dalam persekitaran perniagaan. + +![grid elektrik](../../../7-TimeSeries/images/electric-grid.jpg) + +Foto oleh [Peddi Sai hrithik](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) menampilkan menara elektrik di jalan raya Rajasthan di [Unsplash](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) + +## Pelajaran + +1. [Pengenalan kepada ramalan siri masa](1-Introduction/README.md) +2. [Membina model siri masa ARIMA](2-ARIMA/README.md) +3. [Membina Support Vector Regressor untuk ramalan siri masa](3-SVR/README.md) + +## Kredit + +"Pengenalan kepada ramalan siri masa" ditulis dengan ⚡️ oleh [Francesca Lazzeri](https://twitter.com/frlazzeri) dan [Jen Looper](https://twitter.com/jenlooper). Notebook ini pertama kali muncul dalam talian di [repo Azure "Deep Learning For Time Series"](https://github.com/Azure/DeepLearningForTimeSeriesForecasting) yang asalnya ditulis oleh Francesca Lazzeri. Pelajaran SVR ditulis oleh [Anirban Mukherjee](https://github.com/AnirbanMukherjeeXD) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/8-Reinforcement/1-QLearning/README.md b/translations/ms/8-Reinforcement/1-QLearning/README.md new file mode 100644 index 00000000..b3508ab6 --- /dev/null +++ b/translations/ms/8-Reinforcement/1-QLearning/README.md @@ -0,0 +1,256 @@ + +# Pengenalan kepada Pembelajaran Pengukuhan dan Q-Learning + +![Ringkasan pembelajaran pengukuhan dalam pembelajaran mesin dalam bentuk sketchnote](../../../../sketchnotes/ml-reinforcement.png) +> Sketchnote oleh [Tomomi Imura](https://www.twitter.com/girlie_mac) + +Pembelajaran pengukuhan melibatkan tiga konsep penting: agen, beberapa keadaan, dan satu set tindakan bagi setiap keadaan. Dengan melaksanakan tindakan dalam keadaan tertentu, agen akan diberikan ganjaran. Bayangkan permainan komputer Super Mario. Anda adalah Mario, berada dalam tahap permainan, berdiri di tepi tebing. Di atas anda terdapat syiling. Anda sebagai Mario, dalam tahap permainan, di kedudukan tertentu ... itulah keadaan anda. Melangkah satu langkah ke kanan (tindakan) akan membawa anda ke tebing, dan itu akan memberikan skor numerik yang rendah. Namun, menekan butang lompat akan membolehkan anda mendapat mata dan terus hidup. Itu adalah hasil yang positif dan sepatutnya memberikan skor numerik yang positif. + +Dengan menggunakan pembelajaran pengukuhan dan simulator (permainan), anda boleh belajar cara bermain permainan untuk memaksimumkan ganjaran iaitu terus hidup dan mengumpul sebanyak mungkin mata. + +[![Pengenalan kepada Pembelajaran Pengukuhan](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo) + +> 🎥 Klik imej di atas untuk mendengar Dmitry membincangkan Pembelajaran Pengukuhan + +## [Kuiz pra-kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Prasyarat dan Persediaan + +Dalam pelajaran ini, kita akan bereksperimen dengan beberapa kod dalam Python. Anda sepatutnya boleh menjalankan kod Jupyter Notebook daripada pelajaran ini, sama ada di komputer anda atau di awan. + +Anda boleh membuka [notebook pelajaran](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) dan mengikuti pelajaran ini untuk membina. + +> **Nota:** Jika anda membuka kod ini dari awan, anda juga perlu mendapatkan fail [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), yang digunakan dalam kod notebook. Tambahkan fail ini ke direktori yang sama dengan notebook. + +## Pengenalan + +Dalam pelajaran ini, kita akan meneroka dunia **[Peter dan Serigala](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**, yang diilhamkan oleh kisah dongeng muzik oleh komposer Rusia, [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Kita akan menggunakan **Pembelajaran Pengukuhan** untuk membolehkan Peter meneroka persekitarannya, mengumpul epal yang lazat dan mengelakkan bertemu dengan serigala. + +**Pembelajaran Pengukuhan** (RL) adalah teknik pembelajaran yang membolehkan kita mempelajari tingkah laku optimum bagi **agen** dalam **persekitaran** tertentu dengan menjalankan banyak eksperimen. Agen dalam persekitaran ini sepatutnya mempunyai **matlamat**, yang ditakrifkan oleh **fungsi ganjaran**. + +## Persekitaran + +Untuk kesederhanaan, mari kita anggap dunia Peter sebagai papan segi empat dengan saiz `width` x `height`, seperti ini: + +![Persekitaran Peter](../../../../8-Reinforcement/1-QLearning/images/environment.png) + +Setiap sel dalam papan ini boleh menjadi: + +* **tanah**, di mana Peter dan makhluk lain boleh berjalan. +* **air**, di mana anda jelas tidak boleh berjalan. +* **pokok** atau **rumput**, tempat di mana anda boleh berehat. +* **epal**, yang mewakili sesuatu yang Peter akan gembira untuk menemui untuk makan. +* **serigala**, yang berbahaya dan harus dielakkan. + +Terdapat modul Python berasingan, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), yang mengandungi kod untuk bekerja dengan persekitaran ini. Oleh kerana kod ini tidak penting untuk memahami konsep kita, kita akan mengimport modul dan menggunakannya untuk mencipta papan contoh (blok kod 1): + +```python +from rlboard import * + +width, height = 8,8 +m = Board(width,height) +m.randomize(seed=13) +m.plot() +``` + +Kod ini sepatutnya mencetak gambar persekitaran yang serupa dengan yang di atas. + +## Tindakan dan polisi + +Dalam contoh kita, matlamat Peter adalah untuk mencari epal, sambil mengelakkan serigala dan halangan lain. Untuk melakukan ini, dia boleh berjalan-jalan sehingga dia menemui epal. + +Oleh itu, pada mana-mana kedudukan, dia boleh memilih antara salah satu tindakan berikut: atas, bawah, kiri dan kanan. + +Kita akan mentakrifkan tindakan tersebut sebagai kamus, dan memetakan mereka kepada pasangan perubahan koordinat yang sepadan. Sebagai contoh, bergerak ke kanan (`R`) akan sepadan dengan pasangan `(1,0)`. (blok kod 2): + +```python +actions = { "U" : (0,-1), "D" : (0,1), "L" : (-1,0), "R" : (1,0) } +action_idx = { a : i for i,a in enumerate(actions.keys()) } +``` + +Secara ringkas, strategi dan matlamat senario ini adalah seperti berikut: + +- **Strategi**, agen kita (Peter) ditakrifkan oleh apa yang dipanggil **polisi**. Polisi adalah fungsi yang mengembalikan tindakan pada mana-mana keadaan tertentu. Dalam kes kita, keadaan masalah diwakili oleh papan, termasuk kedudukan semasa pemain. + +- **Matlamat**, pembelajaran pengukuhan adalah untuk akhirnya mempelajari polisi yang baik yang akan membolehkan kita menyelesaikan masalah dengan cekap. Walau bagaimanapun, sebagai asas, mari kita pertimbangkan polisi paling mudah yang dipanggil **jalan rawak**. + +## Jalan rawak + +Mari kita selesaikan masalah kita terlebih dahulu dengan melaksanakan strategi jalan rawak. Dengan jalan rawak, kita akan memilih tindakan seterusnya secara rawak daripada tindakan yang dibenarkan, sehingga kita mencapai epal (blok kod 3). + +1. Laksanakan jalan rawak dengan kod di bawah: + + ```python + def random_policy(m): + return random.choice(list(actions)) + + def walk(m,policy,start_position=None): + n = 0 # number of steps + # set initial position + if start_position: + m.human = start_position + else: + m.random_start() + while True: + if m.at() == Board.Cell.apple: + return n # success! + if m.at() in [Board.Cell.wolf, Board.Cell.water]: + return -1 # eaten by wolf or drowned + while True: + a = actions[policy(m)] + new_pos = m.move_pos(m.human,a) + if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water: + m.move(a) # do the actual move + break + n+=1 + + walk(m,random_policy) + ``` + + Panggilan kepada `walk` sepatutnya mengembalikan panjang laluan yang sepadan, yang boleh berbeza dari satu larian ke larian lain. + +1. Jalankan eksperimen jalan beberapa kali (katakan, 100), dan cetak statistik yang dihasilkan (blok kod 4): + + ```python + def print_statistics(policy): + s,w,n = 0,0,0 + for _ in range(100): + z = walk(m,policy) + if z<0: + w+=1 + else: + s += z + n += 1 + print(f"Average path length = {s/n}, eaten by wolf: {w} times") + + print_statistics(random_policy) + ``` + + Perhatikan bahawa panjang purata laluan adalah sekitar 30-40 langkah, yang agak banyak, memandangkan jarak purata ke epal terdekat adalah sekitar 5-6 langkah. + + Anda juga boleh melihat bagaimana pergerakan Peter kelihatan semasa jalan rawak: + + ![Jalan Rawak Peter](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif) + +## Fungsi ganjaran + +Untuk menjadikan polisi kita lebih pintar, kita perlu memahami langkah mana yang "lebih baik" daripada yang lain. Untuk melakukan ini, kita perlu mentakrifkan matlamat kita. + +Matlamat boleh ditakrifkan dalam bentuk **fungsi ganjaran**, yang akan mengembalikan beberapa nilai skor untuk setiap keadaan. Semakin tinggi nombor, semakin baik fungsi ganjaran. (blok kod 5) + +```python +move_reward = -0.1 +goal_reward = 10 +end_reward = -10 + +def reward(m,pos=None): + pos = pos or m.human + if not m.is_valid(pos): + return end_reward + x = m.at(pos) + if x==Board.Cell.water or x == Board.Cell.wolf: + return end_reward + if x==Board.Cell.apple: + return goal_reward + return move_reward +``` + +Perkara menarik tentang fungsi ganjaran ialah dalam kebanyakan kes, *kita hanya diberikan ganjaran yang besar pada akhir permainan*. Ini bermakna algoritma kita sepatutnya mengingati langkah "baik" yang membawa kepada ganjaran positif pada akhirnya, dan meningkatkan kepentingannya. Begitu juga, semua langkah yang membawa kepada hasil buruk harus dielakkan. + +## Q-Learning + +Algoritma yang akan kita bincangkan di sini dipanggil **Q-Learning**. Dalam algoritma ini, polisi ditakrifkan oleh fungsi (atau struktur data) yang dipanggil **Q-Table**. Ia merekodkan "kebaikan" setiap tindakan dalam keadaan tertentu. + +Ia dipanggil Q-Table kerana ia sering mudah untuk mewakilinya sebagai jadual, atau array multi-dimensi. Oleh kerana papan kita mempunyai dimensi `width` x `height`, kita boleh mewakili Q-Table menggunakan array numpy dengan bentuk `width` x `height` x `len(actions)`: (blok kod 6) + +```python +Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions) +``` + +Perhatikan bahawa kita memulakan semua nilai Q-Table dengan nilai yang sama, dalam kes kita - 0.25. Ini sepadan dengan polisi "jalan rawak", kerana semua langkah dalam setiap keadaan adalah sama baik. Kita boleh menghantar Q-Table kepada fungsi `plot` untuk memvisualisasikan jadual pada papan: `m.plot(Q)`. + +![Persekitaran Peter](../../../../8-Reinforcement/1-QLearning/images/env_init.png) + +Di tengah-tengah setiap sel terdapat "anak panah" yang menunjukkan arah pergerakan yang disukai. Oleh kerana semua arah adalah sama, titik ditunjukkan. + +Sekarang kita perlu menjalankan simulasi, meneroka persekitaran kita, dan mempelajari pengagihan nilai Q-Table yang lebih baik, yang akan membolehkan kita mencari laluan ke epal dengan lebih cepat. + +## Intipati Q-Learning: Persamaan Bellman + +Sebaik sahaja kita mula bergerak, setiap tindakan akan mempunyai ganjaran yang sepadan, iaitu kita secara teorinya boleh memilih tindakan seterusnya berdasarkan ganjaran segera yang tertinggi. Walau bagaimanapun, dalam kebanyakan keadaan, langkah tersebut tidak akan mencapai matlamat kita untuk mencapai epal, dan oleh itu kita tidak boleh segera memutuskan arah mana yang lebih baik. + +> Ingat bahawa bukan hasil segera yang penting, tetapi hasil akhir, yang akan kita peroleh pada akhir simulasi. + +Untuk mengambil kira ganjaran yang tertunda ini, kita perlu menggunakan prinsip **[pengaturcaraan dinamik](https://en.wikipedia.org/wiki/Dynamic_programming)**, yang membolehkan kita memikirkan masalah kita secara rekursif. + +Katakan kita kini berada di keadaan *s*, dan kita ingin bergerak ke keadaan seterusnya *s'*. Dengan berbuat demikian, kita akan menerima ganjaran segera *r(s,a)*, yang ditakrifkan oleh fungsi ganjaran, ditambah beberapa ganjaran masa depan. Jika kita mengandaikan bahawa Q-Table kita dengan betul mencerminkan "daya tarikan" setiap tindakan, maka di keadaan *s'* kita akan memilih tindakan *a* yang sepadan dengan nilai maksimum *Q(s',a')*. Oleh itu, ganjaran masa depan terbaik yang boleh kita peroleh di keadaan *s* akan ditakrifkan sebagai `max` + +## Memeriksa polisi + +Oleh kerana Q-Table menyenaraikan "daya tarikan" setiap tindakan di setiap keadaan, ia agak mudah untuk menggunakannya bagi menentukan navigasi yang efisien dalam dunia kita. Dalam kes yang paling mudah, kita boleh memilih tindakan yang sepadan dengan nilai Q-Table tertinggi: (blok kod 9) + +```python +def qpolicy_strict(m): + x,y = m.human + v = probs(Q[x,y]) + a = list(actions)[np.argmax(v)] + return a + +walk(m,qpolicy_strict) +``` + +> Jika anda mencuba kod di atas beberapa kali, anda mungkin perasan bahawa kadangkala ia "tergantung", dan anda perlu menekan butang STOP dalam notebook untuk menghentikannya. Ini berlaku kerana mungkin terdapat situasi di mana dua keadaan "menunjuk" antara satu sama lain dari segi nilai Q yang optimum, menyebabkan agen bergerak antara keadaan tersebut tanpa henti. + +## 🚀Cabaran + +> **Tugas 1:** Ubah fungsi `walk` untuk menghadkan panjang maksimum laluan kepada bilangan langkah tertentu (contohnya, 100), dan lihat kod di atas mengembalikan nilai ini dari semasa ke semasa. + +> **Tugas 2:** Ubah fungsi `walk` supaya ia tidak kembali ke tempat yang telah dilalui sebelumnya. Ini akan menghalang `walk` daripada berulang, namun, agen masih boleh terperangkap di lokasi yang tidak dapat dilepaskan. + +## Navigasi + +Polisi navigasi yang lebih baik adalah yang kita gunakan semasa latihan, yang menggabungkan eksploitasi dan eksplorasi. Dalam polisi ini, kita akan memilih setiap tindakan dengan kebarangkalian tertentu, berkadar dengan nilai dalam Q-Table. Strategi ini mungkin masih menyebabkan agen kembali ke posisi yang telah diterokai, tetapi, seperti yang anda lihat dari kod di bawah, ia menghasilkan laluan purata yang sangat pendek ke lokasi yang diinginkan (ingat bahawa `print_statistics` menjalankan simulasi sebanyak 100 kali): (blok kod 10) + +```python +def qpolicy(m): + x,y = m.human + v = probs(Q[x,y]) + a = random.choices(list(actions),weights=v)[0] + return a + +print_statistics(qpolicy) +``` + +Selepas menjalankan kod ini, anda sepatutnya mendapat panjang laluan purata yang jauh lebih kecil daripada sebelumnya, dalam lingkungan 3-6. + +## Menyelidik proses pembelajaran + +Seperti yang telah disebutkan, proses pembelajaran adalah keseimbangan antara eksplorasi dan eksploitasi pengetahuan yang diperoleh tentang struktur ruang masalah. Kita telah melihat bahawa hasil pembelajaran (keupayaan untuk membantu agen mencari laluan pendek ke matlamat) telah bertambah baik, tetapi ia juga menarik untuk memerhatikan bagaimana panjang laluan purata berubah semasa proses pembelajaran: + +Pembelajaran boleh diringkaskan seperti berikut: + +- **Panjang laluan purata meningkat**. Apa yang kita lihat di sini adalah pada mulanya, panjang laluan purata meningkat. Ini mungkin disebabkan oleh fakta bahawa apabila kita tidak tahu apa-apa tentang persekitaran, kita cenderung terperangkap dalam keadaan buruk, seperti air atau serigala. Apabila kita belajar lebih banyak dan mula menggunakan pengetahuan ini, kita boleh meneroka persekitaran lebih lama, tetapi kita masih tidak tahu di mana lokasi epal dengan baik. + +- **Panjang laluan berkurang, apabila kita belajar lebih banyak**. Setelah kita belajar cukup, menjadi lebih mudah bagi agen untuk mencapai matlamat, dan panjang laluan mula berkurang. Walau bagaimanapun, kita masih terbuka kepada eksplorasi, jadi kita sering menyimpang dari laluan terbaik dan meneroka pilihan baru, menjadikan laluan lebih panjang daripada yang optimum. + +- **Panjang meningkat secara mendadak**. Apa yang kita juga perhatikan pada graf ini adalah pada satu ketika, panjang meningkat secara mendadak. Ini menunjukkan sifat stokastik proses tersebut, dan bahawa kita boleh pada satu ketika "merosakkan" koefisien Q-Table dengan menulis semula mereka dengan nilai baru. Ini sebaiknya diminimumkan dengan mengurangkan kadar pembelajaran (contohnya, menjelang akhir latihan, kita hanya menyesuaikan nilai Q-Table dengan nilai kecil). + +Secara keseluruhan, adalah penting untuk diingat bahawa kejayaan dan kualiti proses pembelajaran sangat bergantung pada parameter seperti kadar pembelajaran, pengurangan kadar pembelajaran, dan faktor diskaun. Parameter-parameter ini sering dipanggil **hiperparameter**, untuk membezakannya daripada **parameter**, yang kita optimalkan semasa latihan (contohnya, koefisien Q-Table). Proses mencari nilai hiperparameter terbaik dipanggil **pengoptimuman hiperparameter**, dan ia layak menjadi topik tersendiri. + +## [Kuiz selepas kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Tugasan +[Dunia yang Lebih Realistik](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/8-Reinforcement/1-QLearning/assignment.md b/translations/ms/8-Reinforcement/1-QLearning/assignment.md new file mode 100644 index 00000000..bb68d471 --- /dev/null +++ b/translations/ms/8-Reinforcement/1-QLearning/assignment.md @@ -0,0 +1,41 @@ + +# Dunia yang Lebih Realistik + +Dalam situasi kita, Peter dapat bergerak hampir tanpa merasa letih atau lapar. Dalam dunia yang lebih realistik, dia perlu duduk dan berehat dari semasa ke semasa, serta makan untuk mengisi tenaga. Mari kita jadikan dunia kita lebih realistik dengan melaksanakan peraturan berikut: + +1. Dengan bergerak dari satu tempat ke tempat lain, Peter kehilangan **tenaga** dan mendapat sedikit **keletihan**. +2. Peter boleh mendapatkan lebih banyak tenaga dengan memakan epal. +3. Peter boleh menghilangkan keletihan dengan berehat di bawah pokok atau di atas rumput (iaitu berjalan ke lokasi papan yang mempunyai pokok atau rumput - padang hijau). +4. Peter perlu mencari dan membunuh serigala. +5. Untuk membunuh serigala, Peter perlu mempunyai tahap tenaga dan keletihan tertentu, jika tidak dia akan kalah dalam pertempuran. + +## Arahan + +Gunakan notebook asal [notebook.ipynb](../../../../8-Reinforcement/1-QLearning/notebook.ipynb) sebagai titik permulaan untuk penyelesaian anda. + +Ubah suai fungsi ganjaran di atas mengikut peraturan permainan, jalankan algoritma pembelajaran pengukuhan untuk mempelajari strategi terbaik untuk memenangi permainan, dan bandingkan hasil jalan rawak dengan algoritma anda dari segi jumlah permainan yang dimenangi dan kalah. + +> **Note**: Dalam dunia baru anda, keadaan lebih kompleks, dan selain kedudukan manusia, ia juga merangkumi tahap keletihan dan tenaga. Anda boleh memilih untuk mewakili keadaan sebagai tuple (Board,energy,fatigue), atau mendefinisikan kelas untuk keadaan (anda juga boleh memilih untuk mewarisinya daripada `Board`), atau bahkan mengubah suai kelas `Board` asal dalam [rlboard.py](../../../../8-Reinforcement/1-QLearning/rlboard.py). + +Dalam penyelesaian anda, sila kekalkan kod yang bertanggungjawab untuk strategi jalan rawak, dan bandingkan hasil algoritma anda dengan jalan rawak pada akhirnya. + +> **Note**: Anda mungkin perlu menyesuaikan hiperparameter untuk menjadikannya berfungsi, terutamanya bilangan epoch. Oleh kerana kejayaan permainan (melawan serigala) adalah peristiwa yang jarang berlaku, anda boleh menjangkakan masa latihan yang lebih lama. + +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| | Notebook disediakan dengan definisi peraturan dunia baru, algoritma Q-Learning dan beberapa penjelasan teks. Q-Learning mampu meningkatkan hasil dengan ketara berbanding jalan rawak. | Notebook disediakan, Q-Learning dilaksanakan dan meningkatkan hasil berbanding jalan rawak, tetapi tidak dengan ketara; atau notebook kurang didokumentasikan dan kod tidak tersusun baik | Beberapa usaha untuk mentakrifkan semula peraturan dunia dibuat, tetapi algoritma Q-Learning tidak berfungsi, atau fungsi ganjaran tidak ditakrifkan sepenuhnya | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/8-Reinforcement/1-QLearning/solution/Julia/README.md b/translations/ms/8-Reinforcement/1-QLearning/solution/Julia/README.md new file mode 100644 index 00000000..5f95f720 --- /dev/null +++ b/translations/ms/8-Reinforcement/1-QLearning/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/8-Reinforcement/1-QLearning/solution/R/README.md b/translations/ms/8-Reinforcement/1-QLearning/solution/R/README.md new file mode 100644 index 00000000..15f83fcc --- /dev/null +++ b/translations/ms/8-Reinforcement/1-QLearning/solution/R/README.md @@ -0,0 +1,15 @@ + +ini adalah pemegang tempat sementara + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/8-Reinforcement/2-Gym/README.md b/translations/ms/8-Reinforcement/2-Gym/README.md new file mode 100644 index 00000000..05564f5f --- /dev/null +++ b/translations/ms/8-Reinforcement/2-Gym/README.md @@ -0,0 +1,333 @@ + +## Prasyarat + +Dalam pelajaran ini, kita akan menggunakan perpustakaan bernama **OpenAI Gym** untuk mensimulasikan pelbagai **persekitaran**. Anda boleh menjalankan kod pelajaran ini secara tempatan (contohnya dari Visual Studio Code), di mana simulasi akan dibuka dalam tetingkap baru. Apabila menjalankan kod secara dalam talian, anda mungkin perlu membuat beberapa penyesuaian pada kod, seperti yang diterangkan [di sini](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7). + +## OpenAI Gym + +Dalam pelajaran sebelumnya, peraturan permainan dan keadaan diberikan oleh kelas `Board` yang kita tentukan sendiri. Di sini kita akan menggunakan **persekitaran simulasi** khas, yang akan mensimulasikan fizik di sebalik tiang yang seimbang. Salah satu persekitaran simulasi yang paling popular untuk melatih algoritma pembelajaran pengukuhan dipanggil [Gym](https://gym.openai.com/), yang diselenggarakan oleh [OpenAI](https://openai.com/). Dengan menggunakan gym ini, kita boleh mencipta pelbagai **persekitaran** daripada simulasi cartpole hingga permainan Atari. + +> **Nota**: Anda boleh melihat persekitaran lain yang tersedia dari OpenAI Gym [di sini](https://gym.openai.com/envs/#classic_control). + +Pertama, mari pasang gym dan import perpustakaan yang diperlukan (blok kod 1): + +```python +import sys +!{sys.executable} -m pip install gym + +import gym +import matplotlib.pyplot as plt +import numpy as np +import random +``` + +## Latihan - inisialisasi persekitaran cartpole + +Untuk bekerja dengan masalah keseimbangan cartpole, kita perlu menginisialisasi persekitaran yang sesuai. Setiap persekitaran dikaitkan dengan: + +- **Ruang pemerhatian** yang menentukan struktur maklumat yang kita terima daripada persekitaran. Untuk masalah cartpole, kita menerima kedudukan tiang, kelajuan, dan beberapa nilai lain. + +- **Ruang tindakan** yang menentukan tindakan yang mungkin. Dalam kes kita, ruang tindakan adalah diskret, dan terdiri daripada dua tindakan - **kiri** dan **kanan**. (blok kod 2) + +1. Untuk menginisialisasi, taip kod berikut: + + ```python + env = gym.make("CartPole-v1") + print(env.action_space) + print(env.observation_space) + print(env.action_space.sample()) + ``` + +Untuk melihat bagaimana persekitaran berfungsi, mari jalankan simulasi pendek selama 100 langkah. Pada setiap langkah, kita memberikan salah satu tindakan untuk diambil - dalam simulasi ini kita hanya memilih tindakan secara rawak daripada `action_space`. + +1. Jalankan kod di bawah dan lihat hasilnya. + + ✅ Ingat bahawa adalah lebih baik untuk menjalankan kod ini pada pemasangan Python tempatan! (blok kod 3) + + ```python + env.reset() + + for i in range(100): + env.render() + env.step(env.action_space.sample()) + env.close() + ``` + + Anda sepatutnya melihat sesuatu yang serupa dengan imej ini: + + ![cartpole tidak seimbang](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif) + +1. Semasa simulasi, kita perlu mendapatkan pemerhatian untuk menentukan cara bertindak. Sebenarnya, fungsi langkah mengembalikan pemerhatian semasa, fungsi ganjaran, dan bendera selesai yang menunjukkan sama ada masuk akal untuk meneruskan simulasi atau tidak: (blok kod 4) + + ```python + env.reset() + + done = False + while not done: + env.render() + obs, rew, done, info = env.step(env.action_space.sample()) + print(f"{obs} -> {rew}") + env.close() + ``` + + Anda akan melihat sesuatu seperti ini dalam output notebook: + + ```text + [ 0.03403272 -0.24301182 0.02669811 0.2895829 ] -> 1.0 + [ 0.02917248 -0.04828055 0.03248977 0.00543839] -> 1.0 + [ 0.02820687 0.14636075 0.03259854 -0.27681916] -> 1.0 + [ 0.03113408 0.34100283 0.02706215 -0.55904489] -> 1.0 + [ 0.03795414 0.53573468 0.01588125 -0.84308041] -> 1.0 + ... + [ 0.17299878 0.15868546 -0.20754175 -0.55975453] -> 1.0 + [ 0.17617249 0.35602306 -0.21873684 -0.90998894] -> 1.0 + ``` + + Vektor pemerhatian yang dikembalikan pada setiap langkah simulasi mengandungi nilai berikut: + - Kedudukan kereta + - Kelajuan kereta + - Sudut tiang + - Kadar putaran tiang + +1. Dapatkan nilai minimum dan maksimum bagi nombor-nombor tersebut: (blok kod 5) + + ```python + print(env.observation_space.low) + print(env.observation_space.high) + ``` + + Anda juga mungkin perasan bahawa nilai ganjaran pada setiap langkah simulasi sentiasa 1. Ini kerana matlamat kita adalah untuk bertahan selama mungkin, iaitu mengekalkan tiang pada kedudukan yang agak menegak untuk tempoh masa yang paling lama. + + ✅ Sebenarnya, simulasi CartPole dianggap selesai jika kita berjaya mendapatkan ganjaran purata sebanyak 195 dalam 100 percubaan berturut-turut. + +## Diskretisasi keadaan + +Dalam Q-Learning, kita perlu membina Q-Table yang menentukan apa yang perlu dilakukan pada setiap keadaan. Untuk dapat melakukan ini, kita memerlukan keadaan untuk menjadi **diskret**, lebih tepat lagi, ia harus mengandungi bilangan nilai diskret yang terhad. Oleh itu, kita perlu **mendiskretkan** pemerhatian kita, memetakan mereka kepada satu set keadaan yang terhad. + +Terdapat beberapa cara kita boleh melakukan ini: + +- **Bahagikan kepada bin**. Jika kita tahu selang bagi nilai tertentu, kita boleh membahagikan selang ini kepada beberapa **bin**, dan kemudian menggantikan nilai dengan nombor bin yang ia tergolong. Ini boleh dilakukan menggunakan kaedah numpy [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html). Dalam kes ini, kita akan tahu dengan tepat saiz keadaan, kerana ia akan bergantung pada bilangan bin yang kita pilih untuk digitalisasi. + +✅ Kita boleh menggunakan interpolasi linear untuk membawa nilai kepada beberapa selang terhad (contohnya, dari -20 hingga 20), dan kemudian menukar nombor kepada integer dengan membundarkan mereka. Ini memberikan kita kawalan yang kurang terhadap saiz keadaan, terutamanya jika kita tidak tahu julat tepat nilai input. Sebagai contoh, dalam kes kita, 2 daripada 4 nilai tidak mempunyai had atas/bawah pada nilai mereka, yang mungkin menghasilkan bilangan keadaan yang tidak terhingga. + +Dalam contoh kita, kita akan menggunakan pendekatan kedua. Seperti yang anda mungkin perasan kemudian, walaupun had atas/bawah tidak ditentukan, nilai-nilai tersebut jarang mengambil nilai di luar selang terhad tertentu, jadi keadaan dengan nilai ekstrem akan sangat jarang berlaku. + +1. Berikut adalah fungsi yang akan mengambil pemerhatian daripada model kita dan menghasilkan tuple 4 nilai integer: (blok kod 6) + + ```python + def discretize(x): + return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int)) + ``` + +1. Mari kita juga terokai kaedah diskretisasi lain menggunakan bin: (blok kod 7) + + ```python + def create_bins(i,num): + return np.arange(num+1)*(i[1]-i[0])/num+i[0] + + print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10)) + + ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter + nbins = [20,20,10,10] # number of bins for each parameter + bins = [create_bins(ints[i],nbins[i]) for i in range(4)] + + def discretize_bins(x): + return tuple(np.digitize(x[i],bins[i]) for i in range(4)) + ``` + +1. Sekarang mari jalankan simulasi pendek dan perhatikan nilai persekitaran diskret tersebut. Jangan ragu untuk mencuba kedua-dua `discretize` dan `discretize_bins` dan lihat jika terdapat perbezaan. + + ✅ discretize_bins mengembalikan nombor bin, yang berasaskan 0. Oleh itu, untuk nilai pemboleh ubah input sekitar 0, ia mengembalikan nombor dari tengah-tengah selang (10). Dalam discretize, kita tidak peduli tentang julat nilai output, membenarkan mereka menjadi negatif, jadi nilai keadaan tidak beralih, dan 0 sepadan dengan 0. (blok kod 8) + + ```python + env.reset() + + done = False + while not done: + #env.render() + obs, rew, done, info = env.step(env.action_space.sample()) + #print(discretize_bins(obs)) + print(discretize(obs)) + env.close() + ``` + + ✅ Nyahkomen baris yang bermula dengan env.render jika anda ingin melihat bagaimana persekitaran dilaksanakan. Jika tidak, anda boleh melaksanakannya di latar belakang, yang lebih cepat. Kita akan menggunakan pelaksanaan "tidak kelihatan" ini semasa proses Q-Learning kita. + +## Struktur Q-Table + +Dalam pelajaran sebelumnya, keadaan adalah pasangan nombor mudah dari 0 hingga 8, dan oleh itu ia mudah untuk mewakili Q-Table dengan tensor numpy dengan bentuk 8x8x2. Jika kita menggunakan diskretisasi bin, saiz vektor keadaan kita juga diketahui, jadi kita boleh menggunakan pendekatan yang sama dan mewakili keadaan dengan array bentuk 20x20x10x10x2 (di sini 2 adalah dimensi ruang tindakan, dan dimensi pertama sepadan dengan bilangan bin yang kita pilih untuk digunakan bagi setiap parameter dalam ruang pemerhatian). + +Walau bagaimanapun, kadangkala dimensi tepat ruang pemerhatian tidak diketahui. Dalam kes fungsi `discretize`, kita mungkin tidak pernah pasti bahawa keadaan kita kekal dalam had tertentu, kerana beberapa nilai asal tidak terikat. Oleh itu, kita akan menggunakan pendekatan yang sedikit berbeza dan mewakili Q-Table dengan kamus. + +1. Gunakan pasangan *(state,action)* sebagai kunci kamus, dan nilai akan sepadan dengan nilai entri Q-Table. (blok kod 9) + + ```python + Q = {} + actions = (0,1) + + def qvalues(state): + return [Q.get((state,a),0) for a in actions] + ``` + + Di sini kita juga mentakrifkan fungsi `qvalues()`, yang mengembalikan senarai nilai Q-Table untuk keadaan tertentu yang sepadan dengan semua tindakan yang mungkin. Jika entri tidak hadir dalam Q-Table, kita akan mengembalikan 0 sebagai lalai. + +## Mari mulakan Q-Learning + +Sekarang kita bersedia untuk mengajar Peter untuk menyeimbangkan! + +1. Pertama, mari tetapkan beberapa hiperparameter: (blok kod 10) + + ```python + # hyperparameters + alpha = 0.3 + gamma = 0.9 + epsilon = 0.90 + ``` + + Di sini, `alpha` adalah **kadar pembelajaran** yang menentukan sejauh mana kita harus menyesuaikan nilai semasa Q-Table pada setiap langkah. Dalam pelajaran sebelumnya kita bermula dengan 1, dan kemudian menurunkan `alpha` kepada nilai yang lebih rendah semasa latihan. Dalam contoh ini kita akan mengekalkannya tetap untuk kesederhanaan, dan anda boleh bereksperimen dengan menyesuaikan nilai `alpha` kemudian. + + `gamma` adalah **faktor diskaun** yang menunjukkan sejauh mana kita harus mengutamakan ganjaran masa depan berbanding ganjaran semasa. + + `epsilon` adalah **faktor penerokaan/eksploitasi** yang menentukan sama ada kita harus memilih penerokaan berbanding eksploitasi atau sebaliknya. Dalam algoritma kita, kita akan dalam peratusan `epsilon` kes memilih tindakan seterusnya mengikut nilai Q-Table, dan dalam baki kes kita akan melaksanakan tindakan secara rawak. Ini akan membolehkan kita meneroka kawasan ruang carian yang belum pernah kita lihat sebelum ini. + + ✅ Dalam konteks keseimbangan - memilih tindakan secara rawak (penerokaan) akan bertindak sebagai pukulan rawak ke arah yang salah, dan tiang perlu belajar bagaimana untuk memulihkan keseimbangan daripada "kesilapan" tersebut. + +### Meningkatkan algoritma + +Kita juga boleh membuat dua penambahbaikan pada algoritma kita daripada pelajaran sebelumnya: + +- **Kira ganjaran kumulatif purata**, sepanjang beberapa simulasi. Kita akan mencetak kemajuan setiap 5000 iterasi, dan kita akan mengambil purata ganjaran kumulatif kita sepanjang tempoh masa tersebut. Ini bermakna jika kita mendapat lebih daripada 195 mata - kita boleh menganggap masalah itu selesai, dengan kualiti yang lebih tinggi daripada yang diperlukan. + +- **Kira hasil kumulatif purata maksimum**, `Qmax`, dan kita akan menyimpan Q-Table yang sepadan dengan hasil tersebut. Apabila anda menjalankan latihan, anda akan perasan bahawa kadangkala hasil kumulatif purata mula menurun, dan kita mahu menyimpan nilai Q-Table yang sepadan dengan model terbaik yang diperhatikan semasa latihan. + +1. Kumpulkan semua ganjaran kumulatif pada setiap simulasi dalam vektor `rewards` untuk plot kemudian. (blok kod 11) + + ```python + def probs(v,eps=1e-4): + v = v-v.min()+eps + v = v/v.sum() + return v + + Qmax = 0 + cum_rewards = [] + rewards = [] + for epoch in range(100000): + obs = env.reset() + done = False + cum_reward=0 + # == do the simulation == + while not done: + s = discretize(obs) + if random.random() Qmax: + Qmax = np.average(cum_rewards) + Qbest = Q + cum_rewards=[] + ``` + +Apa yang anda mungkin perasan daripada hasil tersebut: + +- **Hampir mencapai matlamat**. Kita sangat hampir mencapai matlamat mendapatkan 195 ganjaran kumulatif dalam lebih daripada 100 percubaan berturut-turut simulasi, atau kita mungkin telah mencapainya! Walaupun kita mendapat nombor yang lebih kecil, kita masih tidak tahu, kerana kita mengambil purata lebih daripada 5000 percubaan, dan hanya 100 percubaan diperlukan dalam kriteria formal. + +- **Ganjaran mula menurun**. Kadangkala ganjaran mula menurun, yang bermaksud kita boleh "merosakkan" nilai yang telah dipelajari dalam Q-Table dengan nilai yang menjadikan keadaan lebih buruk. + +Pemerhatian ini lebih jelas kelihatan jika kita memplotkan kemajuan latihan. + +## Memplotkan Kemajuan Latihan + +Semasa latihan, kita telah mengumpulkan nilai ganjaran kumulatif pada setiap iterasi ke dalam vektor `rewards`. Berikut adalah bagaimana ia kelihatan apabila kita memplotkannya terhadap nombor iterasi: + +```python +plt.plot(rewards) +``` + +![kemajuan mentah](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.png) + +Daripada graf ini, tidak mungkin untuk memberitahu apa-apa, kerana disebabkan sifat proses latihan stokastik, panjang sesi latihan berbeza dengan ketara. Untuk membuat graf ini lebih bermakna, kita boleh mengira **purata berjalan** sepanjang siri eksperimen, katakan 100. Ini boleh dilakukan dengan mudah menggunakan `np.convolve`: (blok kod 12) + +```python +def running_average(x,window): + return np.convolve(x,np.ones(window)/window,mode='valid') + +plt.plot(running_average(rewards,100)) +``` + +![kemajuan latihan](../../../../8-Reinforcement/2-Gym/images/train_progress_runav.png) + +## Mengubah hiperparameter + +Untuk membuat pembelajaran lebih stabil, masuk akal untuk menyesuaikan beberapa hiperparameter kita semasa latihan. Khususnya: + +- **Untuk kadar pembelajaran**, `alpha`, kita boleh bermula dengan nilai yang hampir dengan 1, dan kemudian terus menurunkan parameter. Dengan masa, kita akan mendapat nilai kebarangkalian yang baik dalam Q-Table, dan oleh itu kita harus menyesuaikannya sedikit, dan tidak menulis semula sepenuhnya dengan nilai baru. + +- **Tingkatkan epsilon**. Kita mungkin mahu meningkatkan `epsilon` secara perlahan, untuk meneroka kurang dan mengeksploitasi lebih banyak. Mungkin masuk akal untuk bermula dengan nilai `epsilon` yang lebih rendah, dan meningkatkannya hampir kepada 1. +> **Tugas 1**: Cuba ubah nilai hiperparameter dan lihat jika anda boleh mencapai ganjaran kumulatif yang lebih tinggi. Adakah anda mendapat lebih daripada 195? +> **Tugas 2**: Untuk menyelesaikan masalah ini secara formal, anda perlu mencapai purata ganjaran sebanyak 195 dalam 100 larian berturut-turut. Ukur semasa latihan dan pastikan anda telah menyelesaikan masalah ini secara formal! + +## Melihat hasil dalam tindakan + +Ia akan menarik untuk melihat bagaimana model yang telah dilatih berfungsi. Mari jalankan simulasi dan ikuti strategi pemilihan tindakan yang sama seperti semasa latihan, dengan pensampelan mengikut taburan kebarangkalian dalam Q-Table: (blok kod 13) + +```python +obs = env.reset() +done = False +while not done: + s = discretize(obs) + env.render() + v = probs(np.array(qvalues(s))) + a = random.choices(actions,weights=v)[0] + obs,_,done,_ = env.step(a) +env.close() +``` + +Anda sepatutnya melihat sesuatu seperti ini: + +![a balancing cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif) + +--- + +## 🚀Cabaran + +> **Tugas 3**: Di sini, kita menggunakan salinan akhir Q-Table, yang mungkin bukan yang terbaik. Ingat bahawa kita telah menyimpan Q-Table yang berprestasi terbaik ke dalam pemboleh ubah `Qbest`! Cuba contoh yang sama dengan Q-Table yang berprestasi terbaik dengan menyalin `Qbest` ke `Q` dan lihat jika anda perasan perbezaannya. + +> **Tugas 4**: Di sini kita tidak memilih tindakan terbaik pada setiap langkah, tetapi sebaliknya melakukan pensampelan dengan taburan kebarangkalian yang sepadan. Adakah lebih masuk akal untuk sentiasa memilih tindakan terbaik, dengan nilai Q-Table tertinggi? Ini boleh dilakukan dengan menggunakan fungsi `np.argmax` untuk mencari nombor tindakan yang sepadan dengan nilai Q-Table tertinggi. Laksanakan strategi ini dan lihat jika ia meningkatkan keseimbangan. + +## [Kuiz selepas kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Tugasan +[Latih Mountain Car](assignment.md) + +## Kesimpulan + +Kita kini telah belajar bagaimana melatih agen untuk mencapai hasil yang baik hanya dengan menyediakan fungsi ganjaran yang menentukan keadaan permainan yang diinginkan, dan dengan memberi mereka peluang untuk meneroka ruang carian secara bijak. Kita telah berjaya menggunakan algoritma Q-Learning dalam kes persekitaran diskret dan berterusan, tetapi dengan tindakan diskret. + +Adalah penting untuk juga mengkaji situasi di mana keadaan tindakan juga berterusan, dan apabila ruang pemerhatian jauh lebih kompleks, seperti imej dari skrin permainan Atari. Dalam masalah tersebut, kita sering perlu menggunakan teknik pembelajaran mesin yang lebih berkuasa, seperti rangkaian neural, untuk mencapai hasil yang baik. Topik yang lebih maju ini adalah subjek kursus AI lanjutan kita yang akan datang. + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/8-Reinforcement/2-Gym/assignment.md b/translations/ms/8-Reinforcement/2-Gym/assignment.md new file mode 100644 index 00000000..cdef26fa --- /dev/null +++ b/translations/ms/8-Reinforcement/2-Gym/assignment.md @@ -0,0 +1,55 @@ + +# Latih Mountain Car + +[OpenAI Gym](http://gym.openai.com) telah direka sedemikian rupa sehingga semua persekitaran menyediakan API yang sama - iaitu kaedah yang sama `reset`, `step` dan `render`, serta abstraksi yang sama untuk **ruang tindakan** dan **ruang pemerhatian**. Oleh itu, seharusnya mungkin untuk menyesuaikan algoritma pembelajaran pengukuhan yang sama kepada persekitaran yang berbeza dengan perubahan kod yang minimum. + +## Persekitaran Mountain Car + +[Persekitaran Mountain Car](https://gym.openai.com/envs/MountainCar-v0/) mengandungi sebuah kereta yang terperangkap di dalam lembah: + +Tujuannya adalah untuk keluar dari lembah dan menangkap bendera, dengan melakukan salah satu tindakan berikut pada setiap langkah: + +| Nilai | Maksud | +|---|---| +| 0 | Memecut ke kiri | +| 1 | Tidak memecut | +| 2 | Memecut ke kanan | + +Namun, cabaran utama masalah ini adalah bahawa enjin kereta tidak cukup kuat untuk mendaki gunung dalam satu percubaan. Oleh itu, satu-satunya cara untuk berjaya adalah dengan memandu ke depan dan ke belakang untuk membina momentum. + +Ruang pemerhatian hanya terdiri daripada dua nilai: + +| Nombor | Pemerhatian | Min | Maks | +|-----|--------------|-----|-----| +| 0 | Kedudukan Kereta | -1.2| 0.6 | +| 1 | Kelajuan Kereta | -0.07 | 0.07 | + +Sistem ganjaran untuk Mountain Car agak rumit: + + * Ganjaran 0 diberikan jika agen mencapai bendera (kedudukan = 0.5) di puncak gunung. + * Ganjaran -1 diberikan jika kedudukan agen kurang daripada 0.5. + +Episod akan tamat jika kedudukan kereta melebihi 0.5, atau panjang episod melebihi 200. +## Arahan + +Sesuaikan algoritma pembelajaran pengukuhan kami untuk menyelesaikan masalah Mountain Car. Mulakan dengan kod [notebook.ipynb](../../../../8-Reinforcement/2-Gym/notebook.ipynb) yang sedia ada, gantikan persekitaran baru, ubah fungsi diskretisasi keadaan, dan cuba membuat algoritma sedia ada berlatih dengan perubahan kod yang minimum. Optimumkan hasil dengan menyesuaikan hiperparameter. + +> **Nota**: Penyesuaian hiperparameter mungkin diperlukan untuk membuat algoritma berjaya. +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | --------- | -------- | ----------------- | +| | Algoritma Q-Learning berjaya disesuaikan daripada contoh CartPole, dengan perubahan kod yang minimum, dan mampu menyelesaikan masalah menangkap bendera dalam kurang daripada 200 langkah. | Algoritma Q-Learning baru telah diambil dari Internet, tetapi didokumentasikan dengan baik; atau algoritma sedia ada disesuaikan, tetapi tidak mencapai hasil yang diinginkan | Pelajar tidak berjaya menyesuaikan sebarang algoritma, tetapi telah membuat langkah yang besar ke arah penyelesaian (melaksanakan diskretisasi keadaan, struktur data Q-Table, dll.) | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/8-Reinforcement/2-Gym/solution/Julia/README.md b/translations/ms/8-Reinforcement/2-Gym/solution/Julia/README.md new file mode 100644 index 00000000..bbbd2e21 --- /dev/null +++ b/translations/ms/8-Reinforcement/2-Gym/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat penting, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/8-Reinforcement/2-Gym/solution/R/README.md b/translations/ms/8-Reinforcement/2-Gym/solution/R/README.md new file mode 100644 index 00000000..e15b2d58 --- /dev/null +++ b/translations/ms/8-Reinforcement/2-Gym/solution/R/README.md @@ -0,0 +1,15 @@ + +ini adalah pemegang tempat sementara + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/8-Reinforcement/README.md b/translations/ms/8-Reinforcement/README.md new file mode 100644 index 00000000..cef0cc96 --- /dev/null +++ b/translations/ms/8-Reinforcement/README.md @@ -0,0 +1,67 @@ + +# Pengenalan kepada pembelajaran pengukuhan + +Pembelajaran pengukuhan, RL, dianggap sebagai salah satu paradigma pembelajaran mesin asas, selain pembelajaran terselia dan pembelajaran tidak terselia. RL berkaitan dengan membuat keputusan: memberikan keputusan yang tepat atau sekurang-kurangnya belajar daripadanya. + +Bayangkan anda mempunyai persekitaran simulasi seperti pasaran saham. Apa yang berlaku jika anda mengenakan peraturan tertentu? Adakah ia memberi kesan positif atau negatif? Jika sesuatu yang negatif berlaku, anda perlu mengambil _pengukuhan negatif_ ini, belajar daripadanya, dan mengubah haluan. Jika hasilnya positif, anda perlu membina atas _pengukuhan positif_ tersebut. + +![peter dan serigala](../../../8-Reinforcement/images/peter.png) + +> Peter dan rakan-rakannya perlu melarikan diri daripada serigala yang lapar! Imej oleh [Jen Looper](https://twitter.com/jenlooper) + +## Topik serantau: Peter dan Serigala (Rusia) + +[Peter dan Serigala](https://en.wikipedia.org/wiki/Peter_and_the_Wolf) ialah kisah dongeng muzik yang ditulis oleh komposer Rusia [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Ia adalah cerita tentang perintis muda Peter, yang dengan berani keluar dari rumahnya ke kawasan hutan untuk mengejar serigala. Dalam bahagian ini, kita akan melatih algoritma pembelajaran mesin yang akan membantu Peter: + +- **Meneroka** kawasan sekitar dan membina peta navigasi yang optimum +- **Belajar** cara menggunakan papan luncur dan mengimbangi di atasnya, untuk bergerak dengan lebih pantas. + +[![Peter dan Serigala](https://img.youtube.com/vi/Fmi5zHg4QSM/0.jpg)](https://www.youtube.com/watch?v=Fmi5zHg4QSM) + +> 🎥 Klik imej di atas untuk mendengar Peter dan Serigala oleh Prokofiev + +## Pembelajaran pengukuhan + +Dalam bahagian sebelumnya, anda telah melihat dua contoh masalah pembelajaran mesin: + +- **Terselia**, di mana kita mempunyai set data yang mencadangkan penyelesaian sampel kepada masalah yang ingin kita selesaikan. [Klasifikasi](../4-Classification/README.md) dan [regresi](../2-Regression/README.md) adalah tugas pembelajaran terselia. +- **Tidak terselia**, di mana kita tidak mempunyai data latihan berlabel. Contoh utama pembelajaran tidak terselia ialah [Pengelompokan](../5-Clustering/README.md). + +Dalam bahagian ini, kami akan memperkenalkan anda kepada jenis masalah pembelajaran baharu yang tidak memerlukan data latihan berlabel. Terdapat beberapa jenis masalah seperti ini: + +- **[Pembelajaran separa terselia](https://wikipedia.org/wiki/Semi-supervised_learning)**, di mana kita mempunyai banyak data tidak berlabel yang boleh digunakan untuk pra-latihan model. +- **[Pembelajaran pengukuhan](https://wikipedia.org/wiki/Reinforcement_learning)**, di mana agen belajar bagaimana untuk bertindak dengan melakukan eksperimen dalam persekitaran simulasi tertentu. + +### Contoh - permainan komputer + +Bayangkan anda ingin mengajar komputer bermain permainan, seperti catur, atau [Super Mario](https://wikipedia.org/wiki/Super_Mario). Untuk komputer bermain permainan, kita perlu ia meramalkan langkah mana yang perlu diambil dalam setiap keadaan permainan. Walaupun ini mungkin kelihatan seperti masalah klasifikasi, ia bukan - kerana kita tidak mempunyai set data dengan keadaan dan tindakan yang sepadan. Walaupun kita mungkin mempunyai beberapa data seperti perlawanan catur yang sedia ada atau rakaman pemain bermain Super Mario, kemungkinan besar data tersebut tidak mencukupi untuk merangkumi sejumlah besar keadaan yang mungkin. + +Daripada mencari data permainan yang sedia ada, **Pembelajaran Pengukuhan** (RL) berdasarkan idea *membuat komputer bermain* berkali-kali dan memerhatikan hasilnya. Oleh itu, untuk menggunakan Pembelajaran Pengukuhan, kita memerlukan dua perkara: + +- **Persekitaran** dan **simulator** yang membolehkan kita bermain permainan berkali-kali. Simulator ini akan mentakrifkan semua peraturan permainan serta keadaan dan tindakan yang mungkin. + +- **Fungsi ganjaran**, yang akan memberitahu kita sejauh mana prestasi kita semasa setiap langkah atau permainan. + +Perbezaan utama antara jenis pembelajaran mesin lain dan RL ialah dalam RL kita biasanya tidak tahu sama ada kita menang atau kalah sehingga kita selesai bermain permainan. Oleh itu, kita tidak boleh mengatakan sama ada langkah tertentu sahaja adalah baik atau tidak - kita hanya menerima ganjaran pada akhir permainan. Dan matlamat kita adalah untuk mereka bentuk algoritma yang akan membolehkan kita melatih model di bawah keadaan yang tidak pasti. Kita akan belajar tentang satu algoritma RL yang dipanggil **Q-learning**. + +## Pelajaran + +1. [Pengenalan kepada pembelajaran pengukuhan dan Q-Learning](1-QLearning/README.md) +2. [Menggunakan persekitaran simulasi gym](2-Gym/README.md) + +## Kredit + +"Pengenalan kepada Pembelajaran Pengukuhan" ditulis dengan ♥️ oleh [Dmitry Soshnikov](http://soshnikov.com) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/9-Real-World/1-Applications/README.md b/translations/ms/9-Real-World/1-Applications/README.md new file mode 100644 index 00000000..a0b45140 --- /dev/null +++ b/translations/ms/9-Real-World/1-Applications/README.md @@ -0,0 +1,159 @@ + +# Postscript: Pembelajaran Mesin di Dunia Sebenar + +![Ringkasan pembelajaran mesin di dunia sebenar dalam sketchnote](../../../../sketchnotes/ml-realworld.png) +> Sketchnote oleh [Tomomi Imura](https://www.twitter.com/girlie_mac) + +Dalam kurikulum ini, anda telah mempelajari pelbagai cara untuk menyediakan data bagi latihan dan mencipta model pembelajaran mesin. Anda telah membina siri model regresi klasik, pengelompokan, klasifikasi, pemprosesan bahasa semula jadi, dan siri masa. Tahniah! Kini, anda mungkin tertanya-tanya apa tujuan semua ini... apakah aplikasi dunia sebenar untuk model-model ini? + +Walaupun AI yang biasanya menggunakan pembelajaran mendalam telah menarik banyak perhatian dalam industri, masih terdapat aplikasi yang bernilai untuk model pembelajaran mesin klasik. Anda mungkin sudah menggunakan beberapa aplikasi ini hari ini! Dalam pelajaran ini, anda akan meneroka bagaimana lapan industri dan domain subjek yang berbeza menggunakan jenis model ini untuk menjadikan aplikasi mereka lebih berprestasi, boleh dipercayai, pintar, dan bernilai kepada pengguna. + +## [Kuiz pra-kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## 💰 Kewangan + +Sektor kewangan menawarkan banyak peluang untuk pembelajaran mesin. Banyak masalah dalam bidang ini sesuai untuk dimodelkan dan diselesaikan menggunakan ML. + +### Pengesanan penipuan kad kredit + +Kami telah mempelajari tentang [k-means clustering](../../5-Clustering/2-K-Means/README.md) sebelum ini dalam kursus, tetapi bagaimana ia boleh digunakan untuk menyelesaikan masalah berkaitan penipuan kad kredit? + +K-means clustering berguna dalam teknik pengesanan penipuan kad kredit yang dipanggil **pengesanan outlier**. Outlier, atau penyimpangan dalam pemerhatian tentang satu set data, boleh memberitahu kita sama ada kad kredit sedang digunakan secara normal atau jika terdapat sesuatu yang luar biasa. Seperti yang ditunjukkan dalam kertas kerja yang dipautkan di bawah, anda boleh menyusun data kad kredit menggunakan algoritma k-means clustering dan menetapkan setiap transaksi kepada kelompok berdasarkan sejauh mana ia kelihatan sebagai outlier. Kemudian, anda boleh menilai kelompok yang paling berisiko untuk transaksi penipuan berbanding transaksi sah. +[Rujukan](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.680.1195&rep=rep1&type=pdf) + +### Pengurusan kekayaan + +Dalam pengurusan kekayaan, individu atau firma mengendalikan pelaburan bagi pihak pelanggan mereka. Tugas mereka adalah untuk mengekalkan dan meningkatkan kekayaan dalam jangka masa panjang, jadi adalah penting untuk memilih pelaburan yang berprestasi baik. + +Salah satu cara untuk menilai bagaimana sesuatu pelaburan berprestasi adalah melalui regresi statistik. [Regresi linear](../../2-Regression/1-Tools/README.md) adalah alat yang berguna untuk memahami bagaimana sesuatu dana berprestasi berbanding penanda aras tertentu. Kita juga boleh membuat kesimpulan sama ada hasil regresi itu signifikan secara statistik, atau sejauh mana ia akan mempengaruhi pelaburan pelanggan. Anda juga boleh memperluaskan analisis anda menggunakan regresi berganda, di mana faktor risiko tambahan boleh diambil kira. Untuk contoh bagaimana ini berfungsi untuk dana tertentu, lihat kertas kerja di bawah tentang menilai prestasi dana menggunakan regresi. +[Rujukan](http://www.brightwoodventures.com/evaluating-fund-performance-using-regression/) + +## 🎓 Pendidikan + +Sektor pendidikan juga merupakan bidang yang sangat menarik di mana ML boleh digunakan. Terdapat masalah menarik untuk ditangani seperti mengesan penipuan dalam ujian atau esei atau menguruskan bias, sama ada sengaja atau tidak, dalam proses pembetulan. + +### Meramalkan tingkah laku pelajar + +[Coursera](https://coursera.com), penyedia kursus terbuka dalam talian, mempunyai blog teknologi yang hebat di mana mereka membincangkan banyak keputusan kejuruteraan. Dalam kajian kes ini, mereka memplotkan garis regresi untuk cuba meneroka sebarang korelasi antara penilaian NPS (Net Promoter Score) yang rendah dan pengekalan atau penurunan kursus. +[Rujukan](https://medium.com/coursera-engineering/controlled-regression-quantifying-the-impact-of-course-quality-on-learner-retention-31f956bd592a) + +### Mengurangkan bias + +[Grammarly](https://grammarly.com), pembantu penulisan yang memeriksa kesalahan ejaan dan tatabahasa, menggunakan sistem [pemprosesan bahasa semula jadi](../../6-NLP/README.md) yang canggih dalam produknya. Mereka menerbitkan kajian kes yang menarik dalam blog teknologi mereka tentang bagaimana mereka menangani bias jantina dalam pembelajaran mesin, yang anda pelajari dalam [pelajaran pengenalan tentang keadilan](../../1-Introduction/3-fairness/README.md). +[Rujukan](https://www.grammarly.com/blog/engineering/mitigating-gender-bias-in-autocorrect/) + +## 👜 Runcit + +Sektor runcit sememangnya boleh mendapat manfaat daripada penggunaan ML, dengan segala-galanya daripada mencipta perjalanan pelanggan yang lebih baik kepada pengurusan inventori secara optimum. + +### Memperibadikan perjalanan pelanggan + +Di Wayfair, sebuah syarikat yang menjual barangan rumah seperti perabot, membantu pelanggan mencari produk yang sesuai dengan citarasa dan keperluan mereka adalah sangat penting. Dalam artikel ini, jurutera dari syarikat tersebut menerangkan bagaimana mereka menggunakan ML dan NLP untuk "menampilkan hasil yang tepat untuk pelanggan". Khususnya, Query Intent Engine mereka telah dibina untuk menggunakan pengekstrakan entiti, latihan pengklasifikasi, pengekstrakan aset dan pendapat, serta penandaan sentimen pada ulasan pelanggan. Ini adalah contoh klasik bagaimana NLP berfungsi dalam runcit dalam talian. +[Rujukan](https://www.aboutwayfair.com/tech-innovation/how-we-use-machine-learning-and-natural-language-processing-to-empower-search) + +### Pengurusan inventori + +Syarikat inovatif dan tangkas seperti [StitchFix](https://stitchfix.com), perkhidmatan kotak yang menghantar pakaian kepada pengguna, sangat bergantung pada ML untuk cadangan dan pengurusan inventori. Pasukan penggayaan mereka bekerjasama dengan pasukan merchandising mereka, sebenarnya: "salah seorang saintis data kami bermain-main dengan algoritma genetik dan menerapkannya pada pakaian untuk meramalkan apa yang akan menjadi pakaian yang berjaya yang tidak wujud hari ini. Kami membawa itu kepada pasukan merchandise dan kini mereka boleh menggunakannya sebagai alat." +[Rujukan](https://www.zdnet.com/article/how-stitch-fix-uses-machine-learning-to-master-the-science-of-styling/) + +## 🏥 Penjagaan Kesihatan + +Sektor penjagaan kesihatan boleh memanfaatkan ML untuk mengoptimumkan tugas penyelidikan dan juga masalah logistik seperti kemasukan semula pesakit atau menghentikan penyebaran penyakit. + +### Pengurusan ujian klinikal + +Ketoksikan dalam ujian klinikal adalah kebimbangan utama kepada pembuat ubat. Berapa banyak ketoksikan yang boleh diterima? Dalam kajian ini, menganalisis pelbagai kaedah ujian klinikal membawa kepada pembangunan pendekatan baharu untuk meramalkan kemungkinan hasil ujian klinikal. Khususnya, mereka dapat menggunakan random forest untuk menghasilkan [pengklasifikasi](../../4-Classification/README.md) yang mampu membezakan antara kumpulan ubat. +[Rujukan](https://www.sciencedirect.com/science/article/pii/S2451945616302914) + +### Pengurusan kemasukan semula hospital + +Penjagaan hospital adalah mahal, terutamanya apabila pesakit perlu dimasukkan semula. Kertas kerja ini membincangkan sebuah syarikat yang menggunakan ML untuk meramalkan potensi kemasukan semula menggunakan algoritma [pengelompokan](../../5-Clustering/README.md). Kelompok ini membantu penganalisis untuk "menemui kumpulan kemasukan semula yang mungkin berkongsi punca yang sama". +[Rujukan](https://healthmanagement.org/c/healthmanagement/issuearticle/hospital-readmissions-and-machine-learning) + +### Pengurusan penyakit + +Pandemik baru-baru ini telah menonjolkan cara pembelajaran mesin boleh membantu menghentikan penyebaran penyakit. Dalam artikel ini, anda akan mengenali penggunaan ARIMA, lengkung logistik, regresi linear, dan SARIMA. "Kerja ini adalah usaha untuk mengira kadar penyebaran virus ini dan dengan itu meramalkan kematian, pemulihan, dan kes yang disahkan, supaya ia dapat membantu kita untuk bersedia dengan lebih baik dan bertahan." +[Rujukan](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7979218/) + +## 🌲 Ekologi dan Teknologi Hijau + +Alam semula jadi dan ekologi terdiri daripada banyak sistem sensitif di mana interaksi antara haiwan dan alam semula jadi menjadi fokus. Adalah penting untuk dapat mengukur sistem ini dengan tepat dan bertindak dengan sewajarnya jika sesuatu berlaku, seperti kebakaran hutan atau penurunan populasi haiwan. + +### Pengurusan hutan + +Anda telah mempelajari tentang [Pembelajaran Pengukuhan](../../8-Reinforcement/README.md) dalam pelajaran sebelumnya. Ia boleh sangat berguna apabila cuba meramalkan corak dalam alam semula jadi. Khususnya, ia boleh digunakan untuk menjejaki masalah ekologi seperti kebakaran hutan dan penyebaran spesies invasif. Di Kanada, sekumpulan penyelidik menggunakan Pembelajaran Pengukuhan untuk membina model dinamik kebakaran hutan daripada imej satelit. Menggunakan "proses penyebaran spatial (SSP)" yang inovatif, mereka membayangkan kebakaran hutan sebagai "agen di mana-mana sel dalam landskap." "Set tindakan yang boleh diambil oleh kebakaran dari lokasi pada bila-bila masa termasuk menyebar ke utara, selatan, timur, atau barat atau tidak menyebar. + +Pendekatan ini membalikkan persediaan RL biasa kerana dinamik Proses Keputusan Markov (MDP) yang sepadan adalah fungsi yang diketahui untuk penyebaran kebakaran segera." Baca lebih lanjut tentang algoritma klasik yang digunakan oleh kumpulan ini di pautan di bawah. +[Rujukan](https://www.frontiersin.org/articles/10.3389/fict.2018.00006/full) + +### Pengesanan pergerakan haiwan + +Walaupun pembelajaran mendalam telah mencipta revolusi dalam menjejaki pergerakan haiwan secara visual (anda boleh membina [penjejak beruang kutub](https://docs.microsoft.com/learn/modules/build-ml-model-with-azure-stream-analytics/?WT.mc_id=academic-77952-leestott) anda sendiri di sini), ML klasik masih mempunyai tempat dalam tugas ini. + +Sensor untuk menjejaki pergerakan haiwan ternakan dan IoT menggunakan jenis pemprosesan visual ini, tetapi teknik ML yang lebih asas berguna untuk memproses data awal. Sebagai contoh, dalam kertas kerja ini, postur kambing biri-biri dipantau dan dianalisis menggunakan pelbagai algoritma pengklasifikasi. Anda mungkin mengenali lengkung ROC pada halaman 335. +[Rujukan](https://druckhaus-hofmann.de/gallery/31-wj-feb-2020.pdf) + +### ⚡️ Pengurusan Tenaga + +Dalam pelajaran kami tentang [ramalan siri masa](../../7-TimeSeries/README.md), kami menyebut konsep meter parkir pintar untuk menjana pendapatan bagi sebuah bandar berdasarkan pemahaman tentang penawaran dan permintaan. Artikel ini membincangkan secara terperinci bagaimana pengelompokan, regresi, dan ramalan siri masa digabungkan untuk membantu meramalkan penggunaan tenaga masa depan di Ireland, berdasarkan meter pintar. +[Rujukan](https://www-cdn.knime.com/sites/default/files/inline-images/knime_bigdata_energy_timeseries_whitepaper.pdf) + +## 💼 Insurans + +Sektor insurans adalah satu lagi sektor yang menggunakan ML untuk membina dan mengoptimumkan model kewangan dan aktuari yang berdaya maju. + +### Pengurusan Volatiliti + +MetLife, penyedia insurans hayat, terbuka dengan cara mereka menganalisis dan mengurangkan volatiliti dalam model kewangan mereka. Dalam artikel ini, anda akan melihat visualisasi klasifikasi binari dan ordinal. Anda juga akan menemui visualisasi ramalan. +[Rujukan](https://investments.metlife.com/content/dam/metlifecom/us/investments/insights/research-topics/macro-strategy/pdf/MetLifeInvestmentManagement_MachineLearnedRanking_070920.pdf) + +## 🎨 Seni, Budaya, dan Kesusasteraan + +Dalam seni, contohnya dalam kewartawanan, terdapat banyak masalah menarik. Mengesan berita palsu adalah masalah besar kerana ia telah terbukti mempengaruhi pendapat orang ramai dan bahkan menjatuhkan demokrasi. Muzium juga boleh mendapat manfaat daripada menggunakan ML dalam segala-galanya daripada mencari hubungan antara artifak kepada perancangan sumber. + +### Pengesanan berita palsu + +Mengesan berita palsu telah menjadi permainan kucing dan tikus dalam media hari ini. Dalam artikel ini, penyelidik mencadangkan bahawa sistem yang menggabungkan beberapa teknik ML yang telah kami pelajari boleh diuji dan model terbaik digunakan: "Sistem ini berdasarkan pemprosesan bahasa semula jadi untuk mengekstrak ciri daripada data dan kemudian ciri-ciri ini digunakan untuk latihan pengklasifikasi pembelajaran mesin seperti Naive Bayes, Support Vector Machine (SVM), Random Forest (RF), Stochastic Gradient Descent (SGD), dan Logistic Regression (LR)." +[Rujukan](https://www.irjet.net/archives/V7/i6/IRJET-V7I6688.pdf) + +Artikel ini menunjukkan bagaimana menggabungkan pelbagai domain ML boleh menghasilkan hasil menarik yang boleh membantu menghentikan penyebaran berita palsu dan mencipta kerosakan sebenar; dalam kes ini, dorongan adalah penyebaran khabar angin tentang rawatan COVID yang mencetuskan keganasan massa. + +### ML Muzium + +Muzium berada di ambang revolusi AI di mana katalog dan pendigitalan koleksi serta mencari hubungan antara artifak menjadi lebih mudah apabila teknologi maju. Projek seperti [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources.) membantu membuka misteri koleksi yang tidak dapat diakses seperti Arkib Vatican. Tetapi, aspek perniagaan muzium mendapat manfaat daripada model ML juga. + +Sebagai contoh, Art Institute of Chicago membina model untuk meramalkan apa yang penonton minati dan bila mereka akan menghadiri pameran. Matlamatnya adalah untuk mencipta pengalaman pelawat yang diperibadikan dan dioptimumkan setiap kali pengguna melawat muzium. "Semasa tahun fiskal 2017, model itu meramalkan kehadiran dan kemasukan dengan ketepatan dalam 1 peratus, kata Andrew Simnick, naib presiden kanan di Art Institute." +[Rujukan](https://www.chicagobusiness.com/article/20180518/ISSUE01/180519840/art-institute-of-chicago-uses-data-to-make-exhibit-choices) + +## 🏷 Pemasaran + +### Segmentasi pelanggan + +Strategi pemasaran yang paling berkesan menyasarkan pelanggan dengan cara yang berbeza berdasarkan pelbagai kumpulan. Dalam artikel ini, penggunaan algoritma pengelompokan dibincangkan untuk menyokong pemasaran yang berbeza. Pemasaran yang berbeza membantu syarikat meningkatkan pengiktirafan jenama, mencapai lebih ramai pelanggan, dan menjana lebih banyak wang. +[Rujukan](https://ai.inqline.com/machine-learning-for-marketing-customer-segmentation/) + +## 🚀 Cabaran + +Kenal pasti sektor lain yang mendapat manfaat daripada beberapa teknik yang anda pelajari dalam kurikulum ini, dan temui bagaimana ia menggunakan ML. +## [Kuiz selepas kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Ulasan & Kajian Kendiri + +Pasukan sains data Wayfair mempunyai beberapa video menarik tentang bagaimana mereka menggunakan ML di syarikat mereka. Ia berbaloi untuk [dilihat](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos)! + +## Tugasan + +[Perburuan ML](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/9-Real-World/1-Applications/assignment.md b/translations/ms/9-Real-World/1-Applications/assignment.md new file mode 100644 index 00000000..f51a732f --- /dev/null +++ b/translations/ms/9-Real-World/1-Applications/assignment.md @@ -0,0 +1,27 @@ + +# Pemburuan Harta Karun ML + +## Arahan + +Dalam pelajaran ini, anda telah mempelajari banyak kes penggunaan sebenar yang diselesaikan menggunakan ML klasik. Walaupun penggunaan pembelajaran mendalam, teknik dan alat baharu dalam AI, serta penggunaan rangkaian neural telah membantu mempercepatkan penghasilan alat untuk membantu dalam sektor-sektor ini, ML klasik menggunakan teknik dalam kurikulum ini masih mempunyai nilai yang besar. + +Dalam tugasan ini, bayangkan anda sedang menyertai sebuah hackathon. Gunakan apa yang anda pelajari dalam kurikulum untuk mencadangkan penyelesaian menggunakan ML klasik bagi menyelesaikan masalah dalam salah satu sektor yang dibincangkan dalam pelajaran ini. Buat satu pembentangan di mana anda membincangkan bagaimana anda akan melaksanakan idea anda. Mata bonus jika anda dapat mengumpulkan data sampel dan membina model ML untuk menyokong konsep anda! + +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | ------------------------------------------------------------------- | ------------------------------------------------- | ---------------------- | +| | Pembentangan PowerPoint disediakan - bonus untuk membina model | Pembentangan asas yang tidak inovatif disediakan | Kerja tidak lengkap | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/9-Real-World/2-Debugging-ML-Models/README.md b/translations/ms/9-Real-World/2-Debugging-ML-Models/README.md new file mode 100644 index 00000000..d936d007 --- /dev/null +++ b/translations/ms/9-Real-World/2-Debugging-ML-Models/README.md @@ -0,0 +1,183 @@ + +# Postscript: Penyahpepijatan Model dalam Pembelajaran Mesin menggunakan komponen papan pemuka AI Bertanggungjawab + +## [Kuiz pra-kuliah](https://ff-quizzes.netlify.app/en/ml/) + +## Pengenalan + +Pembelajaran mesin memberi kesan kepada kehidupan harian kita. AI semakin digunakan dalam beberapa sistem paling penting yang mempengaruhi kita sebagai individu dan masyarakat, seperti penjagaan kesihatan, kewangan, pendidikan, dan pekerjaan. Sebagai contoh, sistem dan model terlibat dalam tugas membuat keputusan harian, seperti diagnosis penjagaan kesihatan atau pengesanan penipuan. Akibatnya, kemajuan AI bersama dengan penerimaan yang dipercepatkan telah bertemu dengan jangkaan masyarakat yang berkembang dan peraturan yang semakin ketat sebagai tindak balas. Kita sering melihat kawasan di mana sistem AI terus gagal memenuhi jangkaan; mereka mendedahkan cabaran baharu; dan kerajaan mula mengawal selia penyelesaian AI. Oleh itu, adalah penting untuk menganalisis model ini bagi menyediakan hasil yang adil, boleh dipercayai, inklusif, telus, dan bertanggungjawab untuk semua orang. + +Dalam kurikulum ini, kita akan melihat alat praktikal yang boleh digunakan untuk menilai sama ada model mempunyai isu AI yang bertanggungjawab. Teknik penyahpepijatan pembelajaran mesin tradisional cenderung berdasarkan pengiraan kuantitatif seperti ketepatan agregat atau purata kehilangan ralat. Bayangkan apa yang boleh berlaku apabila data yang anda gunakan untuk membina model ini kekurangan demografi tertentu, seperti bangsa, jantina, pandangan politik, agama, atau mewakili demografi tersebut secara tidak seimbang. Bagaimana pula apabila output model ditafsirkan untuk memihak kepada beberapa demografi? Ini boleh memperkenalkan perwakilan berlebihan atau kurang bagi kumpulan ciri sensitif ini, yang mengakibatkan isu keadilan, keterangkuman, atau kebolehpercayaan daripada model. Faktor lain ialah model pembelajaran mesin dianggap sebagai kotak hitam, yang menjadikannya sukar untuk memahami dan menjelaskan apa yang mendorong ramalan model. Semua ini adalah cabaran yang dihadapi oleh saintis data dan pembangun AI apabila mereka tidak mempunyai alat yang mencukupi untuk menyahpepijat dan menilai keadilan atau kebolehpercayaan model. + +Dalam pelajaran ini, anda akan belajar tentang penyahpepijatan model anda menggunakan: + +- **Analisis Ralat**: mengenal pasti di mana dalam taburan data anda model mempunyai kadar ralat yang tinggi. +- **Gambaran Keseluruhan Model**: melakukan analisis perbandingan merentasi pelbagai kohort data untuk menemui ketidaksamaan dalam metrik prestasi model anda. +- **Analisis Data**: menyiasat di mana mungkin terdapat perwakilan berlebihan atau kurang dalam data anda yang boleh mempengaruhi model anda untuk memihak kepada satu demografi data berbanding yang lain. +- **Kepentingan Ciri**: memahami ciri-ciri yang mendorong ramalan model anda pada tahap global atau tempatan. + +## Prasyarat + +Sebagai prasyarat, sila semak [Alat AI Bertanggungjawab untuk pembangun](https://www.microsoft.com/ai/ai-lab-responsible-ai-dashboard) + +> ![Gif tentang Alat AI Bertanggungjawab](../../../../9-Real-World/2-Debugging-ML-Models/images/rai-overview.gif) + +## Analisis Ralat + +Metrik prestasi model tradisional yang digunakan untuk mengukur ketepatan kebanyakannya adalah pengiraan berdasarkan ramalan betul vs salah. Sebagai contoh, menentukan bahawa model adalah tepat 89% masa dengan kehilangan ralat sebanyak 0.001 boleh dianggap sebagai prestasi yang baik. Ralat selalunya tidak diedarkan secara seragam dalam set data asas anda. Anda mungkin mendapat skor ketepatan model 89% tetapi mendapati bahawa terdapat kawasan berbeza dalam data anda di mana model gagal 42% masa. Akibat daripada corak kegagalan ini dengan kumpulan data tertentu boleh membawa kepada isu keadilan atau kebolehpercayaan. Adalah penting untuk memahami kawasan di mana model berprestasi baik atau tidak. Kawasan data di mana terdapat sejumlah besar ketidaktepatan dalam model anda mungkin ternyata menjadi demografi data yang penting. + +![Menganalisis dan menyahpepijat ralat model](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-distribution.png) + +Komponen Analisis Ralat pada papan pemuka RAI menggambarkan bagaimana kegagalan model diedarkan merentasi pelbagai kohort dengan visualisasi pokok. Ini berguna untuk mengenal pasti ciri atau kawasan di mana terdapat kadar ralat yang tinggi dengan set data anda. Dengan melihat dari mana kebanyakan ketidaktepatan model datang, anda boleh mula menyiasat punca utama. Anda juga boleh mencipta kohort data untuk melakukan analisis. Kohort data ini membantu dalam proses penyahpepijatan untuk menentukan mengapa prestasi model baik dalam satu kohort tetapi salah dalam yang lain. + +![Analisis Ralat](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-cohort.png) + +Penunjuk visual pada peta pokok membantu dalam mencari kawasan masalah dengan lebih cepat. Sebagai contoh, semakin gelap warna merah pada nod pokok, semakin tinggi kadar ralat. + +Peta haba adalah satu lagi fungsi visualisasi yang boleh digunakan oleh pengguna dalam menyiasat kadar ralat menggunakan satu atau dua ciri untuk mencari penyumbang kepada ralat model merentasi keseluruhan set data atau kohort. + +![Peta Haba Analisis Ralat](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-heatmap.png) + +Gunakan analisis ralat apabila anda perlu: + +* Mendapatkan pemahaman mendalam tentang bagaimana kegagalan model diedarkan merentasi set data dan merentasi beberapa dimensi input dan ciri. +* Memecahkan metrik prestasi agregat untuk secara automatik menemui kohort yang salah bagi memaklumkan langkah mitigasi yang disasarkan. + +## Gambaran Keseluruhan Model + +Menilai prestasi model pembelajaran mesin memerlukan pemahaman holistik tentang tingkah lakunya. Ini boleh dicapai dengan menyemak lebih daripada satu metrik seperti kadar ralat, ketepatan, ingatan, ketepatan, atau MAE (Mean Absolute Error) untuk mencari ketidaksamaan antara metrik prestasi. Satu metrik prestasi mungkin kelihatan hebat, tetapi ketidaktepatan boleh didedahkan dalam metrik lain. Selain itu, membandingkan metrik untuk ketidaksamaan merentasi keseluruhan set data atau kohort membantu menjelaskan di mana model berprestasi baik atau tidak. Ini amat penting dalam melihat prestasi model di kalangan ciri sensitif vs tidak sensitif (contohnya, bangsa pesakit, jantina, atau umur) untuk mendedahkan potensi ketidakadilan yang mungkin ada pada model. Sebagai contoh, mendapati bahawa model lebih salah dalam kohort yang mempunyai ciri sensitif boleh mendedahkan potensi ketidakadilan yang mungkin ada pada model. + +Komponen Gambaran Keseluruhan Model pada papan pemuka RAI membantu bukan sahaja dalam menganalisis metrik prestasi perwakilan data dalam kohort, tetapi ia memberi pengguna keupayaan untuk membandingkan tingkah laku model merentasi kohort yang berbeza. + +![Kohort dataset - gambaran keseluruhan model dalam papan pemuka RAI](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-dataset-cohorts.png) + +Fungsi analisis berasaskan ciri komponen membolehkan pengguna memperincikan subkumpulan data dalam ciri tertentu untuk mengenal pasti anomali pada tahap yang lebih terperinci. Sebagai contoh, papan pemuka mempunyai kecerdasan terbina dalam untuk secara automatik menjana kohort untuk ciri yang dipilih oleh pengguna (contohnya, *"time_in_hospital < 3"* atau *"time_in_hospital >= 7"*). Ini membolehkan pengguna mengasingkan ciri tertentu daripada kumpulan data yang lebih besar untuk melihat sama ada ia adalah pengaruh utama kepada hasil yang salah model. + +![Kohort ciri - gambaran keseluruhan model dalam papan pemuka RAI](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-feature-cohorts.png) + +Komponen Gambaran Keseluruhan Model menyokong dua kelas metrik ketidaksamaan: + +**Ketidaksamaan dalam prestasi model**: Set metrik ini mengira ketidaksamaan (perbezaan) dalam nilai metrik prestasi yang dipilih merentasi subkumpulan data. Berikut adalah beberapa contoh: + +* Ketidaksamaan dalam kadar ketepatan +* Ketidaksamaan dalam kadar ralat +* Ketidaksamaan dalam ketepatan +* Ketidaksamaan dalam ingatan +* Ketidaksamaan dalam mean absolute error (MAE) + +**Ketidaksamaan dalam kadar pemilihan**: Metrik ini mengandungi perbezaan dalam kadar pemilihan (ramalan yang menguntungkan) di kalangan subkumpulan. Contoh ini ialah ketidaksamaan dalam kadar kelulusan pinjaman. Kadar pemilihan bermaksud pecahan titik data dalam setiap kelas yang diklasifikasikan sebagai 1 (dalam klasifikasi binari) atau taburan nilai ramalan (dalam regresi). + +## Analisis Data + +> "Jika anda menyeksa data cukup lama, ia akan mengaku apa sahaja" - Ronald Coase + +Kenyataan ini kedengaran ekstrem, tetapi benar bahawa data boleh dimanipulasi untuk menyokong sebarang kesimpulan. Manipulasi sedemikian kadangkala boleh berlaku secara tidak sengaja. Sebagai manusia, kita semua mempunyai bias, dan sering sukar untuk mengetahui secara sedar apabila anda memperkenalkan bias dalam data. Menjamin keadilan dalam AI dan pembelajaran mesin kekal sebagai cabaran yang kompleks. + +Data adalah titik buta besar untuk metrik prestasi model tradisional. Anda mungkin mempunyai skor ketepatan yang tinggi, tetapi ini tidak selalu mencerminkan bias data asas yang mungkin ada dalam set data anda. Sebagai contoh, jika set data pekerja mempunyai 27% wanita dalam jawatan eksekutif di sebuah syarikat dan 73% lelaki pada tahap yang sama, model AI pengiklanan pekerjaan yang dilatih pada data ini mungkin menyasarkan kebanyakan penonton lelaki untuk jawatan pekerjaan peringkat kanan. Mempunyai ketidakseimbangan ini dalam data mempengaruhi ramalan model untuk memihak kepada satu jantina. Ini mendedahkan isu keadilan di mana terdapat bias jantina dalam model AI. + +Komponen Analisis Data pada papan pemuka RAI membantu mengenal pasti kawasan di mana terdapat perwakilan berlebihan dan kurang dalam set data. Ia membantu pengguna mendiagnosis punca utama ralat dan isu keadilan yang diperkenalkan daripada ketidakseimbangan data atau kekurangan perwakilan kumpulan data tertentu. Ini memberi pengguna keupayaan untuk memvisualisasikan set data berdasarkan hasil yang diramalkan dan sebenar, kumpulan ralat, dan ciri tertentu. Kadangkala penemuan kumpulan data yang kurang diwakili juga boleh mendedahkan bahawa model tidak belajar dengan baik, maka ketidaktepatan yang tinggi. Mempunyai model yang mempunyai bias data bukan sahaja isu keadilan tetapi menunjukkan bahawa model tidak inklusif atau boleh dipercayai. + +![Komponen Analisis Data pada Papan Pemuka RAI](../../../../9-Real-World/2-Debugging-ML-Models/images/dataanalysis-cover.png) + +Gunakan analisis data apabila anda perlu: + +* Meneroka statistik set data anda dengan memilih penapis berbeza untuk membahagikan data anda kepada dimensi berbeza (juga dikenali sebagai kohort). +* Memahami taburan set data anda merentasi kohort dan kumpulan ciri yang berbeza. +* Menentukan sama ada penemuan anda berkaitan dengan keadilan, analisis ralat, dan sebab-akibat (yang diperoleh daripada komponen papan pemuka lain) adalah hasil daripada taburan set data anda. +* Memutuskan di kawasan mana untuk mengumpul lebih banyak data bagi mengurangkan ralat yang datang daripada isu perwakilan, bunyi label, bunyi ciri, bias label, dan faktor serupa. + +## Kebolehinterpretasian Model + +Model pembelajaran mesin cenderung menjadi kotak hitam. Memahami ciri data utama yang mendorong ramalan model boleh menjadi mencabar. Adalah penting untuk menyediakan ketelusan tentang mengapa model membuat ramalan tertentu. Sebagai contoh, jika sistem AI meramalkan bahawa pesakit diabetes berisiko dimasukkan semula ke hospital dalam masa kurang daripada 30 hari, ia sepatutnya dapat menyediakan data sokongan yang membawa kepada ramalannya. Mempunyai penunjuk data sokongan membawa ketelusan untuk membantu doktor atau hospital membuat keputusan yang tepat. Selain itu, dapat menjelaskan mengapa model membuat ramalan untuk pesakit individu membolehkan akauntabiliti dengan peraturan kesihatan. Apabila anda menggunakan model pembelajaran mesin dengan cara yang memberi kesan kepada kehidupan manusia, adalah penting untuk memahami dan menjelaskan apa yang mempengaruhi tingkah laku model. Kebolehjelasan dan kebolehinterpretasian model membantu menjawab soalan dalam senario seperti: + +* Penyahpepijatan model: Mengapa model saya membuat kesilapan ini? Bagaimana saya boleh memperbaiki model saya? +* Kerjasama manusia-AI: Bagaimana saya boleh memahami dan mempercayai keputusan model? +* Pematuhan peraturan: Adakah model saya memenuhi keperluan undang-undang? + +Komponen Kepentingan Ciri pada papan pemuka RAI membantu anda menyahpepijat dan mendapatkan pemahaman yang komprehensif tentang bagaimana model membuat ramalan. Ia juga merupakan alat yang berguna untuk profesional pembelajaran mesin dan pembuat keputusan untuk menjelaskan dan menunjukkan bukti ciri yang mempengaruhi tingkah laku model untuk pematuhan peraturan. Seterusnya, pengguna boleh meneroka penjelasan global dan tempatan untuk mengesahkan ciri mana yang mendorong ramalan model. Penjelasan global menyenaraikan ciri utama yang mempengaruhi ramalan keseluruhan model. Penjelasan tempatan memaparkan ciri mana yang membawa kepada ramalan model untuk kes individu. Keupayaan untuk menilai penjelasan tempatan juga berguna dalam menyahpepijat atau mengaudit kes tertentu untuk lebih memahami dan mentafsir mengapa model membuat ramalan yang tepat atau tidak tepat. + +![Komponen Kepentingan Ciri pada papan pemuka RAI](../../../../9-Real-World/2-Debugging-ML-Models/images/9-feature-importance.png) + +* Penjelasan global: Sebagai contoh, ciri apa yang mempengaruhi tingkah laku keseluruhan model kemasukan semula hospital diabetes? +* Penjelasan tempatan: Sebagai contoh, mengapa pesakit diabetes berumur lebih 60 tahun dengan kemasukan hospital sebelumnya diramalkan untuk dimasukkan semula atau tidak dimasukkan semula dalam masa 30 hari ke hospital? + +Dalam proses penyahpepijatan untuk memeriksa prestasi model merentasi kohort yang berbeza, Kepentingan Ciri menunjukkan tahap pengaruh ciri merentasi kohort. Ia membantu mendedahkan anomali apabila membandingkan tahap pengaruh ciri dalam mendorong ramalan yang salah model. Komponen Kepentingan Ciri boleh menunjukkan nilai mana dalam ciri yang mempengaruhi hasil model secara positif atau negatif. Sebagai contoh, jika model membuat ramalan yang tidak tepat, komponen ini memberi anda keupayaan untuk memperincikan dan mengenal pasti ciri atau nilai ciri yang mendorong ramalan tersebut. Tahap perincian ini bukan sahaja membantu dalam penyahpepijatan tetapi menyediakan ketelusan dan akauntabiliti dalam situasi pengauditan. Akhirnya, komponen ini boleh membantu anda mengenal pasti isu keadilan. Sebagai ilustrasi, jika ciri sensitif seperti etnik atau jantina sangat mempengaruhi ramalan model, ini boleh menjadi tanda bias kaum atau jantina dalam model. + +![Kepentingan ciri](../../../../9-Real-World/2-Debugging-ML-Models/images/9-features-influence.png) + +Gunakan kebolehinterpretasian apabila anda perlu: + +* Menentukan sejauh mana ramalan sistem AI anda boleh dipercayai dengan memahami ciri mana yang paling penting untuk ramalan tersebut. +* Mendekati penyahpepijatan model anda dengan memahaminya terlebih dahulu dan mengenal pasti sama ada model menggunakan ciri yang sihat atau hanya korelasi palsu. +* Mendedahkan potensi sumber ketidakadilan dengan memahami sama ada model membuat ramalan berdasarkan ciri sensitif atau ciri yang sangat berkorelasi dengannya. +* Membina kepercayaan pengguna terhadap keputusan model anda dengan menjana penjelasan tempatan untuk menggambarkan hasilnya. +* Melengkapkan audit peraturan sistem AI untuk mengesahkan model dan memantau kesan keputusan model terhadap manusia. + +## Kesimpulan + +Semua komponen papan pemuka RAI adalah alat praktikal untuk membantu anda membina model pembelajaran mesin yang kurang berbahaya dan lebih dipercayai oleh masyarakat. Ia meningkatkan pencegahan ancaman kepada hak asasi manusia; mendiskriminasi atau mengecualikan kumpulan tertentu daripada peluang hidup; dan risiko kecederaan fizikal atau psikologi. Ia juga membantu membina kepercayaan terhadap keputusan model anda dengan menjana penjelasan tempatan untuk menggambarkan hasilnya. Beberapa potensi bahaya boleh diklasifikasikan sebagai: + +- **Peruntukan**, jika jantina atau etnik sebagai contoh lebih disukai berbanding yang lain. +- **Kualiti perkhidmatan**. Jika anda melatih data untuk satu senario tertentu tetapi realitinya jauh lebih kompleks, ia membawa kepada perkhidmatan yang kurang berprestasi. +- **Stereotaip**. Mengaitkan kumpulan tertentu dengan atribut yang telah ditetapkan. +- **Pencemaran nama baik**. Mengkritik dan melabel sesuatu atau seseorang secara tidak adil. +- **Perwakilan berlebihan atau kurang**. Idea di sini adalah bahawa kumpulan tertentu tidak kelihatan dalam profesion tertentu, dan sebarang perkhidmatan atau fungsi yang terus mempromosikan perkara ini menyumbang kepada kemudaratan. + +### Papan Pemuka Azure RAI + +[Papan Pemuka Azure RAI](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) dibina menggunakan alat sumber terbuka yang dikembangkan oleh institusi akademik dan organisasi terkemuka termasuk Microsoft, yang sangat membantu saintis data dan pembangun AI untuk memahami tingkah laku model, mengenal pasti dan mengurangkan isu yang tidak diingini daripada model AI. + +- Ketahui cara menggunakan komponen yang berbeza dengan melihat [dokumentasi papan pemuka RAI.](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) + +- Lihat beberapa [notebook contoh papan pemuka RAI](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) untuk menyelesaikan senario AI yang lebih bertanggungjawab dalam Azure Machine Learning. + +--- +## 🚀 Cabaran + +Untuk mengelakkan bias statistik atau data daripada diperkenalkan sejak awal, kita harus: + +- mempunyai kepelbagaian latar belakang dan perspektif di kalangan orang yang bekerja pada sistem +- melabur dalam set data yang mencerminkan kepelbagaian masyarakat kita +- membangunkan kaedah yang lebih baik untuk mengesan dan membetulkan bias apabila ia berlaku + +Fikirkan tentang senario kehidupan sebenar di mana ketidakadilan jelas dalam pembinaan dan penggunaan model. Apa lagi yang perlu kita pertimbangkan? + +## [Kuiz selepas kuliah](https://ff-quizzes.netlify.app/en/ml/) +## Ulasan & Kajian Kendiri + +Dalam pelajaran ini, anda telah mempelajari beberapa alat praktikal untuk mengintegrasikan AI yang bertanggungjawab dalam pembelajaran mesin. + +Tonton bengkel ini untuk mendalami topik: + +- Papan Pemuka AI Bertanggungjawab: Pusat sehenti untuk mengoperasikan RAI dalam amalan oleh Besmira Nushi dan Mehrnoosh Sameki + +[![Papan Pemuka AI Bertanggungjawab: Pusat sehenti untuk mengoperasikan RAI dalam amalan](https://img.youtube.com/vi/f1oaDNl3djg/0.jpg)](https://www.youtube.com/watch?v=f1oaDNl3djg "Papan Pemuka AI Bertanggungjawab: Pusat sehenti untuk mengoperasikan RAI dalam amalan") + +> 🎥 Klik imej di atas untuk video: Papan Pemuka AI Bertanggungjawab: Pusat sehenti untuk mengoperasikan RAI dalam amalan oleh Besmira Nushi dan Mehrnoosh Sameki + +Rujuk bahan berikut untuk mengetahui lebih lanjut tentang AI yang bertanggungjawab dan cara membina model yang lebih dipercayai: + +- Alat papan pemuka RAI Microsoft untuk menyelesaikan masalah model ML: [Sumber alat AI bertanggungjawab](https://aka.ms/rai-dashboard) + +- Terokai kit alat AI bertanggungjawab: [Github](https://github.com/microsoft/responsible-ai-toolbox) + +- Pusat sumber RAI Microsoft: [Sumber AI Bertanggungjawab – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- Kumpulan penyelidikan FATE Microsoft: [FATE: Keadilan, Akauntabiliti, Ketelusan, dan Etika dalam AI - Penyelidikan Microsoft](https://www.microsoft.com/research/theme/fate/) + +## Tugasan + +[Terokai papan pemuka RAI](assignment.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat penting, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/9-Real-World/2-Debugging-ML-Models/assignment.md b/translations/ms/9-Real-World/2-Debugging-ML-Models/assignment.md new file mode 100644 index 00000000..963a8931 --- /dev/null +++ b/translations/ms/9-Real-World/2-Debugging-ML-Models/assignment.md @@ -0,0 +1,25 @@ + +# Terokai papan pemuka AI Bertanggungjawab (RAI) + +## Arahan + +Dalam pelajaran ini, anda telah mempelajari tentang papan pemuka RAI, satu set komponen yang dibina menggunakan alat "sumber terbuka" untuk membantu saintis data menjalankan analisis ralat, penerokaan data, penilaian keadilan, interpretasi model, penilaian kontra fakta/apa-jika, dan analisis sebab-akibat pada sistem AI. Untuk tugasan ini, terokai beberapa [notebook](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) sampel papan pemuka RAI dan laporkan penemuan anda dalam bentuk kertas kerja atau pembentangan. + +## Rubrik + +| Kriteria | Cemerlang | Memadai | Perlu Penambahbaikan | +| -------- | --------- | -------- | -------------------- | +| | Kertas kerja atau pembentangan PowerPoint disediakan yang membincangkan komponen papan pemuka RAI, notebook yang dijalankan, dan kesimpulan yang diperoleh daripada menjalankannya | Kertas kerja disediakan tanpa kesimpulan | Tiada kertas kerja disediakan | + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/9-Real-World/README.md b/translations/ms/9-Real-World/README.md new file mode 100644 index 00000000..51753aa1 --- /dev/null +++ b/translations/ms/9-Real-World/README.md @@ -0,0 +1,32 @@ + +# Postscript: Aplikasi dunia sebenar pembelajaran mesin klasik + +Dalam bahagian kurikulum ini, anda akan diperkenalkan kepada beberapa aplikasi dunia sebenar pembelajaran mesin klasik. Kami telah mencari di internet untuk mendapatkan kertas putih dan artikel tentang aplikasi yang menggunakan strategi ini, sambil mengelakkan rangkaian neural, pembelajaran mendalam dan AI sebanyak mungkin. Ketahui bagaimana pembelajaran mesin digunakan dalam sistem perniagaan, aplikasi ekologi, kewangan, seni dan budaya, dan banyak lagi. + +![chess](../../../9-Real-World/images/chess.jpg) + +> Foto oleh Alexis Fauvet di Unsplash + +## Pelajaran + +1. [Aplikasi Dunia Sebenar untuk Pembelajaran Mesin](1-Applications/README.md) +2. [Penyahpepijatan Model dalam Pembelajaran Mesin menggunakan komponen papan pemuka AI Bertanggungjawab](2-Debugging-ML-Models/README.md) + +## Kredit + +"Aplikasi Dunia Sebenar" ditulis oleh pasukan yang termasuk [Jen Looper](https://twitter.com/jenlooper) dan [Ornella Altunyan](https://twitter.com/ornelladotcom). + +"Penyahpepijatan Model dalam Pembelajaran Mesin menggunakan komponen papan pemuka AI Bertanggungjawab" ditulis oleh [Ruth Yakubu](https://twitter.com/ruthieyakubu) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/CODE_OF_CONDUCT.md b/translations/ms/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..87d3de2c --- /dev/null +++ b/translations/ms/CODE_OF_CONDUCT.md @@ -0,0 +1,23 @@ + +# Kod Etika Sumber Terbuka Microsoft + +Projek ini telah mengguna pakai [Kod Etika Sumber Terbuka Microsoft](https://opensource.microsoft.com/codeofconduct/). + +Sumber: + +- [Kod Etika Sumber Terbuka Microsoft](https://opensource.microsoft.com/codeofconduct/) +- [Soalan Lazim Kod Etika Microsoft](https://opensource.microsoft.com/codeofconduct/faq/) +- Hubungi [opencode@microsoft.com](mailto:opencode@microsoft.com) untuk sebarang pertanyaan atau kebimbangan + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/CONTRIBUTING.md b/translations/ms/CONTRIBUTING.md new file mode 100644 index 00000000..8d1b610a --- /dev/null +++ b/translations/ms/CONTRIBUTING.md @@ -0,0 +1,30 @@ + +# Menyumbang + +Projek ini mengalu-alukan sumbangan dan cadangan. Kebanyakan sumbangan memerlukan anda +bersetuju dengan Perjanjian Lesen Penyumbang (CLA) yang menyatakan bahawa anda mempunyai hak untuk, +dan benar-benar memberikan kami hak untuk menggunakan sumbangan anda. Untuk maklumat lanjut, sila lawati +https://cla.microsoft.com. + +> Penting: apabila menterjemah teks dalam repositori ini, sila pastikan anda tidak menggunakan terjemahan mesin. Kami akan mengesahkan terjemahan melalui komuniti, jadi sila hanya menawarkan diri untuk menterjemah dalam bahasa yang anda mahir. + +Apabila anda menghantar permintaan tarik (pull request), bot CLA akan secara automatik menentukan sama ada anda perlu +menyediakan CLA dan menghias PR dengan sewajarnya (contohnya, label, komen). Ikuti sahaja +arahan yang diberikan oleh bot. Anda hanya perlu melakukannya sekali untuk semua repositori yang menggunakan CLA kami. + +Projek ini telah mengguna pakai [Kod Etika Sumber Terbuka Microsoft](https://opensource.microsoft.com/codeofconduct/). +Untuk maklumat lanjut, lihat [Soalan Lazim Kod Etika](https://opensource.microsoft.com/codeofconduct/faq/) +atau hubungi [opencode@microsoft.com](mailto:opencode@microsoft.com) untuk sebarang soalan atau komen tambahan. + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/README.md b/translations/ms/README.md new file mode 100644 index 00000000..4a1e5d7f --- /dev/null +++ b/translations/ms/README.md @@ -0,0 +1,178 @@ + +[![GitHub license](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) +[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) +[![GitHub issues](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) +[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) + +[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) +[![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) +[![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) + +### 🌐 Sokongan Pelbagai Bahasa + +#### Disokong melalui GitHub Action (Automatik & Sentiasa Terkini) + +[French](../fr/README.md) | [Spanish](../es/README.md) | [German](../de/README.md) | [Russian](../ru/README.md) | [Arabic](../ar/README.md) | [Persian (Farsi)](../fa/README.md) | [Urdu](../ur/README.md) | [Chinese (Simplified)](../zh/README.md) | [Chinese (Traditional, Macau)](../mo/README.md) | [Chinese (Traditional, Hong Kong)](../hk/README.md) | [Chinese (Traditional, Taiwan)](../tw/README.md) | [Japanese](../ja/README.md) | [Korean](../ko/README.md) | [Hindi](../hi/README.md) | [Bengali](../bn/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Portuguese (Portugal)](../pt/README.md) | [Portuguese (Brazil)](../br/README.md) | [Italian](../it/README.md) | [Polish](../pl/README.md) | [Turkish](../tr/README.md) | [Greek](../el/README.md) | [Thai](../th/README.md) | [Swedish](../sv/README.md) | [Danish](../da/README.md) | [Norwegian](../no/README.md) | [Finnish](../fi/README.md) | [Dutch](../nl/README.md) | [Hebrew](../he/README.md) | [Vietnamese](../vi/README.md) | [Indonesian](../id/README.md) | [Malay](./README.md) | [Tagalog (Filipino)](../tl/README.md) | [Swahili](../sw/README.md) | [Hungarian](../hu/README.md) | [Czech](../cs/README.md) | [Slovak](../sk/README.md) | [Romanian](../ro/README.md) | [Bulgarian](../bg/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Croatian](../hr/README.md) | [Slovenian](../sl/README.md) | [Ukrainian](../uk/README.md) | [Burmese (Myanmar)](../my/README.md) + +#### Sertai Komuniti + +[![Azure AI Discord](https://dcbadge.limes.pink/api/server/kzRShWzttr)](https://discord.gg/kzRShWzttr) + +# Pembelajaran Mesin untuk Pemula - Kurikulum + +> 🌍 Jelajah dunia sambil meneroka Pembelajaran Mesin melalui budaya dunia 🌍 + +Cloud Advocates di Microsoft dengan bangga menawarkan kurikulum selama 12 minggu, 26 pelajaran tentang **Pembelajaran Mesin**. Dalam kurikulum ini, anda akan mempelajari apa yang kadangkala disebut sebagai **pembelajaran mesin klasik**, menggunakan Scikit-learn sebagai perpustakaan utama dan mengelakkan pembelajaran mendalam, yang diliputi dalam [kurikulum AI untuk Pemula](https://aka.ms/ai4beginners). Padankan pelajaran ini dengan kurikulum ['Data Science untuk Pemula'](https://aka.ms/ds4beginners), juga! + +Jelajah bersama kami ke seluruh dunia sambil kami menerapkan teknik klasik ini kepada data dari pelbagai kawasan dunia. Setiap pelajaran termasuk kuiz sebelum dan selepas pelajaran, arahan bertulis untuk melengkapkan pelajaran, penyelesaian, tugasan, dan banyak lagi. Pedagogi berasaskan projek kami membolehkan anda belajar sambil membina, cara yang terbukti untuk kemahiran baru 'melekat'. + +**✍️ Terima kasih kepada penulis kami** Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Anirban Mukherjee, Ornella Altunyan, Ruth Yakubu dan Amy Boyd + +**🎨 Terima kasih juga kepada ilustrator kami** Tomomi Imura, Dasani Madipalli, dan Jen Looper + +**🙏 Terima kasih khas 🙏 kepada penulis, pengulas, dan penyumbang kandungan Microsoft Student Ambassador**, terutamanya Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila, dan Snigdha Agarwal + +**🤩 Terima kasih tambahan kepada Microsoft Student Ambassadors Eric Wanjau, Jasleen Sondhi, dan Vidushi Gupta untuk pelajaran R kami!** + +# Memulakan + +Ikuti langkah-langkah ini: +1. **Fork Repositori**: Klik pada butang "Fork" di sudut kanan atas halaman ini. +2. **Clone Repositori**: `git clone https://github.com/microsoft/ML-For-Beginners.git` + +> [temui semua sumber tambahan untuk kursus ini dalam koleksi Microsoft Learn kami](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) + +**[Pelajar](https://aka.ms/student-page)**, untuk menggunakan kurikulum ini, fork keseluruhan repo ke akaun GitHub anda sendiri dan lengkapkan latihan secara individu atau bersama kumpulan: + +- Mulakan dengan kuiz pra-pelajaran. +- Baca pelajaran dan lengkapkan aktiviti, berhenti dan renungkan pada setiap semakan pengetahuan. +- Cuba buat projek dengan memahami pelajaran daripada menjalankan kod penyelesaian; walau bagaimanapun kod tersebut tersedia dalam folder `/solution` dalam setiap pelajaran berorientasikan projek. +- Ambil kuiz selepas pelajaran. +- Lengkapkan cabaran. +- Lengkapkan tugasan. +- Selepas melengkapkan kumpulan pelajaran, lawati [Papan Perbincangan](https://github.com/microsoft/ML-For-Beginners/discussions) dan "belajar dengan lantang" dengan mengisi rubrik PAT yang sesuai. 'PAT' ialah Alat Penilaian Kemajuan yang merupakan rubrik yang anda isi untuk meningkatkan pembelajaran anda. Anda juga boleh memberi reaksi kepada PAT lain supaya kita dapat belajar bersama. + +> Untuk kajian lanjut, kami mengesyorkan mengikuti modul dan laluan pembelajaran [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott). + +**Guru**, kami telah [menyertakan beberapa cadangan](for-teachers.md) tentang cara menggunakan kurikulum ini. + +--- + +## Panduan video + +Beberapa pelajaran tersedia dalam bentuk video pendek. Anda boleh menemui semua ini dalam pelajaran, atau di [senarai main ML untuk Pemula di saluran YouTube Microsoft Developer](https://aka.ms/ml-beginners-videos) dengan mengklik imej di bawah. + +[![ML untuk pemula banner](../../images/ml-for-beginners-video-banner.png)](https://aka.ms/ml-beginners-videos) + +--- + +## Kenali Pasukan + +[![Video promo](../../images/ml.gif)](https://youtu.be/Tj1XWrDSYJU) + +**Gif oleh** [Mohit Jaisal](https://linkedin.com/in/mohitjaisal) + +> 🎥 Klik imej di atas untuk video tentang projek dan orang yang menciptanya! + +--- + +## Pedagogi + +Kami telah memilih dua prinsip pedagogi semasa membina kurikulum ini: memastikan ia berasaskan **projek praktikal** dan bahawa ia termasuk **kuiz yang kerap**. Di samping itu, kurikulum ini mempunyai **tema** yang sama untuk memberikan kohesi. + +Dengan memastikan kandungan sejajar dengan projek, proses ini menjadi lebih menarik untuk pelajar dan pengekalan konsep akan dipertingkatkan. Selain itu, kuiz berisiko rendah sebelum kelas menetapkan niat pelajar terhadap pembelajaran topik, manakala kuiz kedua selepas kelas memastikan pengekalan lanjut. Kurikulum ini direka bentuk untuk fleksibel dan menyeronokkan dan boleh diambil secara keseluruhan atau sebahagian. Projek bermula kecil dan menjadi semakin kompleks menjelang akhir kitaran 12 minggu. Kurikulum ini juga termasuk postscript tentang aplikasi dunia sebenar ML, yang boleh digunakan sebagai kredit tambahan atau sebagai asas untuk perbincangan. + +> Temui [Kod Etika](CODE_OF_CONDUCT.md), [Penyumbangan](CONTRIBUTING.md), dan garis panduan [Terjemahan](TRANSLATIONS.md) kami. Kami mengalu-alukan maklum balas membina anda! + +## Setiap pelajaran termasuk + +- sketchnote pilihan +- video tambahan pilihan +- panduan video (beberapa pelajaran sahaja) +- [kuiz pemanasan pra-pelajaran](https://ff-quizzes.netlify.app/en/ml/) +- pelajaran bertulis +- untuk pelajaran berasaskan projek, panduan langkah demi langkah tentang cara membina projek +- semakan pengetahuan +- cabaran +- bacaan tambahan +- tugasan +- [kuiz selepas pelajaran](https://ff-quizzes.netlify.app/en/ml/) + +> **Nota tentang bahasa**: Pelajaran ini ditulis terutamanya dalam Python, tetapi banyak juga tersedia dalam R. Untuk melengkapkan pelajaran R, pergi ke folder `/solution` dan cari pelajaran R. Ia termasuk sambungan .rmd yang mewakili fail **R Markdown** yang boleh ditakrifkan secara ringkas sebagai penyisipan `code chunks` (R atau bahasa lain) dan `YAML header` (yang membimbing cara memformat output seperti PDF) dalam dokumen `Markdown`. Oleh itu, ia berfungsi sebagai rangka kerja penulisan yang cemerlang untuk sains data kerana ia membolehkan anda menggabungkan kod anda, outputnya, dan pemikiran anda dengan membolehkan anda menulisnya dalam Markdown. Selain itu, dokumen R Markdown boleh diberikan kepada format output seperti PDF, HTML, atau Word. + +> **Nota tentang kuiz**: Semua kuiz terkandung dalam [folder Aplikasi Kuiz](../../quiz-app), untuk sejumlah 52 kuiz dengan tiga soalan setiap satu. Ia dipautkan dari dalam pelajaran tetapi aplikasi kuiz boleh dijalankan secara tempatan; ikuti arahan dalam folder `quiz-app` untuk menjadi tuan rumah secara tempatan atau melancarkan ke Azure. + +| Nombor Pelajaran | Topik | Kumpulan Pelajaran | Objektif Pembelajaran | Pelajaran Berkaitan | Penulis | +| :-----------: | :------------------------------------------------------------: | :-------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------: | +| 01 | Pengenalan kepada pembelajaran mesin | [Pengenalan](1-Introduction/README.md) | Pelajari konsep asas di sebalik pembelajaran mesin | [Pelajaran](1-Introduction/1-intro-to-ML/README.md) | Muhammad | +| 02 | Sejarah pembelajaran mesin | [Pengenalan](1-Introduction/README.md) | Pelajari sejarah di sebalik bidang ini | [Pelajaran](1-Introduction/2-history-of-ML/README.md) | Jen dan Amy | +| 03 | Keadilan dan pembelajaran mesin | [Pengenalan](1-Introduction/README.md) | Apakah isu falsafah penting tentang keadilan yang perlu dipertimbangkan oleh pelajar semasa membina dan menggunakan model ML? | [Pelajaran](1-Introduction/3-fairness/README.md) | Tomomi | +| 04 | Teknik untuk pembelajaran mesin | [Introduction](1-Introduction/README.md) | Apakah teknik yang digunakan oleh penyelidik ML untuk membina model ML? | [Lesson](1-Introduction/4-techniques-of-ML/README.md) | Chris dan Jen | +| 05 | Pengenalan kepada regresi | [Regression](2-Regression/README.md) | Mulakan dengan Python dan Scikit-learn untuk model regresi | +
                      • [Python](2-Regression/1-Tools/README.md)
                      • [R](../../2-Regression/1-Tools/solution/R/lesson_1.html)
                      |
                      • Jen
                      • Eric Wanjau
                      | +| 06 | Harga labu Amerika Utara 🎃 | [Regression](2-Regression/README.md) | Visualisasi dan pembersihan data sebagai persediaan untuk ML |
                      • [Python](2-Regression/2-Data/README.md)
                      • [R](../../2-Regression/2-Data/solution/R/lesson_2.html)
                      |
                      • Jen
                      • Eric Wanjau
                      | +| 07 | Harga labu Amerika Utara 🎃 | [Regression](2-Regression/README.md) | Bina model regresi linear dan polinomial |
                      • [Python](2-Regression/3-Linear/README.md)
                      • [R](../../2-Regression/3-Linear/solution/R/lesson_3.html)
                      |
                      • Jen dan Dmitry
                      • Eric Wanjau
                      | +| 08 | Harga labu Amerika Utara 🎃 | [Regression](2-Regression/README.md) | Bina model regresi logistik |
                      • [Python](2-Regression/4-Logistic/README.md)
                      • [R](../../2-Regression/4-Logistic/solution/R/lesson_4.html)
                      |
                      • Jen
                      • Eric Wanjau
                      | +| 09 | Aplikasi Web 🔌 | [Web App](3-Web-App/README.md) | Bina aplikasi web untuk menggunakan model yang telah dilatih | [Python](3-Web-App/1-Web-App/README.md) | Jen | +| 10 | Pengenalan kepada klasifikasi | [Classification](4-Classification/README.md) | Bersihkan, sediakan, dan visualisasikan data anda; pengenalan kepada klasifikasi |
                      • [Python](4-Classification/1-Introduction/README.md)
                      • [R](../../4-Classification/1-Introduction/solution/R/lesson_10.html) |
                        • Jen dan Cassie
                        • Eric Wanjau
                        | +| 11 | Masakan Asia dan India yang lazat 🍜 | [Classification](4-Classification/README.md) | Pengenalan kepada pengklasifikasi |
                        • [Python](4-Classification/2-Classifiers-1/README.md)
                        • [R](../../4-Classification/2-Classifiers-1/solution/R/lesson_11.html) |
                          • Jen dan Cassie
                          • Eric Wanjau
                          | +| 12 | Masakan Asia dan India yang lazat 🍜 | [Classification](4-Classification/README.md) | Lebih banyak pengklasifikasi |
                          • [Python](4-Classification/3-Classifiers-2/README.md)
                          • [R](../../4-Classification/3-Classifiers-2/solution/R/lesson_12.html) |
                            • Jen dan Cassie
                            • Eric Wanjau
                            | +| 13 | Masakan Asia dan India yang lazat 🍜 | [Classification](4-Classification/README.md) | Bina aplikasi web cadangan menggunakan model anda | [Python](4-Classification/4-Applied/README.md) | Jen | +| 14 | Pengenalan kepada pengelompokan | [Clustering](5-Clustering/README.md) | Bersihkan, sediakan, dan visualisasikan data anda; pengenalan kepada pengelompokan |
                            • [Python](5-Clustering/1-Visualize/README.md)
                            • [R](../../5-Clustering/1-Visualize/solution/R/lesson_14.html) |
                              • Jen
                              • Eric Wanjau
                              | +| 15 | Meneroka Citarasa Muzik Nigeria 🎧 | [Clustering](5-Clustering/README.md) | Meneroka kaedah pengelompokan K-Means |
                              • [Python](5-Clustering/2-K-Means/README.md)
                              • [R](../../5-Clustering/2-K-Means/solution/R/lesson_15.html) |
                                • Jen
                                • Eric Wanjau
                                | +| 16 | Pengenalan kepada pemprosesan bahasa semula jadi ☕️ | [Natural language processing](6-NLP/README.md) | Pelajari asas NLP dengan membina bot ringkas | [Python](6-NLP/1-Introduction-to-NLP/README.md) | Stephen | +| 17 | Tugas NLP Biasa ☕️ | [Natural language processing](6-NLP/README.md) | Mendalami pengetahuan NLP dengan memahami tugas biasa yang diperlukan semasa berurusan dengan struktur bahasa | [Python](6-NLP/2-Tasks/README.md) | Stephen | +| 18 | Terjemahan dan analisis sentimen ♥️ | [Natural language processing](6-NLP/README.md) | Terjemahan dan analisis sentimen dengan Jane Austen | [Python](6-NLP/3-Translation-Sentiment/README.md) | Stephen | +| 19 | Hotel romantik di Eropah ♥️ | [Natural language processing](6-NLP/README.md) | Analisis sentimen dengan ulasan hotel 1 | [Python](6-NLP/4-Hotel-Reviews-1/README.md) | Stephen | +| 20 | Hotel romantik di Eropah ♥️ | [Natural language processing](6-NLP/README.md) | Analisis sentimen dengan ulasan hotel 2 | [Python](6-NLP/5-Hotel-Reviews-2/README.md) | Stephen | +| 21 | Pengenalan kepada ramalan siri masa | [Time series](7-TimeSeries/README.md) | Pengenalan kepada ramalan siri masa | [Python](7-TimeSeries/1-Introduction/README.md) | Francesca | +| 22 | ⚡️ Penggunaan Kuasa Dunia ⚡️ - ramalan siri masa dengan ARIMA | [Time series](7-TimeSeries/README.md) | Ramalan siri masa dengan ARIMA | [Python](7-TimeSeries/2-ARIMA/README.md) | Francesca | +| 23 | ⚡️ Penggunaan Kuasa Dunia ⚡️ - ramalan siri masa dengan SVR | [Time series](7-TimeSeries/README.md) | Ramalan siri masa dengan Support Vector Regressor | [Python](7-TimeSeries/3-SVR/README.md) | Anirban | +| 24 | Pengenalan kepada pembelajaran pengukuhan | [Reinforcement learning](8-Reinforcement/README.md) | Pengenalan kepada pembelajaran pengukuhan dengan Q-Learning | [Python](8-Reinforcement/1-QLearning/README.md) | Dmitry | +| 25 | Bantu Peter mengelak serigala! 🐺 | [Reinforcement learning](8-Reinforcement/README.md) | Pembelajaran pengukuhan Gym | [Python](8-Reinforcement/2-Gym/README.md) | Dmitry | +| Postscript | Senario dan aplikasi ML dunia sebenar | [ML in the Wild](9-Real-World/README.md) | Aplikasi dunia sebenar yang menarik dan mendedahkan tentang ML klasik | [Lesson](9-Real-World/1-Applications/README.md) | Team | +| Postscript | Penyahpepijatan Model ML menggunakan papan pemuka RAI | [ML in the Wild](9-Real-World/README.md) | Penyahpepijatan Model dalam Pembelajaran Mesin menggunakan komponen papan pemuka AI Bertanggungjawab | [Lesson](9-Real-World/2-Debugging-ML-Models/README.md) | Ruth Yakubu | + +> [temui semua sumber tambahan untuk kursus ini dalam koleksi Microsoft Learn kami](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) + +## Akses Luar Talian + +Anda boleh menjalankan dokumentasi ini secara luar talian dengan menggunakan [Docsify](https://docsify.js.org/#/). Fork repo ini, [pasang Docsify](https://docsify.js.org/#/quickstart) pada mesin tempatan anda, dan kemudian di folder root repo ini, taip `docsify serve`. Laman web akan disediakan pada port 3000 di localhost anda: `localhost:3000`. + +## PDF + +Cari pdf kurikulum dengan pautan [di sini](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf). + + +## 🎒 Kursus Lain + +Pasukan kami menghasilkan kursus lain! Lihat: + +- [Generative AI for Beginners](https://aka.ms/genai-beginners) +- [Generative AI for Beginners .NET](https://github.com/microsoft/Generative-AI-for-beginners-dotnet) +- [Generative AI with JavaScript](https://github.com/microsoft/generative-ai-with-javascript) +- [Generative AI with Java](https://github.com/microsoft/Generative-AI-for-beginners-java) +- [AI for Beginners](https://aka.ms/ai-beginners) +- [Data Science for Beginners](https://aka.ms/datascience-beginners) +- [ML for Beginners](https://aka.ms/ml-beginners) +- [Cybersecurity for Beginners](https://github.com/microsoft/Security-101) +- [Web Dev for Beginners](https://aka.ms/webdev-beginners) +- [IoT for Beginners](https://aka.ms/iot-beginners) +- [XR Development for Beginners](https://github.com/microsoft/xr-development-for-beginners) +- [Mastering GitHub Copilot for Paired Programming](https://github.com/microsoft/Mastering-GitHub-Copilot-for-Paired-Programming) +- [Mastering GitHub Copilot for C#/.NET Developers](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers) +- [Choose Your Own Copilot Adventure](https://github.com/microsoft/CopilotAdventures) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/SECURITY.md b/translations/ms/SECURITY.md new file mode 100644 index 00000000..3d20591f --- /dev/null +++ b/translations/ms/SECURITY.md @@ -0,0 +1,51 @@ + +## Keselamatan + +Microsoft mengambil serius keselamatan produk dan perkhidmatan perisian kami, termasuk semua repositori kod sumber yang diuruskan melalui organisasi GitHub kami, yang merangkumi [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), dan [organisasi GitHub kami](https://opensource.microsoft.com/). + +Jika anda percaya bahawa anda telah menemui kerentanan keselamatan dalam mana-mana repositori milik Microsoft yang memenuhi [definisi kerentanan keselamatan Microsoft](https://docs.microsoft.com/previous-versions/tn-archive/cc751383(v=technet.10)?WT.mc_id=academic-77952-leestott), sila laporkan kepada kami seperti yang diterangkan di bawah. + +## Melaporkan Isu Keselamatan + +**Sila jangan laporkan kerentanan keselamatan melalui isu awam GitHub.** + +Sebaliknya, sila laporkan kepada Microsoft Security Response Center (MSRC) di [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). + +Jika anda lebih suka menghantar tanpa log masuk, hantarkan e-mel ke [secure@microsoft.com](mailto:secure@microsoft.com). Jika boleh, enkripsikan mesej anda dengan kunci PGP kami; sila muat turun dari [halaman Kunci PGP Microsoft Security Response Center](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). + +Anda sepatutnya menerima respons dalam masa 24 jam. Jika atas sebab tertentu anda tidak menerimanya, sila susuli melalui e-mel untuk memastikan kami menerima mesej asal anda. Maklumat tambahan boleh didapati di [microsoft.com/msrc](https://www.microsoft.com/msrc). + +Sila sertakan maklumat yang diminta seperti di bawah (sebanyak yang anda boleh berikan) untuk membantu kami memahami sifat dan skop isu yang mungkin berlaku: + + * Jenis isu (contoh: buffer overflow, SQL injection, cross-site scripting, dll.) + * Laluan penuh fail sumber yang berkaitan dengan manifestasi isu + * Lokasi kod sumber yang terjejas (tag/cabang/komit atau URL langsung) + * Sebarang konfigurasi khas yang diperlukan untuk menghasilkan semula isu + * Arahan langkah demi langkah untuk menghasilkan semula isu + * Kod bukti konsep atau eksploitasi (jika boleh) + * Kesan isu, termasuk bagaimana penyerang mungkin mengeksploitasi isu tersebut + +Maklumat ini akan membantu kami mengutamakan laporan anda dengan lebih cepat. + +Jika anda melaporkan untuk program ganjaran bug, laporan yang lebih lengkap boleh menyumbang kepada ganjaran yang lebih tinggi. Sila lawati halaman [Program Ganjaran Bug Microsoft](https://microsoft.com/msrc/bounty) kami untuk maklumat lanjut tentang program aktif kami. + +## Bahasa Pilihan + +Kami lebih suka semua komunikasi dilakukan dalam Bahasa Inggeris. + +## Polisi + +Microsoft mengikuti prinsip [Pendedahan Kerentanan yang Diselaraskan](https://www.microsoft.com/en-us/msrc/cvd). + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat penting, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/SUPPORT.md b/translations/ms/SUPPORT.md new file mode 100644 index 00000000..1c549eb4 --- /dev/null +++ b/translations/ms/SUPPORT.md @@ -0,0 +1,24 @@ + +# Sokongan +## Cara untuk melaporkan isu dan mendapatkan bantuan + +Projek ini menggunakan GitHub Issues untuk menjejaki pepijat dan permintaan ciri. Sila cari isu yang sedia ada sebelum melaporkan isu baharu untuk mengelakkan pendua. Untuk isu baharu, laporkan pepijat atau permintaan ciri anda sebagai Isu baharu. + +Untuk bantuan dan soalan mengenai penggunaan projek ini, laporkan isu. + +## Polisi Sokongan Microsoft + +Sokongan untuk repositori ini adalah terhad kepada sumber yang disenaraikan di atas. + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/docs/_sidebar.md b/translations/ms/docs/_sidebar.md new file mode 100644 index 00000000..38b0d45c --- /dev/null +++ b/translations/ms/docs/_sidebar.md @@ -0,0 +1,57 @@ + +- Pengenalan + - [Pengenalan kepada Pembelajaran Mesin](../1-Introduction/1-intro-to-ML/README.md) + - [Sejarah Pembelajaran Mesin](../1-Introduction/2-history-of-ML/README.md) + - [Pembelajaran Mesin dan Keadilan](../1-Introduction/3-fairness/README.md) + - [Teknik Pembelajaran Mesin](../1-Introduction/4-techniques-of-ML/README.md) + +- Regresi + - [Alat yang Digunakan](../2-Regression/1-Tools/README.md) + - [Data](../2-Regression/2-Data/README.md) + - [Regresi Linear](../2-Regression/3-Linear/README.md) + - [Regresi Logistik](../2-Regression/4-Logistic/README.md) + +- Membina Aplikasi Web + - [Aplikasi Web](../3-Web-App/1-Web-App/README.md) + +- Pengelasan + - [Pengenalan kepada Pengelasan](../4-Classification/1-Introduction/README.md) + - [Pengelas 1](../4-Classification/2-Classifiers-1/README.md) + - [Pengelas 2](../4-Classification/3-Classifiers-2/README.md) + - [Pembelajaran Mesin Terapan](../4-Classification/4-Applied/README.md) + +- Pengelompokan + - [Visualisasi Data Anda](../5-Clustering/1-Visualize/README.md) + - [K-Means](../5-Clustering/2-K-Means/README.md) + +- NLP + - [Pengenalan kepada NLP](../6-NLP/1-Introduction-to-NLP/README.md) + - [Tugas NLP](../6-NLP/2-Tasks/README.md) + - [Terjemahan dan Sentimen](../6-NLP/3-Translation-Sentiment/README.md) + - [Ulasan Hotel 1](../6-NLP/4-Hotel-Reviews-1/README.md) + - [Ulasan Hotel 2](../6-NLP/5-Hotel-Reviews-2/README.md) + +- Ramalan Siri Masa + - [Pengenalan kepada Ramalan Siri Masa](../7-TimeSeries/1-Introduction/README.md) + - [ARIMA](../7-TimeSeries/2-ARIMA/README.md) + - [SVR](../7-TimeSeries/3-SVR/README.md) + +- Pembelajaran Pengukuhan + - [Q-Learning](../8-Reinforcement/1-QLearning/README.md) + - [Gym](../8-Reinforcement/2-Gym/README.md) + +- Pembelajaran Mesin Dunia Sebenar + - [Aplikasi](../9-Real-World/1-Applications/README.md) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/for-teachers.md b/translations/ms/for-teachers.md new file mode 100644 index 00000000..2887109d --- /dev/null +++ b/translations/ms/for-teachers.md @@ -0,0 +1,37 @@ + +## Untuk Pendidik + +Adakah anda ingin menggunakan kurikulum ini di dalam kelas anda? Jangan ragu untuk mencubanya! + +Malah, anda boleh menggunakannya terus di GitHub dengan menggunakan GitHub Classroom. + +Untuk melakukannya, fork repo ini. Anda perlu mencipta repo untuk setiap pelajaran, jadi anda perlu mengekstrak setiap folder ke dalam repo yang berasingan. Dengan cara itu, [GitHub Classroom](https://classroom.github.com/classrooms) boleh mengambil setiap pelajaran secara berasingan. + +Arahan lengkap ini [full instructions](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/) akan memberikan anda idea bagaimana untuk menyediakan kelas anda. + +## Menggunakan repo seperti sedia ada + +Jika anda ingin menggunakan repo ini seperti keadaan asalnya, tanpa menggunakan GitHub Classroom, itu juga boleh dilakukan. Anda hanya perlu berkomunikasi dengan pelajar anda tentang pelajaran mana yang perlu dipelajari bersama. + +Dalam format dalam talian (Zoom, Teams, atau lain-lain), anda boleh membentuk bilik pecahan untuk kuiz, dan membimbing pelajar untuk bersedia belajar. Kemudian jemput pelajar untuk kuiz dan serahkan jawapan mereka sebagai 'issues' pada waktu tertentu. Anda juga boleh melakukan perkara yang sama dengan tugasan, jika anda mahu pelajar bekerja secara kolaboratif secara terbuka. + +Jika anda lebih suka format yang lebih peribadi, minta pelajar anda untuk fork kurikulum ini, pelajaran demi pelajaran, ke repo GitHub mereka sendiri sebagai repo peribadi, dan berikan anda akses. Kemudian mereka boleh melengkapkan kuiz dan tugasan secara peribadi dan menyerahkannya kepada anda melalui issues pada repo kelas anda. + +Terdapat banyak cara untuk menjadikan ini berfungsi dalam format kelas dalam talian. Beritahu kami apa yang paling sesuai untuk anda! + +## Sila berikan pendapat anda! + +Kami ingin menjadikan kurikulum ini berfungsi untuk anda dan pelajar anda. Sila berikan [maklum balas](https://forms.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR2humCsRZhxNuI79cm6n0hRUQzRVVU9VVlU5UlFLWTRLWlkyQUxORTg5WS4u). + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/quiz-app/README.md b/translations/ms/quiz-app/README.md new file mode 100644 index 00000000..abdd2d8c --- /dev/null +++ b/translations/ms/quiz-app/README.md @@ -0,0 +1,126 @@ + +# Kuiz + +Kuiz-kuiz ini adalah kuiz sebelum dan selepas kuliah untuk kurikulum ML di https://aka.ms/ml-beginners + +## Persediaan Projek + +``` +npm install +``` + +### Kompilasi dan muat semula secara langsung untuk pembangunan + +``` +npm run serve +``` + +### Kompilasi dan minimisasi untuk pengeluaran + +``` +npm run build +``` + +### Lint dan pembaikan fail + +``` +npm run lint +``` + +### Sesuaikan konfigurasi + +Lihat [Rujukan Konfigurasi](https://cli.vuejs.org/config/). + +Kredit: Terima kasih kepada versi asal aplikasi kuiz ini: https://github.com/arpan45/simple-quiz-vue + +## Penerapan ke Azure + +Berikut adalah panduan langkah demi langkah untuk membantu anda bermula: + +1. Fork Repositori GitHub +Pastikan kod aplikasi web statik anda berada dalam repositori GitHub anda. Fork repositori ini. + +2. Buat Aplikasi Web Statik Azure +- Buat [akaun Azure](http://azure.microsoft.com) +- Pergi ke [portal Azure](https://portal.azure.com) +- Klik “Create a resource” dan cari “Static Web App”. +- Klik “Create”. + +3. Konfigurasi Aplikasi Web Statik +- Asas: Langganan: Pilih langganan Azure anda. +- Kumpulan Sumber: Buat kumpulan sumber baru atau gunakan yang sedia ada. +- Nama: Berikan nama untuk aplikasi web statik anda. +- Wilayah: Pilih wilayah yang paling dekat dengan pengguna anda. + +- #### Butiran Penerapan: +- Sumber: Pilih “GitHub”. +- Akaun GitHub: Benarkan Azure mengakses akaun GitHub anda. +- Organisasi: Pilih organisasi GitHub anda. +- Repositori: Pilih repositori yang mengandungi aplikasi web statik anda. +- Cawangan: Pilih cawangan yang anda ingin terapkan. + +- #### Butiran Pembinaan: +- Preset Pembinaan: Pilih kerangka kerja yang digunakan oleh aplikasi anda (contoh: React, Angular, Vue, dll.). +- Lokasi Aplikasi: Nyatakan folder yang mengandungi kod aplikasi anda (contoh: / jika berada di root). +- Lokasi API: Jika anda mempunyai API, nyatakan lokasinya (pilihan). +- Lokasi Output: Nyatakan folder di mana output pembinaan dihasilkan (contoh: build atau dist). + +4. Semak dan Buat +Semak tetapan anda dan klik “Create”. Azure akan menyediakan sumber yang diperlukan dan membuat fail alur kerja GitHub Actions dalam repositori anda. + +5. Alur Kerja GitHub Actions +Azure akan secara automatik membuat fail alur kerja GitHub Actions dalam repositori anda (.github/workflows/azure-static-web-apps-.yml). Alur kerja ini akan mengendalikan proses pembinaan dan penerapan. + +6. Pantau Penerapan +Pergi ke tab “Actions” dalam repositori GitHub anda. +Anda sepatutnya melihat alur kerja sedang berjalan. Alur kerja ini akan membina dan menerapkan aplikasi web statik anda ke Azure. +Setelah alur kerja selesai, aplikasi anda akan tersedia secara langsung pada URL Azure yang disediakan. + +### Contoh Fail Alur Kerja + +Berikut adalah contoh bagaimana fail alur kerja GitHub Actions mungkin kelihatan: +name: Azure Static Web Apps CI/CD +``` +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened, closed] + branches: + - main + +jobs: + build_and_deploy_job: + runs-on: ubuntu-latest + name: Build and Deploy Job + steps: + - uses: actions/checkout@v2 + - name: Build And Deploy + id: builddeploy + uses: Azure/static-web-apps-deploy@v1 + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }} + repo_token: ${{ secrets.GITHUB_TOKEN }} + action: "upload" + app_location: "/quiz-app" # App source code path + api_location: ""API source code path optional + output_location: "dist" #Built app content directory - optional +``` + +### Sumber Tambahan +- [Dokumentasi Azure Static Web Apps](https://learn.microsoft.com/azure/static-web-apps/getting-started) +- [Dokumentasi GitHub Actions](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/sketchnotes/LICENSE.md b/translations/ms/sketchnotes/LICENSE.md new file mode 100644 index 00000000..e002513c --- /dev/null +++ b/translations/ms/sketchnotes/LICENSE.md @@ -0,0 +1,204 @@ + +Hak Cipta Creative Commons Attribution-ShareAlike 4.0 Antarabangsa + +======================================================================= + +Creative Commons Corporation ("Creative Commons") bukan firma guaman dan tidak menyediakan perkhidmatan atau nasihat undang-undang. Pengedaran lesen awam Creative Commons tidak mewujudkan hubungan peguam-pelanggan atau hubungan lain. Creative Commons menyediakan lesen dan maklumat berkaitan secara "seadanya". Creative Commons tidak memberikan sebarang jaminan berkaitan lesen mereka, bahan yang dilesenkan di bawah terma dan syaratnya, atau maklumat berkaitan. Creative Commons menafikan semua tanggungjawab terhadap kerosakan yang timbul daripada penggunaannya sejauh mana yang dibenarkan. + +Menggunakan Lesen Awam Creative Commons + +Lesen awam Creative Commons menyediakan satu set terma dan syarat standard yang boleh digunakan oleh pencipta dan pemegang hak lain untuk berkongsi karya asli dan bahan lain yang tertakluk kepada hak cipta dan hak tertentu lain yang dinyatakan dalam lesen awam di bawah. Pertimbangan berikut adalah untuk tujuan maklumat sahaja, tidak lengkap, dan bukan sebahagian daripada lesen kami. + + Pertimbangan untuk pemberi lesen: Lesen awam kami bertujuan untuk digunakan oleh mereka yang diberi kuasa untuk memberikan kebenaran kepada orang awam untuk menggunakan bahan dengan cara yang sebaliknya dihadkan oleh hak cipta dan hak tertentu lain. Lesen kami tidak boleh ditarik balik. Pemberi lesen harus membaca dan memahami terma dan syarat lesen yang mereka pilih sebelum menggunakannya. Pemberi lesen juga harus mendapatkan semua hak yang diperlukan sebelum menggunakan lesen kami supaya orang awam boleh menggunakan semula bahan seperti yang diharapkan. Pemberi lesen harus menandakan dengan jelas sebarang bahan yang tidak tertakluk kepada lesen. Ini termasuk bahan lain yang dilesenkan oleh CC, atau bahan yang digunakan di bawah pengecualian atau batasan hak cipta. Pertimbangan lanjut untuk pemberi lesen: + wiki.creativecommons.org/Considerations_for_licensors + + Pertimbangan untuk orang awam: Dengan menggunakan salah satu lesen awam kami, pemberi lesen memberikan kebenaran kepada orang awam untuk menggunakan bahan yang dilesenkan di bawah terma dan syarat tertentu. Jika kebenaran pemberi lesen tidak diperlukan atas sebarang sebab—contohnya, kerana pengecualian atau batasan hak cipta yang terpakai—maka penggunaan tersebut tidak diatur oleh lesen. Lesen kami hanya memberikan kebenaran di bawah hak cipta dan hak tertentu lain yang pemberi lesen mempunyai kuasa untuk memberikan. Penggunaan bahan yang dilesenkan mungkin masih dihadkan atas sebab lain, termasuk kerana orang lain mempunyai hak cipta atau hak lain dalam bahan tersebut. Pemberi lesen boleh membuat permintaan khas, seperti meminta semua perubahan ditandakan atau diterangkan. Walaupun tidak diwajibkan oleh lesen kami, anda digalakkan untuk menghormati permintaan tersebut jika munasabah. Pertimbangan lanjut untuk orang awam: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Lesen Awam Creative Commons Attribution-ShareAlike 4.0 Antarabangsa + +Dengan menggunakan Hak Berlesen (ditakrifkan di bawah), Anda menerima dan bersetuju untuk terikat dengan terma dan syarat Lesen Awam Creative Commons Attribution-ShareAlike 4.0 Antarabangsa ("Lesen Awam"). Sejauh mana Lesen Awam ini boleh ditafsirkan sebagai kontrak, Anda diberikan Hak Berlesen sebagai pertimbangan atas penerimaan Anda terhadap terma dan syarat ini, dan Pemberi Lesen memberikan Anda hak tersebut sebagai pertimbangan atas manfaat yang diterima oleh Pemberi Lesen daripada membuat Bahan Berlesen tersedia di bawah terma dan syarat ini. + +Bahagian 1 -- Definisi. + + a. Bahan Diadaptasi bermaksud bahan yang tertakluk kepada Hak Cipta dan Hak Serupa yang berasal daripada atau berdasarkan Bahan Berlesen dan di mana Bahan Berlesen diterjemahkan, diubah, disusun, diubah bentuk, atau diubah dengan cara lain yang memerlukan kebenaran di bawah Hak Cipta dan Hak Serupa yang dipegang oleh Pemberi Lesen. Untuk tujuan Lesen Awam ini, di mana Bahan Berlesen adalah karya muzik, persembahan, atau rakaman bunyi, Bahan Diadaptasi sentiasa dihasilkan apabila Bahan Berlesen diselaraskan dalam hubungan masa dengan imej bergerak. + + b. Lesen Pengadaptasi bermaksud lesen yang Anda gunakan untuk Hak Cipta dan Hak Serupa Anda dalam sumbangan Anda kepada Bahan Diadaptasi mengikut terma dan syarat Lesen Awam ini. + + c. Lesen Serasi BY-SA bermaksud lesen yang disenaraikan di creativecommons.org/compatiblelicenses, yang diluluskan oleh Creative Commons sebagai pada dasarnya setara dengan Lesen Awam ini. + + d. Hak Cipta dan Hak Serupa bermaksud hak cipta dan/atau hak serupa yang berkait rapat dengan hak cipta termasuk, tanpa had, persembahan, penyiaran, rakaman bunyi, dan Hak Pangkalan Data Sui Generis, tanpa mengira bagaimana hak tersebut dilabel atau dikategorikan. Untuk tujuan Lesen Awam ini, hak yang dinyatakan dalam Bahagian 2(b)(1)-(2) bukan Hak Cipta dan Hak Serupa. + + e. Langkah Teknologi Berkesan bermaksud langkah-langkah yang, tanpa kuasa yang betul, tidak boleh dielakkan di bawah undang-undang yang memenuhi kewajipan di bawah Artikel 11 Perjanjian Hak Cipta WIPO yang diterima pakai pada 20 Disember 1996, dan/atau perjanjian antarabangsa yang serupa. + + f. Pengecualian dan Batasan bermaksud penggunaan wajar, urusan wajar, dan/atau sebarang pengecualian atau batasan lain kepada Hak Cipta dan Hak Serupa yang terpakai kepada penggunaan Anda terhadap Bahan Berlesen. + + g. Elemen Lesen bermaksud atribut lesen yang disenaraikan dalam nama Lesen Awam Creative Commons. Elemen Lesen bagi Lesen Awam ini ialah Pengiktirafan dan KongsiSerupa. + + h. Bahan Berlesen bermaksud karya seni atau sastera, pangkalan data, atau bahan lain yang mana Pemberi Lesen menggunakan Lesen Awam ini. + + i. Hak Berlesen bermaksud hak yang diberikan kepada Anda tertakluk kepada terma dan syarat Lesen Awam ini, yang terhad kepada semua Hak Cipta dan Hak Serupa yang terpakai kepada penggunaan Anda terhadap Bahan Berlesen dan yang Pemberi Lesen mempunyai kuasa untuk melesenkan. + + j. Pemberi Lesen bermaksud individu atau entiti yang memberikan hak di bawah Lesen Awam ini. + + k. Kongsi bermaksud menyediakan bahan kepada orang awam dengan apa-apa cara atau proses yang memerlukan kebenaran di bawah Hak Berlesen, seperti pengeluaran semula, paparan awam, persembahan awam, pengedaran, penyebaran, komunikasi, atau pengimportan, dan membuat bahan tersedia kepada orang awam termasuk dengan cara yang membolehkan orang awam mengakses bahan tersebut dari tempat dan pada masa yang dipilih secara individu oleh mereka. + + l. Hak Pangkalan Data Sui Generis bermaksud hak selain hak cipta yang timbul daripada Arahan 96/9/EC Parlimen Eropah dan Majlis pada 11 Mac 1996 mengenai perlindungan undang-undang pangkalan data, seperti yang dipinda dan/atau digantikan, serta hak lain yang pada dasarnya setara di mana-mana sahaja di dunia. + + m. Anda bermaksud individu atau entiti yang menggunakan Hak Berlesen di bawah Lesen Awam ini. "Anda" mempunyai makna yang sepadan. + +Bahagian 2 -- Skop. + + a. Pemberian lesen. + + 1. Tertakluk kepada terma dan syarat Lesen Awam ini, Pemberi Lesen dengan ini memberikan Anda lesen global, bebas royalti, tidak boleh disublesenkan, tidak eksklusif, tidak boleh ditarik balik untuk menggunakan Hak Berlesen dalam Bahan Berlesen untuk: + + a. mengeluarkan semula dan Kongsi Bahan Berlesen, secara keseluruhan atau sebahagian; dan + + b. menghasilkan, mengeluarkan semula, dan Kongsi Bahan Diadaptasi. + + 2. Pengecualian dan Batasan. Untuk mengelakkan keraguan, di mana Pengecualian dan Batasan terpakai kepada penggunaan Anda, Lesen Awam ini tidak terpakai, dan Anda tidak perlu mematuhi terma dan syaratnya. + + 3. Tempoh. Tempoh Lesen Awam ini dinyatakan dalam Bahagian 6(a). + + 4. Media dan format; pengubahsuaian teknikal dibenarkan. Pemberi Lesen memberi kuasa kepada Anda untuk menggunakan Hak Berlesen dalam semua media dan format sama ada yang diketahui sekarang atau yang akan datang, dan untuk membuat pengubahsuaian teknikal yang diperlukan untuk melakukannya. Pemberi Lesen mengetepikan dan/atau bersetuju untuk tidak menegaskan sebarang hak atau kuasa untuk melarang Anda daripada membuat pengubahsuaian teknikal yang diperlukan untuk menggunakan Hak Berlesen, termasuk pengubahsuaian teknikal yang diperlukan untuk mengelakkan Langkah Teknologi Berkesan. Untuk tujuan Lesen Awam ini, hanya membuat pengubahsuaian yang dibenarkan oleh Bahagian 2(a)(4) tidak pernah menghasilkan Bahan Diadaptasi. + + 5. Penerima hiliran. + + a. Tawaran daripada Pemberi Lesen -- Bahan Berlesen. Setiap penerima Bahan Berlesen secara automatik menerima tawaran daripada Pemberi Lesen untuk menggunakan Hak Berlesen di bawah terma dan syarat Lesen Awam ini. + + b. Tawaran tambahan daripada Pemberi Lesen -- Bahan Diadaptasi. Setiap penerima Bahan Diadaptasi daripada Anda secara automatik menerima tawaran daripada Pemberi Lesen untuk menggunakan Hak Berlesen dalam Bahan Diadaptasi di bawah syarat Lesen Pengadaptasi yang Anda gunakan. + + c. Tiada sekatan hiliran. Anda tidak boleh menawarkan atau mengenakan sebarang terma atau syarat tambahan atau berbeza pada, atau menggunakan sebarang Langkah Teknologi Berkesan pada, Bahan Berlesen jika berbuat demikian menyekat penggunaan Hak Berlesen oleh mana-mana penerima Bahan Berlesen. + + 6. Tiada pengendorsan. Tiada apa-apa dalam Lesen Awam ini yang membentuk atau boleh ditafsirkan sebagai kebenaran untuk menegaskan atau menyiratkan bahawa Anda, atau penggunaan Anda terhadap Bahan Berlesen, berkaitan dengan, atau ditaja, disokong, atau diberikan status rasmi oleh, Pemberi Lesen atau pihak lain yang ditetapkan untuk menerima pengiktirafan seperti yang dinyatakan dalam Bahagian 3(a)(1)(A)(i). + + b. Hak lain. + + 1. Hak moral, seperti hak integriti, tidak dilesenkan di bawah Lesen Awam ini, begitu juga hak publisiti, privasi, dan/atau hak keperibadian lain yang serupa; walau bagaimanapun, sejauh mana yang mungkin, Pemberi Lesen mengetepikan dan/atau bersetuju untuk tidak menegaskan sebarang hak tersebut yang dipegang oleh Pemberi Lesen sejauh yang diperlukan untuk membolehkan Anda menggunakan Hak Berlesen, tetapi tidak sebaliknya. + + 2. Hak paten dan tanda dagangan tidak dilesenkan di bawah Lesen Awam ini. + + 3. Sejauh mana yang mungkin, Pemberi Lesen mengetepikan sebarang hak untuk mengutip royalti daripada Anda untuk penggunaan Hak Berlesen, sama ada secara langsung atau melalui persatuan pengutipan di bawah sebarang skim pelesenan sukarela atau boleh diketepikan secara undang-undang atau wajib. Dalam semua kes lain, Pemberi Lesen secara jelas mengekalkan sebarang hak untuk mengutip royalti tersebut. + +Bahagian 3 -- Syarat Lesen. + +Penggunaan Anda terhadap Hak Berlesen secara jelas tertakluk kepada syarat berikut. + + a. Pengiktirafan. + + 1. Jika Anda Kongsi Bahan Berlesen (termasuk dalam bentuk yang diubah), Anda mesti: + + a. mengekalkan perkara berikut jika ia disediakan oleh Pemberi Lesen bersama Bahan Berlesen: + + i. pengenalan pencipta Bahan Berlesen dan pihak lain yang ditetapkan untuk menerima pengiktirafan, dengan cara yang munasabah yang diminta oleh Pemberi Lesen (termasuk dengan nama samaran jika ditetapkan); + + ii. notis hak cipta; + + iii. notis yang merujuk kepada Lesen Awam ini; + + iv. notis yang merujuk kepada penafian jaminan; + + v. URI atau pautan hiper kepada Bahan Berlesen sejauh mana yang munasabah; + + b. menunjukkan jika Anda mengubah Bahan Berlesen dan mengekalkan petunjuk sebarang pengubahsuaian sebelumnya; dan + + c. menunjukkan bahawa Bahan Berlesen dilesenkan di bawah Lesen Awam ini, dan menyertakan teks, URI, atau pautan hiper kepada Lesen Awam ini. + + 2. Anda boleh memenuhi syarat dalam Bahagian 3(a)(1) dengan cara yang munasabah berdasarkan medium, cara, dan konteks di mana Anda Kongsi Bahan Berlesen. Sebagai contoh, mungkin munasabah untuk memenuhi syarat dengan menyediakan URI atau pautan hiper kepada sumber yang mengandungi maklumat yang diperlukan. + + 3. Jika diminta oleh Pemberi Lesen, Anda mesti menghapuskan sebarang maklumat yang diperlukan oleh Bahagian 3(a)(1)(A) sejauh mana yang munasabah. + + b. KongsiSerupa. + + Sebagai tambahan kepada syarat dalam Bahagian 3(a), jika Anda Kongsi Bahan Diadaptasi yang Anda hasilkan, syarat berikut juga terpakai. + + 1. Lesen Pengadaptasi yang Anda gunakan mesti merupakan lesen Creative Commons dengan Elemen Lesen yang sama, versi ini atau yang lebih baru, atau Lesen Serasi BY-SA. + + 2. Anda mesti menyertakan teks, URI, atau pautan hiper kepada Lesen Pengadaptasi yang Anda gunakan. Anda boleh memenuhi syarat ini dengan cara yang munasabah berdasarkan medium, cara, dan konteks di mana Anda Kongsi Bahan Diadaptasi. + + 3. Anda tidak boleh menawarkan atau mengenakan sebarang terma atau syarat tambahan atau berbeza pada, atau menggunakan sebarang Langkah Teknologi Berkesan pada, Bahan Diadaptasi yang menyekat penggunaan hak yang diberikan di bawah Lesen Pengadaptasi yang Anda gunakan. + +Bahagian 4 -- Hak Pangkalan Data Sui Generis. + +Di mana Hak Berlesen termasuk Hak Pangkalan Data Sui Generis yang terpakai kepada penggunaan Anda terhadap Bahan Berlesen: + + a. untuk mengelakkan keraguan, Bahagian 2(a)(1) memberikan Anda hak untuk mengekstrak, menggunakan semula, mengeluarkan semula, dan Kongsi semua atau sebahagian besar kandungan pangkalan data; + + b. jika Anda menyertakan semua atau sebahagian besar kandungan pangkalan data dalam pangkalan data di mana Anda mempunyai Hak Pangkalan Data Sui Generis: +Hak, kemudian pangkalan data di mana Anda memiliki Hak Pangkalan Data Sui Generis (tetapi bukan kandungan individunya) adalah Bahan Adaptasi, + +termasuk untuk tujuan Seksyen 3(b); dan +c. Anda mesti mematuhi syarat-syarat dalam Seksyen 3(a) jika Anda Berkongsi semua atau sebahagian besar kandungan pangkalan data. + +Untuk mengelakkan kekeliruan, Seksyen 4 ini melengkapi dan tidak menggantikan kewajipan Anda di bawah Lesen Awam ini di mana Hak Berlesen termasuk Hak Cipta dan Hak Serupa lainnya. + +--- + +Seksyen 5 -- Penafian Jaminan dan Had Tanggungjawab. + +a. KECUALI JIKA DILAKUKAN SECARA BERASINGAN OLEH PEMBERI LESEN, SEJAUH MUNGKIN, PEMBERI LESEN MENAWARKAN BAHAN BERLESEN SEBAGAIMANA ADANYA DAN SEBAGAIMANA TERSEDIA, DAN TIDAK MEMBUAT SEBARANG PERNYATAAN ATAU JAMINAN DALAM APA JUA BENTUK BERKAITAN DENGAN BAHAN BERLESEN, SAMA ADA SECARA TERANG, TERSIRAT, BERKANUN, ATAU LAINNYA. INI TERMASUK, TANPA HAD, JAMINAN HAK MILIK, KESESUAIAN UNTUK TUJUAN TERTENTU, KETIDAKLANGGARAN, KETIADAAN KECACATAN TERSEMBUNYI ATAU LAINNYA, KETEPATAN, ATAU KEHADIRAN ATAU KETIADAAN KESALAHAN, SAMA ADA DIKETAHUI ATAU BOLEH DIKESAN. DI MANA PENAFIAN JAMINAN TIDAK DIBENARKAN SEPENUHNYA ATAU SEBAHAGIAN, PENAFIAN INI MUNGKIN TIDAK BERLAKU UNTUK ANDA. + +b. SEJAUH MUNGKIN, DALAM APA JUA KEADAAN PEMBERI LESEN TIDAK AKAN BERTANGGUNGJAWAB KEPADA ANDA ATAS SEBARANG TEORI UNDANG-UNDANG (TERMASUK, TANPA HAD, KECUAIAN) ATAU LAINNYA UNTUK SEBARANG KERUGIAN LANGSUNG, KHAS, TIDAK LANGSUNG, SAMPINGAN, AKIBAT, PUNITIF, CONTOH, ATAU KERUGIAN LAIN, KOS, PERBELANJAAN, ATAU KEROSAKAN YANG TIMBUL DARIPADA LESEN AWAM INI ATAU PENGGUNAAN BAHAN BERLESEN, WALAUPUN PEMBERI LESEN TELAH DIMAKLUMKAN TENTANG KEMUNGKINAN KERUGIAN, KOS, PERBELANJAAN, ATAU KEROSAKAN TERSEBUT. DI MANA HAD TANGGUNGJAWAB TIDAK DIBENARKAN SEPENUHNYA ATAU SEBAHAGIAN, HAD INI MUNGKIN TIDAK BERLAKU UNTUK ANDA. + +c. Penafian jaminan dan had tanggungjawab yang dinyatakan di atas hendaklah ditafsirkan dengan cara yang, sejauh mungkin, paling hampir menyerupai penafian mutlak dan pelepasan semua tanggungjawab. + +--- + +Seksyen 6 -- Tempoh dan Penamatan. + +a. Lesen Awam ini terpakai untuk tempoh Hak Cipta dan Hak Serupa yang dilesenkan di sini. Walau bagaimanapun, jika Anda gagal mematuhi Lesen Awam ini, maka hak Anda di bawah Lesen Awam ini akan tamat secara automatik. + +b. Di mana hak Anda untuk menggunakan Bahan Berlesen telah tamat di bawah Seksyen 6(a), ia akan dipulihkan: + +1. secara automatik pada tarikh pelanggaran diperbaiki, dengan syarat ia diperbaiki dalam masa 30 hari selepas Anda menyedari pelanggaran tersebut; atau +2. atas pemulihan secara nyata oleh Pemberi Lesen. + +Untuk mengelakkan kekeliruan, Seksyen 6(b) ini tidak menjejaskan sebarang hak yang mungkin dimiliki oleh Pemberi Lesen untuk mendapatkan remedi atas pelanggaran Anda terhadap Lesen Awam ini. + +c. Untuk mengelakkan kekeliruan, Pemberi Lesen juga boleh menawarkan Bahan Berlesen di bawah terma atau syarat yang berasingan atau berhenti mengedarkan Bahan Berlesen pada bila-bila masa; walau bagaimanapun, tindakan ini tidak akan menamatkan Lesen Awam ini. + +d. Seksyen 1, 5, 6, 7, dan 8 kekal selepas penamatan Lesen Awam ini. + +--- + +Seksyen 7 -- Terma dan Syarat Lain. + +a. Pemberi Lesen tidak terikat oleh sebarang terma atau syarat tambahan atau berbeza yang disampaikan oleh Anda kecuali jika dipersetujui secara nyata. + +b. Sebarang pengaturan, pemahaman, atau perjanjian berkaitan dengan Bahan Berlesen yang tidak dinyatakan di sini adalah berasingan daripada dan bebas daripada terma dan syarat Lesen Awam ini. + +--- + +Seksyen 8 -- Tafsiran. + +a. Untuk mengelakkan kekeliruan, Lesen Awam ini tidak, dan tidak boleh ditafsirkan untuk, mengurangkan, mengehadkan, menyekat, atau mengenakan syarat pada sebarang penggunaan Bahan Berlesen yang boleh dibuat secara sah tanpa kebenaran di bawah Lesen Awam ini. + +b. Sejauh mungkin, jika mana-mana peruntukan Lesen Awam ini dianggap tidak boleh dikuatkuasakan, ia akan secara automatik diperbaiki kepada tahap minimum yang diperlukan untuk menjadikannya boleh dikuatkuasakan. Jika peruntukan tersebut tidak boleh diperbaiki, ia akan dipisahkan daripada Lesen Awam ini tanpa menjejaskan kebolehkuatkuasaan terma dan syarat yang selebihnya. + +c. Tiada terma atau syarat Lesen Awam ini akan diketepikan dan tiada kegagalan untuk mematuhi yang disetujui kecuali jika dipersetujui secara nyata oleh Pemberi Lesen. + +d. Tiada apa-apa dalam Lesen Awam ini yang membentuk atau boleh ditafsirkan sebagai had ke atas, atau pelepasan, sebarang keistimewaan dan kekebalan yang terpakai kepada Pemberi Lesen atau Anda, termasuk daripada proses undang-undang mana-mana bidang kuasa atau pihak berkuasa. + +--- + +======================================================================= + +Creative Commons bukan pihak kepada lesen awamnya. Walau bagaimanapun, Creative Commons boleh memilih untuk menggunakan salah satu lesen awamnya pada bahan yang diterbitkannya dan dalam keadaan tersebut akan dianggap sebagai "Pemberi Lesen." Teks lesen awam Creative Commons didedikasikan kepada domain awam di bawah Dedikasi Domain Awam CC0. Kecuali untuk tujuan terhad menunjukkan bahawa bahan dikongsi di bawah lesen awam Creative Commons atau sebagaimana yang dibenarkan oleh dasar Creative Commons yang diterbitkan di creativecommons.org/policies, Creative Commons tidak membenarkan penggunaan tanda dagangan "Creative Commons" atau sebarang tanda dagangan atau logo lain Creative Commons tanpa kebenaran bertulis terlebih dahulu termasuk, tanpa had, berkaitan dengan sebarang pengubahsuaian tidak sah kepada mana-mana lesen awamnya atau sebarang pengaturan, pemahaman, atau perjanjian lain berkaitan dengan penggunaan bahan berlesen. Untuk mengelakkan kekeliruan, perenggan ini bukan sebahagian daripada lesen awam. + +Creative Commons boleh dihubungi di creativecommons.org. + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/ms/sketchnotes/README.md b/translations/ms/sketchnotes/README.md new file mode 100644 index 00000000..0f294562 --- /dev/null +++ b/translations/ms/sketchnotes/README.md @@ -0,0 +1,21 @@ + +Semua sketchnote kurikulum boleh dimuat turun di sini. + +🖨 Untuk cetakan dalam resolusi tinggi, versi TIFF tersedia di [repo ini](https://github.com/girliemac/a-picture-is-worth-a-1000-words/tree/main/ml/tiff). + +🎨 Dihasilkan oleh: [Tomomi Imura](https://github.com/girliemac) (Twitter: [@girlie_mac](https://twitter.com/girlie_mac)) + +[![CC BY-SA 4.0](https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg)](https://creativecommons.org/licenses/by-sa/4.0/) + +--- + +**Penafian**: +Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/nl/1-Introduction/1-intro-to-ML/README.md b/translations/nl/1-Introduction/1-intro-to-ML/README.md new file mode 100644 index 00000000..e0773c08 --- /dev/null +++ b/translations/nl/1-Introduction/1-intro-to-ML/README.md @@ -0,0 +1,159 @@ + +# Introductie tot machine learning + +## [Quiz voorafgaand aan de les](https://ff-quizzes.netlify.app/en/ml/) + +--- + +[![ML voor beginners - Introductie tot Machine Learning voor Beginners](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](https://youtu.be/6mSx_KJxcHI "ML voor beginners - Introductie tot Machine Learning voor Beginners") + +> 🎥 Klik op de afbeelding hierboven voor een korte video over deze les. + +Welkom bij deze cursus over klassieke machine learning voor beginners! Of je nu helemaal nieuw bent op dit gebied, of een ervaren ML-practitioner die zijn kennis wil opfrissen, we zijn blij dat je meedoet! We willen een vriendelijke startplek creëren voor je ML-studie en staan open voor jouw [feedback](https://github.com/microsoft/ML-For-Beginners/discussions). + +[![Introductie tot ML](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Introductie tot ML") + +> 🎥 Klik op de afbeelding hierboven voor een video: MIT's John Guttag introduceert machine learning + +--- +## Aan de slag met machine learning + +Voordat je begint met deze cursus, moet je je computer instellen om lokaal notebooks te kunnen draaien. + +- **Configureer je computer met deze video's**. Gebruik de volgende links om te leren [hoe je Python installeert](https://youtu.be/CXZYvNRIAKM) op je systeem en [hoe je een teksteditor instelt](https://youtu.be/EU8eayHWoZg) voor ontwikkeling. +- **Leer Python**. Het wordt ook aanbevolen om een basisbegrip te hebben van [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), een programmeertaal die nuttig is voor datawetenschappers en die we in deze cursus gebruiken. +- **Leer Node.js en JavaScript**. We gebruiken ook een paar keer JavaScript in deze cursus bij het bouwen van webapps, dus je moet [node](https://nodejs.org) en [npm](https://www.npmjs.com/) installeren, evenals [Visual Studio Code](https://code.visualstudio.com/) beschikbaar hebben voor zowel Python- als JavaScript-ontwikkeling. +- **Maak een GitHub-account aan**. Aangezien je ons hier op [GitHub](https://github.com) hebt gevonden, heb je misschien al een account, maar zo niet, maak er dan een aan en fork deze cursus om zelf te gebruiken. (Geef ons gerust een ster, ook 😊) +- **Verken Scikit-learn**. Maak jezelf vertrouwd met [Scikit-learn](https://scikit-learn.org/stable/user_guide.html), een set ML-bibliotheken die we in deze lessen gebruiken. + +--- +## Wat is machine learning? + +De term 'machine learning' is een van de meest populaire en vaak gebruikte termen van vandaag. Er is een aanzienlijke kans dat je deze term minstens één keer hebt gehoord als je enige bekendheid hebt met technologie, ongeacht in welk domein je werkt. De werking van machine learning is echter voor de meeste mensen een mysterie. Voor een beginner in machine learning kan het onderwerp soms overweldigend aanvoelen. Daarom is het belangrijk om te begrijpen wat machine learning eigenlijk is en er stap voor stap over te leren, aan de hand van praktische voorbeelden. + +--- +## De hypecurve + +![ml hype curve](../../../../1-Introduction/1-intro-to-ML/images/hype.png) + +> Google Trends toont de recente 'hypecurve' van de term 'machine learning' + +--- +## Een mysterieus universum + +We leven in een universum vol fascinerende mysteries. Grote wetenschappers zoals Stephen Hawking, Albert Einstein en vele anderen hebben hun leven gewijd aan het zoeken naar betekenisvolle informatie die de mysteries van de wereld om ons heen onthult. Dit is de menselijke conditie van leren: een menselijk kind leert nieuwe dingen en ontdekt de structuur van zijn wereld jaar na jaar terwijl het opgroeit tot volwassenheid. + +--- +## Het brein van een kind + +Het brein en de zintuigen van een kind nemen de feiten van hun omgeving waar en leren geleidelijk de verborgen patronen van het leven, die het kind helpen logische regels te ontwikkelen om de geleerde patronen te identificeren. Het leerproces van het menselijk brein maakt mensen tot de meest geavanceerde levende wezens van deze wereld. Continu leren door verborgen patronen te ontdekken en vervolgens innoveren op die patronen stelt ons in staat om onszelf steeds beter te maken gedurende ons hele leven. Dit leervermogen en evolutiecapaciteit is gerelateerd aan een concept genaamd [hersenenplasticiteit](https://www.simplypsychology.org/brain-plasticity.html). Op een oppervlakkige manier kunnen we enkele motiverende overeenkomsten trekken tussen het leerproces van het menselijk brein en de concepten van machine learning. + +--- +## Het menselijk brein + +Het [menselijk brein](https://www.livescience.com/29365-human-brain.html) neemt dingen waar uit de echte wereld, verwerkt de waargenomen informatie, neemt rationele beslissingen en voert bepaalde acties uit op basis van de omstandigheden. Dit noemen we intelligent gedrag. Wanneer we een facsimile van het intelligente gedragsproces programmeren in een machine, noemen we dat kunstmatige intelligentie (AI). + +--- +## Enkele terminologie + +Hoewel de termen soms door elkaar worden gehaald, is machine learning (ML) een belangrijk onderdeel van kunstmatige intelligentie. **ML houdt zich bezig met het gebruik van gespecialiseerde algoritmen om betekenisvolle informatie te ontdekken en verborgen patronen te vinden in waargenomen data om het rationele besluitvormingsproces te ondersteunen**. + +--- +## AI, ML, Deep Learning + +![AI, ML, deep learning, data science](../../../../1-Introduction/1-intro-to-ML/images/ai-ml-ds.png) + +> Een diagram dat de relaties toont tussen AI, ML, deep learning en data science. Infographic door [Jen Looper](https://twitter.com/jenlooper) geïnspireerd door [deze grafiek](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) + +--- +## Concepten die we behandelen + +In deze cursus behandelen we alleen de kernconcepten van machine learning die een beginner moet kennen. We behandelen wat we 'klassieke machine learning' noemen, voornamelijk met behulp van Scikit-learn, een uitstekende bibliotheek die veel studenten gebruiken om de basis te leren. Om bredere concepten van kunstmatige intelligentie of deep learning te begrijpen, is een sterke fundamentele kennis van machine learning onmisbaar, en die willen we hier aanbieden. + +--- +## In deze cursus leer je: + +- kernconcepten van machine learning +- de geschiedenis van ML +- ML en eerlijkheid +- regressie ML-technieken +- classificatie ML-technieken +- clustering ML-technieken +- natuurlijke taalverwerking ML-technieken +- tijdreeksvoorspelling ML-technieken +- reinforcement learning +- toepassingen van ML in de echte wereld + +--- +## Wat we niet behandelen + +- deep learning +- neurale netwerken +- AI + +Om de leerervaring te verbeteren, vermijden we de complexiteit van neurale netwerken, 'deep learning' - het bouwen van modellen met meerdere lagen met behulp van neurale netwerken - en AI, die we in een andere cursus zullen bespreken. We bieden ook een toekomstige data science-cursus aan om ons te richten op dat aspect van dit grotere veld. + +--- +## Waarom machine learning studeren? + +Machine learning wordt vanuit een systeemperspectief gedefinieerd als het creëren van geautomatiseerde systemen die verborgen patronen uit data kunnen leren om te helpen bij het nemen van intelligente beslissingen. + +Deze motivatie is losjes geïnspireerd door hoe het menselijk brein bepaalde dingen leert op basis van de data die het waarneemt uit de buitenwereld. + +✅ Denk eens na waarom een bedrijf zou willen proberen machine learning-strategieën te gebruiken in plaats van een hard-coded regelsysteem te maken. + +--- +## Toepassingen van machine learning + +Toepassingen van machine learning zijn tegenwoordig bijna overal en zijn net zo alomtegenwoordig als de data die door onze samenlevingen stroomt, gegenereerd door onze smartphones, verbonden apparaten en andere systemen. Gezien het immense potentieel van geavanceerde machine learning-algoritmen, hebben onderzoekers hun mogelijkheden verkend om multidimensionale en multidisciplinaire problemen uit het echte leven op te lossen met geweldige positieve resultaten. + +--- +## Voorbeelden van toegepaste ML + +**Je kunt machine learning op veel manieren gebruiken**: + +- Om de kans op ziekte te voorspellen op basis van de medische geschiedenis of rapporten van een patiënt. +- Om weersgegevens te gebruiken om weersomstandigheden te voorspellen. +- Om de sentimenten van een tekst te begrijpen. +- Om nepnieuws te detecteren en de verspreiding van propaganda te stoppen. + +Financiën, economie, aardwetenschappen, ruimteonderzoek, biomedische techniek, cognitieve wetenschap en zelfs gebieden binnen de geesteswetenschappen hebben machine learning aangepast om de zware, data-intensieve problemen van hun domein op te lossen. + +--- +## Conclusie + +Machine learning automatiseert het proces van patroonontdekking door betekenisvolle inzichten te vinden uit echte of gegenereerde data. Het heeft zichzelf bewezen als zeer waardevol in zakelijke, gezondheids- en financiële toepassingen, onder andere. + +In de nabije toekomst zal het begrijpen van de basisprincipes van machine learning een must worden voor mensen uit elk domein vanwege de brede adoptie ervan. + +--- +# 🚀 Uitdaging + +Schets, op papier of met een online app zoals [Excalidraw](https://excalidraw.com/), jouw begrip van de verschillen tussen AI, ML, deep learning en data science. Voeg enkele ideeën toe over problemen die elk van deze technieken goed kunnen oplossen. + +# [Quiz na de les](https://ff-quizzes.netlify.app/en/ml/) + +--- +# Review & Zelfstudie + +Om meer te leren over hoe je met ML-algoritmen in de cloud kunt werken, volg dit [Leerpad](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott). + +Volg een [Leerpad](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) over de basisprincipes van ML. + +--- +# Opdracht + +[Begin met werken](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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor kritieke informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/1-Introduction/1-intro-to-ML/assignment.md b/translations/nl/1-Introduction/1-intro-to-ML/assignment.md new file mode 100644 index 00000000..af2be855 --- /dev/null +++ b/translations/nl/1-Introduction/1-intro-to-ML/assignment.md @@ -0,0 +1,23 @@ + +# Aan de slag + +## Instructies + +In deze niet-beoordeelde opdracht kun je je Python-kennis opfrissen en je omgeving instellen zodat je notebooks kunt uitvoeren. + +Volg dit [Python Leerpad](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott) en stel vervolgens je systemen in door deze introductievideo's te bekijken: + +https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 + +--- + +**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 zijn 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 diff --git a/translations/nl/1-Introduction/2-history-of-ML/README.md b/translations/nl/1-Introduction/2-history-of-ML/README.md new file mode 100644 index 00000000..dd2196d2 --- /dev/null +++ b/translations/nl/1-Introduction/2-history-of-ML/README.md @@ -0,0 +1,164 @@ + +# Geschiedenis van machine learning + +![Samenvatting van de geschiedenis van machine learning in een sketchnote](../../../../sketchnotes/ml-history.png) +> Sketchnote door [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [Quiz voorafgaand aan de les](https://ff-quizzes.netlify.app/en/ml/) + +--- + +[![ML voor beginners - Geschiedenis van Machine Learning](https://img.youtube.com/vi/N6wxM4wZ7V0/0.jpg)](https://youtu.be/N6wxM4wZ7V0 "ML voor beginners - Geschiedenis van Machine Learning") + +> 🎥 Klik op de afbeelding hierboven voor een korte video over deze les. + +In deze les lopen we door de belangrijkste mijlpalen in de geschiedenis van machine learning en kunstmatige intelligentie. + +De geschiedenis van kunstmatige intelligentie (AI) als vakgebied is nauw verweven met de geschiedenis van machine learning, omdat de algoritmen en computationele vooruitgangen die ML ondersteunen hebben bijgedragen aan de ontwikkeling van AI. Het is nuttig om te onthouden dat, hoewel deze vakgebieden als afzonderlijke onderzoeksgebieden in de jaren 1950 begonnen te kristalliseren, belangrijke [algoritmische, statistische, wiskundige, computationele en technische ontdekkingen](https://wikipedia.org/wiki/Timeline_of_machine_learning) voorafgingen aan en overlapten met deze periode. Mensen denken zelfs al [honderden jaren](https://wikipedia.org/wiki/History_of_artificial_intelligence) na over deze vragen: dit artikel bespreekt de historische intellectuele basis van het idee van een 'denkende machine.' + +--- +## Belangrijke ontdekkingen + +- 1763, 1812 [Bayesiaanse stelling](https://wikipedia.org/wiki/Bayes%27_theorem) en zijn voorlopers. Deze stelling en de toepassingen ervan vormen de basis van inferentie en beschrijven de kans dat een gebeurtenis plaatsvindt op basis van eerdere kennis. +- 1805 [Least Square Theory](https://wikipedia.org/wiki/Least_squares) door de Franse wiskundige Adrien-Marie Legendre. Deze theorie, die je zult leren in onze regressie-eenheid, helpt bij het aanpassen van data. +- 1913 [Markovketens](https://wikipedia.org/wiki/Markov_chain), genoemd naar de Russische wiskundige Andrey Markov, worden gebruikt om een reeks mogelijke gebeurtenissen te beschrijven op basis van een vorige toestand. +- 1957 [Perceptron](https://wikipedia.org/wiki/Perceptron) is een type lineaire classifier uitgevonden door de Amerikaanse psycholoog Frank Rosenblatt, die de basis vormt voor vooruitgangen in deep learning. + +--- + +- 1967 [Nearest Neighbor](https://wikipedia.org/wiki/Nearest_neighbor) is een algoritme dat oorspronkelijk is ontworpen om routes in kaart te brengen. In een ML-context wordt het gebruikt om patronen te detecteren. +- 1970 [Backpropagation](https://wikipedia.org/wiki/Backpropagation) wordt gebruikt om [feedforward neural networks](https://wikipedia.org/wiki/Feedforward_neural_network) te trainen. +- 1982 [Recurrent Neural Networks](https://wikipedia.org/wiki/Recurrent_neural_network) zijn kunstmatige neurale netwerken afgeleid van feedforward neurale netwerken die temporele grafieken creëren. + +✅ Doe wat onderzoek. Welke andere data springen eruit als cruciaal in de geschiedenis van ML en AI? + +--- +## 1950: Machines die denken + +Alan Turing, een werkelijk opmerkelijk persoon die [door het publiek in 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) werd verkozen tot de grootste wetenschapper van de 20e eeuw, wordt gecrediteerd met het helpen leggen van de basis voor het concept van een 'machine die kan denken.' Hij worstelde met sceptici en zijn eigen behoefte aan empirisch bewijs van dit concept, onder andere door het creëren van de [Turingtest](https://www.bbc.com/news/technology-18475646), die je zult verkennen in onze NLP-lessen. + +--- +## 1956: Dartmouth Summer Research Project + +"Het Dartmouth Summer Research Project over kunstmatige intelligentie was een baanbrekende gebeurtenis voor kunstmatige intelligentie als vakgebied," en hier werd de term 'kunstmatige intelligentie' bedacht ([bron](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). + +> Elk aspect van leren of een ander kenmerk van intelligentie kan in principe zo precies worden beschreven dat een machine kan worden gemaakt om het te simuleren. + +--- + +De hoofdonderzoeker, wiskundeprofessor John McCarthy, hoopte "voort te gaan op basis van de veronderstelling dat elk aspect van leren of een ander kenmerk van intelligentie in principe zo precies kan worden beschreven dat een machine kan worden gemaakt om het te simuleren." De deelnemers omvatten een andere grootheid in het veld, Marvin Minsky. + +De workshop wordt gecrediteerd met het initiëren en aanmoedigen van verschillende discussies, waaronder "de opkomst van symbolische methoden, systemen gericht op beperkte domeinen (vroege expertsystemen), en deductieve systemen versus inductieve systemen." ([bron](https://wikipedia.org/wiki/Dartmouth_workshop)). + +--- +## 1956 - 1974: "De gouden jaren" + +Van de jaren 1950 tot halverwege de jaren '70 was er veel optimisme over de hoop dat AI veel problemen kon oplossen. In 1967 verklaarde Marvin Minsky vol vertrouwen: "Binnen een generatie ... zal het probleem van het creëren van 'kunstmatige intelligentie' substantieel zijn opgelost." (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) + +Onderzoek naar natuurlijke taalverwerking bloeide, zoekmethoden werden verfijnd en krachtiger gemaakt, en het concept van 'micro-werelden' werd gecreëerd, waar eenvoudige taken werden uitgevoerd met behulp van eenvoudige taalopdrachten. + +--- + +Onderzoek werd goed gefinancierd door overheidsinstanties, vooruitgangen werden geboekt in computation en algoritmen, en prototypes van intelligente machines werden gebouwd. Enkele van deze machines zijn: + +* [Shakey de robot](https://wikipedia.org/wiki/Shakey_the_robot), die kon manoeuvreren en beslissen hoe taken 'intelligent' moesten worden uitgevoerd. + + ![Shakey, een intelligente robot](../../../../1-Introduction/2-history-of-ML/images/shakey.jpg) + > Shakey in 1972 + +--- + +* Eliza, een vroege 'chatterbot', kon met mensen praten en fungeren als een primitieve 'therapeut'. Je leert meer over Eliza in de NLP-lessen. + + ![Eliza, een bot](../../../../1-Introduction/2-history-of-ML/images/eliza.png) + > Een versie van Eliza, een chatbot + +--- + +* "Blocks world" was een voorbeeld van een micro-wereld waar blokken konden worden gestapeld en gesorteerd, en experimenten in het leren van machines om beslissingen te nemen konden worden getest. Vooruitgangen gebouwd met bibliotheken zoals [SHRDLU](https://wikipedia.org/wiki/SHRDLU) hielpen de taalverwerking vooruit te stuwen. + + [![blocks world met SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "blocks world met SHRDLU") + + > 🎥 Klik op de afbeelding hierboven voor een video: Blocks world met SHRDLU + +--- +## 1974 - 1980: "AI Winter" + +Halverwege de jaren '70 werd duidelijk dat de complexiteit van het maken van 'intelligente machines' was onderschat en dat de belofte ervan, gezien de beschikbare rekenkracht, was overdreven. Financiering droogde op en het vertrouwen in het veld nam af. Enkele problemen die het vertrouwen beïnvloedden waren: +--- +- **Beperkingen**. De rekenkracht was te beperkt. +- **Combinatorische explosie**. Het aantal parameters dat moest worden getraind groeide exponentieel naarmate er meer van computers werd gevraagd, zonder een parallelle evolutie van rekenkracht en capaciteit. +- **Gebrek aan data**. Er was een gebrek aan data dat het proces van testen, ontwikkelen en verfijnen van algoritmen hinderde. +- **Stellen we de juiste vragen?**. De vragen die werden gesteld begonnen zelf ter discussie te staan. Onderzoekers kregen kritiek op hun benaderingen: + - Turingtests werden in twijfel getrokken door middel van onder andere de 'Chinese kamer theorie', die stelde dat "het programmeren van een digitale computer het misschien kan laten lijken alsof het taal begrijpt, maar geen echte begrip kan produceren." ([bron](https://plato.stanford.edu/entries/chinese-room/)) + - De ethiek van het introduceren van kunstmatige intelligenties zoals de "therapeut" ELIZA in de samenleving werd uitgedaagd. + +--- + +Tegelijkertijd begonnen verschillende AI-denkrichtingen te ontstaan. Er werd een dichotomie vastgesteld tussen ["scruffy" vs. "neat AI"](https://wikipedia.org/wiki/Neats_and_scruffies) praktijken. _Scruffy_ labs pasten programma's urenlang aan totdat ze het gewenste resultaat hadden. _Neat_ labs "richtten zich op logica en formele probleemoplossing". ELIZA en SHRDLU waren bekende _scruffy_ systemen. In de jaren '80, toen de vraag ontstond om ML-systemen reproduceerbaar te maken, nam de _neat_ benadering geleidelijk de voorgrond omdat de resultaten ervan beter uitlegbaar zijn. + +--- +## 1980s Expertsystemen + +Naarmate het veld groeide, werd het voordeel ervan voor bedrijven duidelijker, en in de jaren '80 nam ook de proliferatie van 'expertsystemen' toe. "Expertsystemen waren een van de eerste echt succesvolle vormen van kunstmatige intelligentie (AI) software." ([bron](https://wikipedia.org/wiki/Expert_system)). + +Dit type systeem is eigenlijk _hybride_, bestaande gedeeltelijk uit een regelsysteem dat bedrijfsvereisten definieert, en een inferentie-engine die het regelsysteem gebruikt om nieuwe feiten af te leiden. + +Deze periode zag ook toenemende aandacht voor neurale netwerken. + +--- +## 1987 - 1993: AI 'Chill' + +De proliferatie van gespecialiseerde hardware voor expertsystemen had het ongelukkige effect dat het te gespecialiseerd werd. De opkomst van personal computers concurreerde ook met deze grote, gespecialiseerde, gecentraliseerde systemen. De democratisering van computing was begonnen, en het effende uiteindelijk de weg voor de moderne explosie van big data. + +--- +## 1993 - 2011 + +Deze periode zag een nieuw tijdperk voor ML en AI om enkele van de problemen op te lossen die eerder waren veroorzaakt door het gebrek aan data en rekenkracht. De hoeveelheid data begon snel toe te nemen en breder beschikbaar te worden, zowel ten goede als ten kwade, vooral met de komst van de smartphone rond 2007. Rekenkracht breidde exponentieel uit, en algoritmen evolueerden mee. Het veld begon volwassen te worden naarmate de vrije dagen van het verleden begonnen te kristalliseren in een echte discipline. + +--- +## Nu + +Vandaag de dag raken machine learning en AI bijna elk aspect van ons leven. Dit tijdperk vraagt om een zorgvuldige begrip van de risico's en potentiële effecten van deze algoritmen op mensenlevens. Zoals Microsoft's Brad Smith heeft verklaard: "Informatietechnologie roept kwesties op die raken aan de kern van fundamentele mensenrechtenbescherming zoals privacy en vrijheid van meningsuiting. Deze kwesties vergroten de verantwoordelijkheid voor technologiebedrijven die deze producten creëren. Naar onze mening vragen ze ook om doordachte overheidsregulering en de ontwikkeling van normen rond acceptabel gebruik" ([bron](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). + +--- + +Het blijft afwachten wat de toekomst brengt, maar het is belangrijk om deze computersystemen en de software en algoritmen die ze draaien te begrijpen. We hopen dat dit curriculum je zal helpen om een beter begrip te krijgen zodat je zelf kunt beslissen. + +[![De geschiedenis van deep learning](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 "De geschiedenis van deep learning") +> 🎥 Klik op de afbeelding hierboven voor een video: Yann LeCun bespreekt de geschiedenis van deep learning in deze lezing + +--- +## 🚀Uitdaging + +Duik in een van deze historische momenten en leer meer over de mensen erachter. Er zijn fascinerende personages, en geen enkele wetenschappelijke ontdekking is ooit in een culturele vacuüm gecreëerd. Wat ontdek je? + +## [Quiz na de les](https://ff-quizzes.netlify.app/en/ml/) + +--- +## Review & Zelfstudie + +Hier zijn items om te bekijken en te beluisteren: + +[Deze podcast waarin Amy Boyd de evolutie van AI bespreekt](http://runasradio.com/Shows/Show/739) + +[![De geschiedenis van AI door Amy Boyd](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "De geschiedenis van AI door Amy Boyd") + +--- + +## Opdracht + +[Maak een tijdlijn](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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/1-Introduction/2-history-of-ML/assignment.md b/translations/nl/1-Introduction/2-history-of-ML/assignment.md new file mode 100644 index 00000000..c565c85b --- /dev/null +++ b/translations/nl/1-Introduction/2-history-of-ML/assignment.md @@ -0,0 +1,25 @@ + +# Maak een tijdlijn + +## Instructies + +Gebruik [deze repo](https://github.com/Digital-Humanities-Toolkit/timeline-builder) om een tijdlijn te maken van een aspect uit de geschiedenis van algoritmes, wiskunde, statistiek, AI, of ML, of een combinatie hiervan. Je kunt je richten op één persoon, één idee, of een lange periode van gedachteontwikkeling. Zorg ervoor dat je multimedia-elementen toevoegt. + +## Rubriek + +| Criteria | Uitmuntend | Voldoende | Moet Verbeterd Worden | +| -------- | ------------------------------------------------ | -------------------------------------- | -------------------------------------------------------------- | +| | Een gepubliceerde tijdlijn wordt gepresenteerd als een GitHub-pagina | De code is onvolledig en niet gepubliceerd | De tijdlijn is onvolledig, niet goed onderzocht en niet gepubliceerd | + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor kritieke informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/1-Introduction/3-fairness/README.md b/translations/nl/1-Introduction/3-fairness/README.md new file mode 100644 index 00000000..4fb0c107 --- /dev/null +++ b/translations/nl/1-Introduction/3-fairness/README.md @@ -0,0 +1,170 @@ + +# Machine Learning-oplossingen bouwen met verantwoorde AI + +![Samenvatting van verantwoorde AI in Machine Learning in een sketchnote](../../../../sketchnotes/ml-fairness.png) +> Sketchnote door [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Introductie + +In dit curriculum ontdek je hoe machine learning ons dagelijks leven beïnvloedt. Systemen en modellen spelen nu al een rol in dagelijkse besluitvormingsprocessen, zoals medische diagnoses, leninggoedkeuringen of het opsporen van fraude. Het is daarom belangrijk dat deze modellen goed functioneren en betrouwbare resultaten leveren. Net zoals bij elke softwaretoepassing kunnen AI-systemen niet aan verwachtingen voldoen of ongewenste uitkomsten hebben. Daarom is het essentieel om het gedrag van een AI-model te begrijpen en uit te leggen. + +Stel je voor wat er kan gebeuren als de gegevens die je gebruikt om deze modellen te bouwen bepaalde demografische gegevens missen, zoals ras, geslacht, politieke overtuiging, religie, of als ze deze disproportioneel vertegenwoordigen. Wat gebeurt er als de output van het model wordt geïnterpreteerd om een bepaalde demografische groep te bevoordelen? Wat zijn de gevolgen voor de toepassing? En wat gebeurt er als het model een nadelige uitkomst heeft en schadelijk is voor mensen? Wie is verantwoordelijk voor het gedrag van AI-systemen? Dit zijn enkele vragen die we in dit curriculum zullen verkennen. + +In deze les leer je: + +- Het belang van eerlijkheid in machine learning en de schade die oneerlijkheid kan veroorzaken. +- Het verkennen van uitschieters en ongebruikelijke scenario's om betrouwbaarheid en veiligheid te waarborgen. +- Het belang van inclusieve systemen ontwerpen om iedereen te empoweren. +- Hoe cruciaal het is om de privacy en veiligheid van gegevens en mensen te beschermen. +- Het belang van een transparante aanpak om het gedrag van AI-modellen uit te leggen. +- Hoe verantwoordelijkheid essentieel is om vertrouwen in AI-systemen op te bouwen. + +## Vereisten + +Als vereiste, volg het "Responsible AI Principles" leerpad en bekijk de onderstaande video over dit onderwerp: + +Leer meer over verantwoorde AI via dit [leerpad](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) + +[![Microsoft's Approach to Responsible AI](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Microsoft's Approach to Responsible AI") + +> 🎥 Klik op de afbeelding hierboven voor een video: Microsoft's Approach to Responsible AI + +## Eerlijkheid + +AI-systemen moeten iedereen eerlijk behandelen en vermijden dat vergelijkbare groepen mensen verschillend worden beïnvloed. Bijvoorbeeld, wanneer AI-systemen advies geven over medische behandelingen, leningaanvragen of werkgelegenheid, moeten ze dezelfde aanbevelingen doen aan iedereen met vergelijkbare symptomen, financiële omstandigheden of professionele kwalificaties. Elk van ons draagt inherente vooroordelen met zich mee die onze beslissingen en acties beïnvloeden. Deze vooroordelen kunnen zichtbaar zijn in de gegevens die we gebruiken om AI-systemen te trainen. Dergelijke manipulatie kan soms onbedoeld gebeuren. Het is vaak moeilijk om bewust te weten wanneer je vooroordelen in gegevens introduceert. + +**"Oneerlijkheid"** omvat negatieve gevolgen, of "schade", voor een groep mensen, zoals die gedefinieerd in termen van ras, geslacht, leeftijd of handicapstatus. De belangrijkste vormen van schade gerelateerd aan eerlijkheid kunnen worden geclassificeerd als: + +- **Toewijzing**, bijvoorbeeld als een geslacht of etniciteit wordt bevoordeeld boven een andere. +- **Kwaliteit van dienstverlening**. Als je gegevens traint voor één specifiek scenario, maar de werkelijkheid veel complexer is, leidt dit tot een slecht presterende dienst. Bijvoorbeeld een handzeepdispenser die mensen met een donkere huid niet lijkt te kunnen detecteren. [Referentie](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) +- **Denigratie**. Het oneerlijk bekritiseren en labelen van iets of iemand. Bijvoorbeeld, een beeldlabeltechnologie die berucht is om het verkeerd labelen van afbeeldingen van mensen met een donkere huid als gorilla's. +- **Over- of ondervertegenwoordiging**. Het idee dat een bepaalde groep niet wordt gezien in een bepaald beroep, en elke dienst of functie die dat blijft promoten, draagt bij aan schade. +- **Stereotypering**. Het associëren van een bepaalde groep met vooraf toegewezen eigenschappen. Bijvoorbeeld, een taalvertalingssysteem tussen Engels en Turks kan onnauwkeurigheden hebben door woorden met stereotypische associaties met geslacht. + +![vertaling naar Turks](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png) +> vertaling naar Turks + +![vertaling terug naar Engels](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png) +> vertaling terug naar Engels + +Bij het ontwerpen en testen van AI-systemen moeten we ervoor zorgen dat AI eerlijk is en niet geprogrammeerd is om bevooroordeelde of discriminerende beslissingen te nemen, die ook verboden zijn voor mensen. Eerlijkheid garanderen in AI en machine learning blijft een complexe sociaal-technische uitdaging. + +### Betrouwbaarheid en veiligheid + +Om vertrouwen op te bouwen, moeten AI-systemen betrouwbaar, veilig en consistent zijn onder normale en onverwachte omstandigheden. Het is belangrijk om te weten hoe AI-systemen zich gedragen in verschillende situaties, vooral wanneer ze uitschieters zijn. Bij het bouwen van AI-oplossingen moet er veel aandacht worden besteed aan hoe om te gaan met een breed scala aan omstandigheden waarmee de AI-oplossingen te maken kunnen krijgen. Bijvoorbeeld, een zelfrijdende auto moet de veiligheid van mensen als topprioriteit stellen. Als gevolg hiervan moet de AI die de auto aandrijft rekening houden met alle mogelijke scenario's waarmee de auto te maken kan krijgen, zoals nacht, onweer of sneeuwstormen, kinderen die de straat oversteken, huisdieren, wegwerkzaamheden, enzovoort. Hoe goed een AI-systeem een breed scala aan omstandigheden betrouwbaar en veilig kan verwerken, weerspiegelt het niveau van anticipatie dat de datawetenschapper of AI-ontwikkelaar heeft overwogen tijdens het ontwerp of de test van het systeem. + +> [🎥 Klik hier voor een video: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl) + +### Inclusiviteit + +AI-systemen moeten worden ontworpen om iedereen te betrekken en te empoweren. Bij het ontwerpen en implementeren van AI-systemen identificeren en aanpakken datawetenschappers en AI-ontwikkelaars potentiële barrières in het systeem die mensen onbedoeld kunnen uitsluiten. Bijvoorbeeld, er zijn 1 miljard mensen met een handicap wereldwijd. Met de vooruitgang van AI kunnen zij gemakkelijker toegang krijgen tot een breed scala aan informatie en kansen in hun dagelijks leven. Door de barrières aan te pakken, ontstaan er mogelijkheden om te innoveren en AI-producten te ontwikkelen met betere ervaringen die iedereen ten goede komen. + +> [🎥 Klik hier voor een video: inclusiviteit in AI](https://www.microsoft.com/videoplayer/embed/RE4vl9v) + +### Veiligheid en privacy + +AI-systemen moeten veilig zijn en de privacy van mensen respecteren. Mensen hebben minder vertrouwen in systemen die hun privacy, informatie of leven in gevaar brengen. Bij het trainen van machine learning-modellen vertrouwen we op gegevens om de beste resultaten te produceren. Daarbij moet rekening worden gehouden met de herkomst en integriteit van de gegevens. Bijvoorbeeld, zijn de gegevens door gebruikers ingediend of openbaar beschikbaar? Vervolgens, bij het werken met de gegevens, is het cruciaal om AI-systemen te ontwikkelen die vertrouwelijke informatie kunnen beschermen en aanvallen kunnen weerstaan. Naarmate AI steeds vaker voorkomt, wordt het beschermen van privacy en het beveiligen van belangrijke persoonlijke en zakelijke informatie steeds belangrijker en complexer. Privacy- en gegevensbeveiligingskwesties vereisen speciale aandacht voor AI, omdat toegang tot gegevens essentieel is voor AI-systemen om nauwkeurige en geïnformeerde voorspellingen en beslissingen over mensen te maken. + +> [🎥 Klik hier voor een video: veiligheid in AI](https://www.microsoft.com/videoplayer/embed/RE4voJF) + +- Als industrie hebben we aanzienlijke vooruitgang geboekt op het gebied van privacy en veiligheid, grotendeels gestimuleerd door regelgeving zoals de GDPR (General Data Protection Regulation). +- Toch moeten we bij AI-systemen de spanning erkennen tussen de behoefte aan meer persoonlijke gegevens om systemen persoonlijker en effectiever te maken – en privacy. +- Net zoals bij de geboorte van verbonden computers met het internet, zien we ook een enorme toename van het aantal beveiligingsproblemen met betrekking tot AI. +- Tegelijkertijd hebben we gezien dat AI wordt gebruikt om de beveiliging te verbeteren. Bijvoorbeeld, de meeste moderne antivirusprogramma's worden tegenwoordig aangedreven door AI-heuristieken. +- We moeten ervoor zorgen dat onze data science-processen harmonieus samengaan met de nieuwste privacy- en beveiligingspraktijken. + +### Transparantie + +AI-systemen moeten begrijpelijk zijn. Een cruciaal onderdeel van transparantie is het uitleggen van het gedrag van AI-systemen en hun componenten. Het verbeteren van het begrip van AI-systemen vereist dat belanghebbenden begrijpen hoe en waarom ze functioneren, zodat ze potentiële prestatieproblemen, veiligheids- en privacykwesties, vooroordelen, uitsluitingspraktijken of onbedoelde uitkomsten kunnen identificeren. We geloven ook dat degenen die AI-systemen gebruiken eerlijk en open moeten zijn over wanneer, waarom en hoe ze ervoor kiezen om ze in te zetten. Evenals de beperkingen van de systemen die ze gebruiken. Bijvoorbeeld, als een bank een AI-systeem gebruikt om zijn beslissingen over consumentenkredieten te ondersteunen, is het belangrijk om de uitkomsten te onderzoeken en te begrijpen welke gegevens de aanbevelingen van het systeem beïnvloeden. Overheden beginnen AI in verschillende sectoren te reguleren, dus datawetenschappers en organisaties moeten uitleggen of een AI-systeem voldoet aan de regelgeving, vooral wanneer er een ongewenste uitkomst is. + +> [🎥 Klik hier voor een video: transparantie in AI](https://www.microsoft.com/videoplayer/embed/RE4voJF) + +- Omdat AI-systemen zo complex zijn, is het moeilijk te begrijpen hoe ze werken en de resultaten te interpreteren. +- Dit gebrek aan begrip beïnvloedt de manier waarop deze systemen worden beheerd, operationeel worden gemaakt en gedocumenteerd. +- Dit gebrek aan begrip beïnvloedt nog belangrijker de beslissingen die worden genomen op basis van de resultaten die deze systemen produceren. + +### Verantwoordelijkheid + +De mensen die AI-systemen ontwerpen en implementeren moeten verantwoordelijk zijn voor hoe hun systemen functioneren. De behoefte aan verantwoordelijkheid is vooral cruciaal bij gevoelige technologieën zoals gezichtsherkenning. Recentelijk is er een groeiende vraag naar gezichtsherkenningstechnologie, vooral van wetshandhavingsorganisaties die het potentieel van de technologie zien in toepassingen zoals het vinden van vermiste kinderen. Deze technologieën kunnen echter mogelijk door een overheid worden gebruikt om de fundamentele vrijheden van haar burgers in gevaar te brengen, bijvoorbeeld door voortdurende surveillance van specifieke individuen mogelijk te maken. Daarom moeten datawetenschappers en organisaties verantwoordelijk zijn voor hoe hun AI-systeem individuen of de samenleving beïnvloedt. + +[![Leading AI Researcher Warns of Mass Surveillance Through Facial Recognition](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft's Approach to Responsible AI") + +> 🎥 Klik op de afbeelding hierboven voor een video: Waarschuwingen over massale surveillance door gezichtsherkenning + +Uiteindelijk is een van de grootste vragen voor onze generatie, als de eerste generatie die AI naar de samenleving brengt, hoe we ervoor kunnen zorgen dat computers verantwoordelijk blijven tegenover mensen en hoe we ervoor kunnen zorgen dat de mensen die computers ontwerpen verantwoordelijk blijven tegenover iedereen. + +## Impactanalyse + +Voordat je een machine learning-model traint, is het belangrijk om een impactanalyse uit te voeren om het doel van het AI-systeem te begrijpen; wat het beoogde gebruik is; waar het zal worden ingezet; en wie met het systeem zal omgaan. Dit is nuttig voor beoordelaars of testers die het systeem evalueren om te weten welke factoren ze in overweging moeten nemen bij het identificeren van potentiële risico's en verwachte gevolgen. + +De volgende gebieden zijn van belang bij het uitvoeren van een impactanalyse: + +* **Nadelige impact op individuen**. Bewust zijn van eventuele beperkingen of vereisten, niet-ondersteund gebruik of bekende beperkingen die de prestaties van het systeem belemmeren, is essentieel om ervoor te zorgen dat het systeem niet op een manier wordt gebruikt die individuen kan schaden. +* **Gegevensvereisten**. Begrijpen hoe en waar het systeem gegevens zal gebruiken stelt beoordelaars in staat om eventuele gegevensvereisten te onderzoeken waar je rekening mee moet houden (bijv. GDPR- of HIPPA-gegevensreguleringen). Daarnaast moet worden onderzocht of de bron of hoeveelheid gegevens voldoende is voor training. +* **Samenvatting van impact**. Verzamel een lijst van potentiële schade die kan ontstaan door het gebruik van het systeem. Tijdens de ML-levenscyclus moet worden beoordeeld of de geïdentificeerde problemen worden aangepakt of opgelost. +* **Toepasbare doelen** voor elk van de zes kernprincipes. Beoordeel of de doelen van elk van de principes worden gehaald en of er hiaten zijn. + +## Debuggen met verantwoorde AI + +Net zoals bij het debuggen van een softwaretoepassing, is het debuggen van een AI-systeem een noodzakelijk proces om problemen in het systeem te identificeren en op te lossen. Er zijn veel factoren die ervoor kunnen zorgen dat een model niet presteert zoals verwacht of niet verantwoordelijk is. De meeste traditionele modelprestatiemetrics zijn kwantitatieve aggregaten van de prestaties van een model, die niet voldoende zijn om te analyseren hoe een model de principes van verantwoorde AI schendt. Bovendien is een machine learning-model een black box, wat het moeilijk maakt om te begrijpen wat de uitkomst beïnvloedt of uitleg te geven wanneer het een fout maakt. Later in deze cursus leren we hoe we het Responsible AI-dashboard kunnen gebruiken om AI-systemen te debuggen. Het dashboard biedt een holistisch hulpmiddel voor datawetenschappers en AI-ontwikkelaars om: + +* **Foutanalyse**. Om de foutverdeling van het model te identificeren die de eerlijkheid of betrouwbaarheid van het systeem kan beïnvloeden. +* **Modeloverzicht**. Om te ontdekken waar er verschillen zijn in de prestaties van het model over verschillende datacohorten. +* **Gegevensanalyse**. Om de gegevensverdeling te begrijpen en eventuele potentiële vooroordelen in de gegevens te identificeren die kunnen leiden tot problemen met eerlijkheid, inclusiviteit en betrouwbaarheid. +* **Modelinterpretatie**. Om te begrijpen wat de voorspellingen van het model beïnvloedt. Dit helpt bij het uitleggen van het gedrag van het model, wat belangrijk is voor transparantie en verantwoordelijkheid. + +## 🚀 Uitdaging + +Om schade te voorkomen voordat deze wordt geïntroduceerd, moeten we: + +- een diversiteit aan achtergronden en perspectieven hebben onder de mensen die aan systemen werken +- investeren in datasets die de diversiteit van onze samenleving weerspiegelen +- betere methoden ontwikkelen gedurende de hele machine learning-levenscyclus om verantwoorde AI te detecteren en te corrigeren wanneer deze optreedt + +Denk na over real-life scenario's waarin de onbetrouwbaarheid van een model duidelijk is in modelbouw en gebruik. Wat moeten we nog meer overwegen? + +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Review & Zelfstudie + +In deze les heb je enkele basisconcepten geleerd over eerlijkheid en oneerlijkheid in machine learning. +Bekijk deze workshop om dieper in te gaan op de onderwerpen: + +- Op zoek naar verantwoorde AI: Principes in de praktijk brengen door Besmira Nushi, Mehrnoosh Sameki en Amit Sharma + +[![Responsible AI Toolbox: Een open-source framework voor het bouwen van verantwoorde AI](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Een open-source framework voor het bouwen van verantwoorde AI") + +> 🎥 Klik op de afbeelding hierboven voor een video: RAI Toolbox: Een open-source framework voor het bouwen van verantwoorde AI door Besmira Nushi, Mehrnoosh Sameki en Amit Sharma + +Lees ook: + +- Microsoft’s RAI resource center: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- Microsoft’s FATE onderzoeksgroep: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) + +RAI Toolbox: + +- [Responsible AI Toolbox GitHub repository](https://github.com/microsoft/responsible-ai-toolbox) + +Lees meer over de tools van Azure Machine Learning om eerlijkheid te waarborgen: + +- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) + +## Opdracht + +[Verken RAI Toolbox](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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/1-Introduction/3-fairness/assignment.md b/translations/nl/1-Introduction/3-fairness/assignment.md new file mode 100644 index 00000000..06385ce4 --- /dev/null +++ b/translations/nl/1-Introduction/3-fairness/assignment.md @@ -0,0 +1,25 @@ + +# Verken de Responsible AI Toolbox + +## Instructies + +In deze les heb je geleerd over de Responsible AI Toolbox, een "open-source, community-gedreven project om datawetenschappers te helpen AI-systemen te analyseren en verbeteren." Voor deze opdracht, verken een van de [notebooks](https://github.com/microsoft/responsible-ai-toolbox/blob/main/notebooks/responsibleaidashboard/getting-started.ipynb) van de RAI Toolbox en rapporteer je bevindingen in een paper of presentatie. + +## Rubric + +| Criteria | Uitmuntend | Voldoende | Verbetering Nodig | +| -------- | ---------- | --------- | ----------------- | +| | Een paper of PowerPoint-presentatie wordt gepresenteerd waarin de systemen van Fairlearn, het uitgevoerde notebook en de conclusies die daaruit zijn getrokken worden besproken | Een paper wordt gepresenteerd zonder conclusies | Er wordt geen paper gepresenteerd | + +--- + +**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 zijn 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 diff --git a/translations/nl/1-Introduction/4-techniques-of-ML/README.md b/translations/nl/1-Introduction/4-techniques-of-ML/README.md new file mode 100644 index 00000000..be81eb0b --- /dev/null +++ b/translations/nl/1-Introduction/4-techniques-of-ML/README.md @@ -0,0 +1,132 @@ + +# 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: + +- Begrijpen welke processen ten grondslag liggen aan machine learning op een hoog niveau. +- Basisconcepten verkennen zoals 'modellen', 'voorspellingen' en 'trainingsdata'. + +## [Pre-lecture quiz](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. + +## Introductie + +Op een hoog niveau bestaat het vak 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. +7. **Voorspel**. Gebruik nieuwe invoer om de nauwkeurigheid van je model te testen. + +## Welke vraag stel je? + +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. + +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. + +✅ 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. + +## 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. + +### Gegevens + +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: + +- **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. + +✅ 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! + +### Kenmerken en Doel + +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 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. + +### Selecteer je kenmerkvariabelen + +🎓 **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)) + +### Visualiseer je gegevens + +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)). + +### 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. + +- **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)). + +## 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. + +### 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. + +### 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'). + +### 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. + +🎓 **Model fitten** + +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. + +🎓 **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. + +![overfitting model](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png) +> 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). + +## 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. + +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. + +--- + +## 🚀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? + +## [Post-lecture 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). + +## Opdracht + +[Interview een datawetenschapper](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 diff --git a/translations/nl/1-Introduction/4-techniques-of-ML/assignment.md b/translations/nl/1-Introduction/4-techniques-of-ML/assignment.md new file mode 100644 index 00000000..bda32dce --- /dev/null +++ b/translations/nl/1-Introduction/4-techniques-of-ML/assignment.md @@ -0,0 +1,25 @@ + +# Interview een data scientist + +## Instructies + +In jouw bedrijf, een gebruikersgroep, of onder je vrienden of medestudenten, praat met iemand die professioneel werkt als data scientist. Schrijf een kort verslag (500 woorden) over hun dagelijkse bezigheden. Zijn ze specialisten, of werken ze 'full stack'? + +## Rubric + +| Criteria | Uitmuntend | Voldoende | Verbetering nodig | +| -------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------- | --------------------- | +| | Een essay van de juiste lengte, met toegeschreven bronnen, gepresenteerd als een .doc-bestand | Het essay is slecht toegeschreven of korter dan de vereiste lengte | Geen essay gepresenteerd | + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/1-Introduction/README.md b/translations/nl/1-Introduction/README.md new file mode 100644 index 00000000..f204a273 --- /dev/null +++ b/translations/nl/1-Introduction/README.md @@ -0,0 +1,37 @@ + +# Introductie tot machine learning + +In dit deel van het curriculum maak je kennis met de basisconcepten van machine learning, wat het is, en leer je over de geschiedenis en de technieken die onderzoekers gebruiken om ermee te werken. Laten we samen deze nieuwe wereld van ML verkennen! + +![wereldbol](../../../1-Introduction/images/globe.jpg) +> Foto door Bill Oxford op Unsplash + +### Lessen + +1. [Introductie tot machine learning](1-intro-to-ML/README.md) +1. [De geschiedenis van machine learning en AI](2-history-of-ML/README.md) +1. [Eerlijkheid en machine learning](3-fairness/README.md) +1. [Technieken van machine learning](4-techniques-of-ML/README.md) + +### Credits + +"Introductie tot Machine Learning" is geschreven met ♥️ door een team van mensen waaronder [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) en [Jen Looper](https://twitter.com/jenlooper) + +"De Geschiedenis van Machine Learning" is geschreven met ♥️ door [Jen Looper](https://twitter.com/jenlooper) en [Amy Boyd](https://twitter.com/AmyKateNicho) + +"Eerlijkheid en Machine Learning" is geschreven met ♥️ door [Tomomi Imura](https://twitter.com/girliemac) + +"Technieken van Machine Learning" is geschreven met ♥️ door [Jen Looper](https://twitter.com/jenlooper) en [Chris Noring](https://twitter.com/softchris) + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele 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/1-Tools/README.md b/translations/nl/2-Regression/1-Tools/README.md new file mode 100644 index 00000000..7fab569a --- /dev/null +++ b/translations/nl/2-Regression/1-Tools/README.md @@ -0,0 +1,238 @@ + +# Aan de slag met Python en Scikit-learn voor regressiemodellen + +![Samenvatting van regressies in een sketchnote](../../../../sketchnotes/ml-regression.png) + +> Sketchnote door [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [Pre-quiz voor de les](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Deze les is beschikbaar in R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) + +## Introductie + +In deze vier lessen ontdek je hoe je regressiemodellen kunt bouwen. We zullen binnenkort bespreken waarvoor deze modellen worden gebruikt. Maar voordat je iets doet, zorg ervoor dat je de juiste tools hebt om aan de slag te gaan! + +In deze les leer je: + +- Je computer configureren voor lokale machine learning-taken. +- Werken met Jupyter-notebooks. +- Scikit-learn gebruiken, inclusief installatie. +- Lineaire regressie verkennen met een praktische oefening. + +## Installaties en configuraties + +[![ML voor beginners - Stel je tools in om Machine Learning-modellen te bouwen](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML voor beginners - Stel je tools in om Machine Learning-modellen te bouwen") + +> 🎥 Klik op de afbeelding hierboven voor een korte video over het configureren van je computer voor ML. + +1. **Installeer Python**. Zorg ervoor dat [Python](https://www.python.org/downloads/) op je computer is geïnstalleerd. Je zult Python gebruiken voor veel data science- en machine learning-taken. De meeste computersystemen hebben al een Python-installatie. Er zijn ook handige [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) beschikbaar om de installatie voor sommige gebruikers te vergemakkelijken. + + Sommige toepassingen van Python vereisen echter een specifieke versie van de software, terwijl andere een andere versie vereisen. Om deze reden is het handig om te werken binnen een [virtuele omgeving](https://docs.python.org/3/library/venv.html). + +2. **Installeer Visual Studio Code**. Zorg ervoor dat Visual Studio Code op je computer is geïnstalleerd. Volg deze instructies om [Visual Studio Code te installeren](https://code.visualstudio.com/) voor de basisinstallatie. Je gaat Python gebruiken in Visual Studio Code tijdens deze cursus, dus het kan handig zijn om je kennis op te frissen over hoe je [Visual Studio Code configureert](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) voor Python-ontwikkeling. + + > Maak jezelf vertrouwd met Python door deze verzameling [Learn-modules](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) door te nemen. + > + > [![Python instellen met Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Python instellen met Visual Studio Code") + > + > 🎥 Klik op de afbeelding hierboven voor een video: Python gebruiken binnen VS Code. + +3. **Installeer Scikit-learn** door de [instructies hier](https://scikit-learn.org/stable/install.html) te volgen. Omdat je Python 3 moet gebruiken, wordt aanbevolen om een virtuele omgeving te gebruiken. Let op, als je deze bibliotheek installeert op een M1 Mac, zijn er speciale instructies op de pagina hierboven. + +4. **Installeer Jupyter Notebook**. Je moet het [Jupyter-pakket installeren](https://pypi.org/project/jupyter/). + +## Je ML-ontwikkelomgeving + +Je gaat **notebooks** gebruiken om je Python-code te ontwikkelen en machine learning-modellen te maken. Dit type bestand is een veelgebruikt hulpmiddel voor datawetenschappers en kan worden herkend aan hun extensie `.ipynb`. + +Notebooks zijn een interactieve omgeving waarmee de ontwikkelaar zowel kan coderen als notities en documentatie rond de code kan toevoegen, wat erg handig is voor experimentele of onderzoeksgerichte projecten. + +[![ML voor beginners - Stel Jupyter Notebooks in om regressiemodellen te bouwen](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML voor beginners - Stel Jupyter Notebooks in om regressiemodellen te bouwen") + +> 🎥 Klik op de afbeelding hierboven voor een korte video over deze oefening. + +### Oefening - werken met een notebook + +In deze map vind je het bestand _notebook.ipynb_. + +1. Open _notebook.ipynb_ in Visual Studio Code. + + Een Jupyter-server zal starten met Python 3+. Je zult gebieden in de notebook vinden die kunnen worden `uitgevoerd`, stukjes code. Je kunt een codeblok uitvoeren door het pictogram te selecteren dat eruitziet als een afspeelknop. + +2. Selecteer het `md`-pictogram en voeg een beetje markdown toe, en de volgende tekst **# Welkom bij je notebook**. + + Voeg vervolgens wat Python-code toe. + +3. Typ **print('hello notebook')** in het codeblok. +4. Selecteer de pijl om de code uit te voeren. + + Je zou de geprinte verklaring moeten zien: + + ```output + hello notebook + ``` + +![VS Code met een notebook geopend](../../../../2-Regression/1-Tools/images/notebook.jpg) + +Je kunt je code afwisselen met opmerkingen om de notebook zelf te documenteren. + +✅ Denk even na over hoe anders de werkomgeving van een webontwikkelaar is in vergelijking met die van een datawetenschapper. + +## Aan de slag met Scikit-learn + +Nu Python is ingesteld in je lokale omgeving en je vertrouwd bent met Jupyter-notebooks, laten we even vertrouwd raken met Scikit-learn (uitgesproken als `sci` zoals in `science`). Scikit-learn biedt een [uitgebreide API](https://scikit-learn.org/stable/modules/classes.html#api-ref) om je te helpen ML-taken uit te voeren. + +Volgens hun [website](https://scikit-learn.org/stable/getting_started.html): "Scikit-learn is een open source machine learning-bibliotheek die zowel supervised als unsupervised learning ondersteunt. Het biedt ook verschillende tools voor modelaanpassing, gegevensvoorverwerking, modelselectie en evaluatie, en vele andere hulpmiddelen." + +In deze cursus gebruik je Scikit-learn en andere tools om machine learning-modellen te bouwen voor wat we 'traditionele machine learning'-taken noemen. We hebben bewust neurale netwerken en deep learning vermeden, omdat deze beter worden behandeld in ons komende 'AI voor Beginners'-curriculum. + +Scikit-learn maakt het eenvoudig om modellen te bouwen en te evalueren voor gebruik. Het richt zich voornamelijk op het gebruik van numerieke gegevens en bevat verschillende kant-en-klare datasets die kunnen worden gebruikt als leermiddelen. Het bevat ook vooraf gebouwde modellen die studenten kunnen proberen. Laten we het proces verkennen van het laden van vooraf verpakte gegevens en het gebruik van een ingebouwde estimator om een eerste ML-model te maken met Scikit-learn met enkele basisgegevens. + +## Oefening - je eerste Scikit-learn notebook + +> Deze tutorial is geïnspireerd door het [lineaire regressievoorbeeld](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) op de website van Scikit-learn. + +[![ML voor beginners - Je eerste lineaire regressieproject in Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML voor beginners - Je eerste lineaire regressieproject in Python") + +> 🎥 Klik op de afbeelding hierboven voor een korte video over deze oefening. + +In het bestand _notebook.ipynb_ dat bij deze les hoort, verwijder je alle cellen door op het 'prullenbak'-pictogram te drukken. + +In deze sectie werk je met een kleine dataset over diabetes die is ingebouwd in Scikit-learn voor leermiddelen. Stel je voor dat je een behandeling voor diabetespatiënten wilde testen. Machine learning-modellen kunnen je helpen bepalen welke patiënten beter op de behandeling zouden reageren, op basis van combinaties van variabelen. Zelfs een heel eenvoudig regressiemodel, wanneer gevisualiseerd, kan informatie tonen over variabelen die je zouden helpen je theoretische klinische proeven te organiseren. + +✅ Er zijn veel soorten regressiemethoden, en welke je kiest hangt af van het antwoord dat je zoekt. Als je de waarschijnlijke lengte van een persoon van een bepaalde leeftijd wilt voorspellen, gebruik je lineaire regressie, omdat je op zoek bent naar een **numerieke waarde**. Als je wilt ontdekken of een type keuken als veganistisch moet worden beschouwd, zoek je naar een **categorie-indeling**, dus gebruik je logistische regressie. Je leert later meer over logistische regressie. Denk eens na over enkele vragen die je aan gegevens kunt stellen, en welke van deze methoden meer geschikt zou zijn. + +Laten we aan de slag gaan met deze taak. + +### Bibliotheken importeren + +Voor deze taak importeren we enkele bibliotheken: + +- **matplotlib**. Dit is een handige [grafiektool](https://matplotlib.org/) en we zullen het gebruiken om een lijnplot te maken. +- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) is een handige bibliotheek voor het omgaan met numerieke gegevens in Python. +- **sklearn**. Dit is de [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) bibliotheek. + +Importeer enkele bibliotheken om je taken te ondersteunen. + +1. Voeg imports toe door de volgende code te typen: + + ```python + import matplotlib.pyplot as plt + import numpy as np + from sklearn import datasets, linear_model, model_selection + ``` + + Hierboven importeer je `matplotlib`, `numpy` en je importeert `datasets`, `linear_model` en `model_selection` van `sklearn`. `model_selection` wordt gebruikt voor het splitsen van gegevens in trainings- en testsets. + +### De diabetes-dataset + +De ingebouwde [diabetes-dataset](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) bevat 442 gegevensmonsters over diabetes, met 10 kenmerkvariabelen, waaronder: + +- leeftijd: leeftijd in jaren +- bmi: body mass index +- bp: gemiddelde bloeddruk +- s1 tc: T-cellen (een type witte bloedcellen) + +✅ Deze dataset bevat het concept 'geslacht' als een kenmerkvariabele die belangrijk is voor onderzoek naar diabetes. Veel medische datasets bevatten dit type binaire classificatie. Denk eens na over hoe categorisaties zoals deze bepaalde delen van de bevolking kunnen uitsluiten van behandelingen. + +Laad nu de X- en y-gegevens. + +> 🎓 Onthoud, dit is supervised learning, en we hebben een benoemde 'y'-doelvariabele nodig. + +In een nieuwe codecel laad je de diabetes-dataset door `load_diabetes()` aan te roepen. De input `return_X_y=True` geeft aan dat `X` een gegevensmatrix zal zijn en `y` de regressiedoelvariabele. + +1. Voeg enkele printopdrachten toe om de vorm van de gegevensmatrix en het eerste element ervan te tonen: + + ```python + X, y = datasets.load_diabetes(return_X_y=True) + print(X.shape) + print(X[0]) + ``` + + Wat je terugkrijgt als antwoord, is een tuple. Wat je doet, is de twee eerste waarden van de tuple toewijzen aan respectievelijk `X` en `y`. Leer meer [over tuples](https://wikipedia.org/wiki/Tuple). + + Je kunt zien dat deze gegevens 442 items bevatten, gevormd in arrays van 10 elementen: + + ```text + (442, 10) + [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 + -0.04340085 -0.00259226 0.01990842 -0.01764613] + ``` + + ✅ Denk eens na over de relatie tussen de gegevens en de regressiedoelvariabele. Lineaire regressie voorspelt relaties tussen kenmerk X en doelvariabele y. Kun je de [doelvariabele](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) voor de diabetes-dataset vinden in de documentatie? Wat demonstreert deze dataset, gezien die doelvariabele? + +2. Selecteer vervolgens een deel van deze dataset om te plotten door de 3e kolom van de dataset te selecteren. Je kunt dit doen door de `:`-operator te gebruiken om alle rijen te selecteren en vervolgens de 3e kolom te selecteren met behulp van de index (2). Je kunt de gegevens ook opnieuw vormgeven tot een 2D-array - zoals vereist voor het plotten - door `reshape(n_rows, n_columns)` te gebruiken. Als een van de parameters -1 is, wordt de overeenkomstige dimensie automatisch berekend. + + ```python + X = X[:, 2] + X = X.reshape((-1,1)) + ``` + + ✅ Print op elk moment de gegevens om de vorm ervan te controleren. + +3. Nu je gegevens klaar hebt om te plotten, kun je zien of een machine kan helpen een logische splitsing te bepalen tussen de cijfers in deze dataset. Om dit te doen, moet je zowel de gegevens (X) als de doelvariabele (y) splitsen in test- en trainingssets. Scikit-learn heeft een eenvoudige manier om dit te doen; je kunt je testgegevens op een bepaald punt splitsen. + + ```python + X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) + ``` + +4. Nu ben je klaar om je model te trainen! Laad het lineaire regressiemodel en train het met je X- en y-trainingssets met behulp van `model.fit()`: + + ```python + model = linear_model.LinearRegression() + model.fit(X_train, y_train) + ``` + + ✅ `model.fit()` is een functie die je vaak zult zien in ML-bibliotheken zoals TensorFlow. + +5. Maak vervolgens een voorspelling met behulp van testgegevens, met behulp van de functie `predict()`. Dit zal worden gebruikt om de lijn te tekenen tussen de gegevensgroepen. + + ```python + y_pred = model.predict(X_test) + ``` + +6. Nu is het tijd om de gegevens in een plot te tonen. Matplotlib is een zeer handig hulpmiddel voor deze taak. Maak een scatterplot van alle X- en y-testgegevens en gebruik de voorspelling om een lijn te tekenen op de meest geschikte plaats, tussen de gegevensgroepen van het model. + + ```python + plt.scatter(X_test, y_test, color='black') + plt.plot(X_test, y_pred, color='blue', linewidth=3) + plt.xlabel('Scaled BMIs') + plt.ylabel('Disease Progression') + plt.title('A Graph Plot Showing Diabetes Progression Against BMI') + plt.show() + ``` + + ![een scatterplot die datapunten rond diabetes toont](../../../../2-Regression/1-Tools/images/scatterplot.png) +✅ Denk eens na over wat hier gebeurt. Een rechte lijn loopt door veel kleine datapunten, maar wat doet die precies? Kun je zien hoe je deze lijn zou moeten kunnen gebruiken om te voorspellen waar een nieuw, onbekend datapunt zou moeten passen in relatie tot de y-as van de plot? Probeer in woorden uit te leggen wat het praktische nut van dit model is. + +Gefeliciteerd, je hebt je eerste lineaire regressiemodel gebouwd, er een voorspelling mee gemaakt en deze weergegeven in een plot! + +--- +## 🚀Uitdaging + +Plot een andere variabele uit deze dataset. Tip: bewerk deze regel: `X = X[:,2]`. Gezien de target van deze dataset, wat kun je ontdekken over de progressie van diabetes als ziekte? +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Review & Zelfstudie + +In deze tutorial heb je gewerkt met eenvoudige lineaire regressie, in plaats van univariate of multivariate lineaire regressie. Lees wat meer over de verschillen tussen deze methoden, of bekijk [deze video](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef). + +Lees meer over het concept van regressie en denk na over wat voor soort vragen met deze techniek beantwoord kunnen worden. Volg [deze tutorial](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) om je begrip te verdiepen. + +## Opdracht + +[Een andere dataset](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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele 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/1-Tools/assignment.md b/translations/nl/2-Regression/1-Tools/assignment.md new file mode 100644 index 00000000..7746630e --- /dev/null +++ b/translations/nl/2-Regression/1-Tools/assignment.md @@ -0,0 +1,27 @@ + +# Regressie met Scikit-learn + +## Instructies + +Bekijk de [Linnerud dataset](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) in Scikit-learn. Deze dataset heeft meerdere [doelen](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset): 'Het bestaat uit drie oefenvariabelen (data) en drie fysiologische variabelen (doel) die zijn verzameld bij twintig middelbare mannen in een fitnessclub'. + +Beschrijf in je eigen woorden hoe je een regressiemodel kunt maken dat de relatie weergeeft tussen de tailleomvang en het aantal uitgevoerde sit-ups. Doe hetzelfde voor de andere gegevenspunten in deze dataset. + +## Rubriek + +| Criteria | Uitmuntend | Voldoende | Verbetering nodig | +| ------------------------------ | ----------------------------------- | ----------------------------- | -------------------------- | +| Een beschrijvende paragraaf indienen | Een goed geschreven paragraaf wordt ingediend | Een paar zinnen worden ingediend | Geen beschrijving wordt geleverd | + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele 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/1-Tools/solution/Julia/README.md b/translations/nl/2-Regression/1-Tools/solution/Julia/README.md new file mode 100644 index 00000000..b3297925 --- /dev/null +++ b/translations/nl/2-Regression/1-Tools/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele 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/2-Data/README.md b/translations/nl/2-Regression/2-Data/README.md new file mode 100644 index 00000000..008a5e33 --- /dev/null +++ b/translations/nl/2-Regression/2-Data/README.md @@ -0,0 +1,226 @@ + +# Bouw een regressiemodel met Scikit-learn: data voorbereiden en visualiseren + +![Infographic over datavisualisatie](../../../../2-Regression/2-Data/images/data-visualization.png) + +Infographic door [Dasani Madipalli](https://twitter.com/dasani_decoded) + +## [Quiz voorafgaand aan de les](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Deze les is beschikbaar in R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html) + +## Introductie + +Nu je beschikt over de tools die je nodig hebt om te beginnen met het bouwen van machine learning-modellen met Scikit-learn, ben je klaar om vragen te stellen over je data. Het is erg belangrijk om te leren hoe je de juiste vragen stelt om de mogelijkheden van je dataset optimaal te benutten. + +In deze les leer je: + +- Hoe je je data voorbereidt voor het bouwen van modellen. +- Hoe je Matplotlib gebruikt voor datavisualisatie. + +## De juiste vraag stellen over je data + +De vraag die je wilt beantwoorden, bepaalt welk type ML-algoritme je zult gebruiken. De kwaliteit van het antwoord dat je terugkrijgt, hangt sterk af van de aard van je data. + +Bekijk de [data](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) die voor deze les is verstrekt. Je kunt dit .csv-bestand openen in VS Code. Een snelle blik laat meteen zien dat er lege velden zijn en een mix van tekst en numerieke data. Er is ook een vreemde kolom genaamd 'Package' waarin de data varieert tussen 'sacks', 'bins' en andere waarden. De data is eigenlijk een beetje rommelig. + +[![ML voor beginners - Hoe een dataset analyseren en opschonen](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML voor beginners - Hoe een dataset analyseren en opschonen") + +> 🎥 Klik op de afbeelding hierboven voor een korte video over het voorbereiden van de data voor deze les. + +Het is eigenlijk niet gebruikelijk om een dataset te krijgen die volledig klaar is om direct een ML-model mee te maken. In deze les leer je hoe je een ruwe dataset voorbereidt met standaard Python-bibliotheken. Je leert ook verschillende technieken om de data te visualiseren. + +## Casestudy: 'de pompoenmarkt' + +In deze map vind je een .csv-bestand in de root `data`-map genaamd [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv), dat 1757 regels data bevat over de pompoenmarkt, gegroepeerd per stad. Dit is ruwe data afkomstig van de [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) van het Amerikaanse ministerie van Landbouw. + +### Data voorbereiden + +Deze data is openbaar beschikbaar. Het kan worden gedownload in veel afzonderlijke bestanden, per stad, van de USDA-website. Om te voorkomen dat er te veel afzonderlijke bestanden zijn, hebben we alle stadsdata samengevoegd in één spreadsheet. We hebben de data dus al een beetje _voorbereid_. Laten we nu eens beter naar de data kijken. + +### De pompoendata - eerste conclusies + +Wat valt je op aan deze data? Je hebt al gezien dat er een mix is van tekst, cijfers, lege velden en vreemde waarden die je moet interpreteren. + +Welke vraag kun je stellen over deze data, met behulp van een regressietechniek? Wat dacht je van "Voorspel de prijs van een pompoen die te koop is in een bepaalde maand". Als je opnieuw naar de data kijkt, zijn er enkele wijzigingen die je moet aanbrengen om de datastructuur te creëren die nodig is voor deze taak. + +## Oefening - analyseer de pompoendata + +Laten we [Pandas](https://pandas.pydata.org/) gebruiken (de naam staat voor `Python Data Analysis`), een zeer handige tool voor het vormgeven van data, om deze pompoendata te analyseren en voor te bereiden. + +### Eerst, controleer op ontbrekende datums + +Je moet eerst stappen ondernemen om te controleren op ontbrekende datums: + +1. Converteer de datums naar een maandformaat (dit zijn Amerikaanse datums, dus het formaat is `MM/DD/YYYY`). +2. Haal de maand uit de datum en plaats deze in een nieuwe kolom. + +Open het _notebook.ipynb_-bestand in Visual Studio Code en importeer de spreadsheet in een nieuwe Pandas-dataframe. + +1. Gebruik de functie `head()` om de eerste vijf rijen te bekijken. + + ```python + import pandas as pd + pumpkins = pd.read_csv('../data/US-pumpkins.csv') + pumpkins.head() + ``` + + ✅ Welke functie zou je gebruiken om de laatste vijf rijen te bekijken? + +1. Controleer of er ontbrekende data is in de huidige dataframe: + + ```python + pumpkins.isnull().sum() + ``` + + Er is ontbrekende data, maar misschien maakt dat niet uit voor de taak. + +1. Om je dataframe gemakkelijker te maken om mee te werken, selecteer je alleen de kolommen die je nodig hebt, met behulp van de `loc`-functie. Deze functie haalt een groep rijen (eerste parameter) en kolommen (tweede parameter) uit de originele dataframe. De uitdrukking `:` hieronder betekent "alle rijen". + + ```python + columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] + pumpkins = pumpkins.loc[:, columns_to_select] + ``` + +### Vervolgens, bepaal de gemiddelde prijs van een pompoen + +Denk na over hoe je de gemiddelde prijs van een pompoen in een bepaalde maand kunt bepalen. Welke kolommen zou je kiezen voor deze taak? Hint: je hebt 3 kolommen nodig. + +Oplossing: neem het gemiddelde van de kolommen `Low Price` en `High Price` om de nieuwe kolom Price te vullen, en converteer de kolom Date zodat deze alleen de maand toont. Gelukkig is er volgens de bovenstaande controle geen ontbrekende data voor datums of prijzen. + +1. Om het gemiddelde te berekenen, voeg je de volgende code toe: + + ```python + price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 + + month = pd.DatetimeIndex(pumpkins['Date']).month + + ``` + + ✅ Voel je vrij om data te printen die je wilt controleren met `print(month)`. + +2. Kopieer nu je geconverteerde data naar een nieuwe Pandas-dataframe: + + ```python + new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) + ``` + + Als je je dataframe print, zie je een schone, overzichtelijke dataset waarop je je nieuwe regressiemodel kunt bouwen. + +### Maar wacht! Er is iets vreemds hier + +Als je naar de kolom `Package` kijkt, zie je dat pompoenen in veel verschillende configuraties worden verkocht. Sommige worden verkocht in '1 1/9 bushel'-maten, andere in '1/2 bushel'-maten, sommige per pompoen, sommige per pond, en sommige in grote dozen met verschillende breedtes. + +> Pompoenen lijken erg moeilijk consistent te wegen + +Als je in de originele data duikt, is het interessant dat alles met `Unit of Sale` gelijk aan 'EACH' of 'PER BIN' ook een `Package`-type heeft per inch, per bin, of 'each'. Pompoenen lijken erg moeilijk consistent te wegen, dus laten we ze filteren door alleen pompoenen te selecteren met de string 'bushel' in hun `Package`-kolom. + +1. Voeg een filter toe bovenaan het bestand, onder de initiële .csv-import: + + ```python + pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] + ``` + + Als je de data nu print, zie je dat je alleen de ongeveer 415 rijen data krijgt die pompoenen per bushel bevatten. + +### Maar wacht! Er is nog iets dat je moet doen + +Heb je gemerkt dat de bushelhoeveelheid varieert per rij? Je moet de prijzen normaliseren zodat je de prijs per bushel toont. Doe wat wiskunde om dit te standaardiseren. + +1. Voeg deze regels toe na het blok dat de nieuwe_pumpkins dataframe maakt: + + ```python + new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) + + new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2) + ``` + +✅ Volgens [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) hangt het gewicht van een bushel af van het type product, omdat het een volumemeting is. "Een bushel tomaten, bijvoorbeeld, zou 56 pond moeten wegen... Bladeren en groenten nemen meer ruimte in met minder gewicht, dus een bushel spinazie weegt slechts 20 pond." Het is allemaal behoorlijk ingewikkeld! Laten we ons niet druk maken over het maken van een bushel-naar-pond-conversie, en in plaats daarvan prijzen per bushel. Al deze studie van bushels pompoenen laat echter zien hoe belangrijk het is om de aard van je data te begrijpen! + +Nu kun je de prijs per eenheid analyseren op basis van hun bushelmeting. Als je de data nog een keer print, zie je hoe het is gestandaardiseerd. + +✅ Heb je gemerkt dat pompoenen die per halve bushel worden verkocht erg duur zijn? Kun je achterhalen waarom? Hint: kleine pompoenen zijn veel duurder dan grote, waarschijnlijk omdat er veel meer van zijn per bushel, gezien de ongebruikte ruimte die wordt ingenomen door één grote holle taartpompoen. + +## Visualisatiestrategieën + +Een deel van de rol van een datawetenschapper is om de kwaliteit en aard van de data waarmee ze werken te demonstreren. Om dit te doen, maken ze vaak interessante visualisaties, zoals grafieken, diagrammen en plots, die verschillende aspecten van de data laten zien. Op deze manier kunnen ze visueel relaties en hiaten tonen die anders moeilijk te ontdekken zijn. + +[![ML voor beginners - Hoe data visualiseren met Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML voor beginners - Hoe data visualiseren met Matplotlib") + +> 🎥 Klik op de afbeelding hierboven voor een korte video over het visualiseren van de data voor deze les. + +Visualisaties kunnen ook helpen bij het bepalen van de meest geschikte machine learning-techniek voor de data. Een scatterplot die een lijn lijkt te volgen, geeft bijvoorbeeld aan dat de data een goede kandidaat is voor een lineaire regressieoefening. + +Een datavisualisatiebibliotheek die goed werkt in Jupyter-notebooks is [Matplotlib](https://matplotlib.org/) (die je ook in de vorige les hebt gezien). + +> Krijg meer ervaring met datavisualisatie in [deze tutorials](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott). + +## Oefening - experimenteren met Matplotlib + +Probeer enkele basisplots te maken om de nieuwe dataframe die je net hebt gemaakt weer te geven. Wat zou een eenvoudige lijnplot laten zien? + +1. Importeer Matplotlib bovenaan het bestand, onder de Pandas-import: + + ```python + import matplotlib.pyplot as plt + ``` + +1. Voer het hele notebook opnieuw uit om te verversen. +1. Voeg onderaan het notebook een cel toe om de data als een boxplot weer te geven: + + ```python + price = new_pumpkins.Price + month = new_pumpkins.Month + plt.scatter(price, month) + plt.show() + ``` + + ![Een scatterplot die de relatie tussen prijs en maand toont](../../../../2-Regression/2-Data/images/scatterplot.png) + + Is dit een nuttige plot? Verrast iets je eraan? + + Het is niet bijzonder nuttig, omdat het alleen je data als een spreiding van punten in een bepaalde maand weergeeft. + +### Maak het nuttig + +Om grafieken nuttige data te laten weergeven, moet je de data meestal op een bepaalde manier groeperen. Laten we proberen een plot te maken waarbij de y-as de maanden toont en de data de verdeling van de data laat zien. + +1. Voeg een cel toe om een gegroepeerde staafdiagram te maken: + + ```python + new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') + plt.ylabel("Pumpkin Price") + ``` + + ![Een staafdiagram die de relatie tussen prijs en maand toont](../../../../2-Regression/2-Data/images/barchart.png) + + Dit is een nuttigere datavisualisatie! Het lijkt erop dat de hoogste prijs voor pompoenen in september en oktober voorkomt. Voldoet dat aan je verwachting? Waarom wel of niet? + +--- + +## 🚀Uitdaging + +Verken de verschillende soorten visualisaties die Matplotlib biedt. Welke soorten zijn het meest geschikt voor regressieproblemen? + +## [Quiz na de les](https://ff-quizzes.netlify.app/en/ml/) + +## Review & Zelfstudie + +Bekijk de vele manieren om data te visualiseren. Maak een lijst van de verschillende beschikbare bibliotheken en noteer welke het beste zijn voor bepaalde soorten taken, bijvoorbeeld 2D-visualisaties versus 3D-visualisaties. Wat ontdek je? + +## Opdracht + +[Visualisatie verkennen](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 zijn 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 diff --git a/translations/nl/2-Regression/2-Data/assignment.md b/translations/nl/2-Regression/2-Data/assignment.md new file mode 100644 index 00000000..e2c24f32 --- /dev/null +++ b/translations/nl/2-Regression/2-Data/assignment.md @@ -0,0 +1,22 @@ + +# Visualisaties Verkennen + +Er zijn verschillende bibliotheken beschikbaar voor datavisualisatie. Maak enkele visualisaties met behulp van de Pompoen-data in deze les met matplotlib en seaborn in een voorbeeldnotebook. Welke bibliotheken zijn gemakkelijker om mee te werken? +## Rubric + +| Criteria | Uitmuntend | Voldoende | Moet Verbeteren | +| -------- | ---------- | --------- | --------------- | +| | Een notebook wordt ingediend met twee verkenningen/visualisaties | Een notebook wordt ingediend met één verkenning/visualisatie | Er wordt geen notebook ingediend | + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele 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/2-Data/solution/Julia/README.md b/translations/nl/2-Regression/2-Data/solution/Julia/README.md new file mode 100644 index 00000000..22846847 --- /dev/null +++ b/translations/nl/2-Regression/2-Data/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Disclaimer**: +Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we ons best doen voor 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 diff --git a/translations/nl/2-Regression/3-Linear/README.md b/translations/nl/2-Regression/3-Linear/README.md new file mode 100644 index 00000000..1cb6dce4 --- /dev/null +++ b/translations/nl/2-Regression/3-Linear/README.md @@ -0,0 +1,380 @@ + +# Bouw een regressiemodel met Scikit-learn: regressie op vier manieren + +![Lineaire vs polynomiale regressie infographic](../../../../2-Regression/3-Linear/images/linear-polynomial.png) +> Infographic door [Dasani Madipalli](https://twitter.com/dasani_decoded) +## [Quiz voorafgaand aan de les](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Deze les is beschikbaar in R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) +### Introductie + +Tot nu toe heb je onderzocht wat regressie is met voorbeeldgegevens uit de dataset over pompoenprijzen die we gedurende deze les zullen gebruiken. Je hebt het ook gevisualiseerd met behulp van Matplotlib. + +Nu ben je klaar om dieper in te gaan op regressie voor machine learning. Hoewel visualisatie je helpt om gegevens te begrijpen, komt de echte kracht van machine learning voort uit _het trainen van modellen_. Modellen worden getraind op historische gegevens om automatisch afhankelijkheden in gegevens vast te leggen, en ze stellen je in staat om uitkomsten te voorspellen voor nieuwe gegevens die het model nog niet eerder heeft gezien. + +In deze les leer je meer over twee soorten regressie: _basis lineaire regressie_ en _polynomiale regressie_, samen met enkele wiskundige principes die aan deze technieken ten grondslag liggen. Met deze modellen kunnen we pompoenprijzen voorspellen op basis van verschillende invoergegevens. + +[![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. + +> Door deze hele cursus gaan we uit van minimale wiskundige kennis en proberen we het toegankelijk te maken voor studenten uit andere vakgebieden. Let daarom op notities, 🧮 oproepen, diagrammen en andere leermiddelen om het begrip te vergemakkelijken. + +### Vereisten + +Je zou inmiddels bekend moeten zijn met de structuur van de pompoengegevens die we onderzoeken. Je kunt deze gegevens vooraf geladen en schoongemaakt vinden in het _notebook.ipynb_-bestand van deze les. In het bestand wordt de pompoenprijs per bushel weergegeven in een nieuwe data frame. Zorg ervoor dat je deze notebooks kunt uitvoeren in kernels in Visual Studio Code. + +### Voorbereiding + +Ter herinnering: je laadt deze gegevens in om er vragen over te stellen. + +- Wanneer is de beste tijd om pompoenen te kopen? +- Welke prijs kan ik verwachten voor een doos miniatuurpompoenen? +- Moet ik ze kopen in halve bushelmanden of in een 1 1/9 busheldoos? +Laten we verder graven in deze gegevens. + +In de vorige les heb je een Pandas data frame gemaakt en gevuld met een deel van de oorspronkelijke dataset, waarbij je de prijzen standaardiseerde per bushel. Door dat te doen, kon je echter slechts ongeveer 400 datapunten verzamelen en alleen voor de herfstmaanden. + +Bekijk de gegevens die we vooraf hebben geladen in het notebook dat bij deze les hoort. De gegevens zijn vooraf geladen en een eerste spreidingsdiagram is gemaakt om maandgegevens te tonen. Misschien kunnen we iets meer detail krijgen over de aard van de gegevens door ze verder te schonen. + +## Een lineaire regressielijn + +Zoals je hebt geleerd in Les 1, is het doel van een lineaire regressieoefening om een lijn te kunnen plotten om: + +- **Variabele relaties te tonen**. De relatie tussen variabelen te tonen +- **Voorspellingen te maken**. Nauwkeurige voorspellingen te maken over waar een nieuw datapunt zou vallen in relatie tot die lijn. + +Het is typisch voor **Least-Squares Regression** om dit type lijn te tekenen. De term 'least-squares' betekent dat alle datapunten rondom de regressielijn worden gekwadrateerd en vervolgens opgeteld. Idealiter is die uiteindelijke som zo klein mogelijk, omdat we een laag aantal fouten willen, of `least-squares`. + +We doen dit omdat we een lijn willen modelleren die de minste cumulatieve afstand heeft tot al onze datapunten. We kwadrateren de termen voordat we ze optellen, omdat we ons bezighouden met de grootte ervan en niet met de richting. + +> **🧮 Laat me de wiskunde zien** +> +> Deze lijn, de _lijn van beste fit_, 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 met de y-as, wat verwijst naar de waarde van `Y` wanneer `X = 0`. +> +>![bereken de helling](../../../../2-Regression/3-Linear/images/slope.png) +> +> Bereken eerst de helling `b`. Infographic door [Jen Looper](https://twitter.com/jenlooper) +> +> Met andere woorden, en verwijzend naar de oorspronkelijke vraag over pompoengegevens: "voorspel de prijs van een pompoen per bushel per maand", zou `X` verwijzen naar de prijs en `Y` naar de verkoopmaand. +> +>![voltooi de vergelijking](../../../../2-Regression/3-Linear/images/calculation.png) +> +> 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 snijpunt, of waar `Y` zich bevindt wanneer `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 Least-squares calculator](https://www.mathsisfun.com/data/least-squares-calculator.html) om te zien hoe de waarden van de getallen de lijn beïnvloeden. + +## Correlatie + +Een andere term om te begrijpen is de **correlatiecoëfficiënt** tussen gegeven X- en Y-variabelen. Met een spreidingsdiagram kun je deze coëfficiënt snel visualiseren. Een diagram met datapunten die netjes in een lijn liggen, heeft een hoge correlatie, maar een diagram met datapunten die overal tussen X en Y verspreid zijn, heeft een lage correlatie. + +Een goed lineair regressiemodel is er een met een hoge (dichter bij 1 dan bij 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 het spreidingsdiagram van Maand naar Prijs. Lijkt de data die Maand aan Prijs koppelt voor pompoenverkopen een hoge of lage correlatie te hebben, volgens jouw visuele interpretatie van het spreidingsdiagram? Verandert dat als je een meer verfijnde maatstaf gebruikt in plaats van `Maand`, bijvoorbeeld *dag van het jaar* (d.w.z. aantal dagen sinds het begin van het jaar)? + +In de onderstaande code gaan we ervan uit dat we de gegevens hebben opgeschoond en een data frame hebben verkregen genaamd `new_pumpkins`, vergelijkbaar met het volgende: + +ID | Maand | DagVanJaar | Soort | Stad | Verpakking | Lage Prijs | Hoge Prijs | Prijs +---|-------|------------|-------|------|------------|------------|------------|------ +70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel dozen | 15.0 | 15.0 | 13.636364 +71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel dozen | 18.0 | 18.0 | 16.363636 +72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel dozen | 18.0 | 18.0 | 16.363636 +73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel dozen | 17.0 | 17.0 | 15.454545 +74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel dozen | 15.0 | 15.0 | 13.636364 + +> De code om de gegevens te schonen is beschikbaar in [`notebook.ipynb`](../../../../2-Regression/3-Linear/notebook.ipynb). We hebben dezelfde schoonmaakstappen uitgevoerd als in de vorige les en hebben de kolom `DagVanJaar` berekend met behulp van de volgende expressie: + +```python +day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) +``` + +Nu je een begrip hebt van de wiskunde achter lineaire regressie, laten we een regressiemodel maken om te zien of we kunnen voorspellen welk pakket pompoenen de beste pompoenprijzen zal hebben. Iemand die pompoenen koopt voor een feestelijke pompoenveld wil deze informatie misschien om zijn aankopen van pompoenpakketten voor het veld te optimaliseren. + +## Op zoek naar correlatie + +[![ML voor beginners - Op zoek naar correlatie: De sleutel tot lineaire regressie](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML voor beginners - Op zoek naar correlatie: De sleutel tot lineaire regressie") + +> 🎥 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 als volgt 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`, of tussen `DagVanJaar` en `Prijs` te voorspellen. Hier is het spreidingsdiagram dat de laatste relatie toont: + +Spreidingsdiagram van Prijs vs. Dag van het Jaar + +Laten we kijken of er een correlatie is met behulp van de `corr`-functie: + +```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 `DagVanJaar`, maar er kan een andere belangrijke relatie zijn. Het lijkt erop dat er verschillende clusters van prijzen zijn die overeenkomen met verschillende pompoensoorten. Om deze hypothese te bevestigen, laten we elke pompoencategorie plotten met een andere kleur. Door een `ax`-parameter door te geven aan de `scatter`-plotfunctie kunnen we alle punten op hetzelfde diagram plotten: + +```python +ax=None +colors = ['red','blue','green','yellow'] +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) +``` + +Spreidingsdiagram van Prijs vs. Dag van het Jaar + +Ons onderzoek suggereert dat de soort meer invloed heeft op de totale 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 vs soort + +Laten we ons voorlopig alleen richten op één pompoensoort, de 'pie type', en kijken welk effect de datum heeft op de prijs: + +```python +pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] +pie_pumpkins.plot.scatter('DayOfYear','Price') +``` +Spreidingsdiagram van Prijs vs. Dag van het Jaar + +Als we nu de correlatie tussen `Prijs` en `DagVanJaar` berekenen met behulp van de `corr`-functie, krijgen we iets als `-0.27` - wat betekent dat het trainen van een voorspellend model zinvol is. + +> Voordat je een lineair regressiemodel traint, is het belangrijk om ervoor te zorgen dat onze gegevens schoon zijn. Lineaire regressie werkt niet goed met ontbrekende waarden, dus het is logisch om alle lege cellen te verwijderen: + +```python +pie_pumpkins.dropna(inplace=True) +pie_pumpkins.info() +``` + +Een andere aanpak zou zijn om die lege waarden in te vullen met gemiddelde waarden uit de corresponderende kolom. + +## Eenvoudige lineaire regressie + +[![ML voor beginners - Lineaire en polynomiale regressie met Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML voor beginners - Lineaire en polynomiale regressie met Scikit-learn") + +> 🎥 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. + +```python +from sklearn.linear_model import LinearRegression +from sklearn.metrics import mean_squared_error +from sklearn.model_selection import train_test_split +``` + +We beginnen met het scheiden van invoerwaarden (features) en de verwachte output (label) in afzonderlijke numpy-arrays: + +```python +X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) +y = pie_pumpkins['Price'] +``` + +> Merk op dat we `reshape` moesten uitvoeren op de invoergegevens zodat het lineaire regressiepakket ze correct begrijpt. Lineaire regressie verwacht een 2D-array als invoer, waarbij elke rij van de array overeenkomt met een vector van invoerfeatures. In ons geval, aangezien we slechts één invoer hebben, hebben we een array nodig met vorm N×1, waarbij N de datasetgrootte is. + +Vervolgens moeten we de gegevens splitsen in trainings- en testdatasets, zodat we ons model na training kunnen valideren: + +```python +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) +``` + +Het trainen van het daadwerkelijke lineaire regressiemodel kost uiteindelijk slechts twee regels code. We definiëren het `LinearRegression`-object en passen het aan onze gegevens aan met de `fit`-methode: + +```python +lin_reg = LinearRegression() +lin_reg.fit(X_train,y_train) +``` + +Het `LinearRegression`-object bevat na het toepassen van `fit` 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 de prijzen met de tijd lijken te dalen, maar niet veel, ongeveer 2 cent per dag. We kunnen ook het snijpunt van de regressie met de Y-as benaderen met `lin_reg.intercept_` - dit zal ongeveer `21` zijn in ons geval, 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 behulp van de mean square error (MSE)-metriek, die het gemiddelde is van alle gekwadrateerde verschillen tussen de verwachte en voorspelde waarde. + +```python +pred = lin_reg.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}%)') +``` +Onze fout lijkt te liggen rond 2 punten, wat ongeveer 17% is. Niet al te goed. Een andere indicator van modelkwaliteit is de **coëfficiënt van determinatie**, die als volgt 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 invoergegevens en fungeert als de *slechtste lineaire voorspeller*, wat simpelweg een gemiddelde waarde van het resultaat is. De waarde 1 betekent dat we alle verwachte uitkomsten perfect kunnen voorspellen. In ons geval is de coëfficiënt ongeveer 0,06, wat vrij laag is. + +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 + +## Polynomiale Regressie + +Een ander type lineaire regressie is polynomiale regressie. Hoewel er soms een lineaire relatie is tussen variabelen - hoe groter de pompoen in volume, hoe hoger de prijs - kunnen deze relaties soms niet worden weergegeven als een vlak of rechte lijn. + +✅ Hier zijn [enkele voorbeelden](https://online.stat.psu.edu/stat501/lesson/9/9.8) van gegevens die polynomiale regressie kunnen gebruiken + +Bekijk de relatie tussen Datum en Prijs nog eens. Lijkt deze scatterplot noodzakelijkerwijs te moeten worden geanalyseerd met een rechte lijn? Kunnen prijzen niet fluctueren? In dit geval kun je polynomiale regressie proberen. + +✅ Polynomen zijn wiskundige uitdrukkingen die kunnen bestaan uit één of meer variabelen en coëfficiënten + +Polynomiale regressie creëert een gebogen lijn om niet-lineaire gegevens beter te passen. In ons geval, als we een kwadratische `DayOfYear`-variabele toevoegen aan de invoergegevens, zouden we onze gegevens moeten kunnen passen met een parabool, 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 gegevensverwerking samen te voegen. Een **pipeline** is een keten van **schatters**. In ons geval zullen we een pipeline maken die eerst polynomiale kenmerken toevoegt aan ons model en vervolgens de regressie traint: + +```python +from sklearn.preprocessing import PolynomialFeatures +from sklearn.pipeline import make_pipeline + +pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) + +pipeline.fit(X_train,y_train) +``` + +Het gebruik van `PolynomialFeatures(2)` betekent dat we alle tweedegraads polynomen uit de invoergegevens zullen opnemen. In ons geval betekent dit gewoon `DayOfYear`2, maar gegeven twee invoervariabelen X en Y, zal dit X2, XY en Y2 toevoegen. We kunnen ook polynomen van hogere graden gebruiken als we dat willen. + +Pipelines kunnen op dezelfde manier worden gebruikt als het oorspronkelijke `LinearRegression`-object, d.w.z. we kunnen de pipeline `fitten` en vervolgens `predict` gebruiken om de voorspelde resultaten te krijgen. Hier is de grafiek die testgegevens en de benaderingscurve toont: + +Polynomiale regressie + +Met polynomiale regressie kunnen we een iets lagere MSE en hogere determinatie krijgen, maar niet significant. We moeten rekening houden met andere kenmerken! + +> Je kunt zien dat de minimale pompoenprijzen ergens rond Halloween worden waargenomen. Hoe kun je dit verklaren? + +🎃 Gefeliciteerd, je hebt zojuist een model gemaakt dat kan helpen de prijs van taartpompoenen te voorspellen. Je kunt waarschijnlijk dezelfde procedure herhalen voor alle pompoensoorten, maar dat zou tijdrovend zijn. Laten we nu leren hoe we pompoenvariëteiten in ons model kunnen opnemen! + +## Categorische Kenmerken + +In een ideale wereld willen we prijzen voor verschillende pompoenvariëteiten kunnen voorspellen met hetzelfde model. De kolom `Variety` is echter enigszins anders dan kolommen zoals `Month`, omdat deze niet-numerieke waarden bevat. Dergelijke kolommen worden **categorisch** genoemd. + +[![ML voor beginners - Categorische Kenmerken Voorspellingen met Lineaire Regressie](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML voor beginners - Categorische Kenmerken Voorspellingen met Lineaire Regressie") + +> 🎥 Klik op de afbeelding hierboven voor een korte video-overzicht van het gebruik van categorische kenmerken. + +Hier kun je zien hoe de gemiddelde prijs afhankelijk is van de variëteit: + +Gemiddelde prijs per variëteit + +Om rekening te houden met variëteit, moeten we deze eerst omzetten naar numerieke vorm, of **coderen**. Er zijn verschillende manieren waarop we dit kunnen doen: + +* Eenvoudige **numerieke codering** zal een tabel maken van verschillende variëteiten en vervolgens de variëteitsnaam vervangen door een index in die tabel. Dit is niet de beste optie voor lineaire regressie, omdat lineaire regressie de werkelijke numerieke waarde van de index neemt en deze 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 ervoor zorgen dat indices op een specifieke manier worden gerangschikt. +* **One-hot encoding** zal de kolom `Variety` vervangen door 4 verschillende kolommen, één voor elke variëteit. Elke kolom bevat `1` als de corresponderende rij van een bepaalde variëteit is, en `0` anders. Dit betekent dat er vier coëfficiënten zullen zijn in lineaire regressie, één voor elke pompoenvariëteit, verantwoordelijk voor de "startprijs" (of eerder "extra prijs") voor die specifieke variëteit. + +De onderstaande code laat zien hoe we een variëteit kunnen one-hot encoden: + +```python +pd.get_dummies(new_pumpkins['Variety']) +``` + + ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE +----|-----------|-----------|--------------------------|---------- +70 | 0 | 0 | 0 | 1 +71 | 0 | 0 | 0 | 1 +... | ... | ... | ... | ... +1738 | 0 | 1 | 0 | 0 +1739 | 0 | 1 | 0 | 0 +1740 | 0 | 1 | 0 | 0 +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 alleen de `X`- en `y`-gegevens 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 hierboven hebben gebruikt om lineaire regressie te trainen. Als je het probeert, zul je zien dat de gemiddelde kwadratische fout 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 in rekening brengen, evenals numerieke kenmerken zoals `Month` of `DayOfYear`. Om één grote array van kenmerken te krijgen, kunnen we `join` gebruiken: + +```python +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'] +``` + +Hier nemen we ook `City` en `Package` type in rekening, wat ons een MSE van 2,84 (10%) en een determinatie van 0,94 geeft! + +## Alles samenvoegen + +Om het beste model te maken, kunnen we gecombineerde (one-hot encoded categorische + numerieke) gegevens uit het bovenstaande voorbeeld gebruiken samen met polynomiale regressie. Hier is de volledige code voor je gemak: + +```python +# set up training data +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'] + +# make train-test split +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + +# setup and train the pipeline +pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) +pipeline.fit(X_train,y_train) + +# predict results for test data +pred = pipeline.predict(X_test) + +# calculate MSE and determination +mse = np.sqrt(mean_squared_error(y_test,pred)) +print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') + +score = pipeline.score(X_train,y_train) +print('Model determination: ', score) +``` + +Dit zou ons de beste determinatiecoëfficiënt van bijna 97% moeten geven, en MSE=2,23 (~8% voorspellingsfout). + +| Model | MSE | Determinatie | +|-------|-----|---------------| +| `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 | + +🏆 Goed gedaan! Je hebt vier regressiemodellen gemaakt in één les en de modelkwaliteit verbeterd tot 97%. In het laatste deel 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. + +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Review & Zelfstudie + +In deze les hebben we geleerd 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) + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele 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/assignment.md b/translations/nl/2-Regression/3-Linear/assignment.md new file mode 100644 index 00000000..9a722b36 --- /dev/null +++ b/translations/nl/2-Regression/3-Linear/assignment.md @@ -0,0 +1,25 @@ + +# Maak een Regressiemodel + +## Instructies + +In deze les is uitgelegd hoe je een model kunt bouwen met zowel Lineaire als Polynomiale Regressie. Gebruik deze kennis om een dataset te vinden of gebruik een van de ingebouwde sets van Scikit-learn om een nieuw model te bouwen. Leg in je notebook uit waarom je de gekozen techniek hebt gebruikt en toon de nauwkeurigheid van je model. Als het model niet nauwkeurig is, leg dan uit waarom. + +## Rubriek + +| Criteria | Uitzonderlijk | Voldoende | Moet Verbeterd Worden | +| -------- | ------------------------------------------------------------ | -------------------------- | ------------------------------- | +| | presenteert een compleet notebook met een goed gedocumenteerde oplossing | de oplossing is incompleet | de oplossing is gebrekkig of bevat fouten | + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele 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/Julia/README.md b/translations/nl/2-Regression/3-Linear/solution/Julia/README.md new file mode 100644 index 00000000..55e6bf52 --- /dev/null +++ b/translations/nl/2-Regression/3-Linear/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor kritieke informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele 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/4-Logistic/README.md b/translations/nl/2-Regression/4-Logistic/README.md new file mode 100644 index 00000000..b43e46fc --- /dev/null +++ b/translations/nl/2-Regression/4-Logistic/README.md @@ -0,0 +1,412 @@ + +# Logistische regressie om categorieën te voorspellen + +![Logistische vs. lineaire regressie infographic](../../../../2-Regression/4-Logistic/images/linear-vs-logistic.png) + +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Deze les is beschikbaar in R!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html) + +## Introductie + +In deze laatste les over regressie, een van de basis _klassieke_ ML-technieken, gaan we Logistische Regressie bekijken. Je gebruikt deze techniek om patronen te ontdekken en binaire categorieën te voorspellen. Is dit snoep chocolade of niet? Is deze ziekte besmettelijk of niet? Zal deze klant dit product kiezen of niet? + +In deze les leer je: + +- Een nieuwe bibliotheek voor datavisualisatie +- Technieken voor logistische regressie + +✅ Verdiep je begrip van het werken met dit type regressie in deze [Learn module](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) + +## Vereisten + +Na gewerkt te hebben met de pompoendata, zijn we nu voldoende bekend met de dataset om te beseffen dat er één binaire categorie is waarmee we kunnen werken: `Color`. + +Laten we een logistisch regressiemodel bouwen om te voorspellen, gegeven enkele variabelen, _welke kleur een bepaalde pompoen waarschijnlijk zal hebben_ (oranje 🎃 of wit 👻). + +> Waarom bespreken we binaire classificatie in een lesgroep over regressie? Alleen om taalkundige redenen, aangezien logistische regressie [eigenlijk een classificatiemethode](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression) is, zij het een lineaire. Leer meer over andere manieren om data te classificeren in de volgende lesgroep. + +## Definieer de vraag + +Voor onze doeleinden zullen we dit uitdrukken als een binair: 'Wit' of 'Niet Wit'. Er is ook een 'gestreepte' categorie in onze dataset, maar er zijn weinig gevallen van, dus we zullen deze niet gebruiken. Het verdwijnt sowieso zodra we null-waarden uit de dataset verwijderen. + +> 🎃 Leuk weetje: we noemen witte pompoenen soms 'spookpompoenen'. Ze zijn niet erg gemakkelijk te snijden, dus ze zijn niet zo populair als de oranje, maar ze zien er wel cool uit! We zouden onze vraag dus ook kunnen herformuleren als: 'Spook' of 'Niet Spook'. 👻 + +## Over logistische regressie + +Logistische regressie verschilt op een aantal belangrijke manieren van lineaire regressie, die je eerder hebt geleerd. + +[![ML voor beginners - Begrijp logistische regressie voor machine learning classificatie](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "ML voor beginners - Begrijp logistische regressie voor machine learning classificatie") + +> 🎥 Klik op de afbeelding hierboven voor een korte video-overzicht van logistische regressie. + +### Binaire classificatie + +Logistische regressie biedt niet dezelfde functies als lineaire regressie. De eerste biedt een voorspelling over een binaire categorie ("wit of niet wit"), terwijl de laatste in staat is om continue waarden te voorspellen, bijvoorbeeld gegeven de oorsprong van een pompoen en de oogsttijd, _hoeveel de prijs zal stijgen_. + +![Pompoen classificatiemodel](../../../../2-Regression/4-Logistic/images/pumpkin-classifier.png) +> Infographic door [Dasani Madipalli](https://twitter.com/dasani_decoded) + +### Andere classificaties + +Er zijn andere soorten logistische regressie, waaronder multinomiaal en ordinaal: + +- **Multinomiaal**, waarbij er meer dan één categorie is - "Oranje, Wit en Gestreept". +- **Ordinaal**, waarbij geordende categorieën betrokken zijn, nuttig als we onze uitkomsten logisch willen ordenen, zoals onze pompoenen die zijn geordend op een eindig aantal maten (mini, sm, med, lg, xl, xxl). + +![Multinomiale vs ordinale regressie](../../../../2-Regression/4-Logistic/images/multinomial-vs-ordinal.png) + +### Variabelen hoeven NIET te correleren + +Weet je nog hoe lineaire regressie beter werkte met meer gecorreleerde variabelen? Logistische regressie is het tegenovergestelde - de variabelen hoeven niet te correleren. Dat werkt voor deze data, die enigszins zwakke correlaties heeft. + +### Je hebt veel schone data nodig + +Logistische regressie geeft nauwkeurigere resultaten als je meer data gebruikt; onze kleine dataset is niet optimaal voor deze taak, dus houd dat in gedachten. + +[![ML voor beginners - Data-analyse en voorbereiding voor logistische regressie](https://img.youtube.com/vi/B2X4H9vcXTs/0.jpg)](https://youtu.be/B2X4H9vcXTs "ML voor beginners - Data-analyse en voorbereiding voor logistische regressie") + +> 🎥 Klik op de afbeelding hierboven voor een korte video-overzicht van het voorbereiden van data voor lineaire regressie. + +✅ Denk na over de soorten data die zich goed lenen voor logistische regressie. + +## Oefening - maak de data schoon + +Maak eerst de data een beetje schoon door null-waarden te verwijderen en alleen enkele kolommen te selecteren: + +1. Voeg de volgende code toe: + + ```python + + columns_to_select = ['City Name','Package','Variety', 'Origin','Item Size', 'Color'] + pumpkins = full_pumpkins.loc[:, columns_to_select] + + pumpkins.dropna(inplace=True) + ``` + + Je kunt altijd een kijkje nemen in je nieuwe dataframe: + + ```python + pumpkins.info + ``` + +### Visualisatie - categorische plot + +Je hebt inmiddels het [starter notebook](../../../../2-Regression/4-Logistic/notebook.ipynb) geladen met pompoendata en deze schoongemaakt om een dataset te behouden met enkele variabelen, waaronder `Color`. Laten we de dataframe visualiseren in het notebook met een andere bibliotheek: [Seaborn](https://seaborn.pydata.org/index.html), die is gebouwd op Matplotlib, die we eerder hebben gebruikt. + +Seaborn biedt enkele handige manieren om je data te visualiseren. Je kunt bijvoorbeeld de verdelingen van de data vergelijken voor elke `Variety` en `Color` in een categorische plot. + +1. Maak zo'n plot door de functie `catplot` te gebruiken, met onze pompoendata `pumpkins`, en een kleurmapping te specificeren voor elke pompoencategorie (oranje of wit): + + ```python + import seaborn as sns + + palette = { + 'ORANGE': 'orange', + 'WHITE': 'wheat', + } + + sns.catplot( + data=pumpkins, y="Variety", hue="Color", kind="count", + palette=palette, + ) + ``` + + ![Een raster van gevisualiseerde data](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_1.png) + + Door de data te observeren, kun je zien hoe de Color-data zich verhoudt tot Variety. + + ✅ Gegeven deze categorische plot, welke interessante verkenningen kun je bedenken? + +### Data pre-processing: feature- en labelcodering + +Onze pompoendataset bevat stringwaarden voor al zijn kolommen. Werken met categorische data is intuïtief voor mensen, maar niet voor machines. Machine learning-algoritmen werken goed met cijfers. Daarom is codering een zeer belangrijke stap in de data pre-processing fase, omdat het ons in staat stelt categorische data om te zetten in numerieke data, zonder informatie te verliezen. Goede codering leidt tot het bouwen van een goed model. + +Voor feature-codering zijn er twee hoofdtypen encoders: + +1. Ordinale encoder: geschikt voor ordinale variabelen, die categorische variabelen zijn waarbij hun data een logische volgorde volgt, zoals de `Item Size`-kolom in onze dataset. Het creëert een mapping zodat elke categorie wordt weergegeven door een nummer, dat de volgorde van de categorie in de kolom is. + + ```python + from sklearn.preprocessing import OrdinalEncoder + + item_size_categories = [['sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo']] + ordinal_features = ['Item Size'] + ordinal_encoder = OrdinalEncoder(categories=item_size_categories) + ``` + +2. Categorische encoder: geschikt voor nominale variabelen, die categorische variabelen zijn waarbij hun data geen logische volgorde volgt, zoals alle features behalve `Item Size` in onze dataset. Het is een one-hot encoding, wat betekent dat elke categorie wordt weergegeven door een binaire kolom: de gecodeerde variabele is gelijk aan 1 als de pompoen tot die Variety behoort en anders 0. + + ```python + from sklearn.preprocessing import OneHotEncoder + + categorical_features = ['City Name', 'Package', 'Variety', 'Origin'] + categorical_encoder = OneHotEncoder(sparse_output=False) + ``` + +Daarna wordt `ColumnTransformer` gebruikt om meerdere encoders te combineren in één stap en deze toe te passen op de juiste kolommen. + +```python + from sklearn.compose import ColumnTransformer + + ct = ColumnTransformer(transformers=[ + ('ord', ordinal_encoder, ordinal_features), + ('cat', categorical_encoder, categorical_features) + ]) + + ct.set_output(transform='pandas') + encoded_features = ct.fit_transform(pumpkins) +``` + +Voor het coderen van het label gebruiken we de scikit-learn `LabelEncoder`-klasse, een hulpprogrammaklasse om labels te normaliseren zodat ze alleen waarden bevatten tussen 0 en n_classes-1 (hier, 0 en 1). + +```python + from sklearn.preprocessing import LabelEncoder + + label_encoder = LabelEncoder() + encoded_label = label_encoder.fit_transform(pumpkins['Color']) +``` + +Zodra we de features en het label hebben gecodeerd, kunnen we ze samenvoegen in een nieuwe dataframe `encoded_pumpkins`. + +```python + encoded_pumpkins = encoded_features.assign(Color=encoded_label) +``` + +✅ Wat zijn de voordelen van het gebruik van een ordinale encoder voor de `Item Size`-kolom? + +### Analyseer relaties tussen variabelen + +Nu we onze data hebben voorbewerkt, kunnen we de relaties tussen de features en het label analyseren om een idee te krijgen van hoe goed het model het label kan voorspellen op basis van de features. De beste manier om dit soort analyses uit te voeren is door de data te plotten. We gebruiken opnieuw de Seaborn `catplot`-functie om de relaties tussen `Item Size`, `Variety` en `Color` in een categorische plot te visualiseren. Om de data beter te plotten, gebruiken we de gecodeerde `Item Size`-kolom en de ongecodeerde `Variety`-kolom. + +```python + palette = { + 'ORANGE': 'orange', + 'WHITE': 'wheat', + } + pumpkins['Item Size'] = encoded_pumpkins['ord__Item Size'] + + g = sns.catplot( + data=pumpkins, + x="Item Size", y="Color", row='Variety', + kind="box", orient="h", + sharex=False, margin_titles=True, + height=1.8, aspect=4, palette=palette, + ) + g.set(xlabel="Item Size", ylabel="").set(xlim=(0,6)) + g.set_titles(row_template="{row_name}") +``` + +![Een catplot van gevisualiseerde data](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_2.png) + +### Gebruik een swarm plot + +Aangezien Color een binaire categorie is (Wit of Niet), heeft het 'een [gespecialiseerde aanpak](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) nodig voor visualisatie'. Er zijn andere manieren om de relatie van deze categorie met andere variabelen te visualiseren. + +Je kunt variabelen naast elkaar visualiseren met Seaborn-plots. + +1. Probeer een 'swarm'-plot om de verdeling van waarden te tonen: + + ```python + palette = { + 0: 'orange', + 1: 'wheat' + } + sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette) + ``` + + ![Een zwerm van gevisualiseerde data](../../../../2-Regression/4-Logistic/images/swarm_2.png) + +**Let op**: de bovenstaande code kan een waarschuwing genereren, omdat Seaborn moeite heeft om zo'n hoeveelheid datapunten in een swarm plot weer te geven. Een mogelijke oplossing is het verkleinen van de marker door de 'size'-parameter te gebruiken. Houd er echter rekening mee dat dit de leesbaarheid van de plot beïnvloedt. + +> **🧮 Laat me de wiskunde zien** +> +> Logistische regressie is gebaseerd op het concept van 'maximum likelihood' met behulp van [sigmoidfuncties](https://wikipedia.org/wiki/Sigmoid_function). Een 'Sigmoidfunctie' op een plot ziet eruit als een 'S'-vorm. Het neemt een waarde en zet deze om naar ergens tussen 0 en 1. De curve wordt ook wel een 'logistische curve' genoemd. De formule ziet er zo uit: +> +> ![logistische functie](../../../../2-Regression/4-Logistic/images/sigmoid.png) +> +> waarbij het middenpunt van de sigmoid zich bevindt op het 0-punt van x, L de maximale waarde van de curve is, en k de steilheid van de curve is. Als de uitkomst van de functie meer dan 0,5 is, krijgt het betreffende label de klasse '1' van de binaire keuze. Zo niet, dan wordt het geclassificeerd als '0'. + +## Bouw je model + +Het bouwen van een model om deze binaire classificatie te vinden is verrassend eenvoudig in Scikit-learn. + +[![ML voor beginners - Logistische regressie voor classificatie van data](https://img.youtube.com/vi/MmZS2otPrQ8/0.jpg)](https://youtu.be/MmZS2otPrQ8 "ML voor beginners - Logistische regressie voor classificatie van data") + +> 🎥 Klik op de afbeelding hierboven voor een korte video-overzicht van het bouwen van een lineair regressiemodel. + +1. Selecteer de variabelen die je wilt gebruiken in je classificatiemodel en splits de trainings- en testsets door `train_test_split()` aan te roepen: + + ```python + from sklearn.model_selection import train_test_split + + X = encoded_pumpkins[encoded_pumpkins.columns.difference(['Color'])] + y = encoded_pumpkins['Color'] + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + + ``` + +2. Nu kun je je model trainen door `fit()` aan te roepen met je trainingsdata en het resultaat af te drukken: + + ```python + from sklearn.metrics import f1_score, classification_report + from sklearn.linear_model import LogisticRegression + + model = LogisticRegression() + model.fit(X_train, y_train) + predictions = model.predict(X_test) + + print(classification_report(y_test, predictions)) + print('Predicted labels: ', predictions) + print('F1-score: ', f1_score(y_test, predictions)) + ``` + + Bekijk het scorebord van je model. Het is niet slecht, gezien je slechts ongeveer 1000 rijen data hebt: + + ```output + precision recall f1-score support + + 0 0.94 0.98 0.96 166 + 1 0.85 0.67 0.75 33 + + accuracy 0.92 199 + macro avg 0.89 0.82 0.85 199 + weighted avg 0.92 0.92 0.92 199 + + Predicted labels: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 + 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 + 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 0 0 0 1 0 0 0 0 0 0 0 0 1 1] + F1-score: 0.7457627118644068 + ``` + +## Betere begrip via een confusion matrix + +Hoewel je een scorebordrapport kunt krijgen [termen](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) door de bovenstaande items af te drukken, kun je je model mogelijk beter begrijpen door een [confusion matrix](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) te gebruiken om ons te helpen begrijpen hoe het model presteert. + +> 🎓 Een '[confusion matrix](https://wikipedia.org/wiki/Confusion_matrix)' (of 'error matrix') is een tabel die de echte versus valse positieven en negatieven van je model uitdrukt, en daarmee de nauwkeurigheid van voorspellingen meet. + +1. Om een confusion matrix te gebruiken, roep `confusion_matrix()` aan: + + ```python + from sklearn.metrics import confusion_matrix + confusion_matrix(y_test, predictions) + ``` + + Bekijk de confusion matrix van je model: + + ```output + array([[162, 4], + [ 11, 22]]) + ``` + +In Scikit-learn zijn de rijen (as 0) de werkelijke labels en de kolommen (as 1) de voorspelde labels. + +| | 0 | 1 | +| :---: | :---: | :---: | +| 0 | TN | FP | +| 1 | FN | TP | + +Wat gebeurt er hier? Stel dat ons model wordt gevraagd om pompoenen te classificeren tussen twee binaire categorieën, categorie 'wit' en categorie 'niet-wit'. + +- Als je model een pompoen voorspelt als niet wit en deze behoort in werkelijkheid tot categorie 'niet-wit', noemen we dit een true negative, weergegeven door het getal linksboven. +- Als je model een pompoen voorspelt als wit en deze behoort in werkelijkheid tot categorie 'niet-wit', noemen we dit een false negative, weergegeven door het getal linksonder. +- Als je model een pompoen voorspelt als niet wit en deze behoort in werkelijkheid tot categorie 'wit', noemen we dit een false positive, weergegeven door het getal rechtsboven. +- Als je model een pompoen voorspelt als wit en deze behoort in werkelijkheid tot categorie 'wit', noemen we dit een true positive, weergegeven door het getal rechtsonder. + +Zoals je misschien hebt geraden, is het beter om een groter aantal true positives en true negatives te hebben en een lager aantal false positives en false negatives, wat impliceert dat het model beter presteert. +Hoe hangt de confusion matrix samen met precisie en recall? Onthoud dat het classificatierapport hierboven precisie (0.85) en recall (0.67) liet zien. + +Precisie = tp / (tp + fp) = 22 / (22 + 4) = 0.8461538461538461 + +Recall = tp / (tp + fn) = 22 / (22 + 11) = 0.6666666666666666 + +✅ V: Volgens de confusion matrix, hoe heeft het model gepresteerd? A: Niet slecht; er zijn een goed aantal true negatives, maar ook enkele false negatives. + +Laten we de termen die we eerder zagen opnieuw bekijken met behulp van de mapping van TP/TN en FP/FN in de confusion matrix: + +🎓 Precisie: TP/(TP + FP) Het aandeel relevante gevallen onder de opgehaalde gevallen (bijvoorbeeld welke labels correct gelabeld zijn). + +🎓 Recall: TP/(TP + FN) Het aandeel relevante gevallen dat is opgehaald, ongeacht of ze correct gelabeld zijn. + +🎓 f1-score: (2 * precisie * recall)/(precisie + recall) Een gewogen gemiddelde van precisie en recall, waarbij 1 het beste is en 0 het slechtste. + +🎓 Support: Het aantal keren dat elk label is opgehaald. + +🎓 Nauwkeurigheid: (TP + TN)/(TP + TN + FP + FN) Het percentage labels dat correct is voorspeld voor een steekproef. + +🎓 Macro Gemiddelde: De berekening van de niet-gewogen gemiddelde metrics voor elk label, zonder rekening te houden met label-ongelijkheid. + +🎓 Gewogen Gemiddelde: De berekening van de gemiddelde metrics voor elk label, waarbij rekening wordt gehouden met label-ongelijkheid door ze te wegen op basis van hun support (het aantal echte gevallen voor elk label). + +✅ Kun je bedenken welke metric je in de gaten moet houden als je wilt dat je model het aantal false negatives vermindert? + +## Visualiseer de ROC-curve van dit model + +[![ML voor beginners - Analyseren van Logistic Regression Performance met ROC Curves](https://img.youtube.com/vi/GApO575jTA0/0.jpg)](https://youtu.be/GApO575jTA0 "ML voor beginners - Analyseren van Logistic Regression Performance met ROC Curves") + +> 🎥 Klik op de afbeelding hierboven voor een korte video-overzicht van ROC-curves + +Laten we nog een visualisatie maken om de zogenaamde 'ROC'-curve te bekijken: + +```python +from sklearn.metrics import roc_curve, roc_auc_score +import matplotlib +import matplotlib.pyplot as plt +%matplotlib inline + +y_scores = model.predict_proba(X_test) +fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1]) + +fig = plt.figure(figsize=(6, 6)) +plt.plot([0, 1], [0, 1], 'k--') +plt.plot(fpr, tpr) +plt.xlabel('False Positive Rate') +plt.ylabel('True Positive Rate') +plt.title('ROC Curve') +plt.show() +``` + +Gebruik Matplotlib om de [Receiving Operating Characteristic](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) of ROC van het model te plotten. ROC-curves worden vaak gebruikt om een beeld te krijgen van de output van een classifier in termen van true vs. false positives. "ROC-curves hebben meestal de true positive rate op de Y-as en de false positive rate op de X-as." Dus de steilheid van de curve en de ruimte tussen de middenlijn en de curve zijn belangrijk: je wilt een curve die snel omhoog gaat en over de lijn heen buigt. In ons geval zijn er false positives in het begin, en daarna buigt de lijn correct omhoog en over: + +![ROC](../../../../2-Regression/4-Logistic/images/ROC_2.png) + +Gebruik ten slotte de [`roc_auc_score` API](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score) van Scikit-learn om de daadwerkelijke 'Area Under the Curve' (AUC) te berekenen: + +```python +auc = roc_auc_score(y_test,y_scores[:,1]) +print(auc) +``` +Het resultaat is `0.9749908725812341`. Aangezien de AUC varieert van 0 tot 1, wil je een hoge score, omdat een model dat 100% correct is in zijn voorspellingen een AUC van 1 zal hebben; in dit geval is het model _best goed_. + +In toekomstige lessen over classificaties leer je hoe je iteratief de scores van je model kunt verbeteren. Maar voor nu, gefeliciteerd! Je hebt deze lessen over regressie voltooid! + +--- +## 🚀Uitdaging + +Er is nog veel meer te ontdekken over logistic regression! Maar de beste manier om te leren is door te experimenteren. Zoek een dataset die geschikt is voor dit type analyse en bouw er een model mee. Wat leer je? Tip: probeer [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) voor interessante datasets. + +## [Quiz na de les](https://ff-quizzes.netlify.app/en/ml/) + +## Review & Zelfstudie + +Lees de eerste paar pagina's van [dit paper van Stanford](https://web.stanford.edu/~jurafsky/slp3/5.pdf) over enkele praktische toepassingen van logistic regression. Denk na over taken die beter geschikt zijn voor het ene of het andere type regressietaken die we tot nu toe hebben bestudeerd. Wat zou het beste werken? + +## Opdracht + +[Probeer deze regressie opnieuw](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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele 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/4-Logistic/assignment.md b/translations/nl/2-Regression/4-Logistic/assignment.md new file mode 100644 index 00000000..259a9c51 --- /dev/null +++ b/translations/nl/2-Regression/4-Logistic/assignment.md @@ -0,0 +1,25 @@ + +# Opnieuw proberen met een regressie + +## Instructies + +In de les heb je een subset van de pompoendata gebruikt. Ga nu terug naar de originele data en probeer alle gegevens, schoongemaakt en gestandaardiseerd, te gebruiken om een Logistische Regressiemodel te bouwen. + +## Rubriek + +| Criteria | Uitmuntend | Voldoende | Moet Verbeteren | +| -------- | ------------------------------------------------------------------------ | ------------------------------------------------------------ | ----------------------------------------------------------- | +| | Een notebook wordt gepresenteerd met een goed uitgelegd en goed presterend model | Een notebook wordt gepresenteerd met een model dat minimaal presteert | Een notebook wordt gepresenteerd met een slecht presterend model of geen model | + +--- + +**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 zijn 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. \ No newline at end of file diff --git a/translations/nl/2-Regression/4-Logistic/solution/Julia/README.md b/translations/nl/2-Regression/4-Logistic/solution/Julia/README.md new file mode 100644 index 00000000..24456246 --- /dev/null +++ b/translations/nl/2-Regression/4-Logistic/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Disclaimer**: +Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we ons best doen om nauwkeurigheid te garanderen, 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 eventuele 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/README.md b/translations/nl/2-Regression/README.md new file mode 100644 index 00000000..341fc613 --- /dev/null +++ b/translations/nl/2-Regression/README.md @@ -0,0 +1,54 @@ + +# Regressiemodellen voor machine learning +## Regionaal onderwerp: Regressiemodellen voor pompoenprijzen in Noord-Amerika 🎃 + +In Noord-Amerika worden pompoenen vaak uitgesneden in enge gezichten voor Halloween. Laten we meer ontdekken over deze fascinerende groenten! + +![jack-o-lanterns](../../../2-Regression/images/jack-o-lanterns.jpg) +> Foto door Beth Teutschmann op Unsplash + +## Wat je zult leren + +[![Introductie tot regressie](https://img.youtube.com/vi/5QnJtDad4iQ/0.jpg)](https://youtu.be/5QnJtDad4iQ "Introductievideo over regressie - Klik om te kijken!") +> 🎥 Klik op de afbeelding hierboven voor een korte introductievideo van deze les + +De lessen in deze sectie behandelen verschillende soorten regressie in de context van machine learning. Regressiemodellen kunnen helpen om de _relatie_ tussen variabelen te bepalen. Dit type model kan waarden voorspellen zoals lengte, temperatuur of leeftijd, en zo relaties tussen variabelen blootleggen terwijl het datapunten analyseert. + +In deze serie lessen ontdek je de verschillen tussen lineaire en logistische regressie, en wanneer je de ene boven de andere zou moeten verkiezen. + +[![ML voor beginners - Introductie tot regressiemodellen voor machine learning](https://img.youtube.com/vi/XA3OaoW86R8/0.jpg)](https://youtu.be/XA3OaoW86R8 "ML voor beginners - Introductie tot regressiemodellen voor machine learning") + +> 🎥 Klik op de afbeelding hierboven voor een korte video over regressiemodellen. + +In deze groep lessen ga je aan de slag met machine learning-taken, waaronder het configureren van Visual Studio Code om notebooks te beheren, de gebruikelijke omgeving voor datawetenschappers. Je ontdekt Scikit-learn, een bibliotheek voor machine learning, en je bouwt je eerste modellen, met de focus op regressiemodellen in dit hoofdstuk. + +> Er zijn handige low-code tools die je kunnen helpen bij het werken met regressiemodellen. Probeer [Azure ML voor deze taak](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +### Lessen + +1. [Tools van het vak](1-Tools/README.md) +2. [Data beheren](2-Data/README.md) +3. [Lineaire en polynomiale regressie](3-Linear/README.md) +4. [Logistische regressie](4-Logistic/README.md) + +--- +### Credits + +"ML met regressie" is geschreven met ♥️ door [Jen Looper](https://twitter.com/jenlooper) + +♥️ Bijdragers aan de quiz zijn onder andere: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) en [Ornella Altunyan](https://twitter.com/ornelladotcom) + +De pompoendataset wordt aanbevolen door [dit project op Kaggle](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) en de gegevens zijn afkomstig van de [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) verspreid door het Amerikaanse ministerie van Landbouw. We hebben enkele punten toegevoegd rond kleur op basis van variëteit om de verdeling te normaliseren. Deze gegevens zijn openbaar beschikbaar. + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/3-Web-App/1-Web-App/README.md b/translations/nl/3-Web-App/1-Web-App/README.md new file mode 100644 index 00000000..fefca1d4 --- /dev/null +++ b/translations/nl/3-Web-App/1-Web-App/README.md @@ -0,0 +1,359 @@ + +# Bouw een webapp om een ML-model te gebruiken + +In deze les ga je een ML-model trainen op een dataset die letterlijk buitenaards is: _UFO-waarnemingen van de afgelopen eeuw_, afkomstig uit de NUFORC-database. + +Je leert: + +- Hoe je een getraind model kunt 'pickle' +- Hoe je dat model kunt gebruiken in een Flask-app + +We blijven notebooks gebruiken om data schoon te maken en ons model te trainen, maar je kunt het proces een stap verder brengen door te verkennen hoe je een model 'in het wild' kunt gebruiken, bijvoorbeeld in een webapp. + +Om dit te doen, moet je een webapp bouwen met Flask. + +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Een app bouwen + +Er zijn verschillende manieren om webapps te bouwen die machine learning-modellen gebruiken. Je webarchitectuur kan invloed hebben op de manier waarop je model wordt getraind. Stel je voor dat je werkt in een bedrijf waar de data science-afdeling een model heeft getraind dat ze willen dat jij gebruikt in een app. + +### Overwegingen + +Er zijn veel vragen die je moet stellen: + +- **Is het een webapp of een mobiele app?** Als je een mobiele app bouwt of het model in een IoT-context wilt gebruiken, kun je [TensorFlow Lite](https://www.tensorflow.org/lite/) gebruiken en het model toepassen in een Android- of iOS-app. +- **Waar zal het model zich bevinden?** In de cloud of lokaal? +- **Offline ondersteuning.** Moet de app offline werken? +- **Welke technologie is gebruikt om het model te trainen?** De gekozen technologie kan invloed hebben op de tools die je moet gebruiken. + - **Gebruik van TensorFlow.** Als je een model traint met TensorFlow, biedt dat ecosysteem de mogelijkheid om een TensorFlow-model te converteren voor gebruik in een webapp met [TensorFlow.js](https://www.tensorflow.org/js/). + - **Gebruik van PyTorch.** Als je een model bouwt met een bibliotheek zoals [PyTorch](https://pytorch.org/), kun je het exporteren in [ONNX](https://onnx.ai/) (Open Neural Network Exchange)-formaat voor gebruik in JavaScript-webapps die de [Onnx Runtime](https://www.onnxruntime.ai/) kunnen gebruiken. Deze optie wordt in een toekomstige les verkend voor een Scikit-learn-getraind model. + - **Gebruik van Lobe.ai of Azure Custom Vision.** Als je een ML SaaS (Software as a Service)-systeem zoals [Lobe.ai](https://lobe.ai/) of [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) gebruikt om een model te trainen, biedt dit type software manieren om het model te exporteren voor veel platforms, inclusief het bouwen van een op maat gemaakte API die in de cloud kan worden geraadpleegd door je online applicatie. + +Je hebt ook de mogelijkheid om een volledige Flask-webapp te bouwen die het model zelf kan trainen in een webbrowser. Dit kan ook worden gedaan met TensorFlow.js in een JavaScript-context. + +Voor onze doeleinden, aangezien we hebben gewerkt met Python-gebaseerde notebooks, laten we de stappen verkennen die je moet nemen om een getraind model uit zo'n notebook te exporteren naar een formaat dat leesbaar is door een Python-gebouwde webapp. + +## Tool + +Voor deze taak heb je twee tools nodig: Flask en Pickle, beide draaien op Python. + +✅ Wat is [Flask](https://palletsprojects.com/p/flask/)? Door de makers gedefinieerd als een 'micro-framework', biedt Flask de basisfuncties van webframeworks met Python en een template-engine om webpagina's te bouwen. Bekijk [deze Learn-module](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) om te oefenen met het bouwen met Flask. + +✅ Wat is [Pickle](https://docs.python.org/3/library/pickle.html)? Pickle 🥒 is een Python-module die een Python-objectstructuur serialiseert en deserialiseert. Wanneer je een model 'pickled', serialiseer of 'plat' je de structuur voor gebruik op het web. Let op: Pickle is niet intrinsiek veilig, dus wees voorzichtig als je wordt gevraagd een bestand te 'un-picklen'. Een pickled bestand heeft de extensie `.pkl`. + +## Oefening - maak je data schoon + +In deze les gebruik je data van 80.000 UFO-waarnemingen, verzameld door [NUFORC](https://nuforc.org) (The National UFO Reporting Center). Deze data bevat enkele interessante beschrijvingen van UFO-waarnemingen, bijvoorbeeld: + +- **Lange voorbeeldbeschrijving.** "Een man komt tevoorschijn uit een lichtstraal die 's nachts op een grasveld schijnt en rent naar de parkeerplaats van Texas Instruments". +- **Korte voorbeeldbeschrijving.** "de lichten achtervolgden ons". + +De [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) spreadsheet bevat kolommen over de `stad`, `staat` en `land` waar de waarneming plaatsvond, de `vorm` van het object en de `latitude` en `longitude`. + +In het lege [notebook](../../../../3-Web-App/1-Web-App/notebook.ipynb) dat bij deze les is inbegrepen: + +1. Importeer `pandas`, `matplotlib` en `numpy` zoals je in eerdere lessen deed en importeer de ufos-spreadsheet. Je kunt een voorbeelddataset bekijken: + + ```python + import pandas as pd + import numpy as np + + ufos = pd.read_csv('./data/ufos.csv') + ufos.head() + ``` + +1. Converteer de ufos-data naar een kleine dataframe met nieuwe titels. Controleer de unieke waarden in het `Land`-veld. + + ```python + ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) + + ufos.Country.unique() + ``` + +1. Nu kun je de hoeveelheid data die we moeten verwerken verminderen door null-waarden te verwijderen en alleen waarnemingen tussen 1-60 seconden te importeren: + + ```python + ufos.dropna(inplace=True) + + ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] + + ufos.info() + ``` + +1. Importeer Scikit-learn's `LabelEncoder`-bibliotheek om de tekstwaarden voor landen om te zetten naar een nummer: + + ✅ LabelEncoder codeert data alfabetisch + + ```python + from sklearn.preprocessing import LabelEncoder + + ufos['Country'] = LabelEncoder().fit_transform(ufos['Country']) + + ufos.head() + ``` + + Je data zou er nu zo uit moeten zien: + + ```output + Seconds Country Latitude Longitude + 2 20.0 3 53.200000 -2.916667 + 3 20.0 4 28.978333 -96.645833 + 14 30.0 4 35.823889 -80.253611 + 23 60.0 4 45.582778 -122.352222 + 24 3.0 3 51.783333 -0.783333 + ``` + +## Oefening - bouw je model + +Nu kun je je voorbereiden om een model te trainen door de data te verdelen in een trainings- en testgroep. + +1. Selecteer de drie kenmerken waarop je wilt trainen als je X-vector, en de y-vector zal het `Land` zijn. Je wilt in staat zijn om `Seconden`, `Latitude` en `Longitude` in te voeren en een land-id te krijgen als resultaat. + + ```python + from sklearn.model_selection import train_test_split + + Selected_features = ['Seconds','Latitude','Longitude'] + + X = ufos[Selected_features] + y = ufos['Country'] + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + ``` + +1. Train je model met behulp van logistieke regressie: + + ```python + from sklearn.metrics import accuracy_score, classification_report + from sklearn.linear_model import LogisticRegression + model = LogisticRegression() + model.fit(X_train, y_train) + predictions = model.predict(X_test) + + print(classification_report(y_test, predictions)) + print('Predicted labels: ', predictions) + print('Accuracy: ', accuracy_score(y_test, predictions)) + ``` + +De nauwkeurigheid is niet slecht **(ongeveer 95%)**, wat niet verrassend is, aangezien `Land` en `Latitude/Longitude` correleren. + +Het model dat je hebt gemaakt is niet erg revolutionair, omdat je een `Land` zou moeten kunnen afleiden uit de `Latitude` en `Longitude`, maar het is een goede oefening om te proberen te trainen met ruwe data die je hebt schoongemaakt, geëxporteerd en vervolgens dit model te gebruiken in een webapp. + +## Oefening - 'pickle' je model + +Nu is het tijd om je model te _picklen_! Je kunt dit doen in een paar regels code. Zodra het is _gepickled_, laad je je gepickled model en test je het tegen een voorbeelddata-array met waarden voor seconden, latitude en longitude. + +```python +import pickle +model_filename = 'ufo-model.pkl' +pickle.dump(model, open(model_filename,'wb')) + +model = pickle.load(open('ufo-model.pkl','rb')) +print(model.predict([[50,44,-12]])) +``` + +Het model retourneert **'3'**, wat de landcode is voor het VK. Wauw! 👽 + +## Oefening - bouw een Flask-app + +Nu kun je een Flask-app bouwen om je model aan te roepen en vergelijkbare resultaten te retourneren, maar op een visueel aantrekkelijkere manier. + +1. Begin met het maken van een map genaamd **web-app** naast het _notebook.ipynb_-bestand waar je _ufo-model.pkl_-bestand zich bevindt. + +1. Maak in die map drie extra mappen: **static**, met een map **css** erin, en **templates**. Je zou nu de volgende bestanden en mappen moeten hebben: + + ```output + web-app/ + static/ + css/ + templates/ + notebook.ipynb + ufo-model.pkl + ``` + + ✅ Raadpleeg de oplossingmap voor een weergave van de voltooide app + +1. Het eerste bestand dat je moet maken in de _web-app_-map is het **requirements.txt**-bestand. Net zoals _package.json_ in een JavaScript-app, bevat dit bestand de afhankelijkheden die nodig zijn voor de app. Voeg in **requirements.txt** de regels toe: + + ```text + scikit-learn + pandas + numpy + flask + ``` + +1. Voer nu dit bestand uit door naar _web-app_ te navigeren: + + ```bash + cd web-app + ``` + +1. Typ in je terminal `pip install` om de bibliotheken te installeren die in _requirements.txt_ worden vermeld: + + ```bash + pip install -r requirements.txt + ``` + +1. Nu ben je klaar om drie extra bestanden te maken om de app af te maken: + + 1. Maak **app.py** in de root. + 2. Maak **index.html** in de _templates_-map. + 3. Maak **styles.css** in de _static/css_-map. + +1. Bouw het _styles.css_-bestand uit met een paar stijlen: + + ```css + body { + width: 100%; + height: 100%; + font-family: 'Helvetica'; + background: black; + color: #fff; + text-align: center; + letter-spacing: 1.4px; + font-size: 30px; + } + + input { + min-width: 150px; + } + + .grid { + width: 300px; + border: 1px solid #2d2d2d; + display: grid; + justify-content: center; + margin: 20px auto; + } + + .box { + color: #fff; + background: #2d2d2d; + padding: 12px; + display: inline-block; + } + ``` + +1. Bouw vervolgens het _index.html_-bestand uit: + + ```html + + + + + 🛸 UFO Appearance Prediction! 👽 + + + + +
                                + +
                                + +

                                According to the number of seconds, latitude and longitude, which country is likely to have reported seeing a UFO?

                                + +
                                + + + + +
                                + +

                                {{ prediction_text }}

                                + +
                                + +
                                + + + + ``` + + Bekijk de templating in dit bestand. Let op de 'mustache'-syntax rond variabelen die door de app worden geleverd, zoals de voorspellingstekst: `{{}}`. Er is ook een formulier dat een voorspelling post naar de `/predict`-route. + + Ten slotte ben je klaar om het Python-bestand te bouwen dat het model gebruikt en de voorspellingen weergeeft: + +1. Voeg in `app.py` toe: + + ```python + import numpy as np + from flask import Flask, request, render_template + import pickle + + app = Flask(__name__) + + model = pickle.load(open("./ufo-model.pkl", "rb")) + + + @app.route("/") + def home(): + return render_template("index.html") + + + @app.route("/predict", methods=["POST"]) + def predict(): + + int_features = [int(x) for x in request.form.values()] + final_features = [np.array(int_features)] + prediction = model.predict(final_features) + + output = prediction[0] + + countries = ["Australia", "Canada", "Germany", "UK", "US"] + + return render_template( + "index.html", prediction_text="Likely country: {}".format(countries[output]) + ) + + + if __name__ == "__main__": + app.run(debug=True) + ``` + + > 💡 Tip: wanneer je [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) toevoegt tijdens het uitvoeren van de webapp met Flask, worden wijzigingen die je aanbrengt in je applicatie onmiddellijk weergegeven zonder dat je de server opnieuw hoeft te starten. Let op! Schakel deze modus niet in bij een productie-app. + +Als je `python app.py` of `python3 app.py` uitvoert, start je webserver lokaal op en kun je een kort formulier invullen om een antwoord te krijgen op je brandende vraag over waar UFO's zijn waargenomen! + +Voordat je dat doet, bekijk de onderdelen van `app.py`: + +1. Eerst worden afhankelijkheden geladen en de app gestart. +1. Vervolgens wordt het model geïmporteerd. +1. Daarna wordt index.html weergegeven op de home-route. + +Op de `/predict`-route gebeuren er verschillende dingen wanneer het formulier wordt gepost: + +1. De formulier-variabelen worden verzameld en geconverteerd naar een numpy-array. Ze worden vervolgens naar het model gestuurd en een voorspelling wordt geretourneerd. +2. De landen die we willen weergeven worden opnieuw weergegeven als leesbare tekst van hun voorspelde landcode, en die waarde wordt teruggestuurd naar index.html om in de template te worden weergegeven. + +Een model op deze manier gebruiken, met Flask en een gepickled model, is relatief eenvoudig. Het moeilijkste is om te begrijpen in welke vorm de data moet zijn die naar het model moet worden gestuurd om een voorspelling te krijgen. Dat hangt allemaal af van hoe het model is getraind. Dit model heeft drie datapunten nodig om te worden ingevoerd om een voorspelling te krijgen. + +In een professionele omgeving kun je zien hoe goede communicatie noodzakelijk is tussen de mensen die het model trainen en degenen die het gebruiken in een web- of mobiele app. In ons geval is het slechts één persoon, jij! + +--- + +## 🚀 Uitdaging + +In plaats van te werken in een notebook en het model te importeren in de Flask-app, kun je het model direct binnen de Flask-app trainen! Probeer je Python-code in het notebook te converteren, misschien nadat je data is schoongemaakt, om het model te trainen vanuit de app op een route genaamd `train`. Wat zijn de voor- en nadelen van deze methode? + +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Review & Zelfstudie + +Er zijn veel manieren om een webapp te bouwen die ML-modellen gebruikt. Maak een lijst van de manieren waarop je JavaScript of Python kunt gebruiken om een webapp te bouwen die machine learning benut. Denk na over architectuur: moet het model in de app blijven of in de cloud leven? Als het laatste, hoe zou je er toegang toe krijgen? Teken een architecturaal model voor een toegepaste ML-weboplossing. + +## Opdracht + +[Probeer een ander model](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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/3-Web-App/1-Web-App/assignment.md b/translations/nl/3-Web-App/1-Web-App/assignment.md new file mode 100644 index 00000000..3711dec3 --- /dev/null +++ b/translations/nl/3-Web-App/1-Web-App/assignment.md @@ -0,0 +1,25 @@ + +# Probeer een ander model + +## Instructies + +Nu je een webapp hebt gebouwd met een getraind regressiemodel, gebruik een van de modellen uit een eerdere les over regressie om deze webapp opnieuw te maken. Je kunt de stijl behouden of het anders ontwerpen om de pompoendata beter weer te geven. Zorg ervoor dat je de invoer aanpast om overeen te komen met de trainingsmethode van je model. + +## Rubric + +| Criteria | Uitmuntend | Voldoende | Moet Verbeterd Worden | +| -------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | -------------------------------------- | +| | De webapp werkt zoals verwacht en is in de cloud gedeployed | De webapp bevat fouten of vertoont onverwachte resultaten | De webapp functioneert niet goed | + +--- + +**Disclaimer**: +Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we ons best doen voor nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn 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 diff --git a/translations/nl/3-Web-App/README.md b/translations/nl/3-Web-App/README.md new file mode 100644 index 00000000..d103bd64 --- /dev/null +++ b/translations/nl/3-Web-App/README.md @@ -0,0 +1,35 @@ + +# Bouw een webapp om je ML-model te gebruiken + +In dit deel van de cursus maak je kennis met een toegepast ML-onderwerp: hoe je je Scikit-learn model kunt opslaan als een bestand dat gebruikt kan worden om voorspellingen te doen binnen een webapplicatie. Zodra het model is opgeslagen, leer je hoe je het kunt gebruiken in een webapp gebouwd met Flask. Je maakt eerst een model met behulp van gegevens over UFO-waarnemingen! Vervolgens bouw je een webapp waarmee je een aantal seconden, een breedtegraad en een lengtegraad kunt invoeren om te voorspellen welk land een UFO heeft gemeld. + +![UFO Parking](../../../3-Web-App/images/ufo.jpg) + +Foto door Michael Herren op Unsplash + +## Lessen + +1. [Bouw een Webapp](1-Web-App/README.md) + +## Credits + +"Bouw een Webapp" is geschreven met ♥️ door [Jen Looper](https://twitter.com/jenlooper). + +♥️ De quizzen zijn geschreven door Rohan Raj. + +De dataset is afkomstig van [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings). + +De webapp-architectuur is deels voorgesteld door [dit artikel](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4) en [deze repo](https://github.com/abhinavsagar/machine-learning-deployment) van Abhinav Sagar. + +--- + +**Disclaimer**: +Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we ons best doen voor 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 diff --git a/translations/nl/4-Classification/1-Introduction/README.md b/translations/nl/4-Classification/1-Introduction/README.md new file mode 100644 index 00000000..96c8a886 --- /dev/null +++ b/translations/nl/4-Classification/1-Introduction/README.md @@ -0,0 +1,313 @@ + +# Introductie tot classificatie + +In deze vier lessen ga je een fundamenteel aspect van klassieke machine learning verkennen: _classificatie_. We zullen verschillende classificatie-algoritmen gebruiken met een dataset over de briljante keukens van Azië en India. Hopelijk heb je trek! + +![een snufje!](../../../../4-Classification/1-Introduction/images/pinch.png) + +> Vier pan-Aziatische keukens in deze lessen! Afbeelding door [Jen Looper](https://twitter.com/jenlooper) + +Classificatie is een vorm van [supervised learning](https://wikipedia.org/wiki/Supervised_learning) die veel gemeen heeft met regressietechnieken. Als machine learning draait om het voorspellen van waarden of namen door datasets te gebruiken, dan valt classificatie meestal in twee groepen: _binaire classificatie_ en _multiclass classificatie_. + +[![Introductie tot classificatie](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "Introductie tot classificatie") + +> 🎥 Klik op de afbeelding hierboven voor een video: MIT's John Guttag introduceert classificatie + +Onthoud: + +- **Lineaire regressie** hielp je relaties tussen variabelen te voorspellen en nauwkeurige voorspellingen te maken over waar een nieuw datapunt zou vallen in relatie tot die lijn. Zo kon je bijvoorbeeld voorspellen _wat de prijs van een pompoen zou zijn in september versus december_. +- **Logistische regressie** hielp je "binaire categorieën" ontdekken: bij dit prijsniveau, _is deze pompoen oranje of niet-oranje_? + +Classificatie gebruikt verschillende algoritmen om andere manieren te bepalen waarop een label of klasse van een datapunt kan worden vastgesteld. Laten we met deze keuken-dataset werken om te zien of we, door een groep ingrediënten te observeren, de herkomst van de keuken kunnen bepalen. + +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Deze les is beschikbaar in R!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html) + +### Introductie + +Classificatie is een van de fundamentele activiteiten van de machine learning-onderzoeker en datawetenschapper. Van eenvoudige classificatie van een binaire waarde ("is deze e-mail spam of niet?") tot complexe beeldclassificatie en segmentatie met behulp van computer vision, het is altijd nuttig om gegevens in klassen te sorteren en er vragen over te stellen. + +Om het proces op een meer wetenschappelijke manier te beschrijven, creëert je classificatiemethode een voorspellend model dat je in staat stelt de relatie tussen invoervariabelen en uitvoervariabelen in kaart te brengen. + +![binaire vs. multiclass classificatie](../../../../4-Classification/1-Introduction/images/binary-multiclass.png) + +> Binaire vs. multiclass problemen voor classificatie-algoritmen. Infographic door [Jen Looper](https://twitter.com/jenlooper) + +Voordat we beginnen met het schoonmaken van onze data, het visualiseren ervan en het voorbereiden voor onze ML-taken, laten we eerst wat leren over de verschillende manieren waarop machine learning kan worden gebruikt om data te classificeren. + +Afgeleid van [statistiek](https://wikipedia.org/wiki/Statistical_classification), gebruikt classificatie met klassieke machine learning kenmerken zoals `smoker`, `weight` en `age` om de _waarschijnlijkheid van het ontwikkelen van X ziekte_ te bepalen. Als een supervised learning-techniek, vergelijkbaar met de regressie-oefeningen die je eerder hebt uitgevoerd, is je data gelabeld en gebruiken de ML-algoritmen die labels om klassen (of 'kenmerken') van een dataset te classificeren en toe te wijzen aan een groep of uitkomst. + +✅ Neem even de tijd om je een dataset over keukens voor te stellen. Welke vragen zou een multiclass-model kunnen beantwoorden? Welke vragen zou een binair model kunnen beantwoorden? Wat als je wilde bepalen of een bepaalde keuken waarschijnlijk fenegriek gebruikt? Wat als je wilde zien of je, gegeven een tas vol steranijs, artisjokken, bloemkool en mierikswortel, een typisch Indiaas gerecht zou kunnen maken? + +[![Gekke mystery baskets](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "Gekke mystery baskets") + +> 🎥 Klik op de afbeelding hierboven voor een video. Het hele concept van de show 'Chopped' draait om de 'mystery basket' waarin chefs een gerecht moeten maken van een willekeurige keuze aan ingrediënten. Een ML-model zou zeker hebben geholpen! + +## Hallo 'classifier' + +De vraag die we willen stellen over deze keuken-dataset is eigenlijk een **multiclass-vraag**, omdat we met verschillende mogelijke nationale keukens werken. Gegeven een batch ingrediënten, bij welke van deze vele klassen past de data? + +Scikit-learn biedt verschillende algoritmen om data te classificeren, afhankelijk van het soort probleem dat je wilt oplossen. In de volgende twee lessen leer je over enkele van deze algoritmen. + +## Oefening - maak je data schoon en balanceer het + +De eerste taak, voordat je aan dit project begint, is om je data schoon te maken en **te balanceren** om betere resultaten te krijgen. Begin met het lege _notebook.ipynb_-bestand in de root van deze map. + +Het eerste wat je moet installeren is [imblearn](https://imbalanced-learn.org/stable/). Dit is een Scikit-learn-pakket waarmee je de data beter kunt balanceren (je leert hier meer over in een minuut). + +1. Om `imblearn` te installeren, voer je `pip install` uit, zoals hieronder: + + ```python + pip install imblearn + ``` + +1. Importeer de pakketten die je nodig hebt om je data te importeren en te visualiseren, en importeer ook `SMOTE` van `imblearn`. + + ```python + import pandas as pd + import matplotlib.pyplot as plt + import matplotlib as mpl + import numpy as np + from imblearn.over_sampling import SMOTE + ``` + + Nu ben je klaar om de data te importeren. + +1. De volgende taak is om de data te importeren: + + ```python + df = pd.read_csv('../data/cuisines.csv') + ``` + + Door `read_csv()` te gebruiken, wordt de inhoud van het csv-bestand _cusines.csv_ gelezen en geplaatst in de variabele `df`. + +1. Controleer de vorm van de data: + + ```python + df.head() + ``` + + De eerste vijf rijen zien er zo uit: + + ```output + | | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | + | --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- | + | 0 | 65 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 1 | 66 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 2 | 67 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 3 | 68 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 4 | 69 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + ``` + +1. Verkrijg informatie over deze data door `info()` aan te roepen: + + ```python + df.info() + ``` + + Je output lijkt op: + + ```output + + RangeIndex: 2448 entries, 0 to 2447 + Columns: 385 entries, Unnamed: 0 to zucchini + dtypes: int64(384), object(1) + memory usage: 7.2+ MB + ``` + +## Oefening - leren over keukens + +Nu begint het werk interessanter te worden. Laten we de verdeling van data per keuken ontdekken. + +1. Plot de data als balken door `barh()` aan te roepen: + + ```python + df.cuisine.value_counts().plot.barh() + ``` + + ![keuken data verdeling](../../../../4-Classification/1-Introduction/images/cuisine-dist.png) + + Er zijn een beperkt aantal keukens, maar de verdeling van data is ongelijk. Je kunt dat oplossen! Voordat je dat doet, verken je nog wat meer. + +1. Ontdek hoeveel data er beschikbaar is per keuken en print het uit: + + ```python + thai_df = df[(df.cuisine == "thai")] + japanese_df = df[(df.cuisine == "japanese")] + chinese_df = df[(df.cuisine == "chinese")] + indian_df = df[(df.cuisine == "indian")] + korean_df = df[(df.cuisine == "korean")] + + print(f'thai df: {thai_df.shape}') + print(f'japanese df: {japanese_df.shape}') + print(f'chinese df: {chinese_df.shape}') + print(f'indian df: {indian_df.shape}') + print(f'korean df: {korean_df.shape}') + ``` + + De output ziet er zo uit: + + ```output + thai df: (289, 385) + japanese df: (320, 385) + chinese df: (442, 385) + indian df: (598, 385) + korean df: (799, 385) + ``` + +## Ingrediënten ontdekken + +Nu kun je dieper in de data duiken en leren wat de typische ingrediënten per keuken zijn. Je moet terugkerende data verwijderen die verwarring veroorzaakt tussen keukens, dus laten we meer leren over dit probleem. + +1. Maak een functie `create_ingredient()` in Python om een ingrediënten-dataframe te maken. Deze functie begint met het verwijderen van een nutteloze kolom en sorteert ingrediënten op hun aantal: + + ```python + def create_ingredient_df(df): + ingredient_df = df.T.drop(['cuisine','Unnamed: 0']).sum(axis=1).to_frame('value') + ingredient_df = ingredient_df[(ingredient_df.T != 0).any()] + ingredient_df = ingredient_df.sort_values(by='value', ascending=False, + inplace=False) + return ingredient_df + ``` + + Nu kun je die functie gebruiken om een idee te krijgen van de tien meest populaire ingrediënten per keuken. + +1. Roep `create_ingredient()` aan en plot het door `barh()` aan te roepen: + + ```python + thai_ingredient_df = create_ingredient_df(thai_df) + thai_ingredient_df.head(10).plot.barh() + ``` + + ![thai](../../../../4-Classification/1-Introduction/images/thai.png) + +1. Doe hetzelfde voor de Japanse data: + + ```python + japanese_ingredient_df = create_ingredient_df(japanese_df) + japanese_ingredient_df.head(10).plot.barh() + ``` + + ![japanese](../../../../4-Classification/1-Introduction/images/japanese.png) + +1. Nu voor de Chinese ingrediënten: + + ```python + chinese_ingredient_df = create_ingredient_df(chinese_df) + chinese_ingredient_df.head(10).plot.barh() + ``` + + ![chinese](../../../../4-Classification/1-Introduction/images/chinese.png) + +1. Plot de Indiase ingrediënten: + + ```python + indian_ingredient_df = create_ingredient_df(indian_df) + indian_ingredient_df.head(10).plot.barh() + ``` + + ![indian](../../../../4-Classification/1-Introduction/images/indian.png) + +1. Tot slot, plot de Koreaanse ingrediënten: + + ```python + korean_ingredient_df = create_ingredient_df(korean_df) + korean_ingredient_df.head(10).plot.barh() + ``` + + ![korean](../../../../4-Classification/1-Introduction/images/korean.png) + +1. Verwijder nu de meest voorkomende ingrediënten die verwarring veroorzaken tussen verschillende keukens door `drop()` aan te roepen: + + Iedereen houdt van rijst, knoflook en gember! + + ```python + feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) + labels_df = df.cuisine #.unique() + feature_df.head() + ``` + +## Balanceer de dataset + +Nu je de data hebt schoongemaakt, gebruik [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "Synthetic Minority Over-sampling Technique" - om het te balanceren. + +1. Roep `fit_resample()` aan, deze strategie genereert nieuwe samples door interpolatie. + + ```python + oversample = SMOTE() + transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) + ``` + + Door je data te balanceren, krijg je betere resultaten bij het classificeren ervan. Denk aan een binaire classificatie. Als het grootste deel van je data één klasse is, zal een ML-model die klasse vaker voorspellen, simpelweg omdat er meer data voor is. Het balanceren van de data neemt scheve data en helpt deze onbalans te verwijderen. + +1. Nu kun je het aantal labels per ingrediënt controleren: + + ```python + print(f'new label count: {transformed_label_df.value_counts()}') + print(f'old label count: {df.cuisine.value_counts()}') + ``` + + Je output ziet er zo uit: + + ```output + new label count: korean 799 + chinese 799 + indian 799 + japanese 799 + thai 799 + Name: cuisine, dtype: int64 + old label count: korean 799 + indian 598 + chinese 442 + japanese 320 + thai 289 + Name: cuisine, dtype: int64 + ``` + + De data is mooi schoon, gebalanceerd en erg smakelijk! + +1. De laatste stap is om je gebalanceerde data, inclusief labels en kenmerken, op te slaan in een nieuw dataframe dat kan worden geëxporteerd naar een bestand: + + ```python + transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') + ``` + +1. Je kunt nog een laatste blik werpen op de data met `transformed_df.head()` en `transformed_df.info()`. Sla een kopie van deze data op voor gebruik in toekomstige lessen: + + ```python + transformed_df.head() + transformed_df.info() + transformed_df.to_csv("../data/cleaned_cuisines.csv") + ``` + + Deze verse CSV is nu te vinden in de root data map. + +--- + +## 🚀Uitdaging + +Deze curriculum bevat verschillende interessante datasets. Doorzoek de `data`-mappen en kijk of er datasets zijn die geschikt zouden zijn voor binaire of multiclass-classificatie. Welke vragen zou je stellen over deze dataset? + +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Review & Zelfstudie + +Verken de API van SMOTE. Voor welke use cases is het het meest geschikt? Welke problemen lost het op? + +## Opdracht + +[Verken classificatiemethoden](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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/4-Classification/1-Introduction/assignment.md b/translations/nl/4-Classification/1-Introduction/assignment.md new file mode 100644 index 00000000..7f7c8a50 --- /dev/null +++ b/translations/nl/4-Classification/1-Introduction/assignment.md @@ -0,0 +1,25 @@ + +# Verken classificatiemethoden + +## Instructies + +In de [Scikit-learn documentatie](https://scikit-learn.org/stable/supervised_learning.html) vind je een uitgebreide lijst met manieren om data te classificeren. Doe een kleine speurtocht in deze documentatie: je doel is om classificatiemethoden te zoeken en deze te koppelen aan een dataset uit dit curriculum, een vraag die je hierover kunt stellen, en een classificatietechniek. Maak een spreadsheet of tabel in een .doc-bestand en leg uit hoe de dataset zou werken met het classificatie-algoritme. + +## Rubriek + +| Criteria | Uitmuntend | Voldoende | Verbetering nodig | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| | een document wordt gepresenteerd met een overzicht van 5 algoritmen samen met een classificatietechniek. Het overzicht is goed uitgelegd en gedetailleerd. | een document wordt gepresenteerd met een overzicht van 3 algoritmen samen met een classificatietechniek. Het overzicht is goed uitgelegd en gedetailleerd. | een document wordt gepresenteerd met een overzicht van minder dan drie algoritmen samen met een classificatietechniek en het overzicht is niet goed uitgelegd of gedetailleerd. | + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/4-Classification/1-Introduction/solution/Julia/README.md b/translations/nl/4-Classification/1-Introduction/solution/Julia/README.md new file mode 100644 index 00000000..d94a58cc --- /dev/null +++ b/translations/nl/4-Classification/1-Introduction/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/4-Classification/2-Classifiers-1/README.md b/translations/nl/4-Classification/2-Classifiers-1/README.md new file mode 100644 index 00000000..356d3f08 --- /dev/null +++ b/translations/nl/4-Classification/2-Classifiers-1/README.md @@ -0,0 +1,253 @@ + +# Categorieën van keukens 1 + +In deze les gebruik je de dataset die je in de vorige les hebt opgeslagen, vol met gebalanceerde, schone gegevens over keukens. + +Je zult deze dataset gebruiken met verschillende classificatiemethoden om _een nationale keuken te voorspellen op basis van een groep ingrediënten_. Terwijl je dit doet, leer je meer over enkele manieren waarop algoritmen kunnen worden ingezet voor classificatietaken. + +## [Quiz voorafgaand aan de les](https://ff-quizzes.netlify.app/en/ml/) +# Voorbereiding + +Als je [Les 1](../1-Introduction/README.md) hebt voltooid, zorg er dan voor dat een bestand genaamd _cleaned_cuisines.csv_ zich bevindt in de root `/data` map voor deze vier lessen. + +## Oefening - voorspel een nationale keuken + +1. Werk in de map _notebook.ipynb_ van deze les en importeer dat bestand samen met de Pandas-bibliotheek: + + ```python + import pandas as pd + cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv") + cuisines_df.head() + ``` + + De gegevens zien er als volgt uit: + +| | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | +| --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- | +| 0 | 0 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 1 | 1 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 2 | 2 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 3 | 3 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 4 | 4 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + + +1. Importeer nu nog enkele andere bibliotheken: + + ```python + from sklearn.linear_model import LogisticRegression + from sklearn.model_selection import train_test_split, cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve + from sklearn.svm import SVC + import numpy as np + ``` + +1. Verdeel de X- en y-coördinaten in twee dataframes voor training. `cuisine` kan de labels-dataset zijn: + + ```python + cuisines_label_df = cuisines_df['cuisine'] + cuisines_label_df.head() + ``` + + Het ziet er als volgt uit: + + ```output + 0 indian + 1 indian + 2 indian + 3 indian + 4 indian + Name: cuisine, dtype: object + ``` + +1. Laat die `Unnamed: 0`-kolom en de `cuisine`-kolom vallen door `drop()` aan te roepen. Sla de rest van de gegevens op als trainbare kenmerken: + + ```python + cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) + cuisines_feature_df.head() + ``` + + Je kenmerken zien er als volgt uit: + +| | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | artemisia | artichoke | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | +| ---: | -----: | -------: | ----: | ---------: | ----: | -----------: | ------: | -------: | --------: | --------: | ---: | ------: | ----------: | ---------: | ----------------------: | ---: | ---: | ---: | ----: | -----: | -------: | +| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | + +Nu ben je klaar om je model te trainen! + +## Het kiezen van je classifier + +Nu je gegevens schoon en klaar zijn voor training, moet je beslissen welk algoritme je voor de taak wilt gebruiken. + +Scikit-learn groepeert classificatie onder Gecontroleerd Leren, en in die categorie vind je veel manieren om te classificeren. [De variëteit](https://scikit-learn.org/stable/supervised_learning.html) kan in eerste instantie overweldigend lijken. De volgende methoden bevatten allemaal technieken voor classificatie: + +- Lineaire modellen +- Support Vector Machines +- Stochastic Gradient Descent +- Nabijheid van buren +- Gaussiaanse processen +- Beslissingsbomen +- Ensemble-methoden (stemmen Classifier) +- Multiclass- en multioutput-algoritmen (multiclass- en multilabel-classificatie, multiclass-multioutput-classificatie) + +> Je kunt ook [neurale netwerken gebruiken om gegevens te classificeren](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification), maar dat valt buiten de scope van deze les. + +### Welke classifier moet je kiezen? + +Dus, welke classifier moet je kiezen? Vaak is het testen van verschillende classifiers en kijken naar een goed resultaat een manier om te testen. Scikit-learn biedt een [vergelijking naast elkaar](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) op een gecreëerde dataset, waarbij KNeighbors, SVC op twee manieren, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB en QuadraticDiscriminationAnalysis worden vergeleken, en de resultaten worden gevisualiseerd: + +![vergelijking van classifiers](../../../../4-Classification/2-Classifiers-1/images/comparison.png) +> Plots gegenereerd in de documentatie van Scikit-learn + +> AutoML lost dit probleem handig op door deze vergelijkingen in de cloud uit te voeren, zodat je het beste algoritme voor je gegevens kunt kiezen. Probeer het [hier](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott) + +### Een betere aanpak + +Een betere manier dan willekeurig gokken is echter om de ideeën te volgen op dit downloadbare [ML Cheat sheet](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott). Hier ontdekken we dat we voor ons multiclass-probleem enkele keuzes hebben: + +![cheatsheet voor multiclass-problemen](../../../../4-Classification/2-Classifiers-1/images/cheatsheet.png) +> Een sectie van Microsoft's Algorithm Cheat Sheet, met opties voor multiclass-classificatie + +✅ Download dit cheat sheet, print het uit en hang het aan je muur! + +### Redenering + +Laten we kijken of we verschillende benaderingen kunnen beredeneren, gegeven de beperkingen die we hebben: + +- **Neurale netwerken zijn te zwaar**. Gezien onze schone, maar minimale dataset, en het feit dat we lokaal trainen via notebooks, zijn neurale netwerken te zwaar voor deze taak. +- **Geen tweeklassen-classifier**. We gebruiken geen tweeklassen-classifier, dus dat sluit one-vs-all uit. +- **Beslissingsboom of logistische regressie zou kunnen werken**. Een beslissingsboom zou kunnen werken, of logistische regressie voor multiclass-gegevens. +- **Multiclass Boosted Decision Trees lossen een ander probleem op**. De multiclass boosted decision tree is het meest geschikt voor niet-parametrische taken, bijvoorbeeld taken die zijn ontworpen om ranglijsten te maken, dus het is niet nuttig voor ons. + +### Gebruik van Scikit-learn + +We zullen Scikit-learn gebruiken om onze gegevens te analyseren. Er zijn echter veel manieren om logistische regressie te gebruiken in Scikit-learn. Bekijk de [parameters om door te geven](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). + +In wezen zijn er twee belangrijke parameters - `multi_class` en `solver` - die we moeten specificeren wanneer we Scikit-learn vragen om een logistische regressie uit te voeren. De waarde van `multi_class` past een bepaald gedrag toe. De waarde van de solver bepaalt welk algoritme wordt gebruikt. Niet alle solvers kunnen worden gecombineerd met alle `multi_class`-waarden. + +Volgens de documentatie, in het multiclass-geval, gebruikt het trainingsalgoritme: + +- **Het one-vs-rest (OvR) schema**, als de `multi_class` optie is ingesteld op `ovr` +- **De cross-entropy loss**, als de `multi_class` optie is ingesteld op `multinomial`. (Momenteel wordt de `multinomial` optie alleen ondersteund door de ‘lbfgs’, ‘sag’, ‘saga’ en ‘newton-cg’ solvers.)" + +> 🎓 Het 'schema' hier kan 'ovr' (one-vs-rest) of 'multinomial' zijn. Aangezien logistische regressie eigenlijk is ontworpen om binaire classificatie te ondersteunen, stellen deze schema's het in staat om beter om te gaan met multiclass-classificatietaken. [bron](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/) + +> 🎓 De 'solver' wordt gedefinieerd als "het algoritme dat wordt gebruikt in het optimalisatieprobleem". [bron](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). + +Scikit-learn biedt deze tabel om uit te leggen hoe solvers omgaan met verschillende uitdagingen die worden gepresenteerd door verschillende soorten datastructuren: + +![solvers](../../../../4-Classification/2-Classifiers-1/images/solvers.png) + +## Oefening - splits de gegevens + +We kunnen ons richten op logistische regressie voor onze eerste trainingspoging, aangezien je onlangs over de laatste hebt geleerd in een vorige les. +Splits je gegevens in trainings- en testgroepen door `train_test_split()` aan te roepen: + +```python +X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) +``` + +## Oefening - pas logistische regressie toe + +Aangezien je het multiclass-geval gebruikt, moet je kiezen welk _schema_ je wilt gebruiken en welke _solver_ je wilt instellen. Gebruik LogisticRegression met een multiclass-instelling en de **liblinear** solver om te trainen. + +1. Maak een logistische regressie met multi_class ingesteld op `ovr` en de solver ingesteld op `liblinear`: + + ```python + lr = LogisticRegression(multi_class='ovr',solver='liblinear') + model = lr.fit(X_train, np.ravel(y_train)) + + accuracy = model.score(X_test, y_test) + print ("Accuracy is {}".format(accuracy)) + ``` + + ✅ Probeer een andere solver zoals `lbfgs`, die vaak als standaard wordt ingesteld +> Let op, gebruik de Pandas [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html) functie om je data te flatten wanneer nodig. +De nauwkeurigheid is goed bij meer dan **80%**! + +1. Je kunt dit model in actie zien door één rij gegevens te testen (#50): + + ```python + print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}') + print(f'cuisine: {y_test.iloc[50]}') + ``` + + Het resultaat wordt afgedrukt: + + ```output + ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object') + cuisine: indian + ``` + + ✅ Probeer een ander rijnummer en controleer de resultaten. + +1. Door dieper te graven, kun je de nauwkeurigheid van deze voorspelling controleren: + + ```python + test= X_test.iloc[50].values.reshape(-1, 1).T + proba = model.predict_proba(test) + classes = model.classes_ + resultdf = pd.DataFrame(data=proba, columns=classes) + + topPrediction = resultdf.T.sort_values(by=[0], ascending = [False]) + topPrediction.head() + ``` + + Het resultaat wordt afgedrukt - Indiase keuken is de beste gok, met een goede waarschijnlijkheid: + + | | 0 | + | -------: | -------: | + | indian | 0.715851 | + | chinese | 0.229475 | + | japanese | 0.029763 | + | korean | 0.017277 | + | thai | 0.007634 | + + ✅ Kun je uitleggen waarom het model er vrij zeker van is dat dit een Indiase keuken is? + +1. Krijg meer details door een classificatierapport af te drukken, zoals je deed in de lessen over regressie: + + ```python + y_pred = model.predict(X_test) + print(classification_report(y_test,y_pred)) + ``` + + | | precisie | recall | f1-score | support | + | ------------ | -------- | ------ | -------- | ------- | + | chinese | 0.73 | 0.71 | 0.72 | 229 | + | indian | 0.91 | 0.93 | 0.92 | 254 | + | japanese | 0.70 | 0.75 | 0.72 | 220 | + | korean | 0.86 | 0.76 | 0.81 | 242 | + | thai | 0.79 | 0.85 | 0.82 | 254 | + | nauwkeurigheid| 0.80 | 1199 | | | + | macro gem. | 0.80 | 0.80 | 0.80 | 1199 | + | gewogen gem. | 0.80 | 0.80 | 0.80 | 1199 | + +## 🚀Uitdaging + +In deze les heb je je schoongemaakte gegevens gebruikt om een machine learning-model te bouwen dat een nationale keuken kan voorspellen op basis van een reeks ingrediënten. Neem de tijd om de vele opties te bekijken die Scikit-learn biedt om gegevens te classificeren. Verdiep je in het concept van 'solver' om te begrijpen wat er achter de schermen gebeurt. + +## [Quiz na de les](https://ff-quizzes.netlify.app/en/ml/) + +## Review & Zelfstudie + +Verdiep je wat meer in de wiskunde achter logistische regressie in [deze les](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf) +## Opdracht + +[Bestudeer de solvers](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 eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/4-Classification/2-Classifiers-1/assignment.md b/translations/nl/4-Classification/2-Classifiers-1/assignment.md new file mode 100644 index 00000000..619e95df --- /dev/null +++ b/translations/nl/4-Classification/2-Classifiers-1/assignment.md @@ -0,0 +1,23 @@ + +# Bestudeer de oplossers +## Instructies + +In deze les heb je geleerd over de verschillende oplossers die algoritmes combineren met een machine learning-proces om een nauwkeurig model te creëren. Doorloop de oplossers die in de les worden genoemd en kies er twee. Vergelijk en contrasteer deze twee oplossers in je eigen woorden. Welk soort probleem lossen ze op? Hoe werken ze met verschillende datastructuren? Waarom zou je de ene boven de andere kiezen? +## Rubriek + +| Criteria | Uitmuntend | Voldoende | Moet Verbeteren | +| -------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------- | +| | Een .doc-bestand wordt gepresenteerd met twee paragrafen, één over elke oplosser, waarin ze doordacht worden vergeleken. | Een .doc-bestand wordt gepresenteerd met slechts één paragraaf | De opdracht is onvolledig | + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/4-Classification/2-Classifiers-1/solution/Julia/README.md b/translations/nl/4-Classification/2-Classifiers-1/solution/Julia/README.md new file mode 100644 index 00000000..53b5bbf0 --- /dev/null +++ b/translations/nl/4-Classification/2-Classifiers-1/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/4-Classification/3-Classifiers-2/README.md b/translations/nl/4-Classification/3-Classifiers-2/README.md new file mode 100644 index 00000000..0b6ae707 --- /dev/null +++ b/translations/nl/4-Classification/3-Classifiers-2/README.md @@ -0,0 +1,249 @@ + +# Culinair Classificators 2 + +In deze tweede les over classificatie ga je meer manieren verkennen om numerieke gegevens te classificeren. Je leert ook over de gevolgen van het kiezen van de ene classifier boven de andere. + +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +### Vereisten + +We gaan ervan uit dat je de vorige lessen hebt voltooid en een opgeschoonde dataset hebt in je `data` map genaamd _cleaned_cuisines.csv_ in de hoofdmap van deze 4-lessen folder. + +### Voorbereiding + +We hebben je _notebook.ipynb_ bestand geladen met de opgeschoonde dataset en deze verdeeld in X- en y-dataframes, klaar voor het modelbouwproces. + +## Een classificatiekaart + +Eerder heb je geleerd over de verschillende opties die je hebt bij het classificeren van gegevens met behulp van Microsoft's cheat sheet. Scikit-learn biedt een vergelijkbare, maar meer gedetailleerde cheat sheet die je verder kan helpen bij het verfijnen van je keuzes voor classifiers (ook wel estimators genoemd): + +![ML Map van Scikit-learn](../../../../4-Classification/3-Classifiers-2/images/map.png) +> Tip: [bezoek deze kaart online](https://scikit-learn.org/stable/tutorial/machine_learning_map/) en klik langs het pad om documentatie te lezen. + +### Het plan + +Deze kaart is erg handig zodra je een goed begrip hebt van je gegevens, omdat je langs de paden kunt 'wandelen' naar een beslissing: + +- We hebben >50 samples +- We willen een categorie voorspellen +- We hebben gelabelde gegevens +- We hebben minder dan 100K samples +- ✨ We kunnen een Linear SVC kiezen +- Als dat niet werkt, omdat we numerieke gegevens hebben: + - Kunnen we een ✨ KNeighbors Classifier proberen + - Als dat niet werkt, probeer ✨ SVC en ✨ Ensemble Classifiers + +Dit is een zeer nuttig pad om te volgen. + +## Oefening - splits de gegevens + +Volgens dit pad moeten we beginnen met het importeren van enkele bibliotheken die we gaan gebruiken. + +1. Importeer de benodigde bibliotheken: + + ```python + from sklearn.neighbors import KNeighborsClassifier + from sklearn.linear_model import LogisticRegression + from sklearn.svm import SVC + from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier + from sklearn.model_selection import train_test_split, cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve + import numpy as np + ``` + +1. Splits je trainings- en testgegevens: + + ```python + X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) + ``` + +## Linear SVC classifier + +Support-Vector clustering (SVC) is een onderdeel van de Support-Vector machines familie van ML-technieken (leer meer hierover hieronder). Bij deze methode kun je een 'kernel' kiezen om te bepalen hoe de labels worden gegroepeerd. De 'C'-parameter verwijst naar 'regularisatie', wat de invloed van parameters reguleert. De kernel kan een van [meerdere](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC) zijn; hier stellen we deze in op 'linear' om ervoor te zorgen dat we gebruik maken van lineaire SVC. Probability staat standaard op 'false'; hier stellen we deze in op 'true' om waarschijnlijkheidschattingen te verzamelen. We stellen de random state in op '0' om de gegevens te schudden en waarschijnlijkheden te verkrijgen. + +### Oefening - pas een lineaire SVC toe + +Begin met het maken van een array van classifiers. Je zult deze array geleidelijk uitbreiden terwijl we testen. + +1. Begin met een Linear SVC: + + ```python + C = 10 + # Create different classifiers. + classifiers = { + 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) + } + ``` + +2. Train je model met de Linear SVC en print een rapport: + + ```python + n_classifiers = len(classifiers) + + for index, (name, classifier) in enumerate(classifiers.items()): + classifier.fit(X_train, np.ravel(y_train)) + + y_pred = classifier.predict(X_test) + accuracy = accuracy_score(y_test, y_pred) + print("Accuracy (train) for %s: %0.1f%% " % (name, accuracy * 100)) + print(classification_report(y_test,y_pred)) + ``` + + Het resultaat is behoorlijk goed: + + ```output + Accuracy (train) for Linear SVC: 78.6% + precision recall f1-score support + + chinese 0.71 0.67 0.69 242 + indian 0.88 0.86 0.87 234 + japanese 0.79 0.74 0.76 254 + korean 0.85 0.81 0.83 242 + thai 0.71 0.86 0.78 227 + + accuracy 0.79 1199 + macro avg 0.79 0.79 0.79 1199 + weighted avg 0.79 0.79 0.79 1199 + ``` + +## K-Neighbors classifier + +K-Neighbors is onderdeel van de "neighbors" familie van ML-methoden, die zowel voor supervised als unsupervised learning kunnen worden gebruikt. Bij deze methode wordt een vooraf bepaald aantal punten gecreëerd en worden gegevens verzameld rond deze punten, zodat gegeneraliseerde labels kunnen worden voorspeld voor de gegevens. + +### Oefening - pas de K-Neighbors classifier toe + +De vorige classifier was goed en werkte goed met de gegevens, maar misschien kunnen we een betere nauwkeurigheid behalen. Probeer een K-Neighbors classifier. + +1. Voeg een regel toe aan je classifier array (voeg een komma toe na het Linear SVC item): + + ```python + 'KNN classifier': KNeighborsClassifier(C), + ``` + + Het resultaat is iets slechter: + + ```output + Accuracy (train) for KNN classifier: 73.8% + precision recall f1-score support + + chinese 0.64 0.67 0.66 242 + indian 0.86 0.78 0.82 234 + japanese 0.66 0.83 0.74 254 + korean 0.94 0.58 0.72 242 + thai 0.71 0.82 0.76 227 + + accuracy 0.74 1199 + macro avg 0.76 0.74 0.74 1199 + weighted avg 0.76 0.74 0.74 1199 + ``` + + ✅ Leer meer over [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) + +## Support Vector Classifier + +Support-Vector classifiers zijn onderdeel van de [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine) familie van ML-methoden die worden gebruikt voor classificatie- en regressietaken. SVMs "mappen trainingsvoorbeelden naar punten in de ruimte" om de afstand tussen twee categorieën te maximaliseren. Vervolgens worden gegevens in deze ruimte gemapt zodat hun categorie kan worden voorspeld. + +### Oefening - pas een Support Vector Classifier toe + +Laten we proberen een iets betere nauwkeurigheid te behalen met een Support Vector Classifier. + +1. Voeg een komma toe na het K-Neighbors item en voeg vervolgens deze regel toe: + + ```python + 'SVC': SVC(), + ``` + + Het resultaat is behoorlijk goed! + + ```output + Accuracy (train) for SVC: 83.2% + precision recall f1-score support + + chinese 0.79 0.74 0.76 242 + indian 0.88 0.90 0.89 234 + japanese 0.87 0.81 0.84 254 + korean 0.91 0.82 0.86 242 + thai 0.74 0.90 0.81 227 + + accuracy 0.83 1199 + macro avg 0.84 0.83 0.83 1199 + weighted avg 0.84 0.83 0.83 1199 + ``` + + ✅ Leer meer over [Support-Vectors](https://scikit-learn.org/stable/modules/svm.html#svm) + +## Ensemble Classifiers + +Laten we het pad helemaal volgen, ook al was de vorige test behoorlijk goed. Laten we enkele 'Ensemble Classifiers' proberen, specifiek Random Forest en AdaBoost: + +```python + 'RFST': RandomForestClassifier(n_estimators=100), + 'ADA': AdaBoostClassifier(n_estimators=100) +``` + +Het resultaat is erg goed, vooral voor Random Forest: + +```output +Accuracy (train) for RFST: 84.5% + precision recall f1-score support + + chinese 0.80 0.77 0.78 242 + indian 0.89 0.92 0.90 234 + japanese 0.86 0.84 0.85 254 + korean 0.88 0.83 0.85 242 + thai 0.80 0.87 0.83 227 + + accuracy 0.84 1199 + macro avg 0.85 0.85 0.84 1199 +weighted avg 0.85 0.84 0.84 1199 + +Accuracy (train) for ADA: 72.4% + precision recall f1-score support + + chinese 0.64 0.49 0.56 242 + indian 0.91 0.83 0.87 234 + japanese 0.68 0.69 0.69 254 + korean 0.73 0.79 0.76 242 + thai 0.67 0.83 0.74 227 + + accuracy 0.72 1199 + macro avg 0.73 0.73 0.72 1199 +weighted avg 0.73 0.72 0.72 1199 +``` + +✅ Leer meer over [Ensemble Classifiers](https://scikit-learn.org/stable/modules/ensemble.html) + +Deze methode van Machine Learning "combineert de voorspellingen van verschillende basisestimators" om de kwaliteit van het model te verbeteren. In ons voorbeeld hebben we Random Trees en AdaBoost gebruikt. + +- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), een gemiddelde methode, bouwt een 'forest' van 'decision trees' met willekeurigheid om overfitting te voorkomen. De n_estimators parameter wordt ingesteld op het aantal bomen. + +- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) past een classifier toe op een dataset en past vervolgens kopieën van die classifier toe op dezelfde dataset. Het richt zich op de gewichten van verkeerd geclassificeerde items en past de fit aan voor de volgende classifier om correcties aan te brengen. + +--- + +## 🚀Uitdaging + +Elk van deze technieken heeft een groot aantal parameters die je kunt aanpassen. Onderzoek de standaardparameters van elk en denk na over wat het aanpassen van deze parameters zou betekenen voor de kwaliteit van het model. + +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Review & Zelfstudie + +Er is veel jargon in deze lessen, dus neem even de tijd om [deze lijst](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) met nuttige terminologie te bekijken! + +## Opdracht + +[Parameter spelen](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 zijn 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 diff --git a/translations/nl/4-Classification/3-Classifiers-2/assignment.md b/translations/nl/4-Classification/3-Classifiers-2/assignment.md new file mode 100644 index 00000000..318e0e15 --- /dev/null +++ b/translations/nl/4-Classification/3-Classifiers-2/assignment.md @@ -0,0 +1,25 @@ + +# Parameter Spel + +## Instructies + +Er zijn veel parameters die standaard worden ingesteld bij het werken met deze classifiers. Intellisense in VS Code kan je helpen om ze te verkennen. Kies een van de ML-classificatietechnieken uit deze les en train de modellen opnieuw door verschillende parameterwaarden aan te passen. Maak een notebook waarin je uitlegt waarom sommige wijzigingen de modelkwaliteit verbeteren, terwijl andere deze juist verslechteren. Wees gedetailleerd in je antwoord. + +## Rubric + +| Criteria | Uitmuntend | Voldoende | Verbetering Nodig | +| -------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | ----------------------------- | +| | Een notebook wordt gepresenteerd met een volledig opgebouwde classifier en de parameters aangepast en wijzigingen uitgelegd in tekstvakken | Een notebook wordt gedeeltelijk gepresenteerd of slecht uitgelegd | Een notebook bevat fouten of gebreken | + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/4-Classification/3-Classifiers-2/solution/Julia/README.md b/translations/nl/4-Classification/3-Classifiers-2/solution/Julia/README.md new file mode 100644 index 00000000..904d7ca0 --- /dev/null +++ b/translations/nl/4-Classification/3-Classifiers-2/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/4-Classification/4-Applied/README.md b/translations/nl/4-Classification/4-Applied/README.md new file mode 100644 index 00000000..fbe21169 --- /dev/null +++ b/translations/nl/4-Classification/4-Applied/README.md @@ -0,0 +1,328 @@ + +# Bouw een Webapplicatie voor Cuisines Aanbevelingen + +In deze les ga je een classificatiemodel bouwen met behulp van enkele technieken die je in eerdere lessen hebt geleerd, en met de dataset van heerlijke gerechten die in deze serie wordt gebruikt. Daarnaast bouw je een kleine webapplicatie om een opgeslagen model te gebruiken, waarbij je gebruik maakt van Onnx's web runtime. + +Een van de meest praktische toepassingen van machine learning is het bouwen van aanbevelingssystemen, en vandaag kun je de eerste stap in die richting zetten! + +[![Presentatie van deze webapp](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "Applied ML") + +> 🎥 Klik op de afbeelding hierboven voor een video: Jen Looper bouwt een webapp met geclassificeerde gerechten data + +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +In deze les leer je: + +- Hoe je een model bouwt en opslaat als een Onnx-model +- Hoe je Netron gebruikt om het model te inspecteren +- Hoe je je model gebruikt in een webapplicatie voor inferentie + +## Bouw je model + +Het bouwen van toegepaste ML-systemen is een belangrijk onderdeel van het benutten van deze technologieën voor je bedrijfsprocessen. Je kunt modellen gebruiken binnen je webapplicaties (en dus ook offline indien nodig) door gebruik te maken van Onnx. + +In een [vorige les](../../3-Web-App/1-Web-App/README.md) heb je een regressiemodel gebouwd over UFO-waarnemingen, het "gepickled" en gebruikt in een Flask-app. Hoewel deze architectuur erg nuttig is om te kennen, is het een full-stack Python-app, en je vereisten kunnen het gebruik van een JavaScript-applicatie omvatten. + +In deze les kun je een eenvoudig JavaScript-gebaseerd systeem bouwen voor inferentie. Maar eerst moet je een model trainen en converteren voor gebruik met Onnx. + +## Oefening - train classificatiemodel + +Train eerst een classificatiemodel met behulp van de opgeschoonde gerechten dataset die we hebben gebruikt. + +1. Begin met het importeren van nuttige bibliotheken: + + ```python + !pip install skl2onnx + import pandas as pd + ``` + + Je hebt '[skl2onnx](https://onnx.ai/sklearn-onnx/)' nodig om je Scikit-learn model te converteren naar Onnx-formaat. + +1. Werk vervolgens met je data op dezelfde manier als in eerdere lessen, door een CSV-bestand te lezen met `read_csv()`: + + ```python + data = pd.read_csv('../data/cleaned_cuisines.csv') + data.head() + ``` + +1. Verwijder de eerste twee onnodige kolommen en sla de resterende data op als 'X': + + ```python + X = data.iloc[:,2:] + X.head() + ``` + +1. Sla de labels op als 'y': + + ```python + y = data[['cuisine']] + y.head() + + ``` + +### Start de trainingsroutine + +We gebruiken de 'SVC'-bibliotheek die een goede nauwkeurigheid heeft. + +1. Importeer de juiste bibliotheken van Scikit-learn: + + ```python + from sklearn.model_selection import train_test_split + from sklearn.svm import SVC + from sklearn.model_selection import cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report + ``` + +1. Splits de trainings- en testsets: + + ```python + X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3) + ``` + +1. Bouw een SVC-classificatiemodel zoals je deed in de vorige les: + + ```python + model = SVC(kernel='linear', C=10, probability=True,random_state=0) + model.fit(X_train,y_train.values.ravel()) + ``` + +1. Test nu je model door `predict()` aan te roepen: + + ```python + y_pred = model.predict(X_test) + ``` + +1. Print een classificatierapport om de kwaliteit van het model te controleren: + + ```python + print(classification_report(y_test,y_pred)) + ``` + + Zoals we eerder zagen, is de nauwkeurigheid goed: + + ```output + precision recall f1-score support + + chinese 0.72 0.69 0.70 257 + indian 0.91 0.87 0.89 243 + japanese 0.79 0.77 0.78 239 + korean 0.83 0.79 0.81 236 + thai 0.72 0.84 0.78 224 + + accuracy 0.79 1199 + macro avg 0.79 0.79 0.79 1199 + weighted avg 0.79 0.79 0.79 1199 + ``` + +### Converteer je model naar Onnx + +Zorg ervoor dat je de conversie uitvoert met het juiste aantal tensors. Deze dataset heeft 380 ingrediënten vermeld, dus je moet dat aantal noteren in `FloatTensorType`: + +1. Converteer met een tensor aantal van 380. + + ```python + from skl2onnx import convert_sklearn + from skl2onnx.common.data_types import FloatTensorType + + initial_type = [('float_input', FloatTensorType([None, 380]))] + options = {id(model): {'nocl': True, 'zipmap': False}} + ``` + +1. Maak de onx en sla op als een bestand **model.onnx**: + + ```python + onx = convert_sklearn(model, initial_types=initial_type, options=options) + with open("./model.onnx", "wb") as f: + f.write(onx.SerializeToString()) + ``` + + > Let op, je kunt [opties](https://onnx.ai/sklearn-onnx/parameterized.html) doorgeven in je conversiescript. In dit geval hebben we 'nocl' ingesteld op True en 'zipmap' op False. Omdat dit een classificatiemodel is, heb je de optie om ZipMap te verwijderen, wat een lijst van woordenboeken produceert (niet nodig). `nocl` verwijst naar klasse-informatie die in het model wordt opgenomen. Verminder de grootte van je model door `nocl` op 'True' te zetten. + +Door het hele notebook uit te voeren, wordt nu een Onnx-model gebouwd en opgeslagen in deze map. + +## Bekijk je model + +Onnx-modellen zijn niet erg zichtbaar in Visual Studio Code, maar er is een zeer goede gratis software die veel onderzoekers gebruiken om het model te visualiseren en te controleren of het correct is gebouwd. Download [Netron](https://github.com/lutzroeder/Netron) en open je model.onnx-bestand. Je kunt je eenvoudige model visualiseren, met zijn 380 inputs en classifier vermeld: + +![Netron visual](../../../../4-Classification/4-Applied/images/netron.png) + +Netron is een handig hulpmiddel om je modellen te bekijken. + +Nu ben je klaar om dit handige model te gebruiken in een webapplicatie. Laten we een app bouwen die van pas komt wanneer je in je koelkast kijkt en probeert te bepalen welke combinatie van je overgebleven ingrediënten je kunt gebruiken om een bepaald gerecht te koken, zoals bepaald door je model. + +## Bouw een aanbevelingswebapplicatie + +Je kunt je model direct gebruiken in een webapplicatie. Deze architectuur stelt je ook in staat om het lokaal en zelfs offline te draaien indien nodig. Begin met het maken van een `index.html`-bestand in dezelfde map waar je je `model.onnx`-bestand hebt opgeslagen. + +1. Voeg in dit bestand _index.html_ de volgende markup toe: + + ```html + + +
                                + Cuisine Matcher +
                                + + ... + + + ``` + +1. Voeg nu binnen de `body`-tags een beetje markup toe om een lijst met selectievakjes weer te geven die enkele ingrediënten weerspiegelen: + + ```html +

                                Check your refrigerator. What can you create?

                                +
                                +
                                + + +
                                + +
                                + + +
                                + +
                                + + +
                                + +
                                + + +
                                + +
                                + + +
                                + +
                                + + +
                                + +
                                + + +
                                +
                                +
                                + +
                                + ``` + + Merk op dat elk selectievakje een waarde heeft. Dit weerspiegelt de index waar het ingrediënt wordt gevonden volgens de dataset. Appel, bijvoorbeeld, in deze alfabetische lijst, bezet de vijfde kolom, dus de waarde is '4' omdat we beginnen met tellen vanaf 0. Je kunt de [ingrediënten spreadsheet](../../../../4-Classification/data/ingredient_indexes.csv) raadplegen om de index van een bepaald ingrediënt te ontdekken. + + Ga verder met je werk in het index.html-bestand en voeg een scriptblok toe waar het model wordt aangeroepen na de laatste sluitende ``. + +1. Importeer eerst de [Onnx Runtime](https://www.onnxruntime.ai/): + + ```html + + ``` + + > Onnx Runtime wordt gebruikt om je Onnx-modellen te laten draaien op een breed scala aan hardwareplatforms, inclusief optimalisaties en een API om te gebruiken. + +1. Zodra de Runtime is geïnstalleerd, kun je deze aanroepen: + + ```html + + ``` + +In deze code gebeuren er verschillende dingen: + +1. Je hebt een array van 380 mogelijke waarden (1 of 0) gemaakt die worden ingesteld en naar het model worden gestuurd voor inferentie, afhankelijk van of een ingrediënt selectievakje is aangevinkt. +2. Je hebt een array van selectievakjes gemaakt en een manier om te bepalen of ze zijn aangevinkt in een `init`-functie die wordt aangeroepen wanneer de applicatie start. Wanneer een selectievakje is aangevinkt, wordt de `ingredients`-array aangepast om het gekozen ingrediënt weer te geven. +3. Je hebt een `testCheckboxes`-functie gemaakt die controleert of een selectievakje is aangevinkt. +4. Je gebruikt de `startInference`-functie wanneer de knop wordt ingedrukt en, als een selectievakje is aangevinkt, start je inferentie. +5. De inferentieroutine omvat: + 1. Het instellen van een asynchrone laadactie van het model + 2. Het maken van een Tensor-structuur om naar het model te sturen + 3. Het maken van 'feeds' die de `float_input` input weerspiegelt die je hebt gemaakt bij het trainen van je model (je kunt Netron gebruiken om die naam te verifiëren) + 4. Het sturen van deze 'feeds' naar het model en wachten op een reactie + +## Test je applicatie + +Open een terminalsessie in Visual Studio Code in de map waar je index.html-bestand zich bevindt. Zorg ervoor dat je [http-server](https://www.npmjs.com/package/http-server) globaal hebt geïnstalleerd en typ `http-server` bij de prompt. Er zou een localhost moeten openen en je kunt je webapp bekijken. Controleer welk gerecht wordt aanbevolen op basis van verschillende ingrediënten: + +![ingredient web app](../../../../4-Classification/4-Applied/images/web-app.png) + +Gefeliciteerd, je hebt een 'aanbevelings'-webapp gemaakt met een paar velden. Neem de tijd om dit systeem verder uit te bouwen! +## 🚀Uitdaging + +Je webapp is erg minimaal, dus blijf deze uitbreiden met ingrediënten en hun indexen uit de [ingredient_indexes](../../../../4-Classification/data/ingredient_indexes.csv) data. Welke smaakcombinaties werken om een bepaald nationaal gerecht te creëren? + +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Review & Zelfstudie + +Hoewel deze les slechts kort ingaat op het nut van het creëren van een aanbevelingssysteem voor voedselingrediënten, is dit gebied van ML-toepassingen zeer rijk aan voorbeelden. Lees meer over hoe deze systemen worden gebouwd: + +- https://www.sciencedirect.com/topics/computer-science/recommendation-engine +- https://www.technologyreview.com/2014/08/25/171547/the-ultimate-challenge-for-recommendation-engines/ +- https://www.technologyreview.com/2015/03/23/168831/everything-is-a-recommendation/ + +## Opdracht + +[Maak een nieuwe aanbeveling](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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/4-Classification/4-Applied/assignment.md b/translations/nl/4-Classification/4-Applied/assignment.md new file mode 100644 index 00000000..8029b67b --- /dev/null +++ b/translations/nl/4-Classification/4-Applied/assignment.md @@ -0,0 +1,25 @@ + +# Bouw een aanbevelingssysteem + +## Instructies + +Op basis van je oefeningen in deze les weet je nu hoe je een webapplicatie kunt bouwen in JavaScript met behulp van Onnx Runtime en een geconverteerd Onnx-model. Experimenteer met het bouwen van een nieuw aanbevelingssysteem met gegevens uit deze lessen of elders verkregen (geef alsjeblieft de bronvermelding). Je zou bijvoorbeeld een huisdier-aanbevelingssysteem kunnen maken op basis van verschillende persoonlijkheidskenmerken, of een muziekgenre-aanbevelingssysteem gebaseerd op iemands stemming. Wees creatief! + +## Rubric + +| Criteria | Uitmuntend | Voldoende | Verbetering nodig | +| -------- | ---------------------------------------------------------------------- | ------------------------------------- | --------------------------------- | +| | Een webapplicatie en notebook worden gepresenteerd, beide goed gedocumenteerd en werkend | Eén van de twee ontbreekt of heeft gebreken | Beide ontbreken of hebben gebreken | + +--- + +**Disclaimer**: +Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we ons best doen voor nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/4-Classification/README.md b/translations/nl/4-Classification/README.md new file mode 100644 index 00000000..1b8ccb7c --- /dev/null +++ b/translations/nl/4-Classification/README.md @@ -0,0 +1,41 @@ + +# Aan de slag met classificatie + +## Regionaal onderwerp: Heerlijke Aziatische en Indiase gerechten 🍜 + +In Azië en India zijn de voedseltradities enorm divers en ontzettend lekker! Laten we gegevens bekijken over regionale keukens om hun ingrediënten beter te begrijpen. + +![Thaise voedselverkoper](../../../4-Classification/images/thai-food.jpg) +> Foto door Lisheng Chang op Unsplash + +## Wat je zult leren + +In dit gedeelte bouw je voort op je eerdere studie van regressie en leer je over andere classificatiemethoden die je kunt gebruiken om de gegevens beter te begrijpen. + +> Er zijn handige low-code tools die je kunnen helpen bij het werken met classificatiemodellen. Probeer [Azure ML voor deze taak](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +## Lessen + +1. [Introductie tot classificatie](1-Introduction/README.md) +2. [Meer classificatiemethoden](2-Classifiers-1/README.md) +3. [Nog andere classificatiemethoden](3-Classifiers-2/README.md) +4. [Toegepaste ML: bouw een webapp](4-Applied/README.md) + +## Credits + +"Aan de slag met classificatie" is geschreven met ♥️ door [Cassie Breviu](https://www.twitter.com/cassiebreviu) en [Jen Looper](https://www.twitter.com/jenlooper) + +De dataset over heerlijke gerechten is afkomstig van [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines). + +--- + +**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 eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/5-Clustering/1-Visualize/README.md b/translations/nl/5-Clustering/1-Visualize/README.md new file mode 100644 index 00000000..33ca36a6 --- /dev/null +++ b/translations/nl/5-Clustering/1-Visualize/README.md @@ -0,0 +1,347 @@ + +# Introductie tot clustering + +Clustering is een type [Ongecontroleerd Leren](https://wikipedia.org/wiki/Unsupervised_learning) dat ervan uitgaat dat een dataset niet gelabeld is of dat de invoer niet gekoppeld is aan vooraf gedefinieerde uitkomsten. Het gebruikt verschillende algoritmen om door niet-gelabelde gegevens te sorteren en groepen te vormen op basis van patronen die het in de gegevens herkent. + +[![No One Like You van PSquare](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](https://youtu.be/ty2advRiWJM "No One Like You van PSquare") + +> 🎥 Klik op de afbeelding hierboven voor een video. Terwijl je machine learning met clustering bestudeert, geniet van wat Nigeriaanse Dance Hall-nummers - dit is een hoog gewaardeerd nummer uit 2014 van PSquare. + +## [Quiz voorafgaand aan de les](https://ff-quizzes.netlify.app/en/ml/) + +### Introductie + +[Clustering](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) is erg nuttig voor data-exploratie. Laten we kijken of het kan helpen trends en patronen te ontdekken in de manier waarop Nigeriaanse luisteraars muziek consumeren. + +✅ Neem een minuut de tijd om na te denken over de toepassingen van clustering. In het dagelijks leven gebeurt clustering bijvoorbeeld wanneer je een stapel wasgoed hebt en de kleding van je gezinsleden moet sorteren 🧦👕👖🩲. In data science gebeurt clustering wanneer je probeert de voorkeuren van een gebruiker te analyseren of de kenmerken van een niet-gelabelde dataset te bepalen. Clustering helpt op een bepaalde manier om chaos te begrijpen, zoals een sokkenla. + +[![Introductie tot ML](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Introductie tot Clustering") + +> 🎥 Klik op de afbeelding hierboven voor een video: MIT's John Guttag introduceert clustering. + +In een professionele omgeving kan clustering worden gebruikt om zaken zoals marktsegmentatie te bepalen, bijvoorbeeld om te achterhalen welke leeftijdsgroepen welke producten kopen. Een andere toepassing zou anomaliedetectie kunnen zijn, bijvoorbeeld om fraude op te sporen in een dataset van creditcardtransacties. Of je kunt clustering gebruiken om tumoren te identificeren in een reeks medische scans. + +✅ Denk een minuut na over hoe je clustering 'in het wild' bent tegengekomen, bijvoorbeeld in een bank-, e-commerce- of zakelijke omgeving. + +> 🎓 Interessant genoeg is clusteranalyse ontstaan in de vakgebieden antropologie en psychologie in de jaren 1930. Kun je je voorstellen hoe het toen werd gebruikt? + +Een andere toepassing zou kunnen zijn het groeperen van zoekresultaten - bijvoorbeeld door winkellinks, afbeeldingen of recensies. Clustering is nuttig wanneer je een grote dataset hebt die je wilt verkleinen en waarop je meer gedetailleerde analyses wilt uitvoeren. De techniek kan worden gebruikt om meer te leren over gegevens voordat andere modellen worden gebouwd. + +✅ Zodra je gegevens zijn georganiseerd in clusters, wijs je ze een cluster-ID toe. Deze techniek kan nuttig zijn om de privacy van een dataset te behouden; je kunt in plaats daarvan verwijzen naar een datapunt via zijn cluster-ID, in plaats van via meer onthullende identificeerbare gegevens. Kun je andere redenen bedenken waarom je een cluster-ID zou gebruiken in plaats van andere elementen van het cluster om het te identificeren? + +Verdiep je kennis van clusteringtechnieken in deze [Learn-module](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott). + +## Aan de slag met clustering + +[Scikit-learn biedt een breed scala](https://scikit-learn.org/stable/modules/clustering.html) aan methoden om clustering uit te voeren. Het type dat je kiest, hangt af van je gebruikssituatie. Volgens de documentatie heeft elke methode verschillende voordelen. Hier is een vereenvoudigde tabel van de methoden die door Scikit-learn worden ondersteund en hun geschikte gebruikssituaties: + +| Methode | Gebruikssituatie | +| :--------------------------- | :-------------------------------------------------------------------- | +| K-Means | algemeen gebruik, inductief | +| Affinity propagation | veel, ongelijke clusters, inductief | +| Mean-shift | veel, ongelijke clusters, inductief | +| Spectral clustering | weinig, gelijke clusters, transductief | +| Ward hiërarchische clustering| veel, beperkte clusters, transductief | +| Agglomerative clustering | veel, beperkt, niet-Euclidische afstanden, transductief | +| DBSCAN | niet-vlakke geometrie, ongelijke clusters, transductief | +| OPTICS | niet-vlakke geometrie, ongelijke clusters met variabele dichtheid, transductief | +| Gaussian mixtures | vlakke geometrie, inductief | +| BIRCH | grote dataset met uitschieters, inductief | + +> 🎓 Hoe we clusters creëren heeft veel te maken met hoe we de datapunten in groepen verzamelen. Laten we wat terminologie uitpakken: +> +> 🎓 ['Transductief' vs. 'inductief'](https://wikipedia.org/wiki/Transduction_(machine_learning)) +> +> Transductieve inferentie is afgeleid van waargenomen trainingsgevallen die worden gekoppeld aan specifieke testgevallen. Inductieve inferentie is afgeleid van trainingsgevallen die worden gekoppeld aan algemene regels die pas daarna worden toegepast op testgevallen. +> +> Een voorbeeld: Stel je hebt een dataset die slechts gedeeltelijk gelabeld is. Sommige dingen zijn 'platen', sommige 'cd's', en sommige zijn blanco. Jouw taak is om labels toe te voegen aan de blanco items. Als je een inductieve aanpak kiest, train je een model dat zoekt naar 'platen' en 'cd's', en pas je die labels toe op je niet-gelabelde gegevens. Deze aanpak zal moeite hebben om dingen te classificeren die eigenlijk 'cassettebandjes' zijn. Een transductieve aanpak daarentegen behandelt deze onbekende gegevens effectiever omdat het werkt om vergelijkbare items samen te groeperen en vervolgens een label toe te passen op een groep. In dit geval kunnen clusters 'ronde muzikale dingen' en 'vierkante muzikale dingen' weerspiegelen. +> +> 🎓 ['Niet-vlakke' vs. 'vlakke' geometrie](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering) +> +> Afgeleid van wiskundige terminologie, verwijst niet-vlakke vs. vlakke geometrie naar de manier waarop afstanden tussen punten worden gemeten, ofwel 'vlak' ([Euclidisch](https://wikipedia.org/wiki/Euclidean_geometry)) of 'niet-vlak' (niet-Euclidisch). +> +>'Vlak' in deze context verwijst naar Euclidische geometrie (delen hiervan worden onderwezen als 'platte' geometrie), en niet-vlak verwijst naar niet-Euclidische geometrie. Wat heeft geometrie te maken met machine learning? Nou, als twee velden die geworteld zijn in wiskunde, moet er een gemeenschappelijke manier zijn om afstanden tussen punten in clusters te meten, en dat kan op een 'vlakke' of 'niet-vlakke' manier, afhankelijk van de aard van de gegevens. [Euclidische afstanden](https://wikipedia.org/wiki/Euclidean_distance) worden gemeten als de lengte van een lijnsegment tussen twee punten. [Niet-Euclidische afstanden](https://wikipedia.org/wiki/Non-Euclidean_geometry) worden gemeten langs een curve. Als je gegevens, gevisualiseerd, niet op een vlak lijken te bestaan, moet je mogelijk een gespecialiseerd algoritme gebruiken om ze te verwerken. +> +![Vlakke vs Niet-vlakke Geometrie Infographic](../../../../5-Clustering/1-Visualize/images/flat-nonflat.png) +> Infographic door [Dasani Madipalli](https://twitter.com/dasani_decoded) +> +> 🎓 ['Afstanden'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf) +> +> Clusters worden gedefinieerd door hun afstandsmatrix, bijvoorbeeld de afstanden tussen punten. Deze afstand kan op verschillende manieren worden gemeten. Euclidische clusters worden gedefinieerd door het gemiddelde van de puntwaarden en bevatten een 'centroid' of middelpunt. Afstanden worden dus gemeten door de afstand tot dat middelpunt. Niet-Euclidische afstanden verwijzen naar 'clustroids', het punt dat het dichtst bij andere punten ligt. Clustroids kunnen op verschillende manieren worden gedefinieerd. +> +> 🎓 ['Beperkt'](https://wikipedia.org/wiki/Constrained_clustering) +> +> [Beperkte Clustering](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) introduceert 'semi-gecontroleerd' leren in deze ongecontroleerde methode. De relaties tussen punten worden gemarkeerd als 'kan niet koppelen' of 'moet koppelen', zodat enkele regels worden opgelegd aan de dataset. +> +>Een voorbeeld: Als een algoritme vrij wordt gelaten op een batch niet-gelabelde of semi-gelabelde gegevens, kunnen de clusters die het produceert van slechte kwaliteit zijn. In het bovenstaande voorbeeld kunnen de clusters 'ronde muzikale dingen', 'vierkante muzikale dingen', 'driehoekige dingen' en 'koekjes' groeperen. Als er enkele beperkingen of regels worden opgelegd ("het item moet van plastic zijn", "het item moet muziek kunnen produceren"), kan dit helpen om het algoritme te 'beperken' om betere keuzes te maken. +> +> 🎓 'Dichtheid' +> +> Gegevens die 'ruis' bevatten, worden beschouwd als 'dicht'. De afstanden tussen punten in elk van zijn clusters kunnen bij nader onderzoek meer of minder dicht, of 'geconcentreerd' blijken te zijn, en daarom moeten deze gegevens worden geanalyseerd met de juiste clusteringmethode. [Dit artikel](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) laat het verschil zien tussen het gebruik van K-Means clustering versus HDBSCAN-algoritmen om een dataset met ongelijke clusterdichtheid te verkennen. + +## Clustering-algoritmen + +Er zijn meer dan 100 clustering-algoritmen, en hun gebruik hangt af van de aard van de gegevens. Laten we enkele van de belangrijkste bespreken: + +- **Hiërarchische clustering**. Als een object wordt geclassificeerd op basis van zijn nabijheid tot een nabijgelegen object, in plaats van tot een verder verwijderd object, worden clusters gevormd op basis van de afstand van hun leden tot en van andere objecten. Scikit-learn's agglomeratieve clustering is hiërarchisch. + + ![Hiërarchische clustering Infographic](../../../../5-Clustering/1-Visualize/images/hierarchical.png) + > Infographic door [Dasani Madipalli](https://twitter.com/dasani_decoded) + +- **Centroid clustering**. Dit populaire algoritme vereist de keuze van 'k', of het aantal clusters dat moet worden gevormd, waarna het algoritme het middelpunt van een cluster bepaalt en gegevens rond dat punt verzamelt. [K-means clustering](https://wikipedia.org/wiki/K-means_clustering) is een populaire versie van centroid clustering. Het middelpunt wordt bepaald door het dichtstbijzijnde gemiddelde, vandaar de naam. De kwadratische afstand tot het cluster wordt geminimaliseerd. + + ![Centroid clustering Infographic](../../../../5-Clustering/1-Visualize/images/centroid.png) + > Infographic door [Dasani Madipalli](https://twitter.com/dasani_decoded) + +- **Distributie-gebaseerde clustering**. Gebaseerd op statistische modellering, richt distributie-gebaseerde clustering zich op het bepalen van de waarschijnlijkheid dat een datapunt tot een cluster behoort, en wijst het dienovereenkomstig toe. Gaussian mixture-methoden behoren tot dit type. + +- **Dichtheid-gebaseerde clustering**. Datapunten worden toegewezen aan clusters op basis van hun dichtheid, of hun groepering rond elkaar. Datapunten ver van de groep worden beschouwd als uitschieters of ruis. DBSCAN, Mean-shift en OPTICS behoren tot dit type clustering. + +- **Raster-gebaseerde clustering**. Voor multidimensionale datasets wordt een raster gemaakt en worden de gegevens verdeeld over de cellen van het raster, waardoor clusters ontstaan. + +## Oefening - cluster je gegevens + +Clustering als techniek wordt sterk ondersteund door goede visualisatie, dus laten we beginnen met het visualiseren van onze muziekgegevens. Deze oefening helpt ons te beslissen welke van de clusteringmethoden we het meest effectief kunnen gebruiken voor de aard van deze gegevens. + +1. Open het [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb)-bestand in deze map. + +1. Importeer het `Seaborn`-pakket voor goede datavisualisatie. + + ```python + !pip install seaborn + ``` + +1. Voeg de muziekinformatie toe uit [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv). Laad een dataframe met enkele gegevens over de nummers. Bereid je voor om deze gegevens te verkennen door de bibliotheken te importeren en de gegevens uit te lezen: + + ```python + import matplotlib.pyplot as plt + import pandas as pd + + df = pd.read_csv("../data/nigerian-songs.csv") + df.head() + ``` + + Bekijk de eerste paar regels van de gegevens: + + | | naam | album | artiest | artiest_top_genre | release_date | lengte | populariteit | dansbaarheid | akoestiek | energie | instrumentaliteit | levendigheid | luidheid | spraakzaamheid | tempo | maatsoort | + | --- | ------------------------ | ---------------------------- | ------------------- | ----------------- | ------------ | ------ | ------------ | ------------ | ----------- | ------ | ----------------- | ------------ | -------- | -------------- | ------- | -------------- | + | 0 | Sparky | Mandy & The Jungle | Cruel Santino | alternatieve r&b | 2019 | 144000 | 48 | 0.666 | 0.851 | 0.42 | 0.534 | 0.11 | -6.699 | 0.0829 | 133.015 | 5 | + | 1 | shuga rush | EVERYTHING YOU HEARD IS TRUE | Odunsi (The Engine) | afropop | 2020 | 89488 | 30 | 0.71 | 0.0822 | 0.683 | 0.000169 | 0.101 | -5.64 | 0.36 | 129.993 | 3 | +| 2 | LITT! | LITT! | AYLØ | indie r&b | 2018 | 207758 | 40 | 0.836 | 0.272 | 0.564 | 0.000537 | 0.11 | -7.127 | 0.0424 | 130.005 | 4 | +| 3 | Confident / Feeling Cool | Enjoy Your Life | Lady Donli | nigerian pop | 2019 | 175135 | 14 | 0.894 | 0.798 | 0.611 | 0.000187 | 0.0964 | -4.961 | 0.113 | 111.087 | 4 | +| 4 | wanted you | rare. | Odunsi (The Engine) | afropop | 2018 | 152049 | 25 | 0.702 | 0.116 | 0.833 | 0.91 | 0.348 | -6.044 | 0.0447 | 105.115 | 4 | + +1. Verkrijg wat informatie over de dataframe door `info()` aan te roepen: + + ```python + df.info() + ``` + + De output ziet er ongeveer zo uit: + + ```output + + RangeIndex: 530 entries, 0 to 529 + Data columns (total 16 columns): + # Column Non-Null Count Dtype + --- ------ -------------- ----- + 0 name 530 non-null object + 1 album 530 non-null object + 2 artist 530 non-null object + 3 artist_top_genre 530 non-null object + 4 release_date 530 non-null int64 + 5 length 530 non-null int64 + 6 popularity 530 non-null int64 + 7 danceability 530 non-null float64 + 8 acousticness 530 non-null float64 + 9 energy 530 non-null float64 + 10 instrumentalness 530 non-null float64 + 11 liveness 530 non-null float64 + 12 loudness 530 non-null float64 + 13 speechiness 530 non-null float64 + 14 tempo 530 non-null float64 + 15 time_signature 530 non-null int64 + dtypes: float64(8), int64(4), object(4) + memory usage: 66.4+ KB + ``` + +1. Controleer dubbel op null-waarden door `isnull()` aan te roepen en te verifiëren dat de som 0 is: + + ```python + df.isnull().sum() + ``` + + Ziet er goed uit: + + ```output + name 0 + album 0 + artist 0 + artist_top_genre 0 + release_date 0 + length 0 + popularity 0 + danceability 0 + acousticness 0 + energy 0 + instrumentalness 0 + liveness 0 + loudness 0 + speechiness 0 + tempo 0 + time_signature 0 + dtype: int64 + ``` + +1. Beschrijf de data: + + ```python + df.describe() + ``` + + | | release_date | length | popularity | danceability | acousticness | energy | instrumentalness | liveness | loudness | speechiness | tempo | time_signature | + | ----- | ------------ | ----------- | ---------- | ------------ | ------------ | -------- | ---------------- | -------- | --------- | ----------- | ---------- | -------------- | + | count | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | + | mean | 2015.390566 | 222298.1698 | 17.507547 | 0.741619 | 0.265412 | 0.760623 | 0.016305 | 0.147308 | -4.953011 | 0.130748 | 116.487864 | 3.986792 | + | std | 3.131688 | 39696.82226 | 18.992212 | 0.117522 | 0.208342 | 0.148533 | 0.090321 | 0.123588 | 2.464186 | 0.092939 | 23.518601 | 0.333701 | + | min | 1998 | 89488 | 0 | 0.255 | 0.000665 | 0.111 | 0 | 0.0283 | -19.362 | 0.0278 | 61.695 | 3 | + | 25% | 2014 | 199305 | 0 | 0.681 | 0.089525 | 0.669 | 0 | 0.07565 | -6.29875 | 0.0591 | 102.96125 | 4 | + | 50% | 2016 | 218509 | 13 | 0.761 | 0.2205 | 0.7845 | 0.000004 | 0.1035 | -4.5585 | 0.09795 | 112.7145 | 4 | + | 75% | 2017 | 242098.5 | 31 | 0.8295 | 0.403 | 0.87575 | 0.000234 | 0.164 | -3.331 | 0.177 | 125.03925 | 4 | + | max | 2020 | 511738 | 73 | 0.966 | 0.954 | 0.995 | 0.91 | 0.811 | 0.582 | 0.514 | 206.007 | 5 | + +> 🤔 Als we werken met clustering, een ongesuperviseerde methode die geen gelabelde data vereist, waarom tonen we deze data dan met labels? In de data-exploratiefase zijn ze handig, maar ze zijn niet noodzakelijk voor de clustering-algoritmes om te werken. Je zou net zo goed de kolomkoppen kunnen verwijderen en naar de data kunnen verwijzen via kolomnummer. + +Bekijk de algemene waarden van de data. Merk op dat populariteit '0' kan zijn, wat aangeeft dat nummers geen ranking hebben. Laten we die binnenkort verwijderen. + +1. Gebruik een staafdiagram om de meest populaire genres te vinden: + + ```python + import seaborn as sns + + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top[:5].index,y=top[:5].values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + + ![most popular](../../../../5-Clustering/1-Visualize/images/popular.png) + +✅ Als je meer topwaarden wilt zien, verander dan de top `[:5]` naar een grotere waarde, of verwijder het om alles te zien. + +Let op, wanneer het topgenre wordt beschreven als 'Missing', betekent dit dat Spotify het niet heeft geclassificeerd, dus laten we het verwijderen. + +1. Verwijder ontbrekende data door deze eruit te filteren: + + ```python + df = df[df['artist_top_genre'] != 'Missing'] + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top.index,y=top.values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + + Controleer nu de genres opnieuw: + + ![most popular](../../../../5-Clustering/1-Visualize/images/all-genres.png) + +1. De top drie genres domineren deze dataset verreweg. Laten we ons concentreren op `afro dancehall`, `afropop` en `nigerian pop`, en daarnaast de dataset filteren om alles met een populariteitswaarde van 0 te verwijderen (wat betekent dat het niet geclassificeerd is met een populariteit in de dataset en kan worden beschouwd als ruis voor onze doeleinden): + + ```python + df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')] + df = df[(df['popularity'] > 0)] + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top.index,y=top.values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + +1. Doe een snelle test om te zien of de data op een bijzonder sterke manier correleert: + + ```python + corrmat = df.corr(numeric_only=True) + f, ax = plt.subplots(figsize=(12, 9)) + sns.heatmap(corrmat, vmax=.8, square=True) + ``` + + ![correlations](../../../../5-Clustering/1-Visualize/images/correlation.png) + + De enige sterke correlatie is tussen `energy` en `loudness`, wat niet al te verrassend is, aangezien luide muziek meestal behoorlijk energiek is. Verder zijn de correlaties relatief zwak. Het zal interessant zijn om te zien wat een clustering-algoritme van deze data kan maken. + + > 🎓 Merk op dat correlatie geen oorzaak-gevolg impliceert! We hebben bewijs van correlatie, maar geen bewijs van oorzaak-gevolg. Een [grappige website](https://tylervigen.com/spurious-correlations) heeft enkele visuals die dit punt benadrukken. + +Is er enige convergentie in deze dataset rond de waargenomen populariteit en dansbaarheid van een nummer? Een FacetGrid laat zien dat er concentrische cirkels zijn die op één lijn liggen, ongeacht het genre. Zou het kunnen dat Nigeriaanse smaken convergeren op een bepaald niveau van dansbaarheid voor dit genre? + +✅ Probeer verschillende datapunten (energie, luidheid, spraakzaamheid) en meer of andere muziekgenres. Wat kun je ontdekken? Bekijk de `df.describe()`-tabel om de algemene spreiding van de datapunten te zien. + +### Oefening - data distributie + +Zijn deze drie genres significant verschillend in de perceptie van hun dansbaarheid, gebaseerd op hun populariteit? + +1. Onderzoek de data distributie van onze top drie genres voor populariteit en dansbaarheid langs een gegeven x- en y-as. + + ```python + sns.set_theme(style="ticks") + + g = sns.jointplot( + data=df, + x="popularity", y="danceability", hue="artist_top_genre", + kind="kde", + ) + ``` + + Je kunt concentrische cirkels ontdekken rond een algemeen convergentiepunt, wat de verdeling van punten laat zien. + + > 🎓 Merk op dat dit voorbeeld een KDE (Kernel Density Estimate) grafiek gebruikt die de data vertegenwoordigt met een continue waarschijnlijkheidsdichtheidscurve. Dit stelt ons in staat om data te interpreteren bij het werken met meerdere distributies. + + Over het algemeen komen de drie genres losjes overeen in termen van hun populariteit en dansbaarheid. Het bepalen van clusters in deze losjes uitgelijnde data zal een uitdaging zijn: + + ![distribution](../../../../5-Clustering/1-Visualize/images/distribution.png) + +1. Maak een scatterplot: + + ```python + sns.FacetGrid(df, hue="artist_top_genre", height=5) \ + .map(plt.scatter, "popularity", "danceability") \ + .add_legend() + ``` + + Een scatterplot van dezelfde assen toont een vergelijkbaar patroon van convergentie. + + ![Facetgrid](../../../../5-Clustering/1-Visualize/images/facetgrid.png) + +Over het algemeen kun je voor clustering scatterplots gebruiken om clusters van data te tonen, dus het beheersen van dit type visualisatie is erg nuttig. In de volgende les zullen we deze gefilterde data gebruiken en k-means clustering toepassen om groepen in deze data te ontdekken die op interessante manieren lijken te overlappen. + +--- + +## 🚀Uitdaging + +Ter voorbereiding op de volgende les, maak een diagram over de verschillende clustering-algoritmes die je zou kunnen ontdekken en gebruiken in een productieomgeving. Welke soorten problemen probeert de clustering op te lossen? + +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Review & Zelfstudie + +Voordat je clustering-algoritmes toepast, zoals we hebben geleerd, is het een goed idee om de aard van je dataset te begrijpen. Lees meer over dit onderwerp [hier](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) + +[Dit nuttige artikel](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) leidt je door de verschillende manieren waarop clustering-algoritmes zich gedragen, gegeven verschillende datavormen. + +## Opdracht + +[Onderzoek andere visualisaties voor clustering](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 kritieke informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/5-Clustering/1-Visualize/assignment.md b/translations/nl/5-Clustering/1-Visualize/assignment.md new file mode 100644 index 00000000..1235c74c --- /dev/null +++ b/translations/nl/5-Clustering/1-Visualize/assignment.md @@ -0,0 +1,25 @@ + +# Onderzoek andere visualisaties voor clustering + +## Instructies + +In deze les heb je gewerkt met enkele visualisatietechnieken om inzicht te krijgen in het plotten van je gegevens ter voorbereiding op clustering. Spreidingsdiagrammen zijn met name nuttig om groepen objecten te vinden. Onderzoek verschillende manieren en verschillende bibliotheken om spreidingsdiagrammen te maken en documenteer je werk in een notebook. Je kunt de gegevens uit deze les, andere lessen of zelf verzamelde gegevens gebruiken (vermeld echter wel de bron in je notebook). Plot enkele gegevens met spreidingsdiagrammen en leg uit wat je ontdekt. + +## Rubriek + +| Criteria | Uitmuntend | Voldoende | Verbetering nodig | +| -------- | ------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------- | +| | Een notebook wordt gepresenteerd met vijf goed gedocumenteerde spreidingsdiagrammen | Een notebook wordt gepresenteerd met minder dan vijf spreidingsdiagrammen en is minder goed gedocumenteerd | Een onvolledig notebook wordt gepresenteerd | + +--- + +**Disclaimer**: +Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we ons best doen voor 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 diff --git a/translations/nl/5-Clustering/1-Visualize/solution/Julia/README.md b/translations/nl/5-Clustering/1-Visualize/solution/Julia/README.md new file mode 100644 index 00000000..427f36c7 --- /dev/null +++ b/translations/nl/5-Clustering/1-Visualize/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/5-Clustering/2-K-Means/README.md b/translations/nl/5-Clustering/2-K-Means/README.md new file mode 100644 index 00000000..865c334a --- /dev/null +++ b/translations/nl/5-Clustering/2-K-Means/README.md @@ -0,0 +1,261 @@ + +# K-Means clustering + +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +In deze les leer je hoe je clusters kunt maken met behulp van Scikit-learn en de Nigeriaanse muziekdataset die je eerder hebt geïmporteerd. We behandelen de basisprincipes van K-Means voor clustering. Onthoud dat, zoals je in de vorige les hebt geleerd, er veel manieren zijn om met clusters te werken en dat de methode die je gebruikt afhankelijk is van je data. We gaan K-Means proberen, omdat dit de meest gebruikte clusteringtechniek is. Laten we beginnen! + +Termen die je zult leren: + +- Silhouettescore +- Elbow-methode +- Inertie +- Variantie + +## Introductie + +[K-Means Clustering](https://wikipedia.org/wiki/K-means_clustering) is een methode afkomstig uit het domein van signaalverwerking. Het wordt gebruikt om groepen data te verdelen en te partitioneren in 'k' clusters met behulp van een reeks observaties. Elke observatie werkt om een gegeven datapunt te groeperen bij het dichtstbijzijnde 'gemiddelde', of het middelpunt van een cluster. + +De clusters kunnen worden gevisualiseerd als [Voronoi-diagrammen](https://wikipedia.org/wiki/Voronoi_diagram), die een punt (of 'zaad') en de bijbehorende regio bevatten. + +![voronoi diagram](../../../../5-Clustering/2-K-Means/images/voronoi.png) + +> infographic door [Jen Looper](https://twitter.com/jenlooper) + +Het K-Means clusteringproces [wordt uitgevoerd in een driestapsproces](https://scikit-learn.org/stable/modules/clustering.html#k-means): + +1. Het algoritme selecteert een k-aantal middelpuntpunten door te sampelen uit de dataset. Daarna herhaalt het: + 1. Het wijst elke sample toe aan het dichtstbijzijnde middelpunt. + 2. Het creëert nieuwe middelpunten door de gemiddelde waarde te nemen van alle samples die aan de vorige middelpunten zijn toegewezen. + 3. Vervolgens berekent het het verschil tussen de nieuwe en oude middelpunten en herhaalt dit totdat de middelpunten gestabiliseerd zijn. + +Een nadeel van het gebruik van K-Means is dat je 'k' moet vaststellen, dat wil zeggen het aantal middelpunten. Gelukkig helpt de 'elbow-methode' om een goede startwaarde voor 'k' te schatten. Je zult dit zo proberen. + +## Vereisten + +Je werkt in het [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/notebook.ipynb) bestand van deze les, dat de data-import en voorlopige schoonmaak bevat die je in de vorige les hebt gedaan. + +## Oefening - voorbereiding + +Begin met opnieuw naar de liedjesdata te kijken. + +1. Maak een boxplot door `boxplot()` aan te roepen voor elke kolom: + + ```python + plt.figure(figsize=(20,20), dpi=200) + + plt.subplot(4,3,1) + sns.boxplot(x = 'popularity', data = df) + + plt.subplot(4,3,2) + sns.boxplot(x = 'acousticness', data = df) + + plt.subplot(4,3,3) + sns.boxplot(x = 'energy', data = df) + + plt.subplot(4,3,4) + sns.boxplot(x = 'instrumentalness', data = df) + + plt.subplot(4,3,5) + sns.boxplot(x = 'liveness', data = df) + + plt.subplot(4,3,6) + sns.boxplot(x = 'loudness', data = df) + + plt.subplot(4,3,7) + sns.boxplot(x = 'speechiness', data = df) + + plt.subplot(4,3,8) + sns.boxplot(x = 'tempo', data = df) + + plt.subplot(4,3,9) + sns.boxplot(x = 'time_signature', data = df) + + plt.subplot(4,3,10) + sns.boxplot(x = 'danceability', data = df) + + plt.subplot(4,3,11) + sns.boxplot(x = 'length', data = df) + + plt.subplot(4,3,12) + sns.boxplot(x = 'release_date', data = df) + ``` + + Deze data is een beetje rommelig: door elke kolom als een boxplot te observeren, kun je uitschieters zien. + + ![outliers](../../../../5-Clustering/2-K-Means/images/boxplots.png) + +Je zou door de dataset kunnen gaan en deze uitschieters kunnen verwijderen, maar dat zou de data behoorlijk minimaliseren. + +1. Kies voorlopig welke kolommen je zult gebruiken voor je clusteringoefening. Kies kolommen met vergelijkbare bereiken en codeer de `artist_top_genre` kolom als numerieke data: + + ```python + from sklearn.preprocessing import LabelEncoder + le = LabelEncoder() + + X = df.loc[:, ('artist_top_genre','popularity','danceability','acousticness','loudness','energy')] + + y = df['artist_top_genre'] + + X['artist_top_genre'] = le.fit_transform(X['artist_top_genre']) + + y = le.transform(y) + ``` + +1. Nu moet je bepalen hoeveel clusters je wilt targeten. Je weet dat er 3 muziekgenres zijn die we uit de dataset hebben gehaald, dus laten we 3 proberen: + + ```python + from sklearn.cluster import KMeans + + nclusters = 3 + seed = 0 + + km = KMeans(n_clusters=nclusters, random_state=seed) + km.fit(X) + + # Predict the cluster for each data point + + y_cluster_kmeans = km.predict(X) + y_cluster_kmeans + ``` + +Je ziet een array die wordt afgedrukt met voorspelde clusters (0, 1 of 2) voor elke rij van de dataframe. + +1. Gebruik deze array om een 'silhouettescore' te berekenen: + + ```python + from sklearn import metrics + score = metrics.silhouette_score(X, y_cluster_kmeans) + score + ``` + +## Silhouettescore + +Zoek naar een silhouettescore dichter bij 1. Deze score varieert van -1 tot 1, en als de score 1 is, is de cluster dicht en goed gescheiden van andere clusters. Een waarde dicht bij 0 vertegenwoordigt overlappende clusters met samples die erg dicht bij de beslissingsgrens van de naburige clusters liggen. [(Bron)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam) + +Onze score is **.53**, dus precies in het midden. Dit geeft aan dat onze data niet bijzonder geschikt is voor dit type clustering, maar laten we doorgaan. + +### Oefening - bouw een model + +1. Importeer `KMeans` en start het clusteringproces. + + ```python + from sklearn.cluster import KMeans + wcss = [] + + for i in range(1, 11): + kmeans = KMeans(n_clusters = i, init = 'k-means++', random_state = 42) + kmeans.fit(X) + wcss.append(kmeans.inertia_) + + ``` + + Er zijn een paar onderdelen die uitleg verdienen. + + > 🎓 range: Dit zijn de iteraties van het clusteringproces + + > 🎓 random_state: "Bepaalt willekeurige nummergeneratie voor middelpuntinitialisatie." [Bron](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans) + + > 🎓 WCSS: "within-cluster sums of squares" meet de gemiddelde kwadratische afstand van alle punten binnen een cluster tot het cluster-middelpunt. [Bron](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce). + + > 🎓 Inertie: K-Means algoritmes proberen middelpunten te kiezen om 'inertie' te minimaliseren, "een maatstaf voor hoe intern coherent clusters zijn." [Bron](https://scikit-learn.org/stable/modules/clustering.html). De waarde wordt bij elke iteratie toegevoegd aan de wcss-variabele. + + > 🎓 k-means++: In [Scikit-learn](https://scikit-learn.org/stable/modules/clustering.html#k-means) kun je de 'k-means++' optimalisatie gebruiken, die "de middelpunten initialiseert om (over het algemeen) ver van elkaar te liggen, wat waarschijnlijk betere resultaten oplevert dan willekeurige initialisatie." + +### Elbow-methode + +Eerder vermoedde je dat, omdat je 3 muziekgenres hebt getarget, je 3 clusters zou moeten kiezen. Maar is dat wel zo? + +1. Gebruik de 'elbow-methode' om dit te controleren. + + ```python + plt.figure(figsize=(10,5)) + sns.lineplot(x=range(1, 11), y=wcss, marker='o', color='red') + plt.title('Elbow') + plt.xlabel('Number of clusters') + plt.ylabel('WCSS') + plt.show() + ``` + + Gebruik de `wcss`-variabele die je in de vorige stap hebt gebouwd om een grafiek te maken die laat zien waar de 'knik' in de elleboog zit, wat het optimale aantal clusters aangeeft. Misschien is het **wel** 3! + + ![elbow method](../../../../5-Clustering/2-K-Means/images/elbow.png) + +## Oefening - toon de clusters + +1. Probeer het proces opnieuw, stel deze keer drie clusters in en toon de clusters als een scatterplot: + + ```python + from sklearn.cluster import KMeans + kmeans = KMeans(n_clusters = 3) + kmeans.fit(X) + labels = kmeans.predict(X) + plt.scatter(df['popularity'],df['danceability'],c = labels) + plt.xlabel('popularity') + plt.ylabel('danceability') + plt.show() + ``` + +1. Controleer de nauwkeurigheid van het model: + + ```python + labels = kmeans.labels_ + + correct_labels = sum(y == labels) + + print("Result: %d out of %d samples were correctly labeled." % (correct_labels, y.size)) + + print('Accuracy score: {0:0.2f}'. format(correct_labels/float(y.size))) + ``` + + De nauwkeurigheid van dit model is niet erg goed, en de vorm van de clusters geeft je een hint waarom. + + ![clusters](../../../../5-Clustering/2-K-Means/images/clusters.png) + + Deze data is te onevenwichtig, te weinig gecorreleerd en er is te veel variatie tussen de kolomwaarden om goed te clusteren. In feite worden de clusters die zich vormen waarschijnlijk sterk beïnvloed of scheefgetrokken door de drie genrecategorieën die we hierboven hebben gedefinieerd. Dat was een leerproces! + + In de documentatie van Scikit-learn kun je zien dat een model zoals dit, met clusters die niet goed afgebakend zijn, een 'variantie'-probleem heeft: + + ![problem models](../../../../5-Clustering/2-K-Means/images/problems.png) + > Infographic van Scikit-learn + +## Variantie + +Variantie wordt gedefinieerd als "het gemiddelde van de kwadratische verschillen ten opzichte van het gemiddelde" [(Bron)](https://www.mathsisfun.com/data/standard-deviation.html). In de context van dit clusteringprobleem verwijst het naar data waarbij de waarden van onze dataset de neiging hebben om te veel af te wijken van het gemiddelde. + +✅ Dit is een goed moment om na te denken over alle manieren waarop je dit probleem zou kunnen oplossen. De data nog wat meer aanpassen? Andere kolommen gebruiken? Een ander algoritme gebruiken? Tip: Probeer [je data te schalen](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) om deze te normaliseren en test andere kolommen. + +> Probeer deze '[variantiecalculator](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)' om het concept wat beter te begrijpen. + +--- + +## 🚀Uitdaging + +Besteed wat tijd aan deze notebook en pas parameters aan. Kun je de nauwkeurigheid van het model verbeteren door de data meer te schonen (bijvoorbeeld uitschieters verwijderen)? Je kunt gewichten gebruiken om bepaalde datasamples meer gewicht te geven. Wat kun je nog meer doen om betere clusters te maken? + +Tip: Probeer je data te schalen. Er is gecommentarieerde code in de notebook die standaard schaling toevoegt om de datakolommen meer op elkaar te laten lijken qua bereik. Je zult merken dat terwijl de silhouettescore daalt, de 'knik' in de ellebooggrafiek gladder wordt. Dit komt omdat het laten staan van de data zonder schaling ervoor zorgt dat data met minder variatie meer gewicht krijgt. Lees hier meer over dit probleem [hier](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226). + +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Review & Zelfstudie + +Bekijk een K-Means Simulator [zoals deze](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). Je kunt deze tool gebruiken om sampledatapunten te visualiseren en de middelpunten te bepalen. Je kunt de willekeurigheid van de data, het aantal clusters en het aantal middelpunten aanpassen. Helpt dit je om een idee te krijgen van hoe de data kan worden gegroepeerd? + +Bekijk ook [deze hand-out over K-Means](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) van Stanford. + +## Opdracht + +[Probeer verschillende clusteringmethoden](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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/5-Clustering/2-K-Means/assignment.md b/translations/nl/5-Clustering/2-K-Means/assignment.md new file mode 100644 index 00000000..b380003a --- /dev/null +++ b/translations/nl/5-Clustering/2-K-Means/assignment.md @@ -0,0 +1,25 @@ + +# Probeer verschillende clusteringmethoden + +## Instructies + +In deze les heb je geleerd over K-Means clustering. Soms is K-Means niet geschikt voor jouw data. Maak een notebook met data uit deze lessen of ergens anders vandaan (vermeld je bron) en laat een andere clusteringmethode zien die GEEN gebruik maakt van K-Means. Wat heb je geleerd? + +## Rubric + +| Criteria | Uitmuntend | Voldoende | Moet Verbeterd Worden | +| -------- | --------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------- | +| | Een notebook wordt gepresenteerd met een goed gedocumenteerd clusteringmodel | Een notebook wordt gepresenteerd zonder goede documentatie en/of onvolledig | Onvolledig werk wordt ingediend | + +--- + +**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 zijn 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 diff --git a/translations/nl/5-Clustering/2-K-Means/solution/Julia/README.md b/translations/nl/5-Clustering/2-K-Means/solution/Julia/README.md new file mode 100644 index 00000000..54a9685d --- /dev/null +++ b/translations/nl/5-Clustering/2-K-Means/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/5-Clustering/README.md b/translations/nl/5-Clustering/README.md new file mode 100644 index 00000000..d4337fb5 --- /dev/null +++ b/translations/nl/5-Clustering/README.md @@ -0,0 +1,42 @@ + +# Clustermodellen voor machine learning + +Clustering is een machine learning-taak waarbij wordt gezocht naar objecten die op elkaar lijken en deze worden gegroepeerd in groepen die clusters worden genoemd. Wat clustering onderscheidt van andere benaderingen in machine learning, is dat alles automatisch gebeurt. Sterker nog, het is eerlijk om te zeggen dat het het tegenovergestelde is van supervised learning. + +## Regionaal onderwerp: clustermodellen voor de muzikale smaak van een Nigeriaans publiek 🎧 + +Het diverse publiek in Nigeria heeft een uiteenlopende muzikale smaak. Met behulp van gegevens die zijn verzameld van Spotify (geïnspireerd door [dit artikel](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421)), gaan we kijken naar populaire muziek in Nigeria. Deze dataset bevat gegevens over verschillende nummers, zoals de 'danceability'-score, 'acousticness', luidheid, 'speechiness', populariteit en energie. Het zal interessant zijn om patronen in deze gegevens te ontdekken! + +![Een draaitafel](../../../5-Clustering/images/turntable.jpg) + +> Foto door Marcela Laskoski op Unsplash + +In deze serie lessen ontdek je nieuwe manieren om gegevens te analyseren met clusteringtechnieken. Clustering is vooral nuttig wanneer je dataset geen labels bevat. Als er wel labels zijn, dan kunnen classificatietechnieken zoals die je in eerdere lessen hebt geleerd, nuttiger zijn. Maar in gevallen waarin je ongelabelde gegevens wilt groeperen, is clustering een geweldige manier om patronen te ontdekken. + +> Er zijn handige low-code tools die je kunnen helpen bij het werken met clustermodellen. Probeer [Azure ML voor deze taak](https://docs.microsoft.com/learn/modules/create-clustering-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +## Lessen + +1. [Introductie tot clustering](1-Visualize/README.md) +2. [K-Means clustering](2-K-Means/README.md) + +## Credits + +Deze lessen zijn geschreven met 🎶 door [Jen Looper](https://www.twitter.com/jenlooper) met behulpzame reviews van [Rishit Dagli](https://rishit_dagli) en [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan). + +De [Nigerian Songs](https://www.kaggle.com/sootersaalu/nigerian-songs-spotify) dataset is afkomstig van Kaggle en verzameld via Spotify. + +Handige K-Means voorbeelden die hebben geholpen bij het maken van deze les zijn onder andere deze [iris-verkenning](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering), deze [introductienotebook](https://www.kaggle.com/prashant111/k-means-clustering-with-python), en dit [hypothetische NGO-voorbeeld](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering). + +--- + +**Disclaimer**: +Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we ons best doen voor nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn 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 diff --git a/translations/nl/6-NLP/1-Introduction-to-NLP/README.md b/translations/nl/6-NLP/1-Introduction-to-NLP/README.md new file mode 100644 index 00000000..cea23112 --- /dev/null +++ b/translations/nl/6-NLP/1-Introduction-to-NLP/README.md @@ -0,0 +1,179 @@ + +# Introductie tot natuurlijke taalverwerking + +Deze les behandelt een korte geschiedenis en belangrijke concepten van *natuurlijke taalverwerking*, een subveld van *computational linguistics*. + +## [Quiz voorafgaand aan de les](https://ff-quizzes.netlify.app/en/ml/) + +## Introductie + +NLP, zoals het vaak wordt genoemd, is een van de bekendste gebieden waar machine learning is toegepast en gebruikt in productie-software. + +✅ Kun je software bedenken die je dagelijks gebruikt en waarschijnlijk wat NLP ingebouwd heeft? Wat dacht je van je tekstverwerkingsprogramma's of mobiele apps die je regelmatig gebruikt? + +Je leert over: + +- **Het idee van talen**. Hoe talen zich hebben ontwikkeld en wat de belangrijkste studiegebieden zijn geweest. +- **Definities en concepten**. Je leert ook definities en concepten over hoe computers tekst verwerken, inclusief parsing, grammatica en het identificeren van zelfstandige naamwoorden en werkwoorden. Er zijn enkele programmeertaken in deze les, en er worden verschillende belangrijke concepten geïntroduceerd die je later in de volgende lessen zult leren coderen. + +## Computational linguistics + +Computational linguistics is een onderzoeks- en ontwikkelingsgebied dat al tientallen jaren bestudeert hoe computers kunnen werken met, en zelfs begrijpen, vertalen en communiceren in talen. Natuurlijke taalverwerking (NLP) is een gerelateerd veld dat zich richt op hoe computers 'natuurlijke', of menselijke, talen kunnen verwerken. + +### Voorbeeld - telefoon dicteren + +Als je ooit tegen je telefoon hebt gedicteerd in plaats van te typen of een virtuele assistent een vraag hebt gesteld, is je spraak omgezet in tekstvorm en vervolgens verwerkt of *geparsed* vanuit de taal die je sprak. De gedetecteerde trefwoorden werden vervolgens verwerkt in een formaat dat de telefoon of assistent kon begrijpen en waarop kon worden gehandeld. + +![begrip](../../../../6-NLP/1-Introduction-to-NLP/images/comprehension.png) +> Echt taalkundig begrip is moeilijk! Afbeelding door [Jen Looper](https://twitter.com/jenlooper) + +### Hoe is deze technologie mogelijk gemaakt? + +Dit is mogelijk omdat iemand een computerprogramma heeft geschreven om dit te doen. Enkele decennia geleden voorspelden sommige sciencefiction-schrijvers dat mensen voornamelijk met hun computers zouden praten en dat de computers altijd precies zouden begrijpen wat ze bedoelden. Helaas bleek het een moeilijker probleem te zijn dan velen hadden gedacht, en hoewel het tegenwoordig een veel beter begrepen probleem is, zijn er aanzienlijke uitdagingen bij het bereiken van 'perfecte' natuurlijke taalverwerking als het gaat om het begrijpen van de betekenis van een zin. Dit is een bijzonder moeilijk probleem als het gaat om het begrijpen van humor of het detecteren van emoties zoals sarcasme in een zin. + +Op dit moment herinner je je misschien schoollessen waarin de leraar de onderdelen van grammatica in een zin behandelde. In sommige landen krijgen studenten grammatica en taalkunde als een apart vak, maar in veel landen worden deze onderwerpen opgenomen als onderdeel van het leren van een taal: ofwel je eerste taal op de basisschool (leren lezen en schrijven) en misschien een tweede taal op de middelbare school. Maak je geen zorgen als je geen expert bent in het onderscheiden van zelfstandige naamwoorden van werkwoorden of bijwoorden van bijvoeglijke naamwoorden! + +Als je moeite hebt met het verschil tussen de *eenvoudige tegenwoordige tijd* en de *tegenwoordige progressieve tijd*, ben je niet de enige. Dit is een uitdaging voor veel mensen, zelfs moedertaalsprekers van een taal. Het goede nieuws is dat computers heel goed zijn in het toepassen van formele regels, en je zult leren code schrijven die een zin kan *parsen* net zo goed als een mens. De grotere uitdaging die je later zult onderzoeken, is het begrijpen van de *betekenis* en *sentiment* van een zin. + +## Vereisten + +Voor deze les is de belangrijkste vereiste dat je de taal van deze les kunt lezen en begrijpen. Er zijn geen wiskundige problemen of vergelijkingen om op te lossen. Hoewel de oorspronkelijke auteur deze les in het Engels heeft geschreven, is deze ook vertaald in andere talen, dus je zou een vertaling kunnen lezen. Er zijn voorbeelden waarin een aantal verschillende talen worden gebruikt (om de verschillende grammaticaregels van verschillende talen te vergelijken). Deze worden *niet* vertaald, maar de verklarende tekst wel, zodat de betekenis duidelijk moet zijn. + +Voor de programmeertaken gebruik je Python en de voorbeelden gebruiken Python 3.8. + +In deze sectie heb je nodig, en gebruik je: + +- **Python 3 begrip**. Begrip van de programmeertaal Python 3, deze les gebruikt invoer, loops, bestand lezen, arrays. +- **Visual Studio Code + extensie**. We gebruiken Visual Studio Code en de Python-extensie. Je kunt ook een Python IDE naar keuze gebruiken. +- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) is een vereenvoudigde tekstverwerkingsbibliotheek voor Python. Volg de instructies op de TextBlob-site om het op je systeem te installeren (installeer ook de corpora, zoals hieronder weergegeven): + + ```bash + pip install -U textblob + python -m textblob.download_corpora + ``` + +> 💡 Tip: Je kunt Python direct uitvoeren in VS Code-omgevingen. Bekijk de [documentatie](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) voor meer informatie. + +## Praten met machines + +De geschiedenis van het proberen computers menselijke taal te laten begrijpen gaat tientallen jaren terug, en een van de vroegste wetenschappers die natuurlijke taalverwerking overwoog was *Alan Turing*. + +### De 'Turing-test' + +Toen Turing in de jaren 50 onderzoek deed naar *kunstmatige intelligentie*, overwoog hij of een gesprekstest kon worden gegeven aan een mens en een computer (via getypte correspondentie) waarbij de mens in het gesprek niet zeker wist of ze met een andere mens of een computer aan het praten waren. + +Als de mens na een bepaalde lengte van het gesprek niet kon bepalen of de antwoorden van een computer kwamen of niet, kon de computer dan worden gezegd te *denken*? + +### De inspiratie - 'het imitatiespel' + +Het idee hiervoor kwam van een gezelschapsspel genaamd *Het Imitatiespel* waarbij een ondervrager alleen in een kamer is en de taak heeft te bepalen welke van twee mensen (in een andere kamer) respectievelijk man en vrouw zijn. De ondervrager kan notities sturen en moet proberen vragen te bedenken waarbij de geschreven antwoorden het geslacht van de mysterieuze persoon onthullen. Natuurlijk proberen de spelers in de andere kamer de ondervrager te misleiden door vragen op een manier te beantwoorden die de ondervrager misleidt of verwart, terwijl ze ook de indruk wekken eerlijk te antwoorden. + +### Het ontwikkelen van Eliza + +In de jaren 60 ontwikkelde een MIT-wetenschapper genaamd *Joseph Weizenbaum* [*Eliza*](https://wikipedia.org/wiki/ELIZA), een computer-'therapeut' die de mens vragen zou stellen en de indruk zou wekken hun antwoorden te begrijpen. Echter, hoewel Eliza een zin kon parsen en bepaalde grammaticale constructies en trefwoorden kon identificeren om een redelijk antwoord te geven, kon niet worden gezegd dat het de zin *begrijpt*. Als Eliza een zin kreeg in het formaat "**Ik ben** verdrietig", zou het woorden in de zin kunnen herschikken en vervangen om de reactie "Hoe lang ben **jij** verdrietig" te vormen. + +Dit gaf de indruk dat Eliza de uitspraak begreep en een vervolgvraag stelde, terwijl het in werkelijkheid de tijd veranderde en enkele woorden toevoegde. Als Eliza geen trefwoord kon identificeren waarvoor het een reactie had, zou het in plaats daarvan een willekeurige reactie geven die van toepassing zou kunnen zijn op veel verschillende uitspraken. Eliza kon gemakkelijk worden misleid, bijvoorbeeld als een gebruiker schreef "**Jij bent** een fiets", zou het kunnen reageren met "Hoe lang ben **ik** een fiets?", in plaats van een meer redelijke reactie. + +[![Chatten met Eliza](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "Chatten met Eliza") + +> 🎥 Klik op de afbeelding hierboven voor een video over het originele ELIZA-programma + +> Opmerking: Je kunt de originele beschrijving van [Eliza](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) gepubliceerd in 1966 lezen als je een ACM-account hebt. Alternatief, lees over Eliza op [wikipedia](https://wikipedia.org/wiki/ELIZA) + +## Oefening - een eenvoudige conversatiebot coderen + +Een conversatiebot, zoals Eliza, is een programma dat gebruikersinput uitlokt en lijkt te begrijpen en intelligent te reageren. In tegenstelling tot Eliza zal onze bot geen verschillende regels hebben die de indruk wekken dat het een intelligent gesprek voert. In plaats daarvan zal onze bot slechts één vaardigheid hebben: het gesprek gaande houden met willekeurige reacties die in bijna elk triviaal gesprek zouden kunnen werken. + +### Het plan + +Je stappen bij het bouwen van een conversatiebot: + +1. Print instructies waarin de gebruiker wordt geadviseerd hoe met de bot te communiceren +2. Start een loop + 1. Accepteer gebruikersinput + 2. Als de gebruiker heeft gevraagd om te stoppen, stop dan + 3. Verwerk gebruikersinput en bepaal de reactie (in dit geval is de reactie een willekeurige keuze uit een lijst met mogelijke generieke reacties) + 4. Print reactie +3. Ga terug naar stap 2 + +### De bot bouwen + +Laten we de bot nu maken. We beginnen met het definiëren van enkele zinnen. + +1. Maak deze bot zelf in Python met de volgende willekeurige reacties: + + ```python + random_responses = ["That is quite interesting, please tell me more.", + "I see. Do go on.", + "Why do you say that?", + "Funny weather we've been having, isn't it?", + "Let's change the subject.", + "Did you catch the game last night?"] + ``` + + Hier is een voorbeeldoutput om je te begeleiden (gebruikersinput staat op de regels die beginnen met `>`): + + ```output + Hello, I am Marvin, the simple robot. + You can end this conversation at any time by typing 'bye' + After typing each answer, press 'enter' + How are you today? + > I am good thanks + That is quite interesting, please tell me more. + > today I went for a walk + Did you catch the game last night? + > I did, but my team lost + Funny weather we've been having, isn't it? + > yes but I hope next week is better + Let's change the subject. + > ok, lets talk about music + Why do you say that? + > because I like music! + Why do you say that? + > bye + It was nice talking to you, goodbye! + ``` + + Een mogelijke oplossing voor de taak is [hier](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/1-Introduction-to-NLP/solution/bot.py) + + ✅ Stop en overweeg + + 1. Denk je dat de willekeurige reacties iemand zouden 'misleiden' om te denken dat de bot hen daadwerkelijk begreep? + 2. Welke functies zou de bot nodig hebben om effectiever te zijn? + 3. Als een bot echt de betekenis van een zin zou kunnen 'begrijpen', zou het dan ook de betekenis van eerdere zinnen in een gesprek moeten 'onthouden'? + +--- + +## 🚀Uitdaging + +Kies een van de "stop en overweeg"-elementen hierboven en probeer deze te implementeren in code of schrijf een oplossing op papier met pseudocode. + +In de volgende les leer je over een aantal andere benaderingen voor het parsen van natuurlijke taal en machine learning. + +## [Quiz na de les](https://ff-quizzes.netlify.app/en/ml/) + +## Review & Zelfstudie + +Bekijk de onderstaande referenties als verdere leesmogelijkheden. + +### Referenties + +1. Schubert, Lenhart, "Computational Linguistics", *The Stanford Encyclopedia of Philosophy* (Spring 2020 Edition), Edward N. Zalta (ed.), URL = . +2. Princeton University "About WordNet." [WordNet](https://wordnet.princeton.edu/). Princeton University. 2010. + +## Opdracht + +[Zoek een bot](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 zijn 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 diff --git a/translations/nl/6-NLP/1-Introduction-to-NLP/assignment.md b/translations/nl/6-NLP/1-Introduction-to-NLP/assignment.md new file mode 100644 index 00000000..f7710536 --- /dev/null +++ b/translations/nl/6-NLP/1-Introduction-to-NLP/assignment.md @@ -0,0 +1,25 @@ + +# Zoek een bot + +## Instructies + +Bots zijn overal. Jouw opdracht: vind er een en adopteer hem! Je kunt ze vinden op websites, in bankapplicaties en aan de telefoon, bijvoorbeeld wanneer je financiële dienstverleners belt voor advies of informatie over je account. Analyseer de bot en kijk of je hem in de war kunt brengen. Als je de bot in de war kunt brengen, waarom denk je dat dat gebeurde? Schrijf een kort verslag over je ervaring. + +## Rubriek + +| Criteria | Uitmuntend | Voldoende | Verbetering nodig | +| -------- | ----------------------------------------------------------------------------------------------------------- | ------------------------------------------ | --------------------- | +| | Een volledige pagina is geschreven, waarin de vermoedelijke botarchitectuur wordt uitgelegd en je ervaring wordt beschreven | Het verslag is onvolledig of niet goed onderzocht | Geen verslag ingediend | + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/6-NLP/2-Tasks/README.md b/translations/nl/6-NLP/2-Tasks/README.md new file mode 100644 index 00000000..5abc8971 --- /dev/null +++ b/translations/nl/6-NLP/2-Tasks/README.md @@ -0,0 +1,228 @@ + +# Veelvoorkomende taken en technieken in natuurlijke taalverwerking + +Voor de meeste *natuurlijke taalverwerking*-taken moet de te verwerken tekst worden opgesplitst, geanalyseerd en de resultaten worden opgeslagen of vergeleken met regels en datasets. Deze taken stellen de programmeur in staat om de _betekenis_ of _intentie_ of alleen de _frequentie_ van termen en woorden in een tekst af te leiden. + +## [Quiz voorafgaand aan de les](https://ff-quizzes.netlify.app/en/ml/) + +Laten we de veelvoorkomende technieken ontdekken die worden gebruikt bij het verwerken van tekst. Gecombineerd met machine learning helpen deze technieken je om grote hoeveelheden tekst efficiënt te analyseren. Voordat je ML toepast op deze taken, is het echter belangrijk om de problemen te begrijpen waarmee een NLP-specialist te maken krijgt. + +## Veelvoorkomende NLP-taken + +Er zijn verschillende manieren om een tekst te analyseren waarmee je werkt. Er zijn taken die je kunt uitvoeren en door deze taken uit te voeren kun je een begrip van de tekst krijgen en conclusies trekken. Meestal voer je deze taken in een bepaalde volgorde uit. + +### Tokenisatie + +Waarschijnlijk is het eerste wat de meeste NLP-algoritmen moeten doen, het splitsen van de tekst in tokens of woorden. Hoewel dit eenvoudig klinkt, kan het lastig zijn om rekening te houden met interpunctie en de verschillende woord- en zinsgrenzen van talen. Je moet mogelijk verschillende methoden gebruiken om de scheidingen te bepalen. + +![tokenisatie](../../../../6-NLP/2-Tasks/images/tokenization.png) +> Tokeniseren van een zin uit **Pride and Prejudice**. Infographic door [Jen Looper](https://twitter.com/jenlooper) + +### Embeddings + +[Woordembeddings](https://wikipedia.org/wiki/Word_embedding) zijn een manier om je tekstgegevens numeriek te converteren. Embeddings worden zo uitgevoerd dat woorden met een vergelijkbare betekenis of woorden die samen worden gebruikt, bij elkaar clusteren. + +![woordembeddings](../../../../6-NLP/2-Tasks/images/embedding.png) +> "I have the highest respect for your nerves, they are my old friends." - Woordembeddings voor een zin uit **Pride and Prejudice**. Infographic door [Jen Looper](https://twitter.com/jenlooper) + +✅ Probeer [deze interessante tool](https://projector.tensorflow.org/) om te experimenteren met woordembeddings. Door op een woord te klikken, worden clusters van vergelijkbare woorden weergegeven: 'toy' clustert met 'disney', 'lego', 'playstation' en 'console'. + +### Parsing & Part-of-speech Tagging + +Elk woord dat is getokeniseerd kan worden getagd als een deel van de spraak - een zelfstandig naamwoord, werkwoord of bijvoeglijk naamwoord. De zin `the quick red fox jumped over the lazy brown dog` kan bijvoorbeeld worden getagd als fox = zelfstandig naamwoord, jumped = werkwoord. + +![parsing](../../../../6-NLP/2-Tasks/images/parse.png) + +> Parsing van een zin uit **Pride and Prejudice**. Infographic door [Jen Looper](https://twitter.com/jenlooper) + +Parsing houdt in dat je herkent welke woorden in een zin met elkaar verbonden zijn - bijvoorbeeld `the quick red fox jumped` is een bijvoeglijk naamwoord-zelfstandig naamwoord-werkwoordreeks die losstaat van de `lazy brown dog`-reeks. + +### Woord- en zinsfrequenties + +Een nuttige procedure bij het analyseren van een grote hoeveelheid tekst is het opbouwen van een woordenboek van elk woord of elke zin van belang en hoe vaak deze voorkomt. De zin `the quick red fox jumped over the lazy brown dog` heeft bijvoorbeeld een woordfrequentie van 2 voor het woord 'the'. + +Laten we een voorbeeldtekst bekijken waarin we de frequentie van woorden tellen. Rudyard Kipling's gedicht The Winners bevat het volgende vers: + +```output +What the moral? Who rides may read. +When the night is thick and the tracks are blind +A friend at a pinch is a friend, indeed, +But a fool to wait for the laggard behind. +Down to Gehenna or up to the Throne, +He travels the fastest who travels alone. +``` + +Omdat zinsfrequenties hoofdlettergevoelig of hoofdletterongevoelig kunnen zijn, heeft de zin `a friend` een frequentie van 2, `the` een frequentie van 6 en `travels` een frequentie van 2. + +### N-grams + +Een tekst kan worden opgesplitst in reeksen van woorden van een bepaalde lengte: een enkel woord (unigram), twee woorden (bigrammen), drie woorden (trigrammen) of een willekeurig aantal woorden (n-grams). + +Bijvoorbeeld, `the quick red fox jumped over the lazy brown dog` met een n-gram score van 2 produceert de volgende n-grams: + +1. the quick +2. quick red +3. red fox +4. fox jumped +5. jumped over +6. over the +7. the lazy +8. lazy brown +9. brown dog + +Het kan gemakkelijker zijn om het te visualiseren als een schuivend venster over de zin. Hier is het voor n-grams van 3 woorden, waarbij het n-gram vetgedrukt is in elke zin: + +1. **the quick red** fox jumped over the lazy brown dog +2. the **quick red fox** jumped over the lazy brown dog +3. the quick **red fox jumped** over the lazy brown dog +4. the quick red **fox jumped over** the lazy brown dog +5. the quick red fox **jumped over the** lazy brown dog +6. the quick red fox jumped **over the lazy** brown dog +7. the quick red fox jumped over **the lazy brown** dog +8. the quick red fox jumped over the **lazy brown dog** + +![n-grams schuivend venster](../../../../6-NLP/2-Tasks/images/n-grams.gif) + +> N-gram waarde van 3: Infographic door [Jen Looper](https://twitter.com/jenlooper) + +### Zelfstandige naamwoordzinnen extractie + +In de meeste zinnen is er een zelfstandig naamwoord dat het onderwerp of object van de zin is. In het Engels is dit vaak te herkennen aan 'a', 'an' of 'the' ervoor. Het identificeren van het onderwerp of object van een zin door 'de zelfstandig naamwoordzin te extraheren' is een veelvoorkomende taak in NLP bij het proberen de betekenis van een zin te begrijpen. + +✅ In de zin "I cannot fix on the hour, or the spot, or the look or the words, which laid the foundation. It is too long ago. I was in the middle before I knew that I had begun.", kun je de zelfstandig naamwoordzinnen identificeren? + +In de zin `the quick red fox jumped over the lazy brown dog` zijn er 2 zelfstandig naamwoordzinnen: **quick red fox** en **lazy brown dog**. + +### Sentimentanalyse + +Een zin of tekst kan worden geanalyseerd op sentiment, of hoe *positief* of *negatief* het is. Sentiment wordt gemeten in *polariteit* en *objectiviteit/subjectiviteit*. Polariteit wordt gemeten van -1.0 tot 1.0 (negatief tot positief) en 0.0 tot 1.0 (meest objectief tot meest subjectief). + +✅ Later leer je dat er verschillende manieren zijn om sentiment te bepalen met behulp van machine learning, maar een manier is om een lijst van woorden en zinnen te hebben die door een menselijke expert als positief of negatief zijn gecategoriseerd en dat model toe te passen op tekst om een polariteitsscore te berekenen. Kun je zien hoe dit in sommige gevallen zou werken en in andere minder goed? + +### Verbuiging + +Verbuiging stelt je in staat om een woord te nemen en de enkelvoudsvorm of meervoudsvorm van het woord te krijgen. + +### Lemmatisatie + +Een *lemma* is de stam of het hoofdwoord voor een reeks woorden, bijvoorbeeld *flew*, *flies*, *flying* hebben een lemma van het werkwoord *fly*. + +Er zijn ook nuttige databases beschikbaar voor de NLP-onderzoeker, met name: + +### WordNet + +[WordNet](https://wordnet.princeton.edu/) is een database van woorden, synoniemen, antoniemen en vele andere details voor elk woord in veel verschillende talen. Het is ongelooflijk nuttig bij het proberen vertalingen, spellingscontrole of taaltools van welke aard dan ook te bouwen. + +## NLP-bibliotheken + +Gelukkig hoef je niet al deze technieken zelf te bouwen, want er zijn uitstekende Python-bibliotheken beschikbaar die het veel toegankelijker maken voor ontwikkelaars die niet gespecialiseerd zijn in natuurlijke taalverwerking of machine learning. De volgende lessen bevatten meer voorbeelden hiervan, maar hier leer je enkele nuttige voorbeelden om je te helpen bij de volgende taak. + +### Oefening - gebruik van de `TextBlob`-bibliotheek + +Laten we een bibliotheek genaamd TextBlob gebruiken, omdat deze handige API's bevat voor het aanpakken van dit soort taken. TextBlob "staat op de schouders van giganten zoals [NLTK](https://nltk.org) en [pattern](https://github.com/clips/pattern), en werkt goed samen met beide." Het heeft een aanzienlijke hoeveelheid ML ingebouwd in zijn API. + +> Opmerking: Een nuttige [Quick Start](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) gids is beschikbaar voor TextBlob en wordt aanbevolen voor ervaren Python-ontwikkelaars. + +Bij het proberen *zelfstandige naamwoordzinnen* te identificeren, biedt TextBlob verschillende opties van extractors om zelfstandig naamwoordzinnen te vinden. + +1. Bekijk `ConllExtractor`. + + ```python + from textblob import TextBlob + from textblob.np_extractors import ConllExtractor + # import and create a Conll extractor to use later + extractor = ConllExtractor() + + # later when you need a noun phrase extractor: + user_input = input("> ") + user_input_blob = TextBlob(user_input, np_extractor=extractor) # note non-default extractor specified + np = user_input_blob.noun_phrases + ``` + + > Wat gebeurt hier? [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) is "Een zelfstandig naamwoordzin-extractor die chunk parsing gebruikt, getraind met de ConLL-2000 trainingscorpus." ConLL-2000 verwijst naar de 2000 Conference on Computational Natural Language Learning. Elk jaar organiseerde de conferentie een workshop om een lastig NLP-probleem aan te pakken, en in 2000 was dat zelfstandig naamwoordchunking. Een model werd getraind op de Wall Street Journal, met "secties 15-18 als trainingsdata (211727 tokens) en sectie 20 als testdata (47377 tokens)". Je kunt de gebruikte procedures bekijken [hier](https://www.clips.uantwerpen.be/conll2000/chunking/) en de [resultaten](https://ifarm.nl/erikt/research/np-chunking.html). + +### Uitdaging - je bot verbeteren met NLP + +In de vorige les heb je een zeer eenvoudige Q&A-bot gebouwd. Nu maak je Marvin wat sympathieker door je invoer te analyseren op sentiment en een reactie te geven die past bij het sentiment. Je moet ook een `noun_phrase` identificeren en ernaar vragen. + +Je stappen bij het bouwen van een betere conversatiebot: + +1. Print instructies waarin de gebruiker wordt geadviseerd hoe met de bot te communiceren. +2. Start een loop: + 1. Accepteer gebruikersinvoer. + 2. Als de gebruiker heeft gevraagd om te stoppen, beëindig dan. + 3. Verwerk de gebruikersinvoer en bepaal een passende sentimentreactie. + 4. Als een zelfstandig naamwoordzin wordt gedetecteerd in het sentiment, maak het meervoud en vraag om meer input over dat onderwerp. + 5. Print de reactie. +3. Ga terug naar stap 2. + +Hier is de codefragment om sentiment te bepalen met TextBlob. Merk op dat er slechts vier *gradaties* van sentimentreactie zijn (je kunt er meer toevoegen als je wilt): + +```python +if user_input_blob.polarity <= -0.5: + response = "Oh dear, that sounds bad. " +elif user_input_blob.polarity <= 0: + response = "Hmm, that's not great. " +elif user_input_blob.polarity <= 0.5: + response = "Well, that sounds positive. " +elif user_input_blob.polarity <= 1: + response = "Wow, that sounds great. " +``` + +Hier is een voorbeeldoutput om je te begeleiden (gebruikersinvoer staat op de regels die beginnen met >): + +```output +Hello, I am Marvin, the friendly robot. +You can end this conversation at any time by typing 'bye' +After typing each answer, press 'enter' +How are you today? +> I am ok +Well, that sounds positive. Can you tell me more? +> I went for a walk and saw a lovely cat +Well, that sounds positive. Can you tell me more about lovely cats? +> cats are the best. But I also have a cool dog +Wow, that sounds great. Can you tell me more about cool dogs? +> I have an old hounddog but he is sick +Hmm, that's not great. Can you tell me more about old hounddogs? +> bye +It was nice talking to you, goodbye! +``` + +Een mogelijke oplossing voor de taak is [hier](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/2-Tasks/solution/bot.py) + +✅ Kenniscontrole + +1. Denk je dat de sympathieke reacties iemand zouden kunnen 'misleiden' om te denken dat de bot hen daadwerkelijk begrijpt? +2. Maakt het identificeren van de zelfstandig naamwoordzin de bot geloofwaardiger? +3. Waarom zou het extraheren van een 'zelfstandig naamwoordzin' uit een zin een nuttige taak zijn? + +--- + +Implementeer de bot in de bovenstaande kenniscontrole en test deze op een vriend. Kan het hen misleiden? Kun je je bot geloofwaardiger maken? + +## 🚀Uitdaging + +Neem een taak uit de bovenstaande kenniscontrole en probeer deze te implementeren. Test de bot op een vriend. Kan het hen misleiden? Kun je je bot geloofwaardiger maken? + +## [Quiz na de les](https://ff-quizzes.netlify.app/en/ml/) + +## Review & Zelfstudie + +In de komende lessen leer je meer over sentimentanalyse. Onderzoek deze interessante techniek in artikelen zoals deze op [KDNuggets](https://www.kdnuggets.com/tag/nlp) + +## Opdracht + +[Laat een bot terugpraten](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 zijn 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 diff --git a/translations/nl/6-NLP/2-Tasks/assignment.md b/translations/nl/6-NLP/2-Tasks/assignment.md new file mode 100644 index 00000000..981f073f --- /dev/null +++ b/translations/nl/6-NLP/2-Tasks/assignment.md @@ -0,0 +1,25 @@ + +# Laat een Bot terugpraten + +## Instructies + +In de afgelopen lessen heb je een eenvoudige bot geprogrammeerd waarmee je kunt chatten. Deze bot geeft willekeurige antwoorden totdat je 'doei' zegt. Kun je de antwoorden iets minder willekeurig maken en reacties activeren als je specifieke dingen zegt, zoals 'waarom' of 'hoe'? Denk eens na over hoe machine learning dit soort werk minder handmatig zou kunnen maken terwijl je je bot uitbreidt. Je kunt de NLTK- of TextBlob-bibliotheken gebruiken om je taken eenvoudiger te maken. + +## Rubric + +| Criteria | Uitmuntend | Voldoende | Moet Verbeteren | +| -------- | -------------------------------------------- | ------------------------------------------------ | ----------------------- | +| | Een nieuw bot.py-bestand wordt gepresenteerd en gedocumenteerd | Een nieuw bot-bestand wordt gepresenteerd, maar bevat fouten | Er wordt geen bestand gepresenteerd | + +--- + +**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 zijn 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 diff --git a/translations/nl/6-NLP/3-Translation-Sentiment/README.md b/translations/nl/6-NLP/3-Translation-Sentiment/README.md new file mode 100644 index 00000000..103ac9b2 --- /dev/null +++ b/translations/nl/6-NLP/3-Translation-Sentiment/README.md @@ -0,0 +1,200 @@ + +# Vertaling en sentimentanalyse met ML + +In de vorige lessen heb je geleerd hoe je een eenvoudige bot kunt bouwen met `TextBlob`, een bibliotheek die machine learning achter de schermen gebruikt om basis NLP-taken uit te voeren, zoals het extraheren van zelfstandige naamwoordgroepen. Een andere belangrijke uitdaging in de computationele taalkunde is het nauwkeurig _vertalen_ van een zin van de ene gesproken of geschreven taal naar de andere. + +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +Vertalen is een zeer complex probleem, mede door het feit dat er duizenden talen zijn, elk met zeer verschillende grammaticaregels. Een benadering is om de formele grammaticaregels van een taal, zoals Engels, om te zetten in een structuur die niet afhankelijk is van een specifieke taal, en deze vervolgens te vertalen door terug te converteren naar een andere taal. Deze aanpak omvat de volgende stappen: + +1. **Identificatie**. Identificeer of label de woorden in de invoertaal als zelfstandige naamwoorden, werkwoorden, enz. +2. **Maak een vertaling**. Maak een directe vertaling van elk woord in het formaat van de doeltaal. + +### Voorbeeldzin, Engels naar Iers + +In het 'Engels' bestaat de zin _I feel happy_ uit drie woorden in de volgorde: + +- **onderwerp** (I) +- **werkwoord** (feel) +- **bijvoeglijk naamwoord** (happy) + +In de 'Ierse' taal heeft dezelfde zin echter een heel andere grammaticale structuur - emoties zoals "*happy*" of "*sad*" worden uitgedrukt als iets dat *op* jou is. + +De Engelse zin `I feel happy` zou in het Iers worden vertaald als `Tá athas orm`. Een *letterlijke* vertaling zou zijn `Happy is upon me`. + +Een Iers spreker die naar het Engels vertaalt, zou zeggen `I feel happy`, niet `Happy is upon me`, omdat ze de betekenis van de zin begrijpen, zelfs als de woorden en zinsstructuur anders zijn. + +De formele volgorde voor de zin in het Iers is: + +- **werkwoord** (Tá of is) +- **bijvoeglijk naamwoord** (athas, of happy) +- **onderwerp** (orm, of upon me) + +## Vertaling + +Een naïef vertaalprogramma zou alleen woorden vertalen en de zinsstructuur negeren. + +✅ Als je als volwassene een tweede (of derde of meer) taal hebt geleerd, ben je misschien begonnen met denken in je moedertaal, waarbij je een concept woord voor woord in je hoofd naar de tweede taal vertaalt en vervolgens je vertaling uitspreekt. Dit lijkt op wat naïeve vertaalprogramma's doen. Het is belangrijk om voorbij deze fase te komen om vloeiendheid te bereiken! + +Naïeve vertaling leidt tot slechte (en soms hilarische) mistranslaties: `I feel happy` wordt letterlijk vertaald naar `Mise bhraitheann athas` in het Iers. Dat betekent (letterlijk) `me feel happy` en is geen geldige Ierse zin. Hoewel Engels en Iers talen zijn die worden gesproken op twee dicht bij elkaar gelegen eilanden, zijn het zeer verschillende talen met verschillende grammaticale structuren. + +> Je kunt enkele video's bekijken over Ierse taalkundige tradities, zoals [deze](https://www.youtube.com/watch?v=mRIaLSdRMMs) + +### Machine learning benaderingen + +Tot nu toe heb je geleerd over de formele regelsbenadering van natuurlijke taalverwerking. Een andere benadering is om de betekenis van de woorden te negeren en _in plaats daarvan machine learning te gebruiken om patronen te detecteren_. Dit kan werken bij vertaling als je veel tekst (een *corpus*) of teksten (*corpora*) hebt in zowel de oorspronkelijke als de doeltaal. + +Bijvoorbeeld, neem het geval van *Pride and Prejudice*, een bekende Engelse roman geschreven door Jane Austen in 1813. Als je het boek in het Engels en een menselijke vertaling van het boek in het *Frans* raadpleegt, kun je zinnen in de ene taal detecteren die _idiomatisch_ zijn vertaald naar de andere. Dat ga je zo doen. + +Bijvoorbeeld, wanneer een Engelse zin zoals `I have no money` letterlijk wordt vertaald naar het Frans, kan het worden `Je n'ai pas de monnaie`. "Monnaie" is een lastig Frans 'false cognate', omdat 'money' en 'monnaie' niet synoniem zijn. Een betere vertaling die een mens zou maken, zou zijn `Je n'ai pas d'argent`, omdat dit beter de betekenis overbrengt dat je geen geld hebt (in plaats van 'kleingeld', wat de betekenis van 'monnaie' is). + +![monnaie](../../../../6-NLP/3-Translation-Sentiment/images/monnaie.png) + +> Afbeelding door [Jen Looper](https://twitter.com/jenlooper) + +Als een ML-model genoeg menselijke vertalingen heeft om een model op te bouwen, kan het de nauwkeurigheid van vertalingen verbeteren door veelvoorkomende patronen te identificeren in teksten die eerder zijn vertaald door deskundige menselijke sprekers van beide talen. + +### Oefening - vertaling + +Je kunt `TextBlob` gebruiken om zinnen te vertalen. Probeer de beroemde eerste zin van **Pride and Prejudice**: + +```python +from textblob import TextBlob + +blob = TextBlob( + "It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife!" +) +print(blob.translate(to="fr")) + +``` + +`TextBlob` doet een behoorlijk goede vertaling: "C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme!". + +Er kan worden gesteld dat de vertaling van TextBlob veel nauwkeuriger is dan de Franse vertaling van het boek uit 1932 door V. Leconte en Ch. Pressoir: + +"C'est une vérité universelle qu'un célibataire pourvu d'une belle fortune doit avoir envie de se marier, et, si peu que l'on sache de son sentiment à cet egard, lorsqu'il arrive dans une nouvelle résidence, cette idée est si bien fixée dans l'esprit de ses voisins qu'ils le considèrent sur-le-champ comme la propriété légitime de l'une ou l'autre de leurs filles." + +In dit geval doet de door ML geïnformeerde vertaling het beter dan de menselijke vertaler, die onnodig woorden in de mond van de oorspronkelijke auteur legt voor 'duidelijkheid'. + +> Wat gebeurt hier? En waarom is TextBlob zo goed in vertalen? Wel, achter de schermen gebruikt het Google Translate, een geavanceerde AI die miljoenen zinnen kan analyseren om de beste strings voor de taak te voorspellen. Er gebeurt hier niets handmatig en je hebt een internetverbinding nodig om `blob.translate` te gebruiken. + +✅ Probeer enkele andere zinnen. Welke is beter, ML of menselijke vertaling? In welke gevallen? + +## Sentimentanalyse + +Een ander gebied waar machine learning zeer goed kan werken, is sentimentanalyse. Een niet-ML-benadering van sentiment is het identificeren van woorden en zinnen die 'positief' en 'negatief' zijn. Vervolgens, gegeven een nieuw stuk tekst, bereken je de totale waarde van de positieve, negatieve en neutrale woorden om het algemene sentiment te identificeren. + +Deze aanpak is gemakkelijk te misleiden, zoals je misschien hebt gezien in de Marvin-taak - de zin `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` is een sarcastische, negatieve zin, maar het eenvoudige algoritme detecteert 'great', 'wonderful', 'glad' als positief en 'waste', 'lost' en 'dark' als negatief. Het algemene sentiment wordt beïnvloed door deze tegenstrijdige woorden. + +✅ Stop even en denk na over hoe we sarcasme overbrengen als menselijke sprekers. Toonhoogte speelt een grote rol. Probeer de zin "Well, that film was awesome" op verschillende manieren te zeggen om te ontdekken hoe je stem betekenis overbrengt. + +### ML-benaderingen + +De ML-benadering zou zijn om handmatig negatieve en positieve tekstverzamelingen te verzamelen - tweets, of filmrecensies, of alles waarbij de mens een score *en* een geschreven mening heeft gegeven. Vervolgens kunnen NLP-technieken worden toegepast op meningen en scores, zodat patronen ontstaan (bijvoorbeeld, positieve filmrecensies bevatten vaker de zin 'Oscar worthy' dan negatieve filmrecensies, of positieve restaurantrecensies zeggen 'gourmet' veel vaker dan 'disgusting'). + +> ⚖️ **Voorbeeld**: Stel dat je in het kantoor van een politicus werkt en er wordt een nieuwe wet besproken. Kiezers kunnen het kantoor e-mails sturen ter ondersteuning of tegen de nieuwe wet. Stel dat je de taak krijgt om de e-mails te lezen en ze in 2 stapels te sorteren, *voor* en *tegen*. Als er veel e-mails zijn, kun je overweldigd raken door ze allemaal te lezen. Zou het niet fijn zijn als een bot ze allemaal voor je kon lezen, begrijpen en je kon vertellen in welke stapel elke e-mail thuishoort? +> +> Een manier om dat te bereiken is door Machine Learning te gebruiken. Je zou het model trainen met een deel van de *tegen* e-mails en een deel van de *voor* e-mails. Het model zou neigen naar het associëren van zinnen en woorden met de tegenkant en de voorkant, *maar het zou geen enkele inhoud begrijpen*, alleen dat bepaalde woorden en patronen vaker voorkomen in een *tegen* of een *voor* e-mail. Je zou het kunnen testen met enkele e-mails die je niet hebt gebruikt om het model te trainen, en kijken of het tot dezelfde conclusie komt als jij. Zodra je tevreden bent met de nauwkeurigheid van het model, kun je toekomstige e-mails verwerken zonder ze allemaal te hoeven lezen. + +✅ Klinkt dit proces als processen die je in eerdere lessen hebt gebruikt? + +## Oefening - sentimentele zinnen + +Sentiment wordt gemeten met een *polariteit* van -1 tot 1, waarbij -1 het meest negatieve sentiment is en 1 het meest positieve. Sentiment wordt ook gemeten met een score van 0 - 1 voor objectiviteit (0) en subjectiviteit (1). + +Bekijk Jane Austen's *Pride and Prejudice* opnieuw. De tekst is hier beschikbaar op [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm). Het onderstaande voorbeeld toont een kort programma dat het sentiment van de eerste en laatste zinnen van het boek analyseert en de polariteit en subjectiviteit/objectiviteitsscore weergeeft. + +Je moet de `TextBlob`-bibliotheek (hierboven beschreven) gebruiken om `sentiment` te bepalen (je hoeft geen eigen sentimentcalculator te schrijven) in de volgende taak. + +```python +from textblob import TextBlob + +quote1 = """It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife.""" + +quote2 = """Darcy, as well as Elizabeth, really loved them; and they were both ever sensible of the warmest gratitude towards the persons who, by bringing her into Derbyshire, had been the means of uniting them.""" + +sentiment1 = TextBlob(quote1).sentiment +sentiment2 = TextBlob(quote2).sentiment + +print(quote1 + " has a sentiment of " + str(sentiment1)) +print(quote2 + " has a sentiment of " + str(sentiment2)) +``` + +Je ziet de volgende uitvoer: + +```output +It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want # of a wife. has a sentiment of Sentiment(polarity=0.20952380952380953, subjectivity=0.27142857142857146) + +Darcy, as well as Elizabeth, really loved them; and they were + both ever sensible of the warmest gratitude towards the persons + who, by bringing her into Derbyshire, had been the means of + uniting them. has a sentiment of Sentiment(polarity=0.7, subjectivity=0.8) +``` + +## Uitdaging - controleer sentimentpolariteit + +Je taak is om, met behulp van sentimentpolariteit, te bepalen of *Pride and Prejudice* meer absoluut positieve zinnen heeft dan absoluut negatieve. Voor deze taak kun je aannemen dat een polariteitsscore van 1 of -1 absoluut positief of negatief is. + +**Stappen:** + +1. Download een [kopie van Pride and Prejudice](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) van Project Gutenberg als een .txt-bestand. Verwijder de metadata aan het begin en einde van het bestand, zodat alleen de originele tekst overblijft. +2. Open het bestand in Python en haal de inhoud op als een string. +3. Maak een TextBlob met de boekstring. +4. Analyseer elke zin in het boek in een lus. + 1. Als de polariteit 1 of -1 is, sla de zin op in een array of lijst van positieve of negatieve berichten. +5. Print aan het einde alle positieve en negatieve zinnen (apart) en het aantal van elk. + +Hier is een voorbeeld [oplossing](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb). + +✅ Kenniscontrole + +1. Het sentiment is gebaseerd op woorden die in de zin worden gebruikt, maar begrijpt de code *de woorden*? +2. Denk je dat de sentimentpolariteit nauwkeurig is, of met andere woorden, ben je het *eens* met de scores? + 1. Ben je het in het bijzonder eens of oneens met de absolute **positieve** polariteit van de volgende zinnen? + * “What an excellent father you have, girls!” said she, when the door was shut. + * “Your examination of Mr. Darcy is over, I presume,” said Miss Bingley; “and pray what is the result?” “I am perfectly convinced by it that Mr. Darcy has no defect. + * How wonderfully these sort of things occur! + * I have the greatest dislike in the world to that sort of thing. + * Charlotte is an excellent manager, I dare say. + * “This is delightful indeed! + * I am so happy! + * Your idea of the ponies is delightful. + 2. De volgende 3 zinnen werden beoordeeld met een absolute positieve sentiment, maar bij nader inzien zijn het geen positieve zinnen. Waarom dacht de sentimentanalyse dat ze positieve zinnen waren? + * Happy shall I be, when his stay at Netherfield is over!” “I wish I could say anything to comfort you,” replied Elizabeth; “but it is wholly out of my power. + * If I could but see you as happy! + * Our distress, my dear Lizzy, is very great. + 3. Ben je het eens of oneens met de absolute **negatieve** polariteit van de volgende zinnen? + - Everybody is disgusted with his pride. + - “I should like to know how he behaves among strangers.” “You shall hear then—but prepare yourself for something very dreadful. + - The pause was to Elizabeth’s feelings dreadful. + - It would be dreadful! + +✅ Elke liefhebber van Jane Austen zal begrijpen dat ze haar boeken vaak gebruikt om de meer belachelijke aspecten van de Engelse Regency-samenleving te bekritiseren. Elizabeth Bennett, de hoofdpersoon in *Pride and Prejudice*, is een scherpe sociale waarnemer (zoals de auteur) en haar taalgebruik is vaak sterk genuanceerd. Zelfs Mr. Darcy (de liefde in het verhaal) merkt Elizabeth's speelse en plagerige gebruik van taal op: "I have had the pleasure of your acquaintance long enough to know that you find great enjoyment in occasionally professing opinions which in fact are not your own." + +--- + +## 🚀Uitdaging + +Kun je Marvin nog beter maken door andere kenmerken uit de gebruikersinvoer te extraheren? + +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Review & Zelfstudie +Er zijn veel manieren om sentiment uit tekst te halen. Denk aan de zakelijke toepassingen die gebruik kunnen maken van deze techniek. Denk ook na over hoe het mis kan gaan. Lees meer over geavanceerde, bedrijfsgerichte systemen die sentiment analyseren, zoals [Azure Text Analysis](https://docs.microsoft.com/azure/cognitive-services/Text-Analytics/how-tos/text-analytics-how-to-sentiment-analysis?tabs=version-3-1?WT.mc_id=academic-77952-leestott). Test enkele van de zinnen uit Pride and Prejudice hierboven en kijk of het nuances kan detecteren. + +## Opdracht + +[Poëtische vrijheid](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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/6-NLP/3-Translation-Sentiment/assignment.md b/translations/nl/6-NLP/3-Translation-Sentiment/assignment.md new file mode 100644 index 00000000..91e65e8e --- /dev/null +++ b/translations/nl/6-NLP/3-Translation-Sentiment/assignment.md @@ -0,0 +1,25 @@ + +# Dichterlijke vrijheid + +## Instructies + +In [dit notebook](https://www.kaggle.com/jenlooper/emily-dickinson-word-frequency) vind je meer dan 500 gedichten van Emily Dickinson die eerder zijn geanalyseerd op sentiment met behulp van Azure tekstanalyse. Gebruik deze dataset om het te analyseren met de technieken die in de les zijn beschreven. Komt het voorgestelde sentiment van een gedicht overeen met de beslissing van de meer geavanceerde Azure-service? Waarom wel of niet, naar jouw mening? Verrast iets je? + +## Rubric + +| Criteria | Uitmuntend | Voldoende | Verbetering nodig | +| -------- | -------------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------ | +| | Een notebook wordt gepresenteerd met een solide analyse van een voorbeeldoutput van de auteur | Het notebook is onvolledig of voert geen analyse uit | Er wordt geen notebook gepresenteerd | + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/6-NLP/3-Translation-Sentiment/solution/Julia/README.md b/translations/nl/6-NLP/3-Translation-Sentiment/solution/Julia/README.md new file mode 100644 index 00000000..5ae681b2 --- /dev/null +++ b/translations/nl/6-NLP/3-Translation-Sentiment/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Disclaimer**: +Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we ons best doen voor nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/6-NLP/3-Translation-Sentiment/solution/R/README.md b/translations/nl/6-NLP/3-Translation-Sentiment/solution/R/README.md new file mode 100644 index 00000000..8a59361a --- /dev/null +++ b/translations/nl/6-NLP/3-Translation-Sentiment/solution/R/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Disclaimer**: +Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we ons best doen voor nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/6-NLP/4-Hotel-Reviews-1/README.md b/translations/nl/6-NLP/4-Hotel-Reviews-1/README.md new file mode 100644 index 00000000..b608544b --- /dev/null +++ b/translations/nl/6-NLP/4-Hotel-Reviews-1/README.md @@ -0,0 +1,417 @@ + +# Sentimentanalyse met hotelbeoordelingen - gegevens verwerken + +In deze sectie gebruik je de technieken uit de vorige lessen om een verkennende gegevensanalyse uit te voeren op een grote dataset. Zodra je een goed begrip hebt van de bruikbaarheid van de verschillende kolommen, leer je: + +- hoe je onnodige kolommen kunt verwijderen +- hoe je nieuwe gegevens kunt berekenen op basis van bestaande kolommen +- hoe je de resulterende dataset kunt opslaan voor gebruik in de laatste uitdaging + +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +### Introductie + +Tot nu toe heb je geleerd dat tekstgegevens heel anders zijn dan numerieke gegevens. Als het tekst is die door een mens is geschreven of gesproken, kan het worden geanalyseerd om patronen en frequenties, sentiment en betekenis te vinden. Deze les introduceert je in een echte dataset met een echte uitdaging: **[515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)**, inclusief een [CC0: Public Domain-licentie](https://creativecommons.org/publicdomain/zero/1.0/). De gegevens zijn afkomstig van Booking.com en verzameld uit openbare bronnen. De maker van de dataset is Jiashen Liu. + +### Voorbereiding + +Wat je nodig hebt: + +* De mogelijkheid om .ipynb-notebooks uit te voeren met Python 3 +* pandas +* NLTK, [dat je lokaal moet installeren](https://www.nltk.org/install.html) +* De dataset, beschikbaar op Kaggle: [515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe). Het bestand is ongeveer 230 MB uitgepakt. Download het naar de root `/data` map die bij deze NLP-lessen hoort. + +## Verkennende gegevensanalyse + +Deze uitdaging gaat ervan uit dat je een hotelaanbevelingsbot bouwt met behulp van sentimentanalyse en gastbeoordelingsscores. De dataset die je gebruikt bevat beoordelingen van 1493 verschillende hotels in 6 steden. + +Met Python, een dataset van hotelbeoordelingen en de sentimentanalyse van NLTK kun je ontdekken: + +* Wat zijn de meest gebruikte woorden en zinnen in beoordelingen? +* Correleren de officiële *tags* die een hotel beschrijven met beoordelingsscores (bijvoorbeeld: zijn er meer negatieve beoordelingen voor een bepaald hotel van *Gezin met jonge kinderen* dan van *Solo reiziger*, wat misschien aangeeft dat het beter geschikt is voor *Solo reizigers*)? +* Stemmen de sentiment scores van NLTK overeen met de numerieke score van de hotelbeoordelaar? + +#### Dataset + +Laten we de dataset verkennen die je hebt gedownload en lokaal hebt opgeslagen. Open het bestand in een editor zoals VS Code of zelfs Excel. + +De headers in de dataset zijn als volgt: + +*Hotel_Address, Additional_Number_of_Scoring, Review_Date, Average_Score, Hotel_Name, Reviewer_Nationality, Negative_Review, Review_Total_Negative_Word_Counts, Total_Number_of_Reviews, Positive_Review, Review_Total_Positive_Word_Counts, Total_Number_of_Reviews_Reviewer_Has_Given, Reviewer_Score, Tags, days_since_review, lat, lng* + +Hier zijn ze gegroepeerd op een manier die gemakkelijker te onderzoeken is: +##### Hotelkolommen + +* `Hotel_Name`, `Hotel_Address`, `lat` (breedtegraad), `lng` (lengtegraad) + * Met *lat* en *lng* kun je een kaart plotten met Python die de hotel locaties toont (misschien kleurgecodeerd voor negatieve en positieve beoordelingen) + * Hotel_Address is niet direct nuttig voor ons, en we zullen dat waarschijnlijk vervangen door een land voor gemakkelijker sorteren en zoeken + +**Hotel Meta-review kolommen** + +* `Average_Score` + * Volgens de datasetmaker is deze kolom de *Gemiddelde score van het hotel, berekend op basis van de laatste opmerking in het afgelopen jaar*. Dit lijkt een ongebruikelijke manier om de score te berekenen, maar het zijn de verzamelde gegevens, dus we nemen het voorlopig voor waar aan. + + ✅ Kun je op basis van de andere kolommen in deze dataset een andere manier bedenken om de gemiddelde score te berekenen? + +* `Total_Number_of_Reviews` + * Het totale aantal beoordelingen dat dit hotel heeft ontvangen - het is niet duidelijk (zonder code te schrijven) of dit verwijst naar de beoordelingen in de dataset. +* `Additional_Number_of_Scoring` + * Dit betekent dat er een beoordelingsscore is gegeven, maar geen positieve of negatieve beoordeling is geschreven door de beoordelaar. + +**Beoordelingskolommen** + +- `Reviewer_Score` + - Dit is een numerieke waarde met maximaal 1 decimaal tussen de minimum- en maximumwaarden 2.5 en 10 + - Het is niet uitgelegd waarom 2.5 de laagst mogelijke score is +- `Negative_Review` + - Als een beoordelaar niets heeft geschreven, bevat dit veld "**No Negative**" + - Merk op dat een beoordelaar een positieve beoordeling kan schrijven in de kolom Negative review (bijvoorbeeld: "er is niets slechts aan dit hotel") +- `Review_Total_Negative_Word_Counts` + - Hogere negatieve woordenaantallen duiden op een lagere score (zonder de sentimentanalyse te controleren) +- `Positive_Review` + - Als een beoordelaar niets heeft geschreven, bevat dit veld "**No Positive**" + - Merk op dat een beoordelaar een negatieve beoordeling kan schrijven in de kolom Positive review (bijvoorbeeld: "er is helemaal niets goeds aan dit hotel") +- `Review_Total_Positive_Word_Counts` + - Hogere positieve woordenaantallen duiden op een hogere score (zonder de sentimentanalyse te controleren) +- `Review_Date` en `days_since_review` + - Een maatstaf voor versheid of veroudering kan worden toegepast op een beoordeling (oudere beoordelingen zijn mogelijk minder accuraat dan nieuwere omdat het hotelmanagement is veranderd, er renovaties zijn uitgevoerd, of er een zwembad is toegevoegd, etc.) +- `Tags` + - Dit zijn korte beschrijvingen die een beoordelaar kan selecteren om het type gast dat ze waren te beschrijven (bijvoorbeeld solo of gezin), het type kamer dat ze hadden, de duur van het verblijf en hoe de beoordeling is ingediend. + - Helaas is het gebruik van deze tags problematisch, zie de sectie hieronder die hun bruikbaarheid bespreekt. + +**Beoordelaar kolommen** + +- `Total_Number_of_Reviews_Reviewer_Has_Given` + - Dit kan een factor zijn in een aanbevelingsmodel, bijvoorbeeld als je kunt bepalen dat meer productieve beoordelaars met honderden beoordelingen eerder negatief dan positief zijn. Echter, de beoordelaar van een specifieke beoordeling wordt niet geïdentificeerd met een unieke code, en kan daarom niet worden gekoppeld aan een set beoordelingen. Er zijn 30 beoordelaars met 100 of meer beoordelingen, maar het is moeilijk te zien hoe dit het aanbevelingsmodel kan helpen. +- `Reviewer_Nationality` + - Sommige mensen denken misschien dat bepaalde nationaliteiten eerder een positieve of negatieve beoordeling geven vanwege een nationale neiging. Wees voorzichtig met het opnemen van dergelijke anekdotische opvattingen in je modellen. Dit zijn nationale (en soms raciale) stereotypen, en elke beoordelaar was een individu die een beoordeling schreef op basis van hun ervaring. Dit kan zijn gefilterd door vele lenzen zoals hun eerdere hotelverblijven, de afgelegde afstand en hun persoonlijke temperament. Denken dat hun nationaliteit de reden was voor een beoordelingsscore is moeilijk te rechtvaardigen. + +##### Voorbeelden + +| Gemiddelde Score | Totaal aantal beoordelingen | Beoordelaar Score | Negatieve
                                Beoordeling | Positieve Beoordeling | Tags | +| ---------------- | --------------------------- | ----------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------- | +| 7.8 | 1945 | 2.5 | Dit is momenteel geen hotel maar een bouwplaats. Ik werd van vroeg in de ochtend tot de hele dag geterroriseerd door onacceptabel bouwlawaai terwijl ik probeerde uit te rusten na een lange reis en werken in de kamer. Mensen werkten de hele dag, bijvoorbeeld met drilboren in de aangrenzende kamers. Ik vroeg om een kamerwissel, maar er was geen stille kamer beschikbaar. Om het nog erger te maken, werd ik te veel in rekening gebracht. Ik checkte 's avonds uit omdat ik een vroege vlucht had en kreeg een passende rekening. Een dag later maakte het hotel een andere afschrijving zonder mijn toestemming bovenop de geboekte prijs. Het is een vreselijke plek. Straf jezelf niet door hier te boeken. | Niets. Vreselijke plek. Blijf weg. | Zakenreis Koppel Standaard Tweepersoonskamer Verbleef 2 nachten | + +Zoals je kunt zien, had deze gast geen prettig verblijf in dit hotel. Het hotel heeft een goede gemiddelde score van 7.8 en 1945 beoordelingen, maar deze beoordelaar gaf het een 2.5 en schreef 115 woorden over hoe negatief hun verblijf was. Als ze niets hadden geschreven in de kolom Positive_Review, zou je kunnen concluderen dat er niets positiefs was, maar ze schreven toch 7 waarschuwende woorden. Als we alleen woorden zouden tellen in plaats van de betekenis of het sentiment van de woorden, zouden we een vertekend beeld kunnen krijgen van de intentie van de beoordelaar. Vreemd genoeg is hun score van 2.5 verwarrend, want als dat hotelverblijf zo slecht was, waarom dan überhaupt punten geven? Bij nader onderzoek van de dataset zul je zien dat de laagst mogelijke score 2.5 is, niet 0. De hoogst mogelijke score is 10. + +##### Tags + +Zoals hierboven vermeld, lijkt het idee om `Tags` te gebruiken om de gegevens te categoriseren in eerste instantie logisch. Helaas zijn deze tags niet gestandaardiseerd, wat betekent dat in een bepaald hotel de opties *Eenpersoonskamer*, *Tweepersoonskamer* en *Dubbele kamer* kunnen zijn, maar in het volgende hotel zijn ze *Deluxe Eenpersoonskamer*, *Classic Queen Kamer* en *Executive King Kamer*. Dit kunnen dezelfde dingen zijn, maar er zijn zoveel variaties dat de keuze wordt: + +1. Proberen alle termen te veranderen naar een enkele standaard, wat erg moeilijk is, omdat het niet duidelijk is wat het conversiepad in elk geval zou zijn (bijvoorbeeld: *Classic eenpersoonskamer* wordt *Eenpersoonskamer*, maar *Superior Queen Kamer met Binnenplaats Tuin of Uitzicht op de Stad* is veel moeilijker te mappen) + +1. We kunnen een NLP-aanpak nemen en de frequentie meten van bepaalde termen zoals *Solo*, *Zakelijke Reiziger* of *Gezin met jonge kinderen* zoals ze van toepassing zijn op elk hotel, en dat meenemen in de aanbeveling. + +Tags zijn meestal (maar niet altijd) een enkel veld dat een lijst bevat van 5 tot 6 komma-gescheiden waarden die overeenkomen met *Type reis*, *Type gasten*, *Type kamer*, *Aantal nachten* en *Type apparaat waarop de beoordeling is ingediend*. Omdat sommige beoordelaars echter niet elk veld invullen (ze kunnen er een leeg laten), zijn de waarden niet altijd in dezelfde volgorde. + +Als voorbeeld, neem *Type groep*. Er zijn 1025 unieke mogelijkheden in dit veld in de `Tags` kolom, en helaas verwijzen slechts enkele naar een groep (sommige zijn het type kamer, etc.). Als je alleen filtert op de waarden die familie vermelden, bevatten de resultaten veel *Familiekamer* type resultaten. Als je de term *met* opneemt, bijvoorbeeld de waarden *Gezin met*, zijn de resultaten beter, met meer dan 80.000 van de 515.000 resultaten die de zinsnede "Gezin met jonge kinderen" of "Gezin met oudere kinderen" bevatten. + +Dit betekent dat de tags-kolom niet volledig nutteloos is, maar het zal wat werk kosten om het bruikbaar te maken. + +##### Gemiddelde hotelscore + +Er zijn een aantal eigenaardigheden of discrepanties in de dataset die ik niet kan verklaren, maar die hier worden geïllustreerd zodat je je ervan bewust bent bij het bouwen van je modellen. Als je het uitvindt, laat het ons weten in de discussiesectie! + +De dataset heeft de volgende kolommen met betrekking tot de gemiddelde score en het aantal beoordelingen: + +1. Hotel_Name +2. Additional_Number_of_Scoring +3. Average_Score +4. Total_Number_of_Reviews +5. Reviewer_Score + +Het hotel met de meeste beoordelingen in deze dataset is *Britannia International Hotel Canary Wharf* met 4789 beoordelingen van de 515.000. Maar als we kijken naar de waarde `Total_Number_of_Reviews` voor dit hotel, is dat 9086. Je zou kunnen concluderen dat er veel meer scores zijn zonder beoordelingen, dus misschien moeten we de waarde in de kolom `Additional_Number_of_Scoring` toevoegen. Die waarde is 2682, en als we die optellen bij 4789 krijgen we 7471, wat nog steeds 1615 tekortschiet ten opzichte van `Total_Number_of_Reviews`. + +Als je de kolom `Average_Score` neemt, zou je kunnen concluderen dat dit het gemiddelde is van de beoordelingen in de dataset, maar de beschrijving van Kaggle is "*Gemiddelde score van het hotel, berekend op basis van de laatste opmerking in het afgelopen jaar*". Dat lijkt niet zo nuttig, maar we kunnen ons eigen gemiddelde berekenen op basis van de beoordelingsscores in de dataset. Als we hetzelfde hotel als voorbeeld nemen, wordt de gemiddelde hotelscore gegeven als 7.1, maar de berekende score (gemiddelde beoordelaarsscore *in* de dataset) is 6.8. Dit is dichtbij, maar niet dezelfde waarde, en we kunnen alleen maar raden dat de scores in de `Additional_Number_of_Scoring` beoordelingen het gemiddelde verhoogden naar 7.1. Helaas, zonder een manier om die bewering te testen of te bewijzen, is het moeilijk om `Average_Score`, `Additional_Number_of_Scoring` en `Total_Number_of_Reviews` te gebruiken of te vertrouwen wanneer ze gebaseerd zijn op, of verwijzen naar, gegevens die we niet hebben. + +Om het nog ingewikkelder te maken, heeft het hotel met het op één na hoogste aantal beoordelingen een berekende gemiddelde score van 8.12 en de dataset `Average_Score` is 8.1. Is deze correcte score toeval of is het eerste hotel een discrepantie? + +Op basis van de mogelijkheid dat deze hotels een uitschieter zijn, en dat misschien de meeste waarden wel kloppen (maar sommige om een of andere reden niet), zullen we in de volgende stap een kort programma schrijven om de waarden in de dataset te verkennen en het juiste gebruik (of niet-gebruik) van de waarden te bepalen. +> 🚨 Een waarschuwing + +> Bij het werken met deze dataset schrijf je code die iets berekent op basis van de tekst, zonder dat je de tekst zelf hoeft te lezen of te analyseren. Dit is de kern van NLP: betekenis of sentiment interpreteren zonder dat een mens dit hoeft te doen. Het is echter mogelijk dat je enkele negatieve beoordelingen zult lezen. Ik raad je aan dit niet te doen, omdat het niet nodig is. Sommige van deze beoordelingen zijn onzinnig of irrelevante negatieve hotelbeoordelingen, zoals "Het weer was niet goed", iets wat buiten de controle van het hotel, of eigenlijk van iedereen, ligt. Maar er is ook een donkere kant aan sommige beoordelingen. Soms zijn de negatieve beoordelingen racistisch, seksistisch of discriminerend op basis van leeftijd. Dit is jammer, maar te verwachten in een dataset die van een openbare website is gehaald. Sommige reviewers laten beoordelingen achter die je smakeloos, ongemakkelijk of verontrustend zou kunnen vinden. Het is beter om de code het sentiment te laten meten dan ze zelf te lezen en van streek te raken. Dat gezegd hebbende, het is een minderheid die dergelijke dingen schrijft, maar ze bestaan wel degelijk. +## Oefening - Data verkennen +### Laad de data + +Dat is genoeg visueel onderzoek naar de data, nu ga je wat code schrijven en antwoorden krijgen! Dit gedeelte maakt gebruik van de pandas-bibliotheek. Je eerste taak is ervoor te zorgen dat je de CSV-data kunt laden en lezen. De pandas-bibliotheek heeft een snelle CSV-loader, en het resultaat wordt geplaatst in een dataframe, zoals in eerdere lessen. De CSV die we laden heeft meer dan een half miljoen rijen, maar slechts 17 kolommen. Pandas biedt veel krachtige manieren om met een dataframe te werken, waaronder de mogelijkheid om bewerkingen op elke rij uit te voeren. + +Vanaf hier in deze les zullen er codefragmenten zijn, enkele uitleg over de code en discussies over wat de resultaten betekenen. Gebruik het meegeleverde _notebook.ipynb_ voor je code. + +Laten we beginnen met het laden van het databestand dat je gaat gebruiken: + +```python +# Load the hotel reviews from CSV +import pandas as pd +import time +# importing time so the start and end time can be used to calculate file loading time +print("Loading data file now, this could take a while depending on file size") +start = time.time() +# df is 'DataFrame' - make sure you downloaded the file to the data folder +df = pd.read_csv('../../data/Hotel_Reviews.csv') +end = time.time() +print("Loading took " + str(round(end - start, 2)) + " seconds") +``` + +Nu de data is geladen, kunnen we enkele bewerkingen uitvoeren. Houd deze code bovenaan je programma voor het volgende deel. + +## Verken de data + +In dit geval is de data al *schoon*, wat betekent dat het klaar is om mee te werken en geen tekens in andere talen bevat die algoritmes, die alleen Engelse tekens verwachten, in de war kunnen brengen. + +✅ Je zou kunnen werken met data die enige initiële verwerking vereist om het te formatteren voordat je NLP-technieken toepast, maar dat is deze keer niet nodig. Als je dat wel moest doen, hoe zou je omgaan met niet-Engelse tekens? + +Neem even de tijd om ervoor te zorgen dat je, zodra de data is geladen, deze met code kunt verkennen. Het is heel verleidelijk om je te richten op de kolommen `Negative_Review` en `Positive_Review`. Ze zijn gevuld met natuurlijke tekst voor je NLP-algoritmes om te verwerken. Maar wacht! Voordat je begint met NLP en sentimentanalyse, moet je de onderstaande code volgen om te controleren of de waarden in de dataset overeenkomen met de waarden die je berekent met pandas. + +## Dataframe-bewerkingen + +De eerste taak in deze les is om te controleren of de volgende aannames correct zijn door code te schrijven die het dataframe onderzoekt (zonder het te wijzigen). + +> Zoals bij veel programmeertaken zijn er meerdere manieren om dit te voltooien, maar een goed advies is om het op de eenvoudigste, gemakkelijkste manier te doen, vooral als het gemakkelijker te begrijpen is wanneer je later naar deze code terugkeert. Met dataframes is er een uitgebreide API die vaak een efficiënte manier biedt om te doen wat je wilt. + +Behandel de volgende vragen als codetaken en probeer ze te beantwoorden zonder naar de oplossing te kijken. + +1. Print de *shape* van het dataframe dat je zojuist hebt geladen (de shape is het aantal rijen en kolommen). +2. Bereken de frequentie van recensent-nationaliteiten: + 1. Hoeveel unieke waarden zijn er in de kolom `Reviewer_Nationality` en wat zijn ze? + 2. Welke recensent-nationaliteit komt het meest voor in de dataset (print land en aantal recensies)? + 3. Wat zijn de volgende top 10 meest voorkomende nationaliteiten en hun frequentie? +3. Wat was het meest beoordeelde hotel voor elk van de top 10 meest voorkomende recensent-nationaliteiten? +4. Hoeveel recensies zijn er per hotel (frequentie van hotel) in de dataset? +5. Hoewel er een kolom `Average_Score` is voor elk hotel in de dataset, kun je ook een gemiddelde score berekenen (het gemiddelde van alle recensent-scores in de dataset voor elk hotel). Voeg een nieuwe kolom toe aan je dataframe met de kolomkop `Calc_Average_Score` die dat berekende gemiddelde bevat. +6. Hebben hotels dezelfde (afgerond op 1 decimaal) `Average_Score` en `Calc_Average_Score`? + 1. Probeer een Python-functie te schrijven die een Series (rij) als argument neemt en de waarden vergelijkt, en een bericht print wanneer de waarden niet gelijk zijn. Gebruik vervolgens de `.apply()`-methode om elke rij met de functie te verwerken. +7. Bereken en print hoeveel rijen de waarde "No Negative" hebben in de kolom `Negative_Review`. +8. Bereken en print hoeveel rijen de waarde "No Positive" hebben in de kolom `Positive_Review`. +9. Bereken en print hoeveel rijen de waarde "No Positive" hebben in de kolom `Positive_Review` **en** de waarde "No Negative" in de kolom `Negative_Review`. + +### Code-antwoorden + +1. Print de *shape* van het dataframe dat je zojuist hebt geladen (de shape is het aantal rijen en kolommen). + + ```python + print("The shape of the data (rows, cols) is " + str(df.shape)) + > The shape of the data (rows, cols) is (515738, 17) + ``` + +2. Bereken de frequentie van recensent-nationaliteiten: + + 1. Hoeveel unieke waarden zijn er in de kolom `Reviewer_Nationality` en wat zijn ze? + 2. Welke recensent-nationaliteit komt het meest voor in de dataset (print land en aantal recensies)? + + ```python + # value_counts() creates a Series object that has index and values in this case, the country and the frequency they occur in reviewer nationality + nationality_freq = df["Reviewer_Nationality"].value_counts() + print("There are " + str(nationality_freq.size) + " different nationalities") + # print first and last rows of the Series. Change to nationality_freq.to_string() to print all of the data + print(nationality_freq) + + There are 227 different nationalities + United Kingdom 245246 + United States of America 35437 + Australia 21686 + Ireland 14827 + United Arab Emirates 10235 + ... + Comoros 1 + Palau 1 + Northern Mariana Islands 1 + Cape Verde 1 + Guinea 1 + Name: Reviewer_Nationality, Length: 227, dtype: int64 + ``` + + 3. Wat zijn de volgende top 10 meest voorkomende nationaliteiten en hun frequentie? + + ```python + print("The highest frequency reviewer nationality is " + str(nationality_freq.index[0]).strip() + " with " + str(nationality_freq[0]) + " reviews.") + # Notice there is a leading space on the values, strip() removes that for printing + # What is the top 10 most common nationalities and their frequencies? + print("The next 10 highest frequency reviewer nationalities are:") + print(nationality_freq[1:11].to_string()) + + The highest frequency reviewer nationality is United Kingdom with 245246 reviews. + The next 10 highest frequency reviewer nationalities are: + United States of America 35437 + Australia 21686 + Ireland 14827 + United Arab Emirates 10235 + Saudi Arabia 8951 + Netherlands 8772 + Switzerland 8678 + Germany 7941 + Canada 7894 + France 7296 + ``` + +3. Wat was het meest beoordeelde hotel voor elk van de top 10 meest voorkomende recensent-nationaliteiten? + + ```python + # What was the most frequently reviewed hotel for the top 10 nationalities + # Normally with pandas you will avoid an explicit loop, but wanted to show creating a new dataframe using criteria (don't do this with large amounts of data because it could be very slow) + for nat in nationality_freq[:10].index: + # First, extract all the rows that match the criteria into a new dataframe + nat_df = df[df["Reviewer_Nationality"] == nat] + # Now get the hotel freq + freq = nat_df["Hotel_Name"].value_counts() + print("The most reviewed hotel for " + str(nat).strip() + " was " + str(freq.index[0]) + " with " + str(freq[0]) + " reviews.") + + The most reviewed hotel for United Kingdom was Britannia International Hotel Canary Wharf with 3833 reviews. + The most reviewed hotel for United States of America was Hotel Esther a with 423 reviews. + The most reviewed hotel for Australia was Park Plaza Westminster Bridge London with 167 reviews. + The most reviewed hotel for Ireland was Copthorne Tara Hotel London Kensington with 239 reviews. + The most reviewed hotel for United Arab Emirates was Millennium Hotel London Knightsbridge with 129 reviews. + The most reviewed hotel for Saudi Arabia was The Cumberland A Guoman Hotel with 142 reviews. + The most reviewed hotel for Netherlands was Jaz Amsterdam with 97 reviews. + The most reviewed hotel for Switzerland was Hotel Da Vinci with 97 reviews. + The most reviewed hotel for Germany was Hotel Da Vinci with 86 reviews. + The most reviewed hotel for Canada was St James Court A Taj Hotel London with 61 reviews. + ``` + +4. Hoeveel recensies zijn er per hotel (frequentie van hotel) in de dataset? + + ```python + # First create a new dataframe based on the old one, removing the uneeded columns + hotel_freq_df = df.drop(["Hotel_Address", "Additional_Number_of_Scoring", "Review_Date", "Average_Score", "Reviewer_Nationality", "Negative_Review", "Review_Total_Negative_Word_Counts", "Positive_Review", "Review_Total_Positive_Word_Counts", "Total_Number_of_Reviews_Reviewer_Has_Given", "Reviewer_Score", "Tags", "days_since_review", "lat", "lng"], axis = 1) + + # Group the rows by Hotel_Name, count them and put the result in a new column Total_Reviews_Found + hotel_freq_df['Total_Reviews_Found'] = hotel_freq_df.groupby('Hotel_Name').transform('count') + + # Get rid of all the duplicated rows + hotel_freq_df = hotel_freq_df.drop_duplicates(subset = ["Hotel_Name"]) + display(hotel_freq_df) + ``` + | Hotel_Name | Total_Number_of_Reviews | Total_Reviews_Found | + | :----------------------------------------: | :---------------------: | :-----------------: | + | Britannia International Hotel Canary Wharf | 9086 | 4789 | + | Park Plaza Westminster Bridge London | 12158 | 4169 | + | Copthorne Tara Hotel London Kensington | 7105 | 3578 | + | ... | ... | ... | + | Mercure Paris Porte d Orleans | 110 | 10 | + | Hotel Wagner | 135 | 10 | + | Hotel Gallitzinberg | 173 | 8 | + + Je zult merken dat de *geteld in de dataset*-resultaten niet overeenkomen met de waarde in `Total_Number_of_Reviews`. Het is onduidelijk of deze waarde in de dataset het totale aantal recensies vertegenwoordigde dat het hotel had, maar niet allemaal werden gescraped, of een andere berekening. `Total_Number_of_Reviews` wordt niet gebruikt in het model vanwege deze onduidelijkheid. + +5. Hoewel er een kolom `Average_Score` is voor elk hotel in de dataset, kun je ook een gemiddelde score berekenen (het gemiddelde van alle recensent-scores in de dataset voor elk hotel). Voeg een nieuwe kolom toe aan je dataframe met de kolomkop `Calc_Average_Score` die dat berekende gemiddelde bevat. Print de kolommen `Hotel_Name`, `Average_Score` en `Calc_Average_Score`. + + ```python + # define a function that takes a row and performs some calculation with it + def get_difference_review_avg(row): + return row["Average_Score"] - row["Calc_Average_Score"] + + # 'mean' is mathematical word for 'average' + df['Calc_Average_Score'] = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) + + # Add a new column with the difference between the two average scores + df["Average_Score_Difference"] = df.apply(get_difference_review_avg, axis = 1) + + # Create a df without all the duplicates of Hotel_Name (so only 1 row per hotel) + review_scores_df = df.drop_duplicates(subset = ["Hotel_Name"]) + + # Sort the dataframe to find the lowest and highest average score difference + review_scores_df = review_scores_df.sort_values(by=["Average_Score_Difference"]) + + display(review_scores_df[["Average_Score_Difference", "Average_Score", "Calc_Average_Score", "Hotel_Name"]]) + ``` + + Je vraagt je misschien af over de waarde `Average_Score` en waarom deze soms verschilt van de berekende gemiddelde score. Omdat we niet kunnen weten waarom sommige waarden overeenkomen, maar andere een verschil hebben, is het in dit geval het veiligst om de recensiescores die we hebben te gebruiken om het gemiddelde zelf te berekenen. Dat gezegd hebbende, zijn de verschillen meestal erg klein. Hier zijn de hotels met de grootste afwijking tussen het datasetgemiddelde en het berekende gemiddelde: + + | Average_Score_Difference | Average_Score | Calc_Average_Score | Hotel_Name | + | :----------------------: | :-----------: | :----------------: | ------------------------------------------: | + | -0.8 | 7.7 | 8.5 | Best Western Hotel Astoria | + | -0.7 | 8.8 | 9.5 | Hotel Stendhal Place Vend me Paris MGallery | + | -0.7 | 7.5 | 8.2 | Mercure Paris Porte d Orleans | + | -0.7 | 7.9 | 8.6 | Renaissance Paris Vendome Hotel | + | -0.5 | 7.0 | 7.5 | Hotel Royal Elys es | + | ... | ... | ... | ... | + | 0.7 | 7.5 | 6.8 | Mercure Paris Op ra Faubourg Montmartre | + | 0.8 | 7.1 | 6.3 | Holiday Inn Paris Montparnasse Pasteur | + | 0.9 | 6.8 | 5.9 | Villa Eugenie | + | 0.9 | 8.6 | 7.7 | MARQUIS Faubourg St Honor Relais Ch teaux | + | 1.3 | 7.2 | 5.9 | Kube Hotel Ice Bar | + + Met slechts 1 hotel met een scoreverschil groter dan 1, betekent dit dat we het verschil waarschijnlijk kunnen negeren en de berekende gemiddelde score kunnen gebruiken. + +6. Bereken en print hoeveel rijen de waarde "No Negative" hebben in de kolom `Negative_Review`. + +7. Bereken en print hoeveel rijen de waarde "No Positive" hebben in de kolom `Positive_Review`. + +8. Bereken en print hoeveel rijen de waarde "No Positive" hebben in de kolom `Positive_Review` **en** de waarde "No Negative" in de kolom `Negative_Review`. + + ```python + # with lambdas: + start = time.time() + no_negative_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" else False , axis=1) + print("Number of No Negative reviews: " + str(len(no_negative_reviews[no_negative_reviews == True].index))) + + no_positive_reviews = df.apply(lambda x: True if x['Positive_Review'] == "No Positive" else False , axis=1) + print("Number of No Positive reviews: " + str(len(no_positive_reviews[no_positive_reviews == True].index))) + + both_no_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" and x['Positive_Review'] == "No Positive" else False , axis=1) + print("Number of both No Negative and No Positive reviews: " + str(len(both_no_reviews[both_no_reviews == True].index))) + end = time.time() + print("Lambdas took " + str(round(end - start, 2)) + " seconds") + + Number of No Negative reviews: 127890 + Number of No Positive reviews: 35946 + Number of both No Negative and No Positive reviews: 127 + Lambdas took 9.64 seconds + ``` + +## Een andere manier + +Een andere manier om items te tellen zonder Lambdas, en gebruik sum om de rijen te tellen: + + ```python + # without lambdas (using a mixture of notations to show you can use both) + start = time.time() + no_negative_reviews = sum(df.Negative_Review == "No Negative") + print("Number of No Negative reviews: " + str(no_negative_reviews)) + + no_positive_reviews = sum(df["Positive_Review"] == "No Positive") + print("Number of No Positive reviews: " + str(no_positive_reviews)) + + both_no_reviews = sum((df.Negative_Review == "No Negative") & (df.Positive_Review == "No Positive")) + print("Number of both No Negative and No Positive reviews: " + str(both_no_reviews)) + + end = time.time() + print("Sum took " + str(round(end - start, 2)) + " seconds") + + Number of No Negative reviews: 127890 + Number of No Positive reviews: 35946 + Number of both No Negative and No Positive reviews: 127 + Sum took 0.19 seconds + ``` + + Je hebt misschien gemerkt dat er 127 rijen zijn die zowel "No Negative" als "No Positive" waarden hebben voor de kolommen `Negative_Review` en `Positive_Review` respectievelijk. Dat betekent dat de recensent het hotel een numerieke score heeft gegeven, maar ervoor heeft gekozen om geen positieve of negatieve recensie te schrijven. Gelukkig is dit een klein aantal rijen (127 van 515738, of 0,02%), dus het zal waarschijnlijk ons model of de resultaten niet in een bepaalde richting beïnvloeden, maar je had misschien niet verwacht dat een dataset met recensies rijen zou bevatten zonder recensies, dus het is de moeite waard om de data te verkennen om dergelijke rijen te ontdekken. + +Nu je de dataset hebt verkend, ga je in de volgende les de data filteren en sentimentanalyse toevoegen. + +--- +## 🚀Uitdaging + +Deze les laat zien, zoals we in eerdere lessen zagen, hoe cruciaal het is om je data en de eigenaardigheden ervan te begrijpen voordat je bewerkingen uitvoert. Tekstgebaseerde data, in het bijzonder, vereist zorgvuldig onderzoek. Graaf door verschillende tekstrijke datasets en kijk of je gebieden kunt ontdekken die vooringenomenheid of scheve sentimenten in een model kunnen introduceren. + +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Review & Zelfstudie + +Volg [dit leerpad over NLP](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott) om tools te ontdekken die je kunt proberen bij het bouwen van spraak- en tekstrijke modellen. + +## Opdracht + +[NLTK](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 zijn 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 diff --git a/translations/nl/6-NLP/4-Hotel-Reviews-1/assignment.md b/translations/nl/6-NLP/4-Hotel-Reviews-1/assignment.md new file mode 100644 index 00000000..c6606ee7 --- /dev/null +++ b/translations/nl/6-NLP/4-Hotel-Reviews-1/assignment.md @@ -0,0 +1,19 @@ + +# NLTK + +## Instructies + +NLTK is een bekende bibliotheek voor gebruik in computationele taalkunde en NLP. Maak van deze gelegenheid gebruik om het '[NLTK-boek](https://www.nltk.org/book/)' door te nemen en de oefeningen uit te proberen. In deze niet-beoordeelde opdracht leer je deze bibliotheek beter kennen. + +--- + +**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 eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md b/translations/nl/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md new file mode 100644 index 00000000..2fd84de4 --- /dev/null +++ b/translations/nl/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/6-NLP/4-Hotel-Reviews-1/solution/R/README.md b/translations/nl/6-NLP/4-Hotel-Reviews-1/solution/R/README.md new file mode 100644 index 00000000..2554f1e0 --- /dev/null +++ b/translations/nl/6-NLP/4-Hotel-Reviews-1/solution/R/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Disclaimer**: +Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we ons best doen voor nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/6-NLP/5-Hotel-Reviews-2/README.md b/translations/nl/6-NLP/5-Hotel-Reviews-2/README.md new file mode 100644 index 00000000..768d5576 --- /dev/null +++ b/translations/nl/6-NLP/5-Hotel-Reviews-2/README.md @@ -0,0 +1,389 @@ + +# Sentimentanalyse met hotelbeoordelingen + +Nu je de dataset in detail hebt verkend, is het tijd om de kolommen te filteren en vervolgens NLP-technieken toe te passen op de dataset om nieuwe inzichten over de hotels te verkrijgen. + +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +### Filteren & Sentimentanalyse-operaties + +Zoals je waarschijnlijk hebt gemerkt, heeft de dataset een paar problemen. Sommige kolommen bevatten nutteloze informatie, andere lijken incorrect. Als ze correct zijn, is het onduidelijk hoe ze zijn berekend, en antwoorden kunnen niet onafhankelijk worden geverifieerd door je eigen berekeningen. + +## Oefening: een beetje meer gegevensverwerking + +Maak de gegevens nog wat schoner. Voeg kolommen toe die later nuttig zullen zijn, wijzig de waarden in andere kolommen en verwijder bepaalde kolommen volledig. + +1. Eerste verwerking van kolommen + + 1. Verwijder `lat` en `lng` + + 2. Vervang de waarden in `Hotel_Address` door de volgende waarden (als het adres de naam van de stad en het land bevat, verander het dan naar alleen de stad en het land). + + Dit zijn de enige steden en landen in de dataset: + + Amsterdam, Nederland + + Barcelona, Spanje + + Londen, Verenigd Koninkrijk + + Milaan, Italië + + Parijs, Frankrijk + + Wenen, Oostenrijk + + ```python + def replace_address(row): + if "Netherlands" in row["Hotel_Address"]: + return "Amsterdam, Netherlands" + elif "Barcelona" in row["Hotel_Address"]: + return "Barcelona, Spain" + elif "United Kingdom" in row["Hotel_Address"]: + return "London, United Kingdom" + elif "Milan" in row["Hotel_Address"]: + return "Milan, Italy" + elif "France" in row["Hotel_Address"]: + return "Paris, France" + elif "Vienna" in row["Hotel_Address"]: + return "Vienna, Austria" + + # Replace all the addresses with a shortened, more useful form + df["Hotel_Address"] = df.apply(replace_address, axis = 1) + # The sum of the value_counts() should add up to the total number of reviews + print(df["Hotel_Address"].value_counts()) + ``` + + Nu kun je gegevens op landniveau opvragen: + + ```python + display(df.groupby("Hotel_Address").agg({"Hotel_Name": "nunique"})) + ``` + + | Hotel_Address | Hotel_Name | + | :--------------------- | :--------: | + | Amsterdam, Nederland | 105 | + | Barcelona, Spanje | 211 | + | Londen, Verenigd Koninkrijk | 400 | + | Milaan, Italië | 162 | + | Parijs, Frankrijk | 458 | + | Wenen, Oostenrijk | 158 | + +2. Verwerk Hotel Meta-review kolommen + + 1. Verwijder `Additional_Number_of_Scoring` + + 1. Vervang `Total_Number_of_Reviews` door het totale aantal beoordelingen voor dat hotel dat daadwerkelijk in de dataset staat + + 1. Vervang `Average_Score` door onze eigen berekende score + + ```python + # Drop `Additional_Number_of_Scoring` + df.drop(["Additional_Number_of_Scoring"], axis = 1, inplace=True) + # Replace `Total_Number_of_Reviews` and `Average_Score` with our own calculated values + df.Total_Number_of_Reviews = df.groupby('Hotel_Name').transform('count') + df.Average_Score = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) + ``` + +3. Verwerk reviewkolommen + + 1. Verwijder `Review_Total_Negative_Word_Counts`, `Review_Total_Positive_Word_Counts`, `Review_Date` en `days_since_review` + + 2. Behoud `Reviewer_Score`, `Negative_Review` en `Positive_Review` zoals ze zijn, + + 3. Behoud `Tags` voorlopig + + - We zullen in de volgende sectie enkele aanvullende filterbewerkingen uitvoeren op de tags en daarna worden de tags verwijderd + +4. Verwerk reviewer kolommen + + 1. Verwijder `Total_Number_of_Reviews_Reviewer_Has_Given` + + 2. Behoud `Reviewer_Nationality` + +### Tag-kolommen + +De `Tag`-kolom is problematisch omdat het een lijst (in tekstvorm) is die in de kolom is opgeslagen. Helaas is de volgorde en het aantal subsecties in deze kolom niet altijd hetzelfde. Het is moeilijk voor een mens om de juiste zinnen te identificeren die interessant zijn, omdat er 515.000 rijen en 1427 hotels zijn, en elk heeft iets andere opties die een beoordelaar zou kunnen kiezen. Hier komt NLP goed van pas. Je kunt de tekst scannen en de meest voorkomende zinnen vinden en tellen. + +Helaas zijn we niet geïnteresseerd in losse woorden, maar in meerwoordige zinnen (bijv. *Zakenreis*). Het uitvoeren van een frequentieverdelingsalgoritme voor meerwoordige zinnen op zoveel gegevens (6762646 woorden) kan buitengewoon veel tijd kosten, maar zonder naar de gegevens te kijken, lijkt dat een noodzakelijke uitgave. Hier komt verkennende data-analyse van pas, omdat je een voorbeeld van de tags hebt gezien, zoals `[' Zakenreis ', ' Soloreiziger ', ' Eenpersoonskamer ', ' Verbleef 5 nachten ', ' Ingediend vanaf een mobiel apparaat ']`, kun je beginnen te vragen of het mogelijk is om de verwerking die je moet doen aanzienlijk te verminderen. Gelukkig is dat zo - maar eerst moet je een paar stappen volgen om de interessante tags vast te stellen. + +### Tags filteren + +Onthoud dat het doel van de dataset is om sentiment en kolommen toe te voegen die je helpen het beste hotel te kiezen (voor jezelf of misschien een klant die je vraagt een hotelaanbevelingsbot te maken). Je moet jezelf afvragen of de tags nuttig zijn of niet in de uiteindelijke dataset. Hier is een interpretatie (als je de dataset om andere redenen nodig had, zouden verschillende tags in/uit de selectie kunnen blijven): + +1. Het type reis is relevant en moet blijven +2. Het type gastgroep is belangrijk en moet blijven +3. Het type kamer, suite of studio waarin de gast verbleef is irrelevant (alle hotels hebben in principe dezelfde kamers) +4. Het apparaat waarop de beoordeling is ingediend is irrelevant +5. Het aantal nachten dat de beoordelaar verbleef *zou* relevant kunnen zijn als je langere verblijven associeert met het meer waarderen van het hotel, maar dat is twijfelachtig en waarschijnlijk irrelevant + +Samenvattend, **behoud 2 soorten tags en verwijder de andere**. + +Eerst wil je de tags niet tellen totdat ze in een beter formaat zijn, dus dat betekent dat je de vierkante haken en aanhalingstekens verwijdert. Je kunt dit op verschillende manieren doen, maar je wilt de snelste manier omdat het lang kan duren om veel gegevens te verwerken. Gelukkig heeft pandas een eenvoudige manier om elk van deze stappen uit te voeren. + +```Python +# Remove opening and closing brackets +df.Tags = df.Tags.str.strip("[']") +# remove all quotes too +df.Tags = df.Tags.str.replace(" ', '", ",", regex = False) +``` + +Elke tag wordt iets als: `Zakenreis, Soloreiziger, Eenpersoonskamer, Verbleef 5 nachten, Ingediend vanaf een mobiel apparaat`. + +Vervolgens vinden we een probleem. Sommige beoordelingen, of rijen, hebben 5 kolommen, sommige 3, sommige 6. Dit is een resultaat van hoe de dataset is gemaakt en moeilijk te corrigeren. Je wilt een frequentietelling krijgen van elke zin, maar ze staan in verschillende volgorde in elke beoordeling, dus de telling kan verkeerd zijn en een hotel krijgt mogelijk geen tag toegewezen die het verdiende. + +In plaats daarvan gebruik je de verschillende volgorde in ons voordeel, omdat elke tag meerwoordig is maar ook gescheiden door een komma! De eenvoudigste manier om dit te doen is om 6 tijdelijke kolommen te maken met elke tag ingevoegd in de kolom die overeenkomt met de volgorde in de tag. Je kunt vervolgens de 6 kolommen samenvoegen tot één grote kolom en de `value_counts()`-methode uitvoeren op de resulterende kolom. Als je dat afdrukt, zie je dat er 2428 unieke tags waren. Hier is een kleine steekproef: + +| Tag | Count | +| ------------------------------ | ------ | +| Vrijetijdsreis | 417778 | +| Ingediend vanaf een mobiel apparaat | 307640 | +| Koppel | 252294 | +| Verbleef 1 nacht | 193645 | +| Verbleef 2 nachten | 133937 | +| Soloreiziger | 108545 | +| Verbleef 3 nachten | 95821 | +| Zakenreis | 82939 | +| Groep | 65392 | +| Gezin met jonge kinderen | 61015 | +| Verbleef 4 nachten | 47817 | +| Tweepersoonskamer | 35207 | +| Standaard tweepersoonskamer | 32248 | +| Superior tweepersoonskamer | 31393 | +| Gezin met oudere kinderen | 26349 | +| Deluxe tweepersoonskamer | 24823 | +| Tweepersoons- of twin-kamer | 22393 | +| Verbleef 5 nachten | 20845 | +| Standaard tweepersoons- of twin-kamer | 17483 | +| Klassieke tweepersoonskamer | 16989 | +| Superior tweepersoons- of twin-kamer | 13570 | +| 2 kamers | 12393 | + +Sommige van de veelvoorkomende tags zoals `Ingediend vanaf een mobiel apparaat` zijn voor ons niet nuttig, dus het kan slim zijn om ze te verwijderen voordat je de zinnen gaat tellen, maar het is zo'n snelle operatie dat je ze erin kunt laten en negeren. + +### Verwijderen van tags over verblijfsduur + +Het verwijderen van deze tags is stap 1, het vermindert het totale aantal tags dat moet worden overwogen enigszins. Merk op dat je ze niet uit de dataset verwijdert, maar ervoor kiest om ze niet mee te nemen als waarden om te tellen/behouden in de beoordelingsdataset. + +| Verblijfsduur | Count | +| ---------------- | ------ | +| Verbleef 1 nacht | 193645 | +| Verbleef 2 nachten | 133937 | +| Verbleef 3 nachten | 95821 | +| Verbleef 4 nachten | 47817 | +| Verbleef 5 nachten | 20845 | +| Verbleef 6 nachten | 9776 | +| Verbleef 7 nachten | 7399 | +| Verbleef 8 nachten | 2502 | +| Verbleef 9 nachten | 1293 | +| ... | ... | + +Er is een enorme variëteit aan kamers, suites, studio's, appartementen enzovoort. Ze betekenen allemaal ongeveer hetzelfde en zijn niet relevant voor jou, dus verwijder ze uit de overweging. + +| Type kamer | Count | +| ----------------------------- | ----- | +| Tweepersoonskamer | 35207 | +| Standaard tweepersoonskamer | 32248 | +| Superior tweepersoonskamer | 31393 | +| Deluxe tweepersoonskamer | 24823 | +| Tweepersoons- of twin-kamer | 22393 | +| Standaard tweepersoons- of twin-kamer | 17483 | +| Klassieke tweepersoonskamer | 16989 | +| Superior tweepersoons- of twin-kamer | 13570 | + +Ten slotte, en dit is geweldig (omdat het niet veel verwerking kostte), blijf je over met de volgende *nuttige* tags: + +| Tag | Count | +| --------------------------------------------- | ------ | +| Vrijetijdsreis | 417778 | +| Koppel | 252294 | +| Soloreiziger | 108545 | +| Zakenreis | 82939 | +| Groep (gecombineerd met Reizigers met vrienden) | 67535 | +| Gezin met jonge kinderen | 61015 | +| Gezin met oudere kinderen | 26349 | +| Met een huisdier | 1405 | + +Je zou kunnen stellen dat `Reizigers met vrienden` min of meer hetzelfde is als `Groep`, en dat zou eerlijk zijn om de twee te combineren zoals hierboven. De code voor het identificeren van de juiste tags is [de Tags notebook](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb). + +De laatste stap is om nieuwe kolommen te maken voor elk van deze tags. Vervolgens, voor elke beoordelingsrij, als de `Tag`-kolom overeenkomt met een van de nieuwe kolommen, voeg een 1 toe, zo niet, voeg een 0 toe. Het eindresultaat zal een telling zijn van hoeveel beoordelaars dit hotel (in totaal) kozen voor bijvoorbeeld zaken versus vrije tijd, of om een huisdier mee te nemen, en dit is nuttige informatie bij het aanbevelen van een hotel. + +```python +# Process the Tags into new columns +# The file Hotel_Reviews_Tags.py, identifies the most important tags +# Leisure trip, Couple, Solo traveler, Business trip, Group combined with Travelers with friends, +# Family with young children, Family with older children, With a pet +df["Leisure_trip"] = df.Tags.apply(lambda tag: 1 if "Leisure trip" in tag else 0) +df["Couple"] = df.Tags.apply(lambda tag: 1 if "Couple" in tag else 0) +df["Solo_traveler"] = df.Tags.apply(lambda tag: 1 if "Solo traveler" in tag else 0) +df["Business_trip"] = df.Tags.apply(lambda tag: 1 if "Business trip" in tag else 0) +df["Group"] = df.Tags.apply(lambda tag: 1 if "Group" in tag or "Travelers with friends" in tag else 0) +df["Family_with_young_children"] = df.Tags.apply(lambda tag: 1 if "Family with young children" in tag else 0) +df["Family_with_older_children"] = df.Tags.apply(lambda tag: 1 if "Family with older children" in tag else 0) +df["With_a_pet"] = df.Tags.apply(lambda tag: 1 if "With a pet" in tag else 0) + +``` + +### Sla je bestand op + +Sla ten slotte de dataset op zoals deze nu is met een nieuwe naam. + +```python +df.drop(["Review_Total_Negative_Word_Counts", "Review_Total_Positive_Word_Counts", "days_since_review", "Total_Number_of_Reviews_Reviewer_Has_Given"], axis = 1, inplace=True) + +# Saving new data file with calculated columns +print("Saving results to Hotel_Reviews_Filtered.csv") +df.to_csv(r'../data/Hotel_Reviews_Filtered.csv', index = False) +``` + +## Sentimentanalyse-operaties + +In deze laatste sectie ga je sentimentanalyse toepassen op de beoordelingskolommen en de resultaten opslaan in een dataset. + +## Oefening: laad en sla de gefilterde gegevens op + +Merk op dat je nu de gefilterde dataset laadt die in de vorige sectie is opgeslagen, **niet** de originele dataset. + +```python +import time +import pandas as pd +import nltk as nltk +from nltk.corpus import stopwords +from nltk.sentiment.vader import SentimentIntensityAnalyzer +nltk.download('vader_lexicon') + +# Load the filtered hotel reviews from CSV +df = pd.read_csv('../../data/Hotel_Reviews_Filtered.csv') + +# You code will be added here + + +# Finally remember to save the hotel reviews with new NLP data added +print("Saving results to Hotel_Reviews_NLP.csv") +df.to_csv(r'../data/Hotel_Reviews_NLP.csv', index = False) +``` + +### Stopwoorden verwijderen + +Als je sentimentanalyse zou uitvoeren op de negatieve en positieve beoordelingskolommen, kan dat lang duren. Getest op een krachtige testlaptop met snelle CPU, duurde het 12 - 14 minuten, afhankelijk van welke sentimentbibliotheek werd gebruikt. Dat is een (relatief) lange tijd, dus het is de moeite waard om te onderzoeken of dat kan worden versneld. + +Stopwoorden verwijderen, of veelvoorkomende Engelse woorden die de sentiment van een zin niet veranderen, is de eerste stap. Door ze te verwijderen, zou de sentimentanalyse sneller moeten verlopen, maar niet minder nauwkeurig (aangezien de stopwoorden de sentiment niet beïnvloeden, maar ze vertragen wel de analyse). + +De langste negatieve beoordeling was 395 woorden, maar na het verwijderen van de stopwoorden zijn het er 195. + +Het verwijderen van de stopwoorden is ook een snelle operatie, het verwijderen van de stopwoorden uit 2 beoordelingskolommen over 515.000 rijen duurde 3,3 seconden op het testapparaat. Het kan iets meer of minder tijd kosten voor jou, afhankelijk van de snelheid van je apparaat CPU, RAM, of je een SSD hebt of niet, en enkele andere factoren. De relatief korte duur van de operatie betekent dat als het de sentimentanalyse tijd verbetert, het de moeite waard is om te doen. + +```python +from nltk.corpus import stopwords + +# Load the hotel reviews from CSV +df = pd.read_csv("../../data/Hotel_Reviews_Filtered.csv") + +# Remove stop words - can be slow for a lot of text! +# Ryan Han (ryanxjhan on Kaggle) has a great post measuring performance of different stop words removal approaches +# https://www.kaggle.com/ryanxjhan/fast-stop-words-removal # using the approach that Ryan recommends +start = time.time() +cache = set(stopwords.words("english")) +def remove_stopwords(review): + text = " ".join([word for word in review.split() if word not in cache]) + return text + +# Remove the stop words from both columns +df.Negative_Review = df.Negative_Review.apply(remove_stopwords) +df.Positive_Review = df.Positive_Review.apply(remove_stopwords) +``` + +### Sentimentanalyse uitvoeren + +Nu moet je de sentimentanalyse berekenen voor zowel negatieve als positieve beoordelingskolommen en het resultaat opslaan in 2 nieuwe kolommen. De test van de sentiment zal zijn om het te vergelijken met de score van de beoordelaar voor dezelfde beoordeling. Bijvoorbeeld, als de sentiment denkt dat de negatieve beoordeling een sentiment van 1 had (extreem positieve sentiment) en een positieve beoordeling sentiment van 1, maar de beoordelaar gaf het hotel de laagste score mogelijk, dan komt de tekst van de beoordeling niet overeen met de score, of kon de sentimentanalyse de sentiment niet correct herkennen. Je kunt verwachten dat sommige sentiment scores volledig verkeerd zijn, en vaak zal dat verklaarbaar zijn, bijvoorbeeld de beoordeling kan extreem sarcastisch zijn: "Natuurlijk VOND ik het GEWELDIG om te slapen in een kamer zonder verwarming" en de sentimentanalyse denkt dat dat positieve sentiment is, terwijl een mens die het leest zou weten dat het sarcasme is. +NLTK biedt verschillende sentimentanalysatoren om mee te experimenteren, en je kunt ze vervangen en zien of de sentimentanalyse meer of minder nauwkeurig is. Hier wordt de VADER-sentimentanalyse gebruikt. + +> Hutto, C.J. & Gilbert, E.E. (2014). VADER: Een zuinig regelgebaseerd model voor sentimentanalyse van sociale media-tekst. Achtste Internationale Conferentie over Weblogs en Sociale Media (ICWSM-14). Ann Arbor, MI, juni 2014. + +```python +from nltk.sentiment.vader import SentimentIntensityAnalyzer + +# Create the vader sentiment analyser (there are others in NLTK you can try too) +vader_sentiment = SentimentIntensityAnalyzer() +# Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014. + +# There are 3 possibilities of input for a review: +# It could be "No Negative", in which case, return 0 +# It could be "No Positive", in which case, return 0 +# It could be a review, in which case calculate the sentiment +def calc_sentiment(review): + if review == "No Negative" or review == "No Positive": + return 0 + return vader_sentiment.polarity_scores(review)["compound"] +``` + +Later in je programma, wanneer je klaar bent om sentiment te berekenen, kun je het toepassen op elke review als volgt: + +```python +# Add a negative sentiment and positive sentiment column +print("Calculating sentiment columns for both positive and negative reviews") +start = time.time() +df["Negative_Sentiment"] = df.Negative_Review.apply(calc_sentiment) +df["Positive_Sentiment"] = df.Positive_Review.apply(calc_sentiment) +end = time.time() +print("Calculating sentiment took " + str(round(end - start, 2)) + " seconds") +``` + +Dit duurt ongeveer 120 seconden op mijn computer, maar het zal variëren per computer. Als je de resultaten wilt afdrukken en wilt zien of het sentiment overeenkomt met de review: + +```python +df = df.sort_values(by=["Negative_Sentiment"], ascending=True) +print(df[["Negative_Review", "Negative_Sentiment"]]) +df = df.sort_values(by=["Positive_Sentiment"], ascending=True) +print(df[["Positive_Review", "Positive_Sentiment"]]) +``` + +Het allerlaatste wat je met het bestand moet doen voordat je het in de uitdaging gebruikt, is het opslaan! Je zou ook moeten overwegen om al je nieuwe kolommen opnieuw te ordenen zodat ze gemakkelijk te gebruiken zijn (voor een mens, het is een cosmetische verandering). + +```python +# Reorder the columns (This is cosmetic, but to make it easier to explore the data later) +df = df.reindex(["Hotel_Name", "Hotel_Address", "Total_Number_of_Reviews", "Average_Score", "Reviewer_Score", "Negative_Sentiment", "Positive_Sentiment", "Reviewer_Nationality", "Leisure_trip", "Couple", "Solo_traveler", "Business_trip", "Group", "Family_with_young_children", "Family_with_older_children", "With_a_pet", "Negative_Review", "Positive_Review"], axis=1) + +print("Saving results to Hotel_Reviews_NLP.csv") +df.to_csv(r"../data/Hotel_Reviews_NLP.csv", index = False) +``` + +Je moet de volledige code uitvoeren voor [het analysenotebook](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) (nadat je [je filternotebook](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) hebt uitgevoerd om het bestand Hotel_Reviews_Filtered.csv te genereren). + +Samenvattend, de stappen zijn: + +1. Het originele datasetbestand **Hotel_Reviews.csv** wordt onderzocht in de vorige les met [het verkenningsnotebook](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb) +2. Hotel_Reviews.csv wordt gefilterd door [het filternotebook](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb), wat resulteert in **Hotel_Reviews_Filtered.csv** +3. Hotel_Reviews_Filtered.csv wordt verwerkt door [het sentimentanalysenotebook](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb), wat resulteert in **Hotel_Reviews_NLP.csv** +4. Gebruik Hotel_Reviews_NLP.csv in de NLP-uitdaging hieronder + +### Conclusie + +Toen je begon, had je een dataset met kolommen en gegevens, maar niet alles kon worden geverifieerd of gebruikt. Je hebt de gegevens verkend, gefilterd wat je niet nodig hebt, tags omgezet in iets bruikbaars, je eigen gemiddelden berekend, enkele sentimentkolommen toegevoegd en hopelijk interessante dingen geleerd over het verwerken van natuurlijke tekst. + +## [Quiz na de les](https://ff-quizzes.netlify.app/en/ml/) + +## Uitdaging + +Nu je je dataset hebt geanalyseerd op sentiment, kijk of je strategieën kunt gebruiken die je in deze cursus hebt geleerd (clustering, misschien?) om patronen rond sentiment te bepalen. + +## Review & Zelfstudie + +Volg [deze Learn-module](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott) om meer te leren en verschillende tools te gebruiken om sentiment in tekst te verkennen. + +## Opdracht + +[Probeer een andere dataset](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 zijn 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 diff --git a/translations/nl/6-NLP/5-Hotel-Reviews-2/assignment.md b/translations/nl/6-NLP/5-Hotel-Reviews-2/assignment.md new file mode 100644 index 00000000..c4c9c910 --- /dev/null +++ b/translations/nl/6-NLP/5-Hotel-Reviews-2/assignment.md @@ -0,0 +1,25 @@ + +# Probeer een andere dataset + +## Instructies + +Nu je hebt geleerd hoe je met NLTK sentiment aan tekst kunt toekennen, probeer een andere dataset. Waarschijnlijk moet je wat gegevens verwerken, dus maak een notebook en documenteer je denkproces. Wat ontdek je? + +## Rubric + +| Criteria | Uitmuntend | Voldoende | Verbetering nodig | +| -------- | ---------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ---------------------- | +| | Een compleet notebook en dataset worden gepresenteerd met goed gedocumenteerde cellen die uitleggen hoe het sentiment wordt toegewezen | Het notebook mist goede uitleg | Het notebook is gebrekkig | + +--- + +**Disclaimer**: +Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we ons best doen voor nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn 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 diff --git a/translations/nl/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md b/translations/nl/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md new file mode 100644 index 00000000..2de454e5 --- /dev/null +++ b/translations/nl/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 diff --git a/translations/nl/6-NLP/5-Hotel-Reviews-2/solution/R/README.md b/translations/nl/6-NLP/5-Hotel-Reviews-2/solution/R/README.md new file mode 100644 index 00000000..14e123a5 --- /dev/null +++ b/translations/nl/6-NLP/5-Hotel-Reviews-2/solution/R/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/6-NLP/README.md b/translations/nl/6-NLP/README.md new file mode 100644 index 00000000..1a158914 --- /dev/null +++ b/translations/nl/6-NLP/README.md @@ -0,0 +1,38 @@ + +# Aan de slag met natuurlijke taalverwerking + +Natuurlijke taalverwerking (NLP) is het vermogen van een computerprogramma om menselijke taal te begrijpen zoals deze wordt gesproken en geschreven – aangeduid als natuurlijke taal. Het is een onderdeel van kunstmatige intelligentie (AI). NLP bestaat al meer dan 50 jaar en heeft zijn oorsprong in de taalkunde. Het hele vakgebied is gericht op het helpen van machines om de menselijke taal te begrijpen en te verwerken. Dit kan vervolgens worden gebruikt om taken uit te voeren zoals spellingscontrole of machinale vertaling. Het heeft een breed scala aan toepassingen in de echte wereld in verschillende gebieden, waaronder medisch onderzoek, zoekmachines en bedrijfsinformatie. + +## Regionaal onderwerp: Europese talen en literatuur en romantische hotels in Europa ❤️ + +In dit deel van de cursus maak je kennis met een van de meest voorkomende toepassingen van machine learning: natuurlijke taalverwerking (NLP). Afgeleid van computationele taalkunde, vormt deze categorie van kunstmatige intelligentie de brug tussen mensen en machines via spraak- of tekstuele communicatie. + +In deze lessen leren we de basisprincipes van NLP door kleine conversatiebots te bouwen om te ontdekken hoe machine learning helpt om deze gesprekken steeds 'slimmer' te maken. Je reist terug in de tijd en voert gesprekken met Elizabeth Bennett en Mr. Darcy uit Jane Austens klassieke roman, **Pride and Prejudice**, gepubliceerd in 1813. Vervolgens breid je je kennis uit door meer te leren over sentimentanalyse via hotelbeoordelingen in Europa. + +![Pride and Prejudice boek en thee](../../../6-NLP/images/p&p.jpg) +> Foto door Elaine Howlin op Unsplash + +## Lessen + +1. [Introductie tot natuurlijke taalverwerking](1-Introduction-to-NLP/README.md) +2. [Veelvoorkomende NLP-taken en technieken](2-Tasks/README.md) +3. [Vertaling en sentimentanalyse met machine learning](3-Translation-Sentiment/README.md) +4. [Je data voorbereiden](4-Hotel-Reviews-1/README.md) +5. [NLTK voor sentimentanalyse](5-Hotel-Reviews-2/README.md) + +## Credits + +Deze lessen over natuurlijke taalverwerking zijn geschreven met ☕ door [Stephen Howell](https://twitter.com/Howell_MSFT) + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/6-NLP/data/README.md b/translations/nl/6-NLP/data/README.md new file mode 100644 index 00000000..c7f660e5 --- /dev/null +++ b/translations/nl/6-NLP/data/README.md @@ -0,0 +1,15 @@ + +Download de hotelbeoordelingsgegevens naar deze map. + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/7-TimeSeries/1-Introduction/README.md b/translations/nl/7-TimeSeries/1-Introduction/README.md new file mode 100644 index 00000000..e63a8051 --- /dev/null +++ b/translations/nl/7-TimeSeries/1-Introduction/README.md @@ -0,0 +1,199 @@ + +# Introductie tot tijdreeksvoorspelling + +![Samenvatting van tijdreeksen in een sketchnote](../../../../sketchnotes/ml-timeseries.png) + +> Sketchnote door [Tomomi Imura](https://www.twitter.com/girlie_mac) + +In deze les en de volgende leer je meer over tijdreeksvoorspelling, een interessant en waardevol onderdeel van het repertoire van een ML-wetenschapper dat minder bekend is dan andere onderwerpen. Tijdreeksvoorspelling is een soort 'kristallen bol': op basis van eerdere prestaties van een variabele, zoals prijs, kun je de toekomstige potentiële waarde voorspellen. + +[![Introductie tot tijdreeksvoorspelling](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](https://youtu.be/cBojo1hsHiI "Introductie tot tijdreeksvoorspelling") + +> 🎥 Klik op de afbeelding hierboven voor een video over tijdreeksvoorspelling + +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +Het is een nuttig en interessant vakgebied met echte waarde voor bedrijven, gezien de directe toepassing op problemen zoals prijsstelling, voorraadbeheer en supply chain vraagstukken. Hoewel technieken voor deep learning steeds vaker worden gebruikt om meer inzichten te verkrijgen en toekomstige prestaties beter te voorspellen, blijft tijdreeksvoorspelling een vakgebied dat sterk wordt beïnvloed door klassieke ML-technieken. + +> Penn State's nuttige curriculum over tijdreeksen is te vinden [hier](https://online.stat.psu.edu/stat510/lesson/1) + +## Introductie + +Stel je voor dat je een reeks slimme parkeermeters beheert die gegevens leveren over hoe vaak ze worden gebruikt en hoe lang, over een bepaalde periode. + +> Wat als je, op basis van de eerdere prestaties van de meter, de toekomstige waarde zou kunnen voorspellen volgens de wetten van vraag en aanbod? + +Het nauwkeurig voorspellen van wanneer je moet handelen om je doel te bereiken, is een uitdaging die kan worden aangepakt met tijdreeksvoorspelling. Het zou mensen niet blij maken om meer te betalen in drukke tijden wanneer ze op zoek zijn naar een parkeerplaats, maar het zou zeker een manier zijn om inkomsten te genereren om de straten schoon te maken! + +Laten we enkele soorten tijdreeksalgoritmen verkennen en een notebook starten om enkele gegevens te reinigen en voor te bereiden. De gegevens die je gaat analyseren zijn afkomstig van de GEFCom2014 voorspellingscompetitie. Ze bestaan uit 3 jaar aan uurlijkse elektriciteitsbelasting en temperatuurwaarden tussen 2012 en 2014. Gegeven de historische patronen van elektriciteitsbelasting en temperatuur, kun je toekomstige waarden van elektriciteitsbelasting voorspellen. + +In dit voorbeeld leer je hoe je één tijdstap vooruit kunt voorspellen, alleen met behulp van historische belastinggegevens. Voordat je begint, is het echter nuttig om te begrijpen wat er achter de schermen gebeurt. + +## Enkele definities + +Wanneer je de term 'tijdreeks' tegenkomt, moet je begrijpen hoe deze in verschillende contexten wordt gebruikt. + +🎓 **Tijdreeks** + +In de wiskunde is "een tijdreeks een reeks datapunten die zijn geïndexeerd (of opgesomd of geplot) in tijdsvolgorde. Meestal is een tijdreeks een reeks die is genomen op opeenvolgende, gelijkmatig verdeelde tijdspunten." Een voorbeeld van een tijdreeks is de dagelijkse slotwaarde van de [Dow Jones Industrial Average](https://wikipedia.org/wiki/Time_series). Het gebruik van tijdreeksplots en statistische modellering wordt vaak aangetroffen in signaalverwerking, weersvoorspelling, aardbevingsvoorspelling en andere gebieden waar gebeurtenissen plaatsvinden en datapunten over tijd kunnen worden geplot. + +🎓 **Tijdreeksanalyse** + +Tijdreeksanalyse is de analyse van bovengenoemde tijdreeksgegevens. Tijdreeksgegevens kunnen verschillende vormen aannemen, waaronder 'onderbroken tijdreeksen' die patronen detecteren in de evolutie van een tijdreeks vóór en na een onderbrekende gebeurtenis. Het type analyse dat nodig is voor de tijdreeks hangt af van de aard van de gegevens. Tijdreeksgegevens zelf kunnen de vorm aannemen van reeksen getallen of tekens. + +De analyse die wordt uitgevoerd, maakt gebruik van verschillende methoden, waaronder frequentiedomein en tijdsdomein, lineair en niet-lineair, en meer. [Lees meer](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) over de vele manieren om dit type gegevens te analyseren. + +🎓 **Tijdreeksvoorspelling** + +Tijdreeksvoorspelling is het gebruik van een model om toekomstige waarden te voorspellen op basis van patronen die worden weergegeven door eerder verzamelde gegevens zoals die in het verleden zijn opgetreden. Hoewel het mogelijk is om regressiemodellen te gebruiken om tijdreeksgegevens te verkennen, met tijdsindices als x-variabelen op een plot, worden dergelijke gegevens het best geanalyseerd met speciale soorten modellen. + +Tijdreeksgegevens zijn een lijst van geordende observaties, in tegenstelling tot gegevens die kunnen worden geanalyseerd door lineaire regressie. Het meest voorkomende model is ARIMA, een acroniem dat staat voor "Autoregressive Integrated Moving Average". + +[ARIMA-modellen](https://online.stat.psu.edu/stat510/lesson/1/1.1) "relateren de huidige waarde van een reeks aan eerdere waarden en eerdere voorspellingsfouten." Ze zijn het meest geschikt voor het analyseren van tijdsdomeingegevens, waarbij gegevens in de tijd zijn geordend. + +> Er zijn verschillende soorten ARIMA-modellen, waar je meer over kunt leren [hier](https://people.duke.edu/~rnau/411arim.htm) en die je in de volgende les zult behandelen. + +In de volgende les bouw je een ARIMA-model met behulp van [Univariate Time Series](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm), dat zich richt op één variabele die in de tijd verandert. Een voorbeeld van dit type gegevens is [deze dataset](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm) die de maandelijkse CO2-concentratie bij het Mauna Loa Observatorium registreert: + +| CO2 | YearMonth | Year | Month | +| :----: | :-------: | :---: | :---: | +| 330.62 | 1975.04 | 1975 | 1 | +| 331.40 | 1975.13 | 1975 | 2 | +| 331.87 | 1975.21 | 1975 | 3 | +| 333.18 | 1975.29 | 1975 | 4 | +| 333.92 | 1975.38 | 1975 | 5 | +| 333.43 | 1975.46 | 1975 | 6 | +| 331.85 | 1975.54 | 1975 | 7 | +| 330.01 | 1975.63 | 1975 | 8 | +| 328.51 | 1975.71 | 1975 | 9 | +| 328.41 | 1975.79 | 1975 | 10 | +| 329.25 | 1975.88 | 1975 | 11 | +| 330.97 | 1975.96 | 1975 | 12 | + +✅ Identificeer de variabele die in de tijd verandert in deze dataset + +## Kenmerken van tijdreeksgegevens om te overwegen + +Wanneer je naar tijdreeksgegevens kijkt, kun je merken dat ze [bepaalde kenmerken](https://online.stat.psu.edu/stat510/lesson/1/1.1) hebben die je moet begrijpen en aanpakken om hun patronen beter te begrijpen. Als je tijdreeksgegevens beschouwt als mogelijk een 'signaal' dat je wilt analyseren, kunnen deze kenmerken worden gezien als 'ruis'. Je zult vaak deze 'ruis' moeten verminderen door enkele van deze kenmerken te compenseren met statistische technieken. + +Hier zijn enkele concepten die je moet kennen om met tijdreeksen te werken: + +🎓 **Trends** + +Trends worden gedefinieerd als meetbare stijgingen en dalingen in de tijd. [Lees meer](https://machinelearningmastery.com/time-series-trends-in-python). In de context van tijdreeksen gaat het om hoe je trends kunt gebruiken en, indien nodig, verwijderen uit je tijdreeks. + +🎓 **[Seizoensgebondenheid](https://machinelearningmastery.com/time-series-seasonality-with-python/)** + +Seizoensgebondenheid wordt gedefinieerd als periodieke schommelingen, zoals bijvoorbeeld de drukte tijdens feestdagen die de verkoop kunnen beïnvloeden. [Bekijk](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm) hoe verschillende soorten plots seizoensgebondenheid in gegevens weergeven. + +🎓 **Uitschieters** + +Uitschieters liggen ver buiten de standaard datavariatie. + +🎓 **Langetermijncyclus** + +Onafhankelijk van seizoensgebondenheid kunnen gegevens een langetermijncyclus vertonen, zoals een economische neergang die langer dan een jaar duurt. + +🎓 **Constante variatie** + +In de tijd vertonen sommige gegevens constante schommelingen, zoals energieverbruik per dag en nacht. + +🎓 **Abrupte veranderingen** + +De gegevens kunnen een abrupte verandering vertonen die verdere analyse vereist. Bijvoorbeeld de plotselinge sluiting van bedrijven door COVID veroorzaakte veranderingen in gegevens. + +✅ Hier is een [voorbeeld van een tijdreeksplot](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python) die dagelijks in-game valuta-uitgaven toont over een paar jaar. Kun je een van de hierboven genoemde kenmerken identificeren in deze gegevens? + +![In-game valuta-uitgaven](../../../../7-TimeSeries/1-Introduction/images/currency.png) + +## Oefening - aan de slag met stroomverbruiksgegevens + +Laten we beginnen met het maken van een tijdreeksmodel om toekomstig stroomverbruik te voorspellen op basis van eerder verbruik. + +> De gegevens in dit voorbeeld zijn afkomstig van de GEFCom2014 voorspellingscompetitie. Ze bestaan uit 3 jaar aan uurlijkse elektriciteitsbelasting en temperatuurwaarden tussen 2012 en 2014. +> +> Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli en Rob J. Hyndman, "Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond", International Journal of Forecasting, vol.32, no.3, pp 896-913, juli-september, 2016. + +1. Open in de `working` map van deze les het bestand _notebook.ipynb_. Begin met het toevoegen van bibliotheken die je helpen gegevens te laden en te visualiseren: + + ```python + import os + import matplotlib.pyplot as plt + from common.utils import load_data + %matplotlib inline + ``` + + Let op, je gebruikt de bestanden uit de meegeleverde `common` map die je omgeving instellen en het downloaden van de gegevens afhandelen. + +2. Bekijk vervolgens de gegevens als een dataframe door `load_data()` en `head()` aan te roepen: + + ```python + data_dir = './data' + energy = load_data(data_dir)[['load']] + energy.head() + ``` + + Je kunt zien dat er twee kolommen zijn die datum en belasting vertegenwoordigen: + + | | load | + | :-----------------: | :----: | + | 2012-01-01 00:00:00 | 2698.0 | + | 2012-01-01 01:00:00 | 2558.0 | + | 2012-01-01 02:00:00 | 2444.0 | + | 2012-01-01 03:00:00 | 2402.0 | + | 2012-01-01 04:00:00 | 2403.0 | + +3. Plot nu de gegevens door `plot()` aan te roepen: + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![energieplot](../../../../7-TimeSeries/1-Introduction/images/energy-plot.png) + +4. Plot vervolgens de eerste week van juli 2014 door deze als invoer te geven aan `energy` in het `[van datum]: [tot datum]` patroon: + + ```python + energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![juli](../../../../7-TimeSeries/1-Introduction/images/july-2014.png) + + Een prachtige plot! Bekijk deze plots en kijk of je een van de hierboven genoemde kenmerken kunt bepalen. Wat kunnen we afleiden door de gegevens te visualiseren? + +In de volgende les maak je een ARIMA-model om enkele voorspellingen te doen. + +--- + +## 🚀Uitdaging + +Maak een lijst van alle industrieën en onderzoeksgebieden die volgens jou zouden profiteren van tijdreeksvoorspelling. Kun je een toepassing van deze technieken bedenken in de kunsten? In econometrie? Ecologie? Detailhandel? Industrie? Financiën? Waar nog meer? + +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Review & Zelfstudie + +Hoewel we ze hier niet behandelen, worden neurale netwerken soms gebruikt om klassieke methoden van tijdreeksvoorspelling te verbeteren. Lees er meer over [in dit artikel](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412) + +## Opdracht + +[Visualiseer meer tijdreeksen](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 ons best doen voor 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 diff --git a/translations/nl/7-TimeSeries/1-Introduction/assignment.md b/translations/nl/7-TimeSeries/1-Introduction/assignment.md new file mode 100644 index 00000000..4c585bdf --- /dev/null +++ b/translations/nl/7-TimeSeries/1-Introduction/assignment.md @@ -0,0 +1,25 @@ + +# Visualiseer meer tijdreeksen + +## Instructies + +Je bent begonnen met het leren over tijdreeksvoorspelling door te kijken naar het type data dat deze speciale modellering vereist. Je hebt al wat data rondom energie gevisualiseerd. Kijk nu eens rond naar andere data die baat zou hebben bij tijdreeksvoorspelling. Vind drie voorbeelden (probeer [Kaggle](https://kaggle.com) en [Azure Open Datasets](https://azure.microsoft.com/en-us/services/open-datasets/catalog/?WT.mc_id=academic-77952-leestott)) en maak een notebook om ze te visualiseren. Noteer in het notebook eventuele bijzondere kenmerken (seizoensgebondenheid, abrupte veranderingen of andere trends). + +## Rubric + +| Criteria | Uitmuntend | Voldoende | Verbetering nodig | +| -------- | ------------------------------------------------------- | --------------------------------------------------- | ----------------------------------------------------------------------------------------- | +| | Drie datasets zijn geplot en uitgelegd in een notebook | Twee datasets zijn geplot en uitgelegd in een notebook | Weinig datasets zijn geplot of uitgelegd in een notebook of de gepresenteerde data is onvoldoende | + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/7-TimeSeries/1-Introduction/solution/Julia/README.md b/translations/nl/7-TimeSeries/1-Introduction/solution/Julia/README.md new file mode 100644 index 00000000..7b1da57c --- /dev/null +++ b/translations/nl/7-TimeSeries/1-Introduction/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/7-TimeSeries/1-Introduction/solution/R/README.md b/translations/nl/7-TimeSeries/1-Introduction/solution/R/README.md new file mode 100644 index 00000000..215fd143 --- /dev/null +++ b/translations/nl/7-TimeSeries/1-Introduction/solution/R/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/7-TimeSeries/2-ARIMA/README.md b/translations/nl/7-TimeSeries/2-ARIMA/README.md new file mode 100644 index 00000000..f4b9b2c3 --- /dev/null +++ b/translations/nl/7-TimeSeries/2-ARIMA/README.md @@ -0,0 +1,407 @@ + +# Tijdreeksvoorspelling met ARIMA + +In de vorige les heb je wat geleerd over tijdreeksvoorspelling en een dataset geladen die de fluctuaties van het elektriciteitsverbruik over een bepaalde periode laat zien. + +[![Introductie tot ARIMA](https://img.youtube.com/vi/IUSk-YDau10/0.jpg)](https://youtu.be/IUSk-YDau10 "Introductie tot ARIMA") + +> 🎥 Klik op de afbeelding hierboven voor een video: Een korte introductie tot ARIMA-modellen. Het voorbeeld is gedaan in R, maar de concepten zijn universeel. + +## [Quiz voorafgaand aan de les](https://ff-quizzes.netlify.app/en/ml/) + +## Introductie + +In deze les ontdek je een specifieke manier om modellen te bouwen met [ARIMA: *A*uto*R*egressive *I*ntegrated *M*oving *A*verage](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average). ARIMA-modellen zijn bijzonder geschikt om data te modelleren die [niet-stationair](https://wikipedia.org/wiki/Stationary_process) is. + +## Algemene concepten + +Om met ARIMA te kunnen werken, zijn er enkele concepten die je moet begrijpen: + +- 🎓 **Stationariteit**. Vanuit een statistisch perspectief verwijst stationariteit naar data waarvan de verdeling niet verandert wanneer deze in de tijd wordt verschoven. Niet-stationaire data vertoont daarentegen fluctuaties door trends die moeten worden getransformeerd om te kunnen worden geanalyseerd. Seizoensgebondenheid kan bijvoorbeeld fluctuaties in data veroorzaken en kan worden geëlimineerd door een proces van 'seizoensverschillen'. + +- 🎓 **[Verschillen nemen](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**. Het nemen van verschillen in data, wederom vanuit een statistisch perspectief, verwijst naar het proces van het transformeren van niet-stationaire data om deze stationair te maken door de niet-constante trend te verwijderen. "Het nemen van verschillen verwijdert de veranderingen in het niveau van een tijdreeks, elimineert trends en seizoensgebondenheid en stabiliseert daardoor het gemiddelde van de tijdreeks." [Paper van Shixiong et al](https://arxiv.org/abs/1904.07632) + +## ARIMA in de context van tijdreeksen + +Laten we de onderdelen van ARIMA uitpakken om beter te begrijpen hoe het ons helpt tijdreeksen te modelleren en voorspellingen te maken. + +- **AR - voor AutoRegressief**. Autoregressieve modellen, zoals de naam al aangeeft, kijken 'terug' in de tijd om eerdere waarden in je data te analyseren en aannames over deze waarden te maken. Deze eerdere waarden worden 'lags' genoemd. Een voorbeeld zou data zijn die de maandelijkse verkoop van potloden toont. De verkoopcijfers van elke maand worden beschouwd als een 'evoluerende variabele' in de dataset. Dit model wordt gebouwd door de "evoluerende variabele van interesse te regresseren op zijn eigen vertraagde (d.w.z. eerdere) waarden." [wikipedia](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) + +- **I - voor Geïntegreerd**. In tegenstelling tot de vergelijkbare 'ARMA'-modellen verwijst de 'I' in ARIMA naar het *[geïntegreerde](https://wikipedia.org/wiki/Order_of_integration)* aspect. De data wordt 'geïntegreerd' wanneer stappen van verschillen nemen worden toegepast om niet-stationariteit te elimineren. + +- **MA - voor Moving Average**. Het [moving-average](https://wikipedia.org/wiki/Moving-average_model)-aspect van dit model verwijst naar de outputvariabele die wordt bepaald door de huidige en eerdere waarden van lags te observeren. + +Kort gezegd: ARIMA wordt gebruikt om een model zo nauwkeurig mogelijk te laten aansluiten bij de speciale vorm van tijdreeksdata. + +## Oefening - bouw een ARIMA-model + +Open de [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/working)-map in deze les en vind het bestand [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/2-ARIMA/working/notebook.ipynb). + +1. Voer de notebook uit om de `statsmodels` Python-bibliotheek te laden; je hebt deze nodig voor ARIMA-modellen. + +1. Laad de benodigde bibliotheken. + +1. Laad nu nog enkele andere bibliotheken die nuttig zijn voor het plotten van data: + + ```python + import os + import warnings + import matplotlib.pyplot as plt + import numpy as np + import pandas as pd + import datetime as dt + import math + + from pandas.plotting import autocorrelation_plot + from statsmodels.tsa.statespace.sarimax import SARIMAX + from sklearn.preprocessing import MinMaxScaler + from common.utils import load_data, mape + from IPython.display import Image + + %matplotlib inline + pd.options.display.float_format = '{:,.2f}'.format + np.set_printoptions(precision=2) + warnings.filterwarnings("ignore") # specify to ignore warning messages + ``` + +1. Laad de data uit het bestand `/data/energy.csv` in een Pandas dataframe en bekijk het: + + ```python + energy = load_data('./data')[['load']] + energy.head(10) + ``` + +1. Plot alle beschikbare energiedata van januari 2012 tot december 2014. Er zouden geen verrassingen moeten zijn, aangezien we deze data in de vorige les hebben gezien: + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + Nu gaan we een model bouwen! + +### Maak trainings- en testdatasets + +Nu je data is geladen, kun je deze scheiden in trainings- en testsets. Je traint je model op de trainingsset. Zoals gebruikelijk evalueer je na het trainen de nauwkeurigheid van het model met behulp van de testset. Je moet ervoor zorgen dat de testset een latere periode in de tijd beslaat dan de trainingsset, zodat het model geen informatie uit toekomstige tijdsperioden verkrijgt. + +1. Wijs een periode van twee maanden toe van 1 september tot 31 oktober 2014 aan de trainingsset. De testset omvat de periode van twee maanden van 1 november tot 31 december 2014: + + ```python + train_start_dt = '2014-11-01 00:00:00' + test_start_dt = '2014-12-30 00:00:00' + ``` + + Aangezien deze data het dagelijkse energieverbruik weerspiegelt, is er een sterk seizoensgebonden patroon, maar het verbruik is het meest vergelijkbaar met het verbruik in meer recente dagen. + +1. Visualiseer de verschillen: + + ```python + energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ + .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ + .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![trainings- en testdata](../../../../7-TimeSeries/2-ARIMA/images/train-test.png) + + Daarom zou het gebruik van een relatief klein tijdsvenster voor het trainen van de data voldoende moeten zijn. + + > Opmerking: Aangezien de functie die we gebruiken om het ARIMA-model te passen in-sample validatie gebruikt tijdens het passen, zullen we validatiedata weglaten. + +### Bereid de data voor op training + +Nu moet je de data voorbereiden op training door filtering en schaling van je data uit te voeren. Filter je dataset om alleen de benodigde tijdsperioden en kolommen op te nemen, en schaal de data zodat deze wordt geprojecteerd in het interval 0,1. + +1. Filter de originele dataset om alleen de eerder genoemde tijdsperioden per set en alleen de benodigde kolom 'load' plus de datum op te nemen: + + ```python + train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] + test = energy.copy()[energy.index >= test_start_dt][['load']] + + print('Training data shape: ', train.shape) + print('Test data shape: ', test.shape) + ``` + + Je kunt de vorm van de data zien: + + ```output + Training data shape: (1416, 1) + Test data shape: (48, 1) + ``` + +1. Schaal de data naar het bereik (0, 1). + + ```python + scaler = MinMaxScaler() + train['load'] = scaler.fit_transform(train) + train.head(10) + ``` + +1. Visualiseer de originele versus geschaalde data: + + ```python + energy[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']].rename(columns={'load':'original load'}).plot.hist(bins=100, fontsize=12) + train.rename(columns={'load':'scaled load'}).plot.hist(bins=100, fontsize=12) + plt.show() + ``` + + ![origineel](../../../../7-TimeSeries/2-ARIMA/images/original.png) + + > De originele data + + ![geschaald](../../../../7-TimeSeries/2-ARIMA/images/scaled.png) + + > De geschaalde data + +1. Nu je de geschaalde data hebt gekalibreerd, kun je de testdata schalen: + + ```python + test['load'] = scaler.transform(test) + test.head() + ``` + +### Implementeer ARIMA + +Het is tijd om ARIMA te implementeren! Je gaat nu de `statsmodels`-bibliotheek gebruiken die je eerder hebt geïnstalleerd. + +Nu moet je een aantal stappen volgen: + + 1. Definieer het model door `SARIMAX()` aan te roepen en de modelparameters door te geven: p-, d- en q-parameters, en P-, D- en Q-parameters. + 2. Bereid het model voor op de trainingsdata door de functie `fit()` aan te roepen. + 3. Maak voorspellingen door de functie `forecast()` aan te roepen en het aantal stappen (de `horizon`) te specificeren om te voorspellen. + +> 🎓 Waar zijn al deze parameters voor? In een ARIMA-model zijn er 3 parameters die worden gebruikt om de belangrijkste aspecten van een tijdreeks te modelleren: seizoensgebondenheid, trend en ruis. Deze parameters zijn: + +`p`: de parameter die verband houdt met het autoregressieve aspect van het model, dat *verleden* waarden incorporeert. +`d`: de parameter die verband houdt met het geïntegreerde deel van het model, dat de hoeveelheid *verschillen nemen* (🎓 herinner je verschillen nemen 👆?) beïnvloedt die op een tijdreeks wordt toegepast. +`q`: de parameter die verband houdt met het moving-average deel van het model. + +> Opmerking: Als je data een seizoensgebonden aspect heeft - wat bij deze data het geval is - , gebruiken we een seizoensgebonden ARIMA-model (SARIMA). In dat geval moet je een andere set parameters gebruiken: `P`, `D` en `Q`, die dezelfde associaties beschrijven als `p`, `d` en `q`, maar betrekking hebben op de seizoensgebonden componenten van het model. + +1. Begin met het instellen van je gewenste horizonwaarde. Laten we 3 uur proberen: + + ```python + # Specify the number of steps to forecast ahead + HORIZON = 3 + print('Forecasting horizon:', HORIZON, 'hours') + ``` + + Het selecteren van de beste waarden voor de parameters van een ARIMA-model kan uitdagend zijn, omdat het enigszins subjectief en tijdrovend is. Je kunt overwegen een `auto_arima()`-functie te gebruiken uit de [`pyramid`-bibliotheek](https://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html). + +1. Probeer voorlopig enkele handmatige selecties om een goed model te vinden. + + ```python + order = (4, 1, 0) + seasonal_order = (1, 1, 0, 24) + + model = SARIMAX(endog=train, order=order, seasonal_order=seasonal_order) + results = model.fit() + + print(results.summary()) + ``` + + Een tabel met resultaten wordt afgedrukt. + +Je hebt je eerste model gebouwd! Nu moeten we een manier vinden om het te evalueren. + +### Evalueer je model + +Om je model te evalueren, kun je de zogenaamde `walk forward`-validatie uitvoeren. In de praktijk worden tijdreeksmodellen elke keer opnieuw getraind wanneer nieuwe data beschikbaar komt. Dit stelt het model in staat om de beste voorspelling te maken op elk tijdstip. + +Begin aan het begin van de tijdreeks met deze techniek, train het model op de trainingsdataset. Maak vervolgens een voorspelling voor de volgende tijdstap. De voorspelling wordt geëvalueerd aan de hand van de bekende waarde. De trainingsset wordt vervolgens uitgebreid met de bekende waarde en het proces wordt herhaald. + +> Opmerking: Je moet het venster van de trainingsset vast houden voor efficiënter trainen, zodat elke keer dat je een nieuwe observatie aan de trainingsset toevoegt, je de observatie uit het begin van de set verwijdert. + +Dit proces biedt een robuustere schatting van hoe het model in de praktijk zal presteren. Het komt echter met de rekenkundige kosten van het maken van zoveel modellen. Dit is acceptabel als de data klein is of als het model eenvoudig is, maar kan een probleem zijn op grotere schaal. + +Walk-forward validatie is de gouden standaard voor tijdreeksmodel-evaluatie en wordt aanbevolen voor je eigen projecten. + +1. Maak eerst een testdatapunt voor elke HORIZON-stap. + + ```python + test_shifted = test.copy() + + for t in range(1, HORIZON+1): + test_shifted['load+'+str(t)] = test_shifted['load'].shift(-t, freq='H') + + test_shifted = test_shifted.dropna(how='any') + test_shifted.head(5) + ``` + + | | | load | load+1 | load+2 | + | ---------- | -------- | ---- | ------ | ------ | + | 2014-12-30 | 00:00:00 | 0.33 | 0.29 | 0.27 | + | 2014-12-30 | 01:00:00 | 0.29 | 0.27 | 0.27 | + | 2014-12-30 | 02:00:00 | 0.27 | 0.27 | 0.30 | + | 2014-12-30 | 03:00:00 | 0.27 | 0.30 | 0.41 | + | 2014-12-30 | 04:00:00 | 0.30 | 0.41 | 0.57 | + + De data wordt horizontaal verschoven volgens het horizonpunt. + +1. Maak voorspellingen op je testdata met behulp van deze schuifvensterbenadering in een lus ter grootte van de testdatalengte: + + ```python + %%time + training_window = 720 # dedicate 30 days (720 hours) for training + + train_ts = train['load'] + test_ts = test_shifted + + history = [x for x in train_ts] + history = history[(-training_window):] + + predictions = list() + + order = (2, 1, 0) + seasonal_order = (1, 1, 0, 24) + + for t in range(test_ts.shape[0]): + model = SARIMAX(endog=history, order=order, seasonal_order=seasonal_order) + model_fit = model.fit() + yhat = model_fit.forecast(steps = HORIZON) + predictions.append(yhat) + obs = list(test_ts.iloc[t]) + # move the training window + history.append(obs[0]) + history.pop(0) + print(test_ts.index[t]) + print(t+1, ': predicted =', yhat, 'expected =', obs) + ``` + + Je kunt het trainen zien gebeuren: + + ```output + 2014-12-30 00:00:00 + 1 : predicted = [0.32 0.29 0.28] expected = [0.32945389435989236, 0.2900626678603402, 0.2739480752014323] + + 2014-12-30 01:00:00 + 2 : predicted = [0.3 0.29 0.3 ] expected = [0.2900626678603402, 0.2739480752014323, 0.26812891674127126] + + 2014-12-30 02:00:00 + 3 : predicted = [0.27 0.28 0.32] expected = [0.2739480752014323, 0.26812891674127126, 0.3025962399283795] + ``` + +1. Vergelijk de voorspellingen met de daadwerkelijke load: + + ```python + eval_df = pd.DataFrame(predictions, columns=['t+'+str(t) for t in range(1, HORIZON+1)]) + eval_df['timestamp'] = test.index[0:len(test.index)-HORIZON+1] + eval_df = pd.melt(eval_df, id_vars='timestamp', value_name='prediction', var_name='h') + eval_df['actual'] = np.array(np.transpose(test_ts)).ravel() + eval_df[['prediction', 'actual']] = scaler.inverse_transform(eval_df[['prediction', 'actual']]) + eval_df.head() + ``` + + Output + | | | timestamp | h | prediction | actual | + | --- | ---------- | --------- | --- | ---------- | -------- | + | 0 | 2014-12-30 | 00:00:00 | t+1 | 3,008.74 | 3,023.00 | + | 1 | 2014-12-30 | 01:00:00 | t+1 | 2,955.53 | 2,935.00 | + | 2 | 2014-12-30 | 02:00:00 | t+1 | 2,900.17 | 2,899.00 | + | 3 | 2014-12-30 | 03:00:00 | t+1 | 2,917.69 | 2,886.00 | + | 4 | 2014-12-30 | 04:00:00 | t+1 | 2,946.99 | 2,963.00 | + + Observeer de voorspelling van de uurlijkse data, vergeleken met de daadwerkelijke load. Hoe nauwkeurig is dit? + +### Controleer de nauwkeurigheid van je model + +Controleer de nauwkeurigheid van je model door de gemiddelde absolute procentuele fout (MAPE) over alle voorspellingen te testen. +> **🧮 Laat me de wiskunde zien** +> +> ![MAPE](../../../../7-TimeSeries/2-ARIMA/images/mape.png) +> +> [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) wordt gebruikt om de nauwkeurigheid van voorspellingen weer te geven als een verhouding, gedefinieerd door de bovenstaande formule. Het verschil tussen de werkelijke waarde en de voorspelde waarde wordt gedeeld door de werkelijke waarde. +> +> "De absolute waarde in deze berekening wordt opgeteld voor elk voorspeld tijdstip en gedeeld door het aantal passende punten n." [wikipedia](https://wikipedia.org/wiki/Mean_absolute_percentage_error) +1. Druk de vergelijking uit in code: + + ```python + if(HORIZON > 1): + eval_df['APE'] = (eval_df['prediction'] - eval_df['actual']).abs() / eval_df['actual'] + print(eval_df.groupby('h')['APE'].mean()) + ``` + +1. Bereken de MAPE van één stap: + + ```python + print('One step forecast MAPE: ', (mape(eval_df[eval_df['h'] == 't+1']['prediction'], eval_df[eval_df['h'] == 't+1']['actual']))*100, '%') + ``` + + MAPE van één stap voorspelling: 0.5570581332313952 % + +1. Print de MAPE van de meerstapsvoorspelling: + + ```python + print('Multi-step forecast MAPE: ', mape(eval_df['prediction'], eval_df['actual'])*100, '%') + ``` + + ```output + Multi-step forecast MAPE: 1.1460048657704118 % + ``` + + Een mooi laag getal is het beste: bedenk dat een voorspelling met een MAPE van 10 een afwijking van 10% heeft. + +1. Maar zoals altijd is het makkelijker om dit soort nauwkeurigheidsmetingen visueel te zien, dus laten we het plotten: + + ```python + if(HORIZON == 1): + ## Plotting single step forecast + eval_df.plot(x='timestamp', y=['actual', 'prediction'], style=['r', 'b'], figsize=(15, 8)) + + else: + ## Plotting multi step forecast + plot_df = eval_df[(eval_df.h=='t+1')][['timestamp', 'actual']] + for t in range(1, HORIZON+1): + plot_df['t+'+str(t)] = eval_df[(eval_df.h=='t+'+str(t))]['prediction'].values + + fig = plt.figure(figsize=(15, 8)) + ax = plt.plot(plot_df['timestamp'], plot_df['actual'], color='red', linewidth=4.0) + ax = fig.add_subplot(111) + for t in range(1, HORIZON+1): + x = plot_df['timestamp'][(t-1):] + y = plot_df['t+'+str(t)][0:len(x)] + ax.plot(x, y, color='blue', linewidth=4*math.pow(.9,t), alpha=math.pow(0.8,t)) + + ax.legend(loc='best') + + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![een tijdreeksmodel](../../../../7-TimeSeries/2-ARIMA/images/accuracy.png) + +🏆 Een zeer mooie grafiek, die een model met goede nauwkeurigheid laat zien. Goed gedaan! + +--- + +## 🚀Uitdaging + +Verdiep je in de manieren om de nauwkeurigheid van een tijdreeksmodel te testen. We behandelen MAPE in deze les, maar zijn er andere methoden die je kunt gebruiken? Onderzoek ze en annoteer ze. Een nuttig document is te vinden [hier](https://otexts.com/fpp2/accuracy.html) + +## [Quiz na de les](https://ff-quizzes.netlify.app/en/ml/) + +## Review & Zelfstudie + +Deze les behandelt alleen de basis van tijdreeksvoorspelling met ARIMA. Neem de tijd om je kennis te verdiepen door [deze repository](https://microsoft.github.io/forecasting/) en de verschillende modeltypes te verkennen om andere manieren te leren om tijdreeksmodellen te bouwen. + +## Opdracht + +[Een nieuw ARIMA-model](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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/7-TimeSeries/2-ARIMA/assignment.md b/translations/nl/7-TimeSeries/2-ARIMA/assignment.md new file mode 100644 index 00000000..c316933c --- /dev/null +++ b/translations/nl/7-TimeSeries/2-ARIMA/assignment.md @@ -0,0 +1,25 @@ + +# Een nieuw ARIMA-model + +## Instructies + +Nu je een ARIMA-model hebt gebouwd, maak een nieuw model met verse data (probeer een van [deze datasets van Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html). Annoteren je werk in een notebook, visualiseer de data en je model, en test de nauwkeurigheid met behulp van MAPE. + +## Rubriek + +| Criteria | Uitmuntend | Voldoende | Verbetering nodig | +| -------- | ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ----------------------------------- | +| | Een notebook wordt gepresenteerd met een nieuw ARIMA-model dat is gebouwd, getest en uitgelegd met visualisaties en nauwkeurigheid vermeld. | Het gepresenteerde notebook is niet geannoteerd of bevat fouten | Een onvolledig notebook wordt gepresenteerd | + +--- + +**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 zijn 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 diff --git a/translations/nl/7-TimeSeries/2-ARIMA/solution/Julia/README.md b/translations/nl/7-TimeSeries/2-ARIMA/solution/Julia/README.md new file mode 100644 index 00000000..9d9954fc --- /dev/null +++ b/translations/nl/7-TimeSeries/2-ARIMA/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Disclaimer**: +Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we ons best doen voor nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn 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 diff --git a/translations/nl/7-TimeSeries/2-ARIMA/solution/R/README.md b/translations/nl/7-TimeSeries/2-ARIMA/solution/R/README.md new file mode 100644 index 00000000..934abebf --- /dev/null +++ b/translations/nl/7-TimeSeries/2-ARIMA/solution/R/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Disclaimer**: +Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we ons best doen voor nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn 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 diff --git a/translations/nl/7-TimeSeries/3-SVR/README.md b/translations/nl/7-TimeSeries/3-SVR/README.md new file mode 100644 index 00000000..5f86f43d --- /dev/null +++ b/translations/nl/7-TimeSeries/3-SVR/README.md @@ -0,0 +1,400 @@ + +# Tijdreeksvoorspelling met Support Vector Regressor + +In de vorige les heb je geleerd hoe je het ARIMA-model kunt gebruiken om voorspellingen te maken voor tijdreeksen. Nu ga je kijken naar het Support Vector Regressor-model, een regressiemodel dat wordt gebruikt om continue gegevens te voorspellen. + +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Introductie + +In deze les ontdek je een specifieke manier om modellen te bouwen met [**SVM**: **S**upport **V**ector **M**achine](https://en.wikipedia.org/wiki/Support-vector_machine) voor regressie, oftewel **SVR: Support Vector Regressor**. + +### SVR in de context van tijdreeksen [^1] + +Voordat je het belang van SVR in tijdreeksvoorspelling begrijpt, zijn hier enkele belangrijke concepten die je moet kennen: + +- **Regressie:** Een techniek voor begeleid leren om continue waarden te voorspellen op basis van een gegeven set invoerwaarden. Het idee is om een curve (of lijn) in de kenmerkenruimte te passen die het maximale aantal datapunten bevat. [Klik hier](https://en.wikipedia.org/wiki/Regression_analysis) voor meer informatie. +- **Support Vector Machine (SVM):** Een type begeleid machine learning-model dat wordt gebruikt voor classificatie, regressie en het detecteren van uitschieters. Het model is een hypervlak in de kenmerkenruimte, dat in het geval van classificatie fungeert als een grens en in het geval van regressie als de best passende lijn. In SVM wordt meestal een kernfunctie gebruikt om de dataset te transformeren naar een ruimte met een hoger aantal dimensies, zodat ze gemakkelijker te scheiden zijn. [Klik hier](https://en.wikipedia.org/wiki/Support-vector_machine) voor meer informatie over SVM's. +- **Support Vector Regressor (SVR):** Een type SVM dat de best passende lijn (die in het geval van SVM een hypervlak is) vindt die het maximale aantal datapunten bevat. + +### Waarom SVR? [^1] + +In de vorige les heb je geleerd over ARIMA, een zeer succesvol statistisch lineair model om tijdreeksgegevens te voorspellen. Echter, in veel gevallen hebben tijdreeksgegevens *non-lineariteit*, die niet kan worden gemodelleerd door lineaire modellen. In dergelijke gevallen maakt het vermogen van SVM om non-lineariteit in de gegevens te overwegen voor regressietaken SVR succesvol in tijdreeksvoorspelling. + +## Oefening - bouw een SVR-model + +De eerste paar stappen voor gegevensvoorbereiding zijn hetzelfde als die van de vorige les over [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA). + +Open de [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/3-SVR/working) map in deze les en vind het [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/3-SVR/working/notebook.ipynb) bestand.[^2] + +1. Voer de notebook uit en importeer de benodigde bibliotheken: [^2] + + ```python + import sys + sys.path.append('../../') + ``` + + ```python + import os + import warnings + import matplotlib.pyplot as plt + import numpy as np + import pandas as pd + import datetime as dt + import math + + from sklearn.svm import SVR + from sklearn.preprocessing import MinMaxScaler + from common.utils import load_data, mape + ``` + +2. Laad de gegevens uit het `/data/energy.csv` bestand in een Pandas dataframe en bekijk ze: [^2] + + ```python + energy = load_data('../../data')[['load']] + ``` + +3. Plot alle beschikbare energiedata van januari 2012 tot december 2014: [^2] + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![volledige data](../../../../7-TimeSeries/3-SVR/images/full-data.png) + + Nu gaan we ons SVR-model bouwen. + +### Maak trainings- en testdatasets + +Nu je gegevens zijn geladen, kun je ze scheiden in trainings- en testsets. Vervolgens vorm je de gegevens om tot een dataset op basis van tijdstappen, wat nodig zal zijn voor de SVR. Je traint je model op de trainingsset. Nadat het model is getraind, evalueer je de nauwkeurigheid op de trainingsset, testset en vervolgens de volledige dataset om de algehele prestaties te zien. Je moet ervoor zorgen dat de testset een latere periode in de tijd omvat dan de trainingsset om te voorkomen dat het model informatie uit toekomstige tijdsperioden verkrijgt [^2] (een situatie die bekend staat als *overfitting*). + +1. Wijs een periode van twee maanden toe van 1 september tot 31 oktober 2014 aan de trainingsset. De testset omvat de periode van twee maanden van 1 november tot 31 december 2014: [^2] + + ```python + train_start_dt = '2014-11-01 00:00:00' + test_start_dt = '2014-12-30 00:00:00' + ``` + +2. Visualiseer de verschillen: [^2] + + ```python + energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ + .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ + .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![trainings- en testdata](../../../../7-TimeSeries/3-SVR/images/train-test.png) + + + +### Bereid de gegevens voor op training + +Nu moet je de gegevens voorbereiden op training door filtering en schaling van je gegevens uit te voeren. Filter je dataset om alleen de benodigde tijdsperioden en kolommen op te nemen, en schaal de gegevens zodat ze worden geprojecteerd in het interval 0,1. + +1. Filter de originele dataset om alleen de eerder genoemde tijdsperioden per set op te nemen en alleen de benodigde kolom 'load' plus de datum: [^2] + + ```python + train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] + test = energy.copy()[energy.index >= test_start_dt][['load']] + + print('Training data shape: ', train.shape) + print('Test data shape: ', test.shape) + ``` + + ```output + Training data shape: (1416, 1) + Test data shape: (48, 1) + ``` + +2. Schaal de trainingsgegevens naar het bereik (0, 1): [^2] + + ```python + scaler = MinMaxScaler() + train['load'] = scaler.fit_transform(train) + ``` + +4. Nu schaal je de testgegevens: [^2] + + ```python + test['load'] = scaler.transform(test) + ``` + +### Maak gegevens met tijdstappen [^1] + +Voor de SVR transformeer je de invoergegevens naar de vorm `[batch, timesteps]`. Dus, je herschikt de bestaande `train_data` en `test_data` zodat er een nieuwe dimensie is die verwijst naar de tijdstappen. + +```python +# Converting to numpy arrays +train_data = train.values +test_data = test.values +``` + +Voor dit voorbeeld nemen we `timesteps = 5`. Dus, de invoer voor het model zijn de gegevens voor de eerste 4 tijdstappen, en de uitvoer zal de gegevens voor de 5e tijdstap zijn. + +```python +timesteps=5 +``` + +Converteer trainingsgegevens naar een 2D-tensor met behulp van geneste lijstbegrippen: + +```python +train_data_timesteps=np.array([[j for j in train_data[i:i+timesteps]] for i in range(0,len(train_data)-timesteps+1)])[:,:,0] +train_data_timesteps.shape +``` + +```output +(1412, 5) +``` + +Converteer testgegevens naar een 2D-tensor: + +```python +test_data_timesteps=np.array([[j for j in test_data[i:i+timesteps]] for i in range(0,len(test_data)-timesteps+1)])[:,:,0] +test_data_timesteps.shape +``` + +```output +(44, 5) +``` + +Selecteer invoer en uitvoer uit trainings- en testgegevens: + +```python +x_train, y_train = train_data_timesteps[:,:timesteps-1],train_data_timesteps[:,[timesteps-1]] +x_test, y_test = test_data_timesteps[:,:timesteps-1],test_data_timesteps[:,[timesteps-1]] + +print(x_train.shape, y_train.shape) +print(x_test.shape, y_test.shape) +``` + +```output +(1412, 4) (1412, 1) +(44, 4) (44, 1) +``` + +### Implementeer SVR [^1] + +Nu is het tijd om SVR te implementeren. Voor meer informatie over deze implementatie kun je [deze documentatie](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html) raadplegen. Voor onze implementatie volgen we deze stappen: + + 1. Definieer het model door `SVR()` aan te roepen en de modelhyperparameters door te geven: kernel, gamma, c en epsilon + 2. Bereid het model voor op de trainingsgegevens door de functie `fit()` aan te roepen + 3. Maak voorspellingen door de functie `predict()` aan te roepen + +Nu maken we een SVR-model. Hier gebruiken we de [RBF-kernel](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel), en stellen we de hyperparameters gamma, C en epsilon in op respectievelijk 0.5, 10 en 0.05. + +```python +model = SVR(kernel='rbf',gamma=0.5, C=10, epsilon = 0.05) +``` + +#### Pas het model toe op trainingsgegevens [^1] + +```python +model.fit(x_train, y_train[:,0]) +``` + +```output +SVR(C=10, cache_size=200, coef0=0.0, degree=3, epsilon=0.05, gamma=0.5, + kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False) +``` + +#### Maak modelvoorspellingen [^1] + +```python +y_train_pred = model.predict(x_train).reshape(-1,1) +y_test_pred = model.predict(x_test).reshape(-1,1) + +print(y_train_pred.shape, y_test_pred.shape) +``` + +```output +(1412, 1) (44, 1) +``` + +Je hebt je SVR gebouwd! Nu moeten we het evalueren. + +### Evalueer je model [^1] + +Voor evaluatie schalen we eerst de gegevens terug naar onze originele schaal. Vervolgens, om de prestaties te controleren, plotten we de originele en voorspelde tijdreeksplot en printen we ook het MAPE-resultaat. + +Schaal de voorspelde en originele uitvoer: + +```python +# Scaling the predictions +y_train_pred = scaler.inverse_transform(y_train_pred) +y_test_pred = scaler.inverse_transform(y_test_pred) + +print(len(y_train_pred), len(y_test_pred)) +``` + +```python +# Scaling the original values +y_train = scaler.inverse_transform(y_train) +y_test = scaler.inverse_transform(y_test) + +print(len(y_train), len(y_test)) +``` + +#### Controleer modelprestaties op trainings- en testgegevens [^1] + +We halen de tijdstempels uit de dataset om te tonen op de x-as van onze plot. Merk op dat we de eerste ```timesteps-1``` waarden gebruiken als invoer voor de eerste uitvoer, dus de tijdstempels voor de uitvoer beginnen daarna. + +```python +train_timestamps = energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)].index[timesteps-1:] +test_timestamps = energy[test_start_dt:].index[timesteps-1:] + +print(len(train_timestamps), len(test_timestamps)) +``` + +```output +1412 44 +``` + +Plot de voorspellingen voor trainingsgegevens: + +```python +plt.figure(figsize=(25,6)) +plt.plot(train_timestamps, y_train, color = 'red', linewidth=2.0, alpha = 0.6) +plt.plot(train_timestamps, y_train_pred, color = 'blue', linewidth=0.8) +plt.legend(['Actual','Predicted']) +plt.xlabel('Timestamp') +plt.title("Training data prediction") +plt.show() +``` + +![voorspelling trainingsgegevens](../../../../7-TimeSeries/3-SVR/images/train-data-predict.png) + +Print MAPE voor trainingsgegevens + +```python +print('MAPE for training data: ', mape(y_train_pred, y_train)*100, '%') +``` + +```output +MAPE for training data: 1.7195710200875551 % +``` + +Plot de voorspellingen voor testgegevens + +```python +plt.figure(figsize=(10,3)) +plt.plot(test_timestamps, y_test, color = 'red', linewidth=2.0, alpha = 0.6) +plt.plot(test_timestamps, y_test_pred, color = 'blue', linewidth=0.8) +plt.legend(['Actual','Predicted']) +plt.xlabel('Timestamp') +plt.show() +``` + +![voorspelling testgegevens](../../../../7-TimeSeries/3-SVR/images/test-data-predict.png) + +Print MAPE voor testgegevens + +```python +print('MAPE for testing data: ', mape(y_test_pred, y_test)*100, '%') +``` + +```output +MAPE for testing data: 1.2623790187854018 % +``` + +🏆 Je hebt een zeer goed resultaat op de testdataset! + +### Controleer modelprestaties op volledige dataset [^1] + +```python +# Extracting load values as numpy array +data = energy.copy().values + +# Scaling +data = scaler.transform(data) + +# Transforming to 2D tensor as per model input requirement +data_timesteps=np.array([[j for j in data[i:i+timesteps]] for i in range(0,len(data)-timesteps+1)])[:,:,0] +print("Tensor shape: ", data_timesteps.shape) + +# Selecting inputs and outputs from data +X, Y = data_timesteps[:,:timesteps-1],data_timesteps[:,[timesteps-1]] +print("X shape: ", X.shape,"\nY shape: ", Y.shape) +``` + +```output +Tensor shape: (26300, 5) +X shape: (26300, 4) +Y shape: (26300, 1) +``` + +```python +# Make model predictions +Y_pred = model.predict(X).reshape(-1,1) + +# Inverse scale and reshape +Y_pred = scaler.inverse_transform(Y_pred) +Y = scaler.inverse_transform(Y) +``` + +```python +plt.figure(figsize=(30,8)) +plt.plot(Y, color = 'red', linewidth=2.0, alpha = 0.6) +plt.plot(Y_pred, color = 'blue', linewidth=0.8) +plt.legend(['Actual','Predicted']) +plt.xlabel('Timestamp') +plt.show() +``` + +![voorspelling volledige data](../../../../7-TimeSeries/3-SVR/images/full-data-predict.png) + +```python +print('MAPE: ', mape(Y_pred, Y)*100, '%') +``` + +```output +MAPE: 2.0572089029888656 % +``` + + + +🏆 Zeer mooie plots, die een model met goede nauwkeurigheid laten zien. Goed gedaan! + +--- + +## 🚀Uitdaging + +- Probeer de hyperparameters (gamma, C, epsilon) aan te passen bij het maken van het model en evalueer op de gegevens om te zien welke set hyperparameters de beste resultaten geeft op de testgegevens. Voor meer informatie over deze hyperparameters kun je [deze documentatie](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel) raadplegen. +- Probeer verschillende kernfuncties te gebruiken voor het model en analyseer hun prestaties op de dataset. Een nuttige documentatie is te vinden [hier](https://scikit-learn.org/stable/modules/svm.html#kernel-functions). +- Probeer verschillende waarden voor `timesteps` te gebruiken zodat het model terugkijkt om voorspellingen te maken. + +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Review & Zelfstudie + +Deze les was bedoeld om de toepassing van SVR voor tijdreeksvoorspelling te introduceren. Voor meer informatie over SVR kun je [deze blog](https://www.analyticsvidhya.com/blog/2020/03/support-vector-regression-tutorial-for-machine-learning/) raadplegen. Deze [documentatie over scikit-learn](https://scikit-learn.org/stable/modules/svm.html) biedt een meer uitgebreide uitleg over SVM's in het algemeen, [SVR's](https://scikit-learn.org/stable/modules/svm.html#regression) en ook andere implementatiedetails zoals de verschillende [kernfuncties](https://scikit-learn.org/stable/modules/svm.html#kernel-functions) die kunnen worden gebruikt, en hun parameters. + +## Opdracht + +[Een nieuw SVR-model](assignment.md) + + + +## Credits + + +[^1]: De tekst, code en output in deze sectie is bijgedragen door [@AnirbanMukherjeeXD](https://github.com/AnirbanMukherjeeXD) +[^2]: De tekst, code en output in deze sectie is afkomstig van [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA) + +--- + +**Disclaimer**: +Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we ons best doen voor nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn 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 diff --git a/translations/nl/7-TimeSeries/3-SVR/assignment.md b/translations/nl/7-TimeSeries/3-SVR/assignment.md new file mode 100644 index 00000000..9d49ca61 --- /dev/null +++ b/translations/nl/7-TimeSeries/3-SVR/assignment.md @@ -0,0 +1,27 @@ + +# Een nieuw SVR-model + +## Instructies [^1] + +Nu je een SVR-model hebt gebouwd, maak een nieuw model met verse data (probeer een van [deze datasets van Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Annoteren je werk in een notebook, visualiseer de data en je model, en test de nauwkeurigheid met behulp van geschikte grafieken en MAPE. Probeer ook de verschillende hyperparameters aan te passen en gebruik verschillende waarden voor de tijdstappen. + +## Rubriek [^1] + +| Criteria | Uitmuntend | Voldoende | Verbetering nodig | +| -------- | ------------------------------------------------------------ | --------------------------------------------------------- | ----------------------------------- | +| | Een notebook wordt gepresenteerd met een SVR-model dat is gebouwd, getest en uitgelegd met visualisaties en nauwkeurigheid vermeld. | Het gepresenteerde notebook is niet geannoteerd of bevat fouten. | Een onvolledig notebook wordt gepresenteerd | + +[^1]: De tekst in deze sectie is gebaseerd op de [opdracht van ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/7-TimeSeries/README.md b/translations/nl/7-TimeSeries/README.md new file mode 100644 index 00000000..c937c1b9 --- /dev/null +++ b/translations/nl/7-TimeSeries/README.md @@ -0,0 +1,37 @@ + +# Introductie tot tijdreeksvoorspelling + +Wat is tijdreeksvoorspelling? Het gaat om het voorspellen van toekomstige gebeurtenissen door trends uit het verleden te analyseren. + +## Regionaal onderwerp: wereldwijd elektriciteitsverbruik ✨ + +In deze twee lessen maak je kennis met tijdreeksvoorspelling, een enigszins minder bekend gebied van machine learning dat desondanks enorm waardevol is voor industriële en zakelijke toepassingen, naast andere gebieden. Hoewel neurale netwerken kunnen worden gebruikt om de bruikbaarheid van deze modellen te verbeteren, zullen we ze bestuderen in de context van klassieke machine learning, omdat modellen helpen toekomstige prestaties te voorspellen op basis van het verleden. + +Onze regionale focus is het elektriciteitsverbruik in de wereld, een interessante dataset om te leren hoe je toekomstig energieverbruik kunt voorspellen op basis van patronen van eerdere belasting. Je kunt zien hoe dit soort voorspellingen enorm nuttig kan zijn in een zakelijke omgeving. + +![elektriciteitsnet](../../../7-TimeSeries/images/electric-grid.jpg) + +Foto door [Peddi Sai hrithik](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) van elektriciteitsmasten langs een weg in Rajasthan op [Unsplash](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) + +## Lessen + +1. [Introductie tot tijdreeksvoorspelling](1-Introduction/README.md) +2. [ARIMA-tijdreeksmodellen bouwen](2-ARIMA/README.md) +3. [Support Vector Regressor bouwen voor tijdreeksvoorspelling](3-SVR/README.md) + +## Credits + +"Introductie tot tijdreeksvoorspelling" is geschreven met ⚡️ door [Francesca Lazzeri](https://twitter.com/frlazzeri) en [Jen Looper](https://twitter.com/jenlooper). De notebooks verschenen voor het eerst online in de [Azure "Deep Learning For Time Series" repo](https://github.com/Azure/DeepLearningForTimeSeriesForecasting), oorspronkelijk geschreven door Francesca Lazzeri. De SVR-les is geschreven door [Anirban Mukherjee](https://github.com/AnirbanMukherjeeXD). + +--- + +**Disclaimer**: +Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we ons best doen om nauwkeurigheid te garanderen, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn 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 diff --git a/translations/nl/8-Reinforcement/1-QLearning/README.md b/translations/nl/8-Reinforcement/1-QLearning/README.md new file mode 100644 index 00000000..7f0c5fc8 --- /dev/null +++ b/translations/nl/8-Reinforcement/1-QLearning/README.md @@ -0,0 +1,256 @@ + +# Introductie tot Reinforcement Learning en Q-Learning + +![Samenvatting van reinforcement in machine learning in een sketchnote](../../../../sketchnotes/ml-reinforcement.png) +> Sketchnote door [Tomomi Imura](https://www.twitter.com/girlie_mac) + +Reinforcement learning draait om drie belangrijke concepten: de agent, enkele toestanden, en een set acties per toestand. Door een actie uit te voeren in een bepaalde toestand, krijgt de agent een beloning. Stel je opnieuw het computerspel Super Mario voor. Jij bent Mario, je bevindt je in een level van het spel, naast een klifrand. Boven je hangt een munt. Jij als Mario, in een level, op een specifieke positie ... dat is jouw toestand. Eén stap naar rechts zetten (een actie) brengt je over de rand, wat je een lage numerieke score oplevert. Maar als je op de springknop drukt, scoor je een punt en blijf je in leven. Dat is een positieve uitkomst en zou je een positieve numerieke score moeten opleveren. + +Met behulp van reinforcement learning en een simulator (het spel) kun je leren hoe je het spel speelt om de beloning te maximaliseren, namelijk in leven blijven en zoveel mogelijk punten scoren. + +[![Introductie tot Reinforcement Learning](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo) + +> 🎥 Klik op de afbeelding hierboven om Dmitry te horen praten over Reinforcement Learning + +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Vereisten en Setup + +In deze les gaan we experimenteren met wat code in Python. Je moet in staat zijn om de Jupyter Notebook-code uit deze les uit te voeren, ofwel op je computer of ergens in de cloud. + +Je kunt [het lesnotebook](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) openen en door deze les lopen om het op te bouwen. + +> **Opmerking:** Als je deze code vanuit de cloud opent, moet je ook het bestand [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) ophalen, dat wordt gebruikt in de notebook-code. Voeg het toe aan dezelfde map als het notebook. + +## Introductie + +In deze les verkennen we de wereld van **[Peter en de Wolf](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**, geïnspireerd door een muzikaal sprookje van de Russische componist [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). We gebruiken **Reinforcement Learning** om Peter zijn omgeving te laten verkennen, smakelijke appels te verzamelen en de wolf te vermijden. + +**Reinforcement Learning** (RL) is een leertechniek waarmee we het optimale gedrag van een **agent** in een bepaalde **omgeving** kunnen leren door veel experimenten uit te voeren. Een agent in deze omgeving moet een **doel** hebben, gedefinieerd door een **beloningsfunctie**. + +## De omgeving + +Voor de eenvoud beschouwen we Peters wereld als een vierkant bord van grootte `breedte` x `hoogte`, zoals dit: + +![Peters Omgeving](../../../../8-Reinforcement/1-QLearning/images/environment.png) + +Elke cel op dit bord kan zijn: + +* **grond**, waarop Peter en andere wezens kunnen lopen. +* **water**, waarop je uiteraard niet kunt lopen. +* een **boom** of **gras**, een plek waar je kunt uitrusten. +* een **appel**, iets wat Peter graag zou vinden om zichzelf te voeden. +* een **wolf**, die gevaarlijk is en vermeden moet worden. + +Er is een apart Python-module, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), die de code bevat om met deze omgeving te werken. Omdat deze code niet belangrijk is voor het begrijpen van onze concepten, importeren we de module en gebruiken we deze om het voorbeeldbord te maken (codeblok 1): + +```python +from rlboard import * + +width, height = 8,8 +m = Board(width,height) +m.randomize(seed=13) +m.plot() +``` + +Deze code zou een afbeelding van de omgeving moeten afdrukken die lijkt op de bovenstaande. + +## Acties en beleid + +In ons voorbeeld is Peters doel om een appel te vinden, terwijl hij de wolf en andere obstakels vermijdt. Om dit te doen, kan hij in principe rondlopen totdat hij een appel vindt. + +Daarom kan hij op elke positie kiezen uit een van de volgende acties: omhoog, omlaag, links en rechts. + +We definiëren die acties als een dictionary en koppelen ze aan paren van bijbehorende coördinatenwijzigingen. Bijvoorbeeld, naar rechts bewegen (`R`) zou overeenkomen met een paar `(1,0)`. (codeblok 2): + +```python +actions = { "U" : (0,-1), "D" : (0,1), "L" : (-1,0), "R" : (1,0) } +action_idx = { a : i for i,a in enumerate(actions.keys()) } +``` + +Samenvattend zijn de strategie en het doel van dit scenario als volgt: + +- **De strategie**, van onze agent (Peter) wordt gedefinieerd door een zogenaamde **policy**. Een policy is een functie die de actie retourneert in een bepaalde toestand. In ons geval wordt de toestand van het probleem weergegeven door het bord, inclusief de huidige positie van de speler. + +- **Het doel**, van reinforcement learning is uiteindelijk een goed beleid te leren dat ons in staat stelt het probleem efficiënt op te lossen. Als basislijn beschouwen we echter het eenvoudigste beleid, genaamd **random walk**. + +## Random walk + +Laten we eerst ons probleem oplossen door een random walk-strategie te implementeren. Bij random walk kiezen we willekeurig de volgende actie uit de toegestane acties, totdat we de appel bereiken (codeblok 3). + +1. Implementeer de random walk met de onderstaande code: + + ```python + def random_policy(m): + return random.choice(list(actions)) + + def walk(m,policy,start_position=None): + n = 0 # number of steps + # set initial position + if start_position: + m.human = start_position + else: + m.random_start() + while True: + if m.at() == Board.Cell.apple: + return n # success! + if m.at() in [Board.Cell.wolf, Board.Cell.water]: + return -1 # eaten by wolf or drowned + while True: + a = actions[policy(m)] + new_pos = m.move_pos(m.human,a) + if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water: + m.move(a) # do the actual move + break + n+=1 + + walk(m,random_policy) + ``` + + De oproep naar `walk` zou de lengte van het bijbehorende pad moeten retourneren, wat kan variëren van de ene run tot de andere. + +1. Voer het walk-experiment een aantal keren uit (bijvoorbeeld 100) en druk de resulterende statistieken af (codeblok 4): + + ```python + def print_statistics(policy): + s,w,n = 0,0,0 + for _ in range(100): + z = walk(m,policy) + if z<0: + w+=1 + else: + s += z + n += 1 + print(f"Average path length = {s/n}, eaten by wolf: {w} times") + + print_statistics(random_policy) + ``` + + Merk op dat de gemiddelde lengte van een pad ongeveer 30-40 stappen is, wat behoorlijk veel is, gezien het feit dat de gemiddelde afstand tot de dichtstbijzijnde appel ongeveer 5-6 stappen is. + + Je kunt ook zien hoe Peters beweging eruitziet tijdens de random walk: + + ![Peters Random Walk](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif) + +## Beloningsfunctie + +Om ons beleid intelligenter te maken, moeten we begrijpen welke bewegingen "beter" zijn dan andere. Om dit te doen, moeten we ons doel definiëren. + +Het doel kan worden gedefinieerd in termen van een **beloningsfunctie**, die een scorewaarde retourneert voor elke toestand. Hoe hoger het getal, hoe beter de beloningsfunctie. (codeblok 5) + +```python +move_reward = -0.1 +goal_reward = 10 +end_reward = -10 + +def reward(m,pos=None): + pos = pos or m.human + if not m.is_valid(pos): + return end_reward + x = m.at(pos) + if x==Board.Cell.water or x == Board.Cell.wolf: + return end_reward + if x==Board.Cell.apple: + return goal_reward + return move_reward +``` + +Een interessant aspect van beloningsfuncties is dat in de meeste gevallen *we alleen een substantiële beloning krijgen aan het einde van het spel*. Dit betekent dat ons algoritme op de een of andere manier "goede" stappen moet onthouden die leiden tot een positieve beloning aan het einde, en hun belang moet vergroten. Evenzo moeten alle bewegingen die tot slechte resultaten leiden worden ontmoedigd. + +## Q-Learning + +Een algoritme dat we hier zullen bespreken, heet **Q-Learning**. In dit algoritme wordt het beleid gedefinieerd door een functie (of een datastructuur) genaamd een **Q-Table**. Het registreert de "kwaliteit" van elke actie in een bepaalde toestand. + +Het wordt een Q-Table genoemd omdat het vaak handig is om het weer te geven als een tabel of een multidimensionale array. Omdat ons bord afmetingen heeft van `breedte` x `hoogte`, kunnen we de Q-Table weergeven met behulp van een numpy-array met vorm `breedte` x `hoogte` x `len(actions)`: (codeblok 6) + +```python +Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions) +``` + +Merk op dat we alle waarden van de Q-Table initialiseren met een gelijke waarde, in ons geval - 0.25. Dit komt overeen met het "random walk"-beleid, omdat alle bewegingen in elke toestand even goed zijn. We kunnen de Q-Table doorgeven aan de `plot`-functie om de tabel op het bord te visualiseren: `m.plot(Q)`. + +![Peters Omgeving](../../../../8-Reinforcement/1-QLearning/images/env_init.png) + +In het midden van elke cel staat een "pijl" die de voorkeursrichting van beweging aangeeft. Omdat alle richtingen gelijk zijn, wordt een stip weergegeven. + +Nu moeten we de simulatie uitvoeren, onze omgeving verkennen en een betere verdeling van Q-Table-waarden leren, waarmee we veel sneller het pad naar de appel kunnen vinden. + +## Essentie van Q-Learning: Bellman-vergelijking + +Zodra we beginnen te bewegen, heeft elke actie een bijbehorende beloning, d.w.z. we kunnen theoretisch de volgende actie selecteren op basis van de hoogste directe beloning. Echter, in de meeste toestanden zal de beweging ons doel om de appel te bereiken niet bereiken, en dus kunnen we niet onmiddellijk beslissen welke richting beter is. + +> Onthoud dat het niet het directe resultaat is dat telt, maar eerder het uiteindelijke resultaat, dat we aan het einde van de simulatie zullen verkrijgen. + +Om rekening te houden met deze vertraagde beloning, moeten we de principes van **[dynamisch programmeren](https://en.wikipedia.org/wiki/Dynamic_programming)** gebruiken, waarmee we ons probleem recursief kunnen benaderen. + +Stel dat we nu in toestand *s* zijn en we willen naar de volgende toestand *s'* gaan. Door dit te doen, ontvangen we de directe beloning *r(s,a)*, gedefinieerd door de beloningsfunctie, plus een toekomstige beloning. Als we aannemen dat onze Q-Table correct de "aantrekkelijkheid" van elke actie weergeeft, dan zullen we in toestand *s'* een actie *a* kiezen die overeenkomt met de maximale waarde van *Q(s',a')*. Dus de best mogelijke toekomstige beloning die we in toestand *s* zouden kunnen krijgen, wordt gedefinieerd als `max` + +## Controle van het beleid + +Aangezien de Q-Table de "aantrekkelijkheid" van elke actie in elke staat weergeeft, is het vrij eenvoudig om deze te gebruiken om efficiënte navigatie in onze wereld te definiëren. In het eenvoudigste geval kunnen we de actie selecteren die overeenkomt met de hoogste waarde in de Q-Table: (code block 9) + +```python +def qpolicy_strict(m): + x,y = m.human + v = probs(Q[x,y]) + a = list(actions)[np.argmax(v)] + return a + +walk(m,qpolicy_strict) +``` + +> Als je de bovenstaande code meerdere keren probeert, merk je misschien dat deze soms "vastloopt" en dat je op de STOP-knop in het notebook moet drukken om het te onderbreken. Dit gebeurt omdat er situaties kunnen zijn waarin twee staten elkaar "aanwijzen" in termen van optimale Q-waarde, waardoor de agent eindeloos tussen die staten blijft bewegen. + +## 🚀Uitdaging + +> **Taak 1:** Pas de `walk`-functie aan om de maximale lengte van het pad te beperken tot een bepaald aantal stappen (bijvoorbeeld 100), en kijk hoe de bovenstaande code deze waarde van tijd tot tijd retourneert. + +> **Taak 2:** Pas de `walk`-functie aan zodat deze niet terugkeert naar plaatsen waar hij eerder is geweest. Dit voorkomt dat `walk` in een lus terechtkomt, maar de agent kan nog steeds "vast" komen te zitten op een locatie waaruit hij niet kan ontsnappen. + +## Navigatie + +Een betere navigatiebeleid zou het beleid zijn dat we tijdens de training hebben gebruikt, dat exploitatie en exploratie combineert. In dit beleid selecteren we elke actie met een bepaalde waarschijnlijkheid, evenredig aan de waarden in de Q-Table. Deze strategie kan er nog steeds toe leiden dat de agent terugkeert naar een positie die hij al heeft verkend, maar zoals je kunt zien in de onderstaande code, resulteert dit in een zeer kort gemiddeld pad naar de gewenste locatie (onthoud dat `print_statistics` de simulatie 100 keer uitvoert): (code block 10) + +```python +def qpolicy(m): + x,y = m.human + v = probs(Q[x,y]) + a = random.choices(list(actions),weights=v)[0] + return a + +print_statistics(qpolicy) +``` + +Na het uitvoeren van deze code zou je een veel kleinere gemiddelde padlengte moeten krijgen dan voorheen, in de orde van 3-6. + +## Onderzoek naar het leerproces + +Zoals we hebben vermeld, is het leerproces een balans tussen exploratie en het benutten van opgedane kennis over de structuur van de probleemruimte. We hebben gezien dat de resultaten van het leren (het vermogen om een agent te helpen een kort pad naar het doel te vinden) zijn verbeterd, maar het is ook interessant om te observeren hoe de gemiddelde padlengte zich gedraagt tijdens het leerproces: + +De leerresultaten kunnen als volgt worden samengevat: + +- **Gemiddelde padlengte neemt toe**. Wat we hier zien, is dat in het begin de gemiddelde padlengte toeneemt. Dit komt waarschijnlijk doordat we, wanneer we niets weten over de omgeving, geneigd zijn vast te lopen in slechte staten, zoals water of een wolf. Naarmate we meer leren en deze kennis beginnen te gebruiken, kunnen we de omgeving langer verkennen, maar we weten nog steeds niet goed waar de appels zijn. + +- **Padlengte neemt af naarmate we meer leren**. Zodra we genoeg leren, wordt het gemakkelijker voor de agent om het doel te bereiken, en de padlengte begint af te nemen. We staan echter nog steeds open voor exploratie, dus we wijken vaak af van het beste pad en verkennen nieuwe opties, waardoor het pad langer wordt dan optimaal. + +- **Lengte neemt abrupt toe**. Wat we ook op deze grafiek zien, is dat op een bepaald moment de lengte abrupt toenam. Dit geeft de stochastische aard van het proces aan, en dat we op een bepaald moment de Q-Table-coëfficiënten kunnen "bederven" door ze te overschrijven met nieuwe waarden. Dit zou idealiter moeten worden geminimaliseerd door de leersnelheid te verlagen (bijvoorbeeld tegen het einde van de training passen we de Q-Table-waarden slechts met een kleine waarde aan). + +Over het algemeen is het belangrijk om te onthouden dat het succes en de kwaliteit van het leerproces sterk afhankelijk zijn van parameters, zoals leersnelheid, afname van de leersnelheid en de discontofactor. Deze worden vaak **hyperparameters** genoemd, om ze te onderscheiden van **parameters**, die we optimaliseren tijdens de training (bijvoorbeeld Q-Table-coëfficiënten). Het proces van het vinden van de beste hyperparameterwaarden wordt **hyperparameteroptimalisatie** genoemd, en dit verdient een apart onderwerp. + +## [Quiz na de les](https://ff-quizzes.netlify.app/en/ml/) + +## Opdracht +[Een Meer Realistische Wereld](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 ons best doen om nauwkeurigheid te garanderen, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn 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. \ No newline at end of file diff --git a/translations/nl/8-Reinforcement/1-QLearning/assignment.md b/translations/nl/8-Reinforcement/1-QLearning/assignment.md new file mode 100644 index 00000000..8c46f71b --- /dev/null +++ b/translations/nl/8-Reinforcement/1-QLearning/assignment.md @@ -0,0 +1,41 @@ + +# Een Meer Realistische Wereld + +In onze situatie kon Peter zich bijna zonder moe te worden of honger te krijgen verplaatsen. In een meer realistische wereld moet hij af en toe gaan zitten om uit te rusten en zichzelf voeden. Laten we onze wereld realistischer maken door de volgende regels toe te passen: + +1. Door van de ene plaats naar de andere te bewegen, verliest Peter **energie** en krijgt hij **vermoeidheid**. +2. Peter kan meer energie krijgen door appels te eten. +3. Peter kan vermoeidheid kwijtraken door uit te rusten onder de boom of op het gras (d.w.z. door naar een bordlocatie met een boom of gras - groen veld - te lopen). +4. Peter moet de wolf vinden en doden. +5. Om de wolf te doden, moet Peter bepaalde niveaus van energie en vermoeidheid hebben, anders verliest hij het gevecht. + +## Instructies + +Gebruik de originele [notebook.ipynb](../../../../8-Reinforcement/1-QLearning/notebook.ipynb) notebook als uitgangspunt voor je oplossing. + +Pas de beloningsfunctie hierboven aan volgens de regels van het spel, voer het reinforcement learning-algoritme uit om de beste strategie te leren om het spel te winnen, en vergelijk de resultaten van willekeurige wandelingen met je algoritme in termen van het aantal gewonnen en verloren spellen. + +> **Note**: In je nieuwe wereld is de toestand complexer en omvat deze, naast de menselijke positie, ook vermoeidheids- en energieniveaus. Je kunt ervoor kiezen om de toestand te representeren als een tuple (Board,energie,vermoeidheid), of een klasse voor de toestand te definiëren (je kunt deze ook afleiden van `Board`), of zelfs de originele `Board`-klasse aanpassen in [rlboard.py](../../../../8-Reinforcement/1-QLearning/rlboard.py). + +In je oplossing, zorg ervoor dat je de code die verantwoordelijk is voor de strategie van willekeurige wandelingen behoudt, en vergelijk de resultaten van je algoritme met willekeurige wandelingen aan het einde. + +> **Note**: Je moet mogelijk hyperparameters aanpassen om het te laten werken, vooral het aantal epochs. Omdat het succes van het spel (het vechten tegen de wolf) een zeldzame gebeurtenis is, kun je een veel langere trainingstijd verwachten. + +## Rubric + +| Criteria | Uitmuntend | Voldoende | Verbetering Nodig | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| | Een notebook wordt gepresenteerd met de definitie van nieuwe wereldregels, Q-Learning-algoritme en enkele tekstuele uitleg. Q-Learning is in staat om de resultaten aanzienlijk te verbeteren in vergelijking met willekeurige wandelingen. | Notebook wordt gepresenteerd, Q-Learning is geïmplementeerd en verbetert de resultaten in vergelijking met willekeurige wandelingen, maar niet significant; of notebook is slecht gedocumenteerd en code is niet goed gestructureerd | Er wordt een poging gedaan om de regels van de wereld opnieuw te definiëren, maar het Q-Learning-algoritme werkt niet, of de beloningsfunctie is niet volledig gedefinieerd | + +--- + +**Disclaimer**: +Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we ons best doen om nauwkeurigheid te garanderen, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/8-Reinforcement/1-QLearning/solution/Julia/README.md b/translations/nl/8-Reinforcement/1-QLearning/solution/Julia/README.md new file mode 100644 index 00000000..abdde561 --- /dev/null +++ b/translations/nl/8-Reinforcement/1-QLearning/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 zijn 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 diff --git a/translations/nl/8-Reinforcement/1-QLearning/solution/R/README.md b/translations/nl/8-Reinforcement/1-QLearning/solution/R/README.md new file mode 100644 index 00000000..a148236a --- /dev/null +++ b/translations/nl/8-Reinforcement/1-QLearning/solution/R/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/8-Reinforcement/2-Gym/README.md b/translations/nl/8-Reinforcement/2-Gym/README.md new file mode 100644 index 00000000..8c2aad28 --- /dev/null +++ b/translations/nl/8-Reinforcement/2-Gym/README.md @@ -0,0 +1,351 @@ + +# CartPole Schaatsen + +Het probleem dat we in de vorige les hebben opgelost, lijkt misschien een speelgoedprobleem, niet echt toepasbaar in echte scenario's. Dit is echter niet het geval, omdat veel echte problemen ook dit scenario delen - zoals het spelen van schaken of Go. Ze zijn vergelijkbaar omdat we ook een bord hebben met gegeven regels en een **discrete toestand**. + +## [Quiz voorafgaand aan de les](https://ff-quizzes.netlify.app/en/ml/) + +## Introductie + +In deze les passen we dezelfde principes van Q-Learning toe op een probleem met een **continue toestand**, d.w.z. een toestand die wordt weergegeven door een of meer reële getallen. We gaan het volgende probleem aanpakken: + +> **Probleem**: Als Peter wil ontsnappen aan de wolf, moet hij sneller kunnen bewegen. We zullen zien hoe Peter kan leren schaatsen, en in het bijzonder hoe hij balans kan houden, met behulp van Q-Learning. + +![De grote ontsnapping!](../../../../8-Reinforcement/2-Gym/images/escape.png) + +> Peter en zijn vrienden worden creatief om aan de wolf te ontsnappen! Afbeelding door [Jen Looper](https://twitter.com/jenlooper) + +We gebruiken een vereenvoudigde versie van balanceren, bekend als het **CartPole**-probleem. In de CartPole-wereld hebben we een horizontale slider die naar links of rechts kan bewegen, en het doel is om een verticale paal bovenop de slider in balans te houden. + +## Vereisten + +In deze les gebruiken we een bibliotheek genaamd **OpenAI Gym** om verschillende **omgevingen** te simuleren. Je kunt de code van deze les lokaal uitvoeren (bijvoorbeeld vanuit Visual Studio Code), in welk geval de simulatie in een nieuw venster wordt geopend. Bij het online uitvoeren van de code moet je mogelijk enkele aanpassingen maken, zoals beschreven [hier](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7). + +## OpenAI Gym + +In de vorige les werden de spelregels en de toestand gegeven door de `Board`-klasse die we zelf hebben gedefinieerd. Hier gebruiken we een speciale **simulatieomgeving**, die de fysica achter de balancerende paal simuleert. Een van de meest populaire simulatieomgevingen voor het trainen van reinforcement learning-algoritmen heet een [Gym](https://gym.openai.com/), die wordt onderhouden door [OpenAI](https://openai.com/). Met deze gym kunnen we verschillende **omgevingen** creëren, van een CartPole-simulatie tot Atari-spellen. + +> **Let op**: Je kunt andere beschikbare omgevingen van OpenAI Gym bekijken [hier](https://gym.openai.com/envs/#classic_control). + +Laten we eerst de gym installeren en de benodigde bibliotheken importeren (codeblok 1): + +```python +import sys +!{sys.executable} -m pip install gym + +import gym +import matplotlib.pyplot as plt +import numpy as np +import random +``` + +## Oefening - een CartPole-omgeving initialiseren + +Om te werken met een CartPole-balanceringsprobleem, moeten we de bijbehorende omgeving initialiseren. Elke omgeving is gekoppeld aan een: + +- **Observatieruimte** die de structuur definieert van de informatie die we van de omgeving ontvangen. Voor het CartPole-probleem ontvangen we de positie van de paal, snelheid en enkele andere waarden. + +- **Actieruimte** die mogelijke acties definieert. In ons geval is de actieruimte discreet en bestaat uit twee acties - **links** en **rechts**. (codeblok 2) + +1. Om te initialiseren, typ de volgende code: + + ```python + env = gym.make("CartPole-v1") + print(env.action_space) + print(env.observation_space) + print(env.action_space.sample()) + ``` + +Om te zien hoe de omgeving werkt, laten we een korte simulatie uitvoeren van 100 stappen. Bij elke stap geven we een van de acties op die moet worden uitgevoerd - in deze simulatie selecteren we willekeurig een actie uit `action_space`. + +1. Voer de onderstaande code uit en kijk wat het oplevert. + + ✅ Onthoud dat het aanbevolen is om deze code uit te voeren op een lokale Python-installatie! (codeblok 3) + + ```python + env.reset() + + for i in range(100): + env.render() + env.step(env.action_space.sample()) + env.close() + ``` + + Je zou iets moeten zien dat lijkt op deze afbeelding: + + ![niet-balancerende CartPole](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif) + +1. Tijdens de simulatie moeten we observaties verkrijgen om te beslissen hoe te handelen. De stapfunctie retourneert namelijk de huidige observaties, een beloningsfunctie en de vlag `done` die aangeeft of het zinvol is om de simulatie voort te zetten of niet: (codeblok 4) + + ```python + env.reset() + + done = False + while not done: + env.render() + obs, rew, done, info = env.step(env.action_space.sample()) + print(f"{obs} -> {rew}") + env.close() + ``` + + Je zult iets zien zoals dit in de notebook-uitvoer: + + ```text + [ 0.03403272 -0.24301182 0.02669811 0.2895829 ] -> 1.0 + [ 0.02917248 -0.04828055 0.03248977 0.00543839] -> 1.0 + [ 0.02820687 0.14636075 0.03259854 -0.27681916] -> 1.0 + [ 0.03113408 0.34100283 0.02706215 -0.55904489] -> 1.0 + [ 0.03795414 0.53573468 0.01588125 -0.84308041] -> 1.0 + ... + [ 0.17299878 0.15868546 -0.20754175 -0.55975453] -> 1.0 + [ 0.17617249 0.35602306 -0.21873684 -0.90998894] -> 1.0 + ``` + + De observatievector die bij elke stap van de simulatie wordt geretourneerd, bevat de volgende waarden: + - Positie van de kar + - Snelheid van de kar + - Hoek van de paal + - Rotatiesnelheid van de paal + +1. Verkrijg de minimale en maximale waarde van deze getallen: (codeblok 5) + + ```python + print(env.observation_space.low) + print(env.observation_space.high) + ``` + + Je zult ook merken dat de beloningswaarde bij elke simulatiestap altijd 1 is. Dit komt omdat ons doel is om zo lang mogelijk te overleven, d.w.z. de paal zo lang mogelijk in een redelijk verticale positie te houden. + + ✅ In feite wordt de CartPole-simulatie als opgelost beschouwd als we erin slagen een gemiddelde beloning van 195 te behalen over 100 opeenvolgende pogingen. + +## Toestand discretiseren + +Bij Q-Learning moeten we een Q-Tabel bouwen die definieert wat te doen in elke toestand. Om dit te kunnen doen, moet de toestand **discreet** zijn, meer precies, het moet een eindig aantal discrete waarden bevatten. Daarom moeten we onze observaties op de een of andere manier **discretiseren**, en ze koppelen aan een eindige set toestanden. + +Er zijn een paar manieren waarop we dit kunnen doen: + +- **Verdelen in intervallen**. Als we het interval van een bepaalde waarde kennen, kunnen we dit interval verdelen in een aantal **intervallen**, en vervolgens de waarde vervangen door het intervalnummer waartoe het behoort. Dit kan worden gedaan met behulp van de numpy-methode [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html). In dit geval kennen we de grootte van de toestand precies, omdat deze afhankelijk is van het aantal intervallen dat we selecteren voor digitalisering. + +✅ We kunnen lineaire interpolatie gebruiken om waarden naar een eindig interval te brengen (bijvoorbeeld van -20 tot 20), en vervolgens getallen naar gehele getallen converteren door ze af te ronden. Dit geeft ons iets minder controle over de grootte van de toestand, vooral als we de exacte bereiken van invoerwaarden niet kennen. In ons geval hebben bijvoorbeeld 2 van de 4 waarden geen boven-/ondergrenzen, wat kan resulteren in een oneindig aantal toestanden. + +In ons voorbeeld gaan we met de tweede aanpak. Zoals je later zult merken, nemen deze waarden ondanks de ongedefinieerde boven-/ondergrenzen zelden extreme waarden buiten bepaalde eindige intervallen aan, waardoor toestanden met extreme waarden zeer zeldzaam zullen zijn. + +1. Hier is de functie die de observatie van ons model neemt en een tuple van 4 gehele waarden produceert: (codeblok 6) + + ```python + def discretize(x): + return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int)) + ``` + +1. Laten we ook een andere discretisatiemethode verkennen met behulp van intervallen: (codeblok 7) + + ```python + def create_bins(i,num): + return np.arange(num+1)*(i[1]-i[0])/num+i[0] + + print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10)) + + ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter + nbins = [20,20,10,10] # number of bins for each parameter + bins = [create_bins(ints[i],nbins[i]) for i in range(4)] + + def discretize_bins(x): + return tuple(np.digitize(x[i],bins[i]) for i in range(4)) + ``` + +1. Laten we nu een korte simulatie uitvoeren en die discrete omgevingswaarden observeren. Voel je vrij om zowel `discretize` als `discretize_bins` te proberen en te kijken of er een verschil is. + + ✅ `discretize_bins` retourneert het intervalnummer, dat 0-gebaseerd is. Voor waarden van de invoervariabele rond 0 retourneert het het nummer uit het midden van het interval (10). Bij `discretize` hebben we ons niet bekommerd om het bereik van uitvoerwaarden, waardoor ze negatief konden zijn, en 0 komt overeen met 0. (codeblok 8) + + ```python + env.reset() + + done = False + while not done: + #env.render() + obs, rew, done, info = env.step(env.action_space.sample()) + #print(discretize_bins(obs)) + print(discretize(obs)) + env.close() + ``` + + ✅ Haal de regel die begint met `env.render` uit commentaar als je wilt zien hoe de omgeving wordt uitgevoerd. Anders kun je het op de achtergrond uitvoeren, wat sneller is. We zullen deze "onzichtbare" uitvoering gebruiken tijdens ons Q-Learning-proces. + +## De structuur van de Q-Tabel + +In onze vorige les was de toestand een eenvoudige paar getallen van 0 tot 8, en daarom was het handig om de Q-Tabel te representeren met een numpy-tensor met een vorm van 8x8x2. Als we intervallen-discretisatie gebruiken, is de grootte van onze toestandsvector ook bekend, dus we kunnen dezelfde aanpak gebruiken en de toestand representeren door een array met een vorm van 20x20x10x10x2 (hier is 2 de dimensie van de actieruimte, en de eerste dimensies komen overeen met het aantal intervallen dat we hebben geselecteerd voor elk van de parameters in de observatieruimte). + +Soms zijn de exacte dimensies van de observatieruimte echter niet bekend. In het geval van de `discretize`-functie kunnen we nooit zeker weten dat onze toestand binnen bepaalde grenzen blijft, omdat sommige van de oorspronkelijke waarden niet begrensd zijn. Daarom gebruiken we een iets andere aanpak en representeren we de Q-Tabel met een dictionary. + +1. Gebruik het paar *(toestand, actie)* als de sleutel van de dictionary, en de waarde zou overeenkomen met de waarde van de Q-Tabel. (codeblok 9) + + ```python + Q = {} + actions = (0,1) + + def qvalues(state): + return [Q.get((state,a),0) for a in actions] + ``` + + Hier definiëren we ook een functie `qvalues()`, die een lijst retourneert van Q-Tabelwaarden voor een gegeven toestand die overeenkomt met alle mogelijke acties. Als de invoer niet aanwezig is in de Q-Tabel, retourneren we standaard 0. + +## Laten we beginnen met Q-Learning + +Nu zijn we klaar om Peter te leren balanceren! + +1. Laten we eerst enkele hyperparameters instellen: (codeblok 10) + + ```python + # hyperparameters + alpha = 0.3 + gamma = 0.9 + epsilon = 0.90 + ``` + + Hier is `alpha` de **leersnelheid** die bepaalt in welke mate we de huidige waarden van de Q-Tabel bij elke stap moeten aanpassen. In de vorige les begonnen we met 1 en verlaagden we vervolgens `alpha` naar lagere waarden tijdens de training. In dit voorbeeld houden we het constant voor de eenvoud, en je kunt later experimenteren met het aanpassen van `alpha`-waarden. + + `gamma` is de **kortingsfactor** die aangeeft in welke mate we toekomstige beloning boven huidige beloning moeten prioriteren. + + `epsilon` is de **exploratie/exploitatie-factor** die bepaalt of we exploratie boven exploitatie moeten verkiezen of andersom. In ons algoritme selecteren we in `epsilon` procent van de gevallen de volgende actie op basis van Q-Tabelwaarden, en in de resterende gevallen voeren we een willekeurige actie uit. Dit stelt ons in staat om gebieden van de zoekruimte te verkennen die we nog nooit eerder hebben gezien. + + ✅ In termen van balanceren - het kiezen van een willekeurige actie (exploratie) zou werken als een willekeurige duw in de verkeerde richting, en de paal zou moeten leren hoe de balans te herstellen van die "fouten". + +### Verbeter het algoritme + +We kunnen ook twee verbeteringen aanbrengen in ons algoritme van de vorige les: + +- **Gemiddelde cumulatieve beloning berekenen**, over een aantal simulaties. We printen de voortgang elke 5000 iteraties en middelen onze cumulatieve beloning over die periode. Dit betekent dat als we meer dan 195 punten behalen, we het probleem als opgelost kunnen beschouwen, met een nog hogere kwaliteit dan vereist. + +- **Maximale gemiddelde cumulatieve beloning berekenen**, `Qmax`, en we slaan de Q-Tabel op die overeenkomt met dat resultaat. Wanneer je de training uitvoert, zul je merken dat soms de gemiddelde cumulatieve beloning begint te dalen, en we willen de waarden van de Q-Tabel behouden die overeenkomen met het beste model dat tijdens de training is waargenomen. + +1. Verzamel alle cumulatieve beloningen bij elke simulatie in de vector `rewards` voor verdere plotting. (codeblok 11) + + ```python + def probs(v,eps=1e-4): + v = v-v.min()+eps + v = v/v.sum() + return v + + Qmax = 0 + cum_rewards = [] + rewards = [] + for epoch in range(100000): + obs = env.reset() + done = False + cum_reward=0 + # == do the simulation == + while not done: + s = discretize(obs) + if random.random() Qmax: + Qmax = np.average(cum_rewards) + Qbest = Q + cum_rewards=[] + ``` + +Wat je kunt opmerken uit die resultaten: + +- **Dicht bij ons doel**. We zijn heel dicht bij het bereiken van het doel van 195 cumulatieve beloningen over 100+ opeenvolgende runs van de simulatie, of we hebben het misschien zelfs bereikt! Zelfs als we kleinere aantallen behalen, weten we het nog niet, omdat we middelen over 5000 runs, en slechts 100 runs zijn vereist volgens de formele criteria. + +- **Beloning begint te dalen**. Soms begint de beloning te dalen, wat betekent dat we de al geleerde waarden in de Q-Tabel kunnen "vernietigen" met de waarden die de situatie verslechteren. + +Deze observatie is duidelijker zichtbaar als we de trainingsvoortgang plotten. + +## Trainingsvoortgang plotten + +Tijdens de training hebben we de cumulatieve beloningswaarde bij elke iteratie verzameld in de vector `rewards`. Hier is hoe het eruit ziet wanneer we het plotten tegen het iteratienummer: + +```python +plt.plot(rewards) +``` + +![ruwe voortgang](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.png) + +Van deze grafiek is het niet mogelijk om iets te zeggen, omdat door de aard van het stochastische trainingsproces de lengte van trainingssessies sterk varieert. Om meer betekenis te geven aan deze grafiek, kunnen we het **lopende gemiddelde** berekenen over een reeks experimenten, laten we zeggen 100. Dit kan handig worden gedaan met `np.convolve`: (codeblok 12) + +```python +def running_average(x,window): + return np.convolve(x,np.ones(window)/window,mode='valid') + +plt.plot(running_average(rewards,100)) +``` + +![trainingsvoortgang](../../../../8-Reinforcement/2-Gym/images/train_progress_runav.png) + +## Hyperparameters variëren + +Om het leren stabieler te maken, is het zinvol om enkele van onze hyperparameters tijdens de training aan te passen. In het bijzonder: + +- **Voor leersnelheid**, `alpha`, kunnen we beginnen met waarden dicht bij 1 en vervolgens de parameter blijven verlagen. Na verloop van tijd krijgen we goede waarschijnlijkheidswaarden in de Q-Tabel, en dus moeten we ze licht aanpassen en niet volledig overschrijven met nieuwe waarden. + +- **Epsilon verhogen**. We kunnen `epsilon` langzaam verhogen, zodat we minder verkennen en meer exploiteren. Het is waarschijnlijk zinvol om te beginnen met een lagere waarde van `epsilon` en deze op te voeren tot bijna 1. +> **Taak 1**: Speel met de waarden van de hyperparameters en kijk of je een hogere cumulatieve beloning kunt behalen. Kom je boven de 195? +> **Taak 2**: Om het probleem formeel op te lossen, moet je een gemiddelde beloning van 195 behalen over 100 opeenvolgende runs. Meet dit tijdens de training en zorg ervoor dat je het probleem formeel hebt opgelost! + +## Het resultaat in actie zien + +Het zou interessant zijn om daadwerkelijk te zien hoe het getrainde model zich gedraagt. Laten we de simulatie uitvoeren en dezelfde strategie voor actie-selectie volgen als tijdens de training, waarbij we sampelen volgens de kansverdeling in de Q-Table: (code block 13) + +```python +obs = env.reset() +done = False +while not done: + s = discretize(obs) + env.render() + v = probs(np.array(qvalues(s))) + a = random.choices(actions,weights=v)[0] + obs,_,done,_ = env.step(a) +env.close() +``` + +Je zou iets moeten zien zoals dit: + +![een balancerende cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif) + +--- + +## 🚀Uitdaging + +> **Taak 3**: Hier gebruikten we de uiteindelijke versie van de Q-Table, die mogelijk niet de beste is. Onthoud dat we de best presterende Q-Table hebben opgeslagen in de variabele `Qbest`! Probeer hetzelfde voorbeeld met de best presterende Q-Table door `Qbest` over te kopiëren naar `Q` en kijk of je verschil merkt. + +> **Taak 4**: Hier selecteerden we niet de beste actie bij elke stap, maar sampelden we met de bijbehorende kansverdeling. Zou het logischer zijn om altijd de beste actie te kiezen, met de hoogste waarde in de Q-Table? Dit kan worden gedaan door de functie `np.argmax` te gebruiken om het actienummer te vinden dat overeenkomt met de hoogste waarde in de Q-Table. Implementeer deze strategie en kijk of het de balans verbetert. + +## [Quiz na de les](https://ff-quizzes.netlify.app/en/ml/) + +## Opdracht +[Train een Mountain Car](assignment.md) + +## Conclusie + +We hebben nu geleerd hoe we agenten kunnen trainen om goede resultaten te behalen door hen simpelweg een beloningsfunctie te geven die de gewenste toestand van het spel definieert, en door hen de kans te geven om intelligent de zoekruimte te verkennen. We hebben het Q-Learning-algoritme succesvol toegepast in gevallen van discrete en continue omgevingen, maar met discrete acties. + +Het is ook belangrijk om situaties te bestuderen waarin de actiestatus ook continu is, en wanneer de observatieruimte veel complexer is, zoals het beeld van het scherm van een Atari-spel. Bij die problemen moeten we vaak krachtigere machine learning-technieken gebruiken, zoals neurale netwerken, om goede resultaten te behalen. Die meer geavanceerde onderwerpen zijn het onderwerp van onze komende meer gevorderde AI-cursus. + +--- + +**Disclaimer**: +Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we ons best doen voor nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn 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 diff --git a/translations/nl/8-Reinforcement/2-Gym/assignment.md b/translations/nl/8-Reinforcement/2-Gym/assignment.md new file mode 100644 index 00000000..0d5c2597 --- /dev/null +++ b/translations/nl/8-Reinforcement/2-Gym/assignment.md @@ -0,0 +1,55 @@ + +# Train Mountain Car + +[OpenAI Gym](http://gym.openai.com) is zo ontworpen dat alle omgevingen dezelfde API bieden - namelijk dezelfde methoden `reset`, `step` en `render`, en dezelfde abstracties van **actie ruimte** en **observatie ruimte**. Hierdoor zou het mogelijk moeten zijn om dezelfde reinforcement learning-algoritmes aan te passen aan verschillende omgevingen met minimale codewijzigingen. + +## Een Mountain Car-omgeving + +[Mountain Car-omgeving](https://gym.openai.com/envs/MountainCar-v0/) bevat een auto die vastzit in een vallei: + +Het doel is om uit de vallei te komen en de vlag te bereiken door bij elke stap een van de volgende acties uit te voeren: + +| Waarde | Betekenis | +|---|---| +| 0 | Versnellen naar links | +| 1 | Niet versnellen | +| 2 | Versnellen naar rechts | + +De belangrijkste uitdaging van dit probleem is echter dat de motor van de auto niet sterk genoeg is om de berg in één keer te beklimmen. Daarom is de enige manier om te slagen heen en weer rijden om momentum op te bouwen. + +De observatieruimte bestaat slechts uit twee waarden: + +| Nr | Observatie | Min | Max | +|-----|--------------|-----|-----| +| 0 | Positie van de auto | -1.2| 0.6 | +| 1 | Snelheid van de auto | -0.07 | 0.07 | + +Het beloningssysteem voor de mountain car is vrij ingewikkeld: + + * Een beloning van 0 wordt toegekend als de agent de vlag heeft bereikt (positie = 0.5) bovenop de berg. + * Een beloning van -1 wordt toegekend als de positie van de agent minder dan 0.5 is. + +De episode eindigt als de positie van de auto meer dan 0.5 is, of als de lengte van de episode groter is dan 200. +## Instructies + +Pas ons reinforcement learning-algoritme aan om het mountain car-probleem op te lossen. Begin met de bestaande [notebook.ipynb](../../../../8-Reinforcement/2-Gym/notebook.ipynb) code, vervang de omgeving, wijzig de functies voor staat-discretisatie, en probeer het bestaande algoritme te trainen met minimale codewijzigingen. Optimaliseer het resultaat door de hyperparameters aan te passen. + +> **Let op**: Het aanpassen van hyperparameters is waarschijnlijk nodig om het algoritme te laten convergeren. +## Rubriek + +| Criteria | Uitmuntend | Voldoende | Verbetering nodig | +| -------- | --------- | -------- | ----------------- | +| | Q-Learning-algoritme is succesvol aangepast van het CartPole-voorbeeld, met minimale codewijzigingen, en is in staat om het probleem van het bereiken van de vlag binnen 200 stappen op te lossen. | Een nieuw Q-Learning-algoritme is overgenomen van het internet, maar goed gedocumenteerd; of bestaand algoritme is aangepast, maar bereikt niet de gewenste resultaten. | Student was niet in staat om een algoritme succesvol aan te passen, maar heeft aanzienlijke stappen gezet richting een oplossing (zoals het implementeren van staat-discretisatie, Q-Table datastructuur, etc.) | + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/8-Reinforcement/2-Gym/solution/Julia/README.md b/translations/nl/8-Reinforcement/2-Gym/solution/Julia/README.md new file mode 100644 index 00000000..591ccc04 --- /dev/null +++ b/translations/nl/8-Reinforcement/2-Gym/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/8-Reinforcement/2-Gym/solution/R/README.md b/translations/nl/8-Reinforcement/2-Gym/solution/R/README.md new file mode 100644 index 00000000..cf7d1b2c --- /dev/null +++ b/translations/nl/8-Reinforcement/2-Gym/solution/R/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Disclaimer**: +Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we ons best doen voor nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn 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 diff --git a/translations/nl/8-Reinforcement/README.md b/translations/nl/8-Reinforcement/README.md new file mode 100644 index 00000000..05e7f66f --- /dev/null +++ b/translations/nl/8-Reinforcement/README.md @@ -0,0 +1,67 @@ + +# Introductie tot reinforcement learning + +Reinforcement learning, RL, wordt gezien als een van de fundamentele machine learning paradigma's, naast supervised learning en unsupervised learning. RL draait om beslissingen: het nemen van de juiste beslissingen of er in ieder geval van leren. + +Stel je een gesimuleerde omgeving voor, zoals de aandelenmarkt. Wat gebeurt er als je een bepaalde regelgeving oplegt? Heeft het een positief of negatief effect? Als er iets negatiefs gebeurt, moet je deze _negatieve versterking_ gebruiken, ervan leren en van koers veranderen. Als het een positief resultaat is, moet je voortbouwen op die _positieve versterking_. + +![peter en de wolf](../../../8-Reinforcement/images/peter.png) + +> Peter en zijn vrienden moeten ontsnappen aan de hongerige wolf! Afbeelding door [Jen Looper](https://twitter.com/jenlooper) + +## Regionaal thema: Peter en de Wolf (Rusland) + +[Peter en de Wolf](https://en.wikipedia.org/wiki/Peter_and_the_Wolf) is een muzikaal sprookje geschreven door de Russische componist [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Het is een verhaal over de jonge pionier Peter, die dapper zijn huis verlaat om in de bosweide de wolf te achtervolgen. In deze sectie zullen we machine learning-algoritmes trainen die Peter kunnen helpen: + +- **Verkennen** van de omgeving en het bouwen van een optimale navigatiekaart. +- **Leren** hoe hij een skateboard kan gebruiken en erop kan balanceren, zodat hij zich sneller kan verplaatsen. + +[![Peter en de Wolf](https://img.youtube.com/vi/Fmi5zHg4QSM/0.jpg)](https://www.youtube.com/watch?v=Fmi5zHg4QSM) + +> 🎥 Klik op de afbeelding hierboven om te luisteren naar Peter en de Wolf van Prokofiev. + +## Reinforcement learning + +In eerdere secties heb je twee voorbeelden van machine learning-problemen gezien: + +- **Supervised**, waarbij we datasets hebben die voorbeeldoplossingen suggereren voor het probleem dat we willen oplossen. [Classificatie](../4-Classification/README.md) en [regressie](../2-Regression/README.md) zijn supervised learning taken. +- **Unsupervised**, waarbij we geen gelabelde trainingsdata hebben. Het belangrijkste voorbeeld van unsupervised learning is [Clustering](../5-Clustering/README.md). + +In deze sectie introduceren we een nieuw type leerprobleem dat geen gelabelde trainingsdata vereist. Er zijn verschillende soorten van dergelijke problemen: + +- **[Semi-supervised learning](https://wikipedia.org/wiki/Semi-supervised_learning)**, waarbij we veel niet-gelabelde data hebben die kan worden gebruikt om het model vooraf te trainen. +- **[Reinforcement learning](https://wikipedia.org/wiki/Reinforcement_learning)**, waarbij een agent leert hoe hij zich moet gedragen door experimenten uit te voeren in een gesimuleerde omgeving. + +### Voorbeeld - computerspel + +Stel dat je een computer wilt leren een spel te spelen, zoals schaken of [Super Mario](https://wikipedia.org/wiki/Super_Mario). Om de computer een spel te laten spelen, moeten we hem laten voorspellen welke zet hij moet doen in elke spelstatus. Hoewel dit misschien een classificatieprobleem lijkt, is het dat niet - omdat we geen dataset hebben met statussen en bijbehorende acties. Hoewel we mogelijk gegevens hebben zoals bestaande schaakpartijen of opnames van spelers die Super Mario spelen, is het waarschijnlijk dat die gegevens niet voldoende een groot aantal mogelijke statussen dekken. + +In plaats van te zoeken naar bestaande spelgegevens, is **Reinforcement Learning** (RL) gebaseerd op het idee van *de computer vaak laten spelen* en het resultaat observeren. Om Reinforcement Learning toe te passen, hebben we twee dingen nodig: + +- **Een omgeving** en **een simulator** die ons in staat stellen een spel vaak te spelen. Deze simulator zou alle spelregels evenals mogelijke statussen en acties definiëren. + +- **Een beloningsfunctie**, die ons vertelt hoe goed we het hebben gedaan tijdens elke zet of elk spel. + +Het belangrijkste verschil tussen andere soorten machine learning en RL is dat we bij RL meestal niet weten of we winnen of verliezen totdat we het spel hebben voltooid. We kunnen dus niet zeggen of een bepaalde zet op zichzelf goed is of niet - we ontvangen pas een beloning aan het einde van het spel. Ons doel is om algoritmes te ontwerpen die ons in staat stellen een model te trainen onder onzekere omstandigheden. We zullen leren over een RL-algoritme genaamd **Q-learning**. + +## Lessen + +1. [Introductie tot reinforcement learning en Q-Learning](1-QLearning/README.md) +2. [Gebruik van een gym-simulatieomgeving](2-Gym/README.md) + +## Credits + +"Introductie tot Reinforcement Learning" is geschreven met ♥️ door [Dmitry Soshnikov](http://soshnikov.com) + +--- + +**Disclaimer**: +Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we ons best doen om nauwkeurigheid te garanderen, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn 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. \ No newline at end of file diff --git a/translations/nl/9-Real-World/1-Applications/README.md b/translations/nl/9-Real-World/1-Applications/README.md new file mode 100644 index 00000000..97bc47b2 --- /dev/null +++ b/translations/nl/9-Real-World/1-Applications/README.md @@ -0,0 +1,159 @@ + +# Postscript: Machine learning in de echte wereld + +![Samenvatting van machine learning in de echte wereld in een sketchnote](../../../../sketchnotes/ml-realworld.png) +> Sketchnote door [Tomomi Imura](https://www.twitter.com/girlie_mac) + +In dit curriculum heb je veel manieren geleerd om data voor te bereiden voor training en machine learning-modellen te maken. Je hebt een reeks klassieke regressie-, clustering-, classificatie-, natuurlijke taalverwerking- en tijdreeksmodellen gebouwd. Gefeliciteerd! Nu vraag je je misschien af waar dit allemaal voor dient... wat zijn de toepassingen van deze modellen in de echte wereld? + +Hoewel er in de industrie veel interesse is in AI, die meestal gebruik maakt van deep learning, zijn er nog steeds waardevolle toepassingen voor klassieke machine learning-modellen. Je gebruikt misschien zelfs vandaag al enkele van deze toepassingen! In deze les verken je hoe acht verschillende industrieën en vakgebieden deze soorten modellen gebruiken om hun toepassingen performanter, betrouwbaarder, intelligenter en waardevoller te maken voor gebruikers. + +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## 💰 Financiën + +De financiële sector biedt veel mogelijkheden voor machine learning. Veel problemen in deze sector lenen zich goed om gemodelleerd en opgelost te worden met ML. + +### Detectie van creditcardfraude + +We hebben eerder in de cursus geleerd over [k-means clustering](../../5-Clustering/2-K-Means/README.md), maar hoe kan dit worden gebruikt om problemen met betrekking tot creditcardfraude op te lossen? + +K-means clustering is handig bij een techniek voor het detecteren van creditcardfraude genaamd **outlier detection**. Outliers, of afwijkingen in waarnemingen binnen een dataset, kunnen ons vertellen of een creditcard op normale wijze wordt gebruikt of dat er iets ongewoons gebeurt. Zoals beschreven in het onderstaande artikel, kun je creditcarddata sorteren met een k-means clustering-algoritme en elke transactie toewijzen aan een cluster op basis van hoe afwijkend deze lijkt te zijn. Vervolgens kun je de meest risicovolle clusters evalueren op frauduleuze versus legitieme transacties. +[Referentie](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.680.1195&rep=rep1&type=pdf) + +### Vermogensbeheer + +Bij vermogensbeheer beheert een individu of bedrijf investeringen namens hun klanten. Hun taak is om op lange termijn vermogen te behouden en te laten groeien, dus het is essentieel om investeringen te kiezen die goed presteren. + +Een manier om te evalueren hoe een bepaalde investering presteert, is door middel van statistische regressie. [Lineaire regressie](../../2-Regression/1-Tools/README.md) is een waardevol hulpmiddel om te begrijpen hoe een fonds presteert ten opzichte van een benchmark. We kunnen ook afleiden of de resultaten van de regressie statistisch significant zijn, of hoeveel ze de investeringen van een klant zouden beïnvloeden. Je kunt je analyse zelfs verder uitbreiden met meervoudige regressie, waarbij aanvullende risicofactoren worden meegenomen. Voor een voorbeeld van hoe dit zou werken voor een specifiek fonds, bekijk het onderstaande artikel over het evalueren van fondsprestaties met regressie. +[Referentie](http://www.brightwoodventures.com/evaluating-fund-performance-using-regression/) + +## 🎓 Onderwijs + +De onderwijssector is ook een zeer interessant gebied waar ML kan worden toegepast. Er zijn interessante problemen aan te pakken, zoals het detecteren van fraude bij toetsen of essays, of het beheren van (onbedoelde) vooringenomenheid in het correctieproces. + +### Voorspellen van studentengedrag + +[Coursera](https://coursera.com), een online aanbieder van open cursussen, heeft een geweldige techblog waar ze veel technische beslissingen bespreken. In deze casestudy hebben ze een regressielijn uitgezet om te proberen een correlatie te vinden tussen een lage NPS (Net Promoter Score) en het behoud of uitval van cursisten. +[Referentie](https://medium.com/coursera-engineering/controlled-regression-quantifying-the-impact-of-course-quality-on-learner-retention-31f956bd592a) + +### Vooringenomenheid verminderen + +[Grammarly](https://grammarly.com), een schrijfassistent die controleert op spelling- en grammaticafouten, gebruikt geavanceerde [natuurlijke taalverwerkingssystemen](../../6-NLP/README.md) in al zijn producten. Ze publiceerden een interessante casestudy in hun techblog over hoe ze omgingen met genderbias in machine learning, wat je hebt geleerd in onze [introductieles over eerlijkheid](../../1-Introduction/3-fairness/README.md). +[Referentie](https://www.grammarly.com/blog/engineering/mitigating-gender-bias-in-autocorrect/) + +## 👜 Retail + +De retailsector kan zeker profiteren van het gebruik van ML, van het creëren van een betere klantreis tot het optimaal beheren van voorraad. + +### Personaliseren van de klantreis + +Bij Wayfair, een bedrijf dat huishoudelijke artikelen zoals meubels verkoopt, is het helpen van klanten om de juiste producten te vinden voor hun smaak en behoeften van groot belang. In dit artikel beschrijven ingenieurs van het bedrijf hoe ze ML en NLP gebruiken om "de juiste resultaten voor klanten naar voren te brengen". Hun Query Intent Engine is gebouwd om entiteiten te extraheren, classifiers te trainen, assets en meningen te extraheren, en sentimenten te taggen in klantbeoordelingen. Dit is een klassiek voorbeeld van hoe NLP werkt in online retail. +[Referentie](https://www.aboutwayfair.com/tech-innovation/how-we-use-machine-learning-and-natural-language-processing-to-empower-search) + +### Voorraadbeheer + +Innovatieve, flexibele bedrijven zoals [StitchFix](https://stitchfix.com), een abonnementsservice die kleding naar consumenten verzendt, vertrouwen sterk op ML voor aanbevelingen en voorraadbeheer. Hun stylingteams werken zelfs samen met hun merchandisingteams: "een van onze datawetenschappers experimenteerde met een genetisch algoritme en paste het toe op kleding om te voorspellen wat een succesvol kledingstuk zou zijn dat vandaag nog niet bestaat. We brachten dat naar het merchandisingteam en nu kunnen ze dat als hulpmiddel gebruiken." +[Referentie](https://www.zdnet.com/article/how-stitch-fix-uses-machine-learning-to-master-the-science-of-styling/) + +## 🏥 Gezondheidszorg + +De gezondheidszorgsector kan ML gebruiken om onderzoekstaken te optimaliseren en logistieke problemen zoals heropnames van patiënten of het stoppen van de verspreiding van ziekten aan te pakken. + +### Beheer van klinische proeven + +Toxiciteit in klinische proeven is een groot probleem voor medicijnfabrikanten. Hoeveel toxiciteit is acceptabel? In deze studie leidde het analyseren van verschillende methoden voor klinische proeven tot de ontwikkeling van een nieuwe aanpak om de kans op uitkomsten van klinische proeven te voorspellen. Ze konden specifiek random forest gebruiken om een [classifier](../../4-Classification/README.md) te produceren die groepen medicijnen onderscheidt. +[Referentie](https://www.sciencedirect.com/science/article/pii/S2451945616302914) + +### Beheer van ziekenhuisheropnames + +Ziekenhuiszorg is duur, vooral wanneer patiënten opnieuw moeten worden opgenomen. Dit artikel bespreekt een bedrijf dat ML gebruikt om het potentieel voor heropname te voorspellen met behulp van [clustering](../../5-Clustering/README.md) algoritmen. Deze clusters helpen analisten om "groepen heropnames te ontdekken die mogelijk een gemeenschappelijke oorzaak delen". +[Referentie](https://healthmanagement.org/c/healthmanagement/issuearticle/hospital-readmissions-and-machine-learning) + +### Ziektebeheer + +De recente pandemie heeft duidelijk gemaakt hoe machine learning kan helpen bij het stoppen van de verspreiding van ziekten. In dit artikel herken je het gebruik van ARIMA, logistische curves, lineaire regressie en SARIMA. "Dit werk is een poging om de verspreidingssnelheid van dit virus te berekenen en zo de sterfgevallen, herstelgevallen en bevestigde gevallen te voorspellen, zodat we ons beter kunnen voorbereiden en overleven." +[Referentie](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7979218/) + +## 🌲 Ecologie en Groene Technologie + +De natuur en ecologie bestaan uit veel gevoelige systemen waarin de interactie tussen dieren en de natuur centraal staat. Het is belangrijk om deze systemen nauwkeurig te kunnen meten en gepast te handelen als er iets gebeurt, zoals een bosbrand of een daling in de dierenpopulatie. + +### Bosbeheer + +Je hebt geleerd over [Reinforcement Learning](../../8-Reinforcement/README.md) in eerdere lessen. Het kan zeer nuttig zijn bij het voorspellen van patronen in de natuur. In het bijzonder kan het worden gebruikt om ecologische problemen zoals bosbranden en de verspreiding van invasieve soorten te volgen. In Canada gebruikte een groep onderzoekers Reinforcement Learning om modellen voor bosbranddynamiek te bouwen op basis van satellietbeelden. Met behulp van een innovatieve "spatially spreading process (SSP)" zagen ze een bosbrand als "de agent op elke cel in het landschap." "De set acties die de brand kan ondernemen vanaf een locatie op elk moment omvat verspreiding naar het noorden, zuiden, oosten of westen, of niet verspreiden." + +Deze aanpak keert de gebruikelijke RL-opzet om, aangezien de dynamiek van het bijbehorende Markov Decision Process (MDP) een bekende functie is voor onmiddellijke bosbrandverspreiding. Lees meer over de klassieke algoritmen die door deze groep zijn gebruikt via de onderstaande link. +[Referentie](https://www.frontiersin.org/articles/10.3389/fict.2018.00006/full) + +### Bewegingsdetectie van dieren + +Hoewel deep learning een revolutie heeft veroorzaakt in het visueel volgen van dierbewegingen (je kunt je eigen [ijsbeertracker](https://docs.microsoft.com/learn/modules/build-ml-model-with-azure-stream-analytics/?WT.mc_id=academic-77952-leestott) hier bouwen), heeft klassieke ML nog steeds een plaats in deze taak. + +Sensoren om bewegingen van boerderijdieren te volgen en IoT maken gebruik van dit soort visuele verwerking, maar meer basale ML-technieken zijn nuttig om data voor te verwerken. Bijvoorbeeld, in dit artikel werden houdingen van schapen gemonitord en geanalyseerd met verschillende classifier-algoritmen. Je herkent misschien de ROC-curve op pagina 335. +[Referentie](https://druckhaus-hofmann.de/gallery/31-wj-feb-2020.pdf) + +### ⚡️ Energiebeheer + +In onze lessen over [tijdreeksvoorspelling](../../7-TimeSeries/README.md) hebben we het concept van slimme parkeermeters gebruikt om inkomsten te genereren voor een stad op basis van het begrijpen van vraag en aanbod. Dit artikel bespreekt in detail hoe clustering, regressie en tijdreeksvoorspelling gecombineerd werden om het toekomstige energiegebruik in Ierland te voorspellen, gebaseerd op slimme meters. +[Referentie](https://www-cdn.knime.com/sites/default/files/inline-images/knime_bigdata_energy_timeseries_whitepaper.pdf) + +## 💼 Verzekeringen + +De verzekeringssector is een andere sector die ML gebruikt om levensvatbare financiële en actuariële modellen te bouwen en te optimaliseren. + +### Volatiliteitsbeheer + +MetLife, een aanbieder van levensverzekeringen, is open over hoe ze volatiliteit in hun financiële modellen analyseren en verminderen. In dit artikel zie je visualisaties van binaire en ordinale classificatie. Je zult ook visualisaties van voorspellingen ontdekken. +[Referentie](https://investments.metlife.com/content/dam/metlifecom/us/investments/insights/research-topics/macro-strategy/pdf/MetLifeInvestmentManagement_MachineLearnedRanking_070920.pdf) + +## 🎨 Kunst, Cultuur en Literatuur + +In de kunst, bijvoorbeeld in de journalistiek, zijn er veel interessante problemen. Het detecteren van nepnieuws is een groot probleem, omdat bewezen is dat het de mening van mensen kan beïnvloeden en zelfs democratieën kan ondermijnen. Musea kunnen ook profiteren van het gebruik van ML, van het vinden van verbanden tussen artefacten tot resourceplanning. + +### Detectie van nepnieuws + +Het detecteren van nepnieuws is tegenwoordig een kat-en-muisspel in de media. In dit artikel stellen onderzoekers voor dat een systeem dat verschillende van de ML-technieken die we hebben bestudeerd combineert, kan worden getest en het beste model kan worden ingezet: "Dit systeem is gebaseerd op natuurlijke taalverwerking om kenmerken uit de data te extraheren en vervolgens worden deze kenmerken gebruikt voor het trainen van machine learning-classifiers zoals Naive Bayes, Support Vector Machine (SVM), Random Forest (RF), Stochastic Gradient Descent (SGD) en Logistic Regression (LR)." +[Referentie](https://www.irjet.net/archives/V7/i6/IRJET-V7I6688.pdf) + +Dit artikel laat zien hoe het combineren van verschillende ML-domeinen interessante resultaten kan opleveren die kunnen helpen om nepnieuws te stoppen en echte schade te voorkomen; in dit geval was de aanleiding de verspreiding van geruchten over COVID-behandelingen die tot geweld door menigten leidden. + +### Museum ML + +Musea staan aan de vooravond van een AI-revolutie waarin het catalogiseren en digitaliseren van collecties en het vinden van verbanden tussen artefacten gemakkelijker wordt naarmate technologie vordert. Projecten zoals [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources.) helpen de mysteries van ontoegankelijke collecties zoals de Vaticaanse archieven te ontsluiten. Maar ook het zakelijke aspect van musea profiteert van ML-modellen. + +Bijvoorbeeld, het Art Institute of Chicago bouwde modellen om te voorspellen waar bezoekers geïnteresseerd in zijn en wanneer ze tentoonstellingen zullen bezoeken. Het doel is om elke keer dat de gebruiker het museum bezoekt een geïndividualiseerde en geoptimaliseerde bezoekerservaring te creëren. "Tijdens het fiscale jaar 2017 voorspelde het model de bezoekersaantallen en toegangsinkomsten met een nauwkeurigheid van 1 procent, zegt Andrew Simnick, senior vice president bij het Art Institute." +[Referentie](https://www.chicagobusiness.com/article/20180518/ISSUE01/180519840/art-institute-of-chicago-uses-data-to-make-exhibit-choices) + +## 🏷 Marketing + +### Klantsegmentatie + +De meest effectieve marketingstrategieën richten zich op klanten op verschillende manieren op basis van diverse groeperingen. In dit artikel worden de toepassingen van clustering-algoritmen besproken om gedifferentieerde marketing te ondersteunen. Gedifferentieerde marketing helpt bedrijven hun merkbekendheid te verbeteren, meer klanten te bereiken en meer geld te verdienen. +[Referentie](https://ai.inqline.com/machine-learning-for-marketing-customer-segmentation/) + +## 🚀 Uitdaging + +Identificeer een andere sector die profiteert van enkele van de technieken die je in dit curriculum hebt geleerd, en ontdek hoe deze sector ML gebruikt. +## [Quiz na de les](https://ff-quizzes.netlify.app/en/ml/) + +## Herziening & Zelfstudie + +Het data science-team van Wayfair heeft verschillende interessante video's over hoe zij ML gebruiken binnen hun bedrijf. Het is de moeite waard om [een kijkje te nemen](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos)! + +## Opdracht + +[Een ML-speurtocht](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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/9-Real-World/1-Applications/assignment.md b/translations/nl/9-Real-World/1-Applications/assignment.md new file mode 100644 index 00000000..de3c5d94 --- /dev/null +++ b/translations/nl/9-Real-World/1-Applications/assignment.md @@ -0,0 +1,27 @@ + +# Een ML Speurtocht + +## Instructies + +In deze les heb je geleerd over veel praktijkvoorbeelden die zijn opgelost met klassieke ML. Hoewel het gebruik van deep learning, nieuwe technieken en tools in AI, en het inzetten van neurale netwerken heeft geholpen om de productie van hulpmiddelen in deze sectoren te versnellen, blijft klassieke ML met de technieken uit dit curriculum van grote waarde. + +In deze opdracht stel je je voor dat je deelneemt aan een hackathon. Gebruik wat je hebt geleerd in het curriculum om een oplossing te bedenken met klassieke ML om een probleem op te lossen in een van de sectoren die in deze les zijn besproken. Maak een presentatie waarin je bespreekt hoe je jouw idee gaat implementeren. Bonuspunten als je voorbeelddata kunt verzamelen en een ML-model kunt bouwen om je concept te ondersteunen! + +## Rubric + +| Criteria | Uitmuntend | Voldoende | Moet Verbeteren | +| -------- | ------------------------------------------------------------------ | ------------------------------------------------ | ---------------------- | +| | Een PowerPoint-presentatie wordt gepresenteerd - bonus voor het bouwen van een model | Een niet-innovatieve, basispresentatie wordt gepresenteerd | Het werk is onvolledig | + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/9-Real-World/2-Debugging-ML-Models/README.md b/translations/nl/9-Real-World/2-Debugging-ML-Models/README.md new file mode 100644 index 00000000..2f0800a3 --- /dev/null +++ b/translations/nl/9-Real-World/2-Debugging-ML-Models/README.md @@ -0,0 +1,184 @@ + +# Postscript: Model Debugging in Machine Learning met Responsible AI-dashboardcomponenten + +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Introductie + +Machine learning beïnvloedt ons dagelijks leven. AI vindt zijn weg naar enkele van de belangrijkste systemen die ons als individu en onze samenleving raken, zoals gezondheidszorg, financiën, onderwijs en werkgelegenheid. Bijvoorbeeld, systemen en modellen worden gebruikt bij dagelijkse besluitvormingsprocessen, zoals medische diagnoses of het opsporen van fraude. Hierdoor worden de vooruitgangen in AI, samen met de versnelde adoptie, geconfronteerd met veranderende maatschappelijke verwachtingen en groeiende regelgeving. We zien voortdurend gebieden waar AI-systemen niet aan de verwachtingen voldoen; ze brengen nieuwe uitdagingen aan het licht; en overheden beginnen AI-oplossingen te reguleren. Het is daarom belangrijk dat deze modellen worden geanalyseerd om eerlijke, betrouwbare, inclusieve, transparante en verantwoorde resultaten voor iedereen te bieden. + +In dit curriculum bekijken we praktische tools die kunnen worden gebruikt om te beoordelen of een model problemen heeft met Responsible AI. Traditionele debuggingtechnieken voor machine learning zijn vaak gebaseerd op kwantitatieve berekeningen zoals geaggregeerde nauwkeurigheid of gemiddelde foutverlies. Stel je voor wat er kan gebeuren als de gegevens die je gebruikt om deze modellen te bouwen bepaalde demografische gegevens missen, zoals ras, geslacht, politieke opvattingen, religie, of als deze demografische gegevens onevenredig worden vertegenwoordigd. Wat als de output van het model wordt geïnterpreteerd om een bepaalde demografische groep te bevoordelen? Dit kan leiden tot een over- of ondervertegenwoordiging van deze gevoelige kenmerken, wat resulteert in problemen met eerlijkheid, inclusiviteit of betrouwbaarheid van het model. Een ander probleem is dat machine learning-modellen vaak worden beschouwd als "black boxes", wat het moeilijk maakt om te begrijpen en uit te leggen wat de voorspellingen van een model beïnvloedt. Dit zijn allemaal uitdagingen waarmee datawetenschappers en AI-ontwikkelaars worden geconfronteerd wanneer ze niet over voldoende tools beschikken om de eerlijkheid of betrouwbaarheid van een model te debuggen en te beoordelen. + +In deze les leer je hoe je je modellen kunt debuggen met behulp van: + +- **Foutanalyse**: Identificeer waar in je dataverdeling het model hoge foutpercentages heeft. +- **Modeloverzicht**: Voer vergelijkende analyses uit over verschillende datacohorten om verschillen in de prestatiemetrics van je model te ontdekken. +- **Data-analyse**: Onderzoek waar er mogelijk een over- of ondervertegenwoordiging van je gegevens is die je model kan beïnvloeden om een bepaalde demografische groep te bevoordelen boven een andere. +- **Feature-importance**: Begrijp welke kenmerken de voorspellingen van je model beïnvloeden op een globaal of lokaal niveau. + +## Vereisten + +Als vereiste, neem de review [Responsible AI tools voor ontwikkelaars](https://www.microsoft.com/ai/ai-lab-responsible-ai-dashboard) + +> ![Gif over Responsible AI Tools](../../../../9-Real-World/2-Debugging-ML-Models/images/rai-overview.gif) + +## Foutanalyse + +Traditionele prestatiemetrics voor modellen die worden gebruikt om nauwkeurigheid te meten, zijn meestal berekeningen gebaseerd op correcte versus incorrecte voorspellingen. Bijvoorbeeld, het bepalen dat een model 89% van de tijd nauwkeurig is met een foutverlies van 0,001 kan worden beschouwd als een goede prestatie. Fouten zijn echter vaak niet gelijkmatig verdeeld in je onderliggende dataset. Je kunt een nauwkeurigheidsscore van 89% krijgen, maar ontdekken dat er verschillende gebieden in je gegevens zijn waar het model 42% van de tijd faalt. De gevolgen van deze foutpatronen bij bepaalde datagroepen kunnen leiden tot problemen met eerlijkheid of betrouwbaarheid. Het is essentieel om te begrijpen in welke gebieden het model goed of slecht presteert. De datagebieden waar er een hoog aantal onnauwkeurigheden in je model zijn, kunnen belangrijke demografische gegevens blijken te zijn. + +![Analyseer en debug model fouten](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-distribution.png) + +De Foutanalysecomponent op het RAI-dashboard illustreert hoe modelfalen is verdeeld over verschillende cohorten met een boomvisualisatie. Dit is nuttig om kenmerken of gebieden te identificeren waar er een hoog foutpercentage is in je dataset. Door te zien waar de meeste onnauwkeurigheden van het model vandaan komen, kun je beginnen met het onderzoeken van de oorzaak. Je kunt ook cohorten van gegevens maken om analyses uit te voeren. Deze datacohorten helpen bij het debuggen om te bepalen waarom de modelprestaties goed zijn in het ene cohort, maar foutief in een ander. + +![Foutanalyse](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-cohort.png) + +De visuele indicatoren op de boomkaart helpen om probleemgebieden sneller te lokaliseren. Bijvoorbeeld, hoe donkerder de rode kleur van een boomknooppunt, hoe hoger het foutpercentage. + +Een heatmap is een andere visualisatiefunctie die gebruikers kunnen gebruiken om het foutpercentage te onderzoeken met behulp van één of twee kenmerken om een bijdrage aan de model fouten te vinden over een hele dataset of cohorten. + +![Foutanalyse Heatmap](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-heatmap.png) + +Gebruik foutanalyse wanneer je: + +* Een diepgaand begrip wilt krijgen van hoe modelfalen is verdeeld over een dataset en over verschillende invoer- en kenmerkdimensies. +* De geaggregeerde prestatiemetrics wilt opsplitsen om automatisch foutieve cohorten te ontdekken en gerichte stappen voor mitigatie te informeren. + +## Modeloverzicht + +Het evalueren van de prestaties van een machine learning-model vereist een holistisch begrip van zijn gedrag. Dit kan worden bereikt door meer dan één metric te bekijken, zoals foutpercentage, nauwkeurigheid, recall, precisie of MAE (Mean Absolute Error), om verschillen tussen prestatiemetrics te vinden. Eén prestatiemetric kan er goed uitzien, maar onnauwkeurigheden kunnen worden blootgelegd in een andere metric. Bovendien helpt het vergelijken van de metrics voor verschillen over de hele dataset of cohorten om licht te werpen op waar het model goed of slecht presteert. Dit is vooral belangrijk om de prestaties van het model te zien tussen gevoelige versus ongevoelige kenmerken (bijv. ras, geslacht of leeftijd van patiënten) om mogelijke oneerlijkheid van het model te onthullen. Bijvoorbeeld, het ontdekken dat het model meer fouten maakt in een cohort met gevoelige kenmerken kan mogelijke oneerlijkheid van het model onthullen. + +De Modeloverzichtcomponent van het RAI-dashboard helpt niet alleen bij het analyseren van de prestatiemetrics van de gegevensrepresentatie in een cohort, maar geeft gebruikers ook de mogelijkheid om het gedrag van het model te vergelijken over verschillende cohorten. + +![Dataset cohorten - modeloverzicht in RAI-dashboard](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-dataset-cohorts.png) + +De functie-gebaseerde analysefunctionaliteit van de component stelt gebruikers in staat om gegevenssubgroepen binnen een specifiek kenmerk te verfijnen om anomalieën op een gedetailleerd niveau te identificeren. Bijvoorbeeld, het dashboard heeft ingebouwde intelligentie om automatisch cohorten te genereren voor een door de gebruiker geselecteerd kenmerk (bijv. *"time_in_hospital < 3"* of *"time_in_hospital >= 7"*). Dit stelt een gebruiker in staat om een specifiek kenmerk te isoleren van een grotere gegevensgroep om te zien of het een belangrijke beïnvloeder is van de foutieve uitkomsten van het model. + +![Feature cohorten - modeloverzicht in RAI-dashboard](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-feature-cohorts.png) + +De Modeloverzichtcomponent ondersteunt twee klassen van verschilmetrics: + +**Verschil in modelprestaties**: Deze sets van metrics berekenen het verschil in de waarden van de geselecteerde prestatiemetric over subgroepen van gegevens. Hier zijn enkele voorbeelden: + +* Verschil in nauwkeurigheidspercentage +* Verschil in foutpercentage +* Verschil in precisie +* Verschil in recall +* Verschil in gemiddelde absolute fout (MAE) + +**Verschil in selectieratio**: Deze metric bevat het verschil in selectieratio (gunstige voorspelling) tussen subgroepen. Een voorbeeld hiervan is het verschil in goedkeuringspercentages voor leningen. Selectieratio betekent het aandeel gegevenspunten in elke klasse die als 1 worden geclassificeerd (bij binaire classificatie) of de verdeling van voorspelde waarden (bij regressie). + +## Data-analyse + +> "Als je de gegevens lang genoeg martelt, zullen ze alles bekennen" - Ronald Coase + +Deze uitspraak klinkt extreem, maar het is waar dat gegevens kunnen worden gemanipuleerd om elke conclusie te ondersteunen. Dergelijke manipulatie kan soms onbedoeld gebeuren. Als mensen hebben we allemaal vooroordelen, en het is vaak moeilijk om bewust te weten wanneer je vooroordelen in gegevens introduceert. Eerlijkheid garanderen in AI en machine learning blijft een complexe uitdaging. + +Gegevens zijn een grote blinde vlek voor traditionele prestatiemetrics van modellen. Je kunt hoge nauwkeurigheidsscores hebben, maar dit weerspiegelt niet altijd de onderliggende gegevensbias die in je dataset kan zitten. Bijvoorbeeld, als een dataset van werknemers 27% vrouwen in leidinggevende posities in een bedrijf heeft en 73% mannen op hetzelfde niveau, kan een AI-model voor vacatureadvertenties dat op deze gegevens is getraind, voornamelijk een mannelijk publiek targeten voor senior functies. Deze onbalans in gegevens heeft de voorspelling van het model beïnvloed om één geslacht te bevoordelen. Dit onthult een eerlijkheidsprobleem waarbij er een genderbias in het AI-model is. + +De Data-analysecomponent op het RAI-dashboard helpt om gebieden te identificeren waar er een over- en ondervertegenwoordiging in de dataset is. Het helpt gebruikers om de oorzaak van fouten en eerlijkheidsproblemen te diagnosticeren die worden geïntroduceerd door gegevensonevenwichtigheden of een gebrek aan vertegenwoordiging van een bepaalde gegevensgroep. Dit geeft gebruikers de mogelijkheid om datasets te visualiseren op basis van voorspelde en werkelijke uitkomsten, foutgroepen en specifieke kenmerken. Soms kan het ontdekken van een ondervertegenwoordigde gegevensgroep ook onthullen dat het model niet goed leert, vandaar de hoge onnauwkeurigheden. Een model met gegevensbias is niet alleen een eerlijkheidsprobleem, maar toont ook aan dat het model niet inclusief of betrouwbaar is. + +![Data-analysecomponent op RAI-dashboard](../../../../9-Real-World/2-Debugging-ML-Models/images/dataanalysis-cover.png) + +Gebruik data-analyse wanneer je: + +* De statistieken van je dataset wilt verkennen door verschillende filters te selecteren om je gegevens in verschillende dimensies (ook wel cohorten genoemd) op te splitsen. +* De verdeling van je dataset over verschillende cohorten en kenmerkengroepen wilt begrijpen. +* Wilt bepalen of je bevindingen met betrekking tot eerlijkheid, foutanalyse en causaliteit (afgeleid van andere dashboardcomponenten) het resultaat zijn van de verdeling van je dataset. +* Wilt beslissen in welke gebieden je meer gegevens moet verzamelen om fouten te verminderen die voortkomen uit representatieproblemen, labelruis, kenmerkruis, labelbias en vergelijkbare factoren. + +## Modelinterpretatie + +Machine learning-modellen worden vaak beschouwd als "black boxes". Begrijpen welke belangrijke gegevenskenmerken de voorspelling van een model beïnvloeden kan een uitdaging zijn. Het is belangrijk om transparantie te bieden over waarom een model een bepaalde voorspelling doet. Bijvoorbeeld, als een AI-systeem voorspelt dat een diabetespatiënt het risico loopt om binnen 30 dagen opnieuw in een ziekenhuis te worden opgenomen, moet het ondersteunende gegevens kunnen bieden die tot zijn voorspelling hebben geleid. Het hebben van ondersteunende gegevensindicatoren brengt transparantie, zodat clinici of ziekenhuizen goed geïnformeerde beslissingen kunnen nemen. Bovendien stelt het kunnen uitleggen waarom een model een voorspelling deed voor een individuele patiënt verantwoording mogelijk met gezondheidsregelgeving. Wanneer je machine learning-modellen gebruikt op manieren die het leven van mensen beïnvloeden, is het cruciaal om te begrijpen en uit te leggen wat het gedrag van een model beïnvloedt. Modeluitlegbaarheid en interpretatie helpen vragen te beantwoorden in scenario's zoals: + +* Modeldebugging: Waarom maakte mijn model deze fout? Hoe kan ik mijn model verbeteren? +* Samenwerking tussen mens en AI: Hoe kan ik de beslissingen van het model begrijpen en vertrouwen? +* Regelgevingsnaleving: Voldoet mijn model aan wettelijke vereisten? + +De Feature-importancecomponent van het RAI-dashboard helpt je om te debuggen en een uitgebreid begrip te krijgen van hoe een model voorspellingen maakt. Het is ook een nuttige tool voor machine learning-professionals en besluitvormers om uit te leggen en bewijs te tonen van kenmerken die het gedrag van een model beïnvloeden voor regelgevingsnaleving. Gebruikers kunnen vervolgens zowel globale als lokale verklaringen verkennen om te valideren welke kenmerken de voorspelling van een model beïnvloeden. Globale verklaringen tonen de belangrijkste kenmerken die de algehele voorspelling van een model beïnvloeden. Lokale verklaringen tonen welke kenmerken hebben geleid tot de voorspelling van een model voor een individueel geval. Het vermogen om lokale verklaringen te evalueren is ook nuttig bij het debuggen of auditen van een specifiek geval om beter te begrijpen en te interpreteren waarom een model een nauwkeurige of onnauwkeurige voorspelling deed. + +![Feature-importancecomponent van het RAI-dashboard](../../../../9-Real-World/2-Debugging-ML-Models/images/9-feature-importance.png) + +* Globale verklaringen: Bijvoorbeeld, welke kenmerken beïnvloeden het algehele gedrag van een diabetes ziekenhuisopname-model? +* Lokale verklaringen: Bijvoorbeeld, waarom werd een diabetespatiënt ouder dan 60 jaar met eerdere ziekenhuisopnames voorspeld om binnen 30 dagen opnieuw te worden opgenomen of niet opgenomen in een ziekenhuis? + +In het debugproces van het onderzoeken van de prestaties van een model over verschillende cohorten, toont Feature-importance welk niveau van impact een kenmerk heeft over de cohorten. Het helpt om anomalieën te onthullen bij het vergelijken van het niveau van invloed dat het kenmerk heeft bij het sturen van foutieve voorspellingen van een model. De Feature-importancecomponent kan tonen welke waarden in een kenmerk positief of negatief de uitkomst van het model beïnvloeden. Bijvoorbeeld, als een model een onnauwkeurige voorspelling deed, geeft de component je de mogelijkheid om in te zoomen en te bepalen welke kenmerken of kenmerkwaarden de voorspelling hebben beïnvloed. Dit detailniveau helpt niet alleen bij het debuggen, maar biedt ook transparantie en verantwoording in auditsituaties. Ten slotte kan de component helpen om eerlijkheidsproblemen te identificeren. Bijvoorbeeld, als een gevoelig kenmerk zoals etniciteit of geslacht zeer invloedrijk is bij het sturen van de voorspelling van een model, kan dit een teken zijn van ras- of genderbias in het model. + +![Feature-importance](../../../../9-Real-World/2-Debugging-ML-Models/images/9-features-influence.png) + +Gebruik interpretatie wanneer je: + +* Wilt bepalen hoe betrouwbaar de voorspellingen van je AI-systeem zijn door te begrijpen welke kenmerken het belangrijkst zijn voor de voorspellingen. +* Het debuggen van je model wilt benaderen door het eerst te begrijpen en te identificeren of het model gezonde kenmerken gebruikt of slechts valse correlaties. +* Potentiële bronnen van oneerlijkheid wilt onthullen door te begrijpen of het model voorspellingen baseert op gevoelige kenmerken of op kenmerken die sterk gecorreleerd zijn met hen. +* Gebruikersvertrouwen wilt opbouwen in de beslissingen van je model door lokale verklaringen te genereren om hun uitkomsten te illustreren. +* Een regelgevingsaudit van een AI-systeem wilt voltooien om modellen te valideren en de impact van modelbeslissingen op mensen te monitoren. + +## Conclusie + +Alle componenten van het RAI-dashboard zijn praktische tools om machine learning-modellen te bouwen die minder schadelijk en meer betrouwbaar zijn voor de samenleving. Ze verbeteren de preventie van bedreigingen voor mensenrechten; het discrimineren of uitsluiten van bepaalde groepen van levensmogelijkheden; en het risico op fysieke of psychologische schade. Ze helpen ook om vertrouwen op te bouwen in de beslissingen van je model door lokale verklaringen te genereren om hun uitkomsten te illustreren. Sommige van de potentiële schade kan worden geclassificeerd als: + +- **Toewijzing**, als bijvoorbeeld een geslacht of etniciteit wordt bevoordeeld boven een ander. +- **Kwaliteit van dienstverlening**. Als je de gegevens traint voor één specifiek scenario, maar de realiteit veel complexer is, leidt dit tot een slecht presterende dienst. +- **Stereotypering**. Het associëren van een bepaalde groep met vooraf toegewezen attributen. +- **Denigratie**. Het oneerlijk bekritiseren en labelen van iets of iemand. +- **Over- of ondervertegenwoordiging**. Het idee is dat een bepaalde groep niet zichtbaar is in een bepaald beroep, en elke dienst of functie die dat blijft promoten, draagt bij aan schade. + +### Azure RAI-dashboard + +[Azure RAI-dashboard](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) is gebaseerd op open-source tools ontwikkeld door toonaangevende academische instellingen en organisaties, waaronder Microsoft. Deze tools zijn essentieel voor datawetenschappers en AI-ontwikkelaars om het gedrag van modellen beter te begrijpen, ongewenste problemen in AI-modellen te ontdekken en te mitigeren. + +- Leer hoe je de verschillende componenten kunt gebruiken door de RAI-dashboard [documentatie](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) te bekijken. + +- Bekijk enkele RAI-dashboard [voorbeeldnotebooks](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) om meer verantwoorde AI-scenario's in Azure Machine Learning te debuggen. + +--- +## 🚀 Uitdaging + +Om te voorkomen dat statistische of databiases überhaupt worden geïntroduceerd, zouden we: + +- een diversiteit aan achtergronden en perspectieven moeten hebben onder de mensen die aan systemen werken +- investeren in datasets die de diversiteit van onze samenleving weerspiegelen +- betere methoden ontwikkelen om bias te detecteren en te corrigeren wanneer het optreedt + +Denk na over real-life scenario's waarin oneerlijkheid duidelijk is bij het bouwen en gebruiken van modellen. Wat moeten we nog meer overwegen? + +## [Quiz na de les](https://ff-quizzes.netlify.app/en/ml/) +## Review & Zelfstudie + +In deze les heb je enkele praktische tools geleerd om verantwoorde AI te integreren in machine learning. + +Bekijk deze workshop om dieper in te gaan op de onderwerpen: + +- Responsible AI Dashboard: One-stop shop voor het operationaliseren van RAI in de praktijk door Besmira Nushi en Mehrnoosh Sameki + +[![Responsible AI Dashboard: One-stop shop voor het operationaliseren van RAI in de praktijk](https://img.youtube.com/vi/f1oaDNl3djg/0.jpg)](https://www.youtube.com/watch?v=f1oaDNl3djg "Responsible AI Dashboard: One-stop shop voor het operationaliseren van RAI in de praktijk") + + +> 🎥 Klik op de afbeelding hierboven voor een video: Responsible AI Dashboard: One-stop shop voor het operationaliseren van RAI in de praktijk door Besmira Nushi en Mehrnoosh Sameki + +Raadpleeg de volgende materialen om meer te leren over verantwoorde AI en hoe je meer betrouwbare modellen kunt bouwen: + +- Microsoft’s RAI-dashboardtools voor het debuggen van ML-modellen: [Responsible AI tools resources](https://aka.ms/rai-dashboard) + +- Verken de Responsible AI-toolkit: [Github](https://github.com/microsoft/responsible-ai-toolbox) + +- Microsoft’s RAI-resourcecentrum: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- Microsoft’s FATE-onderzoeksgroep: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) + +## Opdracht + +[Verken RAI-dashboard](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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/9-Real-World/2-Debugging-ML-Models/assignment.md b/translations/nl/9-Real-World/2-Debugging-ML-Models/assignment.md new file mode 100644 index 00000000..04c2ef3b --- /dev/null +++ b/translations/nl/9-Real-World/2-Debugging-ML-Models/assignment.md @@ -0,0 +1,25 @@ + +# Verken het Responsible AI (RAI) dashboard + +## Instructies + +In deze les heb je geleerd over het RAI-dashboard, een reeks componenten gebaseerd op "open-source" tools om datawetenschappers te helpen bij foutenanalyse, data-exploratie, beoordeling van eerlijkheid, modelinterpretatie, tegenfeitelijke/wat-als analyses en causale analyse van AI-systemen. Voor deze opdracht, verken enkele voorbeeld-[notebooks](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) van het RAI-dashboard en rapporteer je bevindingen in een paper of presentatie. + +## Rubric + +| Criteria | Uitmuntend | Voldoende | Verbetering Nodig | +| -------- | ---------- | --------- | ----------------- | +| | Een paper of PowerPoint-presentatie wordt gepresenteerd waarin de componenten van het RAI-dashboard, de uitgevoerde notebook en de conclusies worden besproken | Een paper wordt gepresenteerd zonder conclusies | Er wordt geen paper gepresenteerd | + +--- + +**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 zijn 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 diff --git a/translations/nl/9-Real-World/README.md b/translations/nl/9-Real-World/README.md new file mode 100644 index 00000000..15868c2a --- /dev/null +++ b/translations/nl/9-Real-World/README.md @@ -0,0 +1,32 @@ + +# Nawoord: Toepassingen van klassieke machine learning in de echte wereld + +In dit deel van de cursus maak je kennis met enkele toepassingen van klassieke ML in de echte wereld. We hebben het internet afgespeurd om whitepapers en artikelen te vinden over toepassingen die deze strategieën gebruiken, waarbij we neural networks, deep learning en AI zoveel mogelijk hebben vermeden. Ontdek hoe ML wordt gebruikt in bedrijfsprocessen, ecologische toepassingen, financiën, kunst en cultuur, en meer. + +![chess](../../../9-Real-World/images/chess.jpg) + +> Foto door Alexis Fauvet op Unsplash + +## Les + +1. [Toepassingen van ML in de echte wereld](1-Applications/README.md) +2. [Modeldebugging in Machine Learning met Responsible AI-dashboardcomponenten](2-Debugging-ML-Models/README.md) + +## Credits + +"Toepassingen in de echte wereld" is geschreven door een team van mensen, waaronder [Jen Looper](https://twitter.com/jenlooper) en [Ornella Altunyan](https://twitter.com/ornelladotcom). + +"Modeldebugging in Machine Learning met Responsible AI-dashboardcomponenten" is geschreven door [Ruth Yakubu](https://twitter.com/ruthieyakubu) + +--- + +**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 zijn 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 diff --git a/translations/nl/CODE_OF_CONDUCT.md b/translations/nl/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..11999ed7 --- /dev/null +++ b/translations/nl/CODE_OF_CONDUCT.md @@ -0,0 +1,23 @@ + +# Microsoft Open Source Gedragscode + +Dit project heeft de [Microsoft Open Source Gedragscode](https://opensource.microsoft.com/codeofconduct/) aangenomen. + +Bronnen: + +- [Microsoft Open Source Gedragscode](https://opensource.microsoft.com/codeofconduct/) +- [Microsoft Gedragscode FAQ](https://opensource.microsoft.com/codeofconduct/faq/) +- Neem contact op met [opencode@microsoft.com](mailto:opencode@microsoft.com) voor vragen of zorgen + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/CONTRIBUTING.md b/translations/nl/CONTRIBUTING.md new file mode 100644 index 00000000..9db91831 --- /dev/null +++ b/translations/nl/CONTRIBUTING.md @@ -0,0 +1,25 @@ + +# Bijdragen + +Dit project verwelkomt bijdragen en suggesties. Voor de meeste bijdragen moet je akkoord gaan met een Contributor License Agreement (CLA), waarin je verklaart dat je het recht hebt om, en daadwerkelijk doet, ons de rechten te geven om jouw bijdrage te gebruiken. Voor meer informatie, bezoek https://cla.microsoft.com. + +> Belangrijk: bij het vertalen van tekst in deze repository, zorg ervoor dat je geen gebruik maakt van automatische vertaling. We zullen vertalingen verifiëren via de gemeenschap, dus bied alleen vertalingen aan in talen waarin je vaardig bent. + +Wanneer je een pull request indient, zal een CLA-bot automatisch bepalen of je een CLA moet indienen en de PR dienovereenkomstig voorzien van een label of opmerking. Volg gewoon de instructies die door de bot worden gegeven. Dit hoef je slechts één keer te doen voor alle repositories die onze CLA gebruiken. + +Dit project heeft de [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) aangenomen. +Voor meer informatie, zie de [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) +of neem contact op via [opencode@microsoft.com](mailto:opencode@microsoft.com) met eventuele aanvullende vragen of opmerkingen. + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/README.md b/translations/nl/README.md new file mode 100644 index 00000000..65841001 --- /dev/null +++ b/translations/nl/README.md @@ -0,0 +1,178 @@ + +[![GitHub license](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) +[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) +[![GitHub issues](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) +[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) + +[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) +[![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) +[![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) + +### 🌐 Ondersteuning voor meerdere talen + +#### Ondersteund via GitHub Action (Automatisch & Altijd Actueel) + +[Frans](../fr/README.md) | [Spaans](../es/README.md) | [Duits](../de/README.md) | [Russisch](../ru/README.md) | [Arabisch](../ar/README.md) | [Perzisch (Farsi)](../fa/README.md) | [Urdu](../ur/README.md) | [Chinees (Vereenvoudigd)](../zh/README.md) | [Chinees (Traditioneel, Macau)](../mo/README.md) | [Chinees (Traditioneel, Hong Kong)](../hk/README.md) | [Chinees (Traditioneel, Taiwan)](../tw/README.md) | [Japans](../ja/README.md) | [Koreaans](../ko/README.md) | [Hindi](../hi/README.md) | [Bengaals](../bn/README.md) | [Marathi](../mr/README.md) | [Nepalees](../ne/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Portugees (Portugal)](../pt/README.md) | [Portugees (Brazilië)](../br/README.md) | [Italiaans](../it/README.md) | [Pools](../pl/README.md) | [Turks](../tr/README.md) | [Grieks](../el/README.md) | [Thais](../th/README.md) | [Zweeds](../sv/README.md) | [Deens](../da/README.md) | [Noors](../no/README.md) | [Fins](../fi/README.md) | [Nederlands](./README.md) | [Hebreeuws](../he/README.md) | [Vietnamees](../vi/README.md) | [Indonesisch](../id/README.md) | [Maleis](../ms/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Swahili](../sw/README.md) | [Hongaars](../hu/README.md) | [Tsjechisch](../cs/README.md) | [Slowaaks](../sk/README.md) | [Roemeens](../ro/README.md) | [Bulgaars](../bg/README.md) | [Servisch (Cyrillisch)](../sr/README.md) | [Kroatisch](../hr/README.md) | [Sloveens](../sl/README.md) | [Oekraïens](../uk/README.md) | [Birmaans (Myanmar)](../my/README.md) + +#### Doe mee met de community + +[![Azure AI Discord](https://dcbadge.limes.pink/api/server/kzRShWzttr)](https://discord.gg/kzRShWzttr) + +# Machine Learning voor Beginners - Een Curriculum + +> 🌍 Reis de wereld rond terwijl we Machine Learning verkennen door middel van wereldculturen 🌍 + +Cloud Advocates bij Microsoft zijn verheugd om een 12-weekse, 26-lessen curriculum aan te bieden over **Machine Learning**. In dit curriculum leer je over wat soms **klassieke machine learning** wordt genoemd, voornamelijk met behulp van Scikit-learn als bibliotheek en zonder deep learning, wat wordt behandeld in ons [AI voor Beginners curriculum](https://aka.ms/ai4beginners). Combineer deze lessen met ons ['Data Science voor Beginners curriculum'](https://aka.ms/ds4beginners), ook! + +Reis met ons mee rond de wereld terwijl we deze klassieke technieken toepassen op data uit verschillende delen van de wereld. Elke les bevat pre- en post-lesquizzen, geschreven instructies om de les te voltooien, een oplossing, een opdracht en meer. Onze projectgerichte aanpak stelt je in staat om te leren terwijl je bouwt, een bewezen manier om nieuwe vaardigheden te laten beklijven. + +**✍️ Hartelijke dank aan onze auteurs** Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Anirban Mukherjee, Ornella Altunyan, Ruth Yakubu en Amy Boyd + +**🎨 Ook dank aan onze illustratoren** Tomomi Imura, Dasani Madipalli en Jen Looper + +**🙏 Speciale dank 🙏 aan onze Microsoft Student Ambassador auteurs, reviewers en inhoudsbijdragers**, met name Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila en Snigdha Agarwal + +**🤩 Extra dank aan Microsoft Student Ambassadors Eric Wanjau, Jasleen Sondhi en Vidushi Gupta voor onze R-lessen!** + +# Aan de slag + +Volg deze stappen: +1. **Fork de Repository**: Klik op de "Fork"-knop rechtsboven op deze pagina. +2. **Clone de Repository**: `git clone https://github.com/microsoft/ML-For-Beginners.git` + +> [vind alle aanvullende bronnen voor deze cursus in onze Microsoft Learn-collectie](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) + +**[Studenten](https://aka.ms/student-page)**, om dit curriculum te gebruiken, fork de hele repo naar je eigen GitHub-account en voltooi de oefeningen alleen of met een groep: + +- Begin met een pre-lesquiz. +- Lees de les en voltooi de activiteiten, pauzeer en reflecteer bij elke kenniscontrole. +- Probeer de projecten te maken door de lessen te begrijpen in plaats van de oplossingscode uit te voeren; die code is echter beschikbaar in de `/solution`-mappen in elke projectgerichte les. +- Maak de post-lesquiz. +- Voltooi de uitdaging. +- Voltooi de opdracht. +- Na het voltooien van een lesgroep, bezoek het [Discussiebord](https://github.com/microsoft/ML-For-Beginners/discussions) en "leer hardop" door de juiste PAT-rubriek in te vullen. Een 'PAT' is een Progress Assessment Tool, een rubriek die je invult om je leerproces te bevorderen. Je kunt ook reageren op andere PATs zodat we samen kunnen leren. + +> Voor verdere studie raden we aan om deze [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott) modules en leerpaden te volgen. + +**Docenten**, we hebben [enkele suggesties opgenomen](for-teachers.md) over hoe dit curriculum te gebruiken. + +--- + +## Video walkthroughs + +Sommige lessen zijn beschikbaar als korte video's. Je kunt deze allemaal in de lessen vinden, of op de [ML voor Beginners playlist op het Microsoft Developer YouTube-kanaal](https://aka.ms/ml-beginners-videos) door op de afbeelding hieronder te klikken. + +[![ML voor beginners banner](../../images/ml-for-beginners-video-banner.png)](https://aka.ms/ml-beginners-videos) + +--- + +## Ontmoet het team + +[![Promo video](../../images/ml.gif)](https://youtu.be/Tj1XWrDSYJU) + +**Gif door** [Mohit Jaisal](https://linkedin.com/in/mohitjaisal) + +> 🎥 Klik op de afbeelding hierboven voor een video over het project en de mensen die het hebben gemaakt! + +--- + +## Pedagogiek + +We hebben twee pedagogische principes gekozen bij het bouwen van dit curriculum: ervoor zorgen dat het hands-on **projectgericht** is en dat het **frequente quizzen** bevat. Daarnaast heeft dit curriculum een gemeenschappelijk **thema** om het samenhangend te maken. + +Door ervoor te zorgen dat de inhoud aansluit bij projecten, wordt het proces boeiender voor studenten en wordt het begrip van concepten versterkt. Bovendien zet een quiz met lage inzet vóór een les de intentie van de student om een onderwerp te leren, terwijl een tweede quiz na de les zorgt voor verdere retentie. Dit curriculum is ontworpen om flexibel en leuk te zijn en kan in zijn geheel of gedeeltelijk worden gevolgd. De projecten beginnen klein en worden steeds complexer tegen het einde van de 12-weekse cyclus. Dit curriculum bevat ook een naschrift over toepassingen van ML in de echte wereld, dat kan worden gebruikt als extra krediet of als basis voor discussie. + +> Vind onze [Gedragscode](CODE_OF_CONDUCT.md), [Bijdragen](CONTRIBUTING.md), en [Vertaling](TRANSLATIONS.md) richtlijnen. We verwelkomen je constructieve feedback! + +## Elke les bevat + +- optionele sketchnote +- optionele aanvullende video +- video walkthrough (alleen sommige lessen) +- [pre-les opwarmquiz](https://ff-quizzes.netlify.app/en/ml/) +- geschreven les +- voor projectgerichte lessen, stapsgewijze handleidingen over hoe het project te bouwen +- kenniscontroles +- een uitdaging +- aanvullende literatuur +- opdracht +- [post-lesquiz](https://ff-quizzes.netlify.app/en/ml/) + +> **Een opmerking over talen**: Deze lessen zijn voornamelijk geschreven in Python, maar veel zijn ook beschikbaar in R. Om een R-les te voltooien, ga naar de `/solution`-map en zoek naar R-lessen. Ze bevatten een .rmd-extensie die een **R Markdown**-bestand vertegenwoordigt, dat eenvoudig kan worden gedefinieerd als een combinatie van `code chunks` (van R of andere talen) en een `YAML-header` (die aangeeft hoe outputs zoals PDF moeten worden geformatteerd) in een `Markdown-document`. Als zodanig dient het als een voorbeeldig authoring-framework voor data science, omdat het je in staat stelt je code, de output ervan en je gedachten te combineren door ze in Markdown op te schrijven. Bovendien kunnen R Markdown-documenten worden gerenderd naar outputformaten zoals PDF, HTML of Word. + +> **Een opmerking over quizzen**: Alle quizzen zijn opgenomen in de [Quiz App map](../../quiz-app), voor in totaal 52 quizzen van drie vragen elk. Ze zijn gekoppeld vanuit de lessen, maar de quiz-app kan lokaal worden uitgevoerd; volg de instructies in de `quiz-app`-map om lokaal te hosten of te implementeren op Azure. + +| Lesnummer | Onderwerp | Lesgroep | Leerdoelen | Gelinkte les | Auteur | +| :-------: | :----------------------------------------------------------------: | :------------------------------------------: | --------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------: | +| 01 | Introductie tot machine learning | [Introductie](1-Introduction/README.md) | Leer de basisconcepten achter machine learning | [Les](1-Introduction/1-intro-to-ML/README.md) | Muhammad | +| 02 | De geschiedenis van machine learning | [Introductie](1-Introduction/README.md) | Leer de geschiedenis achter dit vakgebied | [Les](1-Introduction/2-history-of-ML/README.md) | Jen en Amy | +| 03 | Eerlijkheid en machine learning | [Introductie](1-Introduction/README.md) | Wat zijn de belangrijke filosofische kwesties rond eerlijkheid die studenten moeten overwegen bij het bouwen en toepassen van ML-modellen? | [Les](1-Introduction/3-fairness/README.md) | Tomomi | +| 04 | Technieken voor machine learning | [Introductie](1-Introduction/README.md) | Welke technieken gebruiken ML-onderzoekers om ML-modellen te bouwen? | [Les](1-Introduction/4-techniques-of-ML/README.md) | Chris en Jen | +| 05 | Introductie tot regressie | [Regressie](2-Regression/README.md) | Begin met Python en Scikit-learn voor regressiemodellen | +
                                • [Python](2-Regression/1-Tools/README.md)
                                • [R](../../2-Regression/1-Tools/solution/R/lesson_1.html)
                                |
                                • Jen
                                • Eric Wanjau
                                | +| 06 | Noord-Amerikaanse pompoenprijzen 🎃 | [Regressie](2-Regression/README.md) | Visualiseer en maak gegevens schoon ter voorbereiding op ML |
                                • [Python](2-Regression/2-Data/README.md)
                                • [R](../../2-Regression/2-Data/solution/R/lesson_2.html)
                                |
                                • Jen
                                • Eric Wanjau
                                | +| 07 | Noord-Amerikaanse pompoenprijzen 🎃 | [Regressie](2-Regression/README.md) | Bouw lineaire en polynomiale regressiemodellen |
                                • [Python](2-Regression/3-Linear/README.md)
                                • [R](../../2-Regression/3-Linear/solution/R/lesson_3.html)
                                |
                                • Jen en Dmitry
                                • Eric Wanjau
                                | +| 08 | Noord-Amerikaanse pompoenprijzen 🎃 | [Regressie](2-Regression/README.md) | Bouw een logistisch regressiemodel |
                                • [Python](2-Regression/4-Logistic/README.md)
                                • [R](../../2-Regression/4-Logistic/solution/R/lesson_4.html)
                                |
                                • Jen
                                • Eric Wanjau
                                | +| 09 | Een webapp 🔌 | [Webapp](3-Web-App/README.md) | Bouw een webapp om je getrainde model te gebruiken | [Python](3-Web-App/1-Web-App/README.md) | Jen | +| 10 | Introductie tot classificatie | [Classificatie](4-Classification/README.md) | Maak je gegevens schoon, bereid ze voor en visualiseer ze; introductie tot classificatie |
                                • [Python](4-Classification/1-Introduction/README.md)
                                • [R](../../4-Classification/1-Introduction/solution/R/lesson_10.html) |
                                  • Jen en Cassie
                                  • Eric Wanjau
                                  | +| 11 | Heerlijke Aziatische en Indiase gerechten 🍜 | [Classificatie](4-Classification/README.md) | Introductie tot classifiers |
                                  • [Python](4-Classification/2-Classifiers-1/README.md)
                                  • [R](../../4-Classification/2-Classifiers-1/solution/R/lesson_11.html) |
                                    • Jen en Cassie
                                    • Eric Wanjau
                                    | +| 12 | Heerlijke Aziatische en Indiase gerechten 🍜 | [Classificatie](4-Classification/README.md) | Meer classifiers |
                                    • [Python](4-Classification/3-Classifiers-2/README.md)
                                    • [R](../../4-Classification/3-Classifiers-2/solution/R/lesson_12.html) |
                                      • Jen en Cassie
                                      • Eric Wanjau
                                      | +| 13 | Heerlijke Aziatische en Indiase gerechten 🍜 | [Classificatie](4-Classification/README.md) | Bouw een aanbevelingswebapp met je model | [Python](4-Classification/4-Applied/README.md) | Jen | +| 14 | Introductie tot clustering | [Clustering](5-Clustering/README.md) | Maak je gegevens schoon, bereid ze voor en visualiseer ze; introductie tot clustering |
                                      • [Python](5-Clustering/1-Visualize/README.md)
                                      • [R](../../5-Clustering/1-Visualize/solution/R/lesson_14.html) |
                                        • Jen
                                        • Eric Wanjau
                                        | +| 15 | Verkenning van Nigeriaanse muzieksmaken 🎧 | [Clustering](5-Clustering/README.md) | Verken de K-Means clusteringmethode |
                                        • [Python](5-Clustering/2-K-Means/README.md)
                                        • [R](../../5-Clustering/2-K-Means/solution/R/lesson_15.html) |
                                          • Jen
                                          • Eric Wanjau
                                          | +| 16 | Introductie tot natuurlijke taalverwerking ☕️ | [Natuurlijke taalverwerking](6-NLP/README.md) | Leer de basis van NLP door een eenvoudige bot te bouwen | [Python](6-NLP/1-Introduction-to-NLP/README.md) | Stephen | +| 17 | Veelvoorkomende NLP-taken ☕️ | [Natuurlijke taalverwerking](6-NLP/README.md) | Verdiep je NLP-kennis door veelvoorkomende taken te begrijpen die nodig zijn bij het omgaan met taalstructuren | [Python](6-NLP/2-Tasks/README.md) | Stephen | +| 18 | Vertaling en sentimentanalyse ♥️ | [Natuurlijke taalverwerking](6-NLP/README.md) | Vertaling en sentimentanalyse met Jane Austen | [Python](6-NLP/3-Translation-Sentiment/README.md) | Stephen | +| 19 | Romantische hotels in Europa ♥️ | [Natuurlijke taalverwerking](6-NLP/README.md) | Sentimentanalyse met hotelbeoordelingen 1 | [Python](6-NLP/4-Hotel-Reviews-1/README.md) | Stephen | +| 20 | Romantische hotels in Europa ♥️ | [Natuurlijke taalverwerking](6-NLP/README.md) | Sentimentanalyse met hotelbeoordelingen 2 | [Python](6-NLP/5-Hotel-Reviews-2/README.md) | Stephen | +| 21 | Introductie tot tijdreeksvoorspelling | [Tijdreeks](7-TimeSeries/README.md) | Introductie tot tijdreeksvoorspelling | [Python](7-TimeSeries/1-Introduction/README.md) | Francesca | +| 22 | ⚡️ Wereldwijde energieverbruik ⚡️ - tijdreeksvoorspelling met ARIMA | [Tijdreeks](7-TimeSeries/README.md) | Tijdreeksvoorspelling met ARIMA | [Python](7-TimeSeries/2-ARIMA/README.md) | Francesca | +| 23 | ⚡️ Wereldwijde energieverbruik ⚡️ - tijdreeksvoorspelling met SVR | [Tijdreeks](7-TimeSeries/README.md) | Tijdreeksvoorspelling met Support Vector Regressor | [Python](7-TimeSeries/3-SVR/README.md) | Anirban | +| 24 | Introductie tot reinforcement learning | [Reinforcement learning](8-Reinforcement/README.md) | Introductie tot reinforcement learning met Q-Learning | [Python](8-Reinforcement/1-QLearning/README.md) | Dmitry | +| 25 | Help Peter de wolf te ontwijken! 🐺 | [Reinforcement learning](8-Reinforcement/README.md) | Reinforcement learning Gym | [Python](8-Reinforcement/2-Gym/README.md) | Dmitry | +| Postscript | Real-World ML-scenario's en toepassingen | [ML in de praktijk](9-Real-World/README.md) | Interessante en onthullende toepassingen van klassieke ML | [Les](9-Real-World/1-Applications/README.md) | Team | +| Postscript | Modeldebugging in ML met RAI-dashboard | [ML in de praktijk](9-Real-World/README.md) | Modeldebugging in Machine Learning met Responsible AI-dashboardcomponenten | [Les](9-Real-World/2-Debugging-ML-Models/README.md) | Ruth Yakubu | + +> [vind alle aanvullende bronnen voor deze cursus in onze Microsoft Learn-collectie](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) + +## Offline toegang + +Je kunt deze documentatie offline gebruiken met [Docsify](https://docsify.js.org/#/). Fork deze repo, [installeer Docsify](https://docsify.js.org/#/quickstart) op je lokale machine, en typ vervolgens in de hoofdmap van deze repo `docsify serve`. De website wordt geserveerd op poort 3000 op je localhost: `localhost:3000`. + +## PDF's + +Vind een pdf van het curriculum met links [hier](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf). + + +## 🎒 Andere cursussen + +Ons team produceert andere cursussen! Bekijk: + +- [Generatieve AI voor beginners](https://aka.ms/genai-beginners) +- [Generatieve AI voor beginners .NET](https://github.com/microsoft/Generative-AI-for-beginners-dotnet) +- [Generatieve AI met JavaScript](https://github.com/microsoft/generative-ai-with-javascript) +- [Generatieve AI met Java](https://github.com/microsoft/Generative-AI-for-beginners-java) +- [AI voor beginners](https://aka.ms/ai-beginners) +- [Data Science voor beginners](https://aka.ms/datascience-beginners) +- [ML voor beginners](https://aka.ms/ml-beginners) +- [Cybersecurity voor beginners](https://github.com/microsoft/Security-101) +- [Webontwikkeling voor beginners](https://aka.ms/webdev-beginners) +- [IoT voor beginners](https://aka.ms/iot-beginners) +- [XR-ontwikkeling voor beginners](https://github.com/microsoft/xr-development-for-beginners) +- [Mastering GitHub Copilot voor pair programming](https://github.com/microsoft/Mastering-GitHub-Copilot-for-Paired-Programming) +- [Mastering GitHub Copilot voor C#/.NET-ontwikkelaars](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers) +- [Kies je eigen Copilot-avontuur](https://github.com/microsoft/CopilotAdventures) + +--- + +**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 eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/SECURITY.md b/translations/nl/SECURITY.md new file mode 100644 index 00000000..e15cd806 --- /dev/null +++ b/translations/nl/SECURITY.md @@ -0,0 +1,51 @@ + +## Beveiliging + +Microsoft neemt de beveiliging van onze softwareproducten en -diensten serieus, waaronder alle broncode-repositories die worden beheerd via onze GitHub-organisaties, waaronder [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin) en [onze GitHub-organisaties](https://opensource.microsoft.com/). + +Als u denkt dat u een beveiligingskwetsbaarheid hebt gevonden in een repository die eigendom is van Microsoft en die voldoet aan [Microsoft's definitie van een beveiligingskwetsbaarheid](https://docs.microsoft.com/previous-versions/tn-archive/cc751383(v=technet.10)?WT.mc_id=academic-77952-leestott), meld dit dan aan ons zoals hieronder beschreven. + +## Beveiligingsproblemen melden + +**Meld beveiligingskwetsbaarheden niet via openbare GitHub-issues.** + +Meld ze in plaats daarvan aan het Microsoft Security Response Center (MSRC) via [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). + +Als u liever zonder inloggen wilt indienen, stuur dan een e-mail naar [secure@microsoft.com](mailto:secure@microsoft.com). Indien mogelijk, versleutel uw bericht met onze PGP-sleutel; download deze van de [Microsoft Security Response Center PGP Key-pagina](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). + +U zou binnen 24 uur een reactie moeten ontvangen. Als u om de een of andere reden geen reactie ontvangt, volg dan via e-mail op om te bevestigen dat we uw oorspronkelijke bericht hebben ontvangen. Meer informatie is te vinden op [microsoft.com/msrc](https://www.microsoft.com/msrc). + +Voeg alstublieft de onderstaande gevraagde informatie toe (zoveel als u kunt verstrekken) om ons te helpen de aard en omvang van het mogelijke probleem beter te begrijpen: + + * Type probleem (bijv. buffer overflow, SQL-injectie, cross-site scripting, etc.) + * Volledige paden van bronbestand(en) die verband houden met de manifestatie van het probleem + * De locatie van de getroffen broncode (tag/branch/commit of directe URL) + * Eventuele speciale configuratie die nodig is om het probleem te reproduceren + * Stapsgewijze instructies om het probleem te reproduceren + * Proof-of-concept of exploitcode (indien mogelijk) + * Impact van het probleem, inclusief hoe een aanvaller het probleem zou kunnen misbruiken + +Deze informatie helpt ons uw melding sneller te beoordelen. + +Als u rapporteert voor een bug bounty, kunnen meer gedetailleerde rapporten bijdragen aan een hogere bounty-beloning. Bezoek onze [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty)-pagina voor meer informatie over onze actieve programma's. + +## Voorkeurscommunicatietaal + +We geven de voorkeur aan alle communicatie in het Engels. + +## Beleid + +Microsoft volgt het principe van [Gecoördineerde Kwetsbaarheidsmelding](https://www.microsoft.com/en-us/msrc/cvd). + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/SUPPORT.md b/translations/nl/SUPPORT.md new file mode 100644 index 00000000..37db328c --- /dev/null +++ b/translations/nl/SUPPORT.md @@ -0,0 +1,26 @@ + +# Ondersteuning +## Hoe problemen te melden en hulp te krijgen + +Dit project gebruikt GitHub Issues om bugs en functieverzoeken bij te houden. Zoek eerst tussen de bestaande +issues voordat je een nieuw probleem meldt om duplicaten te voorkomen. Voor nieuwe issues, meld je bug of +functieverzoek als een nieuw Issue. + +Voor hulp en vragen over het gebruik van dit project, meld een issue. + +## Microsoft Ondersteuningsbeleid + +Ondersteuning voor deze repository is beperkt tot de hierboven genoemde bronnen. + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/docs/_sidebar.md b/translations/nl/docs/_sidebar.md new file mode 100644 index 00000000..b9987dde --- /dev/null +++ b/translations/nl/docs/_sidebar.md @@ -0,0 +1,57 @@ + +- Introductie + - [Introductie tot Machine Learning](../1-Introduction/1-intro-to-ML/README.md) + - [Geschiedenis van Machine Learning](../1-Introduction/2-history-of-ML/README.md) + - [ML en Eerlijkheid](../1-Introduction/3-fairness/README.md) + - [Technieken van ML](../1-Introduction/4-techniques-of-ML/README.md) + +- Regressie + - [Tools van het Vakgebied](../2-Regression/1-Tools/README.md) + - [Data](../2-Regression/2-Data/README.md) + - [Lineaire Regressie](../2-Regression/3-Linear/README.md) + - [Logistische Regressie](../2-Regression/4-Logistic/README.md) + +- Een Webapp bouwen + - [Webapp](../3-Web-App/1-Web-App/README.md) + +- Classificatie + - [Introductie tot Classificatie](../4-Classification/1-Introduction/README.md) + - [Classificatoren 1](../4-Classification/2-Classifiers-1/README.md) + - [Classificatoren 2](../4-Classification/3-Classifiers-2/README.md) + - [Toegepaste ML](../4-Classification/4-Applied/README.md) + +- Clustering + - [Visualiseer je Data](../5-Clustering/1-Visualize/README.md) + - [K-Means](../5-Clustering/2-K-Means/README.md) + +- NLP + - [Introductie tot NLP](../6-NLP/1-Introduction-to-NLP/README.md) + - [NLP Taken](../6-NLP/2-Tasks/README.md) + - [Vertaling en Sentiment](../6-NLP/3-Translation-Sentiment/README.md) + - [Hotelbeoordelingen 1](../6-NLP/4-Hotel-Reviews-1/README.md) + - [Hotelbeoordelingen 2](../6-NLP/5-Hotel-Reviews-2/README.md) + +- Tijdreeksvoorspelling + - [Introductie tot Tijdreeksvoorspelling](../7-TimeSeries/1-Introduction/README.md) + - [ARIMA](../7-TimeSeries/2-ARIMA/README.md) + - [SVR](../7-TimeSeries/3-SVR/README.md) + +- Reinforcement Learning + - [Q-Learning](../8-Reinforcement/1-QLearning/README.md) + - [Gym](../8-Reinforcement/2-Gym/README.md) + +- Machine Learning in de Praktijk + - [Toepassingen](../9-Real-World/1-Applications/README.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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/for-teachers.md b/translations/nl/for-teachers.md new file mode 100644 index 00000000..de22caf5 --- /dev/null +++ b/translations/nl/for-teachers.md @@ -0,0 +1,37 @@ + +## Voor Docenten + +Wilt u deze lesstof in uw klas gebruiken? Voel u vrij! + +U kunt het zelfs direct binnen GitHub gebruiken door gebruik te maken van GitHub Classroom. + +Om dat te doen, fork deze repository. U zult een aparte repository moeten maken voor elke les, dus u moet elke map uit de hoofdrepository halen en in een aparte repository plaatsen. Op die manier kan [GitHub Classroom](https://classroom.github.com/classrooms) elke les afzonderlijk oppakken. + +Deze [volledige instructies](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/) geven u een idee hoe u uw digitale klaslokaal kunt opzetten. + +## De repository gebruiken zoals hij is + +Als u deze repository wilt gebruiken zoals hij nu is, zonder gebruik te maken van GitHub Classroom, dan kan dat ook. U moet dan met uw studenten communiceren over welke les ze samen moeten doorlopen. + +In een online format (Zoom, Teams of een ander platform) kunt u breakout rooms maken voor de quizzen en studenten begeleiden om hen klaar te maken om te leren. Vervolgens kunt u studenten uitnodigen om de quizzen te maken en hun antwoorden op een bepaald moment als 'issues' in te dienen. U kunt hetzelfde doen met opdrachten, als u wilt dat studenten openlijk en samenwerkend werken. + +Als u liever een meer privéformat heeft, vraag uw studenten dan om de lesstof, les voor les, te forken naar hun eigen GitHub repositories als privérepositories en u toegang te geven. Vervolgens kunnen ze quizzen en opdrachten privé voltooien en deze via issues op uw classroom repository aan u indienen. + +Er zijn veel manieren om dit te laten werken in een online klaslokaal. Laat ons weten wat voor u het beste werkt! + +## Geef ons uw mening! + +We willen deze lesstof zo goed mogelijk laten aansluiten bij u en uw studenten. Geef ons alstublieft [feedback](https://forms.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR2humCsRZhxNuI79cm6n0hRUQzRVVU9VVlU5UlFLWTRLWlkyQUxORTg5WS4u). + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/quiz-app/README.md b/translations/nl/quiz-app/README.md new file mode 100644 index 00000000..8334ed3d --- /dev/null +++ b/translations/nl/quiz-app/README.md @@ -0,0 +1,127 @@ + +# Quizzen + +Deze quizzen zijn de pre- en post-lezing quizzen voor het ML-curriculum op https://aka.ms/ml-beginners + +## Projectinstelling + +``` +npm install +``` + +### Compileert en herlaadt automatisch voor ontwikkeling + +``` +npm run serve +``` + +### Compileert en minimaliseert voor productie + +``` +npm run build +``` + +### Controleert en corrigeert bestanden + +``` +npm run lint +``` + +### Configuratie aanpassen + +Zie [Configuratiereferentie](https://cli.vuejs.org/config/). + +Credits: Dank aan de originele versie van deze quiz-app: https://github.com/arpan45/simple-quiz-vue + +## Deployen naar Azure + +Hier is een stapsgewijze handleiding om je op weg te helpen: + +1. Fork een GitHub-repository +Zorg ervoor dat de code van je statische webapp in je GitHub-repository staat. Fork deze repository. + +2. Maak een Azure Static Web App +- Maak een [Azure-account](http://azure.microsoft.com) +- Ga naar het [Azure-portaal](https://portal.azure.com) +- Klik op "Create a resource" en zoek naar "Static Web App". +- Klik op "Create". + +3. Configureer de Static Web App +- Basics: + - Abonnement: Selecteer je Azure-abonnement. + - Resourcegroep: Maak een nieuwe resourcegroep of gebruik een bestaande. + - Naam: Geef een naam op voor je statische webapp. + - Regio: Kies de regio die het dichtst bij je gebruikers ligt. + +- #### Deployment Details: + - Bron: Selecteer "GitHub". + - GitHub-account: Autoriseer Azure om toegang te krijgen tot je GitHub-account. + - Organisatie: Selecteer je GitHub-organisatie. + - Repository: Kies de repository die je statische webapp bevat. + - Branch: Selecteer de branch waarvan je wilt deployen. + +- #### Build Details: + - Build Presets: Kies het framework waarmee je app is gebouwd (bijv. React, Angular, Vue, etc.). + - App-locatie: Geef de map op die je app-code bevat (bijv. / als het in de root staat). + - API-locatie: Als je een API hebt, geef de locatie op (optioneel). + - Output-locatie: Geef de map op waar de build-output wordt gegenereerd (bijv. build of dist). + +4. Review en aanmaken +Controleer je instellingen en klik op "Create". Azure zal de benodigde resources instellen en een GitHub Actions-workflow in je repository aanmaken. + +5. GitHub Actions-workflow +Azure zal automatisch een GitHub Actions-workflowbestand aanmaken in je repository (.github/workflows/azure-static-web-apps-.yml). Deze workflow zal het build- en deployproces afhandelen. + +6. Monitor de deployment +Ga naar het tabblad "Actions" in je GitHub-repository. +Je zou een workflow moeten zien draaien. Deze workflow zal je statische webapp bouwen en deployen naar Azure. +Zodra de workflow is voltooid, is je app live op de verstrekte Azure-URL. + +### Voorbeeld Workflow-bestand + +Hier is een voorbeeld van hoe het GitHub Actions-workflowbestand eruit zou kunnen zien: +name: Azure Static Web Apps CI/CD +``` +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened, closed] + branches: + - main + +jobs: + build_and_deploy_job: + runs-on: ubuntu-latest + name: Build and Deploy Job + steps: + - uses: actions/checkout@v2 + - name: Build And Deploy + id: builddeploy + uses: Azure/static-web-apps-deploy@v1 + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }} + repo_token: ${{ secrets.GITHUB_TOKEN }} + action: "upload" + app_location: "/quiz-app" # App source code path + api_location: ""API source code path optional + output_location: "dist" #Built app content directory - optional +``` + +### Aanvullende bronnen +- [Azure Static Web Apps Documentatie](https://learn.microsoft.com/azure/static-web-apps/getting-started) +- [GitHub Actions Documentatie](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) + +--- + +**Disclaimer**: +Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we ons best doen voor nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn 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 diff --git a/translations/nl/sketchnotes/LICENSE.md b/translations/nl/sketchnotes/LICENSE.md new file mode 100644 index 00000000..4498ad20 --- /dev/null +++ b/translations/nl/sketchnotes/LICENSE.md @@ -0,0 +1,384 @@ + +Attribution-ShareAlike 4.0 Internationaal + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is geen advocatenkantoor en biedt geen juridische diensten of juridisch advies. Het verspreiden van Creative Commons publieke licenties creëert geen advocaat-cliëntrelatie of andere relatie. Creative Commons stelt zijn licenties en gerelateerde informatie beschikbaar op een "as-is"-basis. Creative Commons geeft geen garanties met betrekking tot zijn licenties, enig materiaal dat onder de voorwaarden ervan is gelicentieerd, of enige gerelateerde informatie. Creative Commons wijst alle aansprakelijkheid voor schade als gevolg van het gebruik ervan af, voor zover mogelijk. + +Gebruik van Creative Commons Publieke Licenties + +Creative Commons publieke licenties bieden een standaard set van voorwaarden die makers en andere rechthebbenden kunnen gebruiken om originele werken en ander materiaal dat onderworpen is aan auteursrecht en bepaalde andere rechten, zoals hieronder gespecificeerd, te delen. De volgende overwegingen zijn uitsluitend bedoeld ter informatie, zijn niet uitputtend en maken geen deel uit van onze licenties. + + Overwegingen voor licentiegevers: Onze publieke licenties zijn + bedoeld voor gebruik door degenen die bevoegd zijn om het publiek + toestemming te geven om materiaal te gebruiken op manieren die + anders beperkt zouden zijn door auteursrecht en bepaalde andere + rechten. Onze licenties zijn onherroepelijk. Licentiegevers + dienen de voorwaarden van de licentie die ze kiezen te lezen en + te begrijpen voordat ze deze toepassen. Licentiegevers dienen + ook alle benodigde rechten te verkrijgen voordat ze onze + licenties toepassen, zodat het publiek het materiaal kan hergebruiken + zoals verwacht. Licentiegevers dienen duidelijk aan te geven welk + materiaal niet onder de licentie valt. Dit omvat ander CC- + gelicenseerd materiaal, of materiaal dat wordt gebruikt onder een + uitzondering of beperking van het auteursrecht. Meer overwegingen + voor licentiegevers: + wiki.creativecommons.org/Considerations_for_licensors + + Overwegingen voor het publiek: Door gebruik te maken van een van + onze publieke licenties, verleent een licentiegever het publiek + toestemming om het gelicentieerde materiaal te gebruiken onder + gespecificeerde voorwaarden. Als de toestemming van de + licentiegever om welke reden dan ook niet nodig is—bijvoorbeeld + vanwege een toepasselijke uitzondering of beperking van het + auteursrecht—dan valt dat gebruik niet onder de licentie. Onze + licenties verlenen alleen toestemming onder auteursrecht en + bepaalde andere rechten die een licentiegever bevoegd is te + verlenen. Het gebruik van het gelicentieerde materiaal kan nog + steeds beperkt zijn om andere redenen, bijvoorbeeld omdat anderen + auteursrecht of andere rechten hebben op het materiaal. Een + licentiegever kan speciale verzoeken doen, zoals vragen dat alle + wijzigingen worden gemarkeerd of beschreven. Hoewel dit niet + vereist is door onze licenties, wordt u aangemoedigd om dergelijke + verzoeken te respecteren waar redelijk. Meer overwegingen voor + het publiek: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-ShareAlike 4.0 Internationaal Publieke +Licentie + +Door gebruik te maken van de Gelicentieerde Rechten (hieronder +gedefinieerd), accepteert en stemt u in met de voorwaarden van deze +Creative Commons Attribution-ShareAlike 4.0 Internationaal Publieke +Licentie ("Publieke Licentie"). Voor zover deze Publieke Licentie kan +worden geïnterpreteerd als een contract, worden de Gelicentieerde +Rechten aan u verleend in overweging van uw acceptatie van deze +voorwaarden, en verleent de Licentiegever u dergelijke rechten in +overweging van de voordelen die de Licentiegever ontvangt door het +beschikbaar stellen van het Gelicentieerde Materiaal onder deze +voorwaarden. + + +Sectie 1 -- Definities. + + a. Aangepast Materiaal betekent materiaal dat onderworpen is aan + Auteursrecht en Vergelijkbare Rechten en dat is afgeleid van of + gebaseerd op het Gelicentieerde Materiaal en waarin het + Gelicentieerde Materiaal is vertaald, gewijzigd, gerangschikt, + getransformeerd of anderszins aangepast op een manier die + toestemming vereist onder het Auteursrecht en Vergelijkbare + Rechten die worden gehouden door de Licentiegever. Voor de + doeleinden van deze Publieke Licentie, waar het Gelicentieerde + Materiaal een muzikaal werk, uitvoering of geluidsopname is, wordt + Aangepast Materiaal altijd geproduceerd wanneer het Gelicentieerde + Materiaal wordt gesynchroniseerd in een getimede relatie met een + bewegend beeld. + + b. Licentie van de Adapter betekent de licentie die u toepast op uw + Auteursrecht en Vergelijkbare Rechten in uw bijdragen aan + Aangepast Materiaal in overeenstemming met de voorwaarden van deze + Publieke Licentie. + + c. BY-SA Compatibele Licentie betekent een licentie die wordt vermeld + op creativecommons.org/compatiblelicenses, goedgekeurd door + Creative Commons als wezenlijk gelijkwaardig aan deze Publieke + Licentie. + + d. Auteursrecht en Vergelijkbare Rechten betekent auteursrecht en/of + vergelijkbare rechten die nauw verwant zijn aan auteursrecht, + inclusief, maar niet beperkt tot, uitvoering, uitzending, + geluidsopname en Sui Generis Databankrechten, ongeacht hoe de + rechten worden aangeduid of gecategoriseerd. Voor de doeleinden + van deze Publieke Licentie zijn de rechten gespecificeerd in + Sectie 2(b)(1)-(2) geen Auteursrecht en Vergelijkbare Rechten. + + e. Effectieve Technologische Maatregelen betekent die maatregelen + die, bij afwezigheid van de juiste autoriteit, niet mogen worden + omzeild onder wetten die verplichtingen vervullen onder Artikel 11 + van het WIPO Copyright Verdrag aangenomen op 20 december 1996, + en/of soortgelijke internationale overeenkomsten. + + f. Uitzonderingen en Beperkingen betekent fair use, fair dealing, + en/of enige andere uitzondering of beperking op Auteursrecht en + Vergelijkbare Rechten die van toepassing is op uw gebruik van het + Gelicentieerde Materiaal. + + g. Licentie-elementen betekent de licentie-attributen die worden + vermeld in de naam van een Creative Commons Publieke Licentie. De + Licentie-elementen van deze Publieke Licentie zijn Naamsvermelding + en GelijkDelen. + + h. Gelicentieerd Materiaal betekent het artistieke of literaire werk, + de databank of ander materiaal waarop de Licentiegever deze + Publieke Licentie heeft toegepast. + + i. Gelicentieerde Rechten betekent de rechten die aan u worden + verleend onder de voorwaarden van deze Publieke Licentie, die + beperkt zijn tot alle Auteursrecht en Vergelijkbare Rechten die + van toepassing zijn op uw gebruik van het Gelicentieerde Materiaal + en die de Licentiegever bevoegd is te licentiëren. + + j. Licentiegever betekent de persoon of entiteit die rechten verleent + onder deze Publieke Licentie. + + k. Delen betekent materiaal beschikbaar stellen aan het publiek door + middel van enige methode of proces dat toestemming vereist onder + de Gelicentieerde Rechten, zoals reproductie, openbare vertoning, + openbare uitvoering, distributie, verspreiding, communicatie of + import, en materiaal beschikbaar stellen aan het publiek, + inclusief op manieren waarop leden van het publiek toegang kunnen + krijgen tot het materiaal vanaf een plaats en op een tijdstip dat + individueel door hen is gekozen. + + l. Sui Generis Databankrechten betekent rechten anders dan + auteursrecht die voortvloeien uit Richtlijn 96/9/EG van het + Europees Parlement en de Raad van 11 maart 1996 betreffende de + juridische bescherming van databanken, zoals gewijzigd en/of + opgevolgd, evenals andere wezenlijk gelijkwaardige rechten + wereldwijd. + + m. U betekent de persoon of entiteit die de Gelicentieerde Rechten + uitoefent onder deze Publieke Licentie. Uw heeft een + overeenkomstige betekenis. + + +Sectie 2 -- Reikwijdte. + + a. Licentieverlening. + + 1. Onder voorbehoud van de voorwaarden van deze Publieke + Licentie, verleent de Licentiegever u hierbij een wereldwijde, + royaltyvrije, niet-sublicentieerbare, niet-exclusieve, + onherroepelijke licentie om de Gelicentieerde Rechten in het + Gelicentieerde Materiaal uit te oefenen om: + + a. het Gelicentieerde Materiaal, geheel of gedeeltelijk, te + reproduceren en te Delen; en + + b. Aangepast Materiaal te produceren, reproduceren en te + Delen. + + 2. Uitzonderingen en Beperkingen. Voor alle duidelijkheid, waar + Uitzonderingen en Beperkingen van toepassing zijn op uw + gebruik, is deze Publieke Licentie niet van toepassing, en + hoeft u niet te voldoen aan de voorwaarden ervan. + + 3. Termijn. De termijn van deze Publieke Licentie is gespecificeerd + in Sectie 6(a). + + 4. Media en formaten; technische wijzigingen toegestaan. De + Licentiegever machtigt u om de Gelicentieerde Rechten uit te + oefenen in alle media en formaten, of deze nu bekend zijn of + hierna worden gecreëerd, en om technische wijzigingen te + maken die nodig zijn om dit te doen. De Licentiegever doet + afstand van en/of stemt ermee in geen rechten of bevoegdheden + te claimen om u te verbieden technische wijzigingen te maken + die nodig zijn om de Gelicentieerde Rechten uit te oefenen, + inclusief technische wijzigingen die nodig zijn om Effectieve + Technologische Maatregelen te omzeilen. Voor de doeleinden + van deze Publieke Licentie produceert het simpelweg maken van + wijzigingen die zijn toegestaan door deze Sectie 2(a)(4) + nooit Aangepast Materiaal. + + 5. Ontvangers stroomafwaarts. + + a. Aanbod van de Licentiegever -- Gelicentieerd Materiaal. + Elke ontvanger van het Gelicentieerde Materiaal ontvangt + automatisch een aanbod van de Licentiegever om de + Gelicentieerde Rechten uit te oefenen onder de + voorwaarden van deze Publieke Licentie. + + b. Extra aanbod van de Licentiegever -- Aangepast Materiaal. + Elke ontvanger van Aangepast Materiaal van u ontvangt + automatisch een aanbod van de Licentiegever om de + Gelicentieerde Rechten in het Aangepaste Materiaal uit + te oefenen onder de voorwaarden van de Licentie van de + Adapter die u toepast. + + c. Geen beperkingen stroomafwaarts. U mag geen aanvullende + of afwijkende voorwaarden aanbieden of opleggen aan, of + Effectieve Technologische Maatregelen toepassen op, het + Gelicentieerde Materiaal als dit de uitoefening van de + Gelicentieerde Rechten door een ontvanger van het + Gelicentieerde Materiaal beperkt. + + 6. Geen goedkeuring. Niets in deze Publieke Licentie vormt of + mag worden geïnterpreteerd als toestemming om te beweren of + te impliceren dat u, of dat uw gebruik van het Gelicentieerde + Materiaal, verbonden is met, gesponsord, goedgekeurd of + officieel erkend is door de Licentiegever of anderen die + zijn aangewezen om naamsvermelding te ontvangen zoals + voorzien in Sectie 3(a)(1)(A)(i). + + b. Andere rechten. + + 1. Morele rechten, zoals het recht op integriteit, worden niet + gelicentieerd onder deze Publieke Licentie, noch zijn + publiciteits-, privacy- en/of andere vergelijkbare + persoonlijkheidsrechten; echter, voor zover mogelijk, doet + de Licentiegever afstand van en/of stemt ermee in geen + dergelijke rechten te claimen die worden gehouden door de + Licentiegever voor zover nodig om u in staat te stellen de + Gelicentieerde Rechten uit te oefenen, maar niet anderszins. + + 2. Octrooi- en handelsmerkrechten worden niet gelicentieerd + onder deze Publieke Licentie. + + 3. Voor zover mogelijk doet de Licentiegever afstand van enig + recht om royalty's van u te innen voor de uitoefening van de + Gelicentieerde Rechten, hetzij rechtstreeks of via een + incassobureau onder een vrijwillig of afwijsbaar wettelijk of + verplicht licentiesysteem. In alle andere gevallen behoudt de + Licentiegever uitdrukkelijk het recht om dergelijke royalty's + te innen. + + +Sectie 3 -- Licentievoorwaarden. + +Uw uitoefening van de Gelicentieerde Rechten is uitdrukkelijk onderworpen +aan de volgende voorwaarden. + + a. Naamsvermelding. + + 1. Als u het Gelicentieerde Materiaal deelt (inclusief in + gewijzigde vorm), moet u: + + a. het volgende behouden als het door de Licentiegever + wordt geleverd met het Gelicentieerde Materiaal: + + i. identificatie van de maker(s) van het Gelicentieerde + Materiaal en alle anderen die zijn aangewezen om + naamsvermelding te ontvangen, op een redelijke + manier zoals gevraagd door de Licentiegever + (inclusief onder pseudoniem indien aangewezen); + + ii. een auteursrechtverklaring; + + iii. een verklaring die verwijst naar deze Publieke + Licentie; + + iv. een verklaring die verwijst naar de disclaimer van + garanties; + + v. een URI of hyperlink naar het Gelicentieerde + Materiaal voor zover redelijk uitvoerbaar; + + b. aangeven of u het Gelicentieerde Materiaal hebt + gewijzigd en een aanduiding behouden van eerdere + wijzigingen; en + + c. aangeven dat het Gelicentieerde Materiaal is gelicentieerd + onder deze Publieke Licentie, en de tekst van, of de URI + of hyperlink naar, deze Publieke Licentie opnemen. + + 2. U kunt voldoen aan de voorwaarden in Sectie 3(a)(1) op + redelijke wijze gebaseerd op het medium, de middelen en de + context waarin u het Gelicentieerde Materiaal deelt. Bijvoorbeeld, + het kan redelijk zijn om aan de voorwaarden te voldoen door + een URI of hyperlink te verstrekken naar een bron die de + vereiste informatie bevat. + + 3. Als de Licentiegever daarom vraagt, moet u alle informatie + die vereist is door Sectie 3(a)(1)(A) verwijderen voor zover + redelijk uitvoerbaar. + + b. GelijkDelen. + + Naast de voorwaarden in Sectie 3(a), als u Aangepast Materiaal + deelt dat u produceert, zijn de volgende voorwaarden ook van + toepassing. + + 1. De Licentie van de Adapter die u toepast moet een Creative + Commons-licentie zijn met dezelfde Licentie-elementen, deze + versie of later, of een BY-SA Compatibele Licentie. + + 2. U moet de tekst van, of de URI of hyperlink naar, de Licentie + van de Adapter die u toepast opnemen. U kunt aan deze + voorwaarde voldoen op redelijke wijze gebaseerd op het + medium, de middelen en de context waarin u Aangepast Materiaal + deelt. + + 3. U mag geen aanvullende of afwijkende voorwaarden aanbieden of + opleggen aan, of Effectieve Technologische Maatregelen + toepassen op, Aangepast Materiaal die de uitoefening van de + rechten verleend onder de Licentie van de Adapter die u + toepast beperken. + + +Sectie 4 -- Sui Generis Databankrechten. + +Waar de Gelicentieerde Rechten Sui Generis Databankrechten omvatten die +van toepassing zijn op uw gebruik van het Gelicentieerde Materiaal: + + a. voor alle duidelijkheid, Sectie 2(a)(1) verleent u het recht om + alle of een substantieel deel van de inhoud van de databank te + extraheren, hergebruiken, reproduceren en te delen; + + b. als u alle of een substantieel deel van de inhoud van de databank + opneemt in een databank waarin u Sui Generis Databank... +Rechten, vervolgens de database waarin u Sui Generis Database Rights heeft (maar niet de individuele inhoud ervan) is Aangepast Materiaal, + +inclusief voor doeleinden van Sectie 3(b); en +c. U moet voldoen aan de voorwaarden in Sectie 3(a) als u alle of een substantieel deel van de inhoud van de database deelt. + +Ter verduidelijking, deze Sectie 4 vult uw verplichtingen onder deze Publieke Licentie aan en vervangt deze niet, waar de Gelicentieerde Rechten andere Auteursrechten en Vergelijkbare Rechten omvatten. + +### Sectie 5 -- Uitsluiting van garanties en beperking van aansprakelijkheid. + +a. TENZIJ ANDERSZINS APART ONDERNOMEN DOOR DE LICENTIEGEVER, VOOR ZOVER MOGELIJK, BIEDT DE LICENTIEGEVER HET GELICENTIEERDE MATERIAAL AAN ZOALS HET IS EN ZOALS BESCHIKBAAR, EN GEEFT GEEN VERKLARINGEN OF GARANTIES VAN ENIGERLEI AARD MET BETREKKING TOT HET GELICENTIEERDE MATERIAAL, OF DIT NU UITDRUKKELIJK, IMPLICIET, WETTELIJK OF ANDERSZINS IS. DIT OMVAT, ZONDER BEPERKING, GARANTIES VAN EIGENDOM, VERHANDELBAARHEID, GESCHIKTHEID VOOR EEN BEPAALD DOEL, NIET-INBREUKMAKENDHEID, AFWEZIGHEID VAN VERBORGEN OF ANDERE GEBREKEN, NAUWKEURIGHEID, OF DE AANWEZIGHEID OF AFWEZIGHEID VAN FOUTEN, OF ZE NU BEKEND OF ONTDEKBAAR ZIJN. WAAR UITSLUITINGEN VAN GARANTIES NIET VOLLEDIG OF GEDEELTELIJK TOEGESTAAN ZIJN, KAN DEZE UITSLUITING NIET OP U VAN TOEPASSING ZIJN. + +b. VOOR ZOVER MOGELIJK, ZAL DE LICENTIEGEVER IN GEEN GEVAL AANSPRAKELIJK ZIJN TEGENOVER U OP ENIGE JURIDISCHE GRONDSLAG (INCLUSIEF, ZONDER BEPERKING, NALATIGHEID) OF ANDERSZINS VOOR ENIGE DIRECTE, SPECIALE, INDIRECTE, INCIDENTELE, GEVOLGSCHADE, STRAFRECHTELIJKE, EXEMPLAIRE OF ANDERE VERLIEZEN, KOSTEN, UITGAVEN OF SCHADE DIE VOORTVLOEIT UIT DEZE PUBLIEKE LICENTIE OF HET GEBRUIK VAN HET GELICENTIEERDE MATERIAAL, ZELFS ALS DE LICENTIEGEVER OP DE HOOGTE IS GEBRACHT VAN DE MOGELIJKHEID VAN DERGELIJKE VERLIEZEN, KOSTEN, UITGAVEN OF SCHADE. WAAR EEN BEPERKING VAN AANSPRAKELIJKHEID NIET VOLLEDIG OF GEDEELTELIJK TOEGESTAAN IS, KAN DEZE BEPERKING NIET OP U VAN TOEPASSING ZIJN. + +c. De uitsluiting van garanties en beperking van aansprakelijkheid zoals hierboven vermeld, moet worden geïnterpreteerd op een manier die, voor zover mogelijk, het dichtst in de buurt komt van een absolute uitsluiting en afstand van alle aansprakelijkheid. + +### Sectie 6 -- Termijn en beëindiging. + +a. Deze Publieke Licentie is van toepassing gedurende de termijn van het Auteursrecht en Vergelijkbare Rechten die hier zijn gelicentieerd. Echter, als u niet voldoet aan deze Publieke Licentie, dan worden uw rechten onder deze Publieke Licentie automatisch beëindigd. + +b. Waar uw recht om het Gelicentieerde Materiaal te gebruiken is beëindigd onder Sectie 6(a), wordt het hersteld: + +1. automatisch vanaf de datum waarop de overtreding is hersteld, mits dit binnen 30 dagen na uw ontdekking van de overtreding gebeurt; of +2. na uitdrukkelijke herstelling door de Licentiegever. + +Ter verduidelijking, deze Sectie 6(b) heeft geen invloed op enig recht dat de Licentiegever kan hebben om rechtsmiddelen te zoeken voor uw overtredingen van deze Publieke Licentie. + +c. Ter verduidelijking, de Licentiegever kan ook het Gelicentieerde Materiaal onder afzonderlijke voorwaarden aanbieden of op elk moment stoppen met het distribueren van het Gelicentieerde Materiaal; echter, dit zal deze Publieke Licentie niet beëindigen. + +d. Secties 1, 5, 6, 7 en 8 blijven van kracht na beëindiging van deze Publieke Licentie. + +### Sectie 7 -- Andere voorwaarden. + +a. De Licentiegever is niet gebonden aan aanvullende of afwijkende voorwaarden die door u worden gecommuniceerd, tenzij uitdrukkelijk overeengekomen. + +b. Alle regelingen, overeenkomsten of afspraken met betrekking tot het Gelicentieerde Materiaal die hier niet zijn vermeld, zijn afzonderlijk en onafhankelijk van de voorwaarden van deze Publieke Licentie. + +### Sectie 8 -- Interpretatie. + +a. Ter verduidelijking, deze Publieke Licentie vermindert, beperkt, beperkt of legt geen voorwaarden op aan enig gebruik van het Gelicentieerde Materiaal dat wettelijk kan worden gemaakt zonder toestemming onder deze Publieke Licentie. + +b. Voor zover mogelijk, als een bepaling van deze Publieke Licentie niet afdwingbaar wordt geacht, wordt deze automatisch aangepast tot het minimum dat nodig is om deze afdwingbaar te maken. Als de bepaling niet kan worden aangepast, wordt deze gescheiden van deze Publieke Licentie zonder de afdwingbaarheid van de resterende voorwaarden te beïnvloeden. + +c. Geen enkele bepaling van deze Publieke Licentie wordt opgeheven en geen enkele niet-naleving wordt geaccepteerd, tenzij uitdrukkelijk overeengekomen door de Licentiegever. + +d. Niets in deze Publieke Licentie vormt of kan worden geïnterpreteerd als een beperking of afstand van enige privileges en immuniteiten die van toepassing zijn op de Licentiegever of u, inclusief die voortvloeien uit de juridische processen van enige jurisdictie of autoriteit. + +--- + +Creative Commons is geen partij bij zijn publieke licenties. Desalniettemin kan Creative Commons ervoor kiezen om een van zijn publieke licenties toe te passen op materiaal dat het publiceert en in die gevallen wordt het beschouwd als de "Licentiegever." De tekst van de Creative Commons publieke licenties is toegewijd aan het publieke domein onder de CC0 Public Domain Dedication. Behalve voor het beperkte doel om aan te geven dat materiaal wordt gedeeld onder een Creative Commons publieke licentie of zoals anderszins toegestaan door de Creative Commons-beleidsregels gepubliceerd op creativecommons.org/policies, staat Creative Commons het gebruik van het handelsmerk "Creative Commons" of enig ander handelsmerk of logo van Creative Commons niet toe zonder voorafgaande schriftelijke toestemming, inclusief, zonder beperking, in verband met ongeautoriseerde wijzigingen aan een van zijn publieke licenties of andere regelingen, overeenkomsten of afspraken met betrekking tot het gebruik van gelicentieerd materiaal. Ter verduidelijking, deze paragraaf maakt geen deel uit van de publieke licenties. + +Creative Commons kan worden gecontacteerd via creativecommons.org. + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor kritieke informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/nl/sketchnotes/README.md b/translations/nl/sketchnotes/README.md new file mode 100644 index 00000000..e47f8b92 --- /dev/null +++ b/translations/nl/sketchnotes/README.md @@ -0,0 +1,21 @@ + +Alle sketchnotes van het curriculum kunnen hier worden gedownload. + +🖨 Voor afdrukken in hoge resolutie zijn de TIFF-versies beschikbaar op [deze repo](https://github.com/girliemac/a-picture-is-worth-a-1000-words/tree/main/ml/tiff). + +🎨 Gemaakt door: [Tomomi Imura](https://github.com/girliemac) (Twitter: [@girlie_mac](https://twitter.com/girlie_mac)) + +[![CC BY-SA 4.0](https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg)](https://creativecommons.org/licenses/by-sa/4.0/) + +--- + +**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 zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/tl/1-Introduction/1-intro-to-ML/README.md b/translations/tl/1-Introduction/1-intro-to-ML/README.md index ee1f87e0..9bec14de 100644 --- a/translations/tl/1-Introduction/1-intro-to-ML/README.md +++ b/translations/tl/1-Introduction/1-intro-to-ML/README.md @@ -1,27 +1,27 @@ # Panimula sa machine learning -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) --- [![ML para sa mga baguhan - Panimula sa Machine Learning para sa mga Baguhan](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](https://youtu.be/6mSx_KJxcHI "ML para sa mga baguhan - Panimula sa Machine Learning para sa mga Baguhan") -> 🎥 I-click ang larawan sa itaas para sa isang maikling video na nagpapaliwanag ng araling ito. +> 🎥 I-click ang imahe sa itaas para sa isang maikling video na tumatalakay sa araling ito. -Maligayang pagdating sa kursong ito tungkol sa klasikong machine learning para sa mga baguhan! Kung ikaw man ay ganap na bago sa paksang ito o isang bihasang practitioner ng ML na nais mag-refresh ng kaalaman, ikinagagalak naming makasama ka! Layunin naming lumikha ng isang magiliw na panimula para sa iyong pag-aaral ng ML at bukas kami sa iyong [feedback](https://github.com/microsoft/ML-For-Beginners/discussions). +Maligayang pagdating sa kursong ito tungkol sa klasikong machine learning para sa mga baguhan! Kung ikaw ay ganap na bago sa paksang ito, o isang bihasang practitioner ng ML na nais mag-refresh ng kaalaman, masaya kaming makasama ka! Layunin naming lumikha ng isang magiliw na panimulang lugar para sa iyong pag-aaral ng ML at ikalulugod naming suriin, tumugon, at isama ang iyong [feedback](https://github.com/microsoft/ML-For-Beginners/discussions). [![Panimula sa ML](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Panimula sa ML") -> 🎥 I-click ang larawan sa itaas para sa isang video: Si John Guttag ng MIT ay nagpapakilala sa machine learning +> 🎥 I-click ang imahe sa itaas para sa isang video: Ipinakikilala ni John Guttag ng MIT ang machine learning --- ## Pagsisimula sa machine learning @@ -29,60 +29,60 @@ Maligayang pagdating sa kursong ito tungkol sa klasikong machine learning para s Bago simulan ang kurikulum na ito, kailangan mong ihanda ang iyong computer upang magpatakbo ng mga notebook nang lokal. - **I-configure ang iyong makina gamit ang mga video na ito**. Gamitin ang mga sumusunod na link upang matutunan [kung paano mag-install ng Python](https://youtu.be/CXZYvNRIAKM) sa iyong sistema at [mag-setup ng text editor](https://youtu.be/EU8eayHWoZg) para sa development. -- **Matutunan ang Python**. Inirerekomenda rin na magkaroon ng pangunahing kaalaman sa [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), isang programming language na kapaki-pakinabang para sa mga data scientist na ginagamit natin sa kursong ito. -- **Matutunan ang Node.js at JavaScript**. Gagamit din tayo ng JavaScript sa ilang bahagi ng kursong ito kapag gumagawa ng mga web app, kaya kakailanganin mong magkaroon ng [node](https://nodejs.org) at [npm](https://www.npmjs.com/) na naka-install, pati na rin ang [Visual Studio Code](https://code.visualstudio.com/) para sa parehong Python at JavaScript development. -- **Gumawa ng GitHub account**. Dahil natagpuan mo kami dito sa [GitHub](https://github.com), maaaring mayroon ka nang account, ngunit kung wala pa, gumawa ng isa at i-fork ang kurikulum na ito upang magamit mo ito. (Huwag kalimutang magbigay ng star 😊) -- **Galugarin ang Scikit-learn**. Magkaroon ng kaalaman sa [Scikit-learn](https://scikit-learn.org/stable/user_guide.html), isang set ng mga ML library na binabanggit natin sa mga araling ito. +- **Matutong Python**. Inirerekomenda rin na magkaroon ng pangunahing kaalaman sa [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), isang programming language na kapaki-pakinabang para sa mga data scientist na ginagamit natin sa kursong ito. +- **Matutong Node.js at JavaScript**. Gagamit din tayo ng JavaScript sa ilang bahagi ng kursong ito kapag gumagawa ng mga web app, kaya kailangan mong magkaroon ng [node](https://nodejs.org) at [npm](https://www.npmjs.com/) na naka-install, pati na rin ang [Visual Studio Code](https://code.visualstudio.com/) para sa parehong Python at JavaScript development. +- **Gumawa ng GitHub account**. Dahil natagpuan mo kami dito sa [GitHub](https://github.com), maaaring mayroon ka nang account, ngunit kung wala pa, gumawa ng isa at i-fork ang kurikulum na ito upang magamit sa iyong sarili. (Huwag kalimutang magbigay ng star 😊) +- **Galugarin ang Scikit-learn**. Magkaroon ng kaalaman sa [Scikit-learn](https://scikit-learn.org/stable/user_guide.html), isang set ng ML libraries na binabanggit natin sa mga araling ito. --- ## Ano ang machine learning? -Ang terminong 'machine learning' ay isa sa mga pinakasikat at madalas gamitin sa kasalukuyan. Malaki ang posibilidad na narinig mo na ang terminong ito kahit isang beses kung may kaalaman ka sa teknolohiya, anuman ang larangan mo. Gayunpaman, ang mekanismo ng machine learning ay nananatiling misteryo para sa karamihan. Para sa isang baguhan, maaaring nakakatakot ang paksa. Kaya mahalagang maunawaan kung ano talaga ang machine learning at matutunan ito nang paunti-unti sa pamamagitan ng mga praktikal na halimbawa. +Ang terminong 'machine learning' ay isa sa mga pinakasikat at madalas gamitin na termino sa kasalukuyan. Malaki ang posibilidad na narinig mo na ang terminong ito kahit isang beses kung may kaalaman ka sa teknolohiya, anuman ang larangan mo. Gayunpaman, ang mekanika ng machine learning ay misteryo para sa karamihan. Para sa isang baguhan sa machine learning, maaaring nakakatakot ang paksa. Kaya mahalagang maunawaan kung ano talaga ang machine learning, at matutunan ito nang paunti-unti, sa pamamagitan ng mga praktikal na halimbawa. --- ## Ang hype curve -![ml hype curve](../../../../translated_images/hype.07183d711a17aafe70915909a0e45aa286ede136ee9424d418026ab00fec344c.tl.png) +![ml hype curve](../../../../1-Introduction/1-intro-to-ML/images/hype.png) > Ipinapakita ng Google Trends ang kamakailang 'hype curve' ng terminong 'machine learning' --- ## Isang misteryosong uniberso -Namumuhay tayo sa isang uniberso na puno ng mga kamangha-manghang misteryo. Ang mga dakilang siyentipiko tulad nina Stephen Hawking, Albert Einstein, at marami pang iba ay inialay ang kanilang buhay sa paghahanap ng makabuluhang impormasyon upang maipaliwanag ang mga misteryo ng mundo sa paligid natin. Ito ang kalikasan ng tao sa pag-aaral: ang isang bata ay natututo ng mga bagong bagay at natutuklasan ang istruktura ng kanilang mundo habang sila ay lumalaki. +Namumuhay tayo sa isang uniberso na puno ng mga kamangha-manghang misteryo. Ang mga dakilang siyentipiko tulad nina Stephen Hawking, Albert Einstein, at marami pang iba ay naglaan ng kanilang buhay sa paghahanap ng makabuluhang impormasyon upang matuklasan ang mga misteryo ng mundo sa paligid natin. Ito ang kalagayan ng tao sa pag-aaral: ang isang bata ay natututo ng mga bagong bagay at natutuklasan ang istruktura ng kanilang mundo taon-taon habang sila ay lumalaki. --- ## Ang utak ng bata -Ang utak ng isang bata at ang kanilang mga pandama ay nakakaunawa ng mga katotohanan sa kanilang paligid at unti-unting natututo ng mga nakatagong pattern ng buhay na tumutulong sa kanila na bumuo ng mga lohikal na tuntunin upang makilala ang mga natutunang pattern. Ang proseso ng pagkatuto ng utak ng tao ang dahilan kung bakit tayo ang pinaka-sopistikadong nilalang sa mundo. Ang patuloy na pagkatuto sa pamamagitan ng pagtuklas ng mga nakatagong pattern at pagkatapos ay paglikha ng mga inobasyon mula rito ay nagbibigay-daan sa atin na patuloy na umunlad. Ang kakayahang ito ay may kaugnayan sa konsepto ng [brain plasticity](https://www.simplypsychology.org/brain-plasticity.html). Sa pangkalahatan, maaari nating makita ang ilang pagkakatulad sa pagitan ng proseso ng pagkatuto ng utak ng tao at ng mga konsepto ng machine learning. +Ang utak at pandama ng isang bata ay nakikita ang mga katotohanan sa kanilang paligid at unti-unting natututo ng mga nakatagong pattern ng buhay na tumutulong sa bata na bumuo ng mga lohikal na tuntunin upang makilala ang mga natutunang pattern. Ang proseso ng pag-aaral ng utak ng tao ang dahilan kung bakit ang tao ang pinaka-sopistikadong nilalang sa mundo. Ang patuloy na pag-aaral sa pamamagitan ng pagtuklas ng mga nakatagong pattern at pagkatapos ay paglikha ng mga inobasyon mula sa mga pattern na ito ay nagbibigay-daan sa atin na patuloy na pagbutihin ang ating sarili sa buong buhay natin. Ang kakayahan sa pag-aaral at pag-evolve na ito ay may kaugnayan sa konsepto na tinatawag na [brain plasticity](https://www.simplypsychology.org/brain-plasticity.html). Sa pangkalahatan, maaari nating iguhit ang ilang motivational na pagkakatulad sa pagitan ng proseso ng pag-aaral ng utak ng tao at mga konsepto ng machine learning. --- ## Ang utak ng tao -Ang [utak ng tao](https://www.livescience.com/29365-human-brain.html) ay nakakaunawa ng mga bagay mula sa totoong mundo, pinoproseso ang impormasyon, gumagawa ng mga makatuwirang desisyon, at gumagawa ng mga aksyon batay sa mga sitwasyon. Ito ang tinatawag nating matalinong pag-uugali. Kapag pinrograma natin ang isang makina upang gayahin ang prosesong ito, tinatawag itong artificial intelligence (AI). +Ang [utak ng tao](https://www.livescience.com/29365-human-brain.html) ay nakikita ang mga bagay mula sa totoong mundo, pinoproseso ang nakitang impormasyon, gumagawa ng makatuwirang desisyon, at gumaganap ng mga tiyak na aksyon batay sa mga sitwasyon. Ito ang tinatawag nating matalinong pag-uugali. Kapag pinrograma natin ang isang imitasyon ng matalinong proseso ng pag-uugali sa isang makina, ito ay tinatawag na artificial intelligence (AI). --- ## Ilang terminolohiya -Bagama't maaaring nakakalito ang mga termino, ang machine learning (ML) ay isang mahalagang subset ng artificial intelligence. **Ang ML ay tumutukoy sa paggamit ng mga espesyal na algorithm upang matuklasan ang makabuluhang impormasyon at mga nakatagong pattern mula sa datos upang suportahan ang proseso ng paggawa ng desisyon**. +Bagama't maaaring malito ang mga termino, ang machine learning (ML) ay isang mahalagang subset ng artificial intelligence. **Ang ML ay nakatuon sa paggamit ng mga espesyal na algorithm upang matuklasan ang makabuluhang impormasyon at hanapin ang mga nakatagong pattern mula sa nakitang data upang suportahan ang proseso ng makatuwirang paggawa ng desisyon**. --- ## AI, ML, Deep Learning -![AI, ML, deep learning, data science](../../../../translated_images/ai-ml-ds.537ea441b124ebf69c144a52c0eb13a7af63c4355c2f92f440979380a2fb08b8.tl.png) +![AI, ML, deep learning, data science](../../../../1-Introduction/1-intro-to-ML/images/ai-ml-ds.png) -> Isang diagram na nagpapakita ng relasyon ng AI, ML, deep learning, at data science. Infographic ni [Jen Looper](https://twitter.com/jenlooper) na inspirasyon mula sa [graphic na ito](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) +> Isang diagram na nagpapakita ng mga relasyon sa pagitan ng AI, ML, deep learning, at data science. Infographic ni [Jen Looper](https://twitter.com/jenlooper) na inspirasyon mula sa [graphic na ito](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) --- ## Mga konseptong tatalakayin -Sa kurikulum na ito, tatalakayin natin ang mga pangunahing konsepto ng machine learning na dapat malaman ng isang baguhan. Tatalakayin natin ang tinatawag na 'klasikong machine learning' gamit ang Scikit-learn, isang mahusay na library na ginagamit ng maraming mag-aaral upang matutunan ang mga batayan. Upang maunawaan ang mas malawak na konsepto ng artificial intelligence o deep learning, mahalaga ang matibay na pundasyon sa machine learning, kaya nais naming ibahagi ito dito. +Sa kurikulum na ito, tatalakayin natin ang mga pangunahing konsepto ng machine learning na dapat malaman ng isang baguhan. Tatalakayin natin ang tinatawag na 'klasikong machine learning' gamit ang Scikit-learn, isang mahusay na library na ginagamit ng maraming estudyante upang matutunan ang mga pangunahing kaalaman. Upang maunawaan ang mas malawak na konsepto ng artificial intelligence o deep learning, mahalaga ang matibay na pundasyon sa machine learning, kaya nais naming ibigay ito dito. --- -## Sa kursong ito matututuhan mo: +## Sa kursong ito matututunan mo: - mga pangunahing konsepto ng machine learning -- kasaysayan ng ML +- ang kasaysayan ng ML - ML at pagiging patas - mga teknik sa regression ML - mga teknik sa classification ML @@ -90,7 +90,7 @@ Sa kurikulum na ito, tatalakayin natin ang mga pangunahing konsepto ng machine l - mga teknik sa natural language processing ML - mga teknik sa time series forecasting ML - reinforcement learning -- mga totoong aplikasyon ng ML +- mga aplikasyon ng ML sa totoong mundo --- ## Ano ang hindi natin tatalakayin @@ -99,54 +99,54 @@ Sa kurikulum na ito, tatalakayin natin ang mga pangunahing konsepto ng machine l - neural networks - AI -Upang gawing mas madali ang pag-aaral, iiwasan natin ang mga komplikasyon ng neural networks, 'deep learning' - ang paggawa ng mga modelong may maraming layer gamit ang neural networks - at AI, na tatalakayin natin sa ibang kurikulum. Magkakaroon din tayo ng paparating na kurikulum sa data science upang magpokus sa aspetong iyon ng mas malawak na larangan. +Upang magkaroon ng mas mahusay na karanasan sa pag-aaral, iiwasan natin ang mga komplikasyon ng neural networks, 'deep learning' - ang paggawa ng mga modelong may maraming layer gamit ang neural networks - at AI, na tatalakayin natin sa ibang kurikulum. Mag-aalok din kami ng paparating na kurikulum sa data science upang mag-focus sa aspeto ng mas malawak na larangan na ito. --- -## Bakit pag-aralan ang machine learning? +## Bakit mag-aral ng machine learning? -Ang machine learning, mula sa perspektibo ng sistema, ay tinutukoy bilang ang paggawa ng mga awtomatikong sistema na kayang matutunan ang mga nakatagong pattern mula sa datos upang makatulong sa paggawa ng matalinong desisyon. +Ang machine learning, mula sa perspektibo ng sistema, ay tinutukoy bilang paglikha ng mga automated na sistema na maaaring matuto ng mga nakatagong pattern mula sa data upang makatulong sa paggawa ng matalinong desisyon. -Ang motibasyong ito ay maluwag na inspirasyon mula sa kung paano natututo ang utak ng tao batay sa datos na natatanggap nito mula sa labas ng mundo. +Ang motibasyong ito ay maluwag na inspirasyon ng kung paano natututo ang utak ng tao ng ilang bagay batay sa data na nakikita nito mula sa labas ng mundo. -✅ Mag-isip ng isang minuto kung bakit nais ng isang negosyo na gumamit ng mga estratehiya sa machine learning kumpara sa paggawa ng isang hard-coded na sistema ng mga tuntunin. +✅ Mag-isip ng isang minuto kung bakit maaaring nais ng isang negosyo na gumamit ng mga estratehiya sa machine learning kumpara sa paggawa ng isang hard-coded na rules-based engine. --- ## Mga aplikasyon ng machine learning -Ang mga aplikasyon ng machine learning ay halos nasa lahat ng dako, at kasing laganap ng datos na dumadaloy sa ating mga lipunan, na nililikha ng ating mga smartphone, konektadong mga aparato, at iba pang mga sistema. Dahil sa napakalaking potensyal ng mga makabagong algorithm ng machine learning, patuloy na sinusuri ng mga mananaliksik ang kanilang kakayahan upang lutasin ang mga multi-dimensional at multi-disiplinaryong totoong problema na may magagandang resulta. +Ang mga aplikasyon ng machine learning ay halos nasa lahat ng lugar ngayon, at kasing laganap ng data na dumadaloy sa ating mga lipunan, na nabuo ng ating mga smartphone, mga konektadong device, at iba pang sistema. Isinasaalang-alang ang napakalaking potensyal ng mga makabagong machine learning algorithm, sinisiyasat ng mga mananaliksik ang kanilang kakayahan upang lutasin ang mga multi-dimensional at multi-disciplinary na totoong problema na may magagandang positibong resulta. --- -## Mga halimbawa ng aplikasyon ng ML +## Mga halimbawa ng applied ML **Maraming paraan upang magamit ang machine learning**: -- Upang hulaan ang posibilidad ng sakit mula sa kasaysayan o ulat ng medikal ng isang pasyente. -- Upang gamitin ang datos ng panahon upang hulaan ang mga kaganapan sa panahon. +- Upang mahulaan ang posibilidad ng sakit mula sa kasaysayan ng medikal ng isang pasyente o mga ulat. +- Upang gamitin ang data ng panahon upang mahulaan ang mga kaganapan sa panahon. - Upang maunawaan ang damdamin ng isang teksto. - Upang matukoy ang pekeng balita upang mapigilan ang pagkalat ng propaganda. -Ang mga larangan tulad ng pananalapi, ekonomiya, agham ng mundo, eksplorasyon ng kalawakan, biomedical engineering, kognitibong agham, at maging ang mga larangan ng humanidades ay nag-aangkop ng machine learning upang lutasin ang mga mahihirap at mabigat sa datos na problema ng kanilang larangan. +Ang finance, economics, earth science, space exploration, biomedical engineering, cognitive science, at maging ang mga larangan sa humanities ay nag-aangkop ng machine learning upang lutasin ang mga mahihirap na problema sa pagproseso ng data sa kanilang larangan. --- ## Konklusyon -Ang machine learning ay awtomatikong natutuklasan ang mga pattern sa pamamagitan ng paghahanap ng makabuluhang impormasyon mula sa totoong datos o nilikhang datos. Napatunayan nitong napakahalaga sa negosyo, kalusugan, at mga aplikasyon sa pananalapi, at marami pang iba. +Ang machine learning ay nag-aautomat ng proseso ng pagtuklas ng pattern sa pamamagitan ng paghahanap ng makabuluhang mga insight mula sa totoong mundo o generated na data. Napatunayan nitong napakahalaga sa negosyo, kalusugan, at mga aplikasyon sa pananalapi, bukod sa iba pa. -Sa malapit na hinaharap, ang pag-unawa sa mga batayan ng machine learning ay magiging mahalaga para sa mga tao mula sa anumang larangan dahil sa malawakang paggamit nito. +Sa malapit na hinaharap, ang pag-unawa sa mga pangunahing kaalaman ng machine learning ay magiging mahalaga para sa mga tao mula sa anumang larangan dahil sa malawakang paggamit nito. --- # 🚀 Hamon -Gumuhit, sa papel o gamit ang isang online app tulad ng [Excalidraw](https://excalidraw.com/), ng iyong pagkaunawa sa mga pagkakaiba ng AI, ML, deep learning, at data science. Magdagdag ng ilang ideya ng mga problemang mahusay lutasin ng bawat isa sa mga teknik na ito. +Gumuhit, sa papel o gamit ang isang online na app tulad ng [Excalidraw](https://excalidraw.com/), ng iyong pag-unawa sa mga pagkakaiba sa pagitan ng AI, ML, deep learning, at data science. Magdagdag ng ilang ideya ng mga problemang mahusay na malulutas ng bawat isa sa mga teknik na ito. -# [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2/) +# [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) --- -# Pagsusuri at Pag-aaral sa Sarili +# Review & Self Study -Upang matutunan pa ang tungkol sa kung paano ka maaaring magtrabaho gamit ang mga ML algorithm sa cloud, sundan ang [Learning Path](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott). +Upang matutunan pa kung paano ka maaaring magtrabaho gamit ang mga ML algorithm sa cloud, sundan ang [Learning Path](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott). -Kumuha ng [Learning Path](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) tungkol sa mga batayan ng ML. +Kumuha ng [Learning Path](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) tungkol sa mga pangunahing kaalaman ng ML. --- # Takdang-Aralin @@ -156,4 +156,4 @@ Kumuha ng [Learning Path](https://docs.microsoft.com/learn/modules/introduction- --- **Paunawa**: -Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito. \ No newline at end of file +Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na pinagmulan. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito. \ No newline at end of file diff --git a/translations/tl/1-Introduction/2-history-of-ML/README.md b/translations/tl/1-Introduction/2-history-of-ML/README.md index 757fec57..f0a0616d 100644 --- a/translations/tl/1-Introduction/2-history-of-ML/README.md +++ b/translations/tl/1-Introduction/2-history-of-ML/README.md @@ -1,152 +1,152 @@ # Kasaysayan ng Machine Learning -![Buod ng Kasaysayan ng Machine Learning sa isang sketchnote](../../../../translated_images/ml-history.a1bdfd4ce1f464d9a0502f38d355ffda384c95cd5278297a46c9a391b5053bc4.tl.png) +![Buod ng Kasaysayan ng Machine Learning sa isang sketchnote](../../../../sketchnotes/ml-history.png) > Sketchnote ni [Tomomi Imura](https://www.twitter.com/girlie_mac) -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) --- -[![ML para sa mga baguhan - Kasaysayan ng Machine Learning](https://img.youtube.com/vi/N6wxM4wZ7V0/0.jpg)](https://youtu.be/N6wxM4wZ7V0 "ML para sa mga baguhan - Kasaysayan ng Machine Learning") +[![ML para sa mga nagsisimula - Kasaysayan ng Machine Learning](https://img.youtube.com/vi/N6wxM4wZ7V0/0.jpg)](https://youtu.be/N6wxM4wZ7V0 "ML para sa mga nagsisimula - Kasaysayan ng Machine Learning") -> 🎥 I-click ang larawan sa itaas para sa isang maikling video tungkol sa araling ito. +> 🎥 I-click ang imahe sa itaas para sa isang maikling video na tumatalakay sa araling ito. Sa araling ito, tatalakayin natin ang mga pangunahing milestone sa kasaysayan ng machine learning at artificial intelligence. -Ang kasaysayan ng artificial intelligence (AI) bilang isang larangan ay konektado sa kasaysayan ng machine learning, dahil ang mga algorithm at mga pag-unlad sa komputasyon na bumubuo sa ML ay nag-ambag sa pag-unlad ng AI. Mahalagang tandaan na, bagama't nagsimulang mabuo ang mga larangang ito bilang magkakaibang paksa noong 1950s, may mga mahahalagang [algorithmic, statistical, mathematical, computational, at teknikal na mga tuklas](https://wikipedia.org/wiki/Timeline_of_machine_learning) na nauna at sumabay sa panahong ito. Sa katunayan, ang mga tao ay nag-iisip tungkol sa mga tanong na ito sa loob ng [daan-daang taon](https://wikipedia.org/wiki/History_of_artificial_intelligence): tinatalakay ng artikulong ito ang mga makasaysayang pundasyon ng ideya ng isang 'nag-iisip na makina.' +Ang kasaysayan ng artificial intelligence (AI) bilang isang larangan ay konektado sa kasaysayan ng machine learning, dahil ang mga algorithm at computational advances na bumubuo sa ML ay nag-ambag sa pag-unlad ng AI. Mahalagang tandaan na, bagama't nagsimulang mabuo ang mga larangang ito bilang magkakaibang paksa noong 1950s, may mga mahahalagang [algorithmic, statistical, mathematical, computational, at technical discoveries](https://wikipedia.org/wiki/Timeline_of_machine_learning) na nauna at sumabay sa panahong ito. Sa katunayan, matagal nang iniisip ng mga tao ang mga tanong na ito sa loob ng [daan-daang taon](https://wikipedia.org/wiki/History_of_artificial_intelligence): ang artikulong ito ay tumatalakay sa intelektwal na pundasyon ng ideya ng isang 'thinking machine.' --- -## Mahahalagang Tuklas +## Mga Mahahalagang Diskubre -- 1763, 1812 [Bayes Theorem](https://wikipedia.org/wiki/Bayes%27_theorem) at ang mga nauna nito. Ang theorem na ito at ang mga aplikasyon nito ay nagiging batayan ng inference, na naglalarawan ng posibilidad ng isang pangyayari batay sa naunang kaalaman. -- 1805 [Least Square Theory](https://wikipedia.org/wiki/Least_squares) ni Adrien-Marie Legendre, isang Pranses na matematikal. Ang teoryang ito, na matututunan mo sa aming Regression unit, ay tumutulong sa data fitting. -- 1913 [Markov Chains](https://wikipedia.org/wiki/Markov_chain), ipinangalan sa Rusong matematikal na si Andrey Markov, ay ginagamit upang ilarawan ang isang sunod-sunod na posibleng mga pangyayari batay sa isang naunang estado. -- 1957 [Perceptron](https://wikipedia.org/wiki/Perceptron) ay isang uri ng linear classifier na imbento ng Amerikanong psychologist na si Frank Rosenblatt na naging pundasyon ng mga pag-unlad sa deep learning. +- 1763, 1812 [Bayes Theorem](https://wikipedia.org/wiki/Bayes%27_theorem) at ang mga nauna nito. Ang theorem na ito at ang mga aplikasyon nito ay naglalarawan ng probabilidad ng isang pangyayari batay sa naunang kaalaman. +- 1805 [Least Square Theory](https://wikipedia.org/wiki/Least_squares) ni Adrien-Marie Legendre, isang French mathematician. Ang teoryang ito, na matututunan mo sa aming Regression unit, ay tumutulong sa data fitting. +- 1913 [Markov Chains](https://wikipedia.org/wiki/Markov_chain), na ipinangalan kay Andrey Markov, isang Russian mathematician, ay ginagamit upang ilarawan ang isang sunod-sunod na posibleng pangyayari batay sa nakaraang estado. +- 1957 [Perceptron](https://wikipedia.org/wiki/Perceptron), isang uri ng linear classifier na imbento ni Frank Rosenblatt, isang American psychologist, na naging pundasyon ng mga pag-unlad sa deep learning. --- -- 1967 [Nearest Neighbor](https://wikipedia.org/wiki/Nearest_neighbor) ay isang algorithm na orihinal na dinisenyo upang mag-mapa ng mga ruta. Sa konteksto ng ML, ginagamit ito upang makakita ng mga pattern. -- 1970 [Backpropagation](https://wikipedia.org/wiki/Backpropagation) ay ginagamit upang sanayin ang [feedforward neural networks](https://wikipedia.org/wiki/Feedforward_neural_network). -- 1982 [Recurrent Neural Networks](https://wikipedia.org/wiki/Recurrent_neural_network) ay mga artificial neural networks na nagmula sa feedforward neural networks na lumilikha ng temporal graphs. +- 1967 [Nearest Neighbor](https://wikipedia.org/wiki/Nearest_neighbor), isang algorithm na orihinal na dinisenyo para sa pagmamapa ng ruta. Sa konteksto ng ML, ginagamit ito upang tukuyin ang mga pattern. +- 1970 [Backpropagation](https://wikipedia.org/wiki/Backpropagation), ginagamit upang sanayin ang [feedforward neural networks](https://wikipedia.org/wiki/Feedforward_neural_network). +- 1982 [Recurrent Neural Networks](https://wikipedia.org/wiki/Recurrent_neural_network), mga artificial neural networks na nagmula sa feedforward neural networks na lumilikha ng temporal graphs. -✅ Mag-research ng kaunti. Anong iba pang mga petsa ang mahalaga sa kasaysayan ng ML at AI? +✅ Mag-research ng kaunti. Anong iba pang mga petsa ang tumatak bilang mahalaga sa kasaysayan ng ML at AI? --- -## 1950: Mga Makina na Nag-iisip +## 1950: Mga makinang nag-iisip -Si Alan Turing, isang tunay na kahanga-hangang tao na nahirang [ng publiko noong 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) bilang pinakadakilang siyentipiko ng ika-20 siglo, ay kinikilala bilang isa sa mga naglatag ng pundasyon para sa konsepto ng isang 'makina na maaaring mag-isip.' Hinarap niya ang mga kritiko at ang kanyang sariling pangangailangan para sa empirikal na ebidensya ng konseptong ito sa pamamagitan ng paglikha ng [Turing Test](https://www.bbc.com/news/technology-18475646), na iyong pag-aaralan sa aming mga aralin sa NLP. +Si Alan Turing, isang tunay na kahanga-hangang tao na itinanghal [ng publiko noong 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) bilang pinakadakilang siyentipiko ng ika-20 siglo, ay kinikilala sa pagtulong na mailatag ang pundasyon para sa konsepto ng isang 'makinang nag-iisip.' Hinarap niya ang mga kritiko at ang kanyang sariling pangangailangan para sa empirikal na ebidensya ng konseptong ito sa pamamagitan ng paglikha ng [Turing Test](https://www.bbc.com/news/technology-18475646), na iyong matututunan sa aming NLP lessons. --- ## 1956: Dartmouth Summer Research Project "Ang Dartmouth Summer Research Project sa artificial intelligence ay isang mahalagang kaganapan para sa larangan ng artificial intelligence," at dito unang ginamit ang terminong 'artificial intelligence' ([source](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). -> Ang bawat aspeto ng pagkatuto o anumang iba pang katangian ng katalinuhan ay maaaring mailarawan nang eksakto upang ang isang makina ay magawang gayahin ito. +> Ang bawat aspeto ng pag-aaral o anumang iba pang tampok ng katalinuhan ay maaaring sa prinsipyo ay mailarawan nang eksakto upang ang isang makina ay magawang gayahin ito. --- -Ang pangunahing mananaliksik, ang propesor ng matematika na si John McCarthy, ay umaasang "magpatuloy batay sa hinuha na ang bawat aspeto ng pagkatuto o anumang iba pang katangian ng katalinuhan ay maaaring mailarawan nang eksakto upang ang isang makina ay magawang gayahin ito." Ang mga kalahok ay kinabibilangan ng isa pang tanyag sa larangan, si Marvin Minsky. +Ang pangunahing mananaliksik, si John McCarthy, isang propesor ng matematika, ay umaasang "magpatuloy batay sa hinuha na ang bawat aspeto ng pag-aaral o anumang iba pang tampok ng katalinuhan ay maaaring sa prinsipyo ay mailarawan nang eksakto upang ang isang makina ay magawang gayahin ito." Ang mga kalahok ay kinabibilangan ng isa pang kilalang tao sa larangan, si Marvin Minsky. -Ang workshop na ito ay kinikilala bilang nagpasimula at nag-udyok ng ilang mga talakayan kabilang ang "ang pag-usbong ng mga simbolikong pamamaraan, mga sistema na nakatuon sa limitadong mga domain (mga maagang expert systems), at mga deductive systems laban sa mga inductive systems." ([source](https://wikipedia.org/wiki/Dartmouth_workshop)). +Ang workshop ay kinikilala sa pagsisimula at paghikayat ng ilang talakayan kabilang ang "ang pag-usbong ng symbolic methods, mga sistema na nakatuon sa limitadong domain (mga unang expert systems), at deductive systems laban sa inductive systems." ([source](https://wikipedia.org/wiki/Dartmouth_workshop)). --- -## 1956 - 1974: "Ang Ginintuang Panahon" +## 1956 - 1974: "Ang ginintuang taon" -Mula 1950s hanggang kalagitnaan ng '70s, mataas ang optimismo na kayang lutasin ng AI ang maraming problema. Noong 1967, buong kumpiyansa na sinabi ni Marvin Minsky na "Sa loob ng isang henerasyon ... ang problema ng paglikha ng 'artificial intelligence' ay halos malulutas na." (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) +Mula 1950s hanggang kalagitnaan ng '70s, mataas ang optimismo na ang AI ay maaaring makapagbigay solusyon sa maraming problema. Noong 1967, tiwala si Marvin Minsky na "Sa loob ng isang henerasyon ... ang problema ng paglikha ng 'artificial intelligence' ay malulutas nang malaki." (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) -Ang pananaliksik sa natural language processing ay umunlad, ang paghahanap ay pinino at ginawang mas makapangyarihan, at ang konsepto ng 'micro-worlds' ay nilikha, kung saan ang mga simpleng gawain ay natatapos gamit ang mga simpleng tagubilin sa wika. +Ang pananaliksik sa natural language processing ay umunlad, ang paghahanap ay pinino at ginawang mas makapangyarihan, at ang konsepto ng 'micro-worlds' ay nilikha, kung saan ang mga simpleng gawain ay natatapos gamit ang mga simpleng utos sa wika. --- -Ang pananaliksik ay mahusay na pinondohan ng mga ahensya ng gobyerno, nagkaroon ng mga pag-unlad sa komputasyon at mga algorithm, at ang mga prototype ng mga intelligent na makina ay nabuo. Ilan sa mga makinang ito ay kinabibilangan ng: +Ang pananaliksik ay mahusay na pinondohan ng mga ahensya ng gobyerno, nagkaroon ng mga pag-unlad sa computation at algorithms, at ang mga prototype ng intelligent machines ay nabuo. Ilan sa mga makinang ito ay: -* [Shakey the robot](https://wikipedia.org/wiki/Shakey_the_robot), na kayang magmaniobra at magdesisyon kung paano isasagawa ang mga gawain nang 'matalino'. +* [Shakey the robot](https://wikipedia.org/wiki/Shakey_the_robot), na kayang magmaneho at magdesisyon kung paano isasagawa ang mga gawain nang 'matalino'. - ![Shakey, isang intelligent na robot](../../../../translated_images/shakey.4dc17819c447c05bf4b52f76da0bdd28817d056fdb906252ec20124dd4cfa55e.tl.jpg) + ![Shakey, isang intelligent robot](../../../../1-Introduction/2-history-of-ML/images/shakey.jpg) > Shakey noong 1972 --- -* Eliza, isang maagang 'chatterbot', ay kayang makipag-usap sa mga tao at kumilos bilang isang primitibong 'therapist'. Malalaman mo pa ang tungkol kay Eliza sa mga aralin sa NLP. +* Eliza, isang maagang 'chatterbot', ay kayang makipag-usap sa mga tao at kumilos bilang isang primitive 'therapist'. Malalaman mo pa ang tungkol kay Eliza sa NLP lessons. - ![Eliza, isang bot](../../../../translated_images/eliza.84397454cda9559bb5ec296b5b8fff067571c0cccc5405f9c1ab1c3f105c075c.tl.png) + ![Eliza, isang bot](../../../../1-Introduction/2-history-of-ML/images/eliza.png) > Isang bersyon ni Eliza, isang chatbot --- -* "Blocks world" ay isang halimbawa ng micro-world kung saan ang mga bloke ay maaaring itumpok at ayusin, at ang mga eksperimento sa pagtuturo sa mga makina na gumawa ng mga desisyon ay maaaring subukan. Ang mga pag-unlad na binuo gamit ang mga library tulad ng [SHRDLU](https://wikipedia.org/wiki/SHRDLU) ay tumulong sa pagpapalago ng language processing. +* "Blocks world" ay isang halimbawa ng micro-world kung saan ang mga blocks ay maaaring itumpok at ayusin, at ang mga eksperimento sa pagtuturo sa mga makina na gumawa ng desisyon ay maaaring subukan. Ang mga pag-unlad na ginawa gamit ang mga library tulad ng [SHRDLU](https://wikipedia.org/wiki/SHRDLU) ay tumulong sa pagpapalakas ng language processing. [![blocks world gamit ang SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "blocks world gamit ang SHRDLU") - > 🎥 I-click ang larawan sa itaas para sa isang video: Blocks world gamit ang SHRDLU + > 🎥 I-click ang imahe sa itaas para sa isang video: Blocks world gamit ang SHRDLU --- ## 1974 - 1980: "AI Winter" -Sa kalagitnaan ng 1970s, naging malinaw na ang pagiging kumplikado ng paggawa ng 'mga intelligent na makina' ay hindi sapat na naipaliwanag at ang mga pangako nito, batay sa kakayahan ng kompyuter noong panahong iyon, ay labis na napalaki. Nawalan ng pondo at bumagal ang kumpiyansa sa larangan. Ilan sa mga isyung nakaapekto sa kumpiyansa ay kinabibilangan ng: +Sa kalagitnaan ng 1970s, naging malinaw na ang pagiging kumplikado ng paggawa ng 'intelligent machines' ay hindi sapat na naipaliwanag at ang pangako nito, batay sa available na compute power, ay labis na napalaki. Ang pondo ay naubos at ang tiwala sa larangan ay bumagal. Ilan sa mga isyung nakaapekto sa tiwala ay: --- -- **Mga Limitasyon**. Ang compute power ay masyadong limitado. -- **Combinatorial explosion**. Ang dami ng mga parameter na kailangang sanayin ay lumago nang eksponensyal habang mas maraming hinihingi sa mga kompyuter, nang walang kasabay na pag-unlad sa compute power at kakayahan. +- **Limitasyon**. Ang compute power ay masyadong limitado. +- **Combinatorial explosion**. Ang dami ng mga parameter na kailangang sanayin ay lumago nang eksponensyal habang mas maraming hinihingi sa mga computer, nang walang kasabay na pag-unlad ng compute power at kakayahan. - **Kakulangan ng data**. May kakulangan ng data na humadlang sa proseso ng pagsubok, pagbuo, at pagpapabuti ng mga algorithm. -- **Tama ba ang mga tanong na tinatanong natin?**. Ang mismong mga tanong na tinatanong ay nagsimulang kuwestyunin. Ang mga mananaliksik ay nagsimulang makatanggap ng kritisismo tungkol sa kanilang mga pamamaraan: - - Ang mga Turing test ay kinuwestyon sa pamamagitan ng, bukod sa iba pang mga ideya, ang 'chinese room theory' na nagsasabing, "ang pag-program ng isang digital na kompyuter ay maaaring magmukhang nauunawaan nito ang wika ngunit hindi makakalikha ng tunay na pag-unawa." ([source](https://plato.stanford.edu/entries/chinese-room/)) - - Ang etika ng pagpapakilala ng mga artificial intelligences tulad ng "therapist" ELIZA sa lipunan ay hinamon. +- **Tama ba ang mga tanong na tinatanong natin?**. Ang mismong mga tanong na tinatanong ay nagsimulang kuwestyunin. Ang mga mananaliksik ay nagsimulang tumanggap ng kritisismo tungkol sa kanilang mga pamamaraan: + - Ang Turing tests ay kinuwestyon sa pamamagitan ng, bukod sa iba pang ideya, ng 'chinese room theory' na nagsasabing, "ang pag-program ng isang digital computer ay maaaring magmukhang nauunawaan ang wika ngunit hindi makakalikha ng tunay na pag-unawa." ([source](https://plato.stanford.edu/entries/chinese-room/)) + - Ang etika ng pagpapakilala ng artificial intelligences tulad ng "therapist" ELIZA sa lipunan ay hinamon. --- -Kasabay nito, iba't ibang mga paaralan ng pag-iisip sa AI ang nagsimulang mabuo. Nabuo ang isang dichotomy sa pagitan ng ["scruffy" vs. "neat AI"](https://wikipedia.org/wiki/Neats_and_scruffies) na mga kasanayan. Ang mga _scruffy_ na laboratoryo ay nag-aayos ng mga programa nang paulit-ulit hanggang makuha ang nais na resulta. Ang mga _neat_ na laboratoryo ay "nakatuon sa lohika at pormal na paglutas ng problema". Ang ELIZA at SHRDLU ay kilalang mga _scruffy_ na sistema. Noong 1980s, habang lumitaw ang pangangailangan na gawing reproducible ang mga ML system, ang _neat_ na pamamaraan ay unti-unting nangibabaw dahil ang mga resulta nito ay mas madaling maipaliwanag. +Kasabay nito, iba't ibang mga paaralan ng pag-iisip sa AI ang nagsimulang mabuo. Isang dichotomy ang naitatag sa pagitan ng ["scruffy" vs. "neat AI"](https://wikipedia.org/wiki/Neats_and_scruffies) na mga kasanayan. Ang mga _scruffy_ na laboratoryo ay nag-aayos ng mga programa nang paulit-ulit hanggang sa makuha ang nais na resulta. Ang mga _neat_ na laboratoryo ay "nakatuon sa lohika at pormal na paglutas ng problema". Ang ELIZA at SHRDLU ay kilalang mga _scruffy_ na sistema. Noong 1980s, habang lumitaw ang pangangailangan na gawing reproducible ang mga ML system, ang _neat_ na pamamaraan ay unti-unting naging pangunahing dahil ang mga resulta nito ay mas madaling ipaliwanag. --- -## 1980s Expert Systems +## 1980s Expert systems -Habang lumalago ang larangan, naging mas malinaw ang benepisyo nito sa negosyo, at noong 1980s, dumami ang 'expert systems'. "Ang mga expert systems ay kabilang sa mga unang tunay na matagumpay na anyo ng artificial intelligence (AI) software." ([source](https://wikipedia.org/wiki/Expert_system)). +Habang lumalaki ang larangan, naging mas malinaw ang benepisyo nito sa negosyo, at noong 1980s gayundin ang paglaganap ng 'expert systems'. "Ang mga expert systems ay kabilang sa mga unang tunay na matagumpay na anyo ng artificial intelligence (AI) software." ([source](https://wikipedia.org/wiki/Expert_system)). -Ang ganitong uri ng sistema ay talagang _hybrid_, na binubuo ng isang rules engine na nagtatakda ng mga kinakailangan sa negosyo, at isang inference engine na gumagamit ng rules system upang makabuo ng mga bagong impormasyon. +Ang ganitong uri ng sistema ay talagang _hybrid_, na binubuo ng isang rules engine na nagtatakda ng mga kinakailangan sa negosyo, at isang inference engine na gumagamit ng rules system upang makabuo ng mga bagong katotohanan. Ang panahong ito ay nagbigay din ng mas maraming pansin sa neural networks. --- ## 1987 - 1993: AI 'Chill' -Ang pagdami ng mga specialized expert systems hardware ay nagkaroon ng hindi magandang epekto ng pagiging masyadong specialized. Ang pag-usbong ng mga personal na kompyuter ay nakipagkumpitensya rin sa mga malalaking, specialized, centralized systems. Nagsimula na ang democratization ng computing, at kalaunan ay nagbigay-daan ito sa modernong pagsabog ng big data. +Ang paglaganap ng mga specialized expert systems hardware ay nagkaroon ng hindi magandang epekto ng pagiging masyadong specialized. Ang pag-usbong ng personal computers ay nakipagkumpitensya rin sa mga malalaking, specialized, centralized systems. Nagsimula na ang democratization ng computing, na kalaunan ay nagbigay-daan sa modernong pagsabog ng big data. --- ## 1993 - 2011 -Ang panahong ito ay nagdala ng bagong era para sa ML at AI upang malutas ang ilan sa mga problemang dulot ng kakulangan ng data at compute power noong nakaraan. Ang dami ng data ay mabilis na dumami at naging mas madaling ma-access, para sa mabuti at masama, lalo na sa pag-usbong ng smartphone noong 2007. Ang compute power ay lumago nang eksponensyal, at ang mga algorithm ay sumabay sa pag-unlad. Ang larangan ay nagsimulang maging mas mature habang ang mga malayang araw ng nakaraan ay unti-unting naging isang tunay na disiplina. +Ang panahong ito ay nagbigay-daan sa bagong era para sa ML at AI upang malutas ang ilan sa mga problemang dulot ng kakulangan ng data at compute power noong una. Ang dami ng data ay mabilis na dumami at naging mas malawak na magagamit, para sa mabuti at masama, lalo na sa pag-usbong ng smartphone noong 2007. Ang compute power ay lumago nang eksponensyal, at ang mga algorithm ay umunlad kasabay nito. Ang larangan ay nagsimulang mag-mature habang ang mga malayang araw ng nakaraan ay nagsimulang mabuo bilang isang tunay na disiplina. --- ## Ngayon -Ngayon, ang machine learning at AI ay halos naaabot na ang bawat bahagi ng ating buhay. Ang panahong ito ay nangangailangan ng maingat na pag-unawa sa mga panganib at posibleng epekto ng mga algorithm na ito sa buhay ng tao. Tulad ng sinabi ni Brad Smith ng Microsoft, "Ang teknolohiya ng impormasyon ay nagdadala ng mga isyu na tumatama sa puso ng mga pangunahing proteksyon ng karapatang pantao tulad ng privacy at kalayaan sa pagpapahayag. Ang mga isyung ito ay nagpapataas ng responsibilidad para sa mga kumpanya ng teknolohiya na lumikha ng mga produktong ito. Sa aming pananaw, nangangailangan din ito ng maingat na regulasyon ng gobyerno at ng pagbuo ng mga pamantayan sa mga katanggap-tanggap na paggamit" ([source](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). +Ngayon, ang machine learning at AI ay nakakaapekto sa halos bawat bahagi ng ating buhay. Ang panahong ito ay nangangailangan ng maingat na pag-unawa sa mga panganib at potensyal na epekto ng mga algorithm na ito sa buhay ng tao. Tulad ng sinabi ni Brad Smith ng Microsoft, "Ang teknolohiya ng impormasyon ay nagdudulot ng mga isyu na tumutukoy sa mga pangunahing proteksyon ng karapatang pantao tulad ng privacy at kalayaan sa pagpapahayag. Ang mga isyung ito ay nagpapataas ng responsibilidad para sa mga kumpanya ng teknolohiya na lumilikha ng mga produktong ito. Sa aming pananaw, nangangailangan din ito ng maingat na regulasyon ng gobyerno at ng pagbuo ng mga pamantayan sa mga katanggap-tanggap na paggamit" ([source](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). --- -Hindi pa tiyak kung ano ang hinaharap, ngunit mahalagang maunawaan ang mga sistemang ito ng kompyuter at ang software at mga algorithm na kanilang pinapatakbo. Inaasahan namin na ang kurikulum na ito ay makakatulong sa iyo na magkaroon ng mas mahusay na pag-unawa upang ikaw mismo ang makapagdesisyon. +Hindi pa natin alam kung ano ang hinaharap, ngunit mahalagang maunawaan ang mga sistemang ito ng computer at ang software at mga algorithm na kanilang pinapatakbo. Inaasahan namin na ang kurikulum na ito ay makakatulong sa iyo na magkaroon ng mas mahusay na pag-unawa upang ikaw mismo ang makapagdesisyon. [![Ang kasaysayan ng deep learning](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 "Ang kasaysayan ng deep learning") -> 🎥 I-click ang larawan sa itaas para sa isang video: Tinalakay ni Yann LeCun ang kasaysayan ng deep learning sa leksyong ito +> 🎥 I-click ang imahe sa itaas para sa isang video: Tinalakay ni Yann LeCun ang kasaysayan ng deep learning sa lecture na ito --- ## 🚀Hamunin -Suriin ang isa sa mga makasaysayang sandaling ito at alamin ang higit pa tungkol sa mga taong nasa likod nito. May mga kahanga-hangang personalidad, at walang siyentipikong tuklas na nalikha sa isang cultural vacuum. Ano ang iyong natuklasan? +Pag-aralan ang isa sa mga makasaysayang sandali na ito at alamin ang higit pa tungkol sa mga tao sa likod nito. May mga kahanga-hangang karakter, at walang scientific discovery na kailanman nilikha sa isang cultural vacuum. Ano ang iyong natuklasan? -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4/) +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) --- -## Review at Pag-aaral sa Sarili +## Review & Self Study -Narito ang mga bagay na maaaring panoorin at pakinggan: +Narito ang mga item na pwedeng panoorin at pakinggan: [Ang podcast na ito kung saan tinalakay ni Amy Boyd ang ebolusyon ng AI](http://runasradio.com/Shows/Show/739) @@ -154,11 +154,11 @@ Narito ang mga bagay na maaaring panoorin at pakinggan: --- -## Takdang-Aralin +## Takdang Aralin [Gumawa ng timeline](assignment.md) --- **Paunawa**: -Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file +Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na pinagmulan. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file diff --git a/translations/tl/1-Introduction/3-fairness/README.md b/translations/tl/1-Introduction/3-fairness/README.md index 528a67ed..c76e0d24 100644 --- a/translations/tl/1-Introduction/3-fairness/README.md +++ b/translations/tl/1-Introduction/3-fairness/README.md @@ -1,39 +1,39 @@ -# Paggawa ng Solusyon sa Machine Learning gamit ang Responsable AI +# Paggawa ng Solusyon sa Machine Learning gamit ang Responsible AI -![Buod ng responsable AI sa Machine Learning sa isang sketchnote](../../../../translated_images/ml-fairness.ef296ebec6afc98a44566d7b6c1ed18dc2bf1115c13ec679bb626028e852fa1d.tl.png) +![Buod ng Responsible AI sa Machine Learning sa isang sketchnote](../../../../sketchnotes/ml-fairness.png) > Sketchnote ni [Tomomi Imura](https://www.twitter.com/girlie_mac) -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) ## Panimula -Sa kurikulum na ito, sisimulan mong tuklasin kung paano nakakaapekto ang machine learning sa ating pang-araw-araw na buhay. Sa kasalukuyan, ang mga sistema at modelo ay ginagamit sa mga desisyon sa araw-araw tulad ng mga diagnosis sa pangangalaga ng kalusugan, pag-apruba ng mga pautang, o pagtuklas ng pandaraya. Kaya mahalaga na ang mga modelong ito ay gumagana nang maayos upang magbigay ng mga resulta na mapagkakatiwalaan. Tulad ng anumang software application, ang mga sistema ng AI ay maaaring hindi umabot sa inaasahan o magdulot ng hindi kanais-nais na resulta. Kaya mahalaga na maunawaan at maipaliwanag ang pag-uugali ng isang modelo ng AI. +Sa kurikulum na ito, sisimulan mong tuklasin kung paano nakakaapekto ang machine learning sa ating pang-araw-araw na buhay. Sa kasalukuyan, ang mga sistema at modelo ay ginagamit sa mga desisyon sa araw-araw tulad ng mga diagnosis sa pangangalaga ng kalusugan, pag-apruba ng pautang, o pagtuklas ng pandaraya. Kaya mahalaga na ang mga modelong ito ay gumana nang maayos upang magbigay ng mga resulta na mapagkakatiwalaan. Tulad ng anumang software application, ang mga sistema ng AI ay maaaring hindi umabot sa inaasahan o magdulot ng hindi kanais-nais na resulta. Kaya mahalaga na maunawaan at maipaliwanag ang pag-uugali ng isang AI model. -Isipin kung ano ang maaaring mangyari kapag ang datos na ginagamit mo upang bumuo ng mga modelong ito ay kulang sa ilang demograpiko tulad ng lahi, kasarian, pananaw sa politika, relihiyon, o hindi pantay na kinakatawan ang mga demograpikong ito. Paano kung ang output ng modelo ay pabor sa isang demograpiko? Ano ang magiging epekto nito sa aplikasyon? Bukod pa rito, ano ang mangyayari kapag ang modelo ay nagkaroon ng masamang resulta at nakapinsala sa mga tao? Sino ang may pananagutan sa pag-uugali ng sistema ng AI? Ito ang ilan sa mga tanong na ating tatalakayin sa kurikulum na ito. +Isipin kung ano ang maaaring mangyari kapag ang data na ginagamit mo upang bumuo ng mga modelong ito ay kulang sa ilang demograpiko tulad ng lahi, kasarian, pananaw sa politika, relihiyon, o hindi pantay na kinakatawan ang mga demograpikong ito. Paano kung ang output ng modelo ay pabor sa isang demograpiko? Ano ang magiging epekto nito sa aplikasyon? Bukod dito, ano ang mangyayari kapag ang modelo ay nagkaroon ng masamang resulta at nakapinsala sa mga tao? Sino ang may pananagutan sa pag-uugali ng mga sistema ng AI? Ito ang ilan sa mga tanong na ating susuriin sa kurikulum na ito. Sa araling ito, ikaw ay: -- Magkakaroon ng kamalayan sa kahalagahan ng pagiging patas sa machine learning at mga pinsalang may kaugnayan dito. -- Magiging pamilyar sa pagsasanay ng pagsusuri sa mga outliers at hindi pangkaraniwang sitwasyon upang matiyak ang pagiging maaasahan at kaligtasan. -- Makakakuha ng pag-unawa sa pangangailangan na bigyang kapangyarihan ang lahat sa pamamagitan ng pagdidisenyo ng mga inklusibong sistema. -- Matutuklasan kung gaano kahalaga ang protektahan ang privacy at seguridad ng datos at ng mga tao. -- Makikita ang kahalagahan ng isang "glass box" na diskarte upang maipaliwanag ang pag-uugali ng mga modelo ng AI. +- Magkakaroon ng kamalayan sa kahalagahan ng pagiging patas sa machine learning at mga pinsalang kaugnay nito. +- Malalaman ang kahalagahan ng pagsusuri sa mga outliers at hindi pangkaraniwang sitwasyon upang matiyak ang pagiging maaasahan at kaligtasan. +- Mauunawaan ang pangangailangan na bigyang kapangyarihan ang lahat sa pamamagitan ng pagdidisenyo ng mga inklusibong sistema. +- Susuriin ang kahalagahan ng pagprotekta sa privacy at seguridad ng data at mga tao. +- Makikita ang kahalagahan ng "glass box" na diskarte upang maipaliwanag ang pag-uugali ng mga modelo ng AI. - Magiging maingat sa kung paano mahalaga ang pananagutan upang makabuo ng tiwala sa mga sistema ng AI. ## Paunang Kaalaman Bilang paunang kaalaman, mangyaring kunin ang "Responsible AI Principles" Learn Path at panoorin ang video sa ibaba tungkol sa paksa: -Alamin ang higit pa tungkol sa Responsable AI sa pamamagitan ng pagsunod sa [Learning Path](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) +Matuto pa tungkol sa Responsible AI sa pamamagitan ng pagsunod sa [Learning Path](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) [![Microsoft's Approach to Responsible AI](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Microsoft's Approach to Responsible AI") @@ -41,116 +41,118 @@ Alamin ang higit pa tungkol sa Responsable AI sa pamamagitan ng pagsunod sa [Lea ## Pagiging Patas -Ang mga sistema ng AI ay dapat tratuhin ang lahat nang patas at iwasan ang pag-apekto sa mga katulad na grupo ng tao sa iba't ibang paraan. Halimbawa, kapag ang mga sistema ng AI ay nagbibigay ng gabay sa paggamot sa medikal, aplikasyon ng pautang, o trabaho, dapat silang magbigay ng parehong rekomendasyon sa lahat ng may katulad na sintomas, kalagayan sa pananalapi, o kwalipikasyon sa propesyon. Bawat isa sa atin bilang tao ay may dalang likas na pagkiling na nakakaapekto sa ating mga desisyon at kilos. Ang mga pagkiling na ito ay maaaring makita sa datos na ginagamit natin upang sanayin ang mga sistema ng AI. Ang ganitong manipulasyon ay minsan nangyayari nang hindi sinasadya. Madalas mahirap malaman nang may kamalayan kung kailan ka nagdadala ng pagkiling sa datos. +Ang mga sistema ng AI ay dapat tratuhin ang lahat nang patas at iwasan ang pag-apekto sa mga katulad na grupo ng tao sa iba't ibang paraan. Halimbawa, kapag ang mga sistema ng AI ay nagbibigay ng gabay sa paggamot sa medikal, aplikasyon ng pautang, o trabaho, dapat silang magbigay ng parehong rekomendasyon sa lahat ng may magkatulad na sintomas, kalagayan sa pananalapi, o kwalipikasyon sa propesyon. Bawat isa sa atin bilang tao ay may dalang likas na bias na nakakaapekto sa ating mga desisyon at aksyon. Ang mga bias na ito ay maaaring makita sa data na ginagamit natin upang sanayin ang mga sistema ng AI. Ang ganitong manipulasyon ay minsan nangyayari nang hindi sinasadya. Madalas mahirap malaman nang may kamalayan kung kailan ka nagdadala ng bias sa data. -Ang **“Kawalan ng Pagiging Patas”** ay sumasaklaw sa mga negatibong epekto, o “pinsala”, para sa isang grupo ng tao, tulad ng mga tinukoy batay sa lahi, kasarian, edad, o kalagayan ng kapansanan. Ang mga pangunahing pinsalang may kaugnayan sa pagiging patas ay maaaring uriin bilang: +Ang **“Kawalan ng Pagiging Patas”** ay sumasaklaw sa mga negatibong epekto, o “pinsala”, para sa isang grupo ng tao, tulad ng mga tinukoy batay sa lahi, kasarian, edad, o kalagayan ng kapansanan. Ang mga pangunahing pinsalang kaugnay ng pagiging patas ay maaaring uriin bilang: -- **Paglalaan**, kung ang isang kasarian o etnisidad halimbawa ay pinapaboran kaysa sa iba. -- **Kalidad ng serbisyo**. Kung sinanay mo ang datos para sa isang partikular na sitwasyon ngunit ang realidad ay mas kumplikado, nagreresulta ito sa mahinang serbisyo. Halimbawa, isang dispenser ng sabon na hindi makadetect ng mga taong may maitim na balat. [Sanggunian](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) -- **Pag-aalipusta**. Ang hindi patas na pagbatikos at pag-label sa isang bagay o tao. Halimbawa, isang teknolohiya sa pag-label ng imahe na maling tinukoy ang mga imahe ng mga taong may maitim na balat bilang gorilya. -- **Sobra o kulang na representasyon**. Ang ideya na ang isang grupo ay hindi nakikita sa isang partikular na propesyon, at anumang serbisyo o function na patuloy na nagpo-promote nito ay nag-aambag sa pinsala. -- **Pag-stereotype**. Ang pag-uugnay ng isang grupo sa mga pre-assigned na katangian. Halimbawa, ang isang sistema ng pagsasalin ng wika sa pagitan ng Ingles at Turkish ay maaaring magkaroon ng mga kamalian dahil sa mga salitang may stereotypical na kaugnayan sa kasarian. +- **Paglalaan**, kung ang isang kasarian o etnisidad ay pinapaboran kaysa sa iba. +- **Kalidad ng serbisyo**. Kung sinanay mo ang data para sa isang partikular na sitwasyon ngunit mas kumplikado ang realidad, nagdudulot ito ng mahinang serbisyo. Halimbawa, isang dispenser ng sabon na hindi makadetect ng mga taong may maitim na balat. [Sanggunian](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) +- **Pagkakalait**. Hindi patas na pagbatikos o pag-label sa isang bagay o tao. Halimbawa, isang teknolohiya sa pag-label ng imahe na maling tinukoy ang mga imahe ng mga taong may maitim na balat bilang gorilya. +- **Sobra o kulang na representasyon**. Ang ideya na ang isang grupo ay hindi nakikita sa isang partikular na propesyon, at anumang serbisyo o function na patuloy na nagpo-promote nito ay nagdudulot ng pinsala. +- **Stereotyping**. Pag-uugnay ng isang grupo sa mga pre-assigned na katangian. Halimbawa, isang sistema ng pagsasalin ng wika sa pagitan ng Ingles at Turkish ay maaaring magkaroon ng mga kamalian dahil sa mga salitang may stereotypical na kaugnayan sa kasarian. -![pagsasalin sa Turkish](../../../../translated_images/gender-bias-translate-en-tr.f185fd8822c2d4372912f2b690f6aaddd306ffbb49d795ad8d12a4bf141e7af0.tl.png) +![pagsasalin sa Turkish](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png) > pagsasalin sa Turkish -![pagsasalin pabalik sa Ingles](../../../../translated_images/gender-bias-translate-tr-en.4eee7e3cecb8c70e13a8abbc379209bc8032714169e585bdeac75af09b1752aa.tl.png) +![pagsasalin pabalik sa Ingles](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png) > pagsasalin pabalik sa Ingles -Kapag nagdidisenyo at sumusubok ng mga sistema ng AI, kailangan nating tiyakin na ang AI ay patas at hindi naka-program upang gumawa ng mga desisyon na may pagkiling o diskriminasyon, na ipinagbabawal din sa mga tao. Ang pagtiyak ng pagiging patas sa AI at machine learning ay nananatiling isang kumplikadong hamon sa teknolohiya at lipunan. +Kapag nagdidisenyo at sumusubok ng mga sistema ng AI, kailangan nating tiyakin na ang AI ay patas at hindi naka-program upang gumawa ng biased o diskriminatoryong desisyon, na ipinagbabawal din sa mga tao. Ang pagtiyak ng pagiging patas sa AI at machine learning ay nananatiling isang kumplikadong hamon sa teknolohiya at lipunan. ### Pagiging Maaasahan at Kaligtasan -Upang makabuo ng tiwala, ang mga sistema ng AI ay kailangang maging maaasahan, ligtas, at pare-pareho sa normal at hindi inaasahang mga kondisyon. Mahalagang malaman kung paano mag-uugali ang mga sistema ng AI sa iba't ibang sitwasyon, lalo na kapag may mga outliers. Kapag gumagawa ng mga solusyon sa AI, kailangang magbigay ng malaking pansin sa kung paano haharapin ang iba't ibang sitwasyon na maaaring maranasan ng mga solusyon sa AI. Halimbawa, ang isang self-driving na kotse ay kailangang unahin ang kaligtasan ng mga tao. Bilang resulta, ang AI na nagpapatakbo ng kotse ay kailangang isaalang-alang ang lahat ng posibleng sitwasyon na maaaring maranasan ng kotse tulad ng gabi, bagyo, o snowstorm, mga bata na tumatakbo sa kalsada, mga alagang hayop, mga konstruksyon sa kalsada, atbp. Ang kakayahan ng isang sistema ng AI na maayos na makayanan ang malawak na hanay ng mga kondisyon nang maaasahan at ligtas ay sumasalamin sa antas ng anticipation na isinasaalang-alang ng data scientist o AI developer sa disenyo o pagsubok ng sistema. +Upang makabuo ng tiwala, ang mga sistema ng AI ay kailangang maging maaasahan, ligtas, at pare-pareho sa normal at hindi inaasahang mga kondisyon. Mahalagang malaman kung paano mag-uugali ang mga sistema ng AI sa iba't ibang sitwasyon, lalo na kapag may mga outliers. Kapag gumagawa ng mga solusyon sa AI, kailangang magbigay ng malaking pansin sa kung paano haharapin ang iba't ibang sitwasyon na maaaring maranasan ng mga solusyon sa AI. Halimbawa, ang isang self-driving car ay kailangang unahin ang kaligtasan ng mga tao. Bilang resulta, ang AI na nagpapatakbo ng kotse ay kailangang isaalang-alang ang lahat ng posibleng senaryo na maaaring maranasan ng kotse tulad ng gabi, bagyo, o snowstorm, mga bata na tumatakbo sa kalsada, mga alagang hayop, mga konstruksyon sa kalsada, at iba pa. Ang kakayahan ng isang sistema ng AI na maayos na makayanan ang malawak na hanay ng mga kondisyon ay sumasalamin sa antas ng anticipation na isinasaalang-alang ng data scientist o AI developer sa disenyo o pagsubok ng sistema. > [🎥 I-click dito para sa video: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl) -### Inklusyon +### Inklusibidad -Ang mga sistema ng AI ay dapat idisenyo upang makisali at magbigay kapangyarihan sa lahat. Kapag nagdidisenyo at nagpapatupad ng mga sistema ng AI, ang mga data scientist at AI developer ay nagtatakda at tumutugon sa mga potensyal na hadlang sa sistema na maaaring hindi sinasadyang mag-exclude ng mga tao. Halimbawa, mayroong 1 bilyong tao na may kapansanan sa buong mundo. Sa pag-unlad ng AI, mas madali nilang ma-access ang malawak na hanay ng impormasyon at mga oportunidad sa kanilang pang-araw-araw na buhay. Sa pamamagitan ng pagtugon sa mga hadlang, lumilikha ito ng mga oportunidad upang mag-innovate at bumuo ng mga produkto ng AI na may mas mahusay na karanasan na kapaki-pakinabang para sa lahat. +Ang mga sistema ng AI ay dapat idisenyo upang makisali at magbigay kapangyarihan sa lahat. Kapag nagdidisenyo at nagpapatupad ng mga sistema ng AI, ang mga data scientist at AI developer ay tumutukoy at tinutugunan ang mga potensyal na hadlang sa sistema na maaaring hindi sinasadyang mag-exclude ng mga tao. Halimbawa, mayroong 1 bilyong tao na may kapansanan sa buong mundo. Sa pag-unlad ng AI, mas madali nilang ma-access ang malawak na hanay ng impormasyon at mga oportunidad sa kanilang pang-araw-araw na buhay. Sa pamamagitan ng pagtugon sa mga hadlang, nagkakaroon ng pagkakataon na mag-innovate at bumuo ng mga produkto ng AI na may mas mahusay na karanasan na kapaki-pakinabang para sa lahat. > [🎥 I-click dito para sa video: inclusiveness in AI](https://www.microsoft.com/videoplayer/embed/RE4vl9v) ### Seguridad at Privacy -Ang mga sistema ng AI ay dapat maging ligtas at igalang ang privacy ng mga tao. Ang mga tao ay mas kaunti ang tiwala sa mga sistema na naglalagay sa kanilang privacy, impormasyon, o buhay sa panganib. Kapag sinasanay ang mga modelo ng machine learning, umaasa tayo sa datos upang makabuo ng pinakamahusay na resulta. Sa paggawa nito, ang pinagmulan ng datos at integridad ay dapat isaalang-alang. Halimbawa, ang datos ba ay isinumite ng user o pampublikong magagamit? Susunod, habang nagtatrabaho sa datos, mahalagang bumuo ng mga sistema ng AI na maaaring protektahan ang kumpidensyal na impormasyon at labanan ang mga pag-atake. Habang nagiging mas laganap ang AI, ang proteksyon sa privacy at seguridad ng mahalagang personal at impormasyon ng negosyo ay nagiging mas kritikal at kumplikado. Ang mga isyu sa privacy at seguridad ng datos ay nangangailangan ng espesyal na pansin para sa AI dahil ang access sa datos ay mahalaga para sa mga sistema ng AI upang makagawa ng tumpak at may kaalamang mga prediksyon at desisyon tungkol sa mga tao. +Ang mga sistema ng AI ay dapat maging ligtas at igalang ang privacy ng mga tao. Ang mga tao ay mas kaunti ang tiwala sa mga sistema na naglalagay sa kanilang privacy, impormasyon, o buhay sa panganib. Kapag nagsasanay ng mga modelo ng machine learning, umaasa tayo sa data upang makabuo ng pinakamahusay na resulta. Sa paggawa nito, ang pinagmulan ng data at integridad nito ay dapat isaalang-alang. Halimbawa, ang data ba ay isinumite ng user o pampublikong magagamit? Susunod, habang nagtatrabaho sa data, mahalagang bumuo ng mga sistema ng AI na maaaring protektahan ang kumpidensyal na impormasyon at labanan ang mga pag-atake. Habang nagiging mas laganap ang AI, ang pagprotekta sa privacy at pag-secure ng mahalagang personal at impormasyon ng negosyo ay nagiging mas kritikal at kumplikado. Ang mga isyu sa privacy at seguridad ng data ay nangangailangan ng espesyal na pansin para sa AI dahil ang access sa data ay mahalaga para sa mga sistema ng AI upang makagawa ng tumpak at may kaalamang mga hula at desisyon tungkol sa mga tao. > [🎥 I-click dito para sa video: security in AI](https://www.microsoft.com/videoplayer/embed/RE4voJF) -- Bilang isang industriya, nakagawa tayo ng makabuluhang pag-unlad sa Privacy at seguridad, na pinasigla nang malaki ng mga regulasyon tulad ng GDPR (General Data Protection Regulation). -- Gayunpaman, sa mga sistema ng AI, kailangan nating kilalanin ang tensyon sa pagitan ng pangangailangan para sa mas personal na datos upang gawing mas personal at epektibo ang mga sistema – at privacy. -- Tulad ng sa pagsilang ng mga konektadong computer sa internet, nakikita rin natin ang malaking pagtaas sa bilang ng mga isyu sa seguridad na may kaugnayan sa AI. +- Bilang isang industriya, nakagawa tayo ng makabuluhang pag-unlad sa Privacy & Security, na pinasigla ng mga regulasyon tulad ng GDPR (General Data Protection Regulation). +- Gayunpaman, sa mga sistema ng AI, kailangan nating kilalanin ang tensyon sa pagitan ng pangangailangan para sa mas personal na data upang gawing mas personal at epektibo ang mga sistema – at privacy. +- Tulad ng sa pagsilang ng mga konektadong computer sa internet, nakikita rin natin ang malaking pagtaas sa bilang ng mga isyu sa seguridad na nauugnay sa AI. - Kasabay nito, nakikita natin ang AI na ginagamit upang mapabuti ang seguridad. Halimbawa, karamihan sa mga modernong anti-virus scanner ay pinapagana ng AI heuristics ngayon. - Kailangan nating tiyakin na ang ating mga proseso sa Data Science ay maayos na nakikiayon sa pinakabagong mga kasanayan sa privacy at seguridad. ### Transparency -Ang mga sistema ng AI ay dapat naiintindihan. Isang mahalagang bahagi ng transparency ay ang pagpapaliwanag sa pag-uugali ng mga sistema ng AI at ng kanilang mga bahagi. Ang pagpapabuti ng pag-unawa sa mga sistema ng AI ay nangangailangan na maunawaan ng mga stakeholder kung paano at bakit sila gumagana upang matukoy ang mga potensyal na isyu sa pagganap, mga alalahanin sa kaligtasan at privacy, pagkiling, mga eksklusibong kasanayan, o hindi inaasahang resulta. Naniniwala rin kami na ang mga gumagamit ng mga sistema ng AI ay dapat maging tapat at bukas tungkol sa kung kailan, bakit, at paano nila pinipiling i-deploy ang mga ito, pati na rin ang mga limitasyon ng mga sistemang ginagamit nila. Halimbawa, kung ang isang bangko ay gumagamit ng isang sistema ng AI upang suportahan ang mga desisyon sa pagpapautang sa consumer, mahalagang suriin ang mga resulta at maunawaan kung aling datos ang nakakaimpluwensya sa mga rekomendasyon ng sistema. Ang mga pamahalaan ay nagsisimulang mag-regulate ng AI sa iba't ibang industriya, kaya ang mga data scientist at organisasyon ay dapat ipaliwanag kung ang isang sistema ng AI ay nakakatugon sa mga kinakailangan sa regulasyon, lalo na kapag may hindi kanais-nais na resulta. +Ang mga sistema ng AI ay dapat na naiintindihan. Isang mahalagang bahagi ng transparency ay ang pagpapaliwanag sa pag-uugali ng mga sistema ng AI at kanilang mga bahagi. Ang pagpapabuti ng pag-unawa sa mga sistema ng AI ay nangangailangan na maunawaan ng mga stakeholder kung paano at bakit gumagana ang mga ito upang matukoy ang mga potensyal na isyu sa pagganap, mga alalahanin sa kaligtasan at privacy, bias, mga eksklusibong kasanayan, o hindi inaasahang resulta. Naniniwala rin kami na ang mga gumagamit ng mga sistema ng AI ay dapat maging tapat at bukas tungkol sa kung kailan, bakit, at paano nila pinipili na i-deploy ang mga ito, pati na rin ang mga limitasyon ng mga sistemang ginagamit nila. Halimbawa, kung ang isang bangko ay gumagamit ng isang sistema ng AI upang suportahan ang mga desisyon sa pagpapautang sa consumer, mahalagang suriin ang mga resulta at maunawaan kung aling data ang nakakaimpluwensya sa mga rekomendasyon ng sistema. Ang mga gobyerno ay nagsisimulang mag-regulate ng AI sa iba't ibang industriya, kaya ang mga data scientist at organisasyon ay dapat ipaliwanag kung ang isang sistema ng AI ay nakakatugon sa mga kinakailangan sa regulasyon, lalo na kapag may hindi kanais-nais na resulta. > [🎥 I-click dito para sa video: transparency in AI](https://www.microsoft.com/videoplayer/embed/RE4voJF) -- Dahil ang mga sistema ng AI ay napakakomplikado, mahirap maunawaan kung paano sila gumagana at ma-interpret ang mga resulta. -- Ang kakulangan ng pag-unawa na ito ay nakakaapekto sa paraan ng pamamahala, operationalization, at dokumentasyon ng mga sistemang ito. -- Ang kakulangan ng pag-unawa na ito ay mas mahalaga sa mga desisyong ginagawa gamit ang mga resulta na nililikha ng mga sistemang ito. +- Dahil ang mga sistema ng AI ay napakakomplikado, mahirap maunawaan kung paano gumagana ang mga ito at ma-interpret ang mga resulta. +- Ang kakulangan ng pag-unawa na ito ay nakakaapekto sa paraan ng pamamahala, pagpapatakbo, at dokumentasyon ng mga sistemang ito. +- Ang kakulangan ng pag-unawa na ito ay mas mahalaga dahil nakakaapekto ito sa mga desisyon na ginawa gamit ang mga resulta na ginawa ng mga sistemang ito. ### Pananagutan -Ang mga tao na nagdidisenyo at nagde-deploy ng mga sistema ng AI ay dapat managot sa kung paano gumagana ang kanilang mga sistema. Ang pangangailangan para sa pananagutan ay partikular na mahalaga sa mga sensitibong teknolohiya tulad ng facial recognition. Kamakailan, nagkaroon ng lumalaking demand para sa facial recognition technology, lalo na mula sa mga organisasyon ng pagpapatupad ng batas na nakikita ang potensyal ng teknolohiya sa mga gamit tulad ng paghahanap ng mga nawawalang bata. Gayunpaman, ang mga teknolohiyang ito ay maaaring potensyal na gamitin ng isang gobyerno upang ilagay sa panganib ang mga pangunahing kalayaan ng kanilang mga mamamayan, halimbawa, sa pamamagitan ng pagpapagana ng tuloy-tuloy na surveillance ng mga partikular na indibidwal. Kaya, ang mga data scientist at organisasyon ay kailangang maging responsable sa kung paano nakakaapekto ang kanilang sistema ng AI sa mga indibidwal o lipunan. +Ang mga tao na nagdidisenyo at nag-deploy ng mga sistema ng AI ay dapat managot sa kung paano gumagana ang kanilang mga sistema. Ang pangangailangan para sa pananagutan ay partikular na mahalaga sa mga sensitibong teknolohiya tulad ng facial recognition. Kamakailan, nagkaroon ng lumalaking demand para sa facial recognition technology, lalo na mula sa mga organisasyon ng pagpapatupad ng batas na nakikita ang potensyal ng teknolohiya sa mga gamit tulad ng paghahanap ng mga nawawalang bata. Gayunpaman, ang mga teknolohiyang ito ay maaaring potensyal na gamitin ng isang gobyerno upang ilagay sa panganib ang mga pangunahing kalayaan ng kanilang mga mamamayan, halimbawa, sa pamamagitan ng pagpapagana ng tuloy-tuloy na surveillance ng mga partikular na indibidwal. Kaya, ang mga data scientist at organisasyon ay kailangang maging responsable sa kung paano nakakaapekto ang kanilang sistema ng AI sa mga indibidwal o lipunan. -[![Nangungunang Mananaliksik ng AI Nagbabala Tungkol sa Mass Surveillance sa Pamamagitan ng Facial Recognition](../../../../translated_images/accountability.41d8c0f4b85b6231301d97f17a450a805b7a07aaeb56b34015d71c757cad142e.tl.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft's Approach to Responsible AI") +[![Leading AI Researcher Warns of Mass Surveillance Through Facial Recognition](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft's Approach to Responsible AI") -> 🎥 I-click ang imahe sa itaas para sa video: Mga Babala Tungkol sa Mass Surveillance sa Pamamagitan ng Facial Recognition +> 🎥 I-click ang imahe sa itaas para sa video: Warnings of Mass Surveillance Through Facial Recognition -Sa huli, isa sa pinakamalaking tanong para sa ating henerasyon, bilang unang henerasyon na nagdadala ng AI sa lipunan, ay kung paano masisiguro na ang mga computer ay mananatiling mananagot sa mga tao at kung paano masisiguro na ang mga tao na nagdidisenyo ng mga computer ay mananatiling mananagot sa lahat. +Sa huli, isa sa pinakamalaking tanong para sa ating henerasyon, bilang unang henerasyon na nagdadala ng AI sa lipunan, ay kung paano masisiguro na ang mga computer ay mananatiling accountable sa mga tao at kung paano masisiguro na ang mga tao na nagdidisenyo ng mga computer ay mananatiling accountable sa lahat. ## Pagtatasa ng Epekto -Bago sanayin ang isang modelo ng machine learning, mahalagang magsagawa ng pagtatasa ng epekto upang maunawaan ang layunin ng sistema ng AI; kung ano ang nilalayong paggamit nito; kung saan ito ide-deploy; at sino ang makikipag-ugnayan sa sistema. Ang mga ito ay kapaki-pakinabang para sa mga tagasuri o tester na sinusuri ang sistema upang malaman kung anong mga salik ang dapat isaalang-alang kapag tinutukoy ang mga potensyal na panganib at inaasahang kahihinatnan. +Bago sanayin ang isang modelo ng machine learning, mahalagang magsagawa ng impact assessment upang maunawaan ang layunin ng sistema ng AI; kung ano ang nilalayong paggamit nito; kung saan ito ide-deploy; at sino ang makikipag-ugnayan sa sistema. Ang mga ito ay kapaki-pakinabang para sa reviewer(s) o tester na nag-evaluate sa sistema upang malaman kung anong mga salik ang dapat isaalang-alang kapag tinutukoy ang mga potensyal na panganib at inaasahang kahihinatnan. -Ang mga sumusunod ay mga lugar ng pokus kapag nagsasagawa ng pagtatasa ng epekto: +Ang mga sumusunod ay mga lugar ng pokus kapag nagsasagawa ng impact assessment: -* **Masamang epekto sa mga indibidwal**. Ang pagiging maalam sa anumang mga limitasyon o kinakailangan, hindi suportadong paggamit, o anumang kilalang limitasyon na humahadlang sa pagganap ng sistema ay mahalaga upang matiyak na ang sistema ay hindi ginagamit sa paraang maaaring magdulot ng pinsala sa mga indibidwal. -* **Mga kinakailangan sa datos**. Ang pagkuha ng pag-unawa sa kung paano at saan gagamitin ng sistema ang datos ay nagbibigay-daan sa mga tagasuri na tuklasin ang anumang mga kinakailangan sa datos na dapat mong tandaan (hal., GDPR o HIPPA na mga regulasyon sa datos). Bukod pa rito, suriin kung ang pinagmulan o dami ng datos ay sapat para sa pagsasanay. -* **Buod ng epekto**. Magtipon ng listahan ng mga potensyal na pinsala na maaaring lumitaw mula sa paggamit ng sistema. Sa buong lifecycle ng ML, suriin kung ang mga isyung natukoy ay nabawasan o natugunan. +* **Masamang epekto sa mga indibidwal**. Ang pagiging maalam sa anumang limitasyon o kinakailangan, hindi suportadong paggamit, o anumang kilalang limitasyon na humahadlang sa pagganap ng sistema ay mahalaga upang matiyak na ang sistema ay hindi ginagamit sa paraang maaaring magdulot ng pinsala sa mga indibidwal. +* **Mga kinakailangan sa data**. Ang pag-unawa kung paano at saan gagamitin ng sistema ang data ay nagbibigay-daan sa mga reviewer na tuklasin ang anumang mga kinakailangan sa data na dapat mong tandaan (hal., GDPR o HIPPA data regulations). Bukod dito, suriin kung ang pinagmulan o dami ng data ay sapat para sa pagsasanay. +* **Buod ng epekto**. Magtipon ng listahan ng mga potensyal na pinsala na maaaring lumitaw mula sa paggamit ng sistema. Sa buong lifecycle ng ML, suriin kung ang mga isyung natukoy ay naibsan o natugunan. * **Mga naaangkop na layunin** para sa bawat isa sa anim na pangunahing prinsipyo. Suriin kung ang mga layunin mula sa bawat prinsipyo ay natutugunan at kung mayroong anumang mga puwang. -## Pag-debug gamit ang Responsable AI +## Pag-debug gamit ang Responsible AI -Katulad ng pag-debug ng isang software application, ang pag-debug ng isang sistema ng AI ay isang kinakailangang proseso ng pagtukoy at paglutas ng mga isyu sa sistema. Maraming mga salik ang maaaring makaapekto sa isang modelo na hindi gumagana ayon sa inaasahan o responsable. Karamihan sa mga tradisyunal na sukatan ng pagganap ng modelo ay mga dami ng aggregate ng pagganap ng modelo, na hindi sapat upang suriin kung paano nilalabag ng isang modelo ang mga prinsipyo ng responsable AI. Bukod pa rito, ang isang modelo ng machine learning ay isang black box na nagpapahirap na maunawaan kung ano ang nagdudulot ng resulta nito o magbigay ng paliwanag kapag ito ay nagkamali. Sa susunod na bahagi ng kursong ito, matutunan natin kung paano gamitin ang Responsible AI dashboard upang makatulong sa pag-debug ng mga sistema ng AI. Ang dashboard ay nagbibigay ng holistic na tool para sa mga data scientist at AI developer upang magsagawa ng: +Katulad ng pag-debug ng isang software application, ang pag-debug ng isang sistema ng AI ay isang kinakailangang proseso ng pagtukoy at paglutas ng mga isyu sa sistema. Maraming mga salik ang maaaring makaapekto sa isang modelo na hindi gumagana ayon sa inaasahan o responsable. Karamihan sa mga tradisyunal na sukatan ng pagganap ng modelo ay mga dami ng aggregate ng pagganap ng modelo, na hindi sapat upang suriin kung paano nilalabag ng isang modelo ang mga prinsipyo ng Responsible AI. Bukod dito, ang isang modelo ng machine learning ay isang black box na nagpapahirap na maunawaan kung ano ang nagdudulot ng resulta nito o magbigay ng paliwanag kapag nagkamali ito. Sa susunod na bahagi ng kursong ito, matutunan natin kung paano gamitin ang Responsible AI dashboard upang makatulong sa pag-debug ng mga sistema ng AI. Ang dashboard ay nagbibigay ng holistic na tool para sa mga data scientist at AI developer upang magsagawa ng: -* **Pagsusuri ng error**. Upang matukoy ang pamamahagi ng error ng modelo na maaaring makaapekto sa pagiging patas o pagiging maaasahan ng sistema. -* **Pangkalahatang-ideya ng modelo**. Upang matuklasan kung saan may mga pagkakaiba sa pagganap ng modelo sa iba't ibang data cohorts. -* **Pagsusuri ng datos**. Upang maunawaan ang pamamahagi ng datos at matukoy ang anumang potensyal na pagkiling sa datos na maaaring magdulot ng mga isyu sa -Sa araling ito, natutunan mo ang ilang mga pangunahing konsepto ng pagiging patas at hindi patas sa machine learning. +* **Error analysis**. Upang matukoy ang pamamahagi ng error ng modelo na maaaring makaapekto sa pagiging patas o pagiging maaasahan ng sistema. +* **Model overview**. Upang matuklasan kung saan may mga pagkakaiba sa pagganap ng modelo sa iba't ibang data cohorts. +* **Data analysis**. Upang maunawaan ang pamamahagi ng data at matukoy ang anumang potensyal na bias sa data na maaaring magdulot ng mga isyu sa pagiging patas, inklusibidad, at pagiging maaasahan. +* **Model interpretability**. Upang maunawaan kung ano ang nakakaapekto o nakakaimpluwensya sa mga hula ng modelo. Nakakatulong ito sa pagpapaliwanag ng pag-uugali ng modelo, na mahalaga para sa transparency at pananagutan. -Panoorin ang workshop na ito para mas malalim na talakayin ang mga paksa: +## 🚀 Hamon -- Sa paghahangad ng responsableng AI: Pagdadala ng mga prinsipyo sa praktika nina Besmira Nushi, Mehrnoosh Sameki, at Amit Sharma +Upang maiwasan ang mga pinsala na maipakilala sa +Panoorin ang workshop na ito para mas maintindihan ang mga paksa: -[![Responsible AI Toolbox: Isang open-source framework para sa paggawa ng responsableng AI](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Isang open-source framework para sa paggawa ng responsableng AI") +- Sa paghahangad ng responsableng AI: Paglalapat ng mga prinsipyo sa praktika nina Besmira Nushi, Mehrnoosh Sameki, at Amit Sharma +[![Responsible AI Toolbox: Isang open-source framework para sa paggawa ng responsableng AI](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Isang open-source framework para sa paggawa ng responsableng AI") > 🎥 I-click ang imahe sa itaas para sa video: RAI Toolbox: Isang open-source framework para sa paggawa ng responsableng AI nina Besmira Nushi, Mehrnoosh Sameki, at Amit Sharma -Basahin din: +Basahin din: -- Resource center ng Microsoft para sa RAI: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) +- Resource center ng Microsoft para sa RAI: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) -- FATE research group ng Microsoft: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) +- FATE research group ng Microsoft: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) -RAI Toolbox: +RAI Toolbox: - [Responsible AI Toolbox GitHub repository](https://github.com/microsoft/responsible-ai-toolbox) -Basahin ang tungkol sa mga tool ng Azure Machine Learning para matiyak ang pagiging patas: +Basahin ang tungkol sa mga tools ng Azure Machine Learning para masiguro ang pagiging patas: -- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) +- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) -## Takdang-Aralin +## Gawain [Galugarin ang RAI Toolbox](assignment.md) --- **Paunawa**: -Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file +Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file diff --git a/translations/tl/1-Introduction/4-techniques-of-ML/README.md b/translations/tl/1-Introduction/4-techniques-of-ML/README.md index 564848f1..cfd9f8d1 100644 --- a/translations/tl/1-Introduction/4-techniques-of-ML/README.md +++ b/translations/tl/1-Introduction/4-techniques-of-ML/README.md @@ -1,132 +1,132 @@ -# Mga Teknik sa Machine Learning +# Mga Teknik ng Machine Learning -Ang proseso ng pagbuo, paggamit, at pagpapanatili ng mga modelo ng machine learning at ang datos na ginagamit ng mga ito ay ibang-iba sa maraming iba pang mga workflow ng pag-develop. Sa araling ito, ating lilinawin ang prosesong ito at ilalahad ang mga pangunahing teknik na kailangan mong malaman. Ikaw ay: +Ang proseso ng pagbuo, paggamit, at pagpapanatili ng mga modelo ng machine learning at ang datos na ginagamit nito ay ibang-iba kumpara sa maraming iba pang mga workflow ng pag-develop. Sa araling ito, lilinawin natin ang proseso at ilalahad ang mga pangunahing teknik na kailangan mong malaman. Ikaw ay: -- Mauunawaan ang mga prosesong bumubuo sa machine learning sa mataas na antas. -- Tuklasin ang mga pangunahing konsepto tulad ng 'mga modelo', 'mga prediksyon', at 'training data'. +- Mauunawaan ang mga proseso sa likod ng machine learning sa mataas na antas. +- Susuriin ang mga pangunahing konsepto tulad ng 'mga modelo', 'mga prediksyon', at 'training data'. -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/7/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -[![ML para sa mga baguhan - Mga Teknik sa Machine Learning](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML para sa mga baguhan - Mga Teknik sa Machine Learning") +[![ML para sa mga baguhan - Mga Teknik ng Machine Learning](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML para sa mga baguhan - Mga Teknik ng Machine Learning") -> 🎥 I-click ang larawan sa itaas para sa isang maikling video na nagpapaliwanag ng araling ito. +> 🎥 I-click ang imahe sa itaas para sa isang maikling video na tumatalakay sa araling ito. ## Panimula Sa mataas na antas, ang sining ng paglikha ng mga proseso ng machine learning (ML) ay binubuo ng ilang mga hakbang: -1. **Magdesisyon sa tanong**. Karamihan sa mga proseso ng ML ay nagsisimula sa pagtatanong ng isang tanong na hindi kayang sagutin ng isang simpleng conditional program o rules-based engine. Ang mga tanong na ito ay madalas na umiikot sa mga prediksyon batay sa koleksyon ng datos. -2. **Kolektahin at ihanda ang datos**. Upang masagot ang iyong tanong, kailangan mo ng datos. Ang kalidad at, kung minsan, ang dami ng iyong datos ang magtatakda kung gaano kahusay mong masasagot ang iyong tanong. Ang pag-visualize ng datos ay mahalagang aspeto ng yugtong ito. Kasama rin dito ang paghahati ng datos sa training at testing group upang makabuo ng modelo. -3. **Pumili ng paraan ng pagsasanay**. Depende sa iyong tanong at sa kalikasan ng iyong datos, kailangan mong pumili kung paano mo gustong sanayin ang isang modelo upang pinakamahusay na maipakita ang datos at makagawa ng tumpak na prediksyon. -4. **Sanayin ang modelo**. Gamit ang iyong training data, gagamit ka ng iba't ibang algorithm upang sanayin ang isang modelo na makilala ang mga pattern sa datos. Ang modelo ay maaaring gumamit ng internal weights na maaaring ayusin upang bigyang-priyoridad ang ilang bahagi ng datos kaysa sa iba upang makabuo ng mas mahusay na modelo. -5. **Suriin ang modelo**. Gamit ang datos na hindi pa nakikita (iyong testing data) mula sa iyong nakolektang set, susuriin mo kung paano gumagana ang modelo. -6. **Pag-tune ng mga parameter**. Batay sa performance ng iyong modelo, maaari mong ulitin ang proseso gamit ang iba't ibang mga parameter o variable na kumokontrol sa kilos ng mga algorithm na ginamit sa pagsasanay ng modelo. -7. **Mag-predict**. Gumamit ng bagong input upang subukan ang katumpakan ng iyong modelo. +1. **Magpasya sa tanong**. Karamihan sa mga proseso ng ML ay nagsisimula sa pagtatanong ng tanong na hindi masagot ng simpleng conditional program o rules-based engine. Ang mga tanong na ito ay madalas na umiikot sa mga prediksyon batay sa koleksyon ng datos. +2. **Kolektahin at ihanda ang datos**. Upang masagot ang iyong tanong, kailangan mo ng datos. Ang kalidad at, minsan, dami ng iyong datos ang magtatakda kung gaano kahusay mong masasagot ang iyong tanong. Ang pag-visualize ng datos ay mahalagang aspeto ng yugtong ito. Kasama rin dito ang paghahati ng datos sa training at testing group upang makabuo ng modelo. +3. **Pumili ng paraan ng training**. Depende sa iyong tanong at sa likas na katangian ng iyong datos, kailangan mong pumili kung paano mo gustong i-train ang modelo upang pinakamahusay na maipakita ang datos at makagawa ng tumpak na prediksyon. Ang bahaging ito ng proseso ng ML ay nangangailangan ng tiyak na kadalubhasaan at, madalas, maraming eksperimento. +4. **I-train ang modelo**. Gamit ang iyong training data, gagamit ka ng iba't ibang algorithm upang i-train ang modelo na makilala ang mga pattern sa datos. Ang modelo ay maaaring gumamit ng internal weights na maaaring i-adjust upang bigyang-priyoridad ang ilang bahagi ng datos kaysa sa iba upang makabuo ng mas mahusay na modelo. +5. **Suriin ang modelo**. Gagamit ka ng datos na hindi pa nakikita (ang iyong testing data) mula sa nakolektang set upang makita kung paano gumagana ang modelo. +6. **Parameter tuning**. Batay sa performance ng iyong modelo, maaari mong ulitin ang proseso gamit ang iba't ibang parameter o variable na kumokontrol sa pag-uugali ng mga algorithm na ginamit upang i-train ang modelo. +7. **Mag-predict**. Gumamit ng bagong inputs upang subukan ang katumpakan ng iyong modelo. ## Anong tanong ang dapat itanong -Ang mga computer ay partikular na mahusay sa pagtuklas ng mga nakatagong pattern sa datos. Ang kakayahang ito ay napakahalaga para sa mga mananaliksik na may mga tanong tungkol sa isang partikular na larangan na hindi madaling masagot sa pamamagitan ng paggawa ng isang conditionally-based rules engine. Halimbawa, sa isang actuarial na gawain, maaaring makabuo ang isang data scientist ng mga handcrafted rules tungkol sa mortality ng mga naninigarilyo kumpara sa mga hindi naninigarilyo. +Ang mga computer ay partikular na mahusay sa pagtuklas ng mga nakatagong pattern sa datos. Ang kakayahang ito ay napakahalaga para sa mga mananaliksik na may mga tanong tungkol sa isang partikular na larangan na hindi madaling masagot sa pamamagitan ng paggawa ng conditionally-based rules engine. Halimbawa, sa isang actuarial na gawain, maaaring makagawa ang isang data scientist ng mga handcrafted rules tungkol sa mortality ng mga naninigarilyo kumpara sa mga hindi naninigarilyo. -Kapag maraming iba pang mga variable ang isinama sa equation, gayunpaman, maaaring mas mahusay ang isang ML model sa pag-predict ng mga hinaharap na mortality rate batay sa nakaraang kasaysayan ng kalusugan. Isang mas masayang halimbawa ay ang paggawa ng prediksyon ng panahon para sa buwan ng Abril sa isang partikular na lugar batay sa datos na kinabibilangan ng latitude, longitude, pagbabago ng klima, kalapitan sa dagat, mga pattern ng jet stream, at iba pa. +Kapag maraming iba pang variable ang isinama sa equation, gayunpaman, maaaring mas epektibo ang isang ML model sa pag-predict ng mga future mortality rates batay sa nakaraang health history. Isang mas masayang halimbawa ay ang paggawa ng mga prediksyon sa panahon para sa buwan ng Abril sa isang partikular na lokasyon batay sa datos na kinabibilangan ng latitude, longitude, climate change, proximity sa dagat, mga pattern ng jet stream, at iba pa. -✅ Ang [slide deck](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) na ito tungkol sa mga modelo ng panahon ay nagbibigay ng isang historikal na perspektibo sa paggamit ng ML sa pagsusuri ng panahon. +✅ Ang [slide deck](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) na ito tungkol sa mga weather models ay nagbibigay ng historical na perspektibo sa paggamit ng ML sa pagsusuri ng panahon. -## Mga Gawain Bago ang Pagbuo +## Mga Gawain Bago Magbuo -Bago magsimula sa pagbuo ng iyong modelo, may ilang mga gawain na kailangan mong kumpletuhin. Upang masubukan ang iyong tanong at makabuo ng hypothesis batay sa mga prediksyon ng modelo, kailangan mong tukuyin at i-configure ang ilang mga elemento. +Bago simulan ang pagbuo ng iyong modelo, may ilang mga gawain na kailangan mong tapusin. Upang masubukan ang iyong tanong at bumuo ng hypothesis batay sa mga prediksyon ng modelo, kailangan mong tukuyin at i-configure ang ilang elemento. ### Datos -Upang masagot ang iyong tanong nang may katiyakan, kailangan mo ng sapat na dami ng datos na may tamang uri. Dalawang bagay ang kailangan mong gawin sa puntong ito: +Upang masagot ang iyong tanong nang may katiyakan, kailangan mo ng sapat na dami ng datos na may tamang uri. May dalawang bagay na kailangan mong gawin sa puntong ito: -- **Kolektahin ang datos**. Tandaan ang nakaraang aralin tungkol sa pagiging patas sa pagsusuri ng datos, kolektahin ang iyong datos nang maingat. Maging mulat sa mga pinagmulan ng datos na ito, anumang likas na bias na maaaring mayroon ito, at idokumento ang pinagmulan nito. -- **Ihanda ang datos**. May ilang mga hakbang sa proseso ng paghahanda ng datos. Maaaring kailanganin mong pagsama-samahin ang datos at gawing normal ito kung ito ay nagmula sa iba't ibang mga pinagmulan. Maaari mong pagandahin ang kalidad at dami ng datos sa pamamagitan ng iba't ibang mga pamamaraan tulad ng pag-convert ng mga string sa mga numero (tulad ng ginagawa natin sa [Clustering](../../5-Clustering/1-Visualize/README.md)). Maaari ka ring bumuo ng bagong datos batay sa orihinal (tulad ng ginagawa natin sa [Classification](../../4-Classification/1-Introduction/README.md)). Maaari mong linisin at i-edit ang datos (tulad ng gagawin natin bago ang [Web App](../../3-Web-App/README.md) na aralin). Sa wakas, maaaring kailanganin mo ring i-randomize at i-shuffle ito, depende sa iyong mga teknik sa pagsasanay. +- **Kolektahin ang datos**. Tandaan ang nakaraang aralin tungkol sa fairness sa data analysis, kolektahin ang iyong datos nang maingat. Maging aware sa mga pinagmulan ng datos na ito, anumang inherent biases na maaaring mayroon ito, at i-dokumento ang pinagmulan nito. +- **Ihanda ang datos**. May ilang hakbang sa proseso ng paghahanda ng datos. Maaaring kailanganin mong pagsamahin ang datos at i-normalize ito kung ito ay galing sa iba't ibang pinagmulan. Maaari mong pagandahin ang kalidad at dami ng datos sa pamamagitan ng iba't ibang paraan tulad ng pag-convert ng strings sa numbers (tulad ng ginagawa natin sa [Clustering](../../5-Clustering/1-Visualize/README.md)). Maaari ka ring bumuo ng bagong datos batay sa orihinal (tulad ng ginagawa natin sa [Classification](../../4-Classification/1-Introduction/README.md)). Maaari mong linisin at i-edit ang datos (tulad ng gagawin natin bago ang [Web App](../../3-Web-App/README.md) na aralin). Sa huli, maaaring kailanganin mo ring i-randomize at i-shuffle ito, depende sa iyong training techniques. -✅ Pagkatapos kolektahin at iproseso ang iyong datos, maglaan ng sandali upang tingnan kung ang hugis nito ay magpapahintulot sa iyo na tugunan ang iyong nilalayong tanong. Maaaring ang datos ay hindi magiging mahusay sa iyong ibinigay na gawain, tulad ng natuklasan natin sa aming mga aralin sa [Clustering](../../5-Clustering/1-Visualize/README.md)! +✅ Pagkatapos kolektahin at iproseso ang iyong datos, maglaan ng sandali upang tingnan kung ang hugis nito ay magpapahintulot sa iyo na tugunan ang iyong nilalayong tanong. Maaaring ang datos ay hindi mag-perform nang maayos sa iyong ibinigay na gawain, tulad ng natuklasan natin sa aming [Clustering](../../5-Clustering/1-Visualize/README.md) na mga aralin! ### Mga Feature at Target -Ang isang [feature](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) ay isang nasusukat na katangian ng iyong datos. Sa maraming dataset, ito ay ipinapahayag bilang isang heading ng column tulad ng 'petsa', 'laki', o 'kulay'. Ang iyong feature variable, na karaniwang kinakatawan bilang `X` sa code, ay kumakatawan sa input variable na gagamitin upang sanayin ang modelo. +Ang [feature](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) ay isang masusukat na katangian ng iyong datos. Sa maraming datasets, ito ay ipinapahayag bilang isang column heading tulad ng 'date', 'size', o 'color'. Ang iyong feature variable, karaniwang kinakatawan bilang `X` sa code, ay kumakatawan sa input variable na gagamitin upang i-train ang modelo. -Ang target ay ang bagay na sinusubukan mong hulaan. Ang target, na karaniwang kinakatawan bilang `y` sa code, ay kumakatawan sa sagot sa tanong na sinusubukan mong itanong sa iyong datos: sa Disyembre, anong **kulay** ng mga kalabasa ang magiging pinakamura? Sa San Francisco, aling mga kapitbahayan ang magkakaroon ng pinakamahusay na **presyo** ng real estate? Minsan ang target ay tinutukoy din bilang label attribute. +Ang target ay ang bagay na sinusubukan mong i-predict. Ang target, karaniwang kinakatawan bilang `y` sa code, ay kumakatawan sa sagot sa tanong na sinusubukan mong itanong sa iyong datos: sa Disyembre, anong **kulay** ng mga kalabasa ang magiging pinakamura? Sa San Francisco, anong mga kapitbahayan ang magkakaroon ng pinakamagandang presyo ng **real estate**? Minsan ang target ay tinutukoy din bilang label attribute. ### Pagpili ng iyong feature variable -🎓 **Feature Selection at Feature Extraction** Paano mo malalaman kung aling variable ang pipiliin kapag bumubuo ng isang modelo? Malamang na dadaan ka sa isang proseso ng feature selection o feature extraction upang piliin ang tamang mga variable para sa pinaka-performant na modelo. Hindi sila pareho: "Ang feature extraction ay lumilikha ng mga bagong feature mula sa mga function ng orihinal na mga feature, samantalang ang feature selection ay nagbabalik ng isang subset ng mga feature." ([source](https://wikipedia.org/wiki/Feature_selection)) +🎓 **Feature Selection at Feature Extraction** Paano mo malalaman kung aling variable ang pipiliin kapag bumubuo ng modelo? Malamang na dadaan ka sa proseso ng feature selection o feature extraction upang piliin ang tamang mga variable para sa pinaka-performant na modelo. Hindi sila pareho: "Ang feature extraction ay lumilikha ng mga bagong feature mula sa mga function ng orihinal na mga feature, samantalang ang feature selection ay nagbabalik ng subset ng mga feature." ([source](https://wikipedia.org/wiki/Feature_selection)) ### I-visualize ang iyong datos -Isang mahalagang aspeto ng toolkit ng isang data scientist ay ang kakayahang i-visualize ang datos gamit ang ilang magagaling na library tulad ng Seaborn o MatPlotLib. Ang pagre-representa ng iyong datos nang biswal ay maaaring magpahintulot sa iyo na matuklasan ang mga nakatagong ugnayan na maaari mong magamit. Ang iyong mga visualization ay maaari ring makatulong sa iyo na matuklasan ang bias o hindi balanseng datos (tulad ng natuklasan natin sa [Classification](../../4-Classification/2-Classifiers-1/README.md)). +Isang mahalagang aspeto ng toolkit ng data scientist ay ang kakayahang i-visualize ang datos gamit ang ilang magagaling na libraries tulad ng Seaborn o MatPlotLib. Ang pag-representa ng iyong datos nang biswal ay maaaring magbigay-daan sa iyo upang matuklasan ang mga nakatagong correlation na maaari mong magamit. Ang iyong mga visualization ay maaari ring makatulong sa iyo na matuklasan ang bias o hindi balanseng datos (tulad ng natuklasan natin sa [Classification](../../4-Classification/2-Classifiers-1/README.md)). ### Hatiin ang iyong dataset -Bago ang pagsasanay, kailangan mong hatiin ang iyong dataset sa dalawa o higit pang bahagi na may hindi pantay na laki ngunit mahusay pa ring kumakatawan sa datos. +Bago mag-training, kailangan mong hatiin ang iyong dataset sa dalawa o higit pang bahagi na may hindi pantay na laki ngunit mahusay na kumakatawan sa datos. -- **Training**. Ang bahaging ito ng dataset ay ginagamit upang sanayin ang iyong modelo. Ang set na ito ay bumubuo ng karamihan ng orihinal na dataset. -- **Testing**. Ang test dataset ay isang independiyenteng grupo ng datos, madalas na kinuha mula sa orihinal na datos, na ginagamit mo upang kumpirmahin ang performance ng nabuo na modelo. -- **Validating**. Ang validation set ay isang mas maliit na independiyenteng grupo ng mga halimbawa na ginagamit mo upang i-tune ang mga hyperparameter ng modelo, o ang arkitektura nito, upang mapabuti ang modelo. Depende sa laki ng iyong datos at sa tanong na iyong tinatanong, maaaring hindi mo kailangang bumuo ng ikatlong set na ito (tulad ng nabanggit natin sa [Time Series Forecasting](../../7-TimeSeries/1-Introduction/README.md)). +- **Training**. Ang bahaging ito ng dataset ay ginagamit upang i-fit ang iyong modelo para i-train ito. Ang set na ito ay bumubuo ng karamihan ng orihinal na dataset. +- **Testing**. Ang test dataset ay isang independiyenteng grupo ng datos, madalas na kinukuha mula sa orihinal na datos, na ginagamit mo upang kumpirmahin ang performance ng nabuo na modelo. +- **Validating**. Ang validation set ay isang mas maliit na independiyenteng grupo ng mga halimbawa na ginagamit mo upang i-tune ang hyperparameters o architecture ng modelo upang mapabuti ito. Depende sa laki ng iyong datos at sa tanong na iyong tinatanong, maaaring hindi mo kailangan bumuo ng pangatlong set (tulad ng nabanggit natin sa [Time Series Forecasting](../../7-TimeSeries/1-Introduction/README.md)). -## Pagbuo ng isang modelo +## Pagbuo ng Modelo -Gamit ang iyong training data, ang iyong layunin ay bumuo ng isang modelo, o isang estadistikal na representasyon ng iyong datos, gamit ang iba't ibang algorithm upang **sanayin** ito. Ang pagsasanay ng isang modelo ay inilalantad ito sa datos at hinahayaan itong gumawa ng mga hinuha tungkol sa mga pattern na natuklasan, napatunayan, at tinanggap o tinanggihan. +Gamit ang iyong training data, ang layunin mo ay bumuo ng modelo, o isang statistical na representasyon ng iyong datos, gamit ang iba't ibang algorithm upang **i-train** ito. Ang pag-train ng modelo ay inilalantad ito sa datos at nagbibigay-daan dito upang gumawa ng mga assumption tungkol sa mga pattern na natuklasan, na-validate, at tinanggap o tinanggihan. -### Magdesisyon sa paraan ng pagsasanay +### Magpasya sa paraan ng training -Depende sa iyong tanong at sa kalikasan ng iyong datos, pipili ka ng paraan upang sanayin ito. Sa pamamagitan ng pagdaan sa [Scikit-learn's documentation](https://scikit-learn.org/stable/user_guide.html) - na ginagamit natin sa kursong ito - maaari mong tuklasin ang maraming paraan upang sanayin ang isang modelo. Depende sa iyong karanasan, maaaring kailanganin mong subukan ang ilang iba't ibang mga paraan upang makabuo ng pinakamahusay na modelo. Malamang na dadaan ka sa isang proseso kung saan sinusuri ng mga data scientist ang performance ng isang modelo sa pamamagitan ng pagpapakain dito ng hindi pa nakikitang datos, sinusuri ang katumpakan, bias, at iba pang mga isyung nagpapababa ng kalidad, at pinipili ang pinakaangkop na paraan ng pagsasanay para sa gawain. +Depende sa iyong tanong at sa likas na katangian ng iyong datos, pipili ka ng paraan upang i-train ito. Sa pamamagitan ng pagdaan sa [Scikit-learn's documentation](https://scikit-learn.org/stable/user_guide.html) - na ginagamit natin sa kursong ito - maaari mong tuklasin ang maraming paraan upang i-train ang modelo. Depende sa iyong karanasan, maaaring kailanganin mong subukan ang ilang iba't ibang paraan upang makabuo ng pinakamahusay na modelo. Malamang na dadaan ka sa proseso kung saan ang mga data scientist ay sinusuri ang performance ng modelo sa pamamagitan ng pagpapakain dito ng unseen data, pag-check ng accuracy, bias, at iba pang mga isyung nakakasira ng kalidad, at pagpili ng pinaka-angkop na paraan ng training para sa gawain. -### Sanayin ang isang modelo +### I-train ang modelo -Gamit ang iyong training data, handa ka nang 'i-fit' ito upang lumikha ng isang modelo. Mapapansin mo na sa maraming ML library, makikita mo ang code na 'model.fit' - sa puntong ito mo ipapadala ang iyong feature variable bilang isang array ng mga halaga (karaniwang 'X') at isang target variable (karaniwang 'y'). +Gamit ang iyong training data, handa ka nang 'i-fit' ito upang lumikha ng modelo. Mapapansin mo na sa maraming ML libraries, makikita mo ang code na 'model.fit' - sa oras na ito mo ipapadala ang iyong feature variable bilang isang array ng mga halaga (karaniwang 'X') at isang target variable (karaniwang 'y'). ### Suriin ang modelo -Kapag natapos na ang proseso ng pagsasanay (maaari itong tumagal ng maraming pag-ulit, o 'epochs', upang sanayin ang isang malaking modelo), magagawa mong suriin ang kalidad ng modelo sa pamamagitan ng paggamit ng test data upang masukat ang performance nito. Ang datos na ito ay isang subset ng orihinal na datos na hindi pa nasusuri ng modelo. Maaari kang mag-print ng isang talahanayan ng mga sukatan tungkol sa kalidad ng iyong modelo. +Kapag natapos na ang proseso ng training (maaari itong tumagal ng maraming iterations, o 'epochs', upang i-train ang malaking modelo), magagawa mong suriin ang kalidad ng modelo sa pamamagitan ng paggamit ng test data upang sukatin ang performance nito. Ang datos na ito ay isang subset ng orihinal na datos na hindi pa nasuri ng modelo. Maaari kang mag-print ng isang table ng metrics tungkol sa kalidad ng iyong modelo. 🎓 **Model fitting** -Sa konteksto ng machine learning, ang model fitting ay tumutukoy sa katumpakan ng pinagbabatayang function ng modelo habang sinusubukan nitong suriin ang datos na hindi nito pamilyar. +Sa konteksto ng machine learning, ang model fitting ay tumutukoy sa katumpakan ng underlying function ng modelo habang sinusubukan nitong suriin ang datos na hindi nito pamilyar. -🎓 Ang **underfitting** at **overfitting** ay mga karaniwang problema na nagpapababa sa kalidad ng modelo, dahil ang modelo ay maaaring hindi sapat ang pagkaka-fit o masyadong fit. Nagdudulot ito ng modelo na gumawa ng mga prediksyon na masyadong malapit o masyadong malayo sa pagkakahanay sa training data nito. Ang isang overfit na modelo ay masyadong mahusay sa pag-predict ng training data dahil natutunan nito nang husto ang mga detalye at ingay ng datos. Ang isang underfit na modelo ay hindi tumpak dahil hindi nito kayang suriin nang maayos ang training data nito o ang datos na hindi pa nito 'nakikita'. +🎓 Ang **Underfitting** at **Overfitting** ay mga karaniwang problema na nakakasira sa kalidad ng modelo, kung saan ang modelo ay hindi sapat na mahusay o masyadong mahusay. Nagdudulot ito ng modelo na gumawa ng mga prediksyon na masyadong malapit o masyadong maluwag na nakahanay sa training data nito. Ang overfit na modelo ay masyadong mahusay sa pag-predict ng training data dahil natutunan nito ang mga detalye at ingay ng datos nang sobra. Ang underfit na modelo ay hindi tumpak dahil hindi nito maayos na masuri ang training data nito o ang datos na hindi pa nito 'nakikita'. -![overfitting model](../../../../translated_images/overfitting.1c132d92bfd93cb63240baf63ebdf82c30e30a0a44e1ad49861b82ff600c2b5c.tl.png) +![overfitting model](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png) > Infographic ni [Jen Looper](https://twitter.com/jenlooper) -## Pag-tune ng mga parameter +## Parameter tuning -Kapag natapos na ang iyong unang pagsasanay, obserbahan ang kalidad ng modelo at isaalang-alang ang pagpapabuti nito sa pamamagitan ng pag-tweak ng mga 'hyperparameter'. Magbasa pa tungkol sa proseso [sa dokumentasyon](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). +Kapag natapos na ang iyong initial training, obserbahan ang kalidad ng modelo at isaalang-alang ang pagpapabuti nito sa pamamagitan ng pag-tweak ng 'hyperparameters' nito. Magbasa pa tungkol sa proseso [sa dokumentasyon](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). ## Prediksyon -Ito ang sandali kung saan maaari mong gamitin ang ganap na bagong datos upang subukan ang katumpakan ng iyong modelo. Sa isang 'applied' na setting ng ML, kung saan bumubuo ka ng mga web asset upang gamitin ang modelo sa produksyon, maaaring kabilang sa prosesong ito ang pagkolekta ng input ng user (halimbawa, isang pindot ng button) upang magtakda ng isang variable at ipadala ito sa modelo para sa inference, o pagsusuri. +Ito ang sandali kung saan maaari mong gamitin ang ganap na bagong datos upang subukan ang katumpakan ng iyong modelo. Sa isang 'applied' ML setting, kung saan bumubuo ka ng mga web asset upang gamitin ang modelo sa production, maaaring kasangkot sa prosesong ito ang pagkolekta ng user input (halimbawa, isang pindot ng button) upang magtakda ng variable at ipadala ito sa modelo para sa inference o pagsusuri. -Sa mga araling ito, matutuklasan mo kung paano gamitin ang mga hakbang na ito upang maghanda, bumuo, sumubok, suriin, at mag-predict - lahat ng mga kilos ng isang data scientist at higit pa, habang ikaw ay sumusulong sa iyong paglalakbay upang maging isang 'full stack' ML engineer. +Sa mga araling ito, matutuklasan mo kung paano gamitin ang mga hakbang na ito upang maghanda, bumuo, mag-test, mag-evaluate, at mag-predict - lahat ng mga galaw ng isang data scientist at higit pa, habang ikaw ay umuusad sa iyong paglalakbay upang maging isang 'full stack' ML engineer. --- ## 🚀Hamunin -Gumuhit ng isang flow chart na nagpapakita ng mga hakbang ng isang ML practitioner. Nasaan ka ngayon sa prosesong ito? Saan mo inaasahan na mahihirapan ka? Ano ang tila madali para sa iyo? +Gumuhit ng flow chart na nagpapakita ng mga hakbang ng isang ML practitioner. Nasaan ka ngayon sa proseso? Saan mo inaasahan na mahihirapan ka? Ano ang tila madali para sa iyo? -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/8/) +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) ## Review at Pag-aaral sa Sarili -Maghanap online ng mga panayam sa mga data scientist na naglalahad ng kanilang pang-araw-araw na gawain. Narito ang [isa](https://www.youtube.com/watch?v=Z3IjgbbCEfs). +Maghanap online ng mga panayam sa mga data scientist na nag-uusap tungkol sa kanilang pang-araw-araw na trabaho. Narito ang [isa](https://www.youtube.com/watch?v=Z3IjgbbCEfs). -## Takdang-Aralin +## Takdang Aralin -[Mag-interview ng isang data scientist](assignment.md) +[Magpanayam ng isang data scientist](assignment.md) --- **Paunawa**: -Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file +Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na pinagmulan. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito. \ No newline at end of file diff --git a/translations/tl/2-Regression/1-Tools/README.md b/translations/tl/2-Regression/1-Tools/README.md index dd82d2a4..494a576c 100644 --- a/translations/tl/2-Regression/1-Tools/README.md +++ b/translations/tl/2-Regression/1-Tools/README.md @@ -1,25 +1,25 @@ # Magsimula sa Python at Scikit-learn para sa mga regression model -![Buod ng mga regression sa isang sketchnote](../../../../translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.tl.png) +![Buod ng mga regression sa isang sketchnote](../../../../sketchnotes/ml-regression.png) > Sketchnote ni [Tomomi Imura](https://www.twitter.com/girlie_mac) -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) > ### [Ang araling ito ay available sa R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) ## Panimula -Sa apat na araling ito, matutuklasan mo kung paano bumuo ng mga regression model. Tatalakayin natin kung para saan ang mga ito sa madaling panahon. Ngunit bago ka magsimula, siguraduhing mayroon kang tamang mga tool para simulan ang proseso! +Sa apat na araling ito, matutuklasan mo kung paano bumuo ng mga regression model. Tatalakayin natin kung para saan ang mga ito sa madaling panahon. Ngunit bago ka magsimula, tiyakin na mayroon kang tamang mga tool upang simulan ang proseso! Sa araling ito, matututunan mo kung paano: @@ -30,15 +30,15 @@ Sa araling ito, matututunan mo kung paano: ## Mga Pag-install at Konfigurasyon -[![ML para sa mga nagsisimula - I-set up ang iyong mga tool para bumuo ng Machine Learning models](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML para sa mga nagsisimula - I-set up ang iyong mga tool para bumuo ng Machine Learning models") +[![ML para sa mga nagsisimula - I-set up ang iyong mga tool para sa pagbuo ng Machine Learning models](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML para sa mga nagsisimula - I-set up ang iyong mga tool para sa pagbuo ng Machine Learning models") > 🎥 I-click ang imahe sa itaas para sa isang maikling video tungkol sa pag-configure ng iyong computer para sa ML. -1. **I-install ang Python**. Siguraduhing naka-install ang [Python](https://www.python.org/downloads/) sa iyong computer. Gagamitin mo ang Python para sa maraming data science at machine learning na gawain. Karamihan sa mga computer system ay mayroon nang naka-install na Python. Mayroon ding mga kapaki-pakinabang na [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) na magpapadali sa setup para sa ilang user. +1. **I-install ang Python**. Tiyakin na ang [Python](https://www.python.org/downloads/) ay naka-install sa iyong computer. Gagamitin mo ang Python para sa maraming data science at machine learning na gawain. Karamihan sa mga computer system ay mayroon nang naka-install na Python. Mayroon ding mga kapaki-pakinabang na [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) na magpapadali sa setup para sa ilang user. - Gayunpaman, ang ilang paggamit ng Python ay nangangailangan ng isang partikular na bersyon ng software, habang ang iba ay nangangailangan ng ibang bersyon. Para sa kadahilanang ito, kapaki-pakinabang na gumamit ng [virtual environment](https://docs.python.org/3/library/venv.html). + Gayunpaman, ang ilang paggamit ng Python ay nangangailangan ng isang partikular na bersyon ng software, habang ang iba ay nangangailangan ng ibang bersyon. Dahil dito, kapaki-pakinabang na gumamit ng [virtual environment](https://docs.python.org/3/library/venv.html). -2. **I-install ang Visual Studio Code**. Siguraduhing naka-install ang Visual Studio Code sa iyong computer. Sundin ang mga tagubilin para sa [pag-install ng Visual Studio Code](https://code.visualstudio.com/) para sa basic na setup. Gagamitin mo ang Python sa Visual Studio Code sa kursong ito, kaya maaaring gusto mong mag-review kung paano [i-configure ang Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) para sa Python development. +2. **I-install ang Visual Studio Code**. Tiyakin na mayroon kang Visual Studio Code na naka-install sa iyong computer. Sundin ang mga tagubilin upang [i-install ang Visual Studio Code](https://code.visualstudio.com/) para sa pangunahing pag-install. Gagamitin mo ang Python sa Visual Studio Code sa kursong ito, kaya maaaring gusto mong mag-review kung paano [i-configure ang Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) para sa Python development. > Maging komportable sa Python sa pamamagitan ng pagdaan sa koleksyong ito ng [Learn modules](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) > @@ -50,30 +50,30 @@ Sa araling ito, matututunan mo kung paano: 4. **I-install ang Jupyter Notebook**. Kailangan mong [i-install ang Jupyter package](https://pypi.org/project/jupyter/). -## Ang iyong ML authoring environment +## Ang Iyong ML Authoring Environment -Gagamit ka ng **notebooks** para bumuo ng iyong Python code at lumikha ng mga machine learning model. Ang ganitong uri ng file ay karaniwang tool para sa mga data scientist, at makikilala sila sa pamamagitan ng kanilang suffix o extension `.ipynb`. +Gagamit ka ng **notebooks** upang bumuo ng iyong Python code at lumikha ng mga machine learning model. Ang ganitong uri ng file ay karaniwang tool para sa mga data scientist, at makikilala sila sa pamamagitan ng kanilang suffix o extension `.ipynb`. Ang notebooks ay isang interactive na environment na nagbibigay-daan sa developer na parehong mag-code at magdagdag ng mga tala at magsulat ng dokumentasyon sa paligid ng code, na kapaki-pakinabang para sa mga experimental o research-oriented na proyekto. -[![ML para sa mga nagsisimula - I-set up ang Jupyter Notebooks para simulan ang pagbuo ng regression models](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML para sa mga nagsisimula - I-set up ang Jupyter Notebooks para simulan ang pagbuo ng regression models") +[![ML para sa mga nagsisimula - I-set up ang Jupyter Notebooks upang simulan ang pagbuo ng regression models](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML para sa mga nagsisimula - I-set up ang Jupyter Notebooks upang simulan ang pagbuo ng regression models") > 🎥 I-click ang imahe sa itaas para sa isang maikling video tungkol sa ehersisyong ito. -### Ehersisyo - gumamit ng notebook +### Ehersisyo - Gumamit ng Notebook Sa folder na ito, makikita mo ang file na _notebook.ipynb_. 1. Buksan ang _notebook.ipynb_ sa Visual Studio Code. - Magsisimula ang isang Jupyter server gamit ang Python 3+. Makikita mo ang mga bahagi ng notebook na maaaring `run`, mga piraso ng code. Maaari mong patakbuhin ang isang code block, sa pamamagitan ng pagpili sa icon na mukhang play button. + Magsisimula ang isang Jupyter server gamit ang Python 3+. Makikita mo ang mga bahagi ng notebook na maaaring `run`, mga piraso ng code. Maaari mong patakbuhin ang isang code block sa pamamagitan ng pagpili sa icon na mukhang play button. 2. Piliin ang `md` icon at magdagdag ng kaunting markdown, at ang sumusunod na teksto **# Welcome to your notebook**. Susunod, magdagdag ng ilang Python code. 3. I-type ang **print('hello notebook')** sa code block. -4. Piliin ang arrow para patakbuhin ang code. +4. Piliin ang arrow upang patakbuhin ang code. Makikita mo ang naka-print na pahayag: @@ -81,47 +81,47 @@ Sa folder na ito, makikita mo ang file na _notebook.ipynb_. hello notebook ``` -![VS Code na may bukas na notebook](../../../../translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.tl.jpg) +![VS Code na may notebook na bukas](../../../../2-Regression/1-Tools/images/notebook.jpg) -Maaari mong ihalo ang iyong code sa mga komento para sa self-documentation ng notebook. +Maaari mong pagsamahin ang iyong code sa mga komento upang i-self-document ang notebook. ✅ Mag-isip ng sandali kung gaano kaiba ang working environment ng isang web developer kumpara sa isang data scientist. ## Pagsisimula sa Scikit-learn -Ngayon na naka-set up na ang Python sa iyong lokal na environment, at komportable ka na sa Jupyter notebooks, magpakomportable din tayo sa Scikit-learn (binibigkas na `sci` tulad ng `science`). Ang Scikit-learn ay nagbibigay ng [malawak na API](https://scikit-learn.org/stable/modules/classes.html#api-ref) para tulungan kang magsagawa ng mga ML na gawain. +Ngayon na ang Python ay naka-set up sa iyong lokal na environment, at komportable ka sa Jupyter notebooks, magpakomportable din tayo sa Scikit-learn (binibigkas na `sci` tulad ng `science`). Ang Scikit-learn ay nagbibigay ng [malawak na API](https://scikit-learn.org/stable/modules/classes.html#api-ref) upang tulungan kang magsagawa ng mga ML na gawain. Ayon sa kanilang [website](https://scikit-learn.org/stable/getting_started.html), "Ang Scikit-learn ay isang open source machine learning library na sumusuporta sa supervised at unsupervised learning. Nagbibigay din ito ng iba't ibang tool para sa model fitting, data preprocessing, model selection at evaluation, at marami pang ibang utilities." -Sa kursong ito, gagamitin mo ang Scikit-learn at iba pang mga tool para bumuo ng mga machine learning model para magsagawa ng tinatawag nating 'traditional machine learning' na mga gawain. Sadyang iniwasan namin ang neural networks at deep learning, dahil mas mahusay silang saklawin sa aming paparating na 'AI for Beginners' na kurikulum. +Sa kursong ito, gagamitin mo ang Scikit-learn at iba pang mga tool upang bumuo ng mga machine learning model para magsagawa ng tinatawag nating 'traditional machine learning' tasks. Sadyang iniwasan namin ang neural networks at deep learning, dahil mas mahusay itong saklawin sa aming paparating na 'AI for Beginners' curriculum. -Ginagawang simple ng Scikit-learn ang pagbuo ng mga model at ang pagsusuri sa mga ito para magamit. Pangunahing nakatuon ito sa paggamit ng numeric data at naglalaman ng ilang ready-made na dataset para magamit bilang mga learning tool. Kasama rin dito ang mga pre-built na model para subukan ng mga estudyante. Tuklasin natin ang proseso ng pag-load ng prepackaged na data at paggamit ng built-in estimator para sa unang ML model gamit ang Scikit-learn sa ilang basic na data. +Ginagawang simple ng Scikit-learn ang pagbuo ng mga model at ang pagsusuri sa mga ito para magamit. Pangunahing nakatuon ito sa paggamit ng numeric data at naglalaman ng ilang ready-made datasets para magamit bilang mga learning tool. Kasama rin dito ang mga pre-built model na maaaring subukan ng mga estudyante. Tuklasin natin ang proseso ng pag-load ng prepackaged data at paggamit ng built-in estimator para sa unang ML model gamit ang Scikit-learn gamit ang ilang basic na data. -## Ehersisyo - ang iyong unang Scikit-learn notebook +## Ehersisyo - Ang Iyong Unang Scikit-learn Notebook -> Ang tutorial na ito ay inspirasyon mula sa [linear regression example](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) sa website ng Scikit-learn. +> Ang tutorial na ito ay inspirasyon ng [linear regression example](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) sa website ng Scikit-learn. -[![ML para sa mga nagsisimula - Ang iyong Unang Linear Regression Project sa Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML para sa mga nagsisimula - Ang iyong Unang Linear Regression Project sa Python") +[![ML para sa mga nagsisimula - Ang Iyong Unang Linear Regression Project sa Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML para sa mga nagsisimula - Ang Iyong Unang Linear Regression Project sa Python") > 🎥 I-click ang imahe sa itaas para sa isang maikling video tungkol sa ehersisyong ito. Sa file na _notebook.ipynb_ na nauugnay sa araling ito, i-clear ang lahat ng mga cell sa pamamagitan ng pagpindot sa 'trash can' icon. -Sa seksyong ito, gagamit ka ng isang maliit na dataset tungkol sa diabetes na built-in sa Scikit-learn para sa mga layunin ng pag-aaral. Isipin na gusto mong subukan ang isang paggamot para sa mga pasyenteng may diabetes. Ang mga Machine Learning model ay maaaring makatulong sa iyo na matukoy kung aling mga pasyente ang mas mahusay na tutugon sa paggamot, batay sa mga kumbinasyon ng mga variable. Kahit na isang napaka-basic na regression model, kapag na-visualize, maaaring magpakita ng impormasyon tungkol sa mga variable na makakatulong sa iyo na ayusin ang iyong mga teoretikal na clinical trial. +Sa seksyong ito, gagamit ka ng isang maliit na dataset tungkol sa diabetes na built-in sa Scikit-learn para sa mga layunin ng pag-aaral. Isipin na gusto mong subukan ang isang paggamot para sa mga pasyenteng may diabetes. Ang mga Machine Learning model ay maaaring makatulong sa iyo na matukoy kung aling mga pasyente ang mas mahusay na tutugon sa paggamot, batay sa mga kumbinasyon ng mga variable. Kahit na isang napaka-basic na regression model, kapag na-visualize, ay maaaring magpakita ng impormasyon tungkol sa mga variable na makakatulong sa iyo na ayusin ang iyong mga teoretikal na clinical trials. ✅ Maraming uri ng regression methods, at kung alin ang pipiliin mo ay nakadepende sa sagot na hinahanap mo. Kung gusto mong hulaan ang posibleng taas ng isang tao batay sa edad, gagamit ka ng linear regression, dahil naghahanap ka ng **numeric value**. Kung interesado kang tuklasin kung ang isang uri ng pagkain ay dapat ituring na vegan o hindi, naghahanap ka ng **category assignment** kaya gagamit ka ng logistic regression. Matututo ka pa tungkol sa logistic regression sa susunod. Mag-isip ng kaunti tungkol sa ilang tanong na maaari mong itanong sa data, at kung alin sa mga pamamaraang ito ang mas angkop. Simulan na natin ang gawain. -### I-import ang mga library +### I-import ang mga Library Para sa gawain na ito, mag-i-import tayo ng ilang library: -- **matplotlib**. Isang kapaki-pakinabang na [graphing tool](https://matplotlib.org/) na gagamitin natin para gumawa ng line plot. +- **matplotlib**. Isang kapaki-pakinabang na [tool para sa graphing](https://matplotlib.org/) at gagamitin natin ito upang lumikha ng line plot. - **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) ay isang kapaki-pakinabang na library para sa paghawak ng numeric data sa Python. - **sklearn**. Ito ang [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) library. -Mag-import ng ilang library para makatulong sa iyong mga gawain. +Mag-import ng ilang library upang makatulong sa iyong mga gawain. 1. Magdagdag ng imports sa pamamagitan ng pag-type ng sumusunod na code: @@ -133,24 +133,24 @@ Mag-import ng ilang library para makatulong sa iyong mga gawain. Sa itaas, nag-i-import ka ng `matplotlib`, `numpy` at nag-i-import ka ng `datasets`, `linear_model` at `model_selection` mula sa `sklearn`. Ang `model_selection` ay ginagamit para sa paghahati ng data sa training at test sets. -### Ang diabetes dataset +### Ang Diabetes Dataset -Ang built-in na [diabetes dataset](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) ay may kasamang 442 sample ng data tungkol sa diabetes, na may 10 feature variables, ilan sa mga ito ay: +Ang built-in na [diabetes dataset](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) ay naglalaman ng 442 na sample ng data tungkol sa diabetes, na may 10 feature variables, ilan sa mga ito ay: - age: edad sa taon - bmi: body mass index - bp: average blood pressure - s1 tc: T-Cells (isang uri ng white blood cells) -✅ Ang dataset na ito ay may kasamang konsepto ng 'sex' bilang isang feature variable na mahalaga sa pananaliksik tungkol sa diabetes. Maraming medical datasets ang may ganitong uri ng binary classification. Mag-isip ng kaunti tungkol sa kung paano maaaring maalis ng mga ganitong klasipikasyon ang ilang bahagi ng populasyon mula sa mga paggamot. +✅ Ang dataset na ito ay naglalaman ng konsepto ng 'sex' bilang isang feature variable na mahalaga sa pananaliksik tungkol sa diabetes. Maraming medical datasets ang naglalaman ng ganitong uri ng binary classification. Mag-isip ng kaunti tungkol sa kung paano maaaring maalis ng mga ganitong klasipikasyon ang ilang bahagi ng populasyon mula sa mga paggamot. Ngayon, i-load ang X at y data. -> 🎓 Tandaan, ito ay supervised learning, at kailangan natin ng tinatawag na 'y' target. +> 🎓 Tandaan, ito ay supervised learning, at kailangan natin ng pinangalanang 'y' target. Sa isang bagong code cell, i-load ang diabetes dataset sa pamamagitan ng pagtawag sa `load_diabetes()`. Ang input na `return_X_y=True` ay nagpapahiwatig na ang `X` ay magiging isang data matrix, at ang `y` ay magiging regression target. -1. Magdagdag ng ilang print commands para ipakita ang hugis ng data matrix at ang unang elemento nito: +1. Magdagdag ng ilang print commands upang ipakita ang hugis ng data matrix at ang unang elemento nito: ```python X, y = datasets.load_diabetes(return_X_y=True) @@ -160,7 +160,7 @@ Sa isang bagong code cell, i-load ang diabetes dataset sa pamamagitan ng pagtawa Ang nakukuha mo bilang tugon ay isang tuple. Ang ginagawa mo ay i-assign ang dalawang unang halaga ng tuple sa `X` at `y` ayon sa pagkakabanggit. Matuto pa [tungkol sa tuples](https://wikipedia.org/wiki/Tuple). - Makikita mo na ang data na ito ay may 442 item na nakaayos sa arrays na may 10 elemento: + Makikita mo na ang data na ito ay may 442 na item na nakaayos sa arrays ng 10 elemento: ```text (442, 10) @@ -168,18 +168,18 @@ Sa isang bagong code cell, i-load ang diabetes dataset sa pamamagitan ng pagtawa -0.04340085 -0.00259226 0.01990842 -0.01764613] ``` - ✅ Mag-isip ng kaunti tungkol sa relasyon sa pagitan ng data at ng regression target. Ang linear regression ay nagtataya ng mga relasyon sa pagitan ng feature X at target variable y. Mahahanap mo ba ang [target](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) para sa diabetes dataset sa dokumentasyon? Ano ang ipinapakita ng dataset na ito, batay sa target? + ✅ Mag-isip ng kaunti tungkol sa relasyon sa pagitan ng data at ng regression target. Ang linear regression ay nagpo-predict ng mga relasyon sa pagitan ng feature X at target variable y. Mahahanap mo ba ang [target](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) para sa diabetes dataset sa dokumentasyon? Ano ang ipinapakita ng dataset na ito, batay sa target? -2. Susunod, pumili ng bahagi ng dataset na ito para i-plot sa pamamagitan ng pagpili sa ika-3 column ng dataset. Magagawa mo ito sa pamamagitan ng paggamit ng `:` operator para piliin ang lahat ng rows, at pagkatapos ay piliin ang ika-3 column gamit ang index (2). Maaari mo ring i-reshape ang data para maging isang 2D array - na kinakailangan para sa plotting - sa pamamagitan ng paggamit ng `reshape(n_rows, n_columns)`. Kung ang isa sa mga parameter ay -1, ang kaukulang dimensyon ay awtomatikong kinakalkula. +2. Susunod, pumili ng bahagi ng dataset na ito upang i-plot sa pamamagitan ng pagpili sa ika-3 column ng dataset. Magagawa mo ito sa pamamagitan ng paggamit ng `:` operator upang piliin ang lahat ng rows, at pagkatapos ay piliin ang ika-3 column gamit ang index (2). Maaari mo ring i-reshape ang data upang maging isang 2D array - na kinakailangan para sa pag-plot - sa pamamagitan ng paggamit ng `reshape(n_rows, n_columns)`. Kung ang isa sa mga parameter ay -1, ang kaukulang dimensyon ay awtomatikong kinakalkula. ```python X = X[:, 2] X = X.reshape((-1,1)) ``` - ✅ Sa anumang oras, i-print ang data para suriin ang hugis nito. + ✅ Sa anumang oras, i-print ang data upang suriin ang hugis nito. -3. Ngayon na handa na ang data para i-plot, maaari mong tingnan kung makakatulong ang isang machine para matukoy ang lohikal na paghahati sa pagitan ng mga numero sa dataset na ito. Para magawa ito, kailangan mong hatiin ang parehong data (X) at ang target (y) sa test at training sets. Ang Scikit-learn ay may simpleng paraan para gawin ito; maaari mong hatiin ang iyong test data sa isang ibinigay na punto. +3. Ngayon na mayroon kang data na handa nang i-plot, maaari mong tingnan kung makakatulong ang isang machine upang matukoy ang lohikal na paghahati sa pagitan ng mga numero sa dataset na ito. Upang gawin ito, kailangan mong hatiin ang parehong data (X) at ang target (y) sa test at training sets. Ang Scikit-learn ay may simpleng paraan upang gawin ito; maaari mong hatiin ang iyong test data sa isang ibinigay na punto. ```python X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) @@ -192,15 +192,15 @@ Sa isang bagong code cell, i-load ang diabetes dataset sa pamamagitan ng pagtawa model.fit(X_train, y_train) ``` - ✅ Ang `model.fit()` ay isang function na madalas mong makikita sa maraming ML libraries tulad ng TensorFlow. + ✅ Ang `model.fit()` ay isang function na makikita mo sa maraming ML libraries tulad ng TensorFlow. -5. Pagkatapos, lumikha ng prediction gamit ang test data, gamit ang function na `predict()`. Ito ay gagamitin para iguhit ang linya sa pagitan ng mga grupo ng data. +5. Pagkatapos, lumikha ng prediction gamit ang test data, gamit ang function na `predict()`. Ito ay gagamitin upang gumuhit ng linya sa pagitan ng mga grupo ng data. ```python y_pred = model.predict(X_test) ``` -6. Ngayon oras na para ipakita ang data sa isang plot. Ang Matplotlib ay isang napaka-kapaki-pakinabang na tool para sa gawaing ito. Gumawa ng scatterplot ng lahat ng X at y test data, at gamitin ang prediction para iguhit ang linya sa pinaka-angkop na lugar, sa pagitan ng mga grupo ng data ng model. +6. Ngayon ay oras na upang ipakita ang data sa isang plot. Ang Matplotlib ay isang napaka-kapaki-pakinabang na tool para sa gawaing ito. Gumawa ng scatterplot ng lahat ng X at y test data, at gamitin ang prediction upang gumuhit ng linya sa pinaka-angkop na lugar, sa pagitan ng mga grupo ng data ng model. ```python plt.scatter(X_test, y_test, color='black') @@ -211,8 +211,8 @@ Sa isang bagong code cell, i-load ang diabetes dataset sa pamamagitan ng pagtawa plt.show() ``` - ![isang scatterplot na nagpapakita ng mga datapoint tungkol sa diabetes](../../../../translated_images/scatterplot.ad8b356bcbb33be68d54050e09b9b7bfc03e94fde7371f2609ae43f4c563b2d7.tl.png) -✅ Pag-isipan mo kung ano ang nangyayari dito. Isang tuwid na linya ang dumadaan sa maraming maliliit na tuldok ng datos, pero ano nga ba ang ginagawa nito? Nakikita mo ba kung paano mo magagamit ang linyang ito upang mahulaan kung saan dapat ilagay ang isang bagong, hindi pa nakikitang punto ng datos kaugnay sa y axis ng plot? Subukang ilarawan sa mga salita ang praktikal na gamit ng modelong ito. + ![isang scatterplot na nagpapakita ng mga datapoint tungkol sa diabetes](../../../../2-Regression/1-Tools/images/scatterplot.png) +✅ Pag-isipan mo nang mabuti kung ano ang nangyayari dito. Isang tuwid na linya ang dumadaan sa maraming maliliit na tuldok ng datos, pero ano nga ba ang ginagawa nito? Nakikita mo ba kung paano mo magagamit ang linyang ito upang mahulaan kung saan dapat ilagay ang isang bagong, hindi pa nakikitang punto ng datos kaugnay sa y axis ng plot? Subukang ilarawan sa mga salita ang praktikal na gamit ng modelong ito. Binabati kita, nakagawa ka ng iyong unang linear regression model, nakalikha ng prediksyon gamit ito, at naipakita ito sa isang plot! @@ -221,7 +221,7 @@ Binabati kita, nakagawa ka ng iyong unang linear regression model, nakalikha ng I-plot ang ibang variable mula sa dataset na ito. Pahiwatig: i-edit ang linyang ito: `X = X[:,2]`. Batay sa target ng dataset na ito, ano ang kaya mong matuklasan tungkol sa pag-usad ng diabetes bilang isang sakit? -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/) +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) ## Review & Pag-aaral sa Sarili @@ -231,9 +231,9 @@ Magbasa pa tungkol sa konsepto ng regression at pag-isipan kung anong mga uri ng ## Takdang Aralin -[Isang Ibang Dataset](assignment.md) +[A different dataset](assignment.md) --- **Paunawa**: -Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file +Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file diff --git a/translations/tl/2-Regression/2-Data/README.md b/translations/tl/2-Regression/2-Data/README.md index f09b5a51..1032684a 100644 --- a/translations/tl/2-Regression/2-Data/README.md +++ b/translations/tl/2-Regression/2-Data/README.md @@ -1,71 +1,71 @@ -# Gumawa ng regression model gamit ang Scikit-learn: ihanda at i-visualize ang data +# Bumuo ng regression model gamit ang Scikit-learn: ihanda at i-visualize ang data -![Infographic ng data visualization](../../../../translated_images/data-visualization.54e56dded7c1a804d00d027543f2881cb32da73aeadda2d4a4f10f3497526114.tl.png) +![Infographic ng data visualization](../../../../2-Regression/2-Data/images/data-visualization.png) Infographic ni [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) > ### [Ang araling ito ay available sa R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html) ## Panimula -Ngayon na mayroon ka nang mga tool para simulan ang paggawa ng machine learning model gamit ang Scikit-learn, handa ka nang magtanong tungkol sa iyong data. Habang nagtatrabaho ka sa data at nag-aaplay ng mga solusyon sa ML, mahalagang maunawaan kung paano magtanong ng tamang tanong upang ma-unlock nang maayos ang potensyal ng iyong dataset. +Ngayon na mayroon ka nang mga tool na kailangan upang simulan ang pagbuo ng machine learning model gamit ang Scikit-learn, handa ka nang magsimulang magtanong tungkol sa iyong data. Habang nagtatrabaho ka sa data at nag-aaplay ng mga solusyon sa ML, napakahalaga na maunawaan kung paano magtanong ng tamang tanong upang ma-unlock nang maayos ang potensyal ng iyong dataset. -Sa araling ito, matututuhan mo: +Sa araling ito, matututunan mo: -- Paano ihanda ang iyong data para sa paggawa ng modelo. +- Paano ihanda ang iyong data para sa pagbuo ng modelo. - Paano gamitin ang Matplotlib para sa data visualization. ## Pagtatanong ng tamang tanong sa iyong data -Ang tanong na nais mong masagot ang magpapasiya kung anong uri ng mga algorithm ng ML ang iyong gagamitin. At ang kalidad ng sagot na makukuha mo ay lubos na nakadepende sa kalikasan ng iyong data. +Ang tanong na kailangan mong sagutin ang magtatakda kung anong uri ng ML algorithms ang iyong gagamitin. At ang kalidad ng sagot na makukuha mo ay lubos na nakadepende sa kalikasan ng iyong data. -Tingnan ang [data](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) na ibinigay para sa araling ito. Maaari mong buksan ang .csv file na ito sa VS Code. Sa mabilisang pagtingin, makikita agad na may mga blangko at halo ng mga string at numerikong data. Mayroon ding kakaibang column na tinatawag na 'Package' kung saan ang data ay halo ng 'sacks', 'bins', at iba pang halaga. Sa katunayan, medyo magulo ang data. +Tingnan ang [data](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) na ibinigay para sa araling ito. Maaari mong buksan ang .csv file na ito sa VS Code. Sa mabilisang pagtingin, makikita agad na may mga blangko at halo ng mga string at numeric na data. Mayroon ding kakaibang column na tinatawag na 'Package' kung saan ang data ay halo ng 'sacks', 'bins' at iba pang mga halaga. Sa katunayan, medyo magulo ang data. -[![ML para sa mga baguhan - Paano Suriin at Linisin ang Dataset](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML para sa mga baguhan - Paano Suriin at Linisin ang Dataset") +[![ML para sa mga nagsisimula - Paano Suriin at Linisin ang Dataset](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML para sa mga nagsisimula - Paano Suriin at Linisin ang Dataset") -> 🎥 I-click ang larawan sa itaas para sa isang maikling video tungkol sa paghahanda ng data para sa araling ito. +> 🎥 I-click ang imahe sa itaas para sa maikling video na nagpapakita kung paano ihanda ang data para sa araling ito. -Sa katunayan, bihira kang makakuha ng dataset na ganap na handa nang gamitin para gumawa ng ML model. Sa araling ito, matututuhan mo kung paano ihanda ang raw dataset gamit ang mga karaniwang Python library. Matututuhan mo rin ang iba't ibang teknik sa pag-visualize ng data. +Sa katunayan, hindi karaniwan na makakuha ng dataset na ganap na handa para gamitin sa paglikha ng ML model. Sa araling ito, matututunan mo kung paano ihanda ang raw dataset gamit ang mga karaniwang Python libraries. Matututunan mo rin ang iba't ibang teknik sa pag-visualize ng data. ## Case study: 'ang merkado ng kalabasa' -Sa folder na ito, makakakita ka ng isang .csv file sa root `data` folder na tinatawag na [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) na naglalaman ng 1757 linya ng data tungkol sa merkado ng kalabasa, na pinagsama-sama ayon sa lungsod. Ang data na ito ay raw data na kinuha mula sa [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) na ipinamamahagi ng Kagawaran ng Agrikultura ng Estados Unidos. +Sa folder na ito, makakakita ka ng .csv file sa root `data` folder na tinatawag na [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) na naglalaman ng 1757 linya ng data tungkol sa merkado ng kalabasa, na nakaayos ayon sa lungsod. Ito ay raw data na kinuha mula sa [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) na ipinamamahagi ng United States Department of Agriculture. ### Paghahanda ng data -Ang data na ito ay nasa pampublikong domain. Maaari itong i-download sa maraming magkakahiwalay na file, bawat lungsod, mula sa website ng USDA. Upang maiwasan ang masyadong maraming magkakahiwalay na file, pinagsama-sama namin ang lahat ng data ng lungsod sa isang spreadsheet, kaya't medyo _naihanda_ na namin ang data. Ngayon, tingnan natin nang mas malapitan ang data. +Ang data na ito ay nasa public domain. Maaari itong i-download sa maraming magkakahiwalay na file, bawat lungsod, mula sa website ng USDA. Upang maiwasan ang masyadong maraming magkakahiwalay na file, pinagsama-sama namin ang lahat ng data ng lungsod sa isang spreadsheet, kaya't medyo _naihanda_ na namin ang data. Susunod, tingnan natin nang mas malapit ang data. -### Ang data ng kalabasa - mga paunang konklusyon +### Ang data ng kalabasa - mga maagang konklusyon -Ano ang napapansin mo tungkol sa data na ito? Napansin mo na may halo ng mga string, numero, blangko, at kakaibang halaga na kailangan mong unawain. +Ano ang napapansin mo tungkol sa data na ito? Nakita mo na may halo ng mga string, numero, blangko, at kakaibang mga halaga na kailangan mong unawain. -Anong tanong ang maaari mong itanong sa data na ito gamit ang isang Regression technique? Paano ang "I-predict ang presyo ng kalabasa na ibinebenta sa isang partikular na buwan". Sa muling pagtingin sa data, may ilang pagbabago kang kailangang gawin upang makabuo ng tamang istruktura ng data para sa gawain. +Anong tanong ang maaari mong itanong sa data na ito gamit ang Regression technique? Halimbawa, "I-predict ang presyo ng kalabasa na ibinebenta sa isang partikular na buwan". Sa muling pagtingin sa data, may ilang pagbabago kang kailangang gawin upang makabuo ng tamang istruktura ng data para sa gawain. ## Ehersisyo - suriin ang data ng kalabasa Gamitin natin ang [Pandas](https://pandas.pydata.org/), (ang pangalan ay nangangahulugang `Python Data Analysis`) isang tool na napaka-kapaki-pakinabang para sa paghubog ng data, upang suriin at ihanda ang data ng kalabasa. -### Una, suriin ang mga nawawalang petsa +### Una, suriin ang nawawalang mga petsa -Kailangan mo munang gumawa ng mga hakbang upang suriin ang mga nawawalang petsa: +Kailangan mo munang gumawa ng mga hakbang upang suriin ang nawawalang mga petsa: -1. I-convert ang mga petsa sa format ng buwan (ang mga ito ay mga petsa ng US, kaya ang format ay `MM/DD/YYYY`). +1. I-convert ang mga petsa sa format ng buwan (ang mga ito ay US dates, kaya ang format ay `MM/DD/YYYY`). 2. I-extract ang buwan sa isang bagong column. Buksan ang _notebook.ipynb_ file sa Visual Studio Code at i-import ang spreadsheet sa isang bagong Pandas dataframe. -1. Gamitin ang `head()` function upang makita ang unang limang hilera. +1. Gamitin ang `head()` function upang makita ang unang limang linya. ```python import pandas as pd @@ -73,7 +73,7 @@ Buksan ang _notebook.ipynb_ file sa Visual Studio Code at i-import ang spreadshe pumpkins.head() ``` - ✅ Anong function ang gagamitin mo upang makita ang huling limang hilera? + ✅ Anong function ang gagamitin mo upang makita ang huling limang linya? 1. Suriin kung may nawawalang data sa kasalukuyang dataframe: @@ -83,7 +83,7 @@ Buksan ang _notebook.ipynb_ file sa Visual Studio Code at i-import ang spreadshe May nawawalang data, ngunit maaaring hindi ito mahalaga para sa gawain. -1. Upang gawing mas madaling gamitin ang iyong dataframe, piliin lamang ang mga column na kailangan mo, gamit ang `loc` function na nag-eextract mula sa orihinal na dataframe ng isang grupo ng mga hilera (ipinasa bilang unang parameter) at mga column (ipinasa bilang pangalawang parameter). Ang expression na `:` sa kaso sa ibaba ay nangangahulugang "lahat ng hilera". +1. Upang gawing mas madaling gamitin ang iyong dataframe, piliin lamang ang mga column na kailangan mo, gamit ang `loc` function na nag-eextract mula sa orihinal na dataframe ng isang grupo ng mga linya (ipinasa bilang unang parameter) at mga column (ipinasa bilang pangalawang parameter). Ang expression na `:` sa kaso sa ibaba ay nangangahulugang "lahat ng linya". ```python columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] @@ -92,9 +92,9 @@ Buksan ang _notebook.ipynb_ file sa Visual Studio Code at i-import ang spreadshe ### Pangalawa, tukuyin ang average na presyo ng kalabasa -Pag-isipan kung paano tukuyin ang average na presyo ng kalabasa sa isang partikular na buwan. Anong mga column ang pipiliin mo para sa gawaing ito? Pahiwatig: kakailanganin mo ang 3 column. +Pag-isipan kung paano tukuyin ang average na presyo ng kalabasa sa isang partikular na buwan. Anong mga column ang pipiliin mo para sa gawain na ito? Pahiwatig: kakailanganin mo ng 3 column. -Solusyon: kunin ang average ng mga column na `Low Price` at `High Price` upang punan ang bagong column na Price, at i-convert ang column na Date upang ipakita lamang ang buwan. Sa kabutihang palad, ayon sa pagsusuri sa itaas, walang nawawalang data para sa mga petsa o presyo. +Solusyon: kunin ang average ng `Low Price` at `High Price` columns upang punan ang bagong Price column, at i-convert ang Date column upang ipakita lamang ang buwan. Sa kabutihang-palad, ayon sa pagsusuri sa itaas, walang nawawalang data para sa mga petsa o presyo. 1. Upang kalkulahin ang average, idagdag ang sumusunod na code: @@ -105,7 +105,7 @@ Solusyon: kunin ang average ng mga column na `Low Price` at `High Price` upang p ``` - ✅ Malaya kang mag-print ng anumang data na nais mong suriin gamit ang `print(month)`. + ✅ Malaya kang mag-print ng anumang data na gusto mong suriin gamit ang `print(month)`. 2. Ngayon, kopyahin ang iyong na-convert na data sa isang bagong Pandas dataframe: @@ -113,29 +113,29 @@ Solusyon: kunin ang average ng mga column na `Low Price` at `High Price` upang p new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) ``` - Ang pag-print ng iyong dataframe ay magpapakita sa iyo ng isang malinis at maayos na dataset kung saan maaari kang bumuo ng iyong bagong regression model. + Ang pag-print ng iyong dataframe ay magpapakita sa iyo ng malinis, maayos na dataset kung saan maaari kang bumuo ng iyong bagong regression model. -### Pero teka! May kakaiba dito +### Ngunit sandali! May kakaiba dito -Kung titingnan mo ang column na `Package`, ang mga kalabasa ay ibinebenta sa maraming iba't ibang mga pagsasaayos. Ang ilan ay ibinebenta sa '1 1/9 bushel' na sukat, ang ilan sa '1/2 bushel' na sukat, ang ilan bawat kalabasa, ang ilan bawat libra, at ang ilan sa malalaking kahon na may iba't ibang lapad. +Kung titingnan mo ang `Package` column, ang mga kalabasa ay ibinebenta sa iba't ibang mga configuration. Ang ilan ay ibinebenta sa '1 1/9 bushel' na sukat, ang ilan sa '1/2 bushel' na sukat, ang ilan bawat kalabasa, ang ilan bawat pound, at ang ilan sa malalaking kahon na may iba't ibang lapad. > Mukhang napakahirap timbangin nang pare-pareho ang mga kalabasa -Sa pagsisiyasat sa orihinal na data, kawili-wiling makita na ang anumang may `Unit of Sale` na katumbas ng 'EACH' o 'PER BIN' ay mayroon ding uri ng `Package` na bawat pulgada, bawat bin, o 'bawat isa'. Mukhang napakahirap timbangin nang pare-pareho ang mga kalabasa, kaya't i-filter natin ang mga ito sa pamamagitan ng pagpili lamang ng mga kalabasa na may string na 'bushel' sa kanilang column na `Package`. +Sa pag-usisa sa orihinal na data, kawili-wili na ang anumang may `Unit of Sale` na katumbas ng 'EACH' o 'PER BIN' ay mayroon ding `Package` type na bawat inch, bawat bin, o 'each'. Mukhang napakahirap timbangin nang pare-pareho ang mga kalabasa, kaya't i-filter natin ang mga ito sa pamamagitan ng pagpili lamang ng mga kalabasa na may string na 'bushel' sa kanilang `Package` column. -1. Magdagdag ng filter sa itaas ng file, sa ilalim ng paunang pag-import ng .csv: +1. Magdagdag ng filter sa itaas ng file, sa ilalim ng initial .csv import: ```python pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] ``` - Kung i-print mo ang data ngayon, makikita mo na nakakakuha ka lamang ng humigit-kumulang 415 na hilera ng data na naglalaman ng mga kalabasa ayon sa bushel. + Kung i-print mo ang data ngayon, makikita mo na nakakakuha ka lamang ng mga 415 linya ng data na naglalaman ng mga kalabasa ayon sa bushel. -### Pero teka! May isa pang bagay na kailangang gawin +### Ngunit sandali! May isa pang bagay na kailangang gawin -Napansin mo ba na ang dami ng bushel ay nag-iiba bawat hilera? Kailangan mong gawing normal ang pagpepresyo upang maipakita mo ang pagpepresyo bawat bushel, kaya't gumawa ng ilang kalkulasyon upang gawing pare-pareho ito. +Napansin mo ba na ang dami ng bushel ay nag-iiba bawat linya? Kailangan mong gawing normal ang pagpepresyo upang ipakita ang pagpepresyo bawat bushel, kaya't gumawa ng ilang math upang gawing standard ito. -1. Idagdag ang mga linyang ito pagkatapos ng block na lumilikha ng bagong dataframe ng pumpkins: +1. Idagdag ang mga linyang ito pagkatapos ng block na gumagawa ng bagong_pumpkins dataframe: ```python new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) @@ -143,29 +143,29 @@ Napansin mo ba na ang dami ng bushel ay nag-iiba bawat hilera? Kailangan mong ga new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2) ``` -✅ Ayon sa [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), ang timbang ng isang bushel ay depende sa uri ng produkto, dahil ito ay isang sukat ng dami. "Ang isang bushel ng mga kamatis, halimbawa, ay dapat timbangin ng 56 pounds... Ang mga dahon at gulay ay kumukuha ng mas maraming espasyo na may mas kaunting timbang, kaya't ang isang bushel ng spinach ay 20 pounds lamang." Medyo komplikado ito! Huwag na nating alalahanin ang paggawa ng conversion mula bushel patungong pound, at sa halip ay magpresyo ayon sa bushel. Ang lahat ng pag-aaral na ito tungkol sa mga bushel ng kalabasa, gayunpaman, ay nagpapakita kung gaano kahalaga ang maunawaan ang kalikasan ng iyong data! +✅ Ayon sa [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), ang timbang ng isang bushel ay nakadepende sa uri ng produkto, dahil ito ay isang sukat ng volume. "Ang isang bushel ng mga kamatis, halimbawa, ay dapat na tumimbang ng 56 pounds... Ang mga dahon at gulay ay kumukuha ng mas maraming espasyo na may mas kaunting timbang, kaya't ang isang bushel ng spinach ay 20 pounds lamang." Medyo komplikado ito! Huwag na nating alalahanin ang paggawa ng conversion ng bushel-to-pound, at sa halip ay magpresyo bawat bushel. Ang lahat ng pag-aaral na ito tungkol sa bushel ng mga kalabasa, gayunpaman, ay nagpapakita kung gaano kahalaga ang maunawaan ang kalikasan ng iyong data! -Ngayon, maaari mong suriin ang pagpepresyo bawat unit batay sa kanilang sukat ng bushel. Kung i-print mo ang data muli, makikita mo kung paano ito na-standardize. +Ngayon, maaari mong suriin ang pagpepresyo bawat unit batay sa kanilang bushel measurement. Kung i-print mo ang data muli, makikita mo kung paano ito na-standardize. -✅ Napansin mo ba na ang mga kalabasa na ibinebenta bawat kalahating bushel ay napakamahal? Kaya mo bang alamin kung bakit? Pahiwatig: ang maliliit na kalabasa ay mas mahal kaysa sa malalaki, marahil dahil mas marami ang mga ito bawat bushel, dahil sa espasyong hindi nagagamit na kinuha ng isang malaking hollow pie pumpkin. +✅ Napansin mo ba na ang mga kalabasa na ibinebenta sa kalahating bushel ay napakamahal? Kaya mo bang alamin kung bakit? Pahiwatig: ang maliliit na kalabasa ay mas mahal kaysa sa malalaki, marahil dahil mas marami ang mga ito bawat bushel, dahil sa espasyong hindi nagagamit na kinukuha ng isang malaking hollow pie pumpkin. ## Mga Estratehiya sa Visualization -Bahagi ng tungkulin ng data scientist ang ipakita ang kalidad at kalikasan ng data na kanilang pinagtatrabahuhan. Upang magawa ito, madalas silang gumagawa ng mga kawili-wiling visualization, o mga plot, graph, at chart, na nagpapakita ng iba't ibang aspeto ng data. Sa ganitong paraan, nagagawa nilang ipakita nang biswal ang mga relasyon at puwang na mahirap matuklasan. +Bahagi ng tungkulin ng data scientist ang ipakita ang kalidad at kalikasan ng data na kanilang pinagtatrabahuhan. Upang gawin ito, madalas silang gumagawa ng mga kawili-wiling visualization, o mga plots, graphs, at charts, na nagpapakita ng iba't ibang aspeto ng data. Sa ganitong paraan, nagagawa nilang ipakita nang biswal ang mga relasyon at gaps na kung hindi man ay mahirap matuklasan. -[![ML para sa mga baguhan - Paano I-visualize ang Data gamit ang Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML para sa mga baguhan - Paano I-visualize ang Data gamit ang Matplotlib") +[![ML para sa mga nagsisimula - Paano I-visualize ang Data gamit ang Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML para sa mga nagsisimula - Paano I-visualize ang Data gamit ang Matplotlib") -> 🎥 I-click ang larawan sa itaas para sa isang maikling video tungkol sa pag-visualize ng data para sa araling ito. +> 🎥 I-click ang imahe sa itaas para sa maikling video na nagpapakita kung paano i-visualize ang data para sa araling ito. -Ang mga visualization ay maaari ring makatulong sa pagtukoy ng pinakaangkop na teknik ng machine learning para sa data. Ang isang scatterplot na tila sumusunod sa isang linya, halimbawa, ay nagpapahiwatig na ang data ay isang mahusay na kandidato para sa isang linear regression exercise. +Ang mga visualization ay maaari ring makatulong sa pagtukoy ng pinaka-angkop na machine learning technique para sa data. Halimbawa, ang isang scatterplot na tila sumusunod sa isang linya ay nagpapahiwatig na ang data ay isang mahusay na kandidato para sa linear regression exercise. -Ang isang data visualization library na mahusay gumagana sa Jupyter notebooks ay ang [Matplotlib](https://matplotlib.org/) (na nakita mo rin sa nakaraang aralin). +Ang isang data visualization library na mahusay gumagana sa Jupyter notebooks ay [Matplotlib](https://matplotlib.org/) (na nakita mo rin sa nakaraang aralin). -> Magkaroon ng higit pang karanasan sa data visualization sa [mga tutorial na ito](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott). +> Magkaroon ng mas maraming karanasan sa data visualization sa [mga tutorial na ito](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott). ## Ehersisyo - mag-eksperimento gamit ang Matplotlib -Subukang gumawa ng ilang mga pangunahing plot upang ipakita ang bagong dataframe na iyong nilikha. Ano ang ipapakita ng isang pangunahing line plot? +Subukang gumawa ng ilang basic plots upang ipakita ang bagong dataframe na iyong ginawa. Ano ang ipapakita ng isang basic line plot? 1. I-import ang Matplotlib sa itaas ng file, sa ilalim ng Pandas import: @@ -173,8 +173,8 @@ Subukang gumawa ng ilang mga pangunahing plot upang ipakita ang bagong dataframe import matplotlib.pyplot as plt ``` -1. I-rerun ang buong notebook upang ma-refresh. -1. Sa ibaba ng notebook, magdagdag ng cell upang i-plot ang data bilang isang kahon: +1. I-re-run ang buong notebook upang ma-refresh. +1. Sa ibaba ng notebook, magdagdag ng cell upang i-plot ang data bilang isang box: ```python price = new_pumpkins.Price @@ -183,44 +183,44 @@ Subukang gumawa ng ilang mga pangunahing plot upang ipakita ang bagong dataframe plt.show() ``` - ![Isang scatterplot na nagpapakita ng relasyon ng presyo sa buwan](../../../../translated_images/scatterplot.b6868f44cbd2051c6680ccdbb1510697d06a3ff6cd4abda656f5009c0ed4e3fc.tl.png) + ![Isang scatterplot na nagpapakita ng relasyon ng presyo sa buwan](../../../../2-Regression/2-Data/images/scatterplot.png) - Kapaki-pakinabang ba ang plot na ito? Mayroon bang anumang bagay tungkol dito na nakakagulat sa iyo? + Kapaki-pakinabang ba ang plot na ito? Mayroon bang bagay na ikinagulat mo? - Hindi ito partikular na kapaki-pakinabang dahil ang ipinapakita lamang nito ay ang pagkalat ng mga puntos sa isang partikular na buwan. + Hindi ito partikular na kapaki-pakinabang dahil ang ginagawa lamang nito ay ipakita ang iyong data bilang isang kalat ng mga puntos sa isang partikular na buwan. ### Gawing kapaki-pakinabang -Upang makagawa ng mga chart na nagpapakita ng kapaki-pakinabang na data, karaniwan mong kailangang i-group ang data sa isang paraan. Subukang gumawa ng isang plot kung saan ang y axis ay nagpapakita ng mga buwan at ang data ay nagpapakita ng distribusyon ng data. +Upang makagawa ng mga chart na nagpapakita ng kapaki-pakinabang na data, karaniwang kailangan mong i-group ang data sa isang paraan. Subukan nating gumawa ng plot kung saan ang y axis ay nagpapakita ng mga buwan at ang data ay nagpapakita ng distribution ng data. -1. Magdagdag ng cell upang lumikha ng isang grouped bar chart: +1. Magdagdag ng cell upang gumawa ng grouped bar chart: ```python new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') plt.ylabel("Pumpkin Price") ``` - ![Isang bar chart na nagpapakita ng relasyon ng presyo sa buwan](../../../../translated_images/barchart.a833ea9194346d769c77a3a870f7d8aee51574cd1138ca902e5500830a41cbce.tl.png) + ![Isang bar chart na nagpapakita ng relasyon ng presyo sa buwan](../../../../2-Regression/2-Data/images/barchart.png) - Ito ay isang mas kapaki-pakinabang na data visualization! Mukhang ipinapakita nito na ang pinakamataas na presyo para sa mga kalabasa ay nangyayari sa Setyembre at Oktubre. Tugma ba ito sa iyong inaasahan? Bakit o bakit hindi? + Ito ay mas kapaki-pakinabang na data visualization! Mukhang ipinapakita nito na ang pinakamataas na presyo para sa mga kalabasa ay nangyayari sa Setyembre at Oktubre. Tugma ba ito sa iyong inaasahan? Bakit o bakit hindi? --- ## 🚀Hamunin -Galugarin ang iba't ibang uri ng visualization na inaalok ng Matplotlib. Alin sa mga uri ang pinakaangkop para sa mga regression problem? +Galugarin ang iba't ibang uri ng visualization na inaalok ng Matplotlib. Alin sa mga uri ang pinaka-angkop para sa regression problems? -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12/) +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) ## Review at Pag-aaral sa Sarili -Tingnan ang maraming paraan upang i-visualize ang data. Gumawa ng listahan ng iba't ibang mga library na magagamit at tandaan kung alin ang pinakamahusay para sa mga partikular na uri ng gawain, halimbawa 2D visualizations kumpara sa 3D visualizations. Ano ang natuklasan mo? +Tingnan ang maraming paraan upang i-visualize ang data. Gumawa ng listahan ng iba't ibang libraries na available at tandaan kung alin ang pinakamahusay para sa mga partikular na uri ng gawain, halimbawa 2D visualizations vs. 3D visualizations. Ano ang natuklasan mo? -## Takdang-Aralin +## Takdang Aralin [Paggalugad sa visualization](assignment.md) --- **Paunawa**: -Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito. \ No newline at end of file +Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito. \ No newline at end of file diff --git a/translations/tl/2-Regression/3-Linear/README.md b/translations/tl/2-Regression/3-Linear/README.md index 755ca1ff..02adce2e 100644 --- a/translations/tl/2-Regression/3-Linear/README.md +++ b/translations/tl/2-Regression/3-Linear/README.md @@ -1,49 +1,49 @@ # Gumawa ng regression model gamit ang Scikit-learn: regression sa apat na paraan -![Linear vs polynomial regression infographic](../../../../translated_images/linear-polynomial.5523c7cb6576ccab0fecbd0e3505986eb2d191d9378e785f82befcf3a578a6e7.tl.png) +![Linear vs polynomial regression infographic](../../../../2-Regression/3-Linear/images/linear-polynomial.png) > Infographic ni [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) > ### [Ang araling ito ay available sa R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) ### Panimula Sa ngayon, napag-aralan mo na kung ano ang regression gamit ang sample data mula sa dataset ng presyo ng kalabasa na gagamitin natin sa buong araling ito. Na-visualize mo na rin ito gamit ang Matplotlib. -Ngayon, handa ka nang mas lumalim sa regression para sa ML. Bagama't ang visualization ay tumutulong upang maunawaan ang data, ang tunay na lakas ng Machine Learning ay nagmumula sa _pagsasanay ng mga modelo_. Ang mga modelo ay sinasanay gamit ang makasaysayang data upang awtomatikong makuha ang mga dependency ng data, at pinapayagan kang hulaan ang mga resulta para sa bagong data na hindi pa nakikita ng modelo. +Ngayon, handa ka nang mas lumalim sa regression para sa ML. Bagama't ang visualization ay tumutulong upang maunawaan ang data, ang tunay na lakas ng Machine Learning ay nagmumula sa _pagsasanay ng mga modelo_. Ang mga modelo ay sinasanay gamit ang makasaysayang data upang awtomatikong makuha ang mga dependency ng data, at nagbibigay-daan ito upang mahulaan ang mga resulta para sa bagong data na hindi pa nakikita ng modelo. -Sa araling ito, matututo ka pa tungkol sa dalawang uri ng regression: _basic linear regression_ at _polynomial regression_, kasama ang ilang math na nasa likod ng mga teknik na ito. Ang mga modelong ito ay magpapahintulot sa atin na hulaan ang presyo ng kalabasa depende sa iba't ibang input data. +Sa araling ito, matututunan mo ang higit pa tungkol sa dalawang uri ng regression: _basic linear regression_ at _polynomial regression_, kasama ang ilang math na nasa likod ng mga teknik na ito. Ang mga modelong ito ay magbibigay-daan sa atin upang mahulaan ang presyo ng kalabasa batay sa iba't ibang input data. [![ML para sa mga nagsisimula - Pag-unawa sa Linear Regression](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML para sa mga nagsisimula - Pag-unawa sa Linear Regression") > 🎥 I-click ang imahe sa itaas para sa maikling video overview ng linear regression. -> Sa buong kurikulum na ito, inaasahan namin ang minimal na kaalaman sa math, at sinisikap naming gawing accessible ito para sa mga estudyanteng nagmumula sa ibang larangan, kaya't maghanap ng mga tala, 🧮 callouts, diagram, at iba pang mga tool sa pag-aaral upang makatulong sa pag-unawa. +> Sa buong kurikulum na ito, inaasahan namin ang minimal na kaalaman sa math, at sinisikap naming gawing accessible ito para sa mga estudyanteng nagmumula sa ibang larangan, kaya't maghanap ng mga tala, 🧮 callouts, diagram, at iba pang learning tools upang makatulong sa pag-unawa. -### Kinakailangan +### Paunang Kaalaman -Dapat pamilyar ka na sa istruktura ng data ng kalabasa na ating sinusuri. Makikita mo ito na preloaded at pre-cleaned sa _notebook.ipynb_ file ng araling ito. Sa file, ang presyo ng kalabasa ay ipinapakita kada bushel sa isang bagong data frame. Siguraduhing maipatakbo mo ang mga notebook na ito sa kernels sa Visual Studio Code. +Dapat ay pamilyar ka na sa istruktura ng data ng kalabasa na ating sinusuri. Makikita mo itong preloaded at pre-cleaned sa _notebook.ipynb_ file ng araling ito. Sa file, ang presyo ng kalabasa ay ipinapakita kada bushel sa isang bagong data frame. Siguraduhing maipatakbo mo ang mga notebook na ito sa kernels sa Visual Studio Code. ### Paghahanda -Bilang paalala, niloload mo ang data na ito upang makapagtanong tungkol dito. +Bilang paalala, niloload mo ang data na ito upang magtanong tungkol dito. - Kailan ang pinakamagandang oras para bumili ng kalabasa? - Anong presyo ang maaasahan ko para sa isang case ng miniature pumpkins? - Dapat ko bang bilhin ang mga ito sa half-bushel baskets o sa 1 1/9 bushel box? Patuloy nating tuklasin ang data na ito. -Sa nakaraang aralin, gumawa ka ng Pandas data frame at pinunan ito ng bahagi ng orihinal na dataset, na-standardize ang presyo kada bushel. Sa paggawa nito, gayunpaman, nakakuha ka lamang ng humigit-kumulang 400 datapoints at para lamang sa mga buwan ng taglagas. +Sa nakaraang aralin, gumawa ka ng Pandas data frame at pinunan ito ng bahagi ng orihinal na dataset, na-standardize ang presyo kada bushel. Gayunpaman, sa paggawa nito, nakakuha ka lamang ng humigit-kumulang 400 datapoints at para lamang sa mga buwan ng taglagas. -Tingnan ang data na preloaded sa notebook na kasama ng araling ito. Ang data ay preloaded at isang paunang scatterplot ang na-chart upang ipakita ang data ng buwan. Marahil makakakuha tayo ng kaunting detalye tungkol sa kalikasan ng data sa pamamagitan ng mas malinis na pagproseso nito. +Tingnan ang data na preloaded sa notebook na kasama ng araling ito. Ang data ay preloaded at isang paunang scatterplot ang na-chart upang ipakita ang data ng buwan. Marahil makakakuha tayo ng mas detalyadong impormasyon tungkol sa kalikasan ng data sa pamamagitan ng mas malalim na paglilinis nito. ## Isang linear regression line @@ -54,7 +54,7 @@ Tulad ng natutunan mo sa Lesson 1, ang layunin ng isang linear regression exerci Karaniwan sa **Least-Squares Regression** ang pagguhit ng ganitong uri ng linya. Ang terminong 'least-squares' ay nangangahulugan na ang lahat ng datapoints na nakapalibot sa regression line ay pinapangkat at pagkatapos ay ina-add. Sa ideal na sitwasyon, ang huling kabuuan ay dapat na kasing liit hangga't maaari, dahil gusto natin ng mababang bilang ng mga error, o `least-squares`. -Ginagawa natin ito dahil gusto nating magmodelo ng linya na may pinakamaliit na kabuuang distansya mula sa lahat ng ating mga data points. Pinapangkat din natin ang mga termino bago i-add ang mga ito dahil mas mahalaga sa atin ang magnitude kaysa sa direksyon. +Ginagawa natin ito dahil gusto nating magmodelo ng linya na may pinakamaliit na kabuuang distansya mula sa lahat ng ating data points. Pinapangkat din natin ang mga termino bago i-add ang mga ito dahil mas mahalaga sa atin ang magnitude kaysa sa direksyon nito. > **🧮 Ipakita ang math** > @@ -64,29 +64,29 @@ Ginagawa natin ito dahil gusto nating magmodelo ng linya na may pinakamaliit na > Y = a + bX > ``` > -> `X` ay ang 'explanatory variable'. `Y` ay ang 'dependent variable'. Ang slope ng linya ay `b` at `a` ay ang y-intercept, na tumutukoy sa halaga ng `Y` kapag `X = 0`. +> Ang `X` ay ang 'explanatory variable'. Ang `Y` ay ang 'dependent variable'. Ang slope ng linya ay `b` at ang `a` ay ang y-intercept, na tumutukoy sa halaga ng `Y` kapag `X = 0`. > ->![kalkulahin ang slope](../../../../translated_images/slope.f3c9d5910ddbfcf9096eb5564254ba22c9a32d7acd7694cab905d29ad8261db3.tl.png) +>![calculate the slope](../../../../2-Regression/3-Linear/images/slope.png) > > Una, kalkulahin ang slope `b`. Infographic ni [Jen Looper](https://twitter.com/jenlooper) > > Sa madaling salita, at tumutukoy sa orihinal na tanong ng data ng kalabasa: "hulaan ang presyo ng kalabasa kada bushel ayon sa buwan", ang `X` ay tumutukoy sa presyo at ang `Y` ay tumutukoy sa buwan ng pagbebenta. > ->![kumpletuhin ang equation](../../../../translated_images/calculation.a209813050a1ddb141cdc4bc56f3af31e67157ed499e16a2ecf9837542704c94.tl.png) +>![complete the equation](../../../../2-Regression/3-Linear/images/calculation.png) > > Kalkulahin ang halaga ng Y. Kung nagbabayad ka ng humigit-kumulang $4, malamang Abril ito! Infographic ni [Jen Looper](https://twitter.com/jenlooper) > -> Ang math na nagkakalkula ng linya ay dapat ipakita ang slope ng linya, na nakadepende rin sa intercept, o kung saan nakalagay ang `Y` kapag `X = 0`. +> Ang math na nagkakalkula ng linya ay dapat ipakita ang slope ng linya, na nakadepende rin sa intercept, o kung saan nakaposisyon ang `Y` kapag `X = 0`. > > Maaari mong obserbahan ang paraan ng pagkalkula para sa mga halagang ito sa [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) web site. Bisitahin din ang [Least-squares calculator](https://www.mathsisfun.com/data/least-squares-calculator.html) upang makita kung paano nakakaapekto ang mga halaga ng numero sa linya. ## Correlation -Isa pang terminong dapat maunawaan ay ang **Correlation Coefficient** sa pagitan ng mga X at Y variables. Gamit ang scatterplot, mabilis mong ma-visualize ang coefficient na ito. Ang plot na may mga datapoints na maayos na nakahanay ay may mataas na correlation, ngunit ang plot na may mga datapoints na kalat-kalat sa pagitan ng X at Y ay may mababang correlation. +Isa pang terminong dapat maunawaan ay ang **Correlation Coefficient** sa pagitan ng mga X at Y variables. Gamit ang scatterplot, mabilis mong ma-visualize ang coefficient na ito. Ang plot na may datapoints na maayos na nakahanay ay may mataas na correlation, ngunit ang plot na may datapoints na kalat-kalat sa pagitan ng X at Y ay may mababang correlation. -Ang isang mahusay na linear regression model ay ang isa na may mataas (mas malapit sa 1 kaysa 0) na Correlation Coefficient gamit ang Least-Squares Regression method na may linya ng regression. +Ang isang mahusay na linear regression model ay ang may mataas (mas malapit sa 1 kaysa sa 0) Correlation Coefficient gamit ang Least-Squares Regression method na may linya ng regression. -✅ Patakbuhin ang notebook na kasama ng araling ito at tingnan ang scatterplot ng Month to Price. Ang data ba na nag-uugnay sa Month to Price para sa pagbebenta ng kalabasa ay may mataas o mababang correlation, ayon sa iyong visual na interpretasyon ng scatterplot? Nagbabago ba ito kung gagamit ka ng mas detalyadong sukat sa halip na `Month`, halimbawa *day of the year* (i.e. bilang ng mga araw mula sa simula ng taon)? +✅ Patakbuhin ang notebook na kasama ng araling ito at tingnan ang scatterplot ng Month to Price. Ang data ba na nag-uugnay sa Month to Price para sa pagbebenta ng kalabasa ay mukhang may mataas o mababang correlation, ayon sa iyong visual na interpretasyon ng scatterplot? Nagbabago ba ito kung gumamit ka ng mas detalyadong sukat sa halip na `Month`, halimbawa *day of the year* (i.e. bilang ng mga araw mula sa simula ng taon)? Sa code sa ibaba, ipagpalagay natin na nalinis na natin ang data, at nakakuha ng data frame na tinatawag na `new_pumpkins`, na katulad ng sumusunod: @@ -98,7 +98,7 @@ ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Pri 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 -> Ang code para linisin ang data ay makikita sa [`notebook.ipynb`](notebook.ipynb). Ginawa namin ang parehong mga hakbang sa paglilinis tulad ng sa nakaraang aralin, at kinakalkula ang `DayOfYear` column gamit ang sumusunod na expression: +> Ang code para linisin ang data ay makikita sa [`notebook.ipynb`](../../../../2-Regression/3-Linear/notebook.ipynb). Ginawa namin ang parehong mga hakbang sa paglilinis tulad ng sa nakaraang aralin, at kinakalkula ang `DayOfYear` column gamit ang sumusunod na expression: ```python day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) @@ -112,13 +112,13 @@ Ngayon na nauunawaan mo ang math sa likod ng linear regression, gumawa tayo ng R > 🎥 I-click ang imahe sa itaas para sa maikling video overview ng correlation. -Mula sa nakaraang aralin, malamang nakita mo na ang average na presyo para sa iba't ibang buwan ay ganito: +Mula sa nakaraang aralin, marahil nakita mo na ang average na presyo para sa iba't ibang buwan ay ganito: Average price by month -Ito ay nagpapahiwatig na maaaring may correlation, at maaari nating subukang sanayin ang linear regression model upang hulaan ang relasyon sa pagitan ng `Month` at `Price`, o sa pagitan ng `DayOfYear` at `Price`. Narito ang scatter plot na nagpapakita ng huling relasyon: +Ipinapakita nito na maaaring may correlation, at maaari nating subukang sanayin ang linear regression model upang hulaan ang relasyon sa pagitan ng `Month` at `Price`, o sa pagitan ng `DayOfYear` at `Price`. Narito ang scatter plot na nagpapakita ng huling relasyon: -Scatter plot of Price vs. Day of Year +Scatter plot of Price vs. Day of Year Tingnan natin kung may correlation gamit ang `corr` function: @@ -127,7 +127,7 @@ print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) ``` -Mukhang maliit ang correlation, -0.15 sa `Month` at -0.17 sa `DayOfMonth`, ngunit maaaring may isa pang mahalagang relasyon. Mukhang may iba't ibang clusters ng presyo na tumutugma sa iba't ibang pumpkin varieties. Upang kumpirmahin ang hypothesis na ito, mag-plot tayo ng bawat kategorya ng kalabasa gamit ang iba't ibang kulay. Sa pamamagitan ng pagpasa ng `ax` parameter sa `scatter` plotting function, maaari nating i-plot ang lahat ng puntos sa parehong graph: +Mukhang maliit ang correlation, -0.15 sa `Month` at -0.17 sa `DayOfMonth`, ngunit maaaring may isa pang mahalagang relasyon. Mukhang may iba't ibang clusters ng presyo na tumutugma sa iba't ibang pumpkin varieties. Upang kumpirmahin ang hypothesis na ito, i-plot natin ang bawat kategorya ng kalabasa gamit ang iba't ibang kulay. Sa pamamagitan ng pagpasa ng `ax` parameter sa `scatter` plotting function, maaari nating i-plot ang lahat ng puntos sa parehong graph: ```python ax=None @@ -137,27 +137,27 @@ 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 +Scatter plot of Price vs. Day of Year -Ang ating imbestigasyon ay nagpapahiwatig na ang variety ay may mas malaking epekto sa kabuuang presyo kaysa sa aktwal na petsa ng pagbebenta. Makikita natin ito gamit ang bar graph: +Ang ating pagsisiyasat ay nagpapahiwatig na ang variety ay may mas malaking epekto sa kabuuang presyo kaysa sa aktwal na petsa ng pagbebenta. Makikita natin ito gamit ang bar graph: ```python new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') ``` -Bar graph of price vs variety +Bar graph of price vs variety -Tumutok muna tayo sa isang pumpkin variety, ang 'pie type', at tingnan kung ano ang epekto ng petsa sa presyo: +Tumutok muna tayo sa isang pumpkin variety, ang 'pie type', at tingnan kung anong epekto ang petsa sa presyo: ```python pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] pie_pumpkins.plot.scatter('DayOfYear','Price') ``` -Scatter plot of Price vs. Day of Year +Scatter plot of Price vs. Day of Year -Kung ngayon ay kalkulahin natin ang correlation sa pagitan ng `Price` at `DayOfYear` gamit ang `corr` function, makakakuha tayo ng humigit-kumulang `-0.27` - na nangangahulugang ang pagsasanay ng predictive model ay may saysay. +Kung kalkulahin natin ngayon ang correlation sa pagitan ng `Price` at `DayOfYear` gamit ang `corr` function, makakakuha tayo ng humigit-kumulang `-0.27` - na nangangahulugang may saysay ang pagsasanay ng predictive model. -> Bago sanayin ang linear regression model, mahalagang tiyakin na malinis ang ating data. Hindi mahusay gumagana ang linear regression sa mga nawawalang halaga, kaya't makatuwiran na alisin ang lahat ng mga empty cells: +> Bago sanayin ang linear regression model, mahalagang tiyakin na malinis ang ating data. Hindi mahusay gumagana ang linear regression sa mga nawawalang halaga, kaya't makatuwiran na alisin ang lahat ng empty cells: ```python pie_pumpkins.dropna(inplace=True) @@ -172,7 +172,7 @@ Ang isa pang paraan ay punan ang mga nawawalang halaga gamit ang mean values mul > 🎥 I-click ang imahe sa itaas para sa maikling video overview ng linear at polynomial regression. -Upang sanayin ang ating Linear Regression model, gagamitin natin ang **Scikit-learn** library. +Upang sanayin ang ating Linear Regression model, gagamit tayo ng **Scikit-learn** library. ```python from sklearn.linear_model import LinearRegression @@ -187,7 +187,7 @@ X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) y = pie_pumpkins['Price'] ``` -> Tandaan na kailangan nating i-reshape ang input data upang maunawaan ito nang tama ng Linear Regression package. Ang Linear Regression ay inaasahan ang isang 2D-array bilang input, kung saan ang bawat row ng array ay tumutugma sa isang vector ng input features. Sa ating kaso, dahil mayroon lamang tayong isang input - kailangan natin ng array na may hugis N×1, kung saan ang N ay ang laki ng dataset. +> Tandaan na kailangan nating i-perform ang `reshape` sa input data upang maunawaan ito nang tama ng Linear Regression package. Ang Linear Regression ay inaasahan ang isang 2D-array bilang input, kung saan ang bawat row ng array ay tumutugma sa isang vector ng input features. Sa ating kaso, dahil mayroon lamang tayong isang input - kailangan natin ng array na may hugis N×1, kung saan ang N ay ang laki ng dataset. Pagkatapos, kailangan nating hatiin ang data sa train at test datasets, upang ma-validate natin ang ating modelo pagkatapos ng pagsasanay: @@ -204,7 +204,7 @@ lin_reg.fit(X_train,y_train) Ang `LinearRegression` object pagkatapos ng `fit`-ting ay naglalaman ng lahat ng coefficients ng regression, na maaaring ma-access gamit ang `.coef_` property. Sa ating kaso, mayroon lamang isang coefficient, na dapat ay nasa paligid ng `-0.017`. Ibig sabihin, ang mga presyo ay tila bumababa nang kaunti sa paglipas ng panahon, ngunit hindi masyado, humigit-kumulang 2 cents kada araw. Maaari rin nating ma-access ang intersection point ng regression sa Y-axis gamit ang `lin_reg.intercept_` - ito ay nasa paligid ng `21` sa ating kaso, na nagpapahiwatig ng presyo sa simula ng taon. -Upang makita kung gaano katumpak ang ating modelo, maaari nating hulaan ang mga presyo sa test dataset, at pagkatapos ay sukatin kung gaano kalapit ang ating mga prediksyon sa mga inaasahang halaga. Magagawa ito gamit ang mean square error (MSE) metrics, na siyang mean ng lahat ng squared differences sa pagitan ng inaasahan at prediktadong halaga. +Upang makita kung gaano katumpak ang ating modelo, maaari nating hulaan ang mga presyo sa test dataset, at pagkatapos ay sukatin kung gaano kalapit ang ating mga prediksyon sa inaasahang mga halaga. Magagawa ito gamit ang mean square error (MSE) metrics, na siyang mean ng lahat ng squared differences sa pagitan ng inaasahan at prediktadong halaga. ```python pred = lin_reg.predict(X_test) @@ -212,13 +212,13 @@ pred = lin_reg.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}%)') ``` -Ang ating error ay tila nasa paligid ng 2 puntos, na humigit-kumulang 17%. Hindi ito masyadong maganda. Isa pang indikasyon ng kalidad ng modelo ay ang **coefficient of determination**, na maaaring makuha sa ganitong paraan: +Ang ating error ay tila nasa paligid ng 2 puntos, na ~17%. Hindi masyadong maganda. Isa pang indikasyon ng kalidad ng modelo ay ang **coefficient of determination**, na maaaring makuha sa ganitong paraan: ```python score = lin_reg.score(X_train,y_train) print('Model determination: ', score) ``` -Kung ang halaga ay 0, nangangahulugan ito na hindi isinasaalang-alang ng modelo ang input data at kumikilos bilang *pinakamasamang linear predictor*, na simpleng mean value lamang ng resulta. Ang halaga na 1 ay nangangahulugan na kaya nating hulaan nang perpekto ang lahat ng inaasahang output. Sa ating kaso, ang coefficient ay nasa paligid ng 0.06, na medyo mababa. +Kung ang halaga ay 0, nangangahulugan ito na ang modelo ay hindi isinasaalang-alang ang input data, at kumikilos bilang *pinakamasamang linear predictor*, na simpleng mean value ng resulta. Ang halaga na 1 ay nangangahulugan na maaari nating perpektong mahulaan ang lahat ng inaasahang output. Sa ating kaso, ang coefficient ay nasa paligid ng 0.06, na medyo mababa. Maaari rin nating i-plot ang test data kasama ang regression line upang mas makita kung paano gumagana ang regression sa ating kaso: @@ -231,17 +231,17 @@ plt.plot(X_test,pred) ## Polynomial Regression -Isa pang uri ng Linear Regression ay ang Polynomial Regression. Habang minsan may linear na relasyon sa pagitan ng mga variable - tulad ng mas malaki ang volume ng kalabasa, mas mataas ang presyo - may mga pagkakataon na ang mga relasyong ito ay hindi maaaring i-plot bilang isang eroplano o tuwid na linya. +Isa pang uri ng Linear Regression ay ang Polynomial Regression. Bagamat minsan may linear na relasyon sa pagitan ng mga variable - mas malaki ang volume ng kalabasa, mas mataas ang presyo - minsan ang mga relasyong ito ay hindi maaaring i-plot bilang isang plane o tuwid na linya. ✅ Narito ang [ilang mga halimbawa](https://online.stat.psu.edu/stat501/lesson/9/9.8) ng data na maaaring gumamit ng Polynomial Regression. -Balikan ang relasyon sa pagitan ng Petsa at Presyo. Ang scatterplot ba na ito ay tila dapat suriin gamit ang isang tuwid na linya? Hindi ba maaaring magbago-bago ang mga presyo? Sa kasong ito, maaari mong subukan ang polynomial regression. +Tingnan muli ang relasyon sa pagitan ng Petsa at Presyo. Mukha bang ang scatterplot na ito ay dapat na suriin gamit ang tuwid na linya? Hindi ba maaaring magbago-bago ang mga presyo? Sa ganitong kaso, maaari mong subukan ang polynomial regression. -✅ Ang mga polynomial ay mga ekspresyong matematika na maaaring binubuo ng isa o higit pang mga variable at coefficients. +✅ Ang mga polynomial ay mga matematikal na ekspresyon na maaaring binubuo ng isa o higit pang mga variable at coefficients. -Ang Polynomial regression ay lumilikha ng isang kurbadong linya upang mas maangkop ang nonlinear na data. Sa ating kaso, kung isasama natin ang isang squared na `DayOfYear` variable sa input data, dapat nating maangkop ang ating data gamit ang isang parabolic curve, na magkakaroon ng minimum sa isang tiyak na punto sa loob ng taon. +Ang Polynomial Regression ay lumilikha ng kurbadong linya upang mas maayos na magkasya sa nonlinear na data. Sa ating kaso, kung isasama natin ang squared na `DayOfYear` variable sa input data, dapat nating magawang i-fit ang ating data gamit ang isang parabolic curve, na magkakaroon ng minimum sa isang tiyak na punto sa loob ng taon. -Ang Scikit-learn ay may kasamang kapaki-pakinabang na [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) upang pagsamahin ang iba't ibang hakbang ng pagproseso ng data. Ang isang **pipeline** ay isang kadena ng **estimators**. Sa ating kaso, lilikha tayo ng pipeline na unang magdaragdag ng polynomial features sa ating modelo, at pagkatapos ay magsasanay ng regression: +Ang Scikit-learn ay may kasamang kapaki-pakinabang na [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) upang pagsamahin ang iba't ibang hakbang ng data processing. Ang **pipeline** ay isang chain ng **estimators**. Sa ating kaso, gagawa tayo ng pipeline na unang magdadagdag ng polynomial features sa ating modelo, at pagkatapos ay magsasanay ng regression: ```python from sklearn.preprocessing import PolynomialFeatures @@ -252,36 +252,36 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train,y_train) ``` -Ang paggamit ng `PolynomialFeatures(2)` ay nangangahulugan na isasama natin ang lahat ng second-degree polynomials mula sa input data. Sa ating kaso, ito ay mangangahulugan lamang ng `DayOfYear`2, ngunit kung may dalawang input variables na X at Y, ito ay magdaragdag ng X2, XY, at Y2. Maaari rin tayong gumamit ng mas mataas na degree ng polynomials kung nais natin. +Ang paggamit ng `PolynomialFeatures(2)` ay nangangahulugan na isasama natin ang lahat ng second-degree polynomials mula sa input data. Sa ating kaso, ito ay nangangahulugan lamang ng `DayOfYear`2, ngunit kung may dalawang input variables na X at Y, ito ay magdadagdag ng X2, XY, at Y2. Maaari rin tayong gumamit ng mas mataas na degree na polynomials kung nais natin. -Ang mga pipeline ay maaaring gamitin sa parehong paraan tulad ng orihinal na `LinearRegression` object, ibig sabihin, maaari nating `fit` ang pipeline, at pagkatapos ay gamitin ang `predict` upang makuha ang mga resulta ng prediksyon. Narito ang graph na nagpapakita ng test data, at ang approximation curve: +Ang mga pipeline ay maaaring gamitin sa parehong paraan tulad ng orihinal na `LinearRegression` object, ibig sabihin maaari nating `fit` ang pipeline, at pagkatapos ay gamitin ang `predict` upang makuha ang mga resulta ng prediksyon. Narito ang graph na nagpapakita ng test data, at ang approximation curve: Polynomial regression -Gamit ang Polynomial Regression, maaari tayong makakuha ng bahagyang mas mababang MSE at mas mataas na determination, ngunit hindi ito gaanong malaki. Kailangan nating isaalang-alang ang iba pang mga feature! +Sa paggamit ng Polynomial Regression, maaari tayong makakuha ng bahagyang mas mababang MSE at mas mataas na determination, ngunit hindi gaanong malaki. Kailangan nating isaalang-alang ang iba pang mga features! -> Mapapansin mo na ang pinakamababang presyo ng kalabasa ay nakikita sa paligid ng Halloween. Paano mo ito maipapaliwanag? +> Makikita mo na ang pinakamababang presyo ng kalabasa ay napapansin sa paligid ng Halloween. Paano mo ito maipapaliwanag? -🎃 Binabati kita, nakagawa ka ng isang modelo na makakatulong sa paghula ng presyo ng pie pumpkins. Marahil ay maaari mong ulitin ang parehong proseso para sa lahat ng uri ng kalabasa, ngunit magiging nakakapagod iyon. Alamin natin ngayon kung paano isasama ang iba't ibang uri ng kalabasa sa ating modelo! +🎃 Binabati kita, nakagawa ka ng modelo na makakatulong sa paghulaan ang presyo ng pie pumpkins. Maaari mong ulitin ang parehong proseso para sa lahat ng uri ng kalabasa, ngunit magiging nakakapagod iyon. Alamin natin ngayon kung paano isama ang iba't ibang uri ng kalabasa sa ating modelo! ## Categorical Features -Sa ideal na mundo, nais nating mahulaan ang mga presyo para sa iba't ibang uri ng kalabasa gamit ang parehong modelo. Gayunpaman, ang column na `Variety` ay medyo naiiba sa mga column tulad ng `Month`, dahil naglalaman ito ng mga non-numeric na halaga. Ang ganitong mga column ay tinatawag na **categorical**. +Sa ideal na mundo, nais nating mahulaan ang mga presyo para sa iba't ibang uri ng kalabasa gamit ang parehong modelo. Gayunpaman, ang column na `Variety` ay medyo naiiba sa mga column tulad ng `Month`, dahil naglalaman ito ng non-numeric na mga halaga. Ang ganitong mga column ay tinatawag na **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") -> 🎥 I-click ang larawan sa itaas para sa maikling video tungkol sa paggamit ng categorical features. +> 🎥 I-click ang imahe sa itaas para sa maikling video overview ng paggamit ng categorical features. -Narito ang makikita mo kung paano nakadepende ang average na presyo sa variety: +Narito makikita mo kung paano nakadepende ang average na presyo sa variety: Average price by variety -Upang maisama ang variety, kailangan muna nating i-convert ito sa numeric form, o **encode** ito. May ilang paraan upang gawin ito: +Upang isama ang variety, kailangan muna nating i-convert ito sa numeric form, o **encode** ito. May ilang paraan upang gawin ito: -* Ang simpleng **numeric encoding** ay gagawa ng isang talahanayan ng iba't ibang varieties, at pagkatapos ay papalitan ang pangalan ng variety ng isang index sa talahanayan. Hindi ito ang pinakamahusay na ideya para sa linear regression, dahil isinasaalang-alang ng linear regression ang aktwal na numeric value ng index, at idinadagdag ito sa resulta, na pinararami ng ilang coefficient. Sa ating kaso, ang relasyon sa pagitan ng numero ng index at ng presyo ay malinaw na hindi linear, kahit na tiyakin nating ang mga index ay nakaayos sa isang partikular na paraan. -* Ang **One-hot encoding** ay papalitan ang column na `Variety` ng 4 na magkakaibang column, isa para sa bawat variety. Ang bawat column ay maglalaman ng `1` kung ang kaukulang row ay kabilang sa isang partikular na variety, at `0` kung hindi. Nangangahulugan ito na magkakaroon ng apat na coefficients sa linear regression, isa para sa bawat uri ng kalabasa, na responsable para sa "panimulang presyo" (o mas tamang "karagdagang presyo") para sa partikular na variety. +* Ang simpleng **numeric encoding** ay gagawa ng table ng iba't ibang varieties, at pagkatapos ay papalitan ang pangalan ng variety ng index sa table na iyon. Hindi ito ang pinakamahusay na ideya para sa linear regression, dahil ang linear regression ay gumagamit ng aktwal na numeric value ng index, at idinadagdag ito sa resulta, na pinararami ng ilang coefficient. Sa ating kaso, ang relasyon sa pagitan ng index number at presyo ay malinaw na hindi linear, kahit na tiyakin natin na ang mga indices ay nakaayos sa isang partikular na paraan. +* Ang **one-hot encoding** ay papalitan ang column na `Variety` ng 4 na magkakaibang column, isa para sa bawat variety. Ang bawat column ay maglalaman ng `1` kung ang kaukulang row ay ng isang partikular na variety, at `0` kung hindi. Nangangahulugan ito na magkakaroon ng apat na coefficients sa linear regression, isa para sa bawat uri ng kalabasa, na responsable para sa "starting price" (o "additional price") para sa partikular na variety. -Ang code sa ibaba ay nagpapakita kung paano natin mai-o-one-hot encode ang isang variety: +Ang code sa ibaba ay nagpapakita kung paano natin mai-one-hot encode ang variety: ```python pd.get_dummies(new_pumpkins['Variety']) @@ -298,14 +298,14 @@ pd.get_dummies(new_pumpkins['Variety']) 1741 | 0 | 1 | 0 | 0 1742 | 0 | 1 | 0 | 0 -Upang sanayin ang linear regression gamit ang one-hot encoded variety bilang input, kailangan lang nating i-initialize nang tama ang `X` at `y` data: +Upang magsanay ng linear regression gamit ang one-hot encoded variety bilang input, kailangan lang nating i-initialize ang `X` at `y` data nang tama: ```python X = pd.get_dummies(new_pumpkins['Variety']) y = new_pumpkins['Price'] ``` -Ang natitirang bahagi ng code ay pareho sa ginamit natin sa itaas upang sanayin ang Linear Regression. Kung susubukan mo ito, makikita mo na ang mean squared error ay halos pareho, ngunit nakakakuha tayo ng mas mataas na coefficient of determination (~77%). Upang makakuha ng mas tumpak na mga prediksyon, maaari nating isama ang mas maraming categorical features, pati na rin ang mga numeric features, tulad ng `Month` o `DayOfYear`. Upang makakuha ng isang malaking array ng mga feature, maaari nating gamitin ang `join`: +Ang natitirang code ay pareho sa ginamit natin sa itaas upang magsanay ng Linear Regression. Kung susubukan mo ito, makikita mo na ang mean squared error ay halos pareho, ngunit nakakakuha tayo ng mas mataas na coefficient of determination (~77%). Upang makakuha ng mas tumpak na prediksyon, maaari nating isama ang mas maraming categorical features, pati na rin ang numeric features, tulad ng `Month` o `DayOfYear`. Upang makakuha ng isang malaking array ng features, maaari nating gamitin ang `join`: ```python X = pd.get_dummies(new_pumpkins['Variety']) \ @@ -315,11 +315,11 @@ X = pd.get_dummies(new_pumpkins['Variety']) \ y = new_pumpkins['Price'] ``` -Dito isinama rin natin ang `City` at uri ng `Package`, na nagbigay sa atin ng MSE na 2.84 (10%), at determination na 0.94! +Dito isinama rin natin ang `City` at `Package` type, na nagbibigay sa atin ng MSE 2.84 (10%), at determination 0.94! ## Pagsasama-sama ng Lahat -Upang makagawa ng pinakamahusay na modelo, maaari nating gamitin ang pinagsamang (one-hot encoded categorical + numeric) data mula sa halimbawa sa itaas kasama ang Polynomial Regression. Narito ang kumpletong code para sa iyong kaginhawaan: +Upang makagawa ng pinakamahusay na modelo, maaari nating gamitin ang pinagsamang (one-hot encoded categorical + numeric) data mula sa halimbawa sa itaas kasama ang Polynomial Regression. Narito ang kumpletong code para sa iyong kaginhawahan: ```python # set up training data @@ -357,25 +357,25 @@ Dapat nitong ibigay sa atin ang pinakamahusay na determination coefficient na ha | All features Linear | 2.84 (10.5%) | 0.94 | | All features Polynomial | 2.23 (8.25%) | 0.97 | -🏆 Magaling! Nakagawa ka ng apat na Regression models sa isang aralin, at napabuti ang kalidad ng modelo sa 97%. Sa huling bahagi ng Regression, matututo ka tungkol sa Logistic Regression upang matukoy ang mga kategorya. +🏆 Magaling! Nakagawa ka ng apat na Regression models sa isang aralin, at napabuti ang kalidad ng modelo sa 97%. Sa huling seksyon ng Regression, matututo ka tungkol sa Logistic Regression upang matukoy ang mga kategorya. --- -## 🚀Hamunin ang Iyong Sarili +## 🚀Hamunin -Subukan ang iba't ibang mga variable sa notebook na ito upang makita kung paano nauugnay ang correlation sa katumpakan ng modelo. +Subukan ang ilang iba't ibang mga variable sa notebook na ito upang makita kung paano tumutugma ang correlation sa accuracy ng modelo. -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/) +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -## Review at Pag-aaral sa Sarili +## Review & Self Study -Sa araling ito, natutunan natin ang tungkol sa Linear Regression. Mayroon pang ibang mahahalagang uri ng Regression. Basahin ang tungkol sa Stepwise, Ridge, Lasso, at Elasticnet techniques. Isang magandang kurso na maaaring pag-aralan upang matuto pa ay ang [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning). +Sa araling ito natutunan natin ang tungkol sa Linear Regression. May iba pang mahahalagang uri ng Regression. Basahin ang tungkol sa Stepwise, Ridge, Lasso, at Elasticnet techniques. Isang magandang kurso na maaaring pag-aralan upang matuto pa ay ang [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning). ## Takdang Aralin -[Magbuo ng Modelo](assignment.md) +[Magbuo ng Modelo](assignment.md) --- **Paunawa**: -Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file +Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file diff --git a/translations/tl/2-Regression/4-Logistic/README.md b/translations/tl/2-Regression/4-Logistic/README.md index ebde8b3a..e87a90f6 100644 --- a/translations/tl/2-Regression/4-Logistic/README.md +++ b/translations/tl/2-Regression/4-Logistic/README.md @@ -1,23 +1,23 @@ # Logistic regression para sa pag-predict ng mga kategorya -![Infographic ng Logistic vs. Linear Regression](../../../../translated_images/linear-vs-logistic.ba180bf95e7ee66721ba10ebf2dac2666acbd64a88b003c83928712433a13c7d.tl.png) +![Infographic ng Logistic vs. Linear Regression](../../../../2-Regression/4-Logistic/images/linear-vs-logistic.png) -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) > ### [Ang araling ito ay available sa R!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html) ## Panimula -Sa huling aralin na ito tungkol sa Regression, isa sa mga pangunahing _classic_ na teknik sa ML, tatalakayin natin ang Logistic Regression. Ginagamit ang teknik na ito upang matuklasan ang mga pattern para mag-predict ng binary categories. Ang candy ba ay chocolate o hindi? Ang sakit ba ay nakakahawa o hindi? Pipiliin ba ng customer ang produktong ito o hindi? +Sa huling araling ito tungkol sa Regression, isa sa mga pangunahing _classic_ na teknik sa ML, tatalakayin natin ang Logistic Regression. Ginagamit ang teknik na ito upang matuklasan ang mga pattern para mag-predict ng binary categories. Ang candy ba ay chocolate o hindi? Ang sakit ba ay nakakahawa o hindi? Pipiliin ba ng customer ang produktong ito o hindi? Sa araling ito, matututunan mo: @@ -30,9 +30,9 @@ Sa araling ito, matututunan mo: Dahil nagtrabaho na tayo sa pumpkin data, sapat na ang ating kaalaman upang mapansin na may isang binary category na maaari nating pag-aralan: `Color`. -Gumawa tayo ng logistic regression model upang mag-predict, gamit ang ilang variables, _kung anong kulay ang malamang na maging isang pumpkin_ (orange 🎃 o white 👻). +Gumawa tayo ng logistic regression model upang mag-predict kung, batay sa ilang variables, _anong kulay ang malamang na maging isang pumpkin_ (orange 🎃 o white 👻). -> Bakit natin pinag-uusapan ang binary classification sa isang aralin tungkol sa regression? Para lamang sa kaginhawaan sa wika, dahil ang logistic regression ay [talagang isang classification method](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), bagamat linear-based ito. Matuto tungkol sa iba pang paraan ng pag-classify ng data sa susunod na grupo ng aralin. +> Bakit natin pinag-uusapan ang binary classification sa isang aralin tungkol sa regression? Para lamang sa linguistic convenience, dahil ang logistic regression ay [talagang isang classification method](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), bagamat linear-based. Matuto tungkol sa iba pang paraan ng pag-classify ng data sa susunod na grupo ng aralin. ## Tukuyin ang tanong @@ -50,9 +50,9 @@ Ang logistic regression ay naiiba sa linear regression, na natutunan mo na dati, ### Binary classification -Ang logistic regression ay hindi nag-aalok ng parehong features tulad ng linear regression. Ang una ay nagbibigay ng prediction tungkol sa binary category ("white o hindi white") samantalang ang huli ay kayang mag-predict ng patuloy na values, halimbawa, batay sa pinanggalingan ng pumpkin at oras ng pag-ani, _kung gaano tataas ang presyo nito_. +Ang logistic regression ay hindi nag-aalok ng parehong features tulad ng linear regression. Ang una ay nagbibigay ng prediction tungkol sa binary category ("white o hindi white") samantalang ang huli ay may kakayahang mag-predict ng patuloy na values, halimbawa batay sa pinanggalingan ng pumpkin at oras ng pag-ani, _kung gaano tataas ang presyo nito_. -![Model ng Pumpkin Classification](../../../../translated_images/pumpkin-classifier.562771f104ad5436b87d1c67bca02a42a17841133556559325c0a0e348e5b774.tl.png) +![Model ng Pumpkin Classification](../../../../2-Regression/4-Logistic/images/pumpkin-classifier.png) > Infographic ni [Dasani Madipalli](https://twitter.com/dasani_decoded) ### Iba pang classifications @@ -60,25 +60,27 @@ Ang logistic regression ay hindi nag-aalok ng parehong features tulad ng linear May iba pang uri ng logistic regression, kabilang ang multinomial at ordinal: - **Multinomial**, na may higit sa isang kategorya - "Orange, White, at Striped". -- **Ordinal**, na may ordered categories, kapaki-pakinabang kung nais nating i-order ang ating outcomes nang lohikal, tulad ng ating pumpkins na naka-order ayon sa finite na bilang ng sizes (mini, sm, med, lg, xl, xxl). +- **Ordinal**, na may ordered categories, kapaki-pakinabang kung nais nating i-order ang ating outcomes nang lohikal, tulad ng ating pumpkins na naka-order batay sa finite na bilang ng sizes (mini, sm, med, lg, xl, xxl). -![Multinomial vs ordinal regression](../../../../translated_images/multinomial-vs-ordinal.36701b4850e37d86c9dd49f7bef93a2f94dbdb8fe03443eb68f0542f97f28f29.tl.png) +![Multinomial vs ordinal regression](../../../../2-Regression/4-Logistic/images/multinomial-vs-ordinal.png) ### Hindi kailangang mag-correlate ang mga variables -Tandaan kung paano mas gumagana ang linear regression sa mas correlated na variables? Ang logistic regression ay kabaligtaran - hindi kailangang mag-align ang mga variables. Angkop ito para sa data na may medyo mahina ang correlations. +Tandaan kung paano mas gumagana ang linear regression sa mas correlated na variables? Ang logistic regression ay kabaligtaran - hindi kailangang mag-align ang mga variables. Angkop ito para sa data na may medyo mahina na correlations. ### Kailangan mo ng maraming malinis na data -Mas accurate ang resulta ng logistic regression kung mas maraming data ang gagamitin; ang maliit na dataset natin ay hindi optimal para sa task na ito, kaya tandaan ito. +Mas accurate ang resulta ng logistic regression kung mas maraming data ang ginagamit; ang maliit na dataset natin ay hindi optimal para sa task na ito, kaya tandaan ito. [![ML para sa mga nagsisimula - Data Analysis at Preparation para sa Logistic Regression](https://img.youtube.com/vi/B2X4H9vcXTs/0.jpg)](https://youtu.be/B2X4H9vcXTs "ML para sa mga nagsisimula - Data Analysis at Preparation para sa Logistic Regression") +> 🎥 I-click ang imahe sa itaas para sa maikling video overview ng paghahanda ng data para sa linear regression + ✅ Pag-isipan ang mga uri ng data na angkop para sa logistic regression ## Ehersisyo - ayusin ang data -Una, linisin ang data nang kaunti, tanggalin ang mga null values at piliin lamang ang ilang columns: +Una, linisin ang data nang kaunti, tanggalin ang mga null values at piliin lamang ang ilang mga column: 1. Idagdag ang sumusunod na code: @@ -98,7 +100,7 @@ Una, linisin ang data nang kaunti, tanggalin ang mga null values at piliin laman ### Visualization - categorical plot -Sa puntong ito, na-load mo na ang [starter notebook](./notebook.ipynb) gamit ang pumpkin data at nilinis ito upang mapanatili ang dataset na naglalaman ng ilang variables, kabilang ang `Color`. I-visualize natin ang dataframe sa notebook gamit ang ibang library: [Seaborn](https://seaborn.pydata.org/index.html), na nakabatay sa Matplotlib na ginamit natin dati. +Sa puntong ito, na-load mo na ang [starter notebook](../../../../2-Regression/4-Logistic/notebook.ipynb) gamit ang pumpkin data at nilinis ito upang mapanatili ang dataset na naglalaman ng ilang variables, kabilang ang `Color`. I-visualize natin ang dataframe sa notebook gamit ang ibang library: [Seaborn](https://seaborn.pydata.org/index.html), na nakabatay sa Matplotlib na ginamit natin dati. Nag-aalok ang Seaborn ng mga magagandang paraan upang i-visualize ang iyong data. Halimbawa, maaari mong ikumpara ang distributions ng data para sa bawat `Variety` at `Color` sa isang categorical plot. @@ -118,7 +120,7 @@ Nag-aalok ang Seaborn ng mga magagandang paraan upang i-visualize ang iyong data ) ``` - ![Grid ng visualized data](../../../../translated_images/pumpkins_catplot_1.c55c409b71fea2ecc01921e64b91970542101f90bcccfa4aa3a205db8936f48b.tl.png) + ![Grid ng visualized data](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_1.png) Sa pag-obserba ng data, makikita mo kung paano nauugnay ang Color data sa Variety. @@ -126,11 +128,11 @@ Nag-aalok ang Seaborn ng mga magagandang paraan upang i-visualize ang iyong data ### Data pre-processing: feature at label encoding -Ang pumpkins dataset natin ay naglalaman ng string values para sa lahat ng columns nito. Ang pag-trabaho sa categorical data ay intuitive para sa tao ngunit hindi para sa mga makina. Ang machine learning algorithms ay mas mahusay gumana sa mga numero. Kaya't ang encoding ay isang mahalagang hakbang sa data pre-processing phase, dahil pinapayagan nitong gawing numerical data ang categorical data nang hindi nawawala ang anumang impormasyon. Ang mahusay na encoding ay nagreresulta sa paggawa ng mahusay na modelo. +Ang dataset ng pumpkins ay naglalaman ng string values para sa lahat ng mga column nito. Ang paggamit ng categorical data ay intuitive para sa mga tao ngunit hindi para sa mga makina. Ang machine learning algorithms ay mas mahusay gumana sa mga numero. Kaya't ang encoding ay isang napakahalagang hakbang sa data pre-processing phase, dahil pinapayagan tayo nitong gawing numerical data ang categorical data, nang hindi nawawala ang anumang impormasyon. Ang mahusay na encoding ay nagreresulta sa paggawa ng mahusay na modelo. Para sa feature encoding, may dalawang pangunahing uri ng encoders: -1. Ordinal encoder: angkop ito para sa ordinal variables, na mga categorical variables kung saan ang kanilang data ay may lohikal na pagkakasunod-sunod, tulad ng `Item Size` column sa ating dataset. Gumagawa ito ng mapping kung saan ang bawat kategorya ay kinakatawan ng isang numero, na siyang pagkakasunod-sunod ng kategorya sa column. +1. Ordinal encoder: angkop ito para sa ordinal variables, na mga categorical variables kung saan ang kanilang data ay sumusunod sa lohikal na pagkakasunod-sunod, tulad ng `Item Size` column sa ating dataset. Gumagawa ito ng mapping kung saan ang bawat kategorya ay kinakatawan ng isang numero, na siyang pagkakasunod-sunod ng kategorya sa column. ```python from sklearn.preprocessing import OrdinalEncoder @@ -140,7 +142,7 @@ Para sa feature encoding, may dalawang pangunahing uri ng encoders: ordinal_encoder = OrdinalEncoder(categories=item_size_categories) ``` -2. Categorical encoder: angkop ito para sa nominal variables, na mga categorical variables kung saan ang kanilang data ay walang lohikal na pagkakasunod-sunod, tulad ng lahat ng features maliban sa `Item Size` sa ating dataset. Ito ay isang one-hot encoding, na nangangahulugang ang bawat kategorya ay kinakatawan ng isang binary column: ang encoded variable ay katumbas ng 1 kung ang pumpkin ay kabilang sa Variety na iyon at 0 kung hindi. +2. Categorical encoder: angkop ito para sa nominal variables, na mga categorical variables kung saan ang kanilang data ay hindi sumusunod sa lohikal na pagkakasunod-sunod, tulad ng lahat ng features maliban sa `Item Size` sa ating dataset. Ito ay isang one-hot encoding, na nangangahulugang ang bawat kategorya ay kinakatawan ng isang binary column: ang encoded variable ay katumbas ng 1 kung ang pumpkin ay kabilang sa Variety na iyon at 0 kung hindi. ```python from sklearn.preprocessing import OneHotEncoder @@ -149,7 +151,7 @@ Para sa feature encoding, may dalawang pangunahing uri ng encoders: categorical_encoder = OneHotEncoder(sparse_output=False) ``` -Pagkatapos, ginagamit ang `ColumnTransformer` upang pagsamahin ang maraming encoders sa isang hakbang at i-apply ang mga ito sa tamang columns. +Pagkatapos, ginagamit ang `ColumnTransformer` upang pagsamahin ang maraming encoders sa isang hakbang at i-apply ang mga ito sa tamang mga column. ```python from sklearn.compose import ColumnTransformer @@ -202,7 +204,7 @@ Ngayon na na-pre-process na natin ang data, maaari nating suriin ang relasyon sa g.set_titles(row_template="{row_name}") ``` -![Catplot ng visualized data](../../../../translated_images/pumpkins_catplot_2.87a354447880b3889278155957f8f60dd63db4598de5a6d0fda91c334d31f9f1.tl.png) +![Catplot ng visualized data](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_2.png) ### Gumamit ng swarm plot @@ -220,21 +222,21 @@ Maaari mong i-visualize ang mga variables nang magkatabi gamit ang Seaborn plots sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette) ``` - ![Swarm ng visualized data](../../../../translated_images/swarm_2.efeacfca536c2b577dc7b5f8891f28926663fbf62d893ab5e1278ae734ca104e.tl.png) + ![Swarm ng visualized data](../../../../2-Regression/4-Logistic/images/swarm_2.png) -**Mag-ingat**: ang code sa itaas ay maaaring mag-generate ng warning, dahil ang seaborn ay nahihirapang i-represent ang ganitong dami ng datapoints sa isang swarm plot. Ang posibleng solusyon ay bawasan ang laki ng marker, gamit ang 'size' parameter. Gayunpaman, tandaan na maaapektuhan nito ang readability ng plot. +**Mag-ingat**: ang code sa itaas ay maaaring mag-generate ng warning, dahil hindi maipapakita ng seaborn ang ganitong dami ng datapoints sa isang swarm plot. Ang posibleng solusyon ay bawasan ang laki ng marker, gamit ang 'size' parameter. Gayunpaman, tandaan na maaapektuhan nito ang readability ng plot. > **🧮 Ipakita ang Math** > > Ang logistic regression ay nakabatay sa konsepto ng 'maximum likelihood' gamit ang [sigmoid functions](https://wikipedia.org/wiki/Sigmoid_function). Ang 'Sigmoid Function' sa isang plot ay mukhang hugis 'S'. Kinukuha nito ang isang value at ina-map ito sa pagitan ng 0 at 1. Ang curve nito ay tinatawag ding 'logistic curve'. Ang formula nito ay ganito: > -> ![logistic function](../../../../translated_images/sigmoid.8b7ba9d095c789cf72780675d0d1d44980c3736617329abfc392dfc859799704.tl.png) +> ![logistic function](../../../../2-Regression/4-Logistic/images/sigmoid.png) > > kung saan ang midpoint ng sigmoid ay nasa x's 0 point, L ang maximum value ng curve, at k ang steepness ng curve. Kung ang resulta ng function ay higit sa 0.5, ang label ay bibigyan ng class '1' ng binary choice. Kung hindi, ito ay ikakategorya bilang '0'. -## Gumawa ng iyong modelo +## Bumuo ng iyong modelo -Ang paggawa ng modelo upang mahanap ang binary classification ay nakakagulat na simple gamit ang Scikit-learn. +Ang paggawa ng modelo upang mahanap ang mga binary classification ay nakakagulat na simple sa Scikit-learn. [![ML para sa mga nagsisimula - Logistic Regression para sa classification ng data](https://img.youtube.com/vi/MmZS2otPrQ8/0.jpg)](https://youtu.be/MmZS2otPrQ8 "ML para sa mga nagsisimula - Logistic Regression para sa classification ng data") @@ -317,10 +319,10 @@ Sa Scikit-learn, ang Rows (axis 0) ay actual labels at ang columns (axis 1) ay p Ano ang nangyayari dito? Sabihin nating ang modelo natin ay tinanong upang i-classify ang pumpkins sa pagitan ng dalawang binary categories, category 'white' at category 'not-white'. -- Kung ang modelo mo ay nag-predict ng pumpkin bilang not white at ito ay talagang kabilang sa category 'not-white', tinatawag natin itong true negative, na ipinapakita ng numero sa kaliwang itaas. -- Kung ang modelo mo ay nag-predict ng pumpkin bilang white ngunit ito ay talagang kabilang sa category 'not-white', tinatawag natin itong false negative, na ipinapakita ng numero sa kaliwang ibaba. -- Kung ang modelo mo ay nag-predict ng pumpkin bilang not white ngunit ito ay talagang kabilang sa category 'white', tinatawag natin itong false positive, na ipinapakita ng numero sa kanang itaas. -- Kung ang modelo mo ay nag-predict ng pumpkin bilang white at ito ay talagang kabilang sa category 'white', tinatawag natin itong true positive, na ipinapakita ng numero sa kanang ibaba. +- Kung ang modelo mo ay nag-predict ng pumpkin bilang hindi white at ito ay kabilang sa category 'not-white' sa realidad, tinatawag natin itong true negative, na ipinapakita ng numero sa kaliwang itaas. +- Kung ang modelo mo ay nag-predict ng pumpkin bilang white at ito ay kabilang sa category 'not-white' sa realidad, tinatawag natin itong false negative, na ipinapakita ng numero sa kaliwang ibaba. +- Kung ang modelo mo ay nag-predict ng pumpkin bilang hindi white at ito ay kabilang sa category 'white' sa realidad, tinatawag natin itong false positive, na ipinapakita ng numero sa kanang itaas. +- Kung ang modelo mo ay nag-predict ng pumpkin bilang white at ito ay kabilang sa category 'white' sa realidad, tinatawag natin itong true positive, na ipinapakita ng numero sa kanang ibaba. Tulad ng inaasahan mo, mas mainam na magkaroon ng mas malaking bilang ng true positives at true negatives at mas mababang bilang ng false positives at false negatives, na nagpapahiwatig na mas mahusay ang performance ng modelo. Paano nauugnay ang confusion matrix sa precision at recall? Tandaan, ang classification report na ipinakita sa itaas ay nagpakita ng precision (0.85) at recall (0.67). @@ -335,16 +337,16 @@ A: Hindi masama; may magandang bilang ng true negatives ngunit mayroon ding ilan Balikan natin ang mga terminong nakita natin kanina gamit ang mapping ng TP/TN at FP/FN sa confusion matrix: 🎓 Precision: TP/(TP + FP) -Ang bahagi ng mga tamang instance sa mga nakuha na instance (hal. aling mga label ang maayos na na-label). +Ang bahagi ng mga tamang instance sa mga nakuha na instance (hal. aling mga label ang maayos na na-label) 🎓 Recall: TP/(TP + FN) -Ang bahagi ng mga tamang instance na nakuha, maayos man ang pagkaka-label o hindi. +Ang bahagi ng mga tamang instance na nakuha, maayos man ang pagkaka-label o hindi 🎓 f1-score: (2 * precision * recall)/(precision + recall) -Isang weighted average ng precision at recall, kung saan ang pinakamaganda ay 1 at ang pinakamasama ay 0. +Isang weighted average ng precision at recall, kung saan ang pinakamaganda ay 1 at ang pinakamasama ay 0 🎓 Support: -Ang bilang ng mga paglitaw ng bawat label na nakuha. +Ang bilang ng mga paglitaw ng bawat label na nakuha 🎓 Accuracy: (TP + TN)/(TP + TN + FP + FN) Ang porsyento ng mga label na tama ang prediksyon para sa isang sample. @@ -355,13 +357,13 @@ Ang kalkulasyon ng unweighted mean metrics para sa bawat label, hindi isinasaala 🎓 Weighted Avg: Ang kalkulasyon ng mean metrics para sa bawat label, isinasaalang-alang ang imbalance ng label sa pamamagitan ng pag-weight base sa kanilang support (ang bilang ng tamang instance para sa bawat label). -✅ Maaari mo bang isipin kung aling metric ang dapat bantayan kung nais mong bawasan ang bilang ng false negatives? +✅ Maaari mo bang isipin kung aling metric ang dapat mong bantayan kung gusto mong bawasan ang bilang ng false negatives? ## I-visualize ang ROC curve ng modelong ito [![ML para sa mga nagsisimula - Pagsusuri ng Performance ng Logistic Regression gamit ang ROC Curves](https://img.youtube.com/vi/GApO575jTA0/0.jpg)](https://youtu.be/GApO575jTA0 "ML para sa mga nagsisimula - Pagsusuri ng Performance ng Logistic Regression gamit ang ROC Curves") -> 🎥 I-click ang imahe sa itaas para sa isang maikling video overview ng ROC curves. +> 🎥 I-click ang imahe sa itaas para sa isang maikling video overview ng ROC curves Gumawa tayo ng isa pang visualization upang makita ang tinatawag na 'ROC' curve: @@ -383,9 +385,9 @@ plt.title('ROC Curve') plt.show() ``` -Gamit ang Matplotlib, i-plot ang [Receiving Operating Characteristic](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) o ROC ng modelo. Ang ROC curves ay madalas gamitin upang makita ang output ng isang classifier sa mga aspeto ng true vs. false positives. "Ang ROC curves ay karaniwang may true positive rate sa Y axis, at false positive rate sa X axis." Kaya't mahalaga ang steepness ng curve at ang espasyo sa pagitan ng midpoint line at ng curve: nais mo ng curve na mabilis na tumataas at lumalampas sa linya. Sa ating kaso, may false positives sa simula, at pagkatapos ay ang linya ay tumataas at lumalampas nang maayos: +Gamit ang Matplotlib, i-plot ang [Receiving Operating Characteristic](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) o ROC ng modelo. Ang ROC curves ay madalas gamitin upang makita ang output ng isang classifier sa mga aspeto ng true vs. false positives. "Ang ROC curves ay karaniwang may true positive rate sa Y axis, at false positive rate sa X axis." Kaya, mahalaga ang steepness ng curve at ang espasyo sa pagitan ng midpoint line at ng curve: gusto mo ng curve na mabilis na tumataas at lumalampas sa linya. Sa ating kaso, may false positives sa simula, at pagkatapos ay ang linya ay tumataas at lumalampas nang maayos: -![ROC](../../../../translated_images/ROC_2.777f20cdfc4988ca683ade6850ac832cb70c96c12f1b910d294f270ef36e1a1c.tl.png) +![ROC](../../../../2-Regression/4-Logistic/images/ROC_2.png) Sa huli, gamitin ang [`roc_auc_score` API](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score) ng Scikit-learn upang kalkulahin ang aktwal na 'Area Under the Curve' (AUC): @@ -393,26 +395,26 @@ Sa huli, gamitin ang [`roc_auc_score` API](https://scikit-learn.org/stable/modul auc = roc_auc_score(y_test,y_scores[:,1]) print(auc) ``` -Ang resulta ay `0.9749908725812341`. Dahil ang AUC ay nasa saklaw mula 0 hanggang 1, nais mo ng mataas na score, dahil ang isang modelo na 100% tama sa mga prediksyon nito ay magkakaroon ng AUC na 1; sa kasong ito, ang modelo ay _medyo magaling_. +Ang resulta ay `0.9749908725812341`. Dahil ang AUC ay nasa saklaw na 0 hanggang 1, gusto mo ng mataas na score, dahil ang isang modelo na 100% tama sa mga prediksyon nito ay magkakaroon ng AUC na 1; sa kasong ito, ang modelo ay _medyo magaling_. -Sa mga susunod na aralin tungkol sa classifications, matututo ka kung paano mag-iterate upang mapabuti ang mga score ng iyong modelo. Ngunit sa ngayon, binabati kita! Natapos mo na ang mga aralin sa regression! +Sa mga susunod na aralin tungkol sa classifications, matututo ka kung paano mag-iterate upang mapabuti ang mga score ng iyong modelo. Ngunit sa ngayon, binabati kita! Natapos mo na ang mga regression lessons! --- ## 🚀Hamunin Marami pang dapat tuklasin tungkol sa logistic regression! Ngunit ang pinakamagandang paraan upang matuto ay ang mag-eksperimento. Maghanap ng dataset na angkop para sa ganitong uri ng pagsusuri at bumuo ng modelo gamit ito. Ano ang natutunan mo? Tip: subukan ang [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) para sa mga kawili-wiling dataset. -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/16/) +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -## Review at Pag-aaral ng Sarili +## Review at Pag-aaral sa Sarili Basahin ang unang ilang pahina ng [papel na ito mula sa Stanford](https://web.stanford.edu/~jurafsky/slp3/5.pdf) tungkol sa ilang praktikal na gamit ng logistic regression. Pag-isipan ang mga gawain na mas angkop para sa isa o sa ibang uri ng regression na pinag-aralan natin hanggang sa puntong ito. Ano ang mas angkop? -## Takdang Aralin +## Takdang-Aralin [Subukang muli ang regression na ito](assignment.md) --- **Paunawa**: -Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na pinagmulan. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito. \ No newline at end of file +Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na pinagmulan. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file diff --git a/translations/tl/3-Web-App/1-Web-App/README.md b/translations/tl/3-Web-App/1-Web-App/README.md index 940641c3..6872280b 100644 --- a/translations/tl/3-Web-App/1-Web-App/README.md +++ b/translations/tl/3-Web-App/1-Web-App/README.md @@ -1,67 +1,67 @@ -# Gumawa ng Web App para Gamitin ang Isang ML Model +# Gumawa ng Web App para Gamitin ang ML Model -Sa araling ito, magtetrain ka ng isang ML model gamit ang isang data set na kakaiba: _mga sightings ng UFO sa nakaraang siglo_, na kinuha mula sa database ng NUFORC. +Sa araling ito, magtetrain ka ng ML model gamit ang isang data set na kakaiba: _mga sightings ng UFO sa nakaraang siglo_, na galing sa database ng NUFORC. -Matututuhan mo: +Matutunan mo: -- Paano i-'pickle' ang isang trained model +- Paano mag-'pickle' ng isang trained model - Paano gamitin ang model na iyon sa isang Flask app -Ipagpapatuloy natin ang paggamit ng notebooks para linisin ang data at i-train ang ating model, ngunit maaari mong dalhin ang proseso sa susunod na antas sa pamamagitan ng pag-explore ng paggamit ng isang model sa totoong mundo, sa isang web app. +Ipagpapatuloy natin ang paggamit ng notebooks para linisin ang data at i-train ang model, ngunit maaari mong dalhin ang proseso sa susunod na antas sa pamamagitan ng paggamit ng model sa isang web app. -Upang gawin ito, kailangan mong gumawa ng isang web app gamit ang Flask. +Para magawa ito, kailangan mong gumawa ng web app gamit ang Flask. -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/17/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -## Paggawa ng App +## Pagbuo ng App -Maraming paraan upang gumawa ng web apps na gumagamit ng machine learning models. Ang iyong web architecture ay maaaring makaapekto sa paraan ng pag-train ng iyong model. Isipin na nagtatrabaho ka sa isang negosyo kung saan ang data science team ay nag-train ng isang model na nais nilang gamitin mo sa isang app. +Maraming paraan para gumawa ng web apps na gumagamit ng machine learning models. Ang arkitektura ng iyong web app ay maaaring makaapekto sa paraan ng pag-train ng iyong model. Isipin na nagtatrabaho ka sa isang negosyo kung saan ang grupo ng data science ay nagtetrain ng model na nais nilang gamitin mo sa isang app. ### Mga Dapat Isaalang-alang -Maraming tanong na kailangan mong sagutin: +Maraming tanong ang kailangang sagutin: -- **Web app ba ito o mobile app?** Kung gumagawa ka ng isang mobile app o kailangang gamitin ang model sa isang IoT context, maaari mong gamitin ang [TensorFlow Lite](https://www.tensorflow.org/lite/) at gamitin ang model sa isang Android o iOS app. +- **Web app ba o mobile app?** Kung gumagawa ka ng mobile app o kailangang gamitin ang model sa IoT context, maaari mong gamitin ang [TensorFlow Lite](https://www.tensorflow.org/lite/) para magamit ang model sa Android o iOS app. - **Saan ilalagay ang model?** Sa cloud o lokal? - **Offline support.** Kailangan bang gumana ang app offline? -- **Anong teknolohiya ang ginamit sa pag-train ng model?** Ang napiling teknolohiya ay maaaring makaapekto sa mga tool na kailangan mong gamitin. - - **Gamit ang TensorFlow.** Kung nag-train ka ng model gamit ang TensorFlow, halimbawa, ang ecosystem na ito ay nagbibigay ng kakayahang i-convert ang TensorFlow model para magamit sa isang web app gamit ang [TensorFlow.js](https://www.tensorflow.org/js/). - - **Gamit ang PyTorch.** Kung gumagawa ka ng model gamit ang isang library tulad ng [PyTorch](https://pytorch.org/), mayroon kang opsyon na i-export ito sa [ONNX](https://onnx.ai/) (Open Neural Network Exchange) format para magamit sa mga JavaScript web apps na maaaring gumamit ng [Onnx Runtime](https://www.onnxruntime.ai/). Ang opsyong ito ay tatalakayin sa isang susunod na aralin para sa isang Scikit-learn-trained model. - - **Gamit ang Lobe.ai o Azure Custom Vision.** Kung gumagamit ka ng isang ML SaaS (Software as a Service) system tulad ng [Lobe.ai](https://lobe.ai/) o [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) upang mag-train ng model, ang ganitong uri ng software ay nagbibigay ng mga paraan upang i-export ang model para sa maraming platform, kabilang ang paggawa ng isang bespoke API na maaaring i-query sa cloud ng iyong online application. +- **Anong teknolohiya ang ginamit para i-train ang model?** Ang napiling teknolohiya ay maaaring makaapekto sa mga tool na kailangang gamitin. + - **Gamit ang TensorFlow.** Kung nagtrain ka ng model gamit ang TensorFlow, halimbawa, ang ecosystem nito ay nagbibigay ng kakayahang i-convert ang TensorFlow model para magamit sa web app gamit ang [TensorFlow.js](https://www.tensorflow.org/js/). + - **Gamit ang PyTorch.** Kung gumagawa ka ng model gamit ang library tulad ng [PyTorch](https://pytorch.org/), may opsyon kang i-export ito sa [ONNX](https://onnx.ai/) (Open Neural Network Exchange) format para magamit sa JavaScript web apps na maaaring gumamit ng [Onnx Runtime](https://www.onnxruntime.ai/). Ang opsyon na ito ay tatalakayin sa susunod na aralin para sa isang Scikit-learn-trained model. + - **Gamit ang Lobe.ai o Azure Custom Vision.** Kung gumagamit ka ng ML SaaS (Software as a Service) system tulad ng [Lobe.ai](https://lobe.ai/) o [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) para magtrain ng model, ang ganitong uri ng software ay nagbibigay ng paraan para i-export ang model para sa iba't ibang platform, kabilang ang paggawa ng bespoke API na maaaring i-query sa cloud ng iyong online application. -Mayroon ka ring pagkakataon na gumawa ng isang buong Flask web app na maaaring mag-train ng model mismo sa isang web browser. Maaari rin itong gawin gamit ang TensorFlow.js sa isang JavaScript context. +Mayroon ka ring pagkakataon na gumawa ng buong Flask web app na maaaring magtrain ng model mismo sa web browser. Maaari rin itong gawin gamit ang TensorFlow.js sa JavaScript context. -Para sa ating layunin, dahil gumagamit tayo ng Python-based notebooks, tuklasin natin ang mga hakbang na kailangan mong gawin upang i-export ang isang trained model mula sa isang notebook patungo sa isang format na mababasa ng isang Python-built web app. +Para sa ating layunin, dahil gumagamit tayo ng Python-based notebooks, tuklasin natin ang mga hakbang na kailangang gawin para i-export ang isang trained model mula sa notebook patungo sa format na mababasa ng Python-built web app. ## Tool Para sa gawaing ito, kailangan mo ng dalawang tool: Flask at Pickle, na parehong tumatakbo sa Python. -✅ Ano ang [Flask](https://palletsprojects.com/p/flask/)? Ang Flask, na tinukoy bilang isang 'micro-framework' ng mga lumikha nito, ay nagbibigay ng mga pangunahing tampok ng web frameworks gamit ang Python at isang templating engine upang makabuo ng mga web page. Tingnan ang [Learn module na ito](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) upang magsanay sa paggawa gamit ang Flask. +✅ Ano ang [Flask](https://palletsprojects.com/p/flask/)? Tinukoy bilang isang 'micro-framework' ng mga tagalikha nito, ang Flask ay nagbibigay ng mga pangunahing tampok ng web frameworks gamit ang Python at isang templating engine para gumawa ng web pages. Tingnan ang [Learn module na ito](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) para magsanay sa paggawa gamit ang Flask. -✅ Ano ang [Pickle](https://docs.python.org/3/library/pickle.html)? Ang Pickle 🥒 ay isang Python module na nagseseryalisa at nagde-deseryalisa ng isang Python object structure. Kapag 'pinickle' mo ang isang model, siniseryalisa o pinapantay mo ang istruktura nito para magamit sa web. Mag-ingat: ang pickle ay hindi likas na secure, kaya mag-ingat kung hinihikayat kang mag-'un-pickle' ng isang file. Ang isang pickled file ay may suffix na `.pkl`. +✅ Ano ang [Pickle](https://docs.python.org/3/library/pickle.html)? Ang Pickle 🥒 ay isang Python module na nagseserialize at nagde-deserialize ng Python object structure. Kapag nag-'pickle' ka ng model, sineserialize o pinaplat ang istruktura nito para magamit sa web. Mag-ingat: ang pickle ay hindi intrinsically secure, kaya mag-ingat kung hinihikayat kang mag-'un-pickle' ng file. Ang pickled file ay may suffix na `.pkl`. -## Ehersisyo - Linisin ang Iyong Data +## Ehersisyo - linisin ang iyong data -Sa araling ito, gagamit ka ng data mula sa 80,000 sightings ng UFO, na nakalap ng [NUFORC](https://nuforc.org) (The National UFO Reporting Center). Ang data na ito ay may mga kawili-wiling paglalarawan ng sightings ng UFO, halimbawa: +Sa araling ito gagamit ka ng data mula sa 80,000 sightings ng UFO, na nakalap ng [NUFORC](https://nuforc.org) (The National UFO Reporting Center). Ang data na ito ay may mga kawili-wiling deskripsyon ng sightings ng UFO, halimbawa: -- **Mahabang halimbawa ng paglalarawan.** "Isang lalaki ang lumitaw mula sa isang sinag ng liwanag na tumama sa isang damuhan sa gabi at tumakbo siya patungo sa parking lot ng Texas Instruments". -- **Maikling halimbawa ng paglalarawan.** "Hinabol kami ng mga ilaw". +- **Mahabang halimbawa ng deskripsyon.** "Isang lalaki ang lumabas mula sa sinag ng liwanag na tumama sa damuhan sa gabi at tumakbo patungo sa parking lot ng Texas Instruments". +- **Maikling halimbawa ng deskripsyon.** "hinabol kami ng mga ilaw". -Ang [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) spreadsheet ay may mga column tungkol sa `city`, `state` at `country` kung saan naganap ang sighting, ang `shape` ng bagay at ang `latitude` at `longitude` nito. +Ang [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) spreadsheet ay may mga column tungkol sa `city`, `state` at `country` kung saan nangyari ang sighting, ang `shape` ng object, at ang `latitude` at `longitude` nito. -Sa blangkong [notebook](notebook.ipynb) na kasama sa araling ito: +Sa blangkong [notebook](../../../../3-Web-App/1-Web-App/notebook.ipynb) na kasama sa araling ito: -1. I-import ang `pandas`, `matplotlib`, at `numpy` tulad ng ginawa mo sa mga nakaraang aralin at i-import ang ufos spreadsheet. Maaari mong tingnan ang isang sample na data set: +1. I-import ang `pandas`, `matplotlib`, at `numpy` tulad ng ginawa mo sa mga nakaraang aralin at i-import ang ufos spreadsheet. Maaari mong tingnan ang sample data set: ```python import pandas as pd @@ -71,7 +71,7 @@ Sa blangkong [notebook](notebook.ipynb) na kasama sa araling ito: ufos.head() ``` -1. I-convert ang ufos data sa isang maliit na dataframe na may mga bagong pamagat. Tingnan ang mga natatanging halaga sa field na `Country`. +1. I-convert ang ufos data sa isang maliit na dataframe na may bagong mga pamagat. Tingnan ang mga unique na halaga sa field na `Country`. ```python ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) @@ -79,7 +79,7 @@ Sa blangkong [notebook](notebook.ipynb) na kasama sa araling ito: ufos.Country.unique() ``` -1. Ngayon, maaari mong bawasan ang dami ng data na kailangan nating harapin sa pamamagitan ng pag-drop ng anumang null values at pag-import lamang ng sightings na tumagal ng 1-60 segundo: +1. Ngayon, maaari mong bawasan ang dami ng data na kailangang i-proseso sa pamamagitan ng pag-drop ng anumang null values at pag-import lamang ng sightings na tumagal ng 1-60 segundo: ```python ufos.dropna(inplace=True) @@ -89,9 +89,9 @@ Sa blangkong [notebook](notebook.ipynb) na kasama sa araling ito: ufos.info() ``` -1. I-import ang Scikit-learn's `LabelEncoder` library upang i-convert ang mga text values para sa mga bansa sa isang numero: +1. I-import ang Scikit-learn's `LabelEncoder` library para i-convert ang text values ng mga bansa sa numero: - ✅ Ang LabelEncoder ay nag-eencode ng data ayon sa alpabeto + ✅ Ang LabelEncoder ay nag-eencode ng data alphabetically ```python from sklearn.preprocessing import LabelEncoder @@ -112,11 +112,11 @@ Sa blangkong [notebook](notebook.ipynb) na kasama sa araling ito: 24 3.0 3 51.783333 -0.783333 ``` -## Ehersisyo - Gumawa ng Iyong Model +## Ehersisyo - gumawa ng iyong model -Ngayon maaari kang maghanda upang i-train ang isang model sa pamamagitan ng paghahati ng data sa training at testing group. +Ngayon maaari kang maghanda para magtrain ng model sa pamamagitan ng paghahati ng data sa training at testing group. -1. Piliin ang tatlong features na nais mong i-train bilang iyong X vector, at ang y vector ay ang `Country`. Nais mong ma-input ang `Seconds`, `Latitude` at `Longitude` at makakuha ng country id bilang resulta. +1. Piliin ang tatlong features na gusto mong i-train bilang iyong X vector, at ang y vector ay ang `Country`. Gusto mong makapag-input ng `Seconds`, `Latitude` at `Longitude` at makakuha ng country id bilang output. ```python from sklearn.model_selection import train_test_split @@ -145,11 +145,11 @@ Ngayon maaari kang maghanda upang i-train ang isang model sa pamamagitan ng pagh Ang accuracy ay hindi masama **(mga 95%)**, na hindi nakakagulat, dahil ang `Country` at `Latitude/Longitude` ay may kaugnayan. -Ang model na ginawa mo ay hindi masyadong rebolusyonaryo dahil dapat mong ma-infer ang `Country` mula sa `Latitude` at `Longitude`, ngunit ito ay isang magandang ehersisyo upang subukang mag-train mula sa raw data na nilinis mo, in-export, at pagkatapos ay gamitin ang model na ito sa isang web app. +Ang model na ginawa mo ay hindi masyadong rebolusyonaryo dahil dapat mong ma-infer ang `Country` mula sa `Latitude` at `Longitude`, ngunit ito ay isang magandang ehersisyo para subukang magtrain mula sa raw data na nilinis, in-export, at pagkatapos ay gamitin ang model na ito sa isang web app. -## Ehersisyo - 'Pickle' ang Iyong Model +## Ehersisyo - 'pickle' ang iyong model -Ngayon, oras na upang _i-pickle_ ang iyong model! Maaari mo itong gawin sa ilang linya ng code. Kapag ito ay _na-pickle_, i-load ang iyong pickled model at subukan ito laban sa isang sample data array na naglalaman ng mga halaga para sa seconds, latitude at longitude, +Ngayon, oras na para _i-pickle_ ang iyong model! Magagawa mo ito sa ilang linya ng code. Kapag ito ay _na-pickle_, i-load ang iyong pickled model at subukan ito laban sa isang sample data array na naglalaman ng mga halaga para sa seconds, latitude, at longitude. ```python import pickle @@ -160,15 +160,15 @@ model = pickle.load(open('ufo-model.pkl','rb')) print(model.predict([[50,44,-12]])) ``` -Ang model ay nagbalik ng **'3'**, na siyang country code para sa UK. Astig! 👽 +Ang model ay nagbabalik ng **'3'**, na siyang country code para sa UK. Astig! 👽 -## Ehersisyo - Gumawa ng Flask App +## Ehersisyo - gumawa ng Flask app -Ngayon maaari kang gumawa ng isang Flask app upang tawagin ang iyong model at magbalik ng mga katulad na resulta, ngunit sa mas kaaya-ayang paraan. +Ngayon maaari kang gumawa ng Flask app para tawagin ang iyong model at magbalik ng katulad na resulta, ngunit sa mas kaaya-ayang paraan. -1. Magsimula sa pamamagitan ng paggawa ng isang folder na tinatawag na **web-app** sa tabi ng _notebook.ipynb_ file kung saan naroroon ang iyong _ufo-model.pkl_ file. +1. Magsimula sa pamamagitan ng paglikha ng folder na **web-app** sa tabi ng _notebook.ipynb_ file kung saan naroroon ang iyong _ufo-model.pkl_ file. -1. Sa folder na iyon, gumawa ng tatlo pang folder: **static**, na may folder na **css** sa loob nito, at **templates**. Dapat mayroon ka na ngayong sumusunod na mga file at direktoryo: +1. Sa folder na iyon, gumawa ng tatlong karagdagang folder: **static**, na may folder na **css** sa loob nito, at **templates**. Dapat mayroon ka na ngayong mga sumusunod na file at direktoryo: ```output web-app/ @@ -179,7 +179,7 @@ Ngayon maaari kang gumawa ng isang Flask app upang tawagin ang iyong model at ma ufo-model.pkl ``` - ✅ Tingnan ang solution folder para sa view ng natapos na app + ✅ Tingnan ang solution folder para sa view ng tapos na app 1. Ang unang file na gagawin sa _web-app_ folder ay ang **requirements.txt** file. Tulad ng _package.json_ sa isang JavaScript app, ang file na ito ay naglilista ng mga dependencies na kinakailangan ng app. Sa **requirements.txt** idagdag ang mga linya: @@ -196,13 +196,13 @@ Ngayon maaari kang gumawa ng isang Flask app upang tawagin ang iyong model at ma cd web-app ``` -1. Sa iyong terminal, i-type ang `pip install`, upang i-install ang mga libraries na nakalista sa _requirements.txt_: +1. Sa iyong terminal, i-type ang `pip install`, para i-install ang mga libraries na nakalista sa _requirements.txt_: ```bash pip install -r requirements.txt ``` -1. Ngayon, handa ka nang gumawa ng tatlo pang file upang tapusin ang app: +1. Ngayon, handa ka nang gumawa ng tatlong karagdagang file para tapusin ang app: 1. Gumawa ng **app.py** sa root. 2. Gumawa ng **index.html** sa _templates_ directory. @@ -277,7 +277,7 @@ Ngayon maaari kang gumawa ng isang Flask app upang tawagin ang iyong model at ma ``` - Tingnan ang templating sa file na ito. Pansinin ang 'mustache' syntax sa paligid ng mga variable na ibibigay ng app, tulad ng prediction text: `{{}}`. Mayroon ding isang form na nagpo-post ng prediction sa `/predict` route. + Tingnan ang templating sa file na ito. Pansinin ang 'mustache' syntax sa paligid ng mga variables na ibibigay ng app, tulad ng prediction text: `{{}}`. Mayroon ding form na nagpo-post ng prediction sa `/predict` route. Sa wakas, handa ka nang i-build ang python file na nagda-drive ng consumption ng model at ang display ng predictions: @@ -318,36 +318,36 @@ Ngayon maaari kang gumawa ng isang Flask app upang tawagin ang iyong model at ma app.run(debug=True) ``` - > 💡 Tip: kapag nagdagdag ka ng [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) habang pinapatakbo ang web app gamit ang Flask, anumang pagbabago na gagawin mo sa iyong application ay agad na makikita nang hindi na kailangang i-restart ang server. Mag-ingat! Huwag paganahin ang mode na ito sa isang production app. + > 💡 Tip: kapag nagdagdag ka ng [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) habang pinapatakbo ang web app gamit ang Flask, anumang pagbabago na ginawa mo sa iyong application ay agad na makikita nang hindi na kailangang i-restart ang server. Mag-ingat! Huwag i-enable ang mode na ito sa production app. -Kung patakbuhin mo ang `python app.py` o `python3 app.py` - magsisimula ang iyong web server, lokal, at maaari kang mag-fill out ng isang maikling form upang makakuha ng sagot sa iyong tanong tungkol sa kung saan nakita ang mga UFO! +Kung patakbuhin mo ang `python app.py` o `python3 app.py` - magsisimula ang iyong web server, lokal, at maaari kang mag-fill out ng maikling form para makakuha ng sagot sa iyong tanong tungkol sa kung saan nakita ang mga UFO! -Bago iyon, tingnan ang mga bahagi ng `app.py`: +Bago gawin iyon, tingnan ang mga bahagi ng `app.py`: -1. Una, ang mga dependencies ay niloload at ang app ay nagsisimula. -1. Pagkatapos, ang model ay ini-import. -1. Pagkatapos, ang index.html ay nirender sa home route. +1. Una, ang mga dependencies ay na-load at nagsimula ang app. +1. Pagkatapos, ang model ay na-import. +1. Pagkatapos, ang index.html ay na-render sa home route. -Sa `/predict` route, maraming bagay ang nangyayari kapag ang form ay na-post: +Sa `/predict` route, ilang bagay ang nangyayari kapag na-post ang form: -1. Ang mga variable ng form ay kinokolekta at kino-convert sa isang numpy array. Ang mga ito ay ipinapadala sa model at ang prediction ay ibinabalik. -2. Ang mga bansa na nais nating ipakita ay nire-render bilang nababasang teksto mula sa kanilang predicted country code, at ang halagang iyon ay ibinabalik sa index.html upang ma-render sa template. +1. Ang mga variables ng form ay kinokolekta at kino-convert sa numpy array. Ang mga ito ay ipinapadala sa model at ang prediction ay ibinabalik. +2. Ang mga bansa na gusto nating ipakita ay nire-render bilang nababasang text mula sa kanilang predicted country code, at ang value na iyon ay ibinabalik sa index.html para ma-render sa template. -Ang paggamit ng isang model sa ganitong paraan, gamit ang Flask at isang pickled model, ay medyo simple. Ang pinakamahirap na bahagi ay ang maunawaan kung anong anyo ng data ang kailangang ipadala sa model upang makakuha ng prediction. Ang lahat ng ito ay nakasalalay sa kung paano na-train ang model. Ang model na ito ay may tatlong data points na kailangang i-input upang makakuha ng prediction. +Ang paggamit ng model sa ganitong paraan, gamit ang Flask at pickled model, ay medyo simple. Ang pinakamahirap na bahagi ay ang pag-unawa kung anong hugis ng data ang kailangang ipadala sa model para makakuha ng prediction. Ang lahat ng ito ay nakadepende sa kung paano na-train ang model. Ang model na ito ay may tatlong data points na kailangang i-input para makakuha ng prediction. -Sa isang propesyonal na setting, makikita mo kung gaano kahalaga ang magandang komunikasyon sa pagitan ng mga taong nag-train ng model at ng mga gumagamit nito sa isang web o mobile app. Sa ating kaso, ikaw lang ang gumagawa nito! +Sa isang propesyonal na setting, makikita mo kung gaano kahalaga ang magandang komunikasyon sa pagitan ng mga taong nagtrain ng model at ng mga gumagamit nito sa web o mobile app. Sa ating kaso, ikaw lang ang gumagawa nito! --- ## 🚀 Hamon -Sa halip na magtrabaho sa isang notebook at i-import ang model sa Flask app, maaari mong i-train ang model mismo sa loob ng Flask app! Subukang i-convert ang iyong Python code sa notebook, marahil pagkatapos malinis ang iyong data, upang i-train ang model mula mismo sa app sa isang route na tinatawag na `train`. Ano ang mga pros at cons ng paggamit ng pamamaraang ito? +Sa halip na magtrabaho sa notebook at i-import ang model sa Flask app, maaari mong i-train ang model mismo sa loob ng Flask app! Subukang i-convert ang iyong Python code sa notebook, marahil pagkatapos malinis ang iyong data, para i-train ang model mula sa loob ng app sa isang route na tinatawag na `train`. Ano ang mga pros at cons ng paggamit ng pamamaraang ito? -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/18/) +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) ## Review at Pag-aaral sa Sarili -Maraming paraan upang gumawa ng isang web app na gumagamit ng ML models. Gumawa ng listahan ng mga paraan kung paano mo magagamit ang JavaScript o Python upang gumawa ng isang web app na gumagamit ng machine learning. Isaalang-alang ang architecture: dapat bang manatili ang model sa app o nasa cloud? Kung ang huli, paano mo ito maa-access? Gumuhit ng isang architectural model para sa isang applied ML web solution. +Maraming paraan para gumawa ng web app na gumagamit ng ML models. Gumawa ng listahan ng mga paraan kung paano mo magagamit ang JavaScript o Python para gumawa ng web app na gumagamit ng machine learning. Isaalang-alang ang arkitektura: dapat bang manatili ang model sa app o nasa cloud? Kung nasa cloud, paano mo ito maa-access? Gumuhit ng arkitektural na modelo para sa isang applied ML web solution. ## Takdang Aralin diff --git a/translations/tl/4-Classification/1-Introduction/README.md b/translations/tl/4-Classification/1-Introduction/README.md index 627501e9..bfe31d3f 100644 --- a/translations/tl/4-Classification/1-Introduction/README.md +++ b/translations/tl/4-Classification/1-Introduction/README.md @@ -1,68 +1,68 @@ # Panimula sa klasipikasyon -Sa apat na araling ito, tatalakayin natin ang isa sa mga pangunahing aspeto ng klasikong machine learning - _klasipikasyon_. Gagamit tayo ng iba't ibang klasipikasyon na algorithm gamit ang isang dataset tungkol sa mga kahanga-hangang lutuin ng Asya at India. Sana'y gutom ka na! +Sa apat na araling ito, iyong matutuklasan ang isang mahalagang aspeto ng klasikong machine learning - _klasipikasyon_. Tatalakayin natin ang paggamit ng iba't ibang klasipikasyon na algorithm gamit ang dataset tungkol sa mga kahanga-hangang lutuin ng Asya at India. Sana'y gutom ka na! -![just a pinch!](../../../../translated_images/pinch.1b035ec9ba7e0d408313b551b60c721c9c290b2dd2094115bc87e6ddacd114c9.tl.png) +![just a pinch!](../../../../4-Classification/1-Introduction/images/pinch.png) -> Ipagdiwang ang pan-Asian na mga lutuin sa mga araling ito! Larawan ni [Jen Looper](https://twitter.com/jenlooper) +> Ipagdiwang ang pan-Asian na lutuin sa mga araling ito! Larawan ni [Jen Looper](https://twitter.com/jenlooper) -Ang klasipikasyon ay isang anyo ng [supervised learning](https://wikipedia.org/wiki/Supervised_learning) na may pagkakatulad sa mga regression techniques. Kung ang machine learning ay tungkol sa paghula ng mga halaga o pangalan gamit ang mga dataset, ang klasipikasyon ay karaniwang nahahati sa dalawang grupo: _binary classification_ at _multiclass classification_. +Ang klasipikasyon ay isang anyo ng [supervised learning](https://wikipedia.org/wiki/Supervised_learning) na may maraming pagkakatulad sa mga regression techniques. Kung ang machine learning ay tungkol sa pag-predict ng mga halaga o pangalan gamit ang mga dataset, ang klasipikasyon ay karaniwang nahahati sa dalawang grupo: _binary classification_ at _multiclass classification_. [![Panimula sa klasipikasyon](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "Panimula sa klasipikasyon") -> 🎥 I-click ang larawan sa itaas para sa isang video: Ipinapakilala ni John Guttag ng MIT ang klasipikasyon +> 🎥 I-click ang larawan sa itaas para sa video: Ipinakikilala ni John Guttag ng MIT ang klasipikasyon Tandaan: -- **Linear regression** ay tumulong sa iyo na hulaan ang relasyon sa pagitan ng mga variable at gumawa ng tumpak na prediksyon kung saan mahuhulog ang isang bagong datapoint kaugnay ng linya. Halimbawa, maaari mong hulaan _kung magkano ang presyo ng kalabasa sa Setyembre kumpara sa Disyembre_. -- **Logistic regression** ay tumulong sa iyo na tukuyin ang "binary categories": sa presyong ito, _ang kalabasa ba ay kulay kahel o hindi-kahel_? +- **Linear regression** ay tumulong sa iyo na mag-predict ng relasyon sa pagitan ng mga variable at gumawa ng tumpak na prediksyon kung saan mahuhulog ang bagong datapoint kaugnay ng linya. Halimbawa, maaari mong i-predict _kung magkano ang presyo ng kalabasa sa Setyembre kumpara sa Disyembre_. +- **Logistic regression** ay tumulong sa iyo na matuklasan ang "binary categories": sa presyong ito, _ang kalabasa ba ay orange o hindi-orange_? -Ang klasipikasyon ay gumagamit ng iba't ibang algorithm upang matukoy ang iba pang paraan ng pagtukoy ng label o klase ng isang datapoint. Gamitin natin ang dataset ng mga lutuin upang makita kung, sa pamamagitan ng pagmamasid sa isang grupo ng mga sangkap, maaari nating matukoy ang pinagmulan nitong lutuin. +Ang klasipikasyon ay gumagamit ng iba't ibang algorithm upang matukoy ang label o klase ng isang datapoint. Gamitin natin ang data ng lutuin upang makita kung, sa pamamagitan ng pagmamasid sa isang grupo ng mga sangkap, maaari nating matukoy ang pinagmulan ng lutuin. -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) > ### [Ang araling ito ay available sa R!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html) ### Panimula -Ang klasipikasyon ay isa sa mga pangunahing gawain ng isang mananaliksik sa machine learning at data scientist. Mula sa simpleng klasipikasyon ng isang binary na halaga ("ang email bang ito ay spam o hindi?"), hanggang sa masalimuot na klasipikasyon ng imahe at segmentation gamit ang computer vision, laging kapaki-pakinabang na mauri ang data sa mga klase at makapagtanong tungkol dito. +Ang klasipikasyon ay isa sa mga pangunahing gawain ng mananaliksik sa machine learning at data scientist. Mula sa simpleng klasipikasyon ng binary value ("spam ba ang email na ito o hindi?"), hanggang sa masalimuot na klasipikasyon ng imahe at segmentation gamit ang computer vision, palaging kapaki-pakinabang na maayos ang data sa mga klase at magtanong tungkol dito. -Upang mailahad ang proseso sa mas siyentipikong paraan, ang iyong klasipikasyon na pamamaraan ay lumilikha ng isang predictive model na nagbibigay-daan sa iyong i-map ang relasyon sa pagitan ng mga input variable at output variable. +Upang ipahayag ang proseso sa mas siyentipikong paraan, ang iyong klasipikasyon na pamamaraan ay lumilikha ng predictive model na nagbibigay-daan sa iyo na i-map ang relasyon sa pagitan ng input variables sa output variables. -![binary vs. multiclass classification](../../../../translated_images/binary-multiclass.b56d0c86c81105a697dddd82242c1d11e4d78b7afefea07a44627a0f1111c1a9.tl.png) +![binary vs. multiclass classification](../../../../4-Classification/1-Introduction/images/binary-multiclass.png) -> Binary vs. multiclass na mga problema para sa mga klasipikasyon na algorithm. Infographic ni [Jen Looper](https://twitter.com/jenlooper) +> Binary vs. multiclass na mga problema para sa klasipikasyon na algorithm upang hawakan. Infographic ni [Jen Looper](https://twitter.com/jenlooper) -Bago simulan ang proseso ng paglilinis ng ating data, pag-visualize nito, at paghahanda para sa ating mga ML na gawain, alamin muna natin ang iba't ibang paraan kung paano maaaring gamitin ang machine learning upang uriin ang data. +Bago simulan ang proseso ng paglilinis ng data, pag-visualize nito, at paghahanda para sa mga ML na gawain, alamin muna ang iba't ibang paraan kung paano magagamit ang machine learning upang mag-klasipika ng data. -Hango mula sa [statistics](https://wikipedia.org/wiki/Statistical_classification), ang klasipikasyon gamit ang klasikong machine learning ay gumagamit ng mga feature, tulad ng `smoker`, `weight`, at `age` upang matukoy ang _posibilidad ng pagkakaroon ng X na sakit_. Bilang isang supervised learning technique na katulad ng mga regression exercises na ginawa mo kanina, ang iyong data ay may label at ginagamit ng mga ML algorithm ang mga label na ito upang uriin at hulaan ang mga klase (o 'features') ng isang dataset at i-assign ang mga ito sa isang grupo o resulta. +Hango mula sa [statistics](https://wikipedia.org/wiki/Statistical_classification), ang klasipikasyon gamit ang klasikong machine learning ay gumagamit ng mga features, tulad ng `smoker`, `weight`, at `age` upang matukoy ang _pagkakataon ng pagkakaroon ng X na sakit_. Bilang isang supervised learning technique na katulad ng regression exercises na ginawa mo dati, ang iyong data ay may label at ang ML algorithms ay gumagamit ng mga label na ito upang mag-klasipika at mag-predict ng mga klase (o 'features') ng isang dataset at i-assign ang mga ito sa isang grupo o resulta. -✅ Maglaan ng sandali upang isipin ang isang dataset tungkol sa mga lutuin. Ano ang maaaring masagot ng isang multiclass model? Ano ang maaaring masagot ng isang binary model? Paano kung gusto mong tukuyin kung ang isang partikular na lutuin ay malamang na gumagamit ng fenugreek? Paano kung gusto mong malaman kung, sa isang grocery bag na puno ng star anise, artichokes, cauliflower, at horseradish, makakagawa ka ng isang tipikal na Indian dish? +✅ Maglaan ng sandali upang mag-isip ng dataset tungkol sa mga lutuin. Ano ang maaaring masagot ng isang multiclass model? Ano ang maaaring masagot ng isang binary model? Paano kung gusto mong matukoy kung ang isang lutuin ay malamang na gumamit ng fenugreek? Paano kung gusto mong makita kung, sa presensya ng isang grocery bag na puno ng star anise, artichokes, cauliflower, at horseradish, maaari kang gumawa ng tipikal na Indian dish? [![Crazy mystery baskets](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "Crazy mystery baskets") -> 🎥 I-click ang larawan sa itaas para sa isang video. Ang buong premise ng palabas na 'Chopped' ay ang 'mystery basket' kung saan kailangang gumawa ang mga chef ng isang putahe mula sa random na pagpili ng mga sangkap. Siguradong makakatulong ang isang ML model! +> 🎥 I-click ang larawan sa itaas para sa video. Ang buong premise ng palabas na 'Chopped' ay ang 'mystery basket' kung saan kailangang gumawa ang mga chef ng isang dish mula sa random na pagpili ng mga sangkap. Siguradong makakatulong ang isang ML model! ## Hello 'classifier' -Ang tanong na nais nating itanong sa dataset ng mga lutuin ay isang **multiclass na tanong**, dahil mayroon tayong ilang potensyal na pambansang lutuin na maaaring pagpilian. Batay sa isang batch ng mga sangkap, aling mga klase ang babagay sa data? +Ang tanong na nais nating itanong sa dataset ng lutuin ay talagang isang **multiclass na tanong**, dahil mayroon tayong ilang potensyal na pambansang lutuin na maaaring pagpilian. Sa isang batch ng mga sangkap, aling klase sa mga ito ang babagay sa data? -Ang Scikit-learn ay nag-aalok ng iba't ibang algorithm na maaaring gamitin upang uriin ang data, depende sa uri ng problemang nais mong lutasin. Sa susunod na dalawang aralin, matututo ka tungkol sa ilan sa mga algorithm na ito. +Ang Scikit-learn ay nag-aalok ng iba't ibang algorithm na maaaring gamitin upang mag-klasipika ng data, depende sa uri ng problemang nais mong lutasin. Sa susunod na dalawang aralin, matututo ka tungkol sa ilan sa mga algorithm na ito. ## Ehersisyo - linisin at balansehin ang iyong data -Ang unang gawain bago simulan ang proyektong ito ay linisin at **balansehin** ang iyong data upang makakuha ng mas mahusay na resulta. Simulan sa blankong _notebook.ipynb_ file sa root ng folder na ito. +Ang unang gawain, bago simulan ang proyektong ito, ay linisin at **balansehin** ang iyong data upang makakuha ng mas magagandang resulta. Simulan sa blankong _notebook.ipynb_ file sa root ng folder na ito. -Ang unang kailangang i-install ay ang [imblearn](https://imbalanced-learn.org/stable/). Ito ay isang Scikit-learn package na magpapahintulot sa iyong mas mahusay na balansehin ang data (malalaman mo pa ang tungkol sa gawaing ito sa ilang sandali). +Ang unang bagay na kailangang i-install ay [imblearn](https://imbalanced-learn.org/stable/). Ito ay isang Scikit-learn package na magpapahintulot sa iyo na mas mahusay na balansehin ang data (malalaman mo ang higit pa tungkol sa gawaing ito sa ilang sandali). 1. Upang i-install ang `imblearn`, patakbuhin ang `pip install`, tulad nito: @@ -70,7 +70,7 @@ Ang unang kailangang i-install ay ang [imblearn](https://imbalanced-learn.org/st pip install imblearn ``` -1. I-import ang mga package na kailangan mo upang ma-import ang iyong data at ma-visualize ito, at i-import din ang `SMOTE` mula sa `imblearn`. +1. I-import ang mga package na kailangan mo upang i-import ang iyong data at i-visualize ito, i-import din ang `SMOTE` mula sa `imblearn`. ```python import pandas as pd @@ -80,7 +80,7 @@ Ang unang kailangang i-install ay ang [imblearn](https://imbalanced-learn.org/st from imblearn.over_sampling import SMOTE ``` - Ngayon ay handa ka nang i-import ang data. + Ngayon ay handa ka nang basahin at i-import ang data. 1. Ang susunod na gawain ay i-import ang data: @@ -88,15 +88,15 @@ Ang unang kailangang i-install ay ang [imblearn](https://imbalanced-learn.org/st df = pd.read_csv('../data/cuisines.csv') ``` - Ang paggamit ng `read_csv()` ay babasahin ang nilalaman ng csv file na _cusines.csv_ at ilalagay ito sa variable na `df`. + Ang paggamit ng `read_csv()` ay magbabasa ng nilalaman ng csv file _cusines.csv_ at ilalagay ito sa variable na `df`. -1. Tingnan ang hugis ng data: +1. Suriin ang hugis ng data: ```python df.head() ``` - Ang unang limang hilera ay ganito ang hitsura: + Ang unang limang row ay ganito ang hitsura: ```output | | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | @@ -114,7 +114,7 @@ Ang unang kailangang i-install ay ang [imblearn](https://imbalanced-learn.org/st df.info() ``` - Ang iyong output ay kahalintulad nito: + Ang iyong output ay ganito: ```output @@ -126,7 +126,7 @@ Ang unang kailangang i-install ay ang [imblearn](https://imbalanced-learn.org/st ## Ehersisyo - pag-aaral tungkol sa mga lutuin -Ngayon ay nagiging mas kawili-wili ang gawain. Tuklasin natin ang distribusyon ng data, bawat lutuin. +Ngayon nagsisimula nang maging mas kawili-wili ang trabaho. Tuklasin natin ang distribusyon ng data, bawat lutuin. 1. I-plot ang data bilang mga bar sa pamamagitan ng pagtawag sa `barh()`: @@ -134,11 +134,11 @@ Ngayon ay nagiging mas kawili-wili ang gawain. Tuklasin natin ang distribusyon n df.cuisine.value_counts().plot.barh() ``` - ![cuisine data distribution](../../../../translated_images/cuisine-dist.d0cc2d551abe5c25f83d73a5f560927e4a061e9a4560bac1e97d35682ef3ca6d.tl.png) + ![cuisine data distribution](../../../../4-Classification/1-Introduction/images/cuisine-dist.png) Mayroong limitadong bilang ng mga lutuin, ngunit ang distribusyon ng data ay hindi pantay. Maaari mo itong ayusin! Bago gawin ito, mag-explore pa ng kaunti. -1. Alamin kung gaano karaming data ang mayroon bawat lutuin at i-print ito: +1. Alamin kung gaano karaming data ang available bawat lutuin at i-print ito: ```python thai_df = df[(df.cuisine == "thai")] @@ -154,7 +154,7 @@ Ngayon ay nagiging mas kawili-wili ang gawain. Tuklasin natin ang distribusyon n print(f'korean df: {korean_df.shape}') ``` - Ang output ay ganito ang hitsura: + Ang output ay ganito: ```output thai df: (289, 385) @@ -166,9 +166,9 @@ Ngayon ay nagiging mas kawili-wili ang gawain. Tuklasin natin ang distribusyon n ## Pagtuklas ng mga sangkap -Ngayon ay maaari kang maghukay nang mas malalim sa data at alamin kung ano ang mga tipikal na sangkap bawat lutuin. Dapat mong linisin ang mga paulit-ulit na data na nagdudulot ng kalituhan sa pagitan ng mga lutuin, kaya't alamin natin ang problemang ito. +Ngayon maaari mong mas malalim na tuklasin ang data at alamin kung ano ang mga tipikal na sangkap bawat lutuin. Dapat mong linisin ang paulit-ulit na data na nagdudulot ng kalituhan sa pagitan ng mga lutuin, kaya alamin natin ang problemang ito. -1. Gumawa ng isang function na `create_ingredient()` sa Python upang lumikha ng isang ingredient dataframe. Ang function na ito ay magsisimula sa pamamagitan ng pag-drop ng isang hindi kapaki-pakinabang na column at pag-aayos ng mga sangkap batay sa kanilang bilang: +1. Gumawa ng function na `create_ingredient()` sa Python upang gumawa ng ingredient dataframe. Ang function na ito ay magsisimula sa pamamagitan ng pag-drop ng isang hindi kapaki-pakinabang na column at pag-aayos ng mga sangkap ayon sa kanilang bilang: ```python def create_ingredient_df(df): @@ -179,7 +179,7 @@ Ngayon ay maaari kang maghukay nang mas malalim sa data at alamin kung ano ang m return ingredient_df ``` - Ngayon ay maaari mong gamitin ang function na iyon upang makakuha ng ideya ng sampung pinakapopular na sangkap bawat lutuin. + Ngayon maaari mong gamitin ang function na iyon upang makakuha ng ideya ng top ten na pinakasikat na sangkap bawat lutuin. 1. Tawagin ang `create_ingredient()` at i-plot ito sa pamamagitan ng pagtawag sa `barh()`: @@ -188,45 +188,45 @@ Ngayon ay maaari kang maghukay nang mas malalim sa data at alamin kung ano ang m thai_ingredient_df.head(10).plot.barh() ``` - ![thai](../../../../translated_images/thai.0269dbab2e78bd38a132067759fe980008bdb80b6d778e5313448dbe12bed846.tl.png) + ![thai](../../../../4-Classification/1-Introduction/images/thai.png) -1. Gawin ang pareho para sa data ng Japanese: +1. Gawin ang pareho para sa japanese na data: ```python japanese_ingredient_df = create_ingredient_df(japanese_df) japanese_ingredient_df.head(10).plot.barh() ``` - ![japanese](../../../../translated_images/japanese.30260486f2a05c463c8faa62ebe7b38f0961ed293bd9a6db8eef5d3f0cf17155.tl.png) + ![japanese](../../../../4-Classification/1-Introduction/images/japanese.png) -1. Ngayon para sa mga sangkap ng Chinese: +1. Ngayon para sa chinese na sangkap: ```python chinese_ingredient_df = create_ingredient_df(chinese_df) chinese_ingredient_df.head(10).plot.barh() ``` - ![chinese](../../../../translated_images/chinese.e62cafa5309f111afd1b54490336daf4e927ce32bed837069a0b7ce481dfae8d.tl.png) + ![chinese](../../../../4-Classification/1-Introduction/images/chinese.png) -1. I-plot ang mga sangkap ng Indian: +1. I-plot ang indian na sangkap: ```python indian_ingredient_df = create_ingredient_df(indian_df) indian_ingredient_df.head(10).plot.barh() ``` - ![indian](../../../../translated_images/indian.2c4292002af1a1f97a4a24fec6b1459ee8ff616c3822ae56bb62b9903e192af6.tl.png) + ![indian](../../../../4-Classification/1-Introduction/images/indian.png) -1. Sa wakas, i-plot ang mga sangkap ng Korean: +1. Sa wakas, i-plot ang korean na sangkap: ```python korean_ingredient_df = create_ingredient_df(korean_df) korean_ingredient_df.head(10).plot.barh() ``` - ![korean](../../../../translated_images/korean.4a4f0274f3d9805a65e61f05597eeaad8620b03be23a2c0a705c023f65fad2c0.tl.png) + ![korean](../../../../4-Classification/1-Introduction/images/korean.png) -1. Ngayon, i-drop ang mga pinakakaraniwang sangkap na nagdudulot ng kalituhan sa pagitan ng iba't ibang lutuin, sa pamamagitan ng pagtawag sa `drop()`: +1. Ngayon, i-drop ang pinakakaraniwang sangkap na nagdudulot ng kalituhan sa pagitan ng magkakaibang lutuin, sa pamamagitan ng pagtawag sa `drop()`: Lahat ay mahilig sa kanin, bawang, at luya! @@ -247,16 +247,16 @@ Ngayon na nalinis mo na ang data, gamitin ang [SMOTE](https://imbalanced-learn.o transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) ``` - Sa pamamagitan ng pagbabalanse ng iyong data, magkakaroon ka ng mas mahusay na resulta kapag inuri ito. Isipin ang isang binary classification. Kung karamihan ng iyong data ay isang klase, ang isang ML model ay mas madalas na huhulaan ang klaseng iyon, dahil lamang mas marami ang data para dito. Ang pagbabalanse ng data ay nag-aalis ng anumang pagkiling sa data at tumutulong na alisin ang imbalance na ito. + Sa pamamagitan ng pagbabalanse ng iyong data, magkakaroon ka ng mas magagandang resulta kapag nag-klasipika. Isipin ang isang binary classification. Kung karamihan ng iyong data ay isang klase, ang ML model ay mas madalas na mag-predict ng klase na iyon, dahil mas maraming data para dito. Ang pagbabalanse ng data ay nag-aalis ng anumang skewed na data at tumutulong na alisin ang imbalance na ito. -1. Ngayon ay maaari mong suriin ang bilang ng mga label bawat sangkap: +1. Ngayon maaari mong suriin ang bilang ng mga label bawat sangkap: ```python print(f'new label count: {transformed_label_df.value_counts()}') print(f'old label count: {df.cuisine.value_counts()}') ``` - Ang iyong output ay ganito ang hitsura: + Ang iyong output ay ganito: ```output new label count: korean 799 @@ -275,13 +275,13 @@ Ngayon na nalinis mo na ang data, gamitin ang [SMOTE](https://imbalanced-learn.o Ang data ay malinis, balanse, at napakasarap! -1. Ang huling hakbang ay i-save ang iyong balanced data, kabilang ang mga label at feature, sa isang bagong dataframe na maaaring i-export sa isang file: +1. Ang huling hakbang ay i-save ang iyong balanced na data, kabilang ang mga label at features, sa isang bagong dataframe na maaaring i-export sa isang file: ```python transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') ``` -1. Maaari mong tingnan muli ang data gamit ang `transformed_df.head()` at `transformed_df.info()`. I-save ang isang kopya ng data na ito para magamit sa mga susunod na aralin: +1. Maaari mong tingnan muli ang data gamit ang `transformed_df.head()` at `transformed_df.info()`. I-save ang kopya ng data na ito para magamit sa mga susunod na aralin: ```python transformed_df.head() @@ -289,7 +289,7 @@ Ngayon na nalinis mo na ang data, gamitin ang [SMOTE](https://imbalanced-learn.o transformed_df.to_csv("../data/cleaned_cuisines.csv") ``` - Ang sariwang CSV na ito ay matatagpuan na ngayon sa root data folder. + Ang sariwang CSV na ito ay makikita na ngayon sa root data folder. --- @@ -297,17 +297,17 @@ Ngayon na nalinis mo na ang data, gamitin ang [SMOTE](https://imbalanced-learn.o Ang kurikulum na ito ay naglalaman ng ilang mga kawili-wiling dataset. Halungkatin ang mga `data` folder at tingnan kung mayroong mga dataset na angkop para sa binary o multi-class classification? Anong mga tanong ang maaari mong itanong sa dataset na ito? -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/) +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -## Review at Pag-aaral sa Sarili +## Review & Self Study -Pag-aralan ang API ng SMOTE. Para sa anong mga use case ito pinakamahusay gamitin? Anong mga problema ang nalulutas nito? +Suriin ang API ng SMOTE. Anong mga use case ang pinakamainam na gamitin ito? Anong mga problema ang nalulutas nito? -## Takdang Aralin +## Takdang Aralin -[Galugarin ang mga pamamaraan ng klasipikasyon](assignment.md) +[Galugarin ang mga klasipikasyon na pamamaraan](assignment.md) --- **Paunawa**: -Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file +Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito. \ No newline at end of file diff --git a/translations/tl/4-Classification/2-Classifiers-1/README.md b/translations/tl/4-Classification/2-Classifiers-1/README.md index e69dacd5..c895be8b 100644 --- a/translations/tl/4-Classification/2-Classifiers-1/README.md +++ b/translations/tl/4-Classification/2-Classifiers-1/README.md @@ -1,8 +1,8 @@ # Mga Classifier ng Lutuin 2 -Sa ikalawang aralin ng klasipikasyon na ito, mas marami kang matutuklasang paraan upang iklasipika ang numeric na datos. Malalaman mo rin ang mga epekto ng pagpili ng isang classifier kumpara sa iba. +Sa ikalawang aralin ng klasipikasyon na ito, mas marami kang matutuklasang paraan upang iklasipika ang numerikong datos. Malalaman mo rin ang mga epekto ng pagpili ng isang classifier kumpara sa iba. -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -### Kinakailangan +### Paunang Kaalaman -Inaakala namin na natapos mo na ang mga nakaraang aralin at mayroon kang nalinis na dataset sa iyong `data` folder na tinatawag na _cleaned_cuisines.csv_ sa root ng folder na ito na may 4 na aralin. +Inaakala namin na natapos mo na ang mga nakaraang aralin at mayroon kang malinis na dataset sa iyong `data` folder na tinatawag na _cleaned_cuisines.csv_ sa root ng folder na ito na may 4 na aralin. ### Paghahanda -Na-load na namin ang iyong _notebook.ipynb_ file gamit ang nalinis na dataset at hinati ito sa X at y dataframes, handa na para sa proseso ng pagbuo ng modelo. +Na-load na namin ang iyong _notebook.ipynb_ file gamit ang malinis na dataset at hinati ito sa X at y dataframes, handa na para sa proseso ng paggawa ng modelo. -## Isang mapa ng klasipikasyon +## Isang Mapa ng Klasipikasyon -Noong nakaraan, natutunan mo ang iba't ibang opsyon na mayroon ka kapag nagkaklasipika ng datos gamit ang cheat sheet ng Microsoft. Ang Scikit-learn ay nag-aalok ng katulad ngunit mas detalyadong cheat sheet na makakatulong upang mas paliitin ang iyong mga estimator (isa pang termino para sa classifiers): +Noong nakaraan, natutunan mo ang iba't ibang opsyon na mayroon ka kapag nagkaklasipika ng datos gamit ang cheat sheet ng Microsoft. Ang Scikit-learn ay nag-aalok ng katulad, ngunit mas detalyadong cheat sheet na makakatulong upang mas mapaliit ang iyong mga pagpipilian sa mga estimator (isa pang termino para sa classifiers): -![ML Map mula sa Scikit-learn](../../../../translated_images/map.e963a6a51349425ab107b38f6c7307eb4c0d0c7ccdd2e81a5e1919292bab9ac7.tl.png) +![Mapa ng ML mula sa Scikit-learn](../../../../4-Classification/3-Classifiers-2/images/map.png) > Tip: [bisitahin ang mapa online](https://scikit-learn.org/stable/tutorial/machine_learning_map/) at mag-click sa mga landas upang basahin ang dokumentasyon. -### Ang plano +### Ang Plano Ang mapa na ito ay napaka-kapaki-pakinabang kapag malinaw na ang iyong pag-unawa sa datos, dahil maaari kang 'maglakad' sa mga landas nito patungo sa isang desisyon: @@ -37,7 +37,7 @@ Ang mapa na ito ay napaka-kapaki-pakinabang kapag malinaw na ang iyong pag-unawa - Mayroon tayong labeled na datos - Mayroon tayong mas kaunti sa 100K na sample - ✨ Maaari tayong pumili ng Linear SVC -- Kung hindi ito gumana, dahil mayroon tayong numeric na datos +- Kung hindi ito gumana, dahil mayroon tayong numerikong datos - Maaari nating subukan ang ✨ KNeighbors Classifier - Kung hindi ito gumana, subukan ang ✨ SVC at ✨ Ensemble Classifiers @@ -45,7 +45,7 @@ Napaka-kapaki-pakinabang na landas na sundan. ## Ehersisyo - hatiin ang datos -Kasunod ng landas na ito, dapat tayong magsimula sa pag-import ng ilang mga library na gagamitin. +Sundin ang landas na ito, dapat tayong magsimula sa pag-import ng ilang mga library na gagamitin. 1. I-import ang mga kinakailangang library: @@ -67,11 +67,11 @@ Kasunod ng landas na ito, dapat tayong magsimula sa pag-import ng ilang mga libr ## Linear SVC classifier -Ang Support-Vector clustering (SVC) ay bahagi ng pamilya ng Support-Vector machines ng mga teknik sa ML (matuto pa tungkol dito sa ibaba). Sa pamamaraang ito, maaari kang pumili ng 'kernel' upang magpasya kung paano iklasipika ang mga label. Ang 'C' na parameter ay tumutukoy sa 'regularization' na nagre-regulate sa impluwensya ng mga parameter. Ang kernel ay maaaring isa sa [marami](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC); dito natin ito itinatakda sa 'linear' upang matiyak na ginagamit natin ang linear SVC. Ang probability ay default na 'false'; dito natin ito itinatakda sa 'true' upang makakuha ng mga probability estimate. Itinatakda natin ang random state sa '0' upang i-shuffle ang datos para makakuha ng probabilities. +Ang Support-Vector clustering (SVC) ay bahagi ng pamilya ng Support-Vector machines ng mga teknik sa ML (matuto pa tungkol dito sa ibaba). Sa pamamaraang ito, maaari kang pumili ng 'kernel' upang magpasya kung paano iklasipika ang mga label. Ang 'C' na parameter ay tumutukoy sa 'regularization' na nagre-regulate sa impluwensya ng mga parameter. Ang kernel ay maaaring isa sa [marami](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC); dito itinakda namin ito sa 'linear' upang matiyak na ginagamit namin ang linear SVC. Ang probability ay default na 'false'; dito itinakda namin ito sa 'true' upang makakuha ng mga probability estimates. Itinakda namin ang random state sa '0' upang i-shuffle ang datos para makakuha ng probabilities. ### Ehersisyo - gamitin ang linear SVC -Magsimula sa paglikha ng array ng mga classifier. Magdadagdag ka nang paunti-unti sa array na ito habang sinusubukan natin. +Magsimula sa pamamagitan ng paglikha ng array ng mga classifier. Magdadagdag ka nang paunti-unti sa array na ito habang sinusubukan natin. 1. Magsimula sa Linear SVC: @@ -116,11 +116,11 @@ Magsimula sa paglikha ng array ng mga classifier. Magdadagdag ka nang paunti-unt ## K-Neighbors classifier -Ang K-Neighbors ay bahagi ng "neighbors" na pamilya ng mga pamamaraang ML, na maaaring gamitin para sa parehong supervised at unsupervised na pag-aaral. Sa pamamaraang ito, isang paunang natukoy na bilang ng mga punto ang nilikha at ang datos ay kinokolekta sa paligid ng mga puntong ito upang ang mga generalized na label ay mahulaan para sa datos. +Ang K-Neighbors ay bahagi ng "neighbors" na pamilya ng mga pamamaraang ML, na maaaring gamitin para sa parehong supervised at unsupervised learning. Sa pamamaraang ito, isang paunang bilang ng mga punto ang nilikha at ang datos ay kinokolekta sa paligid ng mga puntong ito upang ang mga generalized na label ay mahulaan para sa datos. ### Ehersisyo - gamitin ang K-Neighbors classifier -Maganda ang naunang classifier at gumana nang maayos sa datos, ngunit baka mas mapabuti pa natin ang accuracy. Subukan ang K-Neighbors classifier. +Maganda ang naunang classifier at mahusay itong gumana sa datos, ngunit baka mas mapabuti pa natin ang accuracy. Subukan ang K-Neighbors classifier. 1. Magdagdag ng linya sa iyong classifier array (magdagdag ng comma pagkatapos ng Linear SVC item): @@ -149,7 +149,7 @@ Maganda ang naunang classifier at gumana nang maayos sa datos, ngunit baka mas m ## Support Vector Classifier -Ang Support-Vector classifiers ay bahagi ng [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine) na pamilya ng mga pamamaraang ML na ginagamit para sa mga gawain ng klasipikasyon at regression. Ang SVMs ay "nagmamapa ng mga training example sa mga punto sa espasyo" upang ma-maximize ang distansya sa pagitan ng dalawang kategorya. Ang mga susunod na datos ay minamapa sa espasyong ito upang mahulaan ang kanilang kategorya. +Ang Support-Vector classifiers ay bahagi ng [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine) na pamilya ng mga pamamaraang ML na ginagamit para sa mga gawain ng klasipikasyon at regression. Ang SVMs ay "nagmamapa ng mga training example sa mga punto sa espasyo" upang ma-maximize ang distansya sa pagitan ng dalawang kategorya. Ang susunod na datos ay ima-map sa espasyong ito upang mahulaan ang kanilang kategorya. ### Ehersisyo - gamitin ang Support Vector Classifier @@ -182,7 +182,7 @@ Subukan natin ang mas magandang accuracy gamit ang Support Vector Classifier. ## Ensemble Classifiers -Sundan natin ang landas hanggang sa dulo, kahit na maganda na ang naunang pagsusulit. Subukan natin ang ilang 'Ensemble Classifiers', partikular ang Random Forest at AdaBoost: +Sundin natin ang landas hanggang sa dulo, kahit na maganda na ang naunang pagsubok. Subukan natin ang ilang 'Ensemble Classifiers', partikular ang Random Forest at AdaBoost: ```python 'RFST': RandomForestClassifier(n_estimators=100), @@ -225,17 +225,17 @@ Ang pamamaraang ito ng Machine Learning ay "pinagsasama ang mga prediksyon ng il - [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), isang averaging method, ay bumubuo ng 'forest' ng 'decision trees' na may kasamang randomness upang maiwasan ang overfitting. Ang n_estimators parameter ay itinakda sa bilang ng mga puno. -- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) ay nagfi-fit ng classifier sa dataset at pagkatapos ay nagfi-fit ng mga kopya ng classifier na iyon sa parehong dataset. Nakatuon ito sa mga weights ng mga maling na-klasipikang item at ina-adjust ang fit para sa susunod na classifier upang maitama. +- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) ay nagfi-fit ng classifier sa dataset at pagkatapos ay nagfi-fit ng mga kopya ng classifier na iyon sa parehong dataset. Nakatuon ito sa mga weights ng maling na-klasipikang item at ina-adjust ang fit para sa susunod na classifier upang maitama. --- ## 🚀Hamunin -Ang bawat isa sa mga pamamaraang ito ay may malaking bilang ng mga parameter na maaari mong i-tweak. Mag-research sa default na mga parameter ng bawat isa at pag-isipan kung ano ang magiging epekto ng pag-tweak ng mga parameter na ito sa kalidad ng modelo. +Ang bawat isa sa mga teknik na ito ay may malaking bilang ng mga parameter na maaari mong i-tweak. Mag-research sa default parameters ng bawat isa at pag-isipan kung ano ang magiging epekto ng pag-tweak ng mga parameter na ito sa kalidad ng modelo. -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/) +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -## Review & Pag-aaral sa Sarili +## Review at Pag-aaral sa Sarili Maraming jargon sa mga araling ito, kaya maglaan ng oras upang suriin ang [listahang ito](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) ng mga kapaki-pakinabang na termino! @@ -246,4 +246,4 @@ Maraming jargon sa mga araling ito, kaya maglaan ng oras upang suriin ang [lista --- **Paunawa**: -Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito. \ No newline at end of file +Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na pinagmulan. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file diff --git a/translations/tl/4-Classification/4-Applied/README.md b/translations/tl/4-Classification/4-Applied/README.md index 4752044e..b48c56c6 100644 --- a/translations/tl/4-Classification/4-Applied/README.md +++ b/translations/tl/4-Classification/4-Applied/README.md @@ -1,23 +1,23 @@ # Gumawa ng Web App para sa Pagrekomenda ng Lutuin -Sa araling ito, gagawa ka ng isang classification model gamit ang ilan sa mga teknik na natutunan mo sa mga nakaraang aralin at gamit ang masarap na dataset ng lutuin na ginamit sa buong serye. Bukod dito, gagawa ka ng isang maliit na web app upang magamit ang isang naka-save na model, gamit ang web runtime ng Onnx. +Sa araling ito, gagawa ka ng isang classification model gamit ang ilan sa mga teknik na natutunan mo sa mga nakaraang aralin, gamit ang masarap na dataset ng lutuin na ginamit sa buong serye. Bukod dito, gagawa ka ng isang maliit na web app upang magamit ang naka-save na model, gamit ang web runtime ng Onnx. Isa sa mga pinaka-kapaki-pakinabang na praktikal na gamit ng machine learning ay ang paggawa ng mga sistema ng rekomendasyon, at maaari kang magsimula sa direksyong iyon ngayon! [![Ipinapakita ang web app na ito](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "Applied ML") -> 🎥 I-click ang imahe sa itaas para sa video: Ginawa ni Jen Looper ang isang web app gamit ang classified cuisine data +> 🎥 I-click ang imahe sa itaas para sa video: Si Jen Looper ay gumagawa ng web app gamit ang classified cuisine data -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/25/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) Sa araling ito, matututunan mo: @@ -31,11 +31,11 @@ Ang paggawa ng applied ML systems ay mahalagang bahagi ng paggamit ng mga teknol Sa isang [nakaraang aralin](../../3-Web-App/1-Web-App/README.md), gumawa ka ng Regression model tungkol sa mga sightings ng UFO, "pickled" ito, at ginamit ito sa isang Flask app. Bagama't ang arkitekturang ito ay napaka-kapaki-pakinabang, ito ay isang full-stack Python app, at maaaring kasama sa iyong mga pangangailangan ang paggamit ng JavaScript application. -Sa araling ito, maaari kang gumawa ng isang basic na JavaScript-based system para sa inference. Ngunit una, kailangan mong sanayin ang isang model at i-convert ito para magamit sa Onnx. +Sa araling ito, maaari kang gumawa ng isang basic na JavaScript-based system para sa inference. Gayunpaman, kailangan mo munang mag-train ng model at i-convert ito para magamit sa Onnx. -## Ehersisyo - sanayin ang classification model +## Ehersisyo - mag-train ng classification model -Una, sanayin ang isang classification model gamit ang nilinis na dataset ng lutuin na ginamit natin. +Una, mag-train ng classification model gamit ang nilinis na dataset ng lutuin na ginamit natin. 1. Magsimula sa pag-import ng mga kapaki-pakinabang na library: @@ -94,7 +94,7 @@ Gagamitin natin ang 'SVC' library na may magandang accuracy. model.fit(X_train,y_train.values.ravel()) ``` -1. Ngayon, subukan ang iyong model, tawagin ang `predict()`: +1. Ngayon, i-test ang iyong model, gamit ang `predict()`: ```python y_pred = model.predict(X_test) @@ -144,23 +144,23 @@ Siguraduhing gawin ang conversion gamit ang tamang bilang ng Tensor. Ang dataset f.write(onx.SerializeToString()) ``` - > Tandaan, maaari kang magpasa ng [mga opsyon](https://onnx.ai/sklearn-onnx/parameterized.html) sa iyong conversion script. Sa kasong ito, ipinasa namin ang 'nocl' bilang True at 'zipmap' bilang False. Dahil ito ay isang classification model, mayroon kang opsyon na alisin ang ZipMap na gumagawa ng listahan ng mga dictionary (hindi kinakailangan). Ang `nocl` ay tumutukoy sa impormasyon ng klase na kasama sa model. Bawasan ang laki ng iyong model sa pamamagitan ng pagtatakda ng `nocl` sa 'True'. + > Tandaan, maaari kang magpasa ng [mga opsyon](https://onnx.ai/sklearn-onnx/parameterized.html) sa iyong conversion script. Sa kasong ito, ipinasa namin ang 'nocl' bilang True at 'zipmap' bilang False. Dahil ito ay isang classification model, mayroon kang opsyon na alisin ang ZipMap na gumagawa ng listahan ng mga dictionary (hindi kinakailangan). Ang `nocl` ay tumutukoy sa impormasyon ng klase na kasama sa model. Bawasan ang laki ng iyong model sa pamamagitan ng pag-set ng `nocl` sa 'True'. -Ang pagtakbo ng buong notebook ngayon ay gagawa ng Onnx model at i-save ito sa folder na ito. +Ang pagtakbo sa buong notebook ngayon ay gagawa ng Onnx model at i-save ito sa folder na ito. ## Tingnan ang iyong model -Ang mga Onnx model ay hindi masyadong nakikita sa Visual Studio code, ngunit mayroong isang napakagandang libreng software na ginagamit ng maraming mananaliksik upang i-visualize ang model upang matiyak na ito ay maayos na ginawa. I-download ang [Netron](https://github.com/lutzroeder/Netron) at buksan ang iyong model.onnx file. Makikita mo ang iyong simpleng model na na-visualize, kasama ang 380 inputs at classifier na nakalista: +Ang mga Onnx model ay hindi masyadong nakikita sa Visual Studio Code, ngunit mayroong isang napakagandang libreng software na ginagamit ng maraming mananaliksik upang i-visualize ang model upang matiyak na ito ay maayos na ginawa. I-download ang [Netron](https://github.com/lutzroeder/Netron) at buksan ang iyong model.onnx file. Makikita mo ang iyong simpleng model na na-visualize, kasama ang 380 inputs at classifier na nakalista: -![Netron visual](../../../../translated_images/netron.a05f39410211915e0f95e2c0e8b88f41e7d13d725faf660188f3802ba5c9e831.tl.png) +![Netron visual](../../../../4-Classification/4-Applied/images/netron.png) -Ang Netron ay isang kapaki-pakinabang na tool upang makita ang iyong mga model. +Ang Netron ay isang kapaki-pakinabang na tool upang tingnan ang iyong mga model. Ngayon handa ka nang gamitin ang model na ito sa isang web app. Gumawa tayo ng app na magagamit kapag tumingin ka sa iyong refrigerator at sinusubukang alamin kung aling kombinasyon ng iyong mga natirang sangkap ang maaari mong gamitin upang magluto ng isang partikular na lutuin, ayon sa iyong model. ## Gumawa ng web application para sa rekomendasyon -Maaari mong gamitin ang iyong model nang direkta sa isang web app. Ang arkitekturang ito ay nagbibigay-daan din sa iyo na patakbuhin ito nang lokal at kahit offline kung kinakailangan. Magsimula sa pamamagitan ng paggawa ng isang `index.html` file sa parehong folder kung saan mo iniimbak ang iyong `model.onnx` file. +Maaari mong gamitin ang iyong model nang direkta sa isang web app. Ang arkitekturang ito ay nagbibigay-daan din sa iyo na patakbuhin ito nang lokal at kahit offline kung kinakailangan. Magsimula sa pamamagitan ng paggawa ng `index.html` file sa parehong folder kung saan mo iniimbak ang iyong `model.onnx` file. 1. Sa file na ito _index.html_, idagdag ang sumusunod na markup: @@ -176,7 +176,7 @@ Maaari mong gamitin ang iyong model nang direkta sa isang web app. Ang arkitektu ``` -1. Ngayon, sa loob ng `body` tags, magdagdag ng kaunting markup upang ipakita ang isang listahan ng mga checkbox na sumasalamin sa ilang sangkap: +1. Ngayon, sa loob ng `body` tags, magdagdag ng kaunting markup upang ipakita ang listahan ng mga checkbox na sumasalamin sa ilang sangkap: ```html

                                          Check your refrigerator. What can you create?

                                          @@ -221,9 +221,9 @@ Maaari mong gamitin ang iyong model nang direkta sa isang web app. Ang arkitektu ``` - Tandaan na ang bawat checkbox ay binigyan ng value. Ang value na ito ay sumasalamin sa index kung saan matatagpuan ang sangkap ayon sa dataset. Halimbawa, ang Apple, sa listahang ito na naka-alpabeto, ay nasa ikalimang column, kaya ang value nito ay '4' dahil nagsisimula tayo sa pagbilang sa 0. Maaari mong konsultahin ang [ingredients spreadsheet](../../../../4-Classification/data/ingredient_indexes.csv) upang matuklasan ang index ng isang partikular na sangkap. + Tandaan na ang bawat checkbox ay binigyan ng value. Ang value na ito ay sumasalamin sa index kung saan matatagpuan ang sangkap ayon sa dataset. Halimbawa, ang Apple, sa listahang ito na naka-alpabeto, ay nasa ikalimang column, kaya ang value nito ay '4' dahil nagsisimula tayong magbilang sa 0. Maaari mong konsultahin ang [ingredients spreadsheet](../../../../4-Classification/data/ingredient_indexes.csv) upang matuklasan ang index ng isang partikular na sangkap. - Ipagpatuloy ang iyong trabaho sa index.html file, magdagdag ng script block kung saan tinatawag ang model pagkatapos ng huling pagsasara ng ``. + Ipagpatuloy ang iyong trabaho sa index.html file, magdagdag ng script block kung saan tatawagin ang model pagkatapos ng huling pagsasara ng ``. 1. Una, i-import ang [Onnx Runtime](https://www.onnxruntime.ai/): @@ -285,33 +285,33 @@ Maaari mong gamitin ang iyong model nang direkta sa isang web app. Ang arkitektu ``` -Sa code na ito, may ilang bagay na nangyayari: +Sa code na ito, maraming bagay ang nangyayari: 1. Gumawa ka ng array ng 380 posibleng value (1 o 0) na itatakda at ipapadala sa model para sa inference, depende kung ang isang checkbox ng sangkap ay naka-check. -2. Gumawa ka ng array ng mga checkbox at isang paraan upang matukoy kung naka-check ang mga ito sa isang `init` function na tinatawag kapag nagsimula ang application. Kapag ang isang checkbox ay naka-check, ang `ingredients` array ay binabago upang sumalamin sa napiling sangkap. +2. Gumawa ka ng array ng mga checkbox at isang paraan upang matukoy kung naka-check ang mga ito sa isang `init` function na tinatawag kapag nagsimula ang application. Kapag ang isang checkbox ay naka-check, ang `ingredients` array ay binabago upang ipakita ang napiling sangkap. 3. Gumawa ka ng `testCheckboxes` function na nagche-check kung may naka-check na checkbox. -4. Ginamit mo ang `startInference` function kapag pinindot ang button at, kung may naka-check na checkbox, sinimulan mo ang inference. +4. Ginagamit mo ang `startInference` function kapag pinindot ang button at, kung may naka-check na checkbox, sinisimulan mo ang inference. 5. Ang inference routine ay kinabibilangan ng: 1. Pag-set up ng asynchronous load ng model - 2. Paglikha ng Tensor structure na ipapadala sa model - 3. Paglikha ng 'feeds' na sumasalamin sa `float_input` input na ginawa mo noong sinasanay ang iyong model (maaari mong gamitin ang Netron upang i-verify ang pangalan) - 4. Pagpapadala ng mga 'feeds' sa model at paghihintay ng tugon + 2. Paglikha ng Tensor structure upang ipadala sa model + 3. Paglikha ng 'feeds' na sumasalamin sa `float_input` input na ginawa mo noong nag-train ng iyong model (maaari mong gamitin ang Netron upang i-verify ang pangalan) + 4. Pagpapadala ng mga 'feeds' sa model at paghihintay ng sagot ## Subukan ang iyong application -Buksan ang isang terminal session sa Visual Studio Code sa folder kung saan matatagpuan ang iyong index.html file. Siguraduhing mayroon kang [http-server](https://www.npmjs.com/package/http-server) na naka-install globally, at i-type ang `http-server` sa prompt. Magbubukas ang isang localhost at maaari mong tingnan ang iyong web app. Tingnan kung anong lutuin ang inirerekomenda batay sa iba't ibang sangkap: +Magbukas ng terminal session sa Visual Studio Code sa folder kung saan matatagpuan ang iyong index.html file. Siguraduhing mayroon kang [http-server](https://www.npmjs.com/package/http-server) na naka-install globally, at i-type ang `http-server` sa prompt. Magbubukas ang localhost at maaari mong tingnan ang iyong web app. Tingnan kung anong lutuin ang inirerekomenda batay sa iba't ibang sangkap: -![ingredient web app](../../../../translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.tl.png) +![ingredient web app](../../../../4-Classification/4-Applied/images/web-app.png) -Binabati kita, nakagawa ka ng isang 'recommendation' web app na may ilang fields. Maglaan ng oras upang palawakin ang sistemang ito! +Binabati kita, nakagawa ka ng 'recommendation' web app na may ilang fields. Maglaan ng oras upang palawakin ang sistemang ito! ## 🚀Hamunin -Ang iyong web app ay napaka-minimal, kaya ipagpatuloy ang pagpapalawak nito gamit ang mga sangkap at kanilang mga index mula sa [ingredient_indexes](../../../../4-Classification/data/ingredient_indexes.csv) data. Anong mga kombinasyon ng lasa ang gumagana upang makagawa ng isang partikular na pambansang ulam? +Ang iyong web app ay napaka-minimal, kaya ipagpatuloy ang pagpapalawak nito gamit ang mga sangkap at ang kanilang mga index mula sa [ingredient_indexes](../../../../4-Classification/data/ingredient_indexes.csv) data. Anong mga kombinasyon ng lasa ang gumagana upang makagawa ng isang partikular na pambansang ulam? -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/26/) +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -## Review & Self Study +## Review at Pag-aaral sa Sarili Bagama't ang araling ito ay bahagyang tumalakay sa utility ng paggawa ng sistema ng rekomendasyon para sa mga sangkap ng pagkain, ang larangang ito ng ML applications ay napakayaman sa mga halimbawa. Magbasa pa tungkol sa kung paano binubuo ang mga sistemang ito: @@ -321,7 +321,7 @@ Bagama't ang araling ito ay bahagyang tumalakay sa utility ng paggawa ng sistema ## Takdang Aralin -[Magbuo ng bagong recommender](assignment.md) +[Gumawa ng bagong recommender](assignment.md) --- diff --git a/translations/tl/5-Clustering/1-Visualize/README.md b/translations/tl/5-Clustering/1-Visualize/README.md index 451665fd..395721f5 100644 --- a/translations/tl/5-Clustering/1-Visualize/README.md +++ b/translations/tl/5-Clustering/1-Visualize/README.md @@ -1,113 +1,115 @@ # Panimula sa clustering -Ang clustering ay isang uri ng [Unsupervised Learning](https://wikipedia.org/wiki/Unsupervised_learning) na inaakalang ang dataset ay walang label o ang mga input nito ay hindi tumutugma sa mga pre-defined na output. Gumagamit ito ng iba't ibang algorithm upang suriin ang unlabeled na data at magbigay ng mga grupo batay sa mga pattern na natutuklasan nito sa data. +Ang clustering ay isang uri ng [Unsupervised Learning](https://wikipedia.org/wiki/Unsupervised_learning) na ipinapalagay na ang dataset ay walang label o ang mga input nito ay hindi tumutugma sa mga pre-defined na output. Gumagamit ito ng iba't ibang algorithm upang suriin ang unlabeled na data at magbigay ng mga pangkat batay sa mga pattern na natutuklasan nito sa data. [![No One Like You by PSquare](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](https://youtu.be/ty2advRiWJM "No One Like You by PSquare") > 🎥 I-click ang imahe sa itaas para sa isang video. Habang nag-aaral ka ng machine learning gamit ang clustering, mag-enjoy sa ilang Nigerian Dance Hall tracks - ito ay isang highly rated na kanta mula 2014 ng PSquare. -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/27/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) ### Panimula -[Clustering](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) ay napaka-kapaki-pakinabang para sa pag-explore ng data. Tingnan natin kung makakatulong ito sa pagtuklas ng mga trend at pattern sa paraan ng pagkonsumo ng musika ng mga Nigerian audience. +Ang [Clustering](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) ay napaka-kapaki-pakinabang para sa paggalugad ng data. Tingnan natin kung makakatulong ito sa pagtuklas ng mga trend at pattern sa paraan ng pagkonsumo ng musika ng mga Nigerian audience. -✅ Maglaan ng isang minuto upang pag-isipan ang mga gamit ng clustering. Sa totoong buhay, nangyayari ang clustering tuwing may tambak ng labahan at kailangan mong ayusin ang mga damit ng iyong pamilya 🧦👕👖🩲. Sa data science, nangyayari ang clustering kapag sinusubukang suriin ang mga kagustuhan ng isang user, o tukuyin ang mga katangian ng anumang unlabeled dataset. Sa isang paraan, ang clustering ay tumutulong upang maunawaan ang kaguluhan, tulad ng isang drawer ng medyas. +✅ Maglaan ng isang minuto upang pag-isipan ang mga gamit ng clustering. Sa totoong buhay, nangyayari ang clustering tuwing mayroon kang tambak ng labahan at kailangang ayusin ang mga damit ng iyong pamilya 🧦👕👖🩲. Sa data science, nangyayari ang clustering kapag sinusubukang suriin ang mga kagustuhan ng isang user, o tukuyin ang mga katangian ng anumang unlabeled dataset. Sa isang paraan, ang clustering ay tumutulong upang maunawaan ang kaguluhan, tulad ng drawer ng medyas. [![Introduction to ML](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Introduction to Clustering") -> 🎥 I-click ang imahe sa itaas para sa isang video: Ipinakikilala ni John Guttag ng MIT ang clustering. +> 🎥 I-click ang imahe sa itaas para sa isang video: Ipinakikilala ni John Guttag ng MIT ang clustering -Sa isang propesyonal na setting, maaaring gamitin ang clustering upang matukoy ang segmentation ng merkado, tulad ng pagtukoy kung anong mga age group ang bumibili ng anong mga produkto. Isa pang gamit ay ang anomaly detection, marahil upang matukoy ang pandaraya mula sa dataset ng mga transaksyon gamit ang credit card. Maaari mo ring gamitin ang clustering upang matukoy ang mga tumor sa isang batch ng mga medical scan. +Sa isang propesyonal na setting, maaaring gamitin ang clustering upang matukoy ang segmentation ng merkado, tulad ng pagtukoy kung anong mga age group ang bumibili ng mga partikular na produkto. Isa pang gamit ay ang anomaly detection, halimbawa upang matukoy ang pandaraya mula sa dataset ng mga transaksyon sa credit card. Maaari mo ring gamitin ang clustering upang matukoy ang mga tumor sa batch ng mga medical scan. ✅ Maglaan ng isang minuto upang pag-isipan kung paano mo maaaring naranasan ang clustering 'sa totoong buhay', sa isang banking, e-commerce, o business setting. > 🎓 Nakakatuwa, ang cluster analysis ay nagmula sa mga larangan ng Anthropology at Psychology noong 1930s. Maiisip mo ba kung paano ito ginamit noon? -Bukod dito, maaari mo itong gamitin para sa pag-grupo ng mga resulta ng paghahanap - tulad ng mga shopping link, larawan, o review, halimbawa. Kapaki-pakinabang ang clustering kapag mayroon kang malaking dataset na nais mong bawasan at kung saan nais mong magsagawa ng mas detalyadong pagsusuri, kaya ang teknik na ito ay maaaring gamitin upang matuto tungkol sa data bago bumuo ng iba pang mga modelo. +Bukod dito, maaari mo itong gamitin para sa pag-grupo ng mga resulta ng paghahanap - tulad ng mga shopping link, imahe, o review, halimbawa. Kapaki-pakinabang ang clustering kapag mayroon kang malaking dataset na nais mong bawasan at kung saan nais mong magsagawa ng mas detalyadong pagsusuri, kaya ang teknik na ito ay maaaring gamitin upang matuto tungkol sa data bago bumuo ng iba pang mga modelo. -✅ Kapag ang iyong data ay nakaayos na sa mga cluster, mag-aassign ka ng cluster Id, at ang teknik na ito ay maaaring maging kapaki-pakinabang sa pag-preserve ng privacy ng dataset; maaari mong tukuyin ang isang data point gamit ang cluster id nito, sa halip na mas detalyado o mas nakikilalang data. Maiisip mo ba ang iba pang dahilan kung bakit mas gugustuhin mong tukuyin ang isang cluster Id kaysa sa ibang elemento ng cluster upang kilalanin ito? +✅ Kapag ang iyong data ay nakaayos na sa mga cluster, maaari kang magtalaga ng cluster Id dito, at ang teknik na ito ay maaaring maging kapaki-pakinabang sa pagpapanatili ng privacy ng dataset; maaari mong tukuyin ang isang data point sa pamamagitan ng cluster id nito, sa halip na sa pamamagitan ng mas nakakapagpakilalang data. Maiisip mo ba ang iba pang dahilan kung bakit mas gugustuhin mong tukuyin ang isang cluster Id kaysa sa iba pang elemento ng cluster upang kilalanin ito? -Palalimin ang iyong pag-unawa sa mga clustering techniques sa [Learn module](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott). +Palalimin ang iyong pag-unawa sa mga clustering techniques sa [Learn module](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott) ## Pagsisimula sa clustering -[Ang Scikit-learn ay nag-aalok ng malawak na hanay](https://scikit-learn.org/stable/modules/clustering.html) ng mga pamamaraan upang magsagawa ng clustering. Ang uri na pipiliin mo ay depende sa iyong kaso ng paggamit. Ayon sa dokumentasyon, bawat pamamaraan ay may iba't ibang benepisyo. Narito ang isang pinasimpleng talahanayan ng mga pamamaraan na sinusuportahan ng Scikit-learn at ang kanilang naaangkop na mga kaso ng paggamit: - -| Pangalan ng Pamamaraan | Kaso ng Paggamit | -| :--------------------------- | :------------------------------------------------------------------ | -| K-Means | pangkalahatang layunin, inductive | -| Affinity propagation | marami, hindi pantay na mga cluster, inductive | -| Mean-shift | marami, hindi pantay na mga cluster, inductive | -| Spectral clustering | kaunti, pantay na mga cluster, transductive | -| Ward hierarchical clustering | marami, constrained na mga cluster, transductive | -| Agglomerative clustering | marami, constrained, non Euclidean distances, transductive | -| DBSCAN | non-flat geometry, hindi pantay na mga cluster, transductive | +[Ang Scikit-learn ay nag-aalok ng malawak na hanay](https://scikit-learn.org/stable/modules/clustering.html) ng mga pamamaraan upang magsagawa ng clustering. Ang uri na pipiliin mo ay depende sa iyong use case. Ayon sa dokumentasyon, bawat pamamaraan ay may iba't ibang benepisyo. Narito ang isang pinasimpleng talahanayan ng mga pamamaraan na sinusuportahan ng Scikit-learn at ang kanilang naaangkop na mga use case: + +| Pangalan ng Pamamaraan | Use case | +| :--------------------------- | :--------------------------------------------------------------------- | +| K-Means | pangkalahatang layunin, inductive | +| Affinity propagation | marami, hindi pantay na mga cluster, inductive | +| Mean-shift | marami, hindi pantay na mga cluster, inductive | +| Spectral clustering | kaunti, pantay na mga cluster, transductive | +| Ward hierarchical clustering | marami, constrained na mga cluster, transductive | +| Agglomerative clustering | marami, constrained, non Euclidean distances, transductive | +| DBSCAN | non-flat geometry, hindi pantay na mga cluster, transductive | | OPTICS | non-flat geometry, hindi pantay na mga cluster na may variable density, transductive | -| Gaussian mixtures | flat geometry, inductive | -| BIRCH | malaking dataset na may outliers, inductive | +| Gaussian mixtures | flat geometry, inductive | +| BIRCH | malaking dataset na may outliers, inductive | -> 🎓 Ang paraan ng paglikha ng mga cluster ay may kinalaman sa kung paano natin pinagsasama-sama ang mga data point sa mga grupo. Tuklasin natin ang ilang bokabularyo: +> 🎓 Ang paraan ng paglikha natin ng mga cluster ay may kinalaman sa kung paano natin pinagsasama-sama ang mga data point sa mga grupo. Tuklasin natin ang ilang bokabularyo: > > 🎓 ['Transductive' vs. 'inductive'](https://wikipedia.org/wiki/Transduction_(machine_learning)) > > Ang transductive inference ay nagmumula sa mga naobserbahang training cases na tumutugma sa mga partikular na test cases. Ang inductive inference ay nagmumula sa mga training cases na tumutugma sa mga pangkalahatang panuntunan na pagkatapos ay inilalapat sa mga test cases. > -> Halimbawa: Isipin na mayroon kang dataset na bahagyang may label. Ang ilan ay 'records', ang ilan ay 'cds', at ang ilan ay walang label. Ang iyong trabaho ay magbigay ng label para sa mga walang label. Kung pipili ka ng inductive approach, magte-train ka ng model na naghahanap ng 'records' at 'cds', at ilalapat ang mga label na iyon sa iyong unlabeled na data. Ang approach na ito ay magkakaroon ng problema sa pag-classify ng mga bagay na aktwal na 'cassettes'. Ang transductive approach, sa kabilang banda, ay mas epektibong humahawak sa hindi kilalang data dahil gumagana ito upang mag-grupo ng mga magkatulad na item at pagkatapos ay maglalapat ng label sa isang grupo. Sa kasong ito, ang mga cluster ay maaaring magpakita ng 'round musical things' at 'square musical things'. +> Halimbawa: Isipin na mayroon kang dataset na bahagyang may label. Ang ilan ay 'records', ang ilan ay 'cds', at ang ilan ay blangko. Ang iyong trabaho ay magbigay ng label para sa mga blangko. Kung pipili ka ng inductive approach, magte-train ka ng model na naghahanap ng 'records' at 'cds', at ilalapat ang mga label na iyon sa iyong unlabeled na data. Ang approach na ito ay mahihirapan sa pag-classify ng mga bagay na aktwal na 'cassettes'. Ang transductive approach, sa kabilang banda, ay mas epektibong humahawak sa hindi kilalang data dahil gumagana ito upang mag-grupo ng mga magkatulad na item at pagkatapos ay maglalapat ng label sa isang grupo. Sa kasong ito, maaaring magpakita ang mga cluster ng 'bilog na musical things' at 'parisukat na musical things'. > > 🎓 ['Non-flat' vs. 'flat' geometry](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering) > -> Ang 'flat' sa kontekstong ito ay tumutukoy sa Euclidean geometry (mga bahagi nito ay itinuturo bilang 'plane' geometry), at ang non-flat ay tumutukoy sa non-Euclidean geometry. Ano ang kinalaman ng geometry sa machine learning? Bilang dalawang larangan na nakaugat sa matematika, dapat mayroong karaniwang paraan upang sukatin ang distansya sa pagitan ng mga puntos sa mga cluster, at maaaring gawin ito sa 'flat' o 'non-flat' na paraan, depende sa kalikasan ng data. [Euclidean distances](https://wikipedia.org/wiki/Euclidean_distance) ay sinusukat bilang haba ng isang linya sa pagitan ng dalawang puntos. [Non-Euclidean distances](https://wikipedia.org/wiki/Non-Euclidean_geometry) ay sinusukat sa kahabaan ng isang kurba. Kung ang iyong data, kapag na-visualize, ay tila hindi umiiral sa isang plane, maaaring kailanganin mong gumamit ng specialized algorithm upang hawakan ito. +> Nagmula sa terminolohiyang matematika, ang non-flat vs. flat geometry ay tumutukoy sa pagsukat ng distansya sa pagitan ng mga punto sa pamamagitan ng 'flat' ([Euclidean](https://wikipedia.org/wiki/Euclidean_geometry)) o 'non-flat' (non-Euclidean) na mga geometrical na pamamaraan. > -![Flat vs Nonflat Geometry Infographic](../../../../translated_images/flat-nonflat.d1c8c6e2a96110c1d57fa0b72913f6aab3c245478524d25baf7f4a18efcde224.tl.png) +>'Flat' sa kontekstong ito ay tumutukoy sa Euclidean geometry (ang ilang bahagi nito ay itinuturo bilang 'plane' geometry), at ang non-flat ay tumutukoy sa non-Euclidean geometry. Ano ang kinalaman ng geometry sa machine learning? Bilang dalawang larangan na nakaugat sa matematika, dapat mayroong karaniwang paraan upang sukatin ang distansya sa pagitan ng mga punto sa mga cluster, at maaaring gawin ito sa 'flat' o 'non-flat' na paraan, depende sa kalikasan ng data. [Euclidean distances](https://wikipedia.org/wiki/Euclidean_distance) ay sinusukat bilang haba ng segment ng linya sa pagitan ng dalawang punto. [Non-Euclidean distances](https://wikipedia.org/wiki/Non-Euclidean_geometry) ay sinusukat sa kahabaan ng kurba. Kung ang iyong data, kapag na-visualize, ay tila hindi umiiral sa isang plane, maaaring kailanganin mong gumamit ng specialized algorithm upang hawakan ito. +> +![Flat vs Nonflat Geometry Infographic](../../../../5-Clustering/1-Visualize/images/flat-nonflat.png) > Infographic ni [Dasani Madipalli](https://twitter.com/dasani_decoded) > > 🎓 ['Distances'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf) > -> Ang mga cluster ay tinutukoy ng kanilang distance matrix, halimbawa ang mga distansya sa pagitan ng mga puntos. Ang distansya ay maaaring sukatin sa iba't ibang paraan. Ang Euclidean clusters ay tinutukoy ng average ng mga halaga ng punto, at naglalaman ng 'centroid' o gitnang punto. Ang mga distansya ay sinusukat sa pamamagitan ng distansya sa centroid na iyon. Ang Non-Euclidean distances ay tumutukoy sa 'clustroids', ang punto na pinakamalapit sa iba pang mga punto. Ang mga clustroids naman ay maaaring tukuyin sa iba't ibang paraan. +> Ang mga cluster ay tinutukoy ng kanilang distance matrix, halimbawa ang mga distansya sa pagitan ng mga punto. Ang distansya ay maaaring sukatin sa ilang paraan. Ang mga Euclidean cluster ay tinutukoy ng average ng mga halaga ng punto, at naglalaman ng 'centroid' o gitnang punto. Ang mga distansya ay sinusukat sa pamamagitan ng distansya sa centroid na iyon. Ang mga non-Euclidean distances ay tumutukoy sa 'clustroids', ang punto na pinakamalapit sa iba pang mga punto. Ang mga clustroids naman ay maaaring tukuyin sa iba't ibang paraan. > > 🎓 ['Constrained'](https://wikipedia.org/wiki/Constrained_clustering) > -> [Constrained Clustering](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) ay nagdadala ng 'semi-supervised' learning sa unsupervised na pamamaraan. Ang mga relasyon sa pagitan ng mga puntos ay minamarkahan bilang 'cannot link' o 'must-link' kaya ang ilang mga panuntunan ay ipinapataw sa dataset. +> [Constrained Clustering](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) ay nagpapakilala ng 'semi-supervised' learning sa unsupervised na pamamaraang ito. Ang mga relasyon sa pagitan ng mga punto ay minarkahan bilang 'cannot link' o 'must-link' kaya ang ilang mga panuntunan ay ipinapataw sa dataset. > -> Halimbawa: Kung ang isang algorithm ay pinakawalan sa isang batch ng unlabelled o semi-labelled na data, ang mga cluster na nabuo nito ay maaaring hindi maganda ang kalidad. Sa halimbawa sa itaas, ang mga cluster ay maaaring mag-grupo ng 'round music things' at 'square music things' at 'triangular things' at 'cookies'. Kung bibigyan ng ilang constraints, o mga panuntunan na susundin ("ang item ay dapat gawa sa plastic", "ang item ay kailangang makagawa ng musika") makakatulong ito upang 'i-constrain' ang algorithm na gumawa ng mas mahusay na mga pagpipilian. +>Halimbawa: Kung ang isang algorithm ay pinakawalan sa batch ng unlabeled o semi-labelled na data, ang mga cluster na nabuo nito ay maaaring hindi maganda ang kalidad. Sa halimbawa sa itaas, maaaring mag-grupo ang mga cluster ng 'bilog na musical things' at 'parisukat na musical things' at 'triangular things' at 'cookies'. Kung bibigyan ng ilang constraints, o mga panuntunan na susundin ("ang item ay dapat gawa sa plastic", "ang item ay kailangang makagawa ng musika") makakatulong ito upang 'pigilan' ang algorithm na gumawa ng mas mahusay na mga pagpipilian. > > 🎓 'Density' > -> Ang data na 'noisy' ay itinuturing na 'dense'. Ang mga distansya sa pagitan ng mga puntos sa bawat isa sa mga cluster nito ay maaaring, sa pagsusuri, mas masikip o mas maluwag, kaya ang data na ito ay kailangang suriin gamit ang naaangkop na clustering method. [Ang artikulong ito](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) ay nagpapakita ng pagkakaiba sa pagitan ng paggamit ng K-Means clustering vs. HDBSCAN algorithms upang suriin ang isang noisy dataset na may hindi pantay na density ng cluster. +> Ang data na 'noisy' ay itinuturing na 'dense'. Ang mga distansya sa pagitan ng mga punto sa bawat isa sa mga cluster nito ay maaaring magpakita, sa pagsusuri, na mas siksik o 'crowded' kaya ang data na ito ay kailangang suriin gamit ang naaangkop na clustering method. [Ang artikulong ito](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) ay nagpapakita ng pagkakaiba sa pagitan ng paggamit ng K-Means clustering vs. HDBSCAN algorithms upang galugarin ang isang noisy dataset na may hindi pantay na cluster density. ## Mga clustering algorithm Mayroong higit sa 100 clustering algorithms, at ang kanilang paggamit ay nakadepende sa kalikasan ng data na hawak. Talakayin natin ang ilan sa mga pangunahing uri: -- **Hierarchical clustering**. Kung ang isang object ay na-classify batay sa kalapitan nito sa isang malapit na object, sa halip na sa mas malayo, ang mga cluster ay nabubuo batay sa distansya ng mga miyembro nito sa iba pang mga object. Ang agglomerative clustering ng Scikit-learn ay hierarchical. +- **Hierarchical clustering**. Kung ang isang object ay na-classify batay sa kalapitan nito sa isang kalapit na object, sa halip na sa mas malayong object, ang mga cluster ay nabubuo batay sa distansya ng mga miyembro nito sa iba pang mga object. Ang agglomerative clustering ng Scikit-learn ay hierarchical. - ![Hierarchical clustering Infographic](../../../../translated_images/hierarchical.bf59403aa43c8c47493bfdf1cc25230f26e45f4e38a3d62e8769cd324129ac15.tl.png) + ![Hierarchical clustering Infographic](../../../../5-Clustering/1-Visualize/images/hierarchical.png) > Infographic ni [Dasani Madipalli](https://twitter.com/dasani_decoded) -- **Centroid clustering**. Ang sikat na algorithm na ito ay nangangailangan ng pagpili ng 'k', o ang bilang ng mga cluster na bubuuin, pagkatapos nito ay tinutukoy ng algorithm ang gitnang punto ng isang cluster at kinokolekta ang data sa paligid ng puntong iyon. [K-means clustering](https://wikipedia.org/wiki/K-means_clustering) ay isang sikat na bersyon ng centroid clustering. Ang gitna ay tinutukoy ng pinakamalapit na mean, kaya ang pangalan. Ang squared distance mula sa cluster ay pinapaliit. +- **Centroid clustering**. Ang sikat na algorithm na ito ay nangangailangan ng pagpili ng 'k', o ang bilang ng mga cluster na bubuuin, pagkatapos nito ay tinutukoy ng algorithm ang gitnang punto ng isang cluster at kinukuha ang data sa paligid ng puntong iyon. Ang [K-means clustering](https://wikipedia.org/wiki/K-means_clustering) ay isang sikat na bersyon ng centroid clustering. Ang gitna ay tinutukoy ng pinakamalapit na mean, kaya ang pangalan. Ang squared distance mula sa cluster ay pinapaliit. - ![Centroid clustering Infographic](../../../../translated_images/centroid.097fde836cf6c9187d0b2033e9f94441829f9d86f4f0b1604dd4b3d1931aee34.tl.png) + ![Centroid clustering Infographic](../../../../5-Clustering/1-Visualize/images/centroid.png) > Infographic ni [Dasani Madipalli](https://twitter.com/dasani_decoded) -- **Distribution-based clustering**. Batay sa statistical modeling, ang distribution-based clustering ay nakatuon sa pagtukoy ng posibilidad na ang isang data point ay kabilang sa isang cluster, at ina-assign ito nang naaayon. Ang Gaussian mixture methods ay kabilang sa ganitong uri. +- **Distribution-based clustering**. Batay sa statistical modeling, ang distribution-based clustering ay nakatuon sa pagtukoy ng posibilidad na ang isang data point ay kabilang sa isang cluster, at itinalaga ito nang naaayon. Ang Gaussian mixture methods ay kabilang sa ganitong uri. -- **Density-based clustering**. Ang mga data point ay ina-assign sa mga cluster batay sa kanilang density, o ang kanilang pag-grupo sa paligid ng isa't isa. Ang mga data point na malayo sa grupo ay itinuturing na outliers o noise. Ang DBSCAN, Mean-shift, at OPTICS ay kabilang sa ganitong uri ng clustering. +- **Density-based clustering**. Ang mga data point ay itinalaga sa mga cluster batay sa kanilang density, o ang kanilang pag-grupo sa paligid ng isa't isa. Ang mga data point na malayo sa grupo ay itinuturing na outliers o noise. Ang DBSCAN, Mean-shift, at OPTICS ay kabilang sa ganitong uri ng clustering. -- **Grid-based clustering**. Para sa multi-dimensional datasets, isang grid ang nililikha at ang data ay hinahati sa mga cell ng grid, kaya nabubuo ang mga cluster. +- **Grid-based clustering**. Para sa multi-dimensional datasets, isang grid ang nilikha at ang data ay hinahati sa mga cell ng grid, kaya't nabubuo ang mga cluster. ## Ehersisyo - i-cluster ang iyong data -Ang clustering bilang isang teknik ay lubos na natutulungan ng tamang visualization, kaya magsimula tayo sa pag-visualize ng ating music data. Ang ehersisyong ito ay makakatulong sa atin na magdesisyon kung alin sa mga pamamaraan ng clustering ang pinaka-epektibong gamitin para sa kalikasan ng data na ito. +Ang clustering bilang isang teknik ay lubos na natutulungan ng tamang visualization, kaya't magsimula tayo sa pag-visualize ng ating music data. Ang ehersisyong ito ay makakatulong sa atin na magpasya kung alin sa mga pamamaraan ng clustering ang pinaka-epektibong gamitin para sa kalikasan ng data na ito. 1. Buksan ang [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) file sa folder na ito. @@ -117,7 +119,7 @@ Ang clustering bilang isang teknik ay lubos na natutulungan ng tamang visualizat !pip install seaborn ``` -1. I-append ang song data mula sa [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv). Mag-load ng dataframe na may ilang data tungkol sa mga kanta. Maghanda upang i-explore ang data na ito sa pamamagitan ng pag-import ng mga libraries at pag-dump ng data: +1. I-append ang song data mula sa [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv). Mag-load ng dataframe na may ilang data tungkol sa mga kanta. Maghanda upang galugarin ang data na ito sa pamamagitan ng pag-import ng mga library at pag-dump ng data: ```python import matplotlib.pyplot as plt @@ -216,11 +218,11 @@ Ang clustering bilang isang teknik ay lubos na natutulungan ng tamang visualizat | 75% | 2017 | 242098.5 | 31 | 0.8295 | 0.403 | 0.87575 | 0.000234 | 0.164 | -3.331 | 0.177 | 125.03925 | 4 | | max | 2020 | 511738 | 73 | 0.966 | 0.954 | 0.995 | 0.91 | 0.811 | 0.582 | 0.514 | 206.007 | 5 | -> 🤔 Kung ang clustering ay isang unsupervised na pamamaraan na hindi nangangailangan ng labeled data, bakit natin ipinapakita ang data na may labels? Sa yugto ng pagsusuri ng data, ito ay kapaki-pakinabang, ngunit hindi ito kinakailangan para gumana ang clustering algorithms. Maaari mong alisin ang mga column headers at tukuyin ang data sa pamamagitan ng column number. +> 🤔 Kung ang clustering ay isang unsupervised method na hindi nangangailangan ng labeled data, bakit natin ipinapakita ang data na may labels? Sa yugto ng pagsusuri ng data, ito ay kapaki-pakinabang, ngunit hindi ito kinakailangan para gumana ang clustering algorithms. Maaari mong alisin ang mga column headers at tukuyin ang data sa pamamagitan ng column number. Tingnan ang pangkalahatang halaga ng data. Tandaan na ang popularity ay maaaring '0', na nagpapakita ng mga kanta na walang ranking. Alisin natin ang mga ito sa lalong madaling panahon. -1. Gumamit ng barplot upang malaman ang pinakasikat na mga genre: +1. Gumamit ng barplot upang malaman ang pinakasikat na genres: ```python import seaborn as sns @@ -232,9 +234,9 @@ Tingnan ang pangkalahatang halaga ng data. Tandaan na ang popularity ay maaaring plt.title('Top genres',color = 'blue') ``` - ![most popular](../../../../translated_images/popular.9c48d84b3386705f98bf44e26e9655bee9eb7c849d73be65195e37895bfedb5d.tl.png) + ![most popular](../../../../5-Clustering/1-Visualize/images/popular.png) -✅ Kung nais mong makita ang higit pang mga top values, palitan ang top `[:5]` sa mas malaking halaga, o alisin ito upang makita ang lahat. +✅ Kung nais mong makita ang mas maraming top values, palitan ang top `[:5]` sa mas malaking halaga, o alisin ito upang makita ang lahat. Tandaan, kapag ang top genre ay inilarawan bilang 'Missing', nangangahulugan ito na hindi ito na-classify ng Spotify, kaya alisin natin ito. @@ -249,11 +251,11 @@ Tandaan, kapag ang top genre ay inilarawan bilang 'Missing', nangangahulugan ito plt.title('Top genres',color = 'blue') ``` - Ngayon muling suriin ang mga genre: + Ngayon muling suriin ang mga genres: - ![most popular](../../../../translated_images/all-genres.1d56ef06cefbfcd61183023834ed3cb891a5ee638a3ba5c924b3151bf80208d7.tl.png) + ![most popular](../../../../5-Clustering/1-Visualize/images/all-genres.png) -1. Ang tatlong nangungunang genre ang nangingibabaw sa dataset na ito. Mag-focus tayo sa `afro dancehall`, `afropop`, at `nigerian pop`, at karagdagang i-filter ang dataset upang alisin ang anumang may 0 popularity value (na nangangahulugang hindi ito na-classify na may popularity sa dataset at maaaring ituring na noise para sa ating layunin): +1. Sa ngayon, ang tatlong nangungunang genres ang nangingibabaw sa dataset na ito. Mag-focus tayo sa `afro dancehall`, `afropop`, at `nigerian pop`, at karagdagang i-filter ang dataset upang alisin ang anumang may 0 popularity value (na nangangahulugang hindi ito na-classify na may popularity sa dataset at maaaring ituring na noise para sa ating layunin): ```python df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')] @@ -273,21 +275,21 @@ Tandaan, kapag ang top genre ay inilarawan bilang 'Missing', nangangahulugan ito sns.heatmap(corrmat, vmax=.8, square=True) ``` - ![correlations](../../../../translated_images/correlation.a9356bb798f5eea51f47185968e1ebac5c078c92fce9931e28ccf0d7fab71c2b.tl.png) + ![correlations](../../../../5-Clustering/1-Visualize/images/correlation.png) - Ang tanging malakas na correlation ay sa pagitan ng `energy` at `loudness`, na hindi masyadong nakakagulat, dahil ang malakas na musika ay karaniwang masigla. Kung hindi, ang mga correlation ay medyo mahina. Magiging interesante ang makita kung ano ang magagawa ng clustering algorithm sa data na ito. + Ang tanging malakas na correlation ay sa pagitan ng `energy` at `loudness`, na hindi masyadong nakakagulat, dahil ang malakas na musika ay karaniwang mas energetic. Bukod dito, ang correlations ay medyo mahina. Magiging interesante ang makita kung ano ang magagawa ng clustering algorithm sa data na ito. - > 🎓 Tandaan na ang correlation ay hindi nangangahulugang causation! Mayroon tayong patunay ng correlation ngunit walang patunay ng causation. Ang [nakakatawang web site](https://tylervigen.com/spurious-correlations) ay may mga visual na nagdidiin sa puntong ito. + > 🎓 Tandaan na ang correlation ay hindi nangangahulugan ng causation! Mayroon tayong patunay ng correlation ngunit walang patunay ng causation. Ang [nakakatawang web site](https://tylervigen.com/spurious-correlations) ay may mga visual na nag-eemphasize sa puntong ito. Mayroon bang convergence sa dataset na ito sa paligid ng perceived popularity at danceability ng isang kanta? Ang isang FacetGrid ay nagpapakita na may mga concentric circles na nagkakatugma, anuman ang genre. Posible kaya na ang mga Nigerian tastes ay nagkakatugma sa isang tiyak na antas ng danceability para sa genre na ito? -✅ Subukan ang iba't ibang datapoints (energy, loudness, speechiness) at higit pang mga musical genres. Ano ang maaari mong matuklasan? Tingnan ang `df.describe()` table upang makita ang pangkalahatang spread ng data points. +✅ Subukan ang iba't ibang datapoints (energy, loudness, speechiness) at mas marami o iba't ibang musical genres. Ano ang maaari mong matuklasan? Tingnan ang `df.describe()` table upang makita ang pangkalahatang spread ng data points. ### Ehersisyo - distribusyon ng data -Ang tatlong genre ba na ito ay makabuluhang naiiba sa perception ng kanilang danceability, batay sa kanilang popularity? +Ang tatlong genres ba na ito ay makabuluhang naiiba sa perception ng kanilang danceability, base sa kanilang popularity? -1. Suriin ang distribusyon ng data ng ating tatlong nangungunang genre para sa popularity at danceability sa isang ibinigay na x at y axis. +1. Suriin ang distribusyon ng data ng ating top three genres para sa popularity at danceability sa isang ibinigay na x at y axis. ```python sns.set_theme(style="ticks") @@ -303,9 +305,9 @@ Ang tatlong genre ba na ito ay makabuluhang naiiba sa perception ng kanilang dan > 🎓 Tandaan na ang halimbawang ito ay gumagamit ng isang KDE (Kernel Density Estimate) graph na kumakatawan sa data gamit ang isang tuloy-tuloy na probability density curve. Pinapayagan nito tayong ma-interpret ang data kapag nagtatrabaho sa maraming distribusyon. - Sa pangkalahatan, ang tatlong genre ay maluwag na nagkakatugma sa kanilang popularity at danceability. Ang pagtukoy ng clusters sa maluwag na data na ito ay magiging hamon: + Sa pangkalahatan, ang tatlong genres ay maluwag na nagkakatugma sa kanilang popularity at danceability. Ang pagtukoy ng clusters sa maluwag na data na ito ay magiging hamon: - ![distribution](../../../../translated_images/distribution.9be11df42356ca958dc8e06e87865e09d77cab78f94fe4fea8a1e6796c64dc4b.tl.png) + ![distribution](../../../../5-Clustering/1-Visualize/images/distribution.png) 1. Gumawa ng scatter plot: @@ -317,23 +319,23 @@ Ang tatlong genre ba na ito ay makabuluhang naiiba sa perception ng kanilang dan Ang scatterplot ng parehong axes ay nagpapakita ng katulad na pattern ng convergence - ![Facetgrid](../../../../translated_images/facetgrid.9b2e65ce707eba1f983b7cdfed5d952e60f385947afa3011df6e3cc7d200eb5b.tl.png) + ![Facetgrid](../../../../5-Clustering/1-Visualize/images/facetgrid.png) -Sa pangkalahatan, para sa clustering, maaari mong gamitin ang scatterplots upang ipakita ang clusters ng data, kaya ang pag-master ng ganitong uri ng visualization ay napaka-kapaki-pakinabang. Sa susunod na aralin, gagamitin natin ang filtered data na ito at gagamit ng k-means clustering upang matuklasan ang mga grupo sa data na ito na tila nag-o-overlap sa mga kawili-wiling paraan. +Sa pangkalahatan, para sa clustering, maaari mong gamitin ang scatterplots upang ipakita ang clusters ng data, kaya ang pag-master ng ganitong uri ng visualization ay napaka-kapaki-pakinabang. Sa susunod na aralin, gagamitin natin ang filtered data na ito at gagamit ng k-means clustering upang matuklasan ang mga grupo sa data na ito na tila nag-o-overlap sa mga interesanteng paraan. --- ## 🚀Hamunin -Bilang paghahanda para sa susunod na aralin, gumawa ng chart tungkol sa iba't ibang clustering algorithms na maaari mong matuklasan at gamitin sa isang production environment. Anong uri ng mga problema ang sinusubukang tugunan ng clustering? +Bilang paghahanda para sa susunod na aralin, gumawa ng chart tungkol sa iba't ibang clustering algorithms na maaari mong matuklasan at gamitin sa isang production environment. Anong mga uri ng problema ang sinusubukang tugunan ng clustering? -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/28/) +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) ## Review at Pag-aaral ng Sarili -Bago ka mag-apply ng clustering algorithms, tulad ng natutunan natin, magandang ideya na maunawaan ang kalikasan ng iyong dataset. Magbasa pa tungkol sa paksang ito [dito](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) +Bago ka mag-apply ng clustering algorithms, tulad ng natutunan natin, magandang ideya na maunawaan ang likas na katangian ng iyong dataset. Magbasa pa tungkol sa paksang ito [dito](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) -[Ang kapaki-pakinabang na artikulong ito](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) ay naglalakad sa iyo sa iba't ibang paraan kung paano kumikilos ang iba't ibang clustering algorithms, na ibinigay ang iba't ibang hugis ng data. +[Ang kapaki-pakinabang na artikulong ito](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) ay naglalakad sa iyo sa iba't ibang paraan kung paano kumikilos ang iba't ibang clustering algorithms, base sa iba't ibang hugis ng data. ## Takdang-Aralin diff --git a/translations/tl/5-Clustering/2-K-Means/README.md b/translations/tl/5-Clustering/2-K-Means/README.md index 3c3a4f2f..c9f7fd26 100644 --- a/translations/tl/5-Clustering/2-K-Means/README.md +++ b/translations/tl/5-Clustering/2-K-Means/README.md @@ -1,53 +1,53 @@ # K-Means clustering -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/29/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -Sa araling ito, matututuhan mo kung paano lumikha ng mga cluster gamit ang Scikit-learn at ang Nigerian music dataset na na-import mo noong nakaraan. Tatalakayin natin ang mga pangunahing kaalaman ng K-Means para sa Clustering. Tandaan na, tulad ng natutunan mo sa nakaraang aralin, maraming paraan upang magtrabaho gamit ang mga cluster at ang pamamaraan na gagamitin mo ay nakadepende sa iyong data. Susubukan natin ang K-Means dahil ito ang pinakakaraniwang clustering technique. Tara, simulan na natin! +Sa araling ito, matututunan mo kung paano gumawa ng mga cluster gamit ang Scikit-learn at ang dataset ng Nigerian music na na-import mo noong nakaraan. Tatalakayin natin ang mga pangunahing kaalaman ng K-Means para sa Clustering. Tandaan na, tulad ng natutunan mo sa nakaraang aralin, maraming paraan upang magtrabaho gamit ang mga cluster at ang pamamaraan na gagamitin mo ay nakadepende sa iyong data. Subukan natin ang K-Means dahil ito ang pinakakaraniwang clustering technique. Simulan na natin! -Mga terminong matututuhan mo: +Mga terminong matututunan mo: -- Silhouette scoring -- Elbow method -- Inertia -- Variance +- Silhouette scoring +- Elbow method +- Inertia +- Variance ## Panimula -Ang [K-Means Clustering](https://wikipedia.org/wiki/K-means_clustering) ay isang pamamaraan na nagmula sa larangan ng signal processing. Ginagamit ito upang hatiin at i-partition ang mga grupo ng data sa 'k' na mga cluster gamit ang serye ng mga obserbasyon. Ang bawat obserbasyon ay naglalayong i-grupo ang isang datapoint na pinakamalapit sa pinakamalapit na 'mean', o ang gitnang punto ng isang cluster. +Ang [K-Means Clustering](https://wikipedia.org/wiki/K-means_clustering) ay isang pamamaraan na nagmula sa larangan ng signal processing. Ginagamit ito upang hatiin at i-partition ang mga grupo ng data sa 'k' clusters gamit ang serye ng mga obserbasyon. Ang bawat obserbasyon ay naglalayong i-grupo ang isang datapoint sa pinakamalapit na 'mean', o ang sentro ng isang cluster. -Ang mga cluster ay maaaring makita bilang [Voronoi diagrams](https://wikipedia.org/wiki/Voronoi_diagram), na naglalaman ng isang punto (o 'seed') at ang kaukulang rehiyon nito. +Ang mga cluster ay maaaring i-visualize bilang [Voronoi diagrams](https://wikipedia.org/wiki/Voronoi_diagram), na naglalaman ng isang punto (o 'seed') at ang kaukulang rehiyon nito. -![voronoi diagram](../../../../translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.tl.png) +![voronoi diagram](../../../../5-Clustering/2-K-Means/images/voronoi.png) > infographic ni [Jen Looper](https://twitter.com/jenlooper) -Ang proseso ng K-Means clustering ay [isinasagawa sa tatlong hakbang](https://scikit-learn.org/stable/modules/clustering.html#k-means): +Ang proseso ng K-Means clustering ay [ginagawa sa tatlong hakbang](https://scikit-learn.org/stable/modules/clustering.html#k-means): -1. Pinipili ng algorithm ang k bilang dami ng mga sentro ng punto sa pamamagitan ng pag-sample mula sa dataset. Pagkatapos nito, inuulit nito ang mga sumusunod: +1. Ang algorithm ay pumipili ng k-bilang ng mga sentro ng punto sa pamamagitan ng pag-sample mula sa dataset. Pagkatapos nito, inuulit ang proseso: 1. Ina-assign ang bawat sample sa pinakamalapit na centroid. - 2. Lumilikha ng mga bagong centroid sa pamamagitan ng pagkuha ng mean value ng lahat ng sample na na-assign sa mga naunang centroid. - 3. Kinakalkula ang pagkakaiba sa pagitan ng mga bagong centroid at mga lumang centroid at inuulit ang proseso hanggang sa maging stable ang mga centroid. + 2. Gumagawa ng mga bagong centroid sa pamamagitan ng pagkuha ng mean value ng lahat ng sample na na-assign sa mga naunang centroid. + 3. Pagkatapos, kinakalkula ang pagkakaiba sa pagitan ng mga bagong centroid at lumang centroid at inuulit ang proseso hanggang sa maging stable ang mga centroid. -Isang kahinaan ng paggamit ng K-Means ay kailangan mong itakda ang 'k', na siyang bilang ng mga centroid. Sa kabutihang-palad, ang 'elbow method' ay tumutulong upang tantiyahin ang isang magandang panimulang halaga para sa 'k'. Susubukan mo ito sa ilang sandali. +Isang kahinaan ng paggamit ng K-Means ay kailangan mong tukuyin ang 'k', ang bilang ng mga centroid. Sa kabutihang-palad, ang 'elbow method' ay tumutulong upang tantyahin ang magandang panimulang halaga para sa 'k'. Subukan mo ito sa ilang sandali. -## Prerequisite +## Kinakailangan -Gagamitin mo ang [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/notebook.ipynb) file ng araling ito na naglalaman ng data import at paunang paglilinis na ginawa mo sa nakaraang aralin. +Magtrabaho ka sa file na [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/notebook.ipynb) na naglalaman ng data import at preliminary cleaning na ginawa mo sa nakaraang aralin. ## Ehersisyo - paghahanda -Simulan sa muling pagtingin sa data ng mga kanta. +Simulan sa pamamagitan ng muling pagtingin sa data ng mga kanta. -1. Gumawa ng boxplot sa pamamagitan ng pagtawag sa `boxplot()` para sa bawat column: +1. Gumawa ng boxplot, tawagin ang `boxplot()` para sa bawat column: ```python plt.figure(figsize=(20,20), dpi=200) @@ -89,13 +89,13 @@ Simulan sa muling pagtingin sa data ng mga kanta. sns.boxplot(x = 'release_date', data = df) ``` - Medyo maingay ang data na ito: sa pamamagitan ng pagmamasid sa bawat column bilang isang boxplot, makikita mo ang mga outlier. + Medyo maingay ang data na ito: sa pamamagitan ng pag-obserba sa bawat column bilang boxplot, makikita mo ang mga outlier. - ![outliers](../../../../translated_images/boxplots.8228c29dabd0f29227dd38624231a175f411f1d8d4d7c012cb770e00e4fdf8b6.tl.png) + ![outliers](../../../../5-Clustering/2-K-Means/images/boxplots.png) -Maaari mong suriin ang dataset at alisin ang mga outlier na ito, ngunit magiging mas kaunti ang data. +Maaari mong suriin ang dataset at alisin ang mga outlier na ito, ngunit magiging minimal ang data. -1. Sa ngayon, piliin kung aling mga column ang gagamitin mo para sa iyong clustering exercise. Pumili ng mga may magkatulad na saklaw at i-encode ang column na `artist_top_genre` bilang numeric data: +1. Sa ngayon, piliin kung aling mga column ang gagamitin mo para sa clustering exercise. Pumili ng mga may magkatulad na saklaw at i-encode ang column na `artist_top_genre` bilang numeric data: ```python from sklearn.preprocessing import LabelEncoder @@ -110,7 +110,7 @@ Maaari mong suriin ang dataset at alisin ang mga outlier na ito, ngunit magiging y = le.transform(y) ``` -1. Ngayon, kailangan mong pumili kung ilang cluster ang itatarget. Alam mong mayroong 3 genre ng kanta na nakuha natin mula sa dataset, kaya subukan natin ang 3: +1. Ngayon kailangan mong pumili kung ilang cluster ang targetin. Alam mo na mayroong 3 genre ng kanta na kinuha mula sa dataset, kaya subukan natin ang 3: ```python from sklearn.cluster import KMeans @@ -139,9 +139,9 @@ Makikita mo ang isang array na naka-print na may mga predicted cluster (0, 1, o ## Silhouette score -Maghanap ng silhouette score na mas malapit sa 1. Ang score na ito ay nag-iiba mula -1 hanggang 1, at kung ang score ay 1, ang cluster ay dense at maayos na hiwalay mula sa ibang mga cluster. Ang halaga na malapit sa 0 ay kumakatawan sa mga overlapping cluster na may mga sample na napakalapit sa decision boundary ng mga kalapit na cluster. [(Source)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam) +Hanapin ang silhouette score na mas malapit sa 1. Ang score na ito ay nag-iiba mula -1 hanggang 1, at kung ang score ay 1, ang cluster ay dense at mahusay na naihiwalay mula sa ibang mga cluster. Ang halaga na malapit sa 0 ay kumakatawan sa mga overlapping cluster na may mga sample na napakalapit sa decision boundary ng mga kalapit na cluster. [(Source)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam) -Ang ating score ay **.53**, kaya nasa gitna. Ipinapakita nito na ang ating data ay hindi masyadong angkop para sa ganitong uri ng clustering, ngunit magpatuloy tayo. +Ang score natin ay **.53**, kaya nasa gitna. Ipinapakita nito na ang data natin ay hindi masyadong angkop para sa ganitong uri ng clustering, ngunit magpatuloy tayo. ### Ehersisyo - gumawa ng modelo @@ -160,19 +160,19 @@ Ang ating score ay **.53**, kaya nasa gitna. Ipinapakita nito na ang ating data May ilang bahagi dito na nangangailangan ng paliwanag. - > 🎓 range: Ito ang mga iteration ng clustering process. + > 🎓 range: Ito ang mga iteration ng clustering process > 🎓 random_state: "Tinutukoy ang random number generation para sa centroid initialization." [Source](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans) - > 🎓 WCSS: "within-cluster sums of squares" na sumusukat sa squared average distance ng lahat ng mga punto sa loob ng isang cluster sa cluster centroid. [Source](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce). + > 🎓 WCSS: "within-cluster sums of squares" ay sumusukat sa squared average distance ng lahat ng mga punto sa loob ng isang cluster sa cluster centroid. [Source](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce). - > 🎓 Inertia: Sinusubukan ng K-Means algorithm na pumili ng mga centroid upang mabawasan ang 'inertia', "isang sukatan kung gaano ka-coherent ang mga cluster sa loob." [Source](https://scikit-learn.org/stable/modules/clustering.html). Ang halaga ay idinadagdag sa wcss variable sa bawat iteration. + > 🎓 Inertia: Ang K-Means algorithm ay sinusubukang pumili ng mga centroid upang mabawasan ang 'inertia', "isang sukatan kung gaano ka-coherent ang mga cluster sa loob." [Source](https://scikit-learn.org/stable/modules/clustering.html). Ang halaga ay idinadagdag sa wcss variable sa bawat iteration. > 🎓 k-means++: Sa [Scikit-learn](https://scikit-learn.org/stable/modules/clustering.html#k-means) maaari mong gamitin ang 'k-means++' optimization, na "nag-i-initialize ng mga centroid upang maging (karaniwang) malayo sa isa't isa, na nagreresulta sa mas magagandang resulta kaysa sa random initialization. ### Elbow method -Noong una, inakala mo na, dahil may 3 genre ng kanta kang tinarget, dapat kang pumili ng 3 cluster. Ngunit totoo ba ito? +Noong una, inakala mo na, dahil nag-target ka ng 3 genre ng kanta, dapat kang pumili ng 3 cluster. Ngunit tama ba iyon? 1. Gamitin ang 'elbow method' upang makasiguro. @@ -185,13 +185,13 @@ Noong una, inakala mo na, dahil may 3 genre ng kanta kang tinarget, dapat kang p plt.show() ``` - Gamitin ang `wcss` variable na ginawa mo sa nakaraang hakbang upang lumikha ng isang chart na nagpapakita kung saan ang 'bend' sa elbow, na nagpapahiwatig ng pinakamainam na bilang ng mga cluster. Marahil nga ay **3** ito! + Gamitin ang `wcss` variable na ginawa mo sa nakaraang hakbang upang gumawa ng chart na nagpapakita kung saan ang 'bend' sa elbow, na nagpapahiwatig ng optimum na bilang ng mga cluster. Marahil ay **3** nga! - ![elbow method](../../../../translated_images/elbow.72676169eed744ff03677e71334a16c6b8f751e9e716e3d7f40dd7cdef674cca.tl.png) + ![elbow method](../../../../5-Clustering/2-K-Means/images/elbow.png) ## Ehersisyo - ipakita ang mga cluster -1. Subukan muli ang proseso, sa pagkakataong ito ay itakda ang tatlong cluster, at ipakita ang mga cluster bilang isang scatterplot: +1. Subukan muli ang proseso, sa pagkakataong ito ay mag-set ng tatlong cluster, at ipakita ang mga cluster bilang scatterplot: ```python from sklearn.cluster import KMeans @@ -204,7 +204,7 @@ Noong una, inakala mo na, dahil may 3 genre ng kanta kang tinarget, dapat kang p plt.show() ``` -1. Suriin ang katumpakan ng modelo: +1. Suriin ang accuracy ng modelo: ```python labels = kmeans.labels_ @@ -216,22 +216,22 @@ Noong una, inakala mo na, dahil may 3 genre ng kanta kang tinarget, dapat kang p print('Accuracy score: {0:0.2f}'. format(correct_labels/float(y.size))) ``` - Ang katumpakan ng modelong ito ay hindi masyadong maganda, at ang hugis ng mga cluster ay nagbibigay ng pahiwatig kung bakit. + Hindi masyadong maganda ang accuracy ng modelong ito, at ang hugis ng mga cluster ay nagbibigay ng pahiwatig kung bakit. - ![clusters](../../../../translated_images/clusters.b635354640d8e4fd4a49ef545495518e7be76172c97c13bd748f5b79f171f69a.tl.png) + ![clusters](../../../../5-Clustering/2-K-Means/images/clusters.png) - Ang data na ito ay masyadong hindi balanse, masyadong kaunti ang correlation, at masyadong malaki ang variance sa pagitan ng mga halaga ng column upang ma-cluster nang maayos. Sa katunayan, ang mga cluster na nabuo ay malamang na malaki ang impluwensya o skewed ng tatlong kategorya ng genre na tinukoy natin sa itaas. Isang proseso ng pagkatuto ito! + Ang data na ito ay masyadong imbalanced, masyadong kaunti ang correlation, at masyadong malaki ang variance sa pagitan ng mga column values upang ma-cluster nang maayos. Sa katunayan, ang mga cluster na nabuo ay malamang na malaki ang impluwensya o skewed ng tatlong genre categories na tinukoy natin sa itaas. Isa itong proseso ng pagkatuto! - Sa dokumentasyon ng Scikit-learn, makikita mo na ang isang modelo tulad nito, na may mga cluster na hindi masyadong malinaw ang pagkakahiwalay, ay may problema sa 'variance': + Sa dokumentasyon ng Scikit-learn, makikita mo na ang isang modelo tulad nito, na may mga cluster na hindi masyadong mahusay na naihiwalay, ay may problema sa 'variance': - ![problem models](../../../../translated_images/problems.f7fb539ccd80608e1f35c319cf5e3ad1809faa3c08537aead8018c6b5ba2e33a.tl.png) + ![problem models](../../../../5-Clustering/2-K-Means/images/problems.png) > Infographic mula sa Scikit-learn ## Variance -Ang variance ay tinutukoy bilang "ang average ng mga squared differences mula sa Mean" [(Source)](https://www.mathsisfun.com/data/standard-deviation.html). Sa konteksto ng problemang ito sa clustering, tumutukoy ito sa data kung saan ang mga numero ng ating dataset ay may tendensiyang lumihis nang sobra mula sa mean. +Ang variance ay tinutukoy bilang "ang average ng squared differences mula sa Mean" [(Source)](https://www.mathsisfun.com/data/standard-deviation.html). Sa konteksto ng clustering problem na ito, tumutukoy ito sa data kung saan ang mga numero ng dataset natin ay may tendensiyang lumayo nang masyado mula sa mean. -✅ Ito ay isang magandang pagkakataon upang pag-isipan ang lahat ng paraan upang maitama ang isyung ito. Ayusin pa ang data? Gumamit ng ibang mga column? Gumamit ng ibang algorithm? Pahiwatig: Subukang [i-scale ang iyong data](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) upang i-normalize ito at subukan ang ibang mga column. +✅ Ito ay isang magandang pagkakataon upang pag-isipan ang lahat ng paraan kung paano mo maaayos ang isyung ito. Ayusin pa ang data? Gumamit ng ibang mga column? Gumamit ng ibang algorithm? Hint: Subukan ang [scaling ng iyong data](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) upang i-normalize ito at subukan ang ibang mga column. > Subukan ang '[variance calculator](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)' upang mas maunawaan ang konsepto. @@ -239,19 +239,19 @@ Ang variance ay tinutukoy bilang "ang average ng mga squared differences mula sa ## 🚀Hamunin -Maglaan ng oras sa notebook na ito, at ayusin ang mga parameter. Mapapabuti mo ba ang katumpakan ng modelo sa pamamagitan ng mas maayos na paglilinis ng data (halimbawa, pag-aalis ng mga outlier)? Maaari kang gumamit ng weights upang bigyan ng mas malaking timbang ang ilang data samples. Ano pa ang maaari mong gawin upang makabuo ng mas magagandang cluster? +Maglaan ng oras sa notebook na ito, i-tweak ang mga parameter. Mapapabuti mo ba ang accuracy ng modelo sa pamamagitan ng mas maayos na paglilinis ng data (halimbawa, pag-aalis ng mga outlier)? Maaari kang gumamit ng weights upang magbigay ng mas malaking timbang sa ilang data samples. Ano pa ang magagawa mo upang makagawa ng mas magagandang cluster? -Pahiwatig: Subukang i-scale ang iyong data. Mayroong naka-comment na code sa notebook na nagdadagdag ng standard scaling upang gawing mas magkahawig ang mga column ng data sa isa't isa sa mga tuntunin ng saklaw. Mapapansin mo na habang bumababa ang silhouette score, ang 'kink' sa elbow graph ay nagiging mas maayos. Ito ay dahil ang hindi pag-scale ng data ay nagpapahintulot sa data na may mas kaunting variance na magkaroon ng mas malaking timbang. Basahin pa ang tungkol sa problemang ito [dito](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226). +Hint: Subukan ang pag-scale ng iyong data. Mayroong commented code sa notebook na nagdadagdag ng standard scaling upang gawing mas magkatulad ang mga column ng data sa isa't isa sa mga tuntunin ng saklaw. Mapapansin mo na habang bumababa ang silhouette score, ang 'kink' sa elbow graph ay nagiging mas maayos. Ito ay dahil ang hindi pag-scale ng data ay nagpapahintulot sa data na may mas kaunting variance na magkaroon ng mas malaking timbang. Basahin pa ang tungkol sa problemang ito [dito](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226). -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/30/) +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) ## Review at Pag-aaral sa Sarili -Tingnan ang isang K-Means Simulator [tulad nito](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). Maaari mong gamitin ang tool na ito upang makita ang mga sample data points at matukoy ang mga centroid nito. Maaari mong i-edit ang randomness ng data, bilang ng mga cluster, at bilang ng mga centroid. Nakakatulong ba ito upang magkaroon ka ng ideya kung paano maaaring i-grupo ang data? +Tingnan ang isang K-Means Simulator [tulad nito](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). Maaari mong gamitin ang tool na ito upang i-visualize ang mga sample data points at tukuyin ang mga centroid nito. Maaari mong i-edit ang randomness ng data, bilang ng mga cluster, at bilang ng mga centroid. Nakakatulong ba ito upang magkaroon ka ng ideya kung paano maaaring i-grupo ang data? Tingnan din ang [handout na ito tungkol sa K-Means](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) mula sa Stanford. -## Takdang Aralin +## Takdang-Aralin [Subukan ang iba't ibang clustering methods](assignment.md) diff --git a/translations/tl/6-NLP/1-Introduction-to-NLP/README.md b/translations/tl/6-NLP/1-Introduction-to-NLP/README.md index a50880b2..6c3ed247 100644 --- a/translations/tl/6-NLP/1-Introduction-to-NLP/README.md +++ b/translations/tl/6-NLP/1-Introduction-to-NLP/README.md @@ -1,8 +1,8 @@ -# Mga Karaniwang Gawain at Teknik sa Natural Language Processing +# Karaniwang mga gawain at teknika sa natural language processing -Para sa karamihan ng mga gawain sa *natural language processing* (NLP), kailangang hatiin, suriin, at itala ang teksto o i-cross reference ito gamit ang mga patakaran at data set. Ang mga gawaing ito ay nagbibigay-daan sa programmer na maunawaan ang _kahulugan_, _layunin_, o kahit ang _dalas_ ng mga salita at termino sa isang teksto. +Para sa karamihan ng mga gawain sa *natural language processing*, ang teksto na kailangang iproseso ay kailangang hatiin, suriin, at ang mga resulta ay itabi o i-cross reference gamit ang mga patakaran at data set. Ang mga gawaing ito ay nagbibigay-daan sa programmer na matukoy ang _kahulugan_, _layunin_, o kahit ang _dalas_ ng mga termino at salita sa isang teksto. -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/33/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -Tuklasin natin ang mga karaniwang teknik na ginagamit sa pagproseso ng teksto. Kapag pinagsama sa machine learning, ang mga teknik na ito ay tumutulong sa iyo na masuri ang malaking dami ng teksto nang mas episyente. Gayunpaman, bago gamitin ang ML sa mga gawaing ito, unawain muna natin ang mga problemang kinakaharap ng isang NLP specialist. +Tuklasin natin ang mga karaniwang teknika na ginagamit sa pagproseso ng teksto. Kapag pinagsama sa machine learning, ang mga teknika na ito ay tumutulong sa iyo na suriin ang malaking dami ng teksto nang mas epektibo. Bago gamitin ang ML sa mga gawaing ito, gayunpaman, unawain muna natin ang mga problemang kinakaharap ng isang NLP specialist. -## Mga Karaniwang Gawain sa NLP +## Mga karaniwang gawain sa NLP -May iba't ibang paraan upang suriin ang isang teksto na iyong pinagtatrabahuhan. May mga gawain kang maaaring isagawa, at sa pamamagitan ng mga gawaing ito, nagkakaroon ka ng mas malalim na pag-unawa sa teksto at nakakapagbuo ng mga konklusyon. Karaniwan, isinasagawa ang mga gawaing ito nang sunud-sunod. +May iba't ibang paraan upang suriin ang teksto na iyong pinagtatrabahuhan. May mga gawain na maaari mong isagawa, at sa pamamagitan ng mga gawaing ito, makakakuha ka ng mas malalim na pag-unawa sa teksto at makakagawa ng mga konklusyon. Karaniwan, isinasagawa mo ang mga gawaing ito nang sunud-sunod. ### Tokenization -Ang unang hakbang na karaniwang ginagawa ng karamihan sa mga NLP algorithm ay ang paghahati ng teksto sa mga token o salita. Bagama't mukhang simple ito, ang pagsasaalang-alang sa mga bantas at iba't ibang delimiters ng salita at pangungusap sa iba't ibang wika ay maaaring maging mahirap. Maaaring kailanganin mong gumamit ng iba't ibang paraan upang matukoy ang mga hangganan. +Marahil ang unang bagay na kailangang gawin ng karamihan sa mga NLP algorithm ay hatiin ang teksto sa mga token, o mga salita. Bagama't mukhang simple ito, ang pagsasaalang-alang sa mga bantas at iba't ibang delimiters ng salita at pangungusap sa iba't ibang wika ay maaaring maging mahirap. Maaaring kailanganin mong gumamit ng iba't ibang mga pamamaraan upang matukoy ang mga hangganan. -![tokenization](../../../../translated_images/tokenization.1641a160c66cd2d93d4524e8114e93158a9ce0eba3ecf117bae318e8a6ad3487.tl.png) +![tokenization](../../../../6-NLP/2-Tasks/images/tokenization.png) > Tokenizing ng isang pangungusap mula sa **Pride and Prejudice**. Infographic ni [Jen Looper](https://twitter.com/jenlooper) ### Embeddings -Ang [Word embeddings](https://wikipedia.org/wiki/Word_embedding) ay isang paraan upang gawing numerikal ang iyong data ng teksto. Ginagawa ang embeddings sa paraang ang mga salitang may magkatulad na kahulugan o madalas gamitin nang magkasama ay nagkakaroon ng clustering. +[Word embeddings](https://wikipedia.org/wiki/Word_embedding) ay isang paraan upang gawing numerikal ang iyong data ng teksto. Ginagawa ang embeddings sa paraang ang mga salitang may magkatulad na kahulugan o mga salitang madalas gamitin nang magkasama ay nagkakagrupo. -![word embeddings](../../../../translated_images/embedding.2cf8953c4b3101d188c2f61a5de5b6f53caaa5ad4ed99236d42bc3b6bd6a1fe2.tl.png) +![word embeddings](../../../../6-NLP/2-Tasks/images/embedding.png) > "I have the highest respect for your nerves, they are my old friends." - Word embeddings para sa isang pangungusap sa **Pride and Prejudice**. Infographic ni [Jen Looper](https://twitter.com/jenlooper) -✅ Subukan ang [kawili-wiling tool na ito](https://projector.tensorflow.org/) upang mag-eksperimento sa word embeddings. Ang pag-click sa isang salita ay nagpapakita ng mga cluster ng magkatulad na salita: 'toy' ay nagkakaroon ng cluster kasama ang 'disney', 'lego', 'playstation', at 'console'. +✅ Subukan ang [kagiliw-giliw na tool na ito](https://projector.tensorflow.org/) upang mag-eksperimento sa word embeddings. Ang pag-click sa isang salita ay nagpapakita ng mga grupo ng magkatulad na salita: 'toy' ay nagkakagrupo sa 'disney', 'lego', 'playstation', at 'console'. -### Parsing at Part-of-speech Tagging +### Parsing & Part-of-speech Tagging -Ang bawat salitang na-tokenize ay maaaring i-tag bilang bahagi ng pananalita - tulad ng pangngalan, pandiwa, o pang-uri. Ang pangungusap na `the quick red fox jumped over the lazy brown dog` ay maaaring i-POS tag bilang fox = pangngalan, jumped = pandiwa. +Ang bawat salita na na-tokenize ay maaaring i-tag bilang bahagi ng pananalita - isang pangngalan, pandiwa, o pang-uri. Ang pangungusap na `the quick red fox jumped over the lazy brown dog` ay maaaring POS tagged bilang fox = pangngalan, jumped = pandiwa. -![parsing](../../../../translated_images/parse.d0c5bbe1106eae8fe7d60a183cd1736c8b6cec907f38000366535f84f3036101.tl.png) +![parsing](../../../../6-NLP/2-Tasks/images/parse.png) > Parsing ng isang pangungusap mula sa **Pride and Prejudice**. Infographic ni [Jen Looper](https://twitter.com/jenlooper) -Ang parsing ay ang pagkilala kung aling mga salita ang magkakaugnay sa isang pangungusap - halimbawa, ang `the quick red fox jumped` ay isang adjective-noun-verb sequence na hiwalay sa `lazy brown dog` sequence. +Ang parsing ay ang pagkilala kung aling mga salita ang magkakaugnay sa isang pangungusap - halimbawa, `the quick red fox jumped` ay isang adjective-noun-verb sequence na hiwalay sa `lazy brown dog` sequence. ### Dalas ng Salita at Parirala -Isang kapaki-pakinabang na proseso kapag sinusuri ang malaking dami ng teksto ay ang paggawa ng diksyunaryo ng bawat salita o parirala ng interes at kung gaano ito kadalas lumitaw. Ang pariralang `the quick red fox jumped over the lazy brown dog` ay may word frequency na 2 para sa "the." +Isang kapaki-pakinabang na pamamaraan kapag sinusuri ang malaking dami ng teksto ay ang paggawa ng isang diksyunaryo ng bawat salita o parirala ng interes at kung gaano kadalas ito lumalabas. Ang parirala na `the quick red fox jumped over the lazy brown dog` ay may word frequency na 2 para sa the. -Tingnan natin ang isang halimbawa ng teksto kung saan binibilang natin ang dalas ng mga salita. Ang tula ni Rudyard Kipling na "The Winners" ay naglalaman ng sumusunod na taludtod: +Tingnan natin ang isang halimbawa ng teksto kung saan binibilang natin ang dalas ng mga salita. Ang tula ni Rudyard Kipling na The Winners ay naglalaman ng sumusunod na taludtod: ```output What the moral? Who rides may read. @@ -60,34 +60,34 @@ Down to Gehenna or up to the Throne, He travels the fastest who travels alone. ``` -Dahil ang dalas ng parirala ay maaaring case insensitive o case sensitive depende sa pangangailangan, ang pariralang `a friend` ay may dalas na 2, ang `the` ay may dalas na 6, at ang `travels` ay 2. +Dahil ang dalas ng parirala ay maaaring case insensitive o case sensitive depende sa pangangailangan, ang parirala na `a friend` ay may dalas na 2, `the` ay may dalas na 6, at `travels` ay 2. ### N-grams -Ang isang teksto ay maaaring hatiin sa mga sunod-sunod na salita na may nakatakdang haba: isang salita (unigram), dalawang salita (bigram), tatlong salita (trigram), o anumang bilang ng salita (n-grams). +Ang isang teksto ay maaaring hatiin sa mga sequence ng mga salita na may nakatakdang haba, isang salita (unigram), dalawang salita (bigrams), tatlong salita (trigrams), o anumang bilang ng mga salita (n-grams). Halimbawa, ang `the quick red fox jumped over the lazy brown dog` na may n-gram score na 2 ay nagbubunga ng sumusunod na n-grams: -1. the quick -2. quick red -3. red fox -4. fox jumped -5. jumped over -6. over the -7. the lazy -8. lazy brown -9. brown dog - -Mas madaling ma-visualize ito bilang isang sliding box sa pangungusap. Narito ito para sa n-grams ng 3 salita, ang n-gram ay naka-bold sa bawat pangungusap: - -1. **the quick red** fox jumped over the lazy brown dog -2. the **quick red fox** jumped over the lazy brown dog -3. the quick **red fox jumped** over the lazy brown dog -4. the quick red **fox jumped over** the lazy brown dog -5. the quick red fox **jumped over the** lazy brown dog -6. the quick red fox jumped **over the lazy** brown dog -7. the quick red fox jumped over **the lazy brown** dog -8. the quick red fox jumped over the **lazy brown dog** +1. the quick +2. quick red +3. red fox +4. fox jumped +5. jumped over +6. over the +7. the lazy +8. lazy brown +9. brown dog + +Mas madali itong ma-visualize bilang isang sliding box sa pangungusap. Narito ito para sa n-grams ng 3 salita, ang n-gram ay naka-bold sa bawat pangungusap: + +1. **the quick red** fox jumped over the lazy brown dog +2. the **quick red fox** jumped over the lazy brown dog +3. the quick **red fox jumped** over the lazy brown dog +4. the quick red **fox jumped over** the lazy brown dog +5. the quick red fox **jumped over the** lazy brown dog +6. the quick red fox jumped **over the lazy** brown dog +7. the quick red fox jumped over **the lazy brown** dog +8. the quick red fox jumped over the **lazy brown dog** ![n-grams sliding window](../../../../6-NLP/2-Tasks/images/n-grams.gif) @@ -95,7 +95,7 @@ Mas madaling ma-visualize ito bilang isang sliding box sa pangungusap. Narito it ### Pagkuha ng Noun Phrase -Sa karamihan ng mga pangungusap, mayroong pangngalan na siyang paksa o layon ng pangungusap. Sa Ingles, madalas itong makikilala sa pagkakaroon ng 'a', 'an', o 'the' bago ito. Ang pagkilala sa paksa o layon ng isang pangungusap sa pamamagitan ng 'pagkuha ng noun phrase' ay isang karaniwang gawain sa NLP kapag sinusubukang unawain ang kahulugan ng isang pangungusap. +Sa karamihan ng mga pangungusap, mayroong pangngalan na siyang paksa o layunin ng pangungusap. Sa Ingles, madalas itong makikilala bilang may 'a', 'an', o 'the' sa unahan nito. Ang pagkilala sa paksa o layunin ng isang pangungusap sa pamamagitan ng 'pagkuha ng noun phrase' ay isang karaniwang gawain sa NLP kapag sinusubukang unawain ang kahulugan ng isang pangungusap. ✅ Sa pangungusap na "I cannot fix on the hour, or the spot, or the look or the words, which laid the foundation. It is too long ago. I was in the middle before I knew that I had begun.", kaya mo bang tukuyin ang mga noun phrases? @@ -103,35 +103,35 @@ Sa pangungusap na `the quick red fox jumped over the lazy brown dog` mayroong 2 ### Sentiment Analysis -Ang isang pangungusap o teksto ay maaaring suriin para sa damdamin, o kung gaano ito *positibo* o *negatibo*. Ang damdamin ay sinusukat sa *polarity* at *objectivity/subjectivity*. Ang polarity ay sinusukat mula -1.0 hanggang 1.0 (negatibo hanggang positibo) at 0.0 hanggang 1.0 (pinaka-objective hanggang pinaka-subjective). +Ang isang pangungusap o teksto ay maaaring suriin para sa sentiment, o kung gaano *positibo* o *negatibo* ito. Ang sentiment ay sinusukat sa *polarity* at *objectivity/subjectivity*. Ang polarity ay sinusukat mula -1.0 hanggang 1.0 (negatibo hanggang positibo) at 0.0 hanggang 1.0 (pinaka-objective hanggang pinaka-subjective). -✅ Sa susunod, malalaman mo na may iba't ibang paraan upang matukoy ang damdamin gamit ang machine learning, ngunit isang paraan ay ang pagkakaroon ng listahan ng mga salita at parirala na inuri bilang positibo o negatibo ng isang eksperto at ilapat ang modelong iyon sa teksto upang makalkula ang polarity score. Nakikita mo ba kung paano ito gumagana sa ilang pagkakataon at hindi sa iba? +✅ Sa susunod, matututunan mo na may iba't ibang paraan upang matukoy ang sentiment gamit ang machine learning, ngunit ang isang paraan ay ang pagkakaroon ng listahan ng mga salita at parirala na ikinategorya bilang positibo o negatibo ng isang human expert at ilapat ang modelong iyon sa teksto upang kalkulahin ang polarity score. Nakikita mo ba kung paano ito gumagana sa ilang mga sitwasyon at hindi gaano sa iba? ### Inflection -Ang inflection ay nagbibigay-daan sa iyo na kunin ang isahan o maramihan ng isang salita. +Ang inflection ay nagbibigay-daan sa iyo na kunin ang singular o plural na anyo ng isang salita. ### Lemmatization -Ang *lemma* ay ang ugat o pangunahing salita para sa isang hanay ng mga salita, halimbawa, ang *flew*, *flies*, *flying* ay may lemma na pandiwang *fly*. +Ang *lemma* ay ang ugat o pangunahing salita para sa isang set ng mga salita, halimbawa *flew*, *flies*, *flying* ay may lemma na pandiwa *fly*. Mayroon ding mga kapaki-pakinabang na database na magagamit para sa mga mananaliksik ng NLP, partikular: ### WordNet -Ang [WordNet](https://wordnet.princeton.edu/) ay isang database ng mga salita, kasingkahulugan, kasalungat, at maraming iba pang detalye para sa bawat salita sa iba't ibang wika. Napakakapal nito sa mga pagsasalin, spell checker, o anumang uri ng mga tool sa wika. +[WordNet](https://wordnet.princeton.edu/) ay isang database ng mga salita, kasingkahulugan, kasalungat, at maraming iba pang detalye para sa bawat salita sa iba't ibang wika. Ito ay lubos na kapaki-pakinabang kapag sinusubukang bumuo ng mga pagsasalin, spell checkers, o anumang uri ng mga tool sa wika. ## Mga Aklatan ng NLP -Sa kabutihang palad, hindi mo kailangang buuin ang lahat ng mga teknik na ito mula sa simula, dahil may mga mahusay na Python libraries na magagamit na ginagawang mas madali para sa mga developer na hindi dalubhasa sa natural language processing o machine learning. Ang mga susunod na aralin ay may higit pang mga halimbawa ng mga ito, ngunit dito ay matututo ka ng ilang kapaki-pakinabang na halimbawa upang matulungan ka sa susunod na gawain. +Sa kabutihang-palad, hindi mo kailangang bumuo ng lahat ng mga teknika na ito nang mag-isa, dahil mayroong mahusay na mga Python library na magagamit na ginagawang mas naa-access ang NLP sa mga developer na hindi dalubhasa sa natural language processing o machine learning. Ang mga susunod na aralin ay naglalaman ng mas maraming halimbawa ng mga ito, ngunit dito ay matututunan mo ang ilang kapaki-pakinabang na halimbawa upang matulungan ka sa susunod na gawain. -### Ehersisyo - gamit ang `TextBlob` library +### Ehersisyo - paggamit ng `TextBlob` library -Gamitin natin ang isang library na tinatawag na TextBlob dahil naglalaman ito ng mga kapaki-pakinabang na API para sa pagharap sa mga ganitong uri ng gawain. Ang TextBlob ay "nakatayo sa malalaking balikat ng [NLTK](https://nltk.org) at [pattern](https://github.com/clips/pattern), at mahusay na nakikipag-ugnayan sa pareho." Mayroon itong malaking dami ng ML na naka-embed sa API nito. +Gamitin natin ang isang library na tinatawag na TextBlob dahil naglalaman ito ng mga kapaki-pakinabang na API para sa pagharap sa ganitong uri ng mga gawain. Ang TextBlob "ay nakatayo sa malalaking balikat ng [NLTK](https://nltk.org) at [pattern](https://github.com/clips/pattern), at mahusay na nakikipaglaro sa pareho." Mayroon itong malaking dami ng ML na naka-embed sa API nito. -> Tandaan: Isang kapaki-pakinabang na [Quick Start](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) na gabay ay magagamit para sa TextBlob na inirerekomenda para sa mga bihasang Python developer. +> Tandaan: Isang kapaki-pakinabang na [Quick Start](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) guide ay magagamit para sa TextBlob na inirerekomenda para sa mga may karanasan na Python developer. -Kapag sinusubukang tukuyin ang *noun phrases*, nag-aalok ang TextBlob ng ilang mga opsyon ng extractors upang mahanap ang mga noun phrases. +Kapag sinusubukang tukuyin ang *noun phrases*, ang TextBlob ay nag-aalok ng ilang mga opsyon ng extractors upang makahanap ng noun phrases. 1. Tingnan ang `ConllExtractor`. @@ -147,24 +147,24 @@ Kapag sinusubukang tukuyin ang *noun phrases*, nag-aalok ang TextBlob ng ilang m np = user_input_blob.noun_phrases ``` - > Ano ang nangyayari dito? Ang [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) ay "isang noun phrase extractor na gumagamit ng chunk parsing na sinanay gamit ang ConLL-2000 training corpus." Ang ConLL-2000 ay tumutukoy sa 2000 Conference on Computational Natural Language Learning. Bawat taon, ang kumperensya ay nagho-host ng workshop upang harapin ang isang mahirap na problema sa NLP, at noong 2000 ito ay noun chunking. Ang isang modelo ay sinanay sa Wall Street Journal, gamit ang "mga seksyon 15-18 bilang training data (211727 tokens) at seksyon 20 bilang test data (47377 tokens)". Maaari mong tingnan ang mga pamamaraan na ginamit [dito](https://www.clips.uantwerpen.be/conll2000/chunking/) at ang [mga resulta](https://ifarm.nl/erikt/research/np-chunking.html). + > Ano ang nangyayari dito? Ang [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) ay "isang noun phrase extractor na gumagamit ng chunk parsing na sinanay gamit ang ConLL-2000 training corpus." Ang ConLL-2000 ay tumutukoy sa 2000 Conference on Computational Natural Language Learning. Bawat taon ang kumperensya ay nagho-host ng workshop upang harapin ang isang mahirap na problema sa NLP, at noong 2000 ito ay noun chunking. Ang isang modelo ay sinanay sa Wall Street Journal, gamit ang "sections 15-18 bilang training data (211727 tokens) at section 20 bilang test data (47377 tokens)". Maaari mong tingnan ang mga pamamaraan na ginamit [dito](https://www.clips.uantwerpen.be/conll2000/chunking/) at ang [mga resulta](https://ifarm.nl/erikt/research/np-chunking.html). ### Hamon - pagpapabuti ng iyong bot gamit ang NLP -Sa nakaraang aralin, gumawa ka ng isang napakasimpleng Q&A bot. Ngayon, gagawin mong mas "sympathetic" si Marvin sa pamamagitan ng pagsusuri sa iyong input para sa damdamin at pag-print ng tugon na tumutugma sa damdamin. Kailangan mo ring tukuyin ang isang `noun_phrase` at magtanong tungkol dito. +Sa nakaraang aralin, gumawa ka ng isang napakasimpleng Q&A bot. Ngayon, gagawin mong mas simpatetiko si Marvin sa pamamagitan ng pagsusuri sa iyong input para sa sentiment at pag-print ng tugon na tumutugma sa sentiment. Kailangan mo ring tukuyin ang isang `noun_phrase` at magtanong tungkol dito. Ang iyong mga hakbang sa paggawa ng mas mahusay na conversational bot: -1. Mag-print ng mga tagubilin na nagpapayo sa user kung paano makipag-ugnayan sa bot -2. Simulan ang loop - 1. Tanggapin ang input ng user - 2. Kung ang user ay humiling na lumabas, pagkatapos ay lumabas - 3. Iproseso ang input ng user at tukuyin ang angkop na tugon sa damdamin - 4. Kung may natukoy na noun phrase sa damdamin, gawing maramihan ito at magtanong ng higit pang input tungkol sa paksang iyon - 5. I-print ang tugon -3. Bumalik sa hakbang 2 +1. Mag-print ng mga tagubilin na nagpapayo sa user kung paano makipag-ugnayan sa bot +2. Simulan ang loop + 1. Tanggapin ang input ng user + 2. Kung ang user ay humiling na mag-exit, mag-exit + 3. Proseso ang input ng user at tukuyin ang naaangkop na sentiment response + 4. Kung may natukoy na noun phrase sa sentiment, gawing plural ito at magtanong ng karagdagang input tungkol sa paksa + 5. Mag-print ng tugon +3. Bumalik sa hakbang 2 -Narito ang code snippet upang tukuyin ang damdamin gamit ang TextBlob. Tandaan na may apat na *gradients* lamang ng tugon sa damdamin (maaari kang magkaroon ng higit pa kung nais mo): +Narito ang code snippet upang tukuyin ang sentiment gamit ang TextBlob. Tandaan na mayroong apat na *gradients* ng sentiment response (maaari kang magkaroon ng higit pa kung nais mo): ```python if user_input_blob.polarity <= -0.5: @@ -177,7 +177,7 @@ elif user_input_blob.polarity <= 1: response = "Wow, that sounds great. " ``` -Narito ang ilang sample output bilang gabay (ang input ng user ay nasa mga linyang nagsisimula sa >): +Narito ang ilang sample output upang gabayan ka (ang input ng user ay nasa mga linya na nagsisimula sa >): ```output Hello, I am Marvin, the friendly robot. @@ -198,31 +198,31 @@ It was nice talking to you, goodbye! Ang isang posibleng solusyon sa gawain ay [dito](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/2-Tasks/solution/bot.py) -✅ Pagsusuri ng Kaalaman +✅ Knowledge Check -1. Sa tingin mo ba ang mga "sympathetic" na tugon ay maaaring 'lokohin' ang isang tao na isipin na ang bot ay talagang nauunawaan sila? -2. Ginagawa bang mas 'kapani-paniwala' ng pagtukoy sa noun phrase ang bot? -3. Bakit magiging kapaki-pakinabang ang pagkuha ng 'noun phrase' mula sa isang pangungusap? +1. Sa tingin mo ba ang mga simpatetikong tugon ay maaaring 'lokohin' ang isang tao na isipin na talagang naiintindihan sila ng bot? +2. Ang pagkilala ba sa noun phrase ay nagpapaganda sa bot na maging 'kapani-paniwala'? +3. Bakit kapaki-pakinabang ang pagkuha ng 'noun phrase' mula sa isang pangungusap? --- -Ipatupad ang bot sa nakaraang pagsusuri ng kaalaman at subukan ito sa isang kaibigan. Maloloko ba sila nito? Kaya mo bang gawing mas 'kapani-paniwala' ang iyong bot? +Ipatupad ang bot sa nakaraang knowledge check at subukan ito sa isang kaibigan. Kaya ba nitong lokohin sila? Kaya mo bang gawing mas 'kapani-paniwala' ang iyong bot? ## 🚀Hamon -Kunin ang isang gawain sa nakaraang pagsusuri ng kaalaman at subukang ipatupad ito. Subukan ang bot sa isang kaibigan. Maloloko ba sila nito? Kaya mo bang gawing mas 'kapani-paniwala' ang iyong bot? +Kunin ang isang gawain sa nakaraang knowledge check at subukang ipatupad ito. Subukan ang bot sa isang kaibigan. Kaya ba nitong lokohin sila? Kaya mo bang gawing mas 'kapani-paniwala' ang iyong bot? -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/34/) +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -## Pagsusuri at Pag-aaral sa Sarili +## Review & Self Study -Sa mga susunod na aralin, matututo ka pa tungkol sa sentiment analysis. Mag-research tungkol sa kawili-wiling teknik na ito sa mga artikulo tulad ng mga nasa [KDNuggets](https://www.kdnuggets.com/tag/nlp) +Sa mga susunod na aralin, matututunan mo pa ang tungkol sa sentiment analysis. Mag-research sa kagiliw-giliw na teknik na ito sa mga artikulo tulad ng mga nasa [KDNuggets](https://www.kdnuggets.com/tag/nlp) -## Takdang Aralin +## Takdang Aralin [Pag-usapan ang bot](assignment.md) --- **Paunawa**: -Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file +Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file diff --git a/translations/tl/6-NLP/3-Translation-Sentiment/README.md b/translations/tl/6-NLP/3-Translation-Sentiment/README.md index 9492b0b3..30cd5ff8 100644 --- a/translations/tl/6-NLP/3-Translation-Sentiment/README.md +++ b/translations/tl/6-NLP/3-Translation-Sentiment/README.md @@ -1,68 +1,68 @@ -# Pagsasalin at pagsusuri ng damdamin gamit ang ML +# Pagsasalin at Sentiment Analysis gamit ang ML -Sa mga nakaraang aralin, natutunan mo kung paano gumawa ng isang simpleng bot gamit ang `TextBlob`, isang library na gumagamit ng ML sa likod ng eksena upang magsagawa ng mga pangunahing gawain sa NLP tulad ng pagkuha ng mga parirala ng pangngalan. Isa pang mahalagang hamon sa computational linguistics ay ang tumpak na _pagsasalin_ ng isang pangungusap mula sa isang wika patungo sa isa pa. +Sa mga nakaraang aralin, natutunan mo kung paano bumuo ng isang simpleng bot gamit ang `TextBlob`, isang library na gumagamit ng ML sa likod ng eksena upang magsagawa ng mga pangunahing gawain sa NLP tulad ng pagkuha ng mga parirala ng pangngalan. Isa pang mahalagang hamon sa computational linguistics ay ang tumpak na _pagsasalin_ ng isang pangungusap mula sa isang sinasalita o nakasulat na wika patungo sa isa pa. -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/35/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -Ang pagsasalin ay isang napakahirap na problema dahil may libu-libong wika at bawat isa ay may iba't ibang mga patakaran sa gramatika. Isang paraan ay ang pag-convert ng mga pormal na patakaran ng gramatika ng isang wika, tulad ng Ingles, sa isang istrukturang hindi nakadepende sa wika, at pagkatapos ay isalin ito sa pamamagitan ng pag-convert pabalik sa ibang wika. Ang pamamaraang ito ay nangangahulugan na gagawin mo ang mga sumusunod na hakbang: +Ang pagsasalin ay isang napakahirap na problema dahil sa libu-libong wika na may iba't ibang mga panuntunan sa gramatika. Isang paraan ay ang pag-convert ng mga pormal na panuntunan sa gramatika ng isang wika, tulad ng Ingles, sa isang istrukturang hindi nakadepende sa wika, at pagkatapos ay isalin ito sa pamamagitan ng pag-convert pabalik sa ibang wika. Ang pamamaraang ito ay nangangahulugan na gagawin mo ang mga sumusunod na hakbang: 1. **Pagkilala**. Tukuyin o i-tag ang mga salita sa input na wika bilang mga pangngalan, pandiwa, atbp. 2. **Gumawa ng pagsasalin**. Gumawa ng direktang pagsasalin ng bawat salita sa format ng target na wika. ### Halimbawa ng pangungusap, Ingles sa Irish -Sa 'Ingles', ang pangungusap na _I feel happy_ ay binubuo ng tatlong salita sa pagkakasunod na: +Sa 'Ingles', ang pangungusap na _I feel happy_ ay binubuo ng tatlong salita sa ganitong pagkakasunod-sunod: -- **paksa** (I) -- **pandiwa** (feel) -- **pang-uri** (happy) +- **subject** (I) +- **verb** (feel) +- **adjective** (happy) Gayunpaman, sa wikang 'Irish', ang parehong pangungusap ay may ibang istrukturang gramatikal - ang mga damdamin tulad ng "*happy*" o "*sad*" ay ipinapahayag bilang *nasa ibabaw mo*. -Ang pariralang Ingles na `I feel happy` sa Irish ay magiging `Tá athas orm`. Ang isang *literal* na pagsasalin ay magiging `Happy is upon me`. +Ang pariralang Ingles na `I feel happy` sa Irish ay magiging `Tá athas orm`. Ang *literal* na pagsasalin ay magiging `Happy is upon me`. Ang isang nagsasalita ng Irish na nagsasalin sa Ingles ay magsasabi ng `I feel happy`, hindi `Happy is upon me`, dahil nauunawaan nila ang kahulugan ng pangungusap, kahit na magkaiba ang mga salita at istruktura ng pangungusap. -Ang pormal na pagkakasunod ng pangungusap sa Irish ay: +Ang pormal na pagkakasunod-sunod ng pangungusap sa Irish ay: -- **pandiwa** (Tá o is) -- **pang-uri** (athas, o happy) -- **paksa** (orm, o upon me) +- **verb** (Tá o is) +- **adjective** (athas, o happy) +- **subject** (orm, o upon me) ## Pagsasalin -Ang isang simpleng programa sa pagsasalin ay maaaring magsalin lamang ng mga salita, hindi isinasaalang-alang ang istruktura ng pangungusap. +Ang isang simpleng programa sa pagsasalin ay maaaring magsalin lamang ng mga salita, na hindi isinasaalang-alang ang istruktura ng pangungusap. -✅ Kung natutunan mo ang pangalawa (o pangatlo o higit pa) na wika bilang isang adulto, maaaring nagsimula ka sa pag-iisip sa iyong katutubong wika, isinalin ang isang konsepto nang salita-sa-salita sa iyong isipan sa pangalawang wika, at pagkatapos ay binibigkas ang iyong pagsasalin. Katulad ito ng ginagawa ng mga simpleng programa sa pagsasalin. Mahalagang malampasan ang yugtong ito upang makamit ang kahusayan! +✅ Kung natutunan mo ang pangalawa (o pangatlo o higit pa) na wika bilang isang adulto, maaaring nagsimula ka sa pag-iisip sa iyong katutubong wika, isinalin ang isang konsepto nang salita-sa-salita sa iyong isipan patungo sa pangalawang wika, at pagkatapos ay binibigkas ang iyong pagsasalin. Katulad ito ng ginagawa ng mga simpleng programa sa pagsasalin ng computer. Mahalagang malampasan ang yugtong ito upang makamit ang kasanayan! -Ang simpleng pagsasalin ay nagreresulta sa mga maling (at kung minsan ay nakakatawang) pagsasalin: `I feel happy` ay literal na isinasalin sa `Mise bhraitheann athas` sa Irish. Ang ibig sabihin nito (literal) ay `me feel happy` at hindi ito wastong pangungusap sa Irish. Kahit na ang Ingles at Irish ay mga wikang sinasalita sa dalawang magkalapit na isla, sila ay napakaibang mga wika na may iba't ibang istruktura ng gramatika. +Ang simpleng pagsasalin ay nagdudulot ng masama (at kung minsan nakakatawang) mga maling pagsasalin: `I feel happy` ay literal na isinasalin sa `Mise bhraitheann athas` sa Irish. Ang ibig sabihin nito (literal) ay `me feel happy` at hindi ito wastong pangungusap sa Irish. Kahit na ang Ingles at Irish ay mga wikang sinasalita sa dalawang magkalapit na isla, sila ay napaka-magkaibang wika na may iba't ibang istruktura ng gramatika. -> Maaari kang manood ng ilang mga video tungkol sa mga tradisyong lingguwistiko ng Irish tulad ng [ito](https://www.youtube.com/watch?v=mRIaLSdRMMs) +> Maaari kang manood ng ilang mga video tungkol sa tradisyon ng lingguwistika ng Irish tulad ng [ito](https://www.youtube.com/watch?v=mRIaLSdRMMs) -### Mga pamamaraan ng machine learning +### Mga Pamamaraan ng Machine Learning -Sa ngayon, natutunan mo ang tungkol sa pormal na mga patakaran sa natural language processing. Isa pang paraan ay ang huwag pansinin ang kahulugan ng mga salita, at _sa halip ay gumamit ng machine learning upang makita ang mga pattern_. Maaari itong gumana sa pagsasalin kung mayroon kang maraming teksto (isang *corpus*) o mga teksto (*corpora*) sa parehong pinagmulan at target na mga wika. +Sa ngayon, natutunan mo ang tungkol sa pormal na pamamaraan sa natural language processing. Isa pang paraan ay ang huwag pansinin ang kahulugan ng mga salita, at _sa halip ay gumamit ng machine learning upang matukoy ang mga pattern_. Maaari itong gumana sa pagsasalin kung mayroon kang maraming teksto (isang *corpus*) o mga teksto (*corpora*) sa parehong pinagmulan at target na wika. -Halimbawa, isaalang-alang ang kaso ng *Pride and Prejudice*, isang kilalang nobelang Ingles na isinulat ni Jane Austen noong 1813. Kung susuriin mo ang libro sa Ingles at isang pagsasalin ng tao ng libro sa *Pranses*, maaari mong makita ang mga parirala sa isa na _idiomatically_ isinalin sa isa pa. Gagawin mo iyon sa ilang sandali. +Halimbawa, isaalang-alang ang kaso ng *Pride and Prejudice*, isang kilalang nobelang Ingles na isinulat ni Jane Austen noong 1813. Kung susuriin mo ang libro sa Ingles at isang pagsasalin ng tao ng libro sa *French*, maaari mong matukoy ang mga parirala sa isa na _idiomatically_ na isinalin sa isa pa. Gagawin mo iyon sa ilang sandali. -Halimbawa, kapag ang isang pariralang Ingles tulad ng `I have no money` ay literal na isinalin sa Pranses, maaaring maging `Je n'ai pas de monnaie`. Ang "Monnaie" ay isang mapanlinlang na 'false cognate' sa Pranses, dahil ang 'money' at 'monnaie' ay hindi magkapareho. Ang mas mahusay na pagsasalin na maaaring gawin ng isang tao ay `Je n'ai pas d'argent`, dahil mas mahusay nitong naipapahayag ang kahulugan na wala kang pera (sa halip na 'loose change' na siyang kahulugan ng 'monnaie'). +Halimbawa, kapag ang pariralang Ingles tulad ng `I have no money` ay literal na isinalin sa French, maaaring maging `Je n'ai pas de monnaie`. Ang "Monnaie" ay isang mapanlinlang na 'false cognate' sa French, dahil ang 'money' at 'monnaie' ay hindi magkatulad. Ang mas mahusay na pagsasalin na maaaring gawin ng tao ay `Je n'ai pas d'argent`, dahil mas mahusay nitong naipapahayag ang kahulugan na wala kang pera (sa halip na 'loose change' na siyang kahulugan ng 'monnaie'). -![monnaie](../../../../translated_images/monnaie.606c5fa8369d5c3b3031ef0713e2069485c87985dd475cd9056bdf4c76c1f4b8.tl.png) +![monnaie](../../../../6-NLP/3-Translation-Sentiment/images/monnaie.png) > Larawan ni [Jen Looper](https://twitter.com/jenlooper) -Kung ang isang modelo ng ML ay may sapat na pagsasalin ng tao upang makabuo ng isang modelo, maaari nitong mapabuti ang katumpakan ng mga pagsasalin sa pamamagitan ng pagtukoy ng mga karaniwang pattern sa mga tekstong dati nang isinalin ng mga dalubhasang tao na nagsasalita ng parehong wika. +Kung ang isang ML model ay may sapat na pagsasalin ng tao upang bumuo ng isang modelo, maaari nitong mapabuti ang katumpakan ng mga pagsasalin sa pamamagitan ng pagtukoy ng mga karaniwang pattern sa mga teksto na dati nang isinalin ng mga dalubhasang nagsasalita ng parehong wika. -### Ehersisyo - pagsasalin +### Ehersisyo - Pagsasalin Maaari mong gamitin ang `TextBlob` upang magsalin ng mga pangungusap. Subukan ang sikat na unang linya ng **Pride and Prejudice**: @@ -78,41 +78,41 @@ print(blob.translate(to="fr")) Ang `TextBlob` ay gumagawa ng medyo mahusay na pagsasalin: "C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme!". -Maaaring sabihin na ang pagsasalin ng TextBlob ay mas eksakto, sa katunayan, kaysa sa pagsasalin noong 1932 sa Pranses ng libro nina V. Leconte at Ch. Pressoir: +Maaaring sabihin na ang pagsasalin ng TextBlob ay mas eksakto, sa katunayan, kaysa sa 1932 French translation ng libro nina V. Leconte at Ch. Pressoir: "C'est une vérité universelle qu'un célibataire pourvu d'une belle fortune doit avoir envie de se marier, et, si peu que l'on sache de son sentiment à cet egard, lorsqu'il arrive dans une nouvelle résidence, cette idée est si bien fixée dans l'esprit de ses voisins qu'ils le considèrent sur-le-champ comme la propriété légitime de l'une ou l'autre de leurs filles." -Sa kasong ito, ang pagsasalin na pinapagana ng ML ay gumagawa ng mas mahusay na trabaho kaysa sa tagasalin ng tao na hindi kinakailangang nagdadagdag ng mga salita sa bibig ng orihinal na may-akda para sa 'kalinawan'. +Sa kasong ito, ang pagsasalin na pinamamahalaan ng ML ay mas mahusay kaysa sa tagasalin ng tao na hindi kinakailangang nagdagdag ng mga salita sa bibig ng orihinal na may-akda para sa 'kalinawan'. -> Ano ang nangyayari dito? At bakit napakahusay ng TextBlob sa pagsasalin? Sa likod ng eksena, gumagamit ito ng Google translate, isang sopistikadong AI na kayang mag-parse ng milyun-milyong parirala upang mahulaan ang pinakamahusay na mga string para sa gawain. Walang manwal na nagaganap dito at kailangan mo ng koneksyon sa internet upang magamit ang `blob.translate`. +> Ano ang nangyayari dito? At bakit napakahusay ng TextBlob sa pagsasalin? Sa likod ng eksena, ginagamit nito ang Google translate, isang sopistikadong AI na kayang mag-parse ng milyun-milyong parirala upang mahulaan ang pinakamahusay na mga string para sa gawain. Walang manu-manong nangyayari dito at kailangan mo ng koneksyon sa internet upang magamit ang `blob.translate`. -✅ Subukan ang ilang higit pang mga pangungusap. Alin ang mas mahusay, ML o pagsasalin ng tao? Sa anong mga kaso? +✅ Subukan ang ilang pangungusap pa. Alin ang mas mahusay, ML o pagsasalin ng tao? Sa anong mga kaso? -## Pagsusuri ng damdamin +## Sentiment Analysis -Isa pang lugar kung saan mahusay na gumagana ang machine learning ay ang pagsusuri ng damdamin. Ang isang hindi ML na paraan sa damdamin ay ang tukuyin ang mga salita at parirala na 'positibo' at 'negatibo'. Pagkatapos, sa isang bagong piraso ng teksto, kalkulahin ang kabuuang halaga ng mga positibo, negatibo, at neutral na salita upang matukoy ang pangkalahatang damdamin. +Isa pang lugar kung saan mahusay na gumagana ang machine learning ay ang sentiment analysis. Ang isang non-ML na paraan sa sentiment ay ang tukuyin ang mga salita at parirala na 'positibo' at 'negatibo'. Pagkatapos, sa isang bagong piraso ng teksto, kalkulahin ang kabuuang halaga ng positibo, negatibo, at neutral na mga salita upang matukoy ang pangkalahatang damdamin. -Ang pamamaraang ito ay madaling malinlang tulad ng maaaring nakita mo sa gawain ni Marvin - ang pangungusap na `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` ay isang sarcastic, negatibong pangungusap, ngunit ang simpleng algorithm ay natutukoy ang 'great', 'wonderful', 'glad' bilang positibo at 'waste', 'lost' at 'dark' bilang negatibo. Ang pangkalahatang damdamin ay naiimpluwensyahan ng mga salungat na salitang ito. +Ang pamamaraang ito ay madaling malinlang tulad ng nakita mo sa Marvin task - ang pangungusap na `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` ay isang sarcastic, negatibong damdamin na pangungusap, ngunit ang simpleng algorithm ay nakikita ang 'great', 'wonderful', 'glad' bilang positibo at 'waste', 'lost' at 'dark' bilang negatibo. Ang pangkalahatang damdamin ay naiimpluwensyahan ng mga salungat na salitang ito. -✅ Huminto sandali at isipin kung paano natin ipinapahayag ang pangungutya bilang mga tao. Ang tono ng boses ay may malaking papel. Subukang sabihin ang pariralang "Well, that film was awesome" sa iba't ibang paraan upang matuklasan kung paano ipinapahayag ng iyong boses ang kahulugan. +✅ Huminto sandali at isipin kung paano natin ipinapahayag ang sarcasm bilang mga nagsasalita ng tao. Ang tono ng boses ay may malaking papel. Subukang sabihin ang pariralang "Well, that film was awesome" sa iba't ibang paraan upang matuklasan kung paano ipinapahayag ng iyong boses ang kahulugan. -### Mga pamamaraan ng ML +### Mga Pamamaraan ng ML -Ang pamamaraang ML ay manu-manong mangolekta ng mga negatibo at positibong teksto - mga tweet, o mga pagsusuri ng pelikula, o anumang bagay kung saan ang tao ay nagbigay ng marka *at* isang nakasulat na opinyon. Pagkatapos, maaaring ilapat ang mga pamamaraan ng NLP sa mga opinyon at marka, upang lumitaw ang mga pattern (halimbawa, ang mga positibong pagsusuri ng pelikula ay may posibilidad na magkaroon ng pariralang 'Oscar worthy' kaysa sa mga negatibong pagsusuri ng pelikula, o ang mga positibong pagsusuri sa restawran ay nagsasabing 'gourmet' nang higit kaysa sa 'disgusting'). +Ang pamamaraang ML ay manu-manong mangolekta ng negatibo at positibong mga teksto - tweets, o mga review ng pelikula, o anumang bagay kung saan ang tao ay nagbigay ng score *at* ng nakasulat na opinyon. Pagkatapos ay maaaring ilapat ang mga teknik ng NLP sa mga opinyon at score, upang lumitaw ang mga pattern (halimbawa, ang mga positibong review ng pelikula ay may tendensiyang magkaroon ng pariralang 'Oscar worthy' kaysa sa mga negatibong review ng pelikula, o ang mga positibong review ng restaurant ay nagsasabing 'gourmet' nang mas madalas kaysa sa 'disgusting'). -> ⚖️ **Halimbawa**: Kung nagtatrabaho ka sa opisina ng isang politiko at may bagong batas na pinagtatalunan, maaaring sumulat ang mga nasasakupan ng mga email na sumusuporta o tumututol sa partikular na bagong batas. Sabihin nating ikaw ay inatasang basahin ang mga email at ayusin ang mga ito sa 2 tambak, *pabor* at *laban*. Kung maraming email, maaaring ma-overwhelm ka sa pagtatangkang basahin ang lahat. Hindi ba't mas maganda kung ang isang bot ang magbabasa ng lahat para sa iyo, nauunawaan ang mga ito, at sasabihin sa iyo kung saang tambak kabilang ang bawat email? +> ⚖️ **Halimbawa**: Kung nagtatrabaho ka sa opisina ng isang politiko at may bagong batas na pinagtatalunan, maaaring magsulat ang mga constituent ng mga email na sumusuporta o laban sa partikular na bagong batas. Sabihin nating ikaw ang naatasang magbasa ng mga email at ayusin ang mga ito sa 2 tambak, *para* at *laban*. Kung maraming email, maaaring ma-overwhelm ka sa pagbabasa ng lahat ng ito. Hindi ba't mas maganda kung may bot na makakabasa ng lahat ng ito para sa iyo, mauunawaan ang mga ito, at sasabihin kung saang tambak dapat mapunta ang bawat email? > -> Isang paraan upang makamit iyon ay ang paggamit ng Machine Learning. Sanayin mo ang modelo gamit ang bahagi ng mga email na *laban* at bahagi ng mga email na *pabor*. Ang modelo ay may posibilidad na iugnay ang mga parirala at salita sa panig na laban at panig na pabor, *ngunit hindi nito maiintindihan ang anumang nilalaman*, tanging ang ilang mga salita at pattern ay mas malamang na lumitaw sa isang email na *laban* o *pabor*. Maaari mo itong subukan gamit ang ilang mga email na hindi mo ginamit upang sanayin ang modelo, at tingnan kung pareho ang konklusyon nito sa iyo. Pagkatapos, kapag nasiyahan ka na sa katumpakan ng modelo, maaari mong iproseso ang mga email sa hinaharap nang hindi kinakailangang basahin ang bawat isa. +> Isang paraan upang makamit iyon ay ang paggamit ng Machine Learning. Sanayin mo ang modelo gamit ang bahagi ng mga *laban* na email at bahagi ng mga *para* na email. Ang modelo ay may tendensiyang iugnay ang mga parirala at salita sa panig ng laban at panig ng para, *ngunit hindi nito mauunawaan ang anumang nilalaman*, kundi ang ilang mga salita at pattern ay mas malamang na lumitaw sa isang *laban* o *para* na email. Maaari mo itong subukan gamit ang ilang email na hindi mo ginamit upang sanayin ang modelo, at tingnan kung pareho ang konklusyon nito sa iyo. Pagkatapos, kapag nasiyahan ka sa katumpakan ng modelo, maaari mong iproseso ang mga email sa hinaharap nang hindi kinakailangang basahin ang bawat isa. -✅ Ang prosesong ito ba ay parang mga prosesong ginamit mo sa mga nakaraang aralin? +✅ Ang prosesong ito ba ay katulad ng mga prosesong ginamit mo sa mga nakaraang aralin? -## Ehersisyo - mga pangungusap na may damdamin +## Ehersisyo - Sentimental na Pangungusap -Ang damdamin ay sinusukat gamit ang *polarity* mula -1 hanggang 1, kung saan ang -1 ay ang pinaka-negatibong damdamin, at 1 ang pinaka-positibo. Ang damdamin ay sinusukat din gamit ang iskor mula 0 - 1 para sa objectivity (0) at subjectivity (1). +Ang damdamin ay sinusukat gamit ang *polarity* mula -1 hanggang 1, ibig sabihin ang -1 ay ang pinaka-negatibong damdamin, at ang 1 ay ang pinaka-positibo. Ang damdamin ay sinusukat din gamit ang score mula 0 - 1 para sa objectivity (0) at subjectivity (1). -Balikan ang *Pride and Prejudice* ni Jane Austen. Ang teksto ay makukuha dito sa [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm). Ang halimbawa sa ibaba ay nagpapakita ng isang maikling programa na sumusuri sa damdamin ng una at huling mga pangungusap mula sa libro at ipinapakita ang polarity ng damdamin at iskor ng subjectivity/objectivity nito. +Balikan ang *Pride and Prejudice* ni Jane Austen. Ang teksto ay makukuha dito sa [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm). Ang sample sa ibaba ay nagpapakita ng isang maikling programa na nag-a-analisa ng damdamin ng unang at huling mga pangungusap mula sa libro at ipinapakita ang sentiment polarity at subjectivity/objectivity score nito. -Dapat mong gamitin ang library na `TextBlob` (inilarawan sa itaas) upang matukoy ang `sentiment` (hindi mo kailangang gumawa ng sarili mong calculator ng damdamin) sa sumusunod na gawain. +Dapat mong gamitin ang library na `TextBlob` (inilarawan sa itaas) upang matukoy ang `sentiment` (hindi mo kailangang magsulat ng sarili mong sentiment calculator) sa sumusunod na gawain. ```python from textblob import TextBlob @@ -139,26 +139,26 @@ Darcy, as well as Elizabeth, really loved them; and they were uniting them. has a sentiment of Sentiment(polarity=0.7, subjectivity=0.8) ``` -## Hamon - suriin ang polarity ng damdamin +## Hamon - Suriin ang Sentiment Polarity -Ang iyong gawain ay tukuyin, gamit ang polarity ng damdamin, kung ang *Pride and Prejudice* ay may mas maraming ganap na positibong pangungusap kaysa sa ganap na negatibo. Para sa gawaing ito, maaari mong ipalagay na ang iskor ng polarity na 1 o -1 ay ganap na positibo o negatibo ayon sa pagkakabanggit. +Ang iyong gawain ay tukuyin, gamit ang sentiment polarity, kung ang *Pride and Prejudice* ay may mas maraming ganap na positibong pangungusap kaysa sa ganap na negatibo. Para sa gawaing ito, maaari mong ipalagay na ang polarity score na 1 o -1 ay ganap na positibo o negatibo ayon sa pagkakabanggit. **Mga Hakbang:** -1. I-download ang isang [kopya ng Pride and Prejudice](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) mula sa Project Gutenberg bilang isang .txt file. Alisin ang metadata sa simula at dulo ng file, iwanan lamang ang orihinal na teksto +1. I-download ang [kopya ng Pride and Prejudice](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) mula sa Project Gutenberg bilang isang .txt file. Alisin ang metadata sa simula at dulo ng file, iwan lamang ang orihinal na teksto 2. Buksan ang file sa Python at kunin ang nilalaman bilang isang string 3. Gumawa ng TextBlob gamit ang string ng libro -4. Suriin ang bawat pangungusap sa libro sa isang loop - 1. Kung ang polarity ay 1 o -1, itabi ang pangungusap sa isang array o listahan ng mga positibo o negatibong mensahe +4. I-analisa ang bawat pangungusap sa libro sa isang loop + 1. Kung ang polarity ay 1 o -1, itago ang pangungusap sa isang array o listahan ng positibo o negatibong mga mensahe 5. Sa dulo, i-print ang lahat ng positibong pangungusap at negatibong pangungusap (hiwalay) at ang bilang ng bawat isa. Narito ang isang sample na [solusyon](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb). -✅ Kaalaman Check +✅ Knowledge Check -1. Ang damdamin ay batay sa mga salitang ginamit sa pangungusap, ngunit naiintindihan ba ng code ang mga salita? -2. Sa tingin mo ba ang polarity ng damdamin ay tumpak, o sa madaling salita, sumasang-ayon ka ba sa mga iskor? - 1. Sa partikular, sumasang-ayon o hindi ka ba sumasang-ayon sa ganap na **positibong** polarity ng mga sumusunod na pangungusap? +1. Ang damdamin ay batay sa mga salitang ginamit sa pangungusap, ngunit nauunawaan ba ng code ang mga salita? +2. Sa tingin mo ba ang sentiment polarity ay tumpak, o sa madaling salita, sumasang-ayon ka ba sa mga score? + 1. Partikular, sumasang-ayon ka ba o hindi sa ganap na **positibong** polarity ng mga sumusunod na pangungusap? * “What an excellent father you have, girls!” said she, when the door was shut. * “Your examination of Mr. Darcy is over, I presume,” said Miss Bingley; “and pray what is the result?” “I am perfectly convinced by it that Mr. Darcy has no defect. * How wonderfully these sort of things occur! @@ -167,34 +167,34 @@ Narito ang isang sample na [solusyon](https://github.com/microsoft/ML-For-Beginn * “This is delightful indeed! * I am so happy! * Your idea of the ponies is delightful. - 2. Ang susunod na 3 pangungusap ay naitala na may ganap na positibong damdamin, ngunit sa masusing pagbabasa, hindi sila positibong pangungusap. Bakit sa tingin mo ang pagsusuri ng damdamin ay inakala nilang positibo ang mga pangungusap? + 2. Ang susunod na 3 pangungusap ay na-score na may ganap na positibong damdamin, ngunit sa mas malapit na pagbabasa, hindi sila positibong pangungusap. Bakit sa tingin mo ang sentiment analysis ay naisip na positibo ang mga pangungusap na ito? * Happy shall I be, when his stay at Netherfield is over!” “I wish I could say anything to comfort you,” replied Elizabeth; “but it is wholly out of my power. * If I could but see you as happy! * Our distress, my dear Lizzy, is very great. - 3. Sumasang-ayon o hindi ka ba sumasang-ayon sa ganap na **negatibong** polarity ng mga sumusunod na pangungusap? + 3. Sumasang-ayon ka ba o hindi sa ganap na **negatibong** polarity ng mga sumusunod na pangungusap? - Everybody is disgusted with his pride. - “I should like to know how he behaves among strangers.” “You shall hear then—but prepare yourself for something very dreadful. - The pause was to Elizabeth’s feelings dreadful. - It would be dreadful! -✅ Ang sinumang tagahanga ni Jane Austen ay mauunawaan na madalas niyang ginagamit ang kanyang mga libro upang punahin ang mas katawa-tawang aspeto ng lipunang English Regency. Si Elizabeth Bennett, ang pangunahing tauhan sa *Pride and Prejudice*, ay isang mahusay na tagamasid sa lipunan (tulad ng may-akda) at ang kanyang wika ay madalas na puno ng mga pahiwatig. Kahit si Mr. Darcy (ang love interest sa kwento) ay napansin ang mapaglaro at mapanuksong paggamit ni Elizabeth ng wika: "I have had the pleasure of your acquaintance long enough to know that you find great enjoyment in occasionally professing opinions which in fact are not your own." +✅ Ang sinumang tagahanga ni Jane Austen ay mauunawaan na madalas niyang ginagamit ang kanyang mga libro upang punahin ang mas katawa-tawang aspeto ng English Regency society. Si Elizabeth Bennett, ang pangunahing tauhan sa *Pride and Prejudice*, ay isang mahusay na tagamasid sa lipunan (tulad ng may-akda) at ang kanyang wika ay madalas na puno ng nuance. Kahit si Mr. Darcy (ang love interest sa kuwento) ay napansin ang mapaglaro at mapanuksong paggamit ni Elizabeth ng wika: "I have had the pleasure of your acquaintance long enough to know that you find great enjoyment in occasionally professing opinions which in fact are not your own." --- ## 🚀Hamon -Paano mo mapapahusay si Marvin sa pamamagitan ng pagkuha ng iba pang mga tampok mula sa input ng user? +Paano mo mapapabuti si Marvin sa pamamagitan ng pagkuha ng iba pang mga tampok mula sa input ng user? -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/36/) +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -## Pagsusuri at Pag-aaral ng Sarili -Maraming paraan upang makuha ang damdamin mula sa teksto. Isipin ang mga aplikasyon sa negosyo na maaaring gumamit ng teknik na ito. Pag-isipan din kung paano ito maaaring magkamali. Magbasa pa tungkol sa mga sopistikadong sistemang handa para sa negosyo na nag-a-analyze ng damdamin tulad ng [Azure Text Analysis](https://docs.microsoft.com/azure/cognitive-services/Text-Analytics/how-tos/text-analytics-how-to-sentiment-analysis?tabs=version-3-1?WT.mc_id=academic-77952-leestott). Subukan ang ilan sa mga pangungusap mula sa Pride and Prejudice sa itaas at tingnan kung kaya nitong matukoy ang mga maseselang detalye. +## Review & Self Study +Maraming paraan upang makuha ang damdamin mula sa teksto. Isipin ang mga aplikasyon sa negosyo na maaaring gumamit ng teknik na ito. Isipin kung paano ito maaaring magkamali. Magbasa pa tungkol sa mga sopistikadong sistema na handa para sa enterprise na nag-a-analyze ng damdamin tulad ng [Azure Text Analysis](https://docs.microsoft.com/azure/cognitive-services/Text-Analytics/how-tos/text-analytics-how-to-sentiment-analysis?tabs=version-3-1?WT.mc_id=academic-77952-leestott). Subukan ang ilan sa mga pangungusap mula sa Pride and Prejudice sa itaas at tingnan kung kaya nitong matukoy ang mga masalimuot na damdamin. ## Takdang-Aralin -[Lisensyang Pampanitikan](assignment.md) +[Poetic license](assignment.md) --- **Paunawa**: -Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito. \ No newline at end of file +Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file diff --git a/translations/tl/6-NLP/4-Hotel-Reviews-1/README.md b/translations/tl/6-NLP/4-Hotel-Reviews-1/README.md index 9674c98d..80ecd135 100644 --- a/translations/tl/6-NLP/4-Hotel-Reviews-1/README.md +++ b/translations/tl/6-NLP/4-Hotel-Reviews-1/README.md @@ -1,25 +1,25 @@ # Sentiment analysis gamit ang mga review ng hotel - pagproseso ng data -Sa seksyong ito, gagamitin mo ang mga teknik mula sa mga nakaraang aralin upang magsagawa ng exploratory data analysis sa isang malaking dataset. Kapag nakuha mo na ang tamang pag-unawa sa kahalagahan ng iba't ibang mga column, matutunan mo: +Sa seksyong ito, gagamitin mo ang mga teknik na natutunan sa mga nakaraang aralin upang magsagawa ng exploratory data analysis sa isang malaking dataset. Kapag nagkaroon ka ng mas malalim na pag-unawa sa kahalagahan ng iba't ibang column, matutunan mo: - kung paano alisin ang mga hindi kinakailangang column - kung paano kalkulahin ang bagong data batay sa mga umiiral na column - kung paano i-save ang resulta ng dataset para magamit sa huling hamon -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/37/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) ### Panimula -Sa ngayon, natutunan mo na kung paano ang text data ay lubos na naiiba sa numerical na uri ng data. Kung ito ay text na isinulat o sinabi ng tao, maaari itong suriin upang makita ang mga pattern, dalas, damdamin, at kahulugan. Ang araling ito ay magdadala sa iyo sa isang tunay na dataset na may tunay na hamon: **[515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)** na may kasamang [CC0: Public Domain license](https://creativecommons.org/publicdomain/zero/1.0/). Ang data ay kinuha mula sa Booking.com mula sa mga pampublikong mapagkukunan. Ang tagalikha ng dataset ay si Jiashen Liu. +Sa ngayon, natutunan mo na ang text data ay lubos na naiiba sa numerical data. Kung ito ay text na isinulat o sinabi ng tao, maaari itong suriin upang matukoy ang mga pattern, dalas, damdamin, at kahulugan. Ang araling ito ay magdadala sa iyo sa isang tunay na dataset na may tunay na hamon: **[515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)** na may kasamang [CC0: Public Domain license](https://creativecommons.org/publicdomain/zero/1.0/). Ang data ay kinuha mula sa Booking.com mula sa mga pampublikong mapagkukunan. Ang tagalikha ng dataset ay si Jiashen Liu. ### Paghahanda @@ -28,16 +28,16 @@ Kakailanganin mo: * Kakayahang magpatakbo ng .ipynb notebooks gamit ang Python 3 * pandas * NLTK, [na dapat mong i-install nang lokal](https://www.nltk.org/install.html) -* Ang dataset na makukuha sa Kaggle [515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe). Ito ay humigit-kumulang 230 MB kapag na-unzip. I-download ito sa root `/data` folder na nauugnay sa mga araling NLP na ito. +* Ang dataset na makukuha sa Kaggle [515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe). Ang laki nito ay humigit-kumulang 230 MB kapag na-unzip. I-download ito sa root `/data` folder na nauugnay sa mga araling NLP na ito. ## Exploratory data analysis -Ang hamon na ito ay nagpapalagay na ikaw ay gumagawa ng hotel recommendation bot gamit ang sentiment analysis at mga score ng review ng mga bisita. Ang dataset na gagamitin mo ay naglalaman ng mga review ng 1493 iba't ibang hotel sa 6 na lungsod. +Ang hamon na ito ay nagpapalagay na ikaw ay bumubuo ng isang hotel recommendation bot gamit ang sentiment analysis at mga score ng review ng mga bisita. Ang dataset na gagamitin mo ay naglalaman ng mga review ng 1493 iba't ibang hotel sa 6 na lungsod. Gamit ang Python, isang dataset ng mga review ng hotel, at ang sentiment analysis ng NLTK, maaari mong tukuyin: * Ano ang mga pinakaginagamit na salita at parirala sa mga review? -* Ang mga opisyal na *tags* ba na naglalarawan sa isang hotel ay may kaugnayan sa mga score ng review (halimbawa, mas negatibo ba ang mga review para sa isang partikular na hotel mula sa *Family with young children* kaysa sa *Solo traveller*, na maaaring magpahiwatig na mas angkop ito para sa *Solo travellers*?) +* Ang mga opisyal na *tags* ba na naglalarawan sa hotel ay may kaugnayan sa mga score ng review (halimbawa, mas negatibo ba ang mga review para sa isang partikular na hotel mula sa *Family with young children* kaysa sa *Solo traveller*, na maaaring magpahiwatig na mas angkop ito para sa *Solo travellers*?) * Ang mga sentiment score ng NLTK ba ay "sumasang-ayon" sa numerical score ng reviewer ng hotel? #### Dataset @@ -48,78 +48,78 @@ Ang mga header sa dataset ay ang mga sumusunod: *Hotel_Address, Additional_Number_of_Scoring, Review_Date, Average_Score, Hotel_Name, Reviewer_Nationality, Negative_Review, Review_Total_Negative_Word_Counts, Total_Number_of_Reviews, Positive_Review, Review_Total_Positive_Word_Counts, Total_Number_of_Reviews_Reviewer_Has_Given, Reviewer_Score, Tags, days_since_review, lat, lng* -Narito ang mga ito na naka-grupo sa paraang mas madaling suriin: +Narito ang mga ito na naka-grupo sa paraang mas madaling suriin: ##### Mga column ng hotel * `Hotel_Name`, `Hotel_Address`, `lat` (latitude), `lng` (longitude) - * Gamit ang *lat* at *lng* maaari kang mag-plot ng mapa gamit ang Python na nagpapakita ng mga lokasyon ng hotel (maaaring naka-color code para sa negatibo at positibong review) + * Gamit ang *lat* at *lng*, maaari kang mag-plot ng mapa gamit ang Python na nagpapakita ng mga lokasyon ng hotel (maaaring naka-color code para sa mga negatibo at positibong review) * Ang Hotel_Address ay hindi mukhang kapaki-pakinabang sa atin, at malamang na papalitan natin ito ng bansa para sa mas madaling pag-uuri at paghahanap -**Mga Meta-review column ng hotel** +**Mga column ng meta-review ng hotel** * `Average_Score` - * Ayon sa tagalikha ng dataset, ang column na ito ay ang *Average Score ng hotel, na kinakalkula batay sa pinakabagong komento sa nakaraang taon*. Mukhang hindi pangkaraniwang paraan ito ng pagkalkula ng score, ngunit ito ang data na nakuha kaya maaaring tanggapin natin ito sa ngayon. - - ✅ Batay sa iba pang mga column sa data na ito, makakaisip ka ba ng ibang paraan upang kalkulahin ang average score? + * Ayon sa tagalikha ng dataset, ang column na ito ay ang *Average Score ng hotel, na kinakalkula batay sa pinakabagong komento sa nakaraang taon*. Mukhang hindi pangkaraniwang paraan ito ng pagkalkula ng score, ngunit ito ang data na nakuha kaya maaaring tanggapin natin ito sa ngayon. + + ✅ Batay sa iba pang column sa data na ito, makakaisip ka ba ng ibang paraan upang kalkulahin ang average score? * `Total_Number_of_Reviews` * Ang kabuuang bilang ng mga review na natanggap ng hotel na ito - hindi malinaw (nang hindi nagsusulat ng code) kung ito ay tumutukoy sa mga review sa dataset. * `Additional_Number_of_Scoring` - * Nangangahulugan ito na may score na ibinigay ngunit walang positibo o negatibong review na isinulat ng reviewer + * Nangangahulugan ito na may score na ibinigay ngunit walang positibo o negatibong review na isinulat ng reviewer. **Mga column ng review** - `Reviewer_Score` - - Ito ay isang numerical na halaga na may pinakamataas na 1 decimal place sa pagitan ng min at max na halaga na 2.5 at 10 + - Ito ay isang numerical value na may pinakamataas na 1 decimal place sa pagitan ng minimum at maximum na halaga na 2.5 at 10 - Hindi ipinaliwanag kung bakit 2.5 ang pinakamababang posibleng score - `Negative_Review` - Kung walang isinulat ang reviewer, ang field na ito ay magkakaroon ng "**No Negative**" - Tandaan na maaaring magsulat ang reviewer ng positibong review sa Negative review column (halimbawa, "walang masama sa hotel na ito") - `Review_Total_Negative_Word_Counts` - - Mas mataas na bilang ng negatibong salita ay nagpapahiwatig ng mas mababang score (nang hindi sinusuri ang damdamin) + - Mas mataas na bilang ng negatibong salita ang nagpapahiwatig ng mas mababang score (nang hindi sinusuri ang damdamin) - `Positive_Review` - Kung walang isinulat ang reviewer, ang field na ito ay magkakaroon ng "**No Positive**" - Tandaan na maaaring magsulat ang reviewer ng negatibong review sa Positive review column (halimbawa, "walang maganda sa hotel na ito") - `Review_Total_Positive_Word_Counts` - - Mas mataas na bilang ng positibong salita ay nagpapahiwatig ng mas mataas na score (nang hindi sinusuri ang damdamin) + - Mas mataas na bilang ng positibong salita ang nagpapahiwatig ng mas mataas na score (nang hindi sinusuri ang damdamin) - `Review_Date` at `days_since_review` - - Maaaring mag-apply ng freshness o staleness measure sa isang review (ang mas lumang review ay maaaring hindi kasing-accurate ng mas bago dahil nagbago ang pamamahala ng hotel, o may mga renovation na ginawa, o may idinagdag na pool, atbp.) + - Maaaring mag-apply ng freshness o staleness measure sa isang review (ang mas lumang review ay maaaring hindi kasing-accurate ng mas bago dahil nagbago ang pamamahala ng hotel, may mga renovation, o may idinagdag na pool, atbp.) - `Tags` - - Ito ay mga maikling descriptor na maaaring piliin ng reviewer upang ilarawan ang uri ng bisita sila (halimbawa, solo o pamilya), ang uri ng kwarto na kanilang tinirhan, ang haba ng pananatili, at kung paano naisumite ang review. - - Sa kasamaang palad, ang paggamit ng mga tag na ito ay may problema, tingnan ang seksyon sa ibaba na naglalarawan ng kanilang kahalagahan + - Ito ay mga maikling descriptor na maaaring piliin ng reviewer upang ilarawan ang uri ng bisita sila (halimbawa, solo o pamilya), ang uri ng kuwarto na kanilang tinirhan, ang haba ng pananatili, at kung paano naisumite ang review. + - Sa kasamaang-palad, ang paggamit ng mga tag na ito ay may problema, tingnan ang seksyon sa ibaba na naglalarawan ng kanilang kahalagahan. **Mga column ng reviewer** - `Total_Number_of_Reviews_Reviewer_Has_Given` - - Maaaring maging salik ito sa isang recommendation model, halimbawa, kung matutukoy mo na ang mas prolific na reviewer na may daan-daang review ay mas malamang na maging negatibo kaysa positibo. Gayunpaman, ang reviewer ng anumang partikular na review ay hindi nakilala gamit ang isang natatanging code, at samakatuwid ay hindi maaaring maiugnay sa isang set ng mga review. Mayroong 30 reviewer na may 100 o higit pang mga review, ngunit mahirap makita kung paano ito makakatulong sa recommendation model. + - Maaaring maging salik ito sa isang recommendation model, halimbawa, kung matutukoy mo na ang mas prolific na reviewer na may daan-daang review ay mas malamang na maging negatibo kaysa positibo. Gayunpaman, ang reviewer ng anumang partikular na review ay hindi nakilala gamit ang isang natatanging code, kaya't hindi ito maaaring maiugnay sa isang set ng mga review. Mayroong 30 reviewer na may 100 o higit pang review, ngunit mahirap makita kung paano ito makakatulong sa recommendation model. - `Reviewer_Nationality` - - Ang ilang tao ay maaaring mag-isip na ang ilang nasyonalidad ay mas malamang na magbigay ng positibo o negatibong review dahil sa isang pambansang hilig. Mag-ingat sa pagbuo ng ganitong anecdotal na pananaw sa iyong mga modelo. Ito ay mga pambansa (at kung minsan ay lahi) na stereotype, at bawat reviewer ay isang indibidwal na nagsulat ng review batay sa kanilang karanasan. Maaaring na-filter ito sa maraming lens tulad ng kanilang mga nakaraang pananatili sa hotel, ang distansya ng paglalakbay, at ang kanilang personal na ugali. Ang pag-iisip na ang kanilang nasyonalidad ang dahilan ng score ng review ay mahirap patunayan. + - Ang ilang tao ay maaaring mag-isip na ang ilang nasyonalidad ay mas malamang na magbigay ng positibo o negatibong review dahil sa isang pambansang hilig. Mag-ingat sa pagbuo ng ganitong anecdotal na pananaw sa iyong mga modelo. Ito ay mga pambansa (at kung minsan ay lahi) na stereotype, at ang bawat reviewer ay isang indibidwal na nagsulat ng review batay sa kanilang karanasan. Maaaring na-filter ito sa maraming lens tulad ng kanilang mga nakaraang pananatili sa hotel, ang distansya ng kanilang paglalakbay, at ang kanilang personal na ugali. Mahirap patunayan na ang kanilang nasyonalidad ang dahilan ng score ng review. ##### Mga Halimbawa | Average Score | Total Number Reviews | Reviewer Score | Negative
                                          Review | Positive Review | Tags | | -------------- | ---------------------- | ---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------- | -| 7.8 | 1945 | 2.5 | Ito ay kasalukuyang hindi isang hotel kundi isang construction site Ako ay ginising mula sa maagang umaga at buong araw ng hindi katanggap-tanggap na ingay ng konstruksyon habang nagpapahinga pagkatapos ng mahabang biyahe at nagtatrabaho sa kwarto Ang mga tao ay nagtatrabaho buong araw gamit ang jackhammers sa mga katabing kwarto Humiling ako ng pagbabago ng kwarto ngunit walang tahimik na kwarto na magagamit Upang gawing mas masama, ako ay siningil ng sobra Nag-check out ako sa gabi dahil kailangan kong umalis ng maagang flight at nakatanggap ng tamang bill Isang araw pagkatapos, ang hotel ay gumawa ng isa pang singil nang walang pahintulot na mas mataas sa nakabook na presyo Napakasamang lugar Huwag parusahan ang sarili sa pag-book dito | Wala Napakasamang lugar Lumayo | Business trip Couple Standard Double Room Stayed 2 nights | +| 7.8 | 1945 | 2.5 | Ito ay kasalukuyang hindi isang hotel kundi isang construction site Ako ay ginising mula sa maagang umaga at buong araw ng hindi katanggap-tanggap na ingay ng konstruksyon habang nagpapahinga pagkatapos ng mahabang biyahe at nagtatrabaho sa kuwarto Ang mga tao ay nagtatrabaho buong araw gamit ang jackhammers sa mga katabing kuwarto Humiling ako ng palit ng kuwarto ngunit walang tahimik na kuwarto na magagamit Upang gawing mas masama, ako ay siningil ng sobra Nag-check out ako sa gabi dahil kailangan kong umalis para sa maagang flight at nakatanggap ng tamang bill Isang araw pagkatapos, ang hotel ay gumawa ng karagdagang singil nang walang pahintulot na mas mataas sa nakabook na presyo Napakasamang lugar Huwag parusahan ang sarili mo sa pag-book dito | Wala Napakasamang lugar Lumayo | Business trip Couple Standard Double Room Stayed 2 nights | -Makikita mo, ang bisitang ito ay hindi nagkaroon ng masayang pananatili sa hotel na ito. Ang hotel ay may magandang average score na 7.8 at 1945 review, ngunit ang reviewer na ito ay nagbigay ng 2.5 at nagsulat ng 115 salita tungkol sa kung gaano ka-negatibo ang kanilang pananatili. Kung wala silang isinulat sa Positive_Review column, maaari mong ipalagay na walang positibo, ngunit isinulat nila ang 7 salita ng babala. Kung bibilangin lang natin ang mga salita sa halip na ang kahulugan o damdamin ng mga salita, maaaring magkaroon tayo ng maling pananaw sa intensyon ng reviewer. Nakakagulat, ang kanilang score na 2.5 ay nakakalito, dahil kung napakasama ng pananatili sa hotel, bakit pa magbigay ng anumang puntos? Sa pagsisiyasat sa dataset nang malapitan, makikita mo na ang pinakamababang posibleng score ay 2.5, hindi 0. Ang pinakamataas na posibleng score ay 10. +Makikita mo, ang bisitang ito ay hindi nagkaroon ng masayang pananatili sa hotel na ito. Ang hotel ay may magandang average score na 7.8 at 1945 review, ngunit binigyan ito ng reviewer ng 2.5 at nagsulat ng 115 salita tungkol sa kung gaano ka-negatibo ang kanilang pananatili. Kung wala silang isinulat sa Positive_Review column, maaari mong ipalagay na walang positibo, ngunit isinulat nila ang 7 salita ng babala. Kung bibilangin lang natin ang mga salita sa halip na ang kahulugan o damdamin ng mga salita, maaaring magkaroon tayo ng maling pananaw sa intensyon ng reviewer. Nakakagulat, ang kanilang score na 2.5 ay nakakalito, dahil kung napakasama ng pananatili sa hotel, bakit pa magbigay ng anumang puntos? Sa pagsisiyasat sa dataset nang malapitan, makikita mo na ang pinakamababang posibleng score ay 2.5, hindi 0. Ang pinakamataas na posibleng score ay 10. ##### Tags -Tulad ng nabanggit sa itaas, sa unang tingin, ang ideya na gamitin ang `Tags` upang i-categorize ang data ay may katuturan. Sa kasamaang palad, ang mga tag na ito ay hindi standardized, na nangangahulugan na sa isang hotel, ang mga opsyon ay maaaring *Single room*, *Twin room*, at *Double room*, ngunit sa susunod na hotel, ang mga ito ay *Deluxe Single Room*, *Classic Queen Room*, at *Executive King Room*. Maaaring pareho ang mga ito, ngunit napakaraming variation na ang pagpipilian ay: +Tulad ng nabanggit sa itaas, sa unang tingin, ang ideya na gamitin ang `Tags` upang i-categorize ang data ay may katuturan. Sa kasamaang-palad, ang mga tag na ito ay hindi standardized, na nangangahulugan na sa isang hotel, ang mga opsyon ay maaaring *Single room*, *Twin room*, at *Double room*, ngunit sa susunod na hotel, ang mga ito ay *Deluxe Single Room*, *Classic Queen Room*, at *Executive King Room*. Maaaring pareho ang mga ito, ngunit napakaraming variation na ang pagpipilian ay: 1. Subukang baguhin ang lahat ng termino sa isang pamantayan, na napakahirap, dahil hindi malinaw kung ano ang conversion path sa bawat kaso (halimbawa, *Classic single room* ay tumutugma sa *Single room* ngunit *Superior Queen Room with Courtyard Garden or City View* ay mas mahirap i-map) -1. Maaari tayong gumamit ng NLP approach at sukatin ang dalas ng ilang termino tulad ng *Solo*, *Business Traveller*, o *Family with young kids* habang ito ay naaangkop sa bawat hotel, at isama iyon sa rekomendasyon +1. Maaari tayong gumamit ng NLP approach at sukatin ang dalas ng ilang termino tulad ng *Solo*, *Business Traveller*, o *Family with young kids* habang ito ay naaangkop sa bawat hotel, at isama ito sa rekomendasyon. -Ang mga tag ay karaniwang (ngunit hindi palaging) isang solong field na naglalaman ng listahan ng 5 hanggang 6 na comma-separated values na naaayon sa *Uri ng biyahe*, *Uri ng bisita*, *Uri ng kwarto*, *Bilang ng gabi*, at *Uri ng device kung saan naisumite ang review*. Gayunpaman, dahil ang ilang reviewer ay hindi pinupunan ang bawat field (maaaring iwanan nila ang isa na blangko), ang mga value ay hindi palaging nasa parehong pagkakasunod-sunod. +Ang mga tag ay karaniwang (ngunit hindi palaging) isang field na naglalaman ng listahan ng 5 hanggang 6 na comma-separated values na tumutugma sa *Uri ng biyahe*, *Uri ng bisita*, *Uri ng kuwarto*, *Bilang ng gabi*, at *Uri ng device kung saan naisumite ang review*. Gayunpaman, dahil ang ilang reviewer ay hindi pinupunan ang bawat field (maaaring iwanan nila ang isa na blangko), ang mga value ay hindi palaging nasa parehong pagkakasunod-sunod. -Halimbawa, kunin ang *Uri ng grupo*. Mayroong 1025 natatanging posibilidad sa field na ito sa `Tags` column, at sa kasamaang palad, ilan lamang sa mga ito ang tumutukoy sa isang grupo (ang ilan ay uri ng kwarto, atbp.). Kung i-filter mo lang ang mga nagbabanggit ng pamilya, ang mga resulta ay naglalaman ng maraming *Family room* na uri ng resulta. Kung isasama mo ang terminong *with*, i.e. bilangin ang *Family with* values, mas maganda ang mga resulta, na may higit sa 80,000 sa 515,000 resulta na naglalaman ng pariralang "Family with young children" o "Family with older children". +Halimbawa, kunin ang *Uri ng grupo*. Mayroong 1025 natatanging posibilidad sa field na ito sa `Tags` column, at sa kasamaang-palad, ilan lamang sa mga ito ang tumutukoy sa isang grupo (ang ilan ay uri ng kuwarto, atbp.). Kung i-filter mo lamang ang mga nagbabanggit ng pamilya, ang mga resulta ay naglalaman ng maraming *Family room* na uri ng resulta. Kung isasama mo ang terminong *with*, i.e. bilangin ang *Family with* values, mas maganda ang mga resulta, na may higit sa 80,000 sa 515,000 resulta na naglalaman ng pariralang "Family with young children" o "Family with older children". -Ibig sabihin, ang tags column ay hindi ganap na walang silbi sa atin, ngunit kakailanganin ng kaunting trabaho upang maging kapaki-pakinabang. +Ibig sabihin, ang tags column ay hindi ganap na walang silbi sa atin, ngunit kakailanganin ng kaunting trabaho upang maging kapaki-pakinabang ito. ##### Average hotel score -Mayroong ilang mga kakaibang bagay o hindi pagkakapare-pareho sa dataset na hindi ko maipaliwanag, ngunit inilalarawan dito upang malaman mo ang mga ito kapag gumagawa ng iyong mga modelo. Kung ma-figure out mo ito, mangyaring ipaalam sa amin sa discussion section! +Mayroong ilang mga kakaibang bagay o hindi pagkakapare-pareho sa dataset na hindi ko maipaliwanag, ngunit inilalarawan dito upang malaman mo ang mga ito kapag bumubuo ng iyong mga modelo. Kung ma-figure out mo ito, mangyaring ipaalam sa amin sa discussion section! Ang dataset ay may mga sumusunod na column na nauugnay sa average score at bilang ng mga review: @@ -129,23 +129,22 @@ Ang dataset ay may mga sumusunod na column na nauugnay sa average score at bilan 4. Total_Number_of_Reviews 5. Reviewer_Score -Ang nag-iisang hotel na may pinakamaraming review sa dataset na ito ay *Britannia International Hotel Canary Wharf* na may 4789 review mula sa 515,000. Ngunit kung titingnan natin ang `Total_Number_of_Reviews` value para sa hotel na ito, ito ay 9086. Maaari mong ipalagay na may mas maraming score na walang review, kaya marahil dapat nating idagdag ang `Additional_Number_of_Scoring` column value. Ang value na iyon ay 2682, at kapag idinagdag sa 4789 ay makakakuha tayo ng 7,471 na kulang pa rin ng 1615 sa `Total_Number_of_Reviews`. - -Kung kukunin mo ang `Average_Score` column, maaari mong ipalagay na ito ang average ng mga review sa dataset, ngunit ang paglalarawan mula sa Kaggle ay "*Average Score ng hotel, na kinakalkula batay sa pinakabagong komento sa nakaraang taon*". Mukhang hindi ito kapaki-pakinabang, ngunit maaari nating kalkulahin ang sarili nating average batay sa mga review score sa dataset. Gamit ang parehong hotel bilang halimbawa, ang average hotel score ay ibinigay bilang 7.1 ngunit ang calculated score (average reviewer score *sa* dataset) ay 6.8. Malapit ito, ngunit hindi pareho ang halaga, at maaari lamang nating ipalagay na ang mga score na ibinigay sa `Additional_Number_of_Scoring` reviews ay nagtaas ng average sa 7.1. Sa kasamaang palad, nang walang paraan upang subukan o patunayan ang assertion na iyon, mahirap gamitin o pagkatiwalaan ang `Average_Score`, `Additional_Number_of_Scoring` at `Total_Number_of_Reviews` kapag ang mga ito ay batay sa, o tumutukoy sa, data na wala tayo. +Ang hotel na may pinakamaraming review sa dataset na ito ay *Britannia International Hotel Canary Wharf* na may 4789 review mula sa 515,000. Ngunit kung titingnan natin ang `Total_Number_of_Reviews` value para sa hotel na ito, ito ay 9086. Maaari mong ipalagay na may mas maraming score na walang review, kaya marahil dapat nating idagdag ang `Additional_Number_of_Scoring` column value. Ang value na iyon ay 2682, at kapag idinagdag sa 4789, makakakuha tayo ng 7,471 na kulang pa rin ng 1615 sa `Total_Number_of_Reviews`. -Upang gawing mas kumplikado ang mga bagay, ang hotel na may pangalawang pinakamataas na bilang ng mga review ay may calculated average score na 8.12 at ang dataset `Average_Score` ay 8.1. Ang tamang score ba na ito ay isang coincidence o ang unang hotel ay isang discrepancy? -Sa posibilidad na ang mga hotel na ito ay maaaring isang outlier, at na karamihan sa mga halaga ay tumutugma (ngunit ang ilan ay hindi sa ilang kadahilanan), magsusulat tayo ng maikling programa upang suriin ang mga halaga sa dataset at tukuyin ang tamang paggamit (o hindi paggamit) ng mga halaga. +Kung kukunin mo ang `Average_Score` column, maaari mong ipalagay na ito ang average ng mga review sa dataset, ngunit ang paglalarawan mula sa Kaggle ay "*Average Score ng hotel, na kinakalkula batay sa pinakabagong komento sa nakaraang taon*". Mukhang hindi ito kapaki-pakinabang, ngunit maaari nating kalkulahin ang sarili nating average batay sa mga review score sa dataset. Gamit ang parehong hotel bilang halimbawa, ang average hotel score ay ibinigay bilang 7.1 ngunit ang calculated score (average reviewer score *sa* dataset) ay 6.8. Malapit ito, ngunit hindi pareho ang value, at maaari lamang nating ipalagay na ang mga score na ibinigay sa `Additional_Number_of_Scoring` reviews ay nagtaas ng average sa 7.1. Sa kasamaang-palad, nang walang paraan upang subukan o patunayan ang assertion na iyon, mahirap gamitin o pagkatiwalaan ang `Average_Score`, `Additional_Number_of_Scoring`, at `Total_Number_of_Reviews` kapag ang mga ito ay batay sa, o tumutukoy sa, data na wala tayo. -> 🚨 Isang paalala ng pag-iingat -> -> Kapag nagtatrabaho sa dataset na ito, magsusulat ka ng code na nagkakalkula ng isang bagay mula sa teksto nang hindi kinakailangang basahin o suriin ang teksto mismo. Ito ang esensya ng NLP, ang pag-unawa sa kahulugan o damdamin nang hindi kinakailangang gawin ito ng tao. Gayunpaman, posible na mabasa mo ang ilan sa mga negatibong review. Hinihikayat kitang huwag gawin ito, dahil hindi mo naman kailangang gawin. Ang ilan sa mga ito ay walang kabuluhan o hindi mahalagang negatibong review ng hotel, tulad ng "Hindi maganda ang panahon," isang bagay na wala sa kontrol ng hotel, o kahit sino. Ngunit may madilim na bahagi rin sa ilang mga review. Minsan ang mga negatibong review ay rasista, seksista, o may diskriminasyon sa edad. Ito ay hindi kanais-nais ngunit inaasahan sa isang dataset na kinuha mula sa isang pampublikong website. Ang ilang mga reviewer ay nag-iiwan ng mga review na maaaring makita mong hindi kanais-nais, hindi komportable, o nakakabahala. Mas mabuting hayaan ang code na sukatin ang damdamin kaysa basahin mo ito at maapektuhan. Gayunpaman, ito ay isang maliit na bahagi lamang na nagsusulat ng ganitong mga bagay, ngunit umiiral pa rin sila. +Upang gawing mas kumplikado ang mga bagay, ang hotel na may pangalawang pinakamataas na bilang ng mga review ay may calculated average score na 8.12 at ang dataset `Average_Score` ay 8.1. Coincidence ba ang tamang score na ito o discrepancy ang unang hotel? +Sa posibilidad na ang mga hotel na ito ay maaaring isang outlier, at na marahil ang karamihan sa mga value ay tumutugma (ngunit ang ilan ay hindi sa ilang kadahilanan), magsusulat tayo ng maikling programa sa susunod upang suriin ang mga value sa dataset at tukuyin ang tamang paggamit (o hindi paggamit) ng mga value. +> 🚨 Isang paalala ng pag-iingat +> +> Kapag nagtatrabaho sa dataset na ito, magsusulat ka ng code na nagkakalkula ng isang bagay mula sa teksto nang hindi kinakailangang basahin o suriin ang teksto mismo. Ito ang diwa ng NLP, ang pag-unawa sa kahulugan o damdamin nang hindi kinakailangang gawin ito ng tao. Gayunpaman, posible na mabasa mo ang ilan sa mga negatibong review. Hinihikayat kita na huwag gawin ito, dahil hindi mo naman kailangan. Ang ilan sa mga ito ay walang saysay, o hindi mahalagang negatibong review ng hotel, tulad ng "Hindi maganda ang panahon," isang bagay na wala sa kontrol ng hotel, o kahit sino. Ngunit may madilim na bahagi rin sa ilang review. Minsan ang mga negatibong review ay rasista, seksista, o may diskriminasyon sa edad. Ito ay nakakalungkot ngunit inaasahan sa isang dataset na kinuha mula sa isang pampublikong website. Ang ilang mga reviewer ay nag-iiwan ng mga review na maaaring makita mong hindi kaaya-aya, hindi komportable, o nakakagambala. Mas mabuting hayaan ang code na sukatin ang damdamin kaysa basahin mo ang mga ito at maapektuhan. Gayunpaman, ito ay isang maliit na bahagi lamang na nagsusulat ng ganitong mga bagay, ngunit umiiral pa rin sila. ## Ehersisyo - Paggalugad ng Data -### I-load ang Data +### I-load ang data -Sapat na ang pagsusuri sa data nang biswal, ngayon ay magsusulat ka ng code at makakakuha ng mga sagot! Ang seksyong ito ay gumagamit ng pandas library. Ang iyong unang gawain ay tiyaking ma-load at mabasa mo ang CSV data. Ang pandas library ay may mabilis na CSV loader, at ang resulta ay inilalagay sa isang dataframe, tulad ng sa mga nakaraang aralin. Ang CSV na ating ilo-load ay may higit sa kalahating milyong mga hilera, ngunit 17 kolum lamang. Ang pandas ay nagbibigay ng maraming makapangyarihang paraan upang makipag-ugnayan sa isang dataframe, kabilang ang kakayahang magsagawa ng mga operasyon sa bawat hilera. +Tama na ang pagsusuri ng data nang biswal, oras na para magsulat ng code at makakuha ng mga sagot! Ang seksyong ito ay gumagamit ng pandas library. Ang iyong unang gawain ay tiyaking ma-load at mabasa mo ang CSV data. Ang pandas library ay may mabilis na CSV loader, at ang resulta ay inilalagay sa isang dataframe, tulad ng sa mga nakaraang aralin. Ang CSV na ating ilo-load ay may higit sa kalahating milyong rows, ngunit may 17 columns lamang. Ang pandas ay nagbibigay ng maraming makapangyarihang paraan upang makipag-ugnayan sa isang dataframe, kabilang ang kakayahang magsagawa ng mga operasyon sa bawat row. -Mula dito sa araling ito, magkakaroon ng mga snippet ng code at ilang paliwanag ng code at talakayan tungkol sa kung ano ang ibig sabihin ng mga resulta. Gamitin ang kasamang _notebook.ipynb_ para sa iyong code. +Mula dito sa araling ito, magkakaroon ng mga code snippets, ilang paliwanag tungkol sa code, at talakayan tungkol sa kahulugan ng mga resulta. Gamitin ang kasamang _notebook.ipynb_ para sa iyong code. Simulan natin sa pag-load ng data file na gagamitin mo: @@ -162,51 +161,51 @@ end = time.time() print("Loading took " + str(round(end - start, 2)) + " seconds") ``` -Ngayon na ang data ay na-load, maaari tayong magsagawa ng ilang mga operasyon dito. Panatilihin ang code na ito sa itaas ng iyong programa para sa susunod na bahagi. +Ngayon na na-load na ang data, maaari na tayong magsagawa ng ilang operasyon dito. Panatilihin ang code na ito sa itaas ng iyong programa para sa susunod na bahagi. -## Galugarin ang Data +## Galugarin ang data -Sa kasong ito, ang data ay *malinis* na, ibig sabihin ay handa na itong gamitin, at walang mga karakter sa ibang wika na maaaring magdulot ng problema sa mga algorithm na umaasa lamang sa mga karakter sa Ingles. +Sa kasong ito, ang data ay *malinis* na, ibig sabihin handa na itong gamitin, at walang mga karakter sa ibang wika na maaaring magdulot ng problema sa mga algorithm na inaasahan lamang ang mga karakter sa Ingles. -✅ Maaaring kailanganin mong magtrabaho sa data na nangangailangan ng paunang pagproseso upang ma-format ito bago mag-apply ng mga NLP technique, ngunit hindi sa pagkakataong ito. Kung kailangan mo, paano mo haharapin ang mga karakter na hindi Ingles? +✅ Maaaring kailanganin mong magtrabaho sa data na nangangailangan ng paunang pagproseso upang ma-format ito bago mag-apply ng mga teknik sa NLP, ngunit hindi sa pagkakataong ito. Kung kailangan mo, paano mo haharapin ang mga karakter na hindi Ingles? -Maglaan ng sandali upang tiyakin na kapag na-load na ang data, maaari mo itong galugarin gamit ang code. Napakadaling mag-focus sa mga kolum na `Negative_Review` at `Positive_Review`. Ang mga ito ay puno ng natural na teksto para sa iyong mga NLP algorithm upang iproseso. Ngunit sandali! Bago ka tumalon sa NLP at damdamin, sundin ang code sa ibaba upang tiyakin kung ang mga halagang ibinigay sa dataset ay tumutugma sa mga halagang kinakalkula mo gamit ang pandas. +Maglaan ng sandali upang tiyakin na kapag na-load na ang data, magagawa mo itong galugarin gamit ang code. Napakadaling mag-focus sa mga column na `Negative_Review` at `Positive_Review`. Ang mga ito ay puno ng natural na teksto para sa iyong NLP algorithms na iproseso. Ngunit sandali! Bago ka sumabak sa NLP at sentiment analysis, sundin mo ang code sa ibaba upang matiyak kung ang mga halaga sa dataset ay tumutugma sa mga halagang kinakalkula mo gamit ang pandas. -## Mga Operasyon sa Dataframe +## Mga operasyon sa Dataframe -Ang unang gawain sa araling ito ay tiyakin kung tama ang mga sumusunod na pahayag sa pamamagitan ng pagsulat ng code na sinusuri ang dataframe (nang hindi ito binabago). +Ang unang gawain sa araling ito ay suriin kung tama ang mga sumusunod na assertions sa pamamagitan ng pagsulat ng code na sinusuri ang dataframe (nang hindi ito binabago). -> Tulad ng maraming gawain sa programming, may ilang paraan upang makumpleto ito, ngunit ang magandang payo ay gawin ito sa pinakasimple at pinakamadaling paraan na kaya mo, lalo na kung mas madali itong maunawaan kapag binalikan mo ang code na ito sa hinaharap. Sa mga dataframe, mayroong isang komprehensibong API na madalas may paraan upang gawin ang gusto mo nang mahusay. +> Tulad ng maraming gawain sa programming, may iba't ibang paraan upang makumpleto ito, ngunit ang magandang payo ay gawin ito sa pinakasimple at pinakamadaling paraan na maaari mong gawin, lalo na kung mas madali itong maunawaan kapag binalikan mo ang code na ito sa hinaharap. Sa mga dataframe, mayroong komprehensibong API na madalas may paraan upang gawin ang gusto mo nang mahusay. -Ituring ang mga sumusunod na tanong bilang mga gawain sa coding at subukang sagutin ang mga ito nang hindi tinitingnan ang solusyon. +Ituring ang mga sumusunod na tanong bilang mga coding task at subukang sagutin ang mga ito nang hindi tinitingnan ang solusyon. -1. I-print ang *hugis* ng dataframe na kakaload mo lang (ang hugis ay ang bilang ng mga hilera at kolum). -2. Kalkulahin ang bilang ng mga paglitaw ng bawat reviewer nationality: - 1. Ilan ang natatanging halaga para sa kolum na `Reviewer_Nationality` at ano-ano ang mga ito? - 2. Aling reviewer nationality ang pinakakaraniwan sa dataset (i-print ang bansa at bilang ng mga review)? - 3. Ano ang susunod na nangungunang 10 pinakakaraniwang nationality, at ang kanilang bilang? -3. Ano ang pinakamaraming na-review na hotel para sa bawat isa sa nangungunang 10 reviewer nationality? -4. Ilan ang mga review bawat hotel (bilang ng mga review ng bawat hotel) sa dataset? -5. Habang mayroong kolum na `Average_Score` para sa bawat hotel sa dataset, maaari mo ring kalkulahin ang average score (kinukuha ang average ng lahat ng reviewer scores sa dataset para sa bawat hotel). Magdagdag ng bagong kolum sa iyong dataframe na may header na `Calc_Average_Score` na naglalaman ng kalkuladong average. -6. Mayroon bang mga hotel na may parehong (niround-off sa 1 decimal place) `Average_Score` at `Calc_Average_Score`? - 1. Subukang magsulat ng Python function na tumatanggap ng isang Series (row) bilang argumento at ikinukumpara ang mga halaga, nagpi-print ng mensahe kapag hindi magkapareho ang mga halaga. Pagkatapos gamitin ang `.apply()` method upang iproseso ang bawat hilera gamit ang function. -7. Kalkulahin at i-print kung ilang hilera ang may halagang "No Negative" sa kolum na `Negative_Review`. -8. Kalkulahin at i-print kung ilang hilera ang may halagang "No Positive" sa kolum na `Positive_Review`. -9. Kalkulahin at i-print kung ilang hilera ang may halagang "No Positive" sa kolum na `Positive_Review` **at** halagang "No Negative" sa kolum na `Negative_Review`. +1. I-print ang *shape* ng dataframe na kakaload mo lang (ang shape ay ang bilang ng rows at columns). +2. Kalkulahin ang frequency count para sa mga nationality ng reviewer: + 1. Ilan ang mga natatanging halaga para sa column na `Reviewer_Nationality` at ano ang mga ito? + 2. Anong nationality ng reviewer ang pinakakaraniwan sa dataset (i-print ang bansa at bilang ng mga review)? + 3. Ano ang susunod na nangungunang 10 pinakakaraniwang nationality, at ang kanilang frequency count? +3. Ano ang pinakamaraming na-review na hotel para sa bawat isa sa nangungunang 10 nationality ng reviewer? +4. Ilan ang mga review bawat hotel (frequency count ng hotel) sa dataset? +5. Bagama't may column na `Average_Score` para sa bawat hotel sa dataset, maaari mo ring kalkulahin ang average score (kinukuha ang average ng lahat ng reviewer scores sa dataset para sa bawat hotel). Magdagdag ng bagong column sa iyong dataframe na may header na `Calc_Average_Score` na naglalaman ng calculated average. +6. Mayroon bang mga hotel na may parehong (rounded to 1 decimal place) `Average_Score` at `Calc_Average_Score`? + 1. Subukang magsulat ng Python function na tumatanggap ng Series (row) bilang argumento at ikinukumpara ang mga halaga, nagpi-print ng mensahe kapag ang mga halaga ay hindi magkapareho. Pagkatapos gamitin ang `.apply()` method upang iproseso ang bawat row gamit ang function. +7. Kalkulahin at i-print kung ilang rows ang may column na `Negative_Review` na may halagang "No Negative". +8. Kalkulahin at i-print kung ilang rows ang may column na `Positive_Review` na may halagang "No Positive". +9. Kalkulahin at i-print kung ilang rows ang may column na `Positive_Review` na may halagang "No Positive" **at** `Negative_Review` na may halagang "No Negative". -### Mga Sagot sa Code +### Mga sagot sa code -1. I-print ang *hugis* ng dataframe na kakaload mo lang (ang hugis ay ang bilang ng mga hilera at kolum). +1. I-print ang *shape* ng dataframe na kakaload mo lang (ang shape ay ang bilang ng rows at columns). ```python print("The shape of the data (rows, cols) is " + str(df.shape)) > The shape of the data (rows, cols) is (515738, 17) ``` -2. Kalkulahin ang bilang ng mga paglitaw ng bawat reviewer nationality: +2. Kalkulahin ang frequency count para sa mga nationality ng reviewer: - 1. Ilan ang natatanging halaga para sa kolum na `Reviewer_Nationality` at ano-ano ang mga ito? - 2. Aling reviewer nationality ang pinakakaraniwan sa dataset (i-print ang bansa at bilang ng mga review)? + 1. Ilan ang mga natatanging halaga para sa column na `Reviewer_Nationality` at ano ang mga ito? + 2. Anong nationality ng reviewer ang pinakakaraniwan sa dataset (i-print ang bansa at bilang ng mga review)? ```python # value_counts() creates a Series object that has index and values in this case, the country and the frequency they occur in reviewer nationality @@ -230,7 +229,7 @@ Ituring ang mga sumusunod na tanong bilang mga gawain sa coding at subukang sagu Name: Reviewer_Nationality, Length: 227, dtype: int64 ``` - 3. Ano ang susunod na nangungunang 10 pinakakaraniwang nationality, at ang kanilang bilang? + 3. Ano ang susunod na nangungunang 10 pinakakaraniwang nationality, at ang kanilang frequency count? ```python print("The highest frequency reviewer nationality is " + str(nationality_freq.index[0]).strip() + " with " + str(nationality_freq[0]) + " reviews.") @@ -253,7 +252,7 @@ Ituring ang mga sumusunod na tanong bilang mga gawain sa coding at subukang sagu France 7296 ``` -3. Ano ang pinakamaraming na-review na hotel para sa bawat isa sa nangungunang 10 reviewer nationality? +3. Ano ang pinakamaraming na-review na hotel para sa bawat isa sa nangungunang 10 nationality ng reviewer? ```python # What was the most frequently reviewed hotel for the top 10 nationalities @@ -277,7 +276,7 @@ Ituring ang mga sumusunod na tanong bilang mga gawain sa coding at subukang sagu The most reviewed hotel for Canada was St James Court A Taj Hotel London with 61 reviews. ``` -4. Ilan ang mga review bawat hotel (bilang ng mga review ng bawat hotel) sa dataset? +4. Ilan ang mga review bawat hotel (frequency count ng hotel) sa dataset? ```python # First create a new dataframe based on the old one, removing the uneeded columns @@ -290,19 +289,19 @@ Ituring ang mga sumusunod na tanong bilang mga gawain sa coding at subukang sagu hotel_freq_df = hotel_freq_df.drop_duplicates(subset = ["Hotel_Name"]) display(hotel_freq_df) ``` - | Pangalan ng Hotel | Kabuuang Bilang ng Review | Kabuuang Nahanap na Review | - | :-----------------------------------------------: | :-----------------------: | :-----------------------: | - | Britannia International Hotel Canary Wharf | 9086 | 4789 | - | Park Plaza Westminster Bridge London | 12158 | 4169 | - | Copthorne Tara Hotel London Kensington | 7105 | 3578 | - | ... | ... | ... | - | Mercure Paris Porte d Orleans | 110 | 10 | - | Hotel Wagner | 135 | 10 | - | Hotel Gallitzinberg | 173 | 8 | - - Mapapansin mo na ang mga *nabilang sa dataset* na resulta ay hindi tumutugma sa halaga sa `Total_Number_of_Reviews`. Hindi malinaw kung ang halagang ito sa dataset ay kumakatawan sa kabuuang bilang ng mga review na mayroon ang hotel, ngunit hindi lahat ay na-scrape, o ibang kalkulasyon. Ang `Total_Number_of_Reviews` ay hindi ginagamit sa modelo dahil sa kawalang-kalinawan na ito. + | Hotel_Name | Total_Number_of_Reviews | Total_Reviews_Found | + | :----------------------------------------: | :---------------------: | :-----------------: | + | Britannia International Hotel Canary Wharf | 9086 | 4789 | + | Park Plaza Westminster Bridge London | 12158 | 4169 | + | Copthorne Tara Hotel London Kensington | 7105 | 3578 | + | ... | ... | ... | + | Mercure Paris Porte d Orleans | 110 | 10 | + | Hotel Wagner | 135 | 10 | + | Hotel Gallitzinberg | 173 | 8 | + + Mapapansin mo na ang *counted in the dataset* na resulta ay hindi tumutugma sa halaga sa `Total_Number_of_Reviews`. Hindi malinaw kung ang halagang ito sa dataset ay kumakatawan sa kabuuang bilang ng mga review na mayroon ang hotel, ngunit hindi lahat ay na-scrape, o iba pang kalkulasyon. Ang `Total_Number_of_Reviews` ay hindi ginagamit sa model dahil sa kawalang-linaw na ito. -5. Habang mayroong kolum na `Average_Score` para sa bawat hotel sa dataset, maaari mo ring kalkulahin ang average score (kinukuha ang average ng lahat ng reviewer scores sa dataset para sa bawat hotel). Magdagdag ng bagong kolum sa iyong dataframe na may header na `Calc_Average_Score` na naglalaman ng kalkuladong average. I-print ang mga kolum na `Hotel_Name`, `Average_Score`, at `Calc_Average_Score`. +5. Bagama't may column na `Average_Score` para sa bawat hotel sa dataset, maaari mo ring kalkulahin ang average score (kinukuha ang average ng lahat ng reviewer scores sa dataset para sa bawat hotel). Magdagdag ng bagong column sa iyong dataframe na may header na `Calc_Average_Score` na naglalaman ng calculated average. I-print ang mga column na `Hotel_Name`, `Average_Score`, at `Calc_Average_Score`. ```python # define a function that takes a row and performs some calculation with it @@ -324,29 +323,29 @@ Ituring ang mga sumusunod na tanong bilang mga gawain sa coding at subukang sagu display(review_scores_df[["Average_Score_Difference", "Average_Score", "Calc_Average_Score", "Hotel_Name"]]) ``` - Maaari mo ring mapansin ang `Average_Score` na halaga at kung bakit ito minsan ay naiiba sa kalkuladong average score. Dahil hindi natin alam kung bakit ang ilang mga halaga ay tumutugma, ngunit ang iba ay may pagkakaiba, pinakaligtas sa kasong ito na gamitin ang mga review scores na mayroon tayo upang kalkulahin ang average natin. Gayunpaman, ang mga pagkakaiba ay karaniwang napakaliit, narito ang mga hotel na may pinakamalaking pagkakaiba mula sa dataset average at kalkuladong average: + Maaaring magtaka ka rin tungkol sa halaga ng `Average_Score` at kung bakit ito minsan ay naiiba sa calculated average score. Dahil hindi natin alam kung bakit ang ilang mga halaga ay tumutugma, ngunit ang iba ay may pagkakaiba, pinakaligtas sa kasong ito na gamitin ang mga review scores na mayroon tayo upang kalkulahin ang average mismo. Gayunpaman, ang mga pagkakaiba ay karaniwang napakaliit, narito ang mga hotel na may pinakamalaking deviation mula sa dataset average at sa calculated average: - | Pagkakaiba sa Average_Score | Average_Score | Calc_Average_Score | Pangalan ng Hotel | - | :-------------------------: | :-----------: | :----------------: | -----------------------------------------------: | - | -0.8 | 7.7 | 8.5 | Best Western Hotel Astoria | - | -0.7 | 8.8 | 9.5 | Hotel Stendhal Place Vend me Paris MGallery | - | -0.7 | 7.5 | 8.2 | Mercure Paris Porte d Orleans | - | -0.7 | 7.9 | 8.6 | Renaissance Paris Vendome Hotel | - | -0.5 | 7.0 | 7.5 | Hotel Royal Elys es | - | ... | ... | ... | ... | - | 0.7 | 7.5 | 6.8 | Mercure Paris Op ra Faubourg Montmartre | - | 0.8 | 7.1 | 6.3 | Holiday Inn Paris Montparnasse Pasteur | - | 0.9 | 6.8 | 5.9 | Villa Eugenie | - | 0.9 | 8.6 | 7.7 | MARQUIS Faubourg St Honor Relais Ch teaux | - | 1.3 | 7.2 | 5.9 | Kube Hotel Ice Bar | + | Average_Score_Difference | Average_Score | Calc_Average_Score | Hotel_Name | + | :----------------------: | :-----------: | :----------------: | ------------------------------------------: | + | -0.8 | 7.7 | 8.5 | Best Western Hotel Astoria | + | -0.7 | 8.8 | 9.5 | Hotel Stendhal Place Vend me Paris MGallery | + | -0.7 | 7.5 | 8.2 | Mercure Paris Porte d Orleans | + | -0.7 | 7.9 | 8.6 | Renaissance Paris Vendome Hotel | + | -0.5 | 7.0 | 7.5 | Hotel Royal Elys es | + | ... | ... | ... | ... | + | 0.7 | 7.5 | 6.8 | Mercure Paris Op ra Faubourg Montmartre | + | 0.8 | 7.1 | 6.3 | Holiday Inn Paris Montparnasse Pasteur | + | 0.9 | 6.8 | 5.9 | Villa Eugenie | + | 0.9 | 8.6 | 7.7 | MARQUIS Faubourg St Honor Relais Ch teaux | + | 1.3 | 7.2 | 5.9 | Kube Hotel Ice Bar | - Sa iisang hotel lamang na may pagkakaiba ng score na higit sa 1, nangangahulugan ito na maaari nating balewalain ang pagkakaiba at gamitin ang kalkuladong average score. + Sa iisang hotel lamang na may pagkakaiba ng score na higit sa 1, nangangahulugan ito na maaari nating balewalain ang pagkakaiba at gamitin ang calculated average score. -6. Kalkulahin at i-print kung ilang hilera ang may halagang "No Negative" sa kolum na `Negative_Review`. +6. Kalkulahin at i-print kung ilang rows ang may column na `Negative_Review` na may halagang "No Negative". -7. Kalkulahin at i-print kung ilang hilera ang may halagang "No Positive" sa kolum na `Positive_Review`. +7. Kalkulahin at i-print kung ilang rows ang may column na `Positive_Review` na may halagang "No Positive". -8. Kalkulahin at i-print kung ilang hilera ang may halagang "No Positive" sa kolum na `Positive_Review` **at** halagang "No Negative" sa kolum na `Negative_Review`. +8. Kalkulahin at i-print kung ilang rows ang may column na `Positive_Review` na may halagang "No Positive" **at** `Negative_Review` na may halagang "No Negative". ```python # with lambdas: @@ -368,9 +367,9 @@ Ituring ang mga sumusunod na tanong bilang mga gawain sa coding at subukang sagu Lambdas took 9.64 seconds ``` -## Isa pang Paraan +## Isa pang paraan -Isa pang paraan upang bilangin ang mga item nang walang Lambdas, at gamitin ang sum upang bilangin ang mga hilera: +Isa pang paraan upang magbilang ng mga item nang walang Lambdas, at gamitin ang sum upang bilangin ang mga rows: ```python # without lambdas (using a mixture of notations to show you can use both) @@ -393,26 +392,26 @@ Isa pang paraan upang bilangin ang mga item nang walang Lambdas, at gamitin ang Sum took 0.19 seconds ``` - Mapapansin mo na mayroong 127 hilera na may parehong "No Negative" at "No Positive" na mga halaga para sa mga kolum na `Negative_Review` at `Positive_Review` ayon sa pagkakabanggit. Nangangahulugan ito na ang reviewer ay nagbigay ng numerikal na score sa hotel, ngunit tumangging magsulat ng positibo o negatibong review. Sa kabutihang palad, ito ay maliit na bilang ng mga hilera (127 sa 515738, o 0.02%), kaya malamang na hindi nito maimpluwensyahan ang ating modelo o mga resulta sa anumang partikular na direksyon, ngunit maaaring hindi mo inaasahan na ang isang dataset ng mga review ay may mga hilera na walang review, kaya't sulit na galugarin ang data upang matuklasan ang mga hilera tulad nito. + Mapapansin mo na mayroong 127 rows na may parehong "No Negative" at "No Positive" na mga halaga para sa mga column na `Negative_Review` at `Positive_Review` ayon sa pagkakabanggit. Nangangahulugan ito na ang reviewer ay nagbigay ng numerical score sa hotel, ngunit tumangging magsulat ng positibo o negatibong review. Sa kabutihang palad, ito ay maliit na bilang ng rows (127 sa 515738, o 0.02%), kaya malamang na hindi nito maapektuhan ang ating model o mga resulta sa anumang partikular na direksyon, ngunit maaaring hindi mo inaasahan na ang isang dataset ng mga review ay may mga rows na walang review, kaya't sulit na galugarin ang data upang matuklasan ang mga ganitong rows. Ngayon na na-explore mo na ang dataset, sa susunod na aralin ay ifi-filter mo ang data at magdadagdag ng sentiment analysis. --- ## 🚀Hamunin -Ipinapakita ng araling ito, tulad ng nakita natin sa mga nakaraang aralin, kung gaano kahalaga ang maunawaan ang iyong data at ang mga kakaibang aspeto nito bago magsagawa ng mga operasyon dito. Ang mga text-based na data, partikular, ay nangangailangan ng masusing pagsusuri. Halukayin ang iba't ibang text-heavy datasets at tingnan kung makakahanap ka ng mga lugar na maaaring magdulot ng bias o skewed sentiment sa isang modelo. +Ipinapakita ng araling ito, tulad ng nakita natin sa mga nakaraang aralin, kung gaano kahalaga ang maunawaan ang iyong data at ang mga kahinaan nito bago magsagawa ng mga operasyon dito. Ang data na batay sa teksto, partikular, ay nangangailangan ng maingat na pagsusuri. Maghukay sa iba't ibang text-heavy datasets at tingnan kung makakahanap ka ng mga lugar na maaaring magpakilala ng bias o skewed sentiment sa isang model. -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/38/) +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -## Pagsusuri at Pag-aaral sa Sarili +## Review at Pag-aaral sa Sarili -Kunin ang [Learning Path na ito sa NLP](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott) upang matuklasan ang mga tool na maaaring subukan kapag gumagawa ng mga modelo na mabigat sa pagsasalita at teksto. +Kunin ang [Learning Path na ito sa NLP](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott) upang matuklasan ang mga tool na maaaring subukan kapag gumagawa ng mga model na batay sa speech at text. -## Takdang-Aralin +## Takdang Aralin [NLTK](assignment.md) --- **Paunawa**: -Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito. \ No newline at end of file +Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file diff --git a/translations/tl/6-NLP/5-Hotel-Reviews-2/README.md b/translations/tl/6-NLP/5-Hotel-Reviews-2/README.md index c0329bc2..91f9a071 100644 --- a/translations/tl/6-NLP/5-Hotel-Reviews-2/README.md +++ b/translations/tl/6-NLP/5-Hotel-Reviews-2/README.md @@ -1,27 +1,27 @@ # Sentiment analysis gamit ang mga review ng hotel -Ngayon na napag-aralan mo na nang detalyado ang dataset, oras na para i-filter ang mga column at gamitin ang mga teknik ng NLP sa dataset upang makakuha ng bagong kaalaman tungkol sa mga hotel. +Ngayon na napag-aralan mo nang mabuti ang dataset, oras na para i-filter ang mga column at gamitin ang mga teknik ng NLP sa dataset upang makakuha ng mga bagong insight tungkol sa mga hotel. -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/39/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -### Pag-filter at Operasyon ng Sentiment Analysis +### Mga Operasyon sa Pag-filter at Sentiment Analysis -Tulad ng napansin mo, may ilang isyu ang dataset. Ang ilang mga column ay puno ng walang kwentang impormasyon, ang iba naman ay tila mali. Kung tama man ang mga ito, hindi malinaw kung paano sila na-compute, at hindi mo ma-verify ang mga sagot gamit ang sarili mong mga kalkulasyon. +Tulad ng napansin mo, may ilang isyu ang dataset. Ang ilang mga column ay puno ng walang kwentang impormasyon, ang iba naman ay tila mali. Kung tama man ang mga ito, hindi malinaw kung paano ito kinalkula, at ang mga sagot ay hindi maaaring independiyenteng ma-verify gamit ang sarili mong mga kalkulasyon. ## Ehersisyo: Karagdagang pagproseso ng data -Linisin ang data nang kaunti pa. Magdagdag ng mga column na magiging kapaki-pakinabang sa hinaharap, baguhin ang mga halaga sa ibang mga column, at tanggalin ang ilang mga column nang buo. +Linisin ang data nang kaunti pa. Magdagdag ng mga column na magiging kapaki-pakinabang sa hinaharap, baguhin ang mga halaga sa ibang mga column, at tuluyang tanggalin ang ilang mga column. -1. Paunang pagproseso ng column +1. Paunang pagproseso ng mga column 1. Tanggalin ang `lat` at `lng` @@ -77,13 +77,13 @@ Linisin ang data nang kaunti pa. Magdagdag ng mga column na magiging kapaki-paki | Paris, France | 458 | | Vienna, Austria | 158 | -2. Proseso ng Hotel Meta-review columns +2. Proseso ng mga column ng Hotel Meta-review 1. Tanggalin ang `Additional_Number_of_Scoring` 1. Palitan ang `Total_Number_of_Reviews` gamit ang kabuuang bilang ng mga review para sa hotel na aktwal na nasa dataset - 1. Palitan ang `Average_Score` gamit ang sarili nating na-compute na score + 1. Palitan ang `Average_Score` gamit ang sarili nating kalkuladong score ```python # Drop `Additional_Number_of_Scoring` @@ -93,17 +93,17 @@ Linisin ang data nang kaunti pa. Magdagdag ng mga column na magiging kapaki-paki df.Average_Score = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) ``` -3. Proseso ng review columns +3. Proseso ng mga column ng review 1. Tanggalin ang `Review_Total_Negative_Word_Counts`, `Review_Total_Positive_Word_Counts`, `Review_Date` at `days_since_review` 2. Panatilihin ang `Reviewer_Score`, `Negative_Review`, at `Positive_Review` sa kanilang kasalukuyang anyo, - 3. Panatilihin ang `Tags` sa ngayon + 3. Panatilihin ang `Tags` pansamantala - - Magkakaroon tayo ng karagdagang pag-filter ng mga operasyon sa tags sa susunod na seksyon at pagkatapos ay tatanggalin ang tags + - Magkakaroon tayo ng karagdagang mga operasyon sa pag-filter sa mga tag sa susunod na seksyon at pagkatapos ay tatanggalin ang mga tag -4. Proseso ng reviewer columns +4. Proseso ng mga column ng reviewer 1. Tanggalin ang `Total_Number_of_Reviews_Reviewer_Has_Given` @@ -111,23 +111,23 @@ Linisin ang data nang kaunti pa. Magdagdag ng mga column na magiging kapaki-paki ### Mga column ng Tag -Ang column na `Tag` ay may problema dahil ito ay isang listahan (sa text form) na nakaimbak sa column. Sa kasamaang palad, ang pagkakasunod-sunod at bilang ng mga sub-seksyon sa column na ito ay hindi palaging pareho. Mahirap para sa tao na tukuyin ang tamang mga parirala na dapat pagtuunan ng pansin, dahil mayroong 515,000 na mga row, at 1427 na mga hotel, at bawat isa ay may bahagyang magkakaibang mga opsyon na maaaring piliin ng reviewer. Dito nagiging kapaki-pakinabang ang NLP. Maaari mong i-scan ang teksto at hanapin ang mga pinakakaraniwang parirala, at bilangin ang mga ito. +Ang column na `Tag` ay may problema dahil ito ay isang listahan (sa anyong text) na nakaimbak sa column. Sa kasamaang palad, ang pagkakasunod-sunod at bilang ng mga sub-seksyon sa column na ito ay hindi palaging pareho. Mahirap para sa tao na tukuyin ang tamang mga parirala na dapat pagtuunan ng pansin, dahil mayroong 515,000 na mga row, at 1427 na mga hotel, at bawat isa ay may bahagyang magkakaibang mga opsyon na maaaring piliin ng reviewer. Dito nagiging kapaki-pakinabang ang NLP. Maaari mong i-scan ang teksto at hanapin ang mga pinakakaraniwang parirala, at bilangin ang mga ito. -Sa kasamaang palad, hindi tayo interesado sa mga solong salita, kundi sa mga multi-word na parirala (hal. *Business trip*). Ang pagpapatakbo ng multi-word frequency distribution algorithm sa ganoong dami ng data (6762646 na mga salita) ay maaaring tumagal ng napakahabang oras, ngunit nang hindi tinitingnan ang data, tila ito ay isang kinakailangang gastos. Dito nagiging kapaki-pakinabang ang exploratory data analysis, dahil nakita mo na ang sample ng mga tags tulad ng `[' Business trip ', ' Solo traveler ', ' Single Room ', ' Stayed 5 nights ', ' Submitted from a mobile device ']`, maaari mong simulan ang pagtatanong kung posible bang lubos na bawasan ang pagproseso na kailangan mong gawin. Sa kabutihang palad, posible ito - ngunit kailangan mo munang sundin ang ilang hakbang upang matukoy ang mga tags na mahalaga. +Sa kasamaang palad, hindi tayo interesado sa mga salitang mag-isa, kundi sa mga parirala na binubuo ng maraming salita (hal. *Business trip*). Ang pagpapatakbo ng isang algorithm para sa pamamahagi ng dalas ng mga parirala sa ganitong kalaking data (6762646 na mga salita) ay maaaring tumagal ng napakahabang oras, ngunit nang hindi tinitingnan ang data, tila ito ay isang kinakailangang gastusin. Dito nagiging kapaki-pakinabang ang exploratory data analysis, dahil nakita mo ang sample ng mga tag tulad ng `[' Business trip ', ' Solo traveler ', ' Single Room ', ' Stayed 5 nights ', ' Submitted from a mobile device ']`, maaari kang magsimulang magtanong kung posible bang lubos na bawasan ang pagproseso na kailangan mong gawin. Sa kabutihang palad, posible ito - ngunit kailangan mo munang sundin ang ilang hakbang upang matukoy ang mga tag na mahalaga. -### Pag-filter ng tags +### Pag-filter ng mga tag -Tandaan na ang layunin ng dataset ay magdagdag ng sentiment at mga column na makakatulong sa iyo na pumili ng pinakamahusay na hotel (para sa iyong sarili o marahil sa isang kliyente na nag-uutos sa iyo na gumawa ng hotel recommendation bot). Kailangan mong tanungin ang iyong sarili kung ang mga tags ay kapaki-pakinabang o hindi sa panghuling dataset. Narito ang isang interpretasyon (kung kailangan mo ang dataset para sa ibang mga layunin, maaaring iba ang mga tags na mananatili/matatanggal): +Tandaan na ang layunin ng dataset ay magdagdag ng sentiment at mga column na makakatulong sa iyo na pumili ng pinakamahusay na hotel (para sa iyong sarili o marahil sa isang kliyente na nag-aatas sa iyo na gumawa ng hotel recommendation bot). Kailangan mong tanungin ang iyong sarili kung ang mga tag ay kapaki-pakinabang o hindi sa panghuling dataset. Narito ang isang interpretasyon (kung kailangan mo ang dataset para sa ibang mga layunin, maaaring manatili/matanggal ang iba't ibang mga tag): -1. Ang uri ng biyahe ay mahalaga, at dapat itong manatili -2. Ang uri ng grupo ng bisita ay mahalaga, at dapat itong manatili +1. Ang uri ng biyahe ay mahalaga, at dapat manatili +2. Ang uri ng grupo ng bisita ay mahalaga, at dapat manatili 3. Ang uri ng kwarto, suite, o studio na tinuluyan ng bisita ay hindi mahalaga (lahat ng hotel ay may halos parehong mga kwarto) 4. Ang device na ginamit sa pagsusumite ng review ay hindi mahalaga -5. Ang bilang ng mga gabi na tinuluyan ng reviewer *maaaring* mahalaga kung iugnay mo ang mas mahabang pananatili sa kanilang pag-like sa hotel, ngunit ito ay medyo malabo, at marahil hindi mahalaga +5. Ang bilang ng mga gabi na tinuluyan ng reviewer *maaaring* mahalaga kung iugnay mo ang mas mahabang pananatili sa mas mataas na kasiyahan sa hotel, ngunit malabo ito, at marahil hindi mahalaga -Sa kabuuan, **panatilihin ang 2 uri ng tags at tanggalin ang iba**. +Sa kabuuan, **panatilihin ang 2 uri ng mga tag at tanggalin ang iba pa**. -Una, ayaw mong bilangin ang mga tags hangga't hindi sila nasa mas magandang format, kaya nangangahulugan ito ng pag-alis ng mga square brackets at quotes. Maaari mong gawin ito sa iba't ibang paraan, ngunit gusto mo ang pinakamabilis dahil maaaring tumagal ng mahabang oras ang pagproseso ng maraming data. Sa kabutihang palad, ang pandas ay may madaling paraan upang gawin ang bawat isa sa mga hakbang na ito. +Una, ayaw mong bilangin ang mga tag hangga't hindi sila nasa mas maayos na format, kaya nangangahulugan ito ng pag-aalis ng mga square bracket at mga quote. Maaari mong gawin ito sa iba't ibang paraan, ngunit gusto mo ang pinakamabilis dahil maaaring tumagal ng mahabang oras ang pagproseso ng maraming data. Sa kabutihang palad, may madaling paraan ang pandas para gawin ang bawat isa sa mga hakbang na ito. ```Python # Remove opening and closing brackets @@ -138,9 +138,9 @@ df.Tags = df.Tags.str.replace(" ', '", ",", regex = False) Ang bawat tag ay nagiging ganito: `Business trip, Solo traveler, Single Room, Stayed 5 nights, Submitted from a mobile device`. -Susunod, makakakita tayo ng problema. Ang ilang mga review, o mga row, ay may 5 column, ang iba ay may 3, ang iba ay may 6. Ito ay resulta ng kung paano ginawa ang dataset, at mahirap ayusin. Gusto mong makakuha ng frequency count ng bawat parirala, ngunit ang mga ito ay nasa iba't ibang pagkakasunod-sunod sa bawat review, kaya maaaring mali ang bilang, at maaaring hindi makakuha ng tag ang isang hotel na nararapat dito. +Susunod, makakakita tayo ng problema. Ang ilang mga review, o mga row, ay may 5 column, ang iba ay may 3, ang iba naman ay may 6. Ito ay resulta ng kung paano nilikha ang dataset, at mahirap ayusin. Gusto mong makakuha ng frequency count ng bawat parirala, ngunit ang mga ito ay nasa iba't ibang pagkakasunod-sunod sa bawat review, kaya maaaring mali ang bilang, at maaaring hindi ma-assign sa isang hotel ang tag na nararapat dito. -Sa halip, gagamitin mo ang iba't ibang pagkakasunod-sunod sa ating kalamangan, dahil ang bawat tag ay multi-word ngunit hiwalay din ng isang comma! Ang pinakasimpleng paraan upang gawin ito ay lumikha ng 6 na pansamantalang column kung saan ang bawat tag ay ipinasok sa column na tumutugma sa pagkakasunod-sunod nito sa tag. Pagkatapos ay maaari mong pagsamahin ang 6 na column sa isang malaking column at patakbuhin ang `value_counts()` method sa resulting column. Kapag na-print mo ito, makikita mo na mayroong 2428 na natatanging tags. Narito ang isang maliit na sample: +Sa halip, gagamitin mo ang iba't ibang pagkakasunod-sunod sa iyong kalamangan, dahil ang bawat tag ay multi-word ngunit hiwalay din ng isang comma! Ang pinakasimpleng paraan para gawin ito ay lumikha ng 6 na pansamantalang column kung saan ang bawat tag ay ipapasok sa column na tumutugma sa pagkakasunod-sunod nito sa tag. Pagkatapos ay maaari mong pagsamahin ang 6 na column sa isang malaking column at patakbuhin ang `value_counts()` method sa resulting column. Kapag na-print mo ito, makikita mo na mayroong 2428 natatanging mga tag. Narito ang isang maliit na sample: | Tag | Count | | ------------------------------ | ------ | @@ -167,11 +167,11 @@ Sa halip, gagamitin mo ang iba't ibang pagkakasunod-sunod sa ating kalamangan, d | Superior Double or Twin Room | 13570 | | 2 rooms | 12393 | -Ang ilan sa mga karaniwang tags tulad ng `Submitted from a mobile device` ay walang silbi sa atin, kaya maaaring matalinong bagay na tanggalin ang mga ito bago bilangin ang paglitaw ng parirala, ngunit ito ay isang napakabilis na operasyon kaya maaari mong iwanan ang mga ito at huwag pansinin. +Ang ilan sa mga karaniwang tag tulad ng `Submitted from a mobile device` ay walang silbi sa atin, kaya maaaring matalinong tanggalin ang mga ito bago bilangin ang paglitaw ng parirala, ngunit ito ay napakabilis na operasyon kaya maaari mo silang iwanan at huwag pansinin. -### Pag-alis ng mga tags tungkol sa haba ng pananatili +### Pagtanggal ng mga tag ng haba ng pananatili -Ang pag-alis ng mga tags na ito ay hakbang 1, binabawasan nito ang kabuuang bilang ng mga tags na dapat isaalang-alang. Tandaan na hindi mo sila aalisin mula sa dataset, kundi pipiliin lamang na huwag isama ang mga ito bilang mga halaga na bibilangin/papanatilihin sa dataset ng mga review. +Ang pagtanggal ng mga tag na ito ay hakbang 1, binabawasan nito ang kabuuang bilang ng mga tag na dapat isaalang-alang. Tandaan na hindi mo sila tinatanggal mula sa dataset, kundi pinipili lamang na huwag isama ang mga ito bilang mga halaga na bibilangin/panatilihin sa dataset ng mga review. | Length of stay | Count | | ---------------- | ------ | @@ -186,7 +186,7 @@ Ang pag-alis ng mga tags na ito ay hakbang 1, binabawasan nito ang kabuuang bila | Stayed 9 nights | 1293 | | ... | ... | -Mayroong napakaraming uri ng mga kwarto, suite, studio, apartment, at iba pa. Ang mga ito ay halos pare-pareho at hindi mahalaga sa iyo, kaya tanggalin ang mga ito mula sa konsiderasyon. +Mayroong napakaraming uri ng mga kwarto, suite, studio, apartment, at iba pa. Lahat ng mga ito ay halos pareho ang ibig sabihin at hindi mahalaga sa iyo, kaya tanggalin ang mga ito mula sa konsiderasyon. | Type of room | Count | | ----------------------------- | ----- | @@ -199,7 +199,7 @@ Mayroong napakaraming uri ng mga kwarto, suite, studio, apartment, at iba pa. An | Classic Double Room | 16989 | | Superior Double or Twin Room | 13570 | -Sa wakas, at ito ay kahanga-hanga (dahil hindi ito nangangailangan ng masyadong maraming pagproseso), ikaw ay maiiwan sa mga sumusunod na *kapaki-pakinabang* na tags: +Sa wakas, at ito ay kahanga-hanga (dahil hindi ito nangangailangan ng masyadong maraming pagproseso), maiiwan ka sa mga sumusunod na *kapaki-pakinabang* na mga tag: | Tag | Count | | --------------------------------------------- | ------ | @@ -212,9 +212,9 @@ Sa wakas, at ito ay kahanga-hanga (dahil hindi ito nangangailangan ng masyadong | Family with older children | 26349 | | With a pet | 1405 | -Maaari mong sabihin na ang `Travellers with friends` ay pareho sa `Group` halos, at magiging makatarungan na pagsamahin ang dalawa tulad ng nasa itaas. Ang code para sa pagtukoy ng tamang tags ay nasa [the Tags notebook](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb). +Maaari mong sabihin na ang `Travellers with friends` ay halos pareho sa `Group`, at makatarungan na pagsamahin ang dalawa tulad ng nasa itaas. Ang code para sa pagtukoy ng tamang mga tag ay nasa [the Tags notebook](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb). -Ang huling hakbang ay lumikha ng mga bagong column para sa bawat isa sa mga tags na ito. Pagkatapos, para sa bawat review row, kung ang column na `Tag` ay tumutugma sa isa sa mga bagong column, magdagdag ng 1, kung hindi, magdagdag ng 0. Ang resulta ay magiging bilang ng kung ilang reviewer ang pumili sa hotel na ito (sa kabuuan) para sa, halimbawa, business vs leisure, o para magdala ng alagang hayop, at ito ay kapaki-pakinabang na impormasyon kapag nagrerekomenda ng hotel. +Ang huling hakbang ay lumikha ng mga bagong column para sa bawat isa sa mga tag na ito. Pagkatapos, para sa bawat review row, kung ang column na `Tag` ay tumutugma sa isa sa mga bagong column, magdagdag ng 1, kung hindi, magdagdag ng 0. Ang resulta ay magiging bilang ng kung ilang reviewer ang pumili sa hotel na ito (sa kabuuan) para sa, halimbawa, negosyo kumpara sa leisure, o para magdala ng alagang hayop, at ito ay kapaki-pakinabang na impormasyon kapag nagrerekomenda ng hotel. ```python # Process the Tags into new columns @@ -234,7 +234,7 @@ df["With_a_pet"] = df.Tags.apply(lambda tag: 1 if "With a pet" in tag else 0) ### I-save ang iyong file -Sa wakas, i-save ang dataset sa kasalukuyang estado nito gamit ang bagong pangalan. +Sa wakas, i-save ang dataset sa kasalukuyang anyo nito gamit ang bagong pangalan. ```python df.drop(["Review_Total_Negative_Word_Counts", "Review_Total_Positive_Word_Counts", "days_since_review", "Total_Number_of_Reviews_Reviewer_Has_Given"], axis = 1, inplace=True) @@ -244,13 +244,13 @@ print("Saving results to Hotel_Reviews_Filtered.csv") df.to_csv(r'../data/Hotel_Reviews_Filtered.csv', index = False) ``` -## Mga Operasyon ng Sentiment Analysis +## Mga Operasyon sa Sentiment Analysis -Sa huling seksyon na ito, mag-a-apply ka ng sentiment analysis sa mga review columns at i-save ang mga resulta sa dataset. +Sa huling seksyon na ito, mag-a-apply ka ng sentiment analysis sa mga column ng review at i-save ang mga resulta sa dataset. ## Ehersisyo: I-load at i-save ang na-filter na data -Tandaan na ngayon ay iyong i-load ang na-filter na dataset na na-save sa nakaraang seksyon, **hindi** ang orihinal na dataset. +Tandaan na ngayon ay ilo-load mo ang na-filter na dataset na na-save sa nakaraang seksyon, **hindi** ang orihinal na dataset. ```python import time @@ -271,15 +271,15 @@ print("Saving results to Hotel_Reviews_NLP.csv") df.to_csv(r'../data/Hotel_Reviews_NLP.csv', index = False) ``` -### Pag-alis ng stop words +### Pagtanggal ng mga stop word -Kung magpapatakbo ka ng Sentiment Analysis sa Negative at Positive review columns, maaaring tumagal ito ng mahabang oras. Sa pagsubok sa isang malakas na test laptop na may mabilis na CPU, tumagal ito ng 12 - 14 minuto depende sa kung aling sentiment library ang ginamit. Ito ay isang (relatibong) mahabang oras, kaya sulit na suriin kung maaari itong mapabilis. +Kung magpapatakbo ka ng Sentiment Analysis sa mga column ng Negative at Positive review, maaaring tumagal ito ng mahabang oras. Sa pagsubok gamit ang isang makapangyarihang test laptop na may mabilis na CPU, tumagal ito ng 12 - 14 minuto depende sa kung aling sentiment library ang ginamit. Ito ay isang (relatibong) mahabang oras, kaya sulit na imbestigahan kung maaari itong mapabilis. -Ang pag-alis ng stop words, o mga karaniwang salitang Ingles na hindi nagbabago sa sentiment ng isang pangungusap, ang unang hakbang. Sa pamamagitan ng pag-alis ng mga ito, ang sentiment analysis ay dapat tumakbo nang mas mabilis, ngunit hindi magiging mas mababa ang accuracy (dahil ang stop words ay hindi nakakaapekto sa sentiment, ngunit pinapabagal nila ang analysis). +Ang pagtanggal ng mga stop word, o mga karaniwang salitang Ingles na hindi nagbabago sa sentiment ng isang pangungusap, ang unang hakbang. Sa pamamagitan ng pagtanggal ng mga ito, ang sentiment analysis ay dapat tumakbo nang mas mabilis, ngunit hindi magiging mas mababa ang accuracy (dahil ang mga stop word ay hindi nakakaapekto sa sentiment, ngunit pinapabagal nila ang analysis). -Ang pinakamahabang negative review ay may 395 na salita, ngunit pagkatapos alisin ang stop words, ito ay may 195 na salita. +Ang pinakamahabang negative review ay may 395 na salita, ngunit pagkatapos tanggalin ang mga stop word, ito ay naging 195 na salita. -Ang pag-alis ng stop words ay isang mabilis na operasyon din, ang pag-alis ng stop words mula sa 2 review columns sa mahigit 515,000 na mga row ay tumagal ng 3.3 segundo sa test device. Maaari itong tumagal ng bahagyang mas mahaba o mas maikli para sa iyo depende sa bilis ng CPU ng iyong device, RAM, kung mayroon kang SSD o wala, at ilang iba pang mga salik. Ang relatibong ikli ng operasyon ay nangangahulugan na kung ito ay nagpapabilis sa sentiment analysis, ito ay sulit gawin. +Ang pagtanggal ng mga stop word ay isang mabilis na operasyon din, ang pagtanggal ng mga stop word mula sa 2 review column sa mahigit 515,000 na mga row ay tumagal ng 3.3 segundo sa test device. Maaaring tumagal ito ng bahagyang mas matagal o mas mabilis para sa iyo depende sa bilis ng CPU ng iyong device, RAM, kung mayroon kang SSD o wala, at ilang iba pang mga salik. Ang relatibong ikli ng operasyon ay nangangahulugan na kung mapapabilis nito ang sentiment analysis, sulit itong gawin. ```python from nltk.corpus import stopwords @@ -302,11 +302,11 @@ df.Positive_Review = df.Positive_Review.apply(remove_stopwords) ``` ### Pagganap ng sentiment analysis -Ngayon, dapat mong kalkulahin ang sentiment analysis para sa parehong negative at positive review columns, at itago ang resulta sa 2 bagong columns. Ang pagsusuri ng sentiment ay magiging batayan sa paghahambing nito sa score ng reviewer para sa parehong review. Halimbawa, kung ang sentiment ay nagpapakita na ang negative review ay may sentiment na 1 (sobrang positibong sentiment) at ang positive review ay may sentiment na 1, ngunit binigyan ng reviewer ang hotel ng pinakamababang score, maaaring hindi tumutugma ang review text sa score, o hindi tama ang pagkilala ng sentiment analyser sa sentiment. Dapat mong asahan na may ilang sentiment scores na ganap na mali, at madalas na may paliwanag dito, halimbawa, ang review ay maaaring sobrang sarcastic tulad ng "Siyempre, GUSTO ko ang pagtulog sa isang kwarto na walang heating" at iniisip ng sentiment analyser na positibo ang sentiment, kahit na alam ng tao na binabasa ito na ito ay sarcasm. -Nagbibigay ang NLTK ng iba't ibang sentiment analyzers na maaaring pag-aralan, at maaari mong palitan ang mga ito upang makita kung mas tumpak o hindi ang sentiment. Ang VADER sentiment analysis ang ginagamit dito. +Ngayon ay dapat mong kalkulahin ang sentiment analysis para sa parehong negative at positive review column, at i-store ang resulta sa 2 bagong column. Ang pagsubok ng sentiment ay ihahambing ito sa score ng reviewer para sa parehong review. Halimbawa, kung ang sentiment ay nag-iisip na ang negative review ay may sentiment na 1 (sobrang positibong sentiment) at ang positive review sentiment ay 1, ngunit binigyan ng reviewer ang hotel ng pinakamababang score na posible, maaaring hindi tumutugma ang review text sa score, o maaaring hindi nakilala ng sentiment analyser ang sentiment nang tama. Dapat mong asahan na ang ilang sentiment scores ay ganap na mali, at madalas na maipapaliwanag ito, halimbawa, ang review ay maaaring sobrang sarcastic "Siyempre NAGUSTUHAN ko ang pagtulog sa kwarto na walang heating" at iniisip ng sentiment analyser na positibo ang sentiment, kahit na alam ng tao na ito ay sarcasm. +NLTK ay nagbibigay ng iba't ibang sentiment analyzers na maaaring pag-aralan, at maaari mong palitan ang mga ito upang makita kung mas tumpak o hindi ang sentiment analysis. Ang VADER sentiment analysis ang ginamit dito. -> Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014. +> Hutto, C.J. & Gilbert, E.E. (2014). VADER: Isang Simpleng Rule-based Model para sa Sentiment Analysis ng Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, Hunyo 2014. ```python from nltk.sentiment.vader import SentimentIntensityAnalyzer @@ -337,7 +337,7 @@ end = time.time() print("Calculating sentiment took " + str(round(end - start, 2)) + " seconds") ``` -Tumatagal ito ng humigit-kumulang 120 segundo sa aking computer, ngunit mag-iiba ito sa bawat computer. Kung nais mong i-print ang mga resulta at tingnan kung tumutugma ang sentiment sa review: +Tumatagal ito ng humigit-kumulang 120 segundo sa aking computer, ngunit mag-iiba ito depende sa bawat computer. Kung nais mong i-print ang mga resulta at tingnan kung tumutugma ang sentiment sa review: ```python df = df.sort_values(by=["Negative_Sentiment"], ascending=True) @@ -346,7 +346,7 @@ df = df.sort_values(by=["Positive_Sentiment"], ascending=True) print(df[["Positive_Review", "Positive_Sentiment"]]) ``` -Ang pinakahuling bagay na dapat gawin sa file bago ito gamitin sa challenge ay ang i-save ito! Dapat mo ring isaalang-alang ang pag-aayos ng lahat ng iyong bagong columns upang mas madali itong gamitin (para sa tao, ito ay isang cosmetic na pagbabago). +Ang huling bagay na dapat gawin sa file bago ito gamitin sa challenge ay ang i-save ito! Dapat mo ring isaalang-alang ang pag-aayos ng lahat ng iyong bagong columns upang mas madali itong gamitin (para sa tao, ito ay isang cosmetic na pagbabago). ```python # Reorder the columns (This is cosmetic, but to make it easier to explore the data later) @@ -362,22 +362,22 @@ Para sa pagsusuri, ang mga hakbang ay: 1. Ang orihinal na dataset file **Hotel_Reviews.csv** ay sinuri sa nakaraang aralin gamit ang [explorer notebook](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb) 2. Ang Hotel_Reviews.csv ay na-filter gamit ang [filtering notebook](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) na nagresulta sa **Hotel_Reviews_Filtered.csv** -3. Ang Hotel_Reviews_Filtered.csv ay pinroseso gamit ang [sentiment analysis notebook](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) na nagresulta sa **Hotel_Reviews_NLP.csv** +3. Ang Hotel_Reviews_Filtered.csv ay na-proseso gamit ang [sentiment analysis notebook](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) na nagresulta sa **Hotel_Reviews_NLP.csv** 4. Gamitin ang Hotel_Reviews_NLP.csv sa NLP Challenge sa ibaba ### Konklusyon -Nang magsimula ka, mayroon kang dataset na may mga columns at data ngunit hindi lahat ay maaaring ma-verify o magamit. Sinuri mo ang data, tinanggal ang hindi mo kailangan, binago ang mga tags sa mas kapaki-pakinabang na anyo, kinalkula ang iyong sariling mga averages, nagdagdag ng ilang sentiment columns, at sana, natutunan ang mga kawili-wiling bagay tungkol sa pagproseso ng natural na text. +Sa simula, mayroon kang dataset na may mga columns at data ngunit hindi lahat ay maaaring ma-verify o magamit. Sinuri mo ang data, tinanggal ang hindi mo kailangan, binago ang mga tags sa mas kapaki-pakinabang na anyo, kinalkula ang sarili mong mga average, nagdagdag ng ilang sentiment columns, at sana, natutunan mo ang mga kawili-wiling bagay tungkol sa pagproseso ng natural na teksto. -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/40/) +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) ## Hamon -Ngayon na na-analyze mo na ang dataset para sa sentiment, subukan mong gamitin ang mga estratehiya na natutunan mo sa kurikulum na ito (clustering, marahil?) upang matukoy ang mga pattern sa paligid ng sentiment. +Ngayon na na-analyze mo na ang dataset para sa sentiment, subukan mong gamitin ang mga estratehiyang natutunan mo sa kurikulum na ito (clustering, marahil?) upang tukuyin ang mga pattern sa paligid ng sentiment. ## Pagsusuri at Pag-aaral sa Sarili -Kunin ang [Learn module na ito](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott) upang matuto pa at gumamit ng iba't ibang tools para suriin ang sentiment sa text. +Kunin ang [Learn module na ito](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott) upang matuto pa at gumamit ng iba't ibang tools para suriin ang sentiment sa teksto. ## Takdang Aralin @@ -386,4 +386,4 @@ Kunin ang [Learn module na ito](https://docs.microsoft.com/en-us/learn/modules/c --- **Paunawa**: -Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang orihinal na wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file +Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file diff --git a/translations/tl/7-TimeSeries/1-Introduction/README.md b/translations/tl/7-TimeSeries/1-Introduction/README.md index daffae26..ecab5b77 100644 --- a/translations/tl/7-TimeSeries/1-Introduction/README.md +++ b/translations/tl/7-TimeSeries/1-Introduction/README.md @@ -1,67 +1,67 @@ # Panimula sa Pagtataya ng Time Series -![Buod ng time series sa isang sketchnote](../../../../translated_images/ml-timeseries.fb98d25f1013fc0c59090030080b5d1911ff336427bec31dbaf1ad08193812e9.tl.png) +![Buod ng time series sa isang sketchnote](../../../../sketchnotes/ml-timeseries.png) > Sketchnote ni [Tomomi Imura](https://www.twitter.com/girlie_mac) -Sa araling ito at sa susunod, matututo ka ng kaunti tungkol sa pagtataya ng time series, isang kawili-wili at mahalagang bahagi ng kaalaman ng isang ML scientist na hindi gaanong kilala kumpara sa ibang mga paksa. Ang pagtataya ng time series ay parang 'crystal ball': batay sa nakaraang performance ng isang variable tulad ng presyo, maaari mong hulaan ang posibleng halaga nito sa hinaharap. +Sa araling ito at sa susunod, matututo ka ng kaunti tungkol sa pagtataya ng time series, isang kawili-wili at mahalagang bahagi ng repertoire ng isang ML scientist na medyo hindi gaanong kilala kumpara sa ibang mga paksa. Ang pagtataya ng time series ay parang 'crystal ball': batay sa nakaraang performance ng isang variable tulad ng presyo, maaari mong hulaan ang potensyal na halaga nito sa hinaharap. [![Panimula sa pagtataya ng time series](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](https://youtu.be/cBojo1hsHiI "Panimula sa pagtataya ng time series") -> 🎥 I-click ang larawan sa itaas para sa isang video tungkol sa pagtataya ng time series +> 🎥 I-click ang imahe sa itaas para sa isang video tungkol sa pagtataya ng time series -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/41/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -Ito ay isang kapaki-pakinabang at kawili-wiling larangan na may tunay na halaga sa negosyo, dahil sa direktang aplikasyon nito sa mga problema sa pagpepresyo, imbentaryo, at mga isyu sa supply chain. Habang ang mga deep learning techniques ay nagsisimula nang gamitin upang makakuha ng mas maraming insight para mas mahusay na mahulaan ang performance sa hinaharap, ang pagtataya ng time series ay nananatiling isang larangan na malaki ang naiaambag ng mga klasikong ML techniques. +Ito ay isang kapaki-pakinabang at kawili-wiling larangan na may tunay na halaga sa negosyo, dahil sa direktang aplikasyon nito sa mga problema ng pagpepresyo, imbentaryo, at mga isyu sa supply chain. Habang ang mga deep learning techniques ay nagsisimula nang gamitin upang makakuha ng mas maraming insight para sa mas mahusay na pagtataya ng performance sa hinaharap, nananatiling isang larangan ang pagtataya ng time series na lubos na naaapektuhan ng mga klasikong ML techniques. > Ang kapaki-pakinabang na kurikulum ng time series ng Penn State ay matatagpuan [dito](https://online.stat.psu.edu/stat510/lesson/1) ## Panimula -Ipagpalagay na ikaw ay nagmementena ng isang array ng mga smart parking meter na nagbibigay ng data tungkol sa kung gaano kadalas at gaano katagal ang paggamit nito sa paglipas ng panahon. +Ipagpalagay na pinapanatili mo ang isang array ng mga smart parking meter na nagbibigay ng data tungkol sa kung gaano kadalas sila ginagamit at kung gaano katagal sa paglipas ng panahon. -> Paano kung kaya mong hulaan, batay sa nakaraang performance ng metro, ang halaga nito sa hinaharap ayon sa mga batas ng supply at demand? +> Paano kung mahuhulaan mo, batay sa nakaraang performance ng metro, ang halaga nito sa hinaharap ayon sa mga batas ng supply at demand? -Ang tumpak na paghula kung kailan dapat kumilos upang makamit ang iyong layunin ay isang hamon na maaaring harapin gamit ang pagtataya ng time series. Hindi man ikatutuwa ng mga tao na masisingil sila ng mas mahal sa abalang oras habang naghahanap ng paradahan, ngunit ito ay tiyak na isang paraan upang makalikom ng kita para sa paglilinis ng mga kalye! +Ang tumpak na pagtataya kung kailan dapat kumilos upang makamit ang iyong layunin ay isang hamon na maaaring matugunan ng pagtataya ng time series. Hindi magiging masaya ang mga tao na singilin ng mas mataas sa abalang oras kapag naghahanap sila ng parking spot, ngunit ito ay tiyak na isang paraan upang makabuo ng kita para linisin ang mga kalsada! -Tuklasin natin ang ilang uri ng mga algorithm ng time series at simulan ang isang notebook upang linisin at ihanda ang ilang data. Ang data na iyong susuriin ay kinuha mula sa GEFCom2014 forecasting competition. Binubuo ito ng 3 taon ng oras-oras na datos ng kuryente at temperatura mula 2012 hanggang 2014. Batay sa mga makasaysayang pattern ng kuryente at temperatura, maaari mong hulaan ang mga halaga ng kuryente sa hinaharap. +Tuklasin natin ang ilang uri ng mga algorithm ng time series at magsimula ng isang notebook upang linisin at ihanda ang ilang data. Ang data na iyong susuriin ay kinuha mula sa kumpetisyon sa pagtataya ng GEFCom2014. Binubuo ito ng 3 taon ng oras-oras na halaga ng kuryente at temperatura mula 2012 hanggang 2014. Batay sa mga makasaysayang pattern ng kuryente at temperatura, maaari mong hulaan ang mga halaga ng kuryente sa hinaharap. -Sa halimbawang ito, matututo kang mag-forecast ng isang hakbang pasulong, gamit lamang ang makasaysayang load data. Gayunpaman, bago magsimula, mahalagang maunawaan kung ano ang nangyayari sa likod ng mga eksena. +Sa halimbawang ito, matututo kang magtaya ng isang hakbang sa hinaharap, gamit lamang ang makasaysayang load data. Gayunpaman, bago magsimula, kapaki-pakinabang na maunawaan kung ano ang nangyayari sa likod ng mga eksena. -## Ilang mga Depinisyon +## Ilang mga kahulugan -Kapag narinig mo ang terminong 'time series', kailangan mong maunawaan ang paggamit nito sa iba't ibang konteksto. +Kapag naririnig ang terminong 'time series', kailangan mong maunawaan ang paggamit nito sa iba't ibang konteksto. 🎓 **Time series** -Sa matematika, "ang time series ay isang serye ng mga data point na naka-index (o nakalista o naka-graph) sa pagkakasunod-sunod ng oras. Kadalasan, ang time series ay isang pagkakasunod-sunod na kinuha sa magkakasunod na pantay na pagitan ng oras." Isang halimbawa ng time series ay ang pang-araw-araw na closing value ng [Dow Jones Industrial Average](https://wikipedia.org/wiki/Time_series). Ang paggamit ng mga time series plots at statistical modeling ay madalas na makikita sa signal processing, weather forecasting, earthquake prediction, at iba pang larangan kung saan nagaganap ang mga kaganapan at maaaring i-plot ang mga data point sa paglipas ng panahon. +Sa matematika, "ang time series ay isang serye ng mga data point na naka-index (o nakalista o naka-graph) sa pagkakasunod-sunod ng oras. Kadalasan, ang time series ay isang pagkakasunod-sunod na kinuha sa magkakasunod na pantay na agwat ng oras." Isang halimbawa ng time series ay ang pang-araw-araw na closing value ng [Dow Jones Industrial Average](https://wikipedia.org/wiki/Time_series). Ang paggamit ng mga time series plot at statistical modeling ay madalas na nakikita sa signal processing, pagtataya ng panahon, prediksyon ng lindol, at iba pang larangan kung saan nagaganap ang mga kaganapan at maaaring i-plot ang mga data point sa paglipas ng panahon. -🎓 **Time series analysis** +🎓 **Pagsusuri ng time series** -Ang time series analysis ay ang pagsusuri ng nabanggit na time series data. Ang time series data ay maaaring magkaroon ng iba't ibang anyo, kabilang ang 'interrupted time series' na tumutukoy sa mga pattern sa ebolusyon ng time series bago at pagkatapos ng isang interrupting event. Ang uri ng pagsusuri na kinakailangan para sa time series ay nakadepende sa kalikasan ng data. Ang time series data mismo ay maaaring nasa anyo ng serye ng mga numero o karakter. +Ang pagsusuri ng time series ay ang pagsusuri ng nabanggit na time series data. Ang time series data ay maaaring kumuha ng iba't ibang anyo, kabilang ang 'interrupted time series' na tumutukoy sa mga pattern sa ebolusyon ng time series bago at pagkatapos ng isang interrupting event. Ang uri ng pagsusuri na kinakailangan para sa time series ay nakadepende sa likas na katangian ng data. Ang time series data mismo ay maaaring kumuha ng anyo ng serye ng mga numero o karakter. -Ang pagsusuri na isasagawa ay gumagamit ng iba't ibang mga pamamaraan, kabilang ang frequency-domain at time-domain, linear at nonlinear, at iba pa. [Matuto pa](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) tungkol sa maraming paraan upang suriin ang ganitong uri ng data. +Ang pagsusuri na gagawin ay gumagamit ng iba't ibang mga pamamaraan, kabilang ang frequency-domain at time-domain, linear at nonlinear, at iba pa. [Matuto pa](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) tungkol sa maraming paraan upang suriin ang ganitong uri ng data. -🎓 **Time series forecasting** +🎓 **Pagtataya ng time series** -Ang time series forecasting ay ang paggamit ng isang modelo upang mahulaan ang mga halaga sa hinaharap batay sa mga pattern na ipinakita ng mga nakalap na datos sa nakaraan. Bagaman posible ang paggamit ng regression models upang suriin ang time series data, na may time indices bilang x variables sa isang plot, ang ganitong data ay pinakamahusay na sinusuri gamit ang mga espesyal na uri ng modelo. +Ang pagtataya ng time series ay ang paggamit ng isang modelo upang hulaan ang mga halaga sa hinaharap batay sa mga pattern na ipinakita ng mga nakalap na data sa nakaraan. Bagaman posible na gumamit ng mga regression model upang suriin ang time series data, na may mga time indices bilang x variables sa isang plot, ang ganitong data ay pinakamahusay na sinusuri gamit ang mga espesyal na uri ng mga modelo. -Ang time series data ay isang listahan ng mga ordered observations, hindi tulad ng data na maaaring suriin gamit ang linear regression. Ang pinakakaraniwang modelo ay ang ARIMA, isang akronim na nangangahulugang "Autoregressive Integrated Moving Average". +Ang time series data ay isang listahan ng mga ordered observations, hindi tulad ng data na maaaring suriin ng linear regression. Ang pinaka-karaniwang modelo ay ang ARIMA, isang acronym para sa "Autoregressive Integrated Moving Average". -[ARIMA models](https://online.stat.psu.edu/stat510/lesson/1/1.1) ay "inuugnay ang kasalukuyang halaga ng isang serye sa mga nakaraang halaga at mga nakaraang prediction errors." Ang mga ito ay pinakaangkop para sa pagsusuri ng time-domain data, kung saan ang data ay nakaayos ayon sa oras. +[ARIMA models](https://online.stat.psu.edu/stat510/lesson/1/1.1) "nag-uugnay sa kasalukuyang halaga ng isang serye sa mga nakaraang halaga at mga nakaraang prediction errors." Ang mga ito ay pinaka-angkop para sa pagsusuri ng time-domain data, kung saan ang data ay nakaayos sa paglipas ng panahon. -> Mayroong ilang uri ng ARIMA models, na maaari mong matutunan [dito](https://people.duke.edu/~rnau/411arim.htm) at tatalakayin mo sa susunod na aralin. +> Mayroong ilang mga uri ng ARIMA models, na maaari mong matutunan [dito](https://people.duke.edu/~rnau/411arim.htm) at na iyong matutuklasan sa susunod na aralin. -Sa susunod na aralin, gagawa ka ng isang ARIMA model gamit ang [Univariate Time Series](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm), na nakatuon sa isang variable na nagbabago ng halaga sa paglipas ng panahon. Isang halimbawa ng ganitong uri ng data ay [ang dataset na ito](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm) na nagtatala ng buwanang konsentrasyon ng CO2 sa Mauna Loa Observatory: +Sa susunod na aralin, gagawa ka ng isang ARIMA model gamit ang [Univariate Time Series](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm), na nakatuon sa isang variable na nagbabago ng halaga nito sa paglipas ng panahon. Isang halimbawa ng ganitong uri ng data ay [ang dataset na ito](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm) na nagtatala ng buwanang konsentrasyon ng CO2 sa Mauna Loa Observatory: | CO2 | YearMonth | Year | Month | | :----: | :-------: | :---: | :---: | @@ -82,25 +82,25 @@ Sa susunod na aralin, gagawa ka ng isang ARIMA model gamit ang [Univariate Time ## Mga Katangian ng Time Series Data na Dapat Isaalang-alang -Kapag tinitingnan ang time series data, maaaring mapansin mo na mayroon itong [mga partikular na katangian](https://online.stat.psu.edu/stat510/lesson/1/1.1) na kailangan mong isaalang-alang at bawasan upang mas maunawaan ang mga pattern nito. Kung ituturing mo ang time series data bilang posibleng nagbibigay ng isang 'signal' na nais mong suriin, ang mga katangiang ito ay maaaring ituring bilang 'ingay'. Kadalasan, kailangan mong bawasan ang 'ingay' na ito sa pamamagitan ng paggamit ng ilang mga statistical techniques. +Kapag tinitingnan ang time series data, maaaring mapansin mo na mayroon itong [mga tiyak na katangian](https://online.stat.psu.edu/stat510/lesson/1/1.1) na kailangan mong isaalang-alang at bawasan upang mas maunawaan ang mga pattern nito. Kung ituturing mo ang time series data bilang potensyal na nagbibigay ng 'signal' na nais mong suriin, ang mga katangiang ito ay maaaring ituring bilang 'ingay'. Kadalasan, kailangan mong bawasan ang 'ingay' na ito sa pamamagitan ng pag-offset ng ilan sa mga katangiang ito gamit ang ilang mga statistical techniques. Narito ang ilang mga konsepto na dapat mong malaman upang magamit ang time series: -🎓 **Trends** +🎓 **Mga Trend** -Ang trends ay tinutukoy bilang mga nasusukat na pagtaas at pagbaba sa paglipas ng panahon. [Basahin pa](https://machinelearningmastery.com/time-series-trends-in-python). Sa konteksto ng time series, ito ay tungkol sa kung paano gamitin at, kung kinakailangan, alisin ang mga trends mula sa iyong time series. +Ang mga trend ay tinutukoy bilang mga nasusukat na pagtaas at pagbaba sa paglipas ng panahon. [Magbasa pa](https://machinelearningmastery.com/time-series-trends-in-python). Sa konteksto ng time series, ito ay tungkol sa kung paano gamitin at, kung kinakailangan, alisin ang mga trend mula sa iyong time series. 🎓 **[Seasonality](https://machinelearningmastery.com/time-series-seasonality-with-python/)** -Ang seasonality ay tinutukoy bilang mga periodic fluctuations, tulad ng holiday rushes na maaaring makaapekto sa benta, halimbawa. [Tingnan](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm) kung paano ipinapakita ng iba't ibang uri ng plots ang seasonality sa data. +Ang seasonality ay tinutukoy bilang mga periodic fluctuations, tulad ng holiday rushes na maaaring makaapekto sa benta, halimbawa. [Tingnan](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm) kung paano ipinapakita ng iba't ibang uri ng mga plot ang seasonality sa data. -🎓 **Outliers** +🎓 **Mga Outlier** -Ang outliers ay mga data point na malayo sa karaniwang variance ng data. +Ang mga outlier ay malayo sa karaniwang variance ng data. 🎓 **Long-run cycle** -Bukod sa seasonality, maaaring magpakita ang data ng long-run cycle tulad ng isang economic downturn na tumatagal ng higit sa isang taon. +Maliban sa seasonality, maaaring magpakita ang data ng long-run cycle tulad ng isang economic down-turn na tumatagal ng higit sa isang taon. 🎓 **Constant variance** @@ -108,21 +108,21 @@ Sa paglipas ng panahon, ang ilang data ay nagpapakita ng constant fluctuations, 🎓 **Abrupt changes** -Maaaring magpakita ang data ng biglaang pagbabago na maaaring mangailangan ng karagdagang pagsusuri. Halimbawa, ang biglaang pagsasara ng mga negosyo dahil sa COVID ay nagdulot ng mga pagbabago sa data. +Ang data ay maaaring magpakita ng biglaang pagbabago na maaaring mangailangan ng karagdagang pagsusuri. Halimbawa, ang biglaang pagsasara ng mga negosyo dahil sa COVID ay nagdulot ng mga pagbabago sa data. -✅ Narito ang isang [halimbawang time series plot](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python) na nagpapakita ng pang-araw-araw na paggastos sa in-game currency sa loob ng ilang taon. Maaari mo bang tukuyin ang alinman sa mga katangiang nakalista sa itaas sa data na ito? +✅ Narito ang isang [sample time series plot](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python) na nagpapakita ng pang-araw-araw na paggastos ng in-game currency sa loob ng ilang taon. Maaari mo bang tukuyin ang alinman sa mga katangiang nakalista sa itaas sa data na ito? -![Paggastos sa in-game currency](../../../../translated_images/currency.e7429812bfc8c6087b2d4c410faaa4aaa11b2fcaabf6f09549b8249c9fbdb641.tl.png) +![In-game currency spend](../../../../7-TimeSeries/1-Introduction/images/currency.png) ## Ehersisyo - Pagsisimula sa Data ng Paggamit ng Kuryente -Simulan natin ang paggawa ng isang time series model upang mahulaan ang paggamit ng kuryente sa hinaharap batay sa nakaraang paggamit. +Magsimula tayo sa paggawa ng isang time series model upang hulaan ang paggamit ng kuryente sa hinaharap batay sa nakaraang paggamit. -> Ang data sa halimbawang ito ay kinuha mula sa GEFCom2014 forecasting competition. Binubuo ito ng 3 taon ng oras-oras na datos ng kuryente at temperatura mula 2012 hanggang 2014. +> Ang data sa halimbawang ito ay kinuha mula sa kumpetisyon sa pagtataya ng GEFCom2014. Binubuo ito ng 3 taon ng oras-oras na halaga ng kuryente at temperatura mula 2012 hanggang 2014. > > Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli at Rob J. Hyndman, "Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond", International Journal of Forecasting, vol.32, no.3, pp 896-913, July-September, 2016. -1. Sa folder na `working` ng araling ito, buksan ang _notebook.ipynb_ file. Simulan sa pagdaragdag ng mga library na makakatulong sa iyong mag-load at mag-visualize ng data: +1. Sa folder na `working` ng araling ito, buksan ang file na _notebook.ipynb_. Magsimula sa pagdaragdag ng mga library na makakatulong sa iyo na mag-load at mag-visualize ng data. ```python import os @@ -131,7 +131,7 @@ Simulan natin ang paggawa ng isang time series model upang mahulaan ang paggamit %matplotlib inline ``` - Tandaan, ginagamit mo ang mga file mula sa kasamang `common` folder na nagse-set up ng iyong environment at nagha-handle ng pag-download ng data. + Tandaan, ginagamit mo ang mga file mula sa kasamang `common` folder na nagse-set up ng iyong environment at humahawak sa pag-download ng data. 2. Susunod, suriin ang data bilang isang dataframe sa pamamagitan ng pagtawag sa `load_data()` at `head()`: @@ -160,9 +160,9 @@ Simulan natin ang paggawa ng isang time series model upang mahulaan ang paggamit plt.show() ``` - ![energy plot](../../../../translated_images/energy-plot.5fdac3f397a910bc6070602e9e45bea8860d4c239354813fa8fc3c9d556f5bad.tl.png) + ![energy plot](../../../../7-TimeSeries/1-Introduction/images/energy-plot.png) -4. Ngayon, i-plot ang unang linggo ng Hulyo 2014, sa pamamagitan ng pagbibigay nito bilang input sa `energy` gamit ang `[mula petsa]: [hanggang petsa]` na pattern: +4. Ngayon, i-plot ang unang linggo ng Hulyo 2014, sa pamamagitan ng pagbibigay nito bilang input sa `energy` sa pattern na `[mula sa petsa]: [hanggang petsa]`: ```python energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) @@ -171,9 +171,9 @@ Simulan natin ang paggawa ng isang time series model upang mahulaan ang paggamit plt.show() ``` - ![july](../../../../translated_images/july-2014.9e1f7c318ec6d5b30b0d7e1e20be3643501f64a53f3d426d7c7d7b62addb335e.tl.png) + ![july](../../../../7-TimeSeries/1-Introduction/images/july-2014.png) - Isang magandang plot! Tingnan ang mga plot na ito at subukang tukuyin ang alinman sa mga katangiang nakalista sa itaas. Ano ang maaari nating masabi sa pamamagitan ng pag-visualize ng data? + Isang magandang plot! Tingnan ang mga plot na ito at suriin kung maaari mong matukoy ang alinman sa mga katangiang nakalista sa itaas. Ano ang maaari nating masabi sa pamamagitan ng pag-visualize ng data? Sa susunod na aralin, gagawa ka ng isang ARIMA model upang lumikha ng ilang mga forecast. @@ -181,19 +181,19 @@ Sa susunod na aralin, gagawa ka ng isang ARIMA model upang lumikha ng ilang mga ## 🚀Hamunin -Gumawa ng listahan ng lahat ng mga industriya at larangan ng pag-aaral na sa tingin mo ay makikinabang mula sa pagtataya ng time series. Makakaisip ka ba ng aplikasyon ng mga teknik na ito sa sining? Sa Econometrics? Ekolohiya? Retail? Industriya? Pananalapi? Saan pa? +Gumawa ng listahan ng lahat ng mga industriya at larangan ng pag-aaral na sa tingin mo ay makikinabang mula sa pagtataya ng time series. Maaari ka bang mag-isip ng aplikasyon ng mga teknik na ito sa sining? Sa Econometrics? Ekolohiya? Retail? Industriya? Pananalapi? Saan pa? -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/42/) +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -## Pagsusuri at Pag-aaral sa Sarili +## Review at Pag-aaral ng Sarili -Bagaman hindi natin ito tatalakayin dito, ang neural networks ay minsang ginagamit upang mapahusay ang mga klasikong pamamaraan ng pagtataya ng time series. Basahin pa ang tungkol dito [sa artikulong ito](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412) +Bagaman hindi natin ito tatalakayin dito, ang mga neural network ay minsan ginagamit upang mapahusay ang mga klasikong pamamaraan ng pagtataya ng time series. Magbasa pa tungkol dito [sa artikulong ito](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412) -## Takdang Aralin +## Takdang-Aralin [Mag-visualize ng mas maraming time series](assignment.md) --- **Paunawa**: -Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file +Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file diff --git a/translations/tl/7-TimeSeries/2-ARIMA/README.md b/translations/tl/7-TimeSeries/2-ARIMA/README.md index 971ea076..ae425bc7 100644 --- a/translations/tl/7-TimeSeries/2-ARIMA/README.md +++ b/translations/tl/7-TimeSeries/2-ARIMA/README.md @@ -1,21 +1,21 @@ -# Pagtataya ng Time Series gamit ang ARIMA +# Time series forecasting gamit ang ARIMA -Sa nakaraang aralin, natutunan mo ang kaunti tungkol sa pagtataya ng time series at nag-load ng dataset na nagpapakita ng pagbabago-bago ng electrical load sa loob ng isang panahon. +Sa nakaraang aralin, natutunan mo ang tungkol sa time series forecasting at nag-load ng dataset na nagpapakita ng pagbabago-bago ng electrical load sa loob ng isang panahon. [![Panimula sa ARIMA](https://img.youtube.com/vi/IUSk-YDau10/0.jpg)](https://youtu.be/IUSk-YDau10 "Panimula sa ARIMA") -> 🎥 I-click ang larawan sa itaas para sa isang video: Isang maikling pagpapakilala sa mga ARIMA model. Ang halimbawa ay ginawa sa R, ngunit ang mga konsepto ay pangkalahatan. +> 🎥 I-click ang imahe sa itaas para sa isang video: Maikling pagpapakilala sa ARIMA models. Ang halimbawa ay ginawa sa R, ngunit ang mga konsepto ay pangkalahatan. -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/43/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) ## Panimula @@ -25,31 +25,31 @@ Sa araling ito, matutuklasan mo ang isang partikular na paraan ng paggawa ng mga Upang magamit ang ARIMA, may ilang mga konsepto na kailangan mong malaman: -- 🎓 **Stationarity**. Sa konteksto ng estadistika, ang stationarity ay tumutukoy sa data na ang distribusyon ay hindi nagbabago kapag inilipat sa oras. Ang non-stationary na data, samakatuwid, ay nagpapakita ng pagbabago-bago dahil sa mga trend na kailangang baguhin upang ma-analisa. Halimbawa, ang seasonality ay maaaring magdulot ng pagbabago-bago sa data at maaaring alisin sa pamamagitan ng proseso ng 'seasonal-differencing'. +- 🎓 **Stationarity**. Sa konteksto ng estadistika, ang stationarity ay tumutukoy sa data na ang distribusyon ay hindi nagbabago kapag inilipat sa oras. Ang non-stationary na data, samakatuwid, ay nagpapakita ng pagbabago-bago dahil sa mga trend na kailangang baguhin upang ma-analisa. Ang seasonality, halimbawa, ay maaaring magpakilala ng pagbabago-bago sa data at maaaring alisin sa pamamagitan ng proseso ng 'seasonal-differencing'. -- 🎓 **[Differencing](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**. Ang differencing ng data, mula sa estadistikal na konteksto, ay tumutukoy sa proseso ng pagbabago ng non-stationary na data upang gawing stationary sa pamamagitan ng pag-aalis ng hindi pare-parehong trend. "Ang differencing ay nag-aalis ng mga pagbabago sa antas ng isang time series, inaalis ang trend at seasonality, at sa gayon ay pinapatatag ang mean ng time series." [Paper ni Shixiong et al](https://arxiv.org/abs/1904.07632) +- 🎓 **[Differencing](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**. Ang differencing ng data, mula sa konteksto ng estadistika, ay tumutukoy sa proseso ng pagbabago ng non-stationary na data upang gawing stationary sa pamamagitan ng pag-aalis ng non-constant trend nito. "Ang differencing ay nag-aalis ng mga pagbabago sa antas ng isang time series, inaalis ang trend at seasonality, at sa gayon ay pinapatatag ang mean ng time series." [Paper ni Shixiong et al](https://arxiv.org/abs/1904.07632) -## ARIMA sa Konteksto ng Time Series +## ARIMA sa konteksto ng time series -Tingnan natin ang mga bahagi ng ARIMA upang mas maunawaan kung paano ito nakakatulong sa pagmomodelo ng time series at sa paggawa ng mga prediksyon. +Tuklasin natin ang mga bahagi ng ARIMA upang mas maunawaan kung paano ito nakakatulong sa pagmomodelo ng time series at sa paggawa ng mga prediksyon. -- **AR - para sa AutoRegressive**. Ang mga autoregressive model, tulad ng ipinahihiwatig ng pangalan, ay tumitingin 'pabalik' sa oras upang suriin ang mga nakaraang halaga sa iyong data at gumawa ng mga palagay tungkol dito. Ang mga nakaraang halagang ito ay tinatawag na 'lags'. Halimbawa, ang data na nagpapakita ng buwanang benta ng mga lapis. Ang kabuuang benta bawat buwan ay itinuturing na isang 'evolving variable' sa dataset. Ang modelong ito ay binubuo bilang "ang evolving variable ng interes ay nire-regress sa sarili nitong lagged (i.e., nakaraang) mga halaga." [wikipedia](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) +- **AR - para sa AutoRegressive**. Ang autoregressive models, gaya ng ipinahihiwatig ng pangalan, ay tumitingin 'pabalik' sa oras upang suriin ang mga nakaraang halaga sa iyong data at gumawa ng mga palagay tungkol dito. Ang mga nakaraang halaga na ito ay tinatawag na 'lags'. Halimbawa, ang data na nagpapakita ng buwanang benta ng mga lapis. Ang kabuuang benta bawat buwan ay itinuturing na isang 'evolving variable' sa dataset. Ang modelong ito ay binuo kung saan ang "evolving variable of interest ay nireregres sa sarili nitong lagged (i.e., prior) values." [wikipedia](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) -- **I - para sa Integrated**. Sa kaibahan sa mga katulad na 'ARMA' model, ang 'I' sa ARIMA ay tumutukoy sa *[integrated](https://wikipedia.org/wiki/Order_of_integration)* na aspeto nito. Ang data ay 'integrated' kapag ang mga hakbang ng differencing ay inilapat upang maalis ang non-stationarity. +- **I - para sa Integrated**. Sa halip na ang katulad na 'ARMA' models, ang 'I' sa ARIMA ay tumutukoy sa *[integrated](https://wikipedia.org/wiki/Order_of_integration)* na aspeto nito. Ang data ay 'integrated' kapag ang mga hakbang sa differencing ay inilapat upang alisin ang non-stationarity. - **MA - para sa Moving Average**. Ang [moving-average](https://wikipedia.org/wiki/Moving-average_model) na aspeto ng modelong ito ay tumutukoy sa output variable na natutukoy sa pamamagitan ng pagmamasid sa kasalukuyan at nakaraang mga halaga ng lags. -Sa madaling salita: Ang ARIMA ay ginagamit upang gawing akma ang isang modelo sa espesyal na anyo ng time series data hangga't maaari. +Bottom line: Ang ARIMA ay ginagamit upang gawing akma ang modelo sa espesyal na anyo ng time series data nang mas malapit hangga't maaari. -## Ehersisyo - Gumawa ng ARIMA Model +## Ehersisyo - gumawa ng ARIMA model -Buksan ang [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/working) na folder sa araling ito at hanapin ang [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/2-ARIMA/working/notebook.ipynb) na file. +Buksan ang [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/working) folder sa araling ito at hanapin ang [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/2-ARIMA/working/notebook.ipynb) file. -1. Patakbuhin ang notebook upang i-load ang `statsmodels` Python library; kakailanganin mo ito para sa mga ARIMA model. +1. Patakbuhin ang notebook upang i-load ang `statsmodels` Python library; kakailanganin mo ito para sa ARIMA models. 1. I-load ang mga kinakailangang library. -1. Ngayon, i-load ang ilang karagdagang library na kapaki-pakinabang para sa pag-plot ng data: +1. Ngayon, mag-load ng ilang karagdagang library na kapaki-pakinabang para sa pag-plot ng data: ```python import os @@ -72,7 +72,7 @@ Buksan ang [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/ warnings.filterwarnings("ignore") # specify to ignore warning messages ``` -1. I-load ang data mula sa `/data/energy.csv` na file sa isang Pandas dataframe at tingnan ito: +1. I-load ang data mula sa `/data/energy.csv` file sa isang Pandas dataframe at tingnan ito: ```python energy = load_data('./data')[['load']] @@ -90,9 +90,9 @@ Buksan ang [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/ Ngayon, gumawa tayo ng modelo! -### Gumawa ng Training at Testing Dataset +### Gumawa ng training at testing datasets -Ngayon na na-load mo na ang data, maaari mo na itong hatiin sa train at test set. Ite-train mo ang iyong modelo sa train set. Gaya ng dati, pagkatapos ng training ng modelo, susuriin mo ang katumpakan nito gamit ang test set. Kailangan mong tiyakin na ang test set ay sumasaklaw sa mas huling panahon kumpara sa training set upang matiyak na ang modelo ay hindi makakakuha ng impormasyon mula sa mga hinaharap na panahon. +Ngayon na na-load mo na ang data, maaari mo itong hatiin sa train at test sets. Ite-train mo ang iyong modelo sa train set. Gaya ng dati, pagkatapos ng training ng modelo, susuriin mo ang katumpakan nito gamit ang test set. Kailangan mong tiyakin na ang test set ay sumasaklaw sa mas huling panahon kumpara sa training set upang matiyak na ang modelo ay hindi makakakuha ng impormasyon mula sa mga hinaharap na panahon. 1. Maglaan ng dalawang buwang panahon mula Setyembre 1 hanggang Oktubre 31, 2014 para sa training set. Ang test set ay magsasama ng dalawang buwang panahon mula Nobyembre 1 hanggang Disyembre 31, 2014: @@ -101,7 +101,7 @@ Ngayon na na-load mo na ang data, maaari mo na itong hatiin sa train at test set test_start_dt = '2014-12-30 00:00:00' ``` - Dahil ang data na ito ay sumasalamin sa pang-araw-araw na pagkonsumo ng enerhiya, mayroong isang malakas na pattern ng seasonality, ngunit ang pagkonsumo ay pinaka-katulad sa pagkonsumo sa mga mas kamakailang araw. + Dahil ang data na ito ay sumasalamin sa pang-araw-araw na konsumo ng enerhiya, mayroong malakas na pattern ng seasonality, ngunit ang konsumo ay pinaka-katulad sa konsumo sa mas kamakailang mga araw. 1. I-visualize ang mga pagkakaiba: @@ -114,15 +114,15 @@ Ngayon na na-load mo na ang data, maaari mo na itong hatiin sa train at test set plt.show() ``` - ![training at testing data](../../../../translated_images/train-test.8928d14e5b91fc942f0ca9201b2d36c890ea7e98f7619fd94f75de3a4c2bacb9.tl.png) + ![training at testing data](../../../../7-TimeSeries/2-ARIMA/images/train-test.png) - Samakatuwid, ang paggamit ng isang medyo maliit na window ng oras para sa pagte-train ng data ay dapat na sapat. + Samakatuwid, ang paggamit ng medyo maliit na window ng oras para sa training ng data ay dapat na sapat. - > Tandaan: Dahil ang function na ginagamit natin upang i-fit ang ARIMA model ay gumagamit ng in-sample validation habang nagte-train, hindi na tayo gagamit ng validation data. + > Tandaan: Dahil ang function na ginagamit natin upang i-fit ang ARIMA model ay gumagamit ng in-sample validation sa panahon ng fitting, hindi na natin gagamitin ang validation data. -### Ihanda ang Data para sa Training +### Ihanda ang data para sa training -Ngayon, kailangan mong ihanda ang data para sa training sa pamamagitan ng pagsasagawa ng filtering at scaling ng iyong data. I-filter ang iyong dataset upang isama lamang ang mga kinakailangang panahon at mga column, at i-scale ito upang matiyak na ang data ay naka-project sa interval na 0,1. +Ngayon, kailangan mong ihanda ang data para sa training sa pamamagitan ng pag-filter at pag-scale ng iyong data. I-filter ang iyong dataset upang isama lamang ang mga kinakailangang panahon at mga column, at i-scale upang matiyak na ang data ay naka-project sa interval na 0,1. 1. I-filter ang orihinal na dataset upang isama lamang ang mga nabanggit na panahon bawat set at isama lamang ang kinakailangang column na 'load' kasama ang petsa: @@ -141,7 +141,7 @@ Ngayon, kailangan mong ihanda ang data para sa training sa pamamagitan ng pagsas Test data shape: (48, 1) ``` -1. I-scale ang data upang mapunta ito sa saklaw na (0, 1). +1. I-scale ang data upang mapunta sa saklaw (0, 1). ```python scaler = MinMaxScaler() @@ -157,15 +157,15 @@ Ngayon, kailangan mong ihanda ang data para sa training sa pamamagitan ng pagsas plt.show() ``` - ![orihinal](../../../../translated_images/original.b2b15efe0ce92b8745918f071dceec2231661bf49c8db6918e3ff4b3b0b183c2.tl.png) + ![orihinal](../../../../7-TimeSeries/2-ARIMA/images/original.png) > Ang orihinal na data - ![scaled](../../../../translated_images/scaled.e35258ca5cd3d43f86d5175e584ba96b38d51501f234abf52e11f4fe2631e45f.tl.png) + ![scaled](../../../../7-TimeSeries/2-ARIMA/images/scaled.png) > Ang scaled na data -1. Ngayon na na-calibrate mo na ang scaled na data, maaari mo nang i-scale ang test data: +1. Ngayon na na-calibrate mo na ang scaled na data, maaari mong i-scale ang test data: ```python test['load'] = scaler.transform(test) @@ -176,21 +176,21 @@ Ngayon, kailangan mong ihanda ang data para sa training sa pamamagitan ng pagsas Panahon na upang ipatupad ang ARIMA! Gagamitin mo na ngayon ang `statsmodels` library na na-install mo kanina. -Ngayon kailangan mong sundin ang ilang hakbang: +Kailangan mong sundin ang ilang hakbang: 1. Tukuyin ang modelo sa pamamagitan ng pagtawag sa `SARIMAX()` at paglalagay ng mga parameter ng modelo: p, d, at q parameters, at P, D, at Q parameters. - 2. Ihanda ang modelo para sa training data sa pamamagitan ng pagtawag sa `fit()` function. - 3. Gumawa ng mga prediksyon sa pamamagitan ng pagtawag sa `forecast()` function at pagtukoy ng bilang ng mga hakbang (ang `horizon`) na ipi-predict. + 2. Ihanda ang modelo para sa training data sa pamamagitan ng pagtawag sa fit() function. + 3. Gumawa ng mga prediksyon sa pamamagitan ng pagtawag sa `forecast()` function at pagtukoy sa bilang ng mga hakbang (ang `horizon`) para sa forecast. -> 🎓 Ano ang mga parameter na ito? Sa isang ARIMA model, mayroong 3 parameter na ginagamit upang makatulong sa pagmomodelo ng mga pangunahing aspeto ng time series: seasonality, trend, at noise. Ang mga parameter na ito ay: +> 🎓 Ano ang mga parameter na ito? Sa isang ARIMA model, mayroong 3 parameter na ginagamit upang makatulong sa pagmomodelo ng mga pangunahing aspeto ng isang time series: seasonality, trend, at noise. Ang mga parameter na ito ay: -`p`: ang parameter na nauugnay sa auto-regressive na aspeto ng modelo, na sumasaklaw sa *nakaraang* mga halaga. -`d`: ang parameter na nauugnay sa integrated na bahagi ng modelo, na nakakaapekto sa dami ng *differencing* (🎓 tandaan ang differencing 👆?) na ilalapat sa isang time series. +`p`: ang parameter na nauugnay sa auto-regressive na aspeto ng modelo, na naglalaman ng *nakaraang* mga halaga. +`d`: ang parameter na nauugnay sa integrated na bahagi ng modelo, na nakakaapekto sa dami ng *differencing* (🎓 tandaan ang differencing 👆?) na ilalapat sa isang time series. `q`: ang parameter na nauugnay sa moving-average na bahagi ng modelo. -> Tandaan: Kung ang iyong data ay may seasonal na aspeto - tulad ng data na ito - gagamit tayo ng seasonal ARIMA model (SARIMA). Sa kasong iyon, kailangan mong gumamit ng isa pang set ng mga parameter: `P`, `D`, at `Q` na naglalarawan ng parehong mga asosasyon tulad ng `p`, `d`, at `q`, ngunit tumutukoy sa mga seasonal na bahagi ng modelo. +> Tandaan: Kung ang iyong data ay may seasonal na aspeto - na mayroon ang data na ito - , gumagamit tayo ng seasonal ARIMA model (SARIMA). Sa kasong iyon, kailangan mong gumamit ng isa pang set ng mga parameter: `P`, `D`, at `Q` na naglalarawan ng parehong mga asosasyon tulad ng `p`, `d`, at `q`, ngunit tumutukoy sa mga seasonal na bahagi ng modelo. -1. Magsimula sa pamamagitan ng pagtatakda ng iyong gustong horizon value. Subukan natin ang 3 oras: +1. Magsimula sa pamamagitan ng pagtatakda ng iyong preferred na horizon value. Subukan natin ang 3 oras: ```python # Specify the number of steps to forecast ahead @@ -198,9 +198,9 @@ Ngayon kailangan mong sundin ang ilang hakbang: print('Forecasting horizon:', HORIZON, 'hours') ``` - Ang pagpili ng pinakamahusay na mga halaga para sa mga parameter ng ARIMA model ay maaaring maging mahirap dahil ito ay medyo subjective at nangangailangan ng oras. Maaari mong isaalang-alang ang paggamit ng `auto_arima()` function mula sa [`pyramid` library](https://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html). + Ang pagpili ng pinakamahusay na mga halaga para sa mga parameter ng ARIMA model ay maaaring maging hamon dahil ito ay medyo subjective at nakakaubos ng oras. Maaari mong isaalang-alang ang paggamit ng `auto_arima()` function mula sa [`pyramid` library](https://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html). -1. Sa ngayon, subukan ang ilang manu-manong pagpili upang makahanap ng magandang modelo. +1. Sa ngayon, subukan ang ilang manual na pagpipilian upang makahanap ng magandang modelo. ```python order = (4, 1, 0) @@ -212,19 +212,19 @@ Ngayon kailangan mong sundin ang ilang hakbang: print(results.summary()) ``` - Isang talahanayan ng mga resulta ang ipi-print. + Isang table ng mga resulta ang naka-print. Nagawa mo na ang iyong unang modelo! Ngayon kailangan nating maghanap ng paraan upang suriin ito. -### Suriin ang Iyong Modelo +### Suriin ang iyong modelo -Upang suriin ang iyong modelo, maaari mong isagawa ang tinatawag na `walk forward` validation. Sa praktika, ang mga time series model ay muling tine-train tuwing may bagong data na magagamit. Pinapayagan nito ang modelo na gumawa ng pinakamahusay na prediksyon sa bawat hakbang ng oras. +Upang suriin ang iyong modelo, maaari mong isagawa ang tinatawag na `walk forward` validation. Sa praktika, ang mga time series model ay muling tina-train tuwing may bagong data na magagamit. Pinapayagan nito ang modelo na gumawa ng pinakamahusay na forecast sa bawat time step. -Simula sa simula ng time series gamit ang teknik na ito, i-train ang modelo sa train dataset. Pagkatapos ay gumawa ng prediksyon sa susunod na hakbang ng oras. Ang prediksyon ay sinusuri laban sa kilalang halaga. Ang training set ay pagkatapos ay pinalalawak upang isama ang kilalang halaga at inuulit ang proseso. +Simula sa simula ng time series gamit ang teknik na ito, i-train ang modelo sa train data set. Pagkatapos ay gumawa ng prediksyon sa susunod na time step. Ang prediksyon ay sinusuri laban sa kilalang halaga. Ang training set ay pagkatapos ay pinalawak upang isama ang kilalang halaga at ang proseso ay inuulit. -> Tandaan: Dapat mong panatilihing nakapirmi ang window ng training set para sa mas mahusay na training upang sa tuwing magdaragdag ka ng bagong obserbasyon sa training set, aalisin mo ang obserbasyon mula sa simula ng set. +> Tandaan: Dapat mong panatilihing nakapirmi ang window ng training set para sa mas mahusay na training upang sa tuwing magdadagdag ka ng bagong obserbasyon sa training set, aalisin mo ang obserbasyon mula sa simula ng set. -Ang prosesong ito ay nagbibigay ng mas matibay na pagtatantiya kung paano magpe-perform ang modelo sa praktika. Gayunpaman, may computational cost ito dahil sa paglikha ng maraming modelo. Katanggap-tanggap ito kung maliit ang data o simple ang modelo, ngunit maaaring maging isyu sa mas malaking sukat. +Ang prosesong ito ay nagbibigay ng mas matibay na pagtatantya kung paano gagana ang modelo sa praktika. Gayunpaman, ito ay may computation cost ng paggawa ng napakaraming modelo. Katanggap-tanggap ito kung maliit ang data o kung simple ang modelo, ngunit maaaring maging isyu sa mas malaking sukat. Ang walk-forward validation ay ang gold standard ng pagsusuri ng time series model at inirerekomenda para sa iyong sariling mga proyekto. @@ -250,7 +250,7 @@ Ang walk-forward validation ay ang gold standard ng pagsusuri ng time series mod Ang data ay inilipat nang pahalang ayon sa horizon point nito. -1. Gumawa ng mga prediksyon sa iyong test data gamit ang sliding window approach sa isang loop na kasinghaba ng test data: +1. Gumawa ng mga prediksyon sa iyong test data gamit ang sliding window approach sa isang loop na kasing laki ng haba ng test data: ```python %%time @@ -304,7 +304,7 @@ Ang walk-forward validation ay ang gold standard ng pagsusuri ng time series mod eval_df.head() ``` - Output + Output | | | timestamp | h | prediction | actual | | --- | ---------- | --------- | --- | ---------- | -------- | | 0 | 2014-12-30 | 00:00:00 | t+1 | 3,008.74 | 3,023.00 | @@ -313,18 +313,19 @@ Ang walk-forward validation ay ang gold standard ng pagsusuri ng time series mod | 3 | 2014-12-30 | 03:00:00 | t+1 | 2,917.69 | 2,886.00 | | 4 | 2014-12-30 | 04:00:00 | t+1 | 2,946.99 | 2,963.00 | - Obserbahan ang prediksyon ng oras-oras na data, kumpara sa aktwal na load. Gaano ito katumpak? + Obserbahan ang prediksyon ng hourly data, kumpara sa aktwal na load. Gaano ito katumpak? -### Suriin ang Katumpakan ng Modelo +### Suriin ang katumpakan ng modelo Suriin ang katumpakan ng iyong modelo sa pamamagitan ng pagsubok sa mean absolute percentage error (MAPE) nito sa lahat ng prediksyon. > **🧮 Ipakita ang matematika** > -> ![MAPE](../../../../translated_images/mape.fd87bbaf4d346846df6af88b26bf6f0926bf9a5027816d5e23e1200866e3e8a4.tl.png) +> ![MAPE](../../../../7-TimeSeries/2-ARIMA/images/mape.png) > -> Ang [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) ay ginagamit upang ipakita ang katumpakan ng prediksyon bilang isang ratio na tinutukoy ng pormula sa itaas. Ang pagkakaiba sa pagitan ng aktwal at prediksyon ay hinahati sa aktwal. -> -> "Ang absolute value sa kalkulasyong ito ay iniipon para sa bawat forecasted na punto sa oras at hinahati sa bilang ng mga fitted na puntos n." [wikipedia](https://wikipedia.org/wiki/Mean_absolute_percentage_error) +> [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) ay ginagamit upang ipakita ang katumpakan ng prediksyon bilang isang ratio na tinukoy ng formula sa itaas. Ang pagkakaiba sa pagitan ng aktwal +at hinulaang +ay hinati sa aktwal. +"Ang absolute value sa kalkulasyong ito ay iniipon para sa bawat forecasted na punto sa oras at hinati sa bilang ng mga fitted na puntos n." [wikipedia](https://wikipedia.org/wiki/Mean_absolute_percentage_error) 1. Ipakita ang equation sa code: ```python @@ -339,7 +340,7 @@ Suriin ang katumpakan ng iyong modelo sa pamamagitan ng pagsubok sa mean absolut print('One step forecast MAPE: ', (mape(eval_df[eval_df['h'] == 't+1']['prediction'], eval_df[eval_df['h'] == 't+1']['actual']))*100, '%') ``` - MAPE ng forecast sa isang hakbang: 0.5570581332313952 % + MAPE ng isang hakbang na forecast: 0.5570581332313952 % 1. I-print ang MAPE ng multi-step forecast: @@ -353,7 +354,7 @@ Suriin ang katumpakan ng iyong modelo sa pamamagitan ng pagsubok sa mean absolut Mas mababa ang numero, mas maganda: isipin na ang forecast na may MAPE na 10 ay may pagkakamali ng 10%. -1. Ngunit gaya ng lagi, mas madali makita ang ganitong uri ng sukat ng katumpakan sa biswal, kaya't i-plot natin ito: +1. Ngunit gaya ng dati, mas madali itong makita ang ganitong uri ng sukat ng katumpakan sa biswal, kaya't i-plot natin ito: ```python if(HORIZON == 1): @@ -381,7 +382,7 @@ Suriin ang katumpakan ng iyong modelo sa pamamagitan ng pagsubok sa mean absolut plt.show() ``` - ![isang time series model](../../../../translated_images/accuracy.2c47fe1bf15f44b3656651c84d5e2ba9b37cd929cd2aa8ab6cc3073f50570f4e.tl.png) + ![isang time series model](../../../../7-TimeSeries/2-ARIMA/images/accuracy.png) 🏆 Isang napakagandang plot, nagpapakita ng model na may mahusay na katumpakan. Magaling! @@ -389,13 +390,13 @@ Suriin ang katumpakan ng iyong modelo sa pamamagitan ng pagsubok sa mean absolut ## 🚀Hamunin -Suriin ang iba't ibang paraan para subukan ang katumpakan ng isang Time Series Model. Tinalakay natin ang MAPE sa araling ito, ngunit may iba pa bang mga pamamaraan na maaari mong gamitin? Mag-research at magdagdag ng anotasyon. Isang kapaki-pakinabang na dokumento ay matatagpuan [dito](https://otexts.com/fpp2/accuracy.html) +Pag-aralan ang iba't ibang paraan para subukan ang katumpakan ng isang Time Series Model. Tinalakay natin ang MAPE sa araling ito, ngunit may iba pa bang mga pamamaraan na maaari mong gamitin? Saliksikin ang mga ito at magbigay ng anotasyon. Isang kapaki-pakinabang na dokumento ay matatagpuan [dito](https://otexts.com/fpp2/accuracy.html) -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/44/) +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -## Review at Pag-aaral sa Sarili +## Review at Pag-aaral ng Sarili -Ang araling ito ay tumatalakay lamang sa mga pangunahing kaalaman ng Time Series Forecasting gamit ang ARIMA. Maglaan ng oras upang palalimin ang iyong kaalaman sa pamamagitan ng pagsuri sa [repository na ito](https://microsoft.github.io/forecasting/) at sa iba't ibang uri ng modelo nito upang matutunan ang iba pang paraan ng paggawa ng Time Series models. +Ang araling ito ay tumatalakay lamang sa mga pangunahing kaalaman ng Time Series Forecasting gamit ang ARIMA. Maglaan ng oras upang palalimin ang iyong kaalaman sa pamamagitan ng pagsaliksik sa [repositoryong ito](https://microsoft.github.io/forecasting/) at sa iba't ibang uri ng modelo nito upang matutunan ang iba pang paraan ng paggawa ng Time Series models. ## Takdang-Aralin @@ -404,4 +405,4 @@ Ang araling ito ay tumatalakay lamang sa mga pangunahing kaalaman ng Time Series --- **Paunawa**: -Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito. \ No newline at end of file +Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito. \ No newline at end of file diff --git a/translations/tl/7-TimeSeries/3-SVR/README.md b/translations/tl/7-TimeSeries/3-SVR/README.md index d2fca2aa..8371af08 100644 --- a/translations/tl/7-TimeSeries/3-SVR/README.md +++ b/translations/tl/7-TimeSeries/3-SVR/README.md @@ -1,17 +1,17 @@ # Pagtataya ng Time Series gamit ang Support Vector Regressor -Sa nakaraang aralin, natutunan mo kung paano gamitin ang ARIMA model para gumawa ng mga prediksyon sa time series. Ngayon, tatalakayin natin ang Support Vector Regressor model, isang uri ng regressor model na ginagamit para hulaan ang mga tuloy-tuloy na datos. +Sa nakaraang aralin, natutunan mo kung paano gamitin ang ARIMA model para gumawa ng mga prediksyon sa time series. Ngayon, titingnan natin ang Support Vector Regressor model, isang regressor model na ginagamit para magpredikta ng tuloy-tuloy na data. -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/51/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) ## Panimula @@ -21,21 +21,21 @@ Sa araling ito, matutuklasan mo ang isang partikular na paraan ng paggawa ng mga Bago maunawaan ang kahalagahan ng SVR sa prediksyon ng time series, narito ang ilang mahahalagang konsepto na kailangan mong malaman: -- **Regression:** Isang supervised learning technique na ginagamit upang hulaan ang tuloy-tuloy na mga halaga mula sa isang hanay ng mga input. Ang ideya ay magkasya ng isang kurba (o linya) sa feature space na may pinakamaraming bilang ng mga data point. [I-click dito](https://en.wikipedia.org/wiki/Regression_analysis) para sa karagdagang impormasyon. -- **Support Vector Machine (SVM):** Isang uri ng supervised machine learning model na ginagamit para sa classification, regression, at outliers detection. Ang modelo ay isang hyperplane sa feature space, na sa kaso ng classification ay nagsisilbing boundary, at sa kaso ng regression ay nagsisilbing best-fit line. Sa SVM, karaniwang ginagamit ang Kernel function upang i-transform ang dataset sa isang space na may mas mataas na bilang ng dimensyon, upang mas madaling maihiwalay ang mga ito. [I-click dito](https://en.wikipedia.org/wiki/Support-vector_machine) para sa karagdagang impormasyon tungkol sa SVMs. -- **Support Vector Regressor (SVR):** Isang uri ng SVM na ginagamit upang mahanap ang best-fit line (na sa kaso ng SVM ay isang hyperplane) na may pinakamaraming bilang ng mga data point. +- **Regression:** Isang supervised learning technique para magpredikta ng tuloy-tuloy na mga halaga mula sa isang set ng inputs. Ang ideya ay mag-fit ng kurba (o linya) sa feature space na may pinakamaraming data points. [I-click dito](https://en.wikipedia.org/wiki/Regression_analysis) para sa karagdagang impormasyon. +- **Support Vector Machine (SVM):** Isang uri ng supervised machine learning model na ginagamit para sa classification, regression, at outliers detection. Ang modelo ay isang hyperplane sa feature space, na sa kaso ng classification ay nagsisilbing boundary, at sa kaso ng regression ay nagsisilbing best-fit line. Sa SVM, karaniwang ginagamit ang Kernel function para i-transform ang dataset sa mas mataas na dimensional space upang mas madaling maihiwalay ang mga ito. [I-click dito](https://en.wikipedia.org/wiki/Support-vector_machine) para sa karagdagang impormasyon tungkol sa SVMs. +- **Support Vector Regressor (SVR):** Isang uri ng SVM na naglalayong hanapin ang best-fit line (na sa kaso ng SVM ay isang hyperplane) na may pinakamaraming data points. ### Bakit SVR? [^1] -Sa nakaraang aralin, natutunan mo ang tungkol sa ARIMA, na isang matagumpay na statistical linear method para sa pag-forecast ng time series data. Gayunpaman, sa maraming kaso, ang time series data ay may *non-linearity* na hindi kayang i-map ng mga linear na modelo. Sa ganitong mga kaso, ang kakayahan ng SVM na isaalang-alang ang non-linearity sa datos para sa regression tasks ay nagiging dahilan kung bakit matagumpay ang SVR sa time series forecasting. +Sa nakaraang aralin, natutunan mo ang tungkol sa ARIMA, isang napaka-epektibong statistical linear method para mag-forecast ng time series data. Gayunpaman, sa maraming kaso, ang time series data ay may *non-linearity*, na hindi maipapakita ng linear models. Sa ganitong mga kaso, ang kakayahan ng SVM na isaalang-alang ang non-linearity sa data para sa regression tasks ay nagiging dahilan kung bakit matagumpay ang SVR sa time series forecasting. ## Ehersisyo - gumawa ng SVR model -Ang mga unang hakbang para sa paghahanda ng datos ay pareho sa nakaraang aralin tungkol sa [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA). +Ang unang ilang hakbang para sa paghahanda ng data ay pareho sa nakaraang aralin tungkol sa [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA). Buksan ang [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/3-SVR/working) folder sa araling ito at hanapin ang [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/3-SVR/working/notebook.ipynb) file.[^2] -1. Patakbuhin ang notebook at i-import ang mga kinakailangang library: [^2] +1. Patakbuhin ang notebook at i-import ang mga kinakailangang library: [^2] ```python import sys @@ -56,7 +56,7 @@ Buksan ang [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/ from common.utils import load_data, mape ``` -2. I-load ang data mula sa `/data/energy.csv` file papunta sa isang Pandas dataframe at tingnan ito: [^2] +2. I-load ang data mula sa `/data/energy.csv` file papunta sa isang Pandas dataframe at tingnan ito: [^2] ```python energy = load_data('../../data')[['load']] @@ -71,15 +71,15 @@ Buksan ang [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/ plt.show() ``` - ![full data](../../../../translated_images/full-data.a82ec9957e580e976f651a4fc38f280b9229c6efdbe3cfe7c60abaa9486d2cbe.tl.png) + ![full data](../../../../7-TimeSeries/3-SVR/images/full-data.png) - Ngayon, gawin natin ang ating SVR model. + Ngayon, gumawa tayo ng SVR model. ### Gumawa ng training at testing datasets -Ngayon na na-load na ang iyong data, maaari mo na itong hatiin sa train at test sets. Pagkatapos, i-reshape ang data upang makabuo ng isang time-step based dataset na kakailanganin para sa SVR. Ite-train mo ang iyong modelo sa train set. Kapag natapos na ang training ng modelo, susuriin mo ang katumpakan nito sa training set, testing set, at pagkatapos ay sa buong dataset upang makita ang kabuuang performance. Kailangan mong tiyakin na ang test set ay sumasaklaw sa mas huling panahon kumpara sa training set upang matiyak na ang modelo ay hindi makakakuha ng impormasyon mula sa mga hinaharap na panahon [^2] (isang sitwasyon na tinatawag na *Overfitting*). +Ngayon na na-load mo na ang data, maaari mo na itong hatiin sa train at test sets. Pagkatapos, i-reshape ang data upang makagawa ng time-step based dataset na kakailanganin para sa SVR. Ite-train mo ang iyong modelo sa train set. Pagkatapos ng training, susuriin mo ang accuracy nito sa training set, testing set, at sa buong dataset upang makita ang kabuuang performance. Siguraduhin na ang test set ay sumasaklaw sa mas huling panahon kumpara sa training set upang matiyak na ang modelo ay hindi makakakuha ng impormasyon mula sa mga hinaharap na panahon [^2] (isang sitwasyon na tinatawag na *Overfitting*). -1. Maglaan ng dalawang-buwang panahon mula Setyembre 1 hanggang Oktubre 31, 2014 para sa training set. Ang test set ay magsasama ng dalawang-buwang panahon mula Nobyembre 1 hanggang Disyembre 31, 2014: [^2] +1. Maglaan ng dalawang buwang panahon mula Setyembre 1 hanggang Oktubre 31, 2014 para sa training set. Ang test set ay magsasama ng dalawang buwang panahon mula Nobyembre 1 hanggang Disyembre 31, 2014: [^2] ```python train_start_dt = '2014-11-01 00:00:00' @@ -97,13 +97,13 @@ Ngayon na na-load na ang iyong data, maaari mo na itong hatiin sa train at test plt.show() ``` - ![training and testing data](../../../../translated_images/train-test.ead0cecbfc341921d4875eccf25fed5eefbb860cdbb69cabcc2276c49e4b33e5.tl.png) + ![training and testing data](../../../../7-TimeSeries/3-SVR/images/train-test.png) ### Ihanda ang data para sa training -Ngayon, kailangan mong ihanda ang data para sa training sa pamamagitan ng pag-filter at pag-scale ng iyong data. I-filter ang iyong dataset upang isama lamang ang mga kinakailangang panahon at mga column, at i-scale ito upang matiyak na ang data ay nasa interval na 0,1. +Ngayon, kailangan mong ihanda ang data para sa training sa pamamagitan ng pag-filter at pag-scale ng iyong data. I-filter ang dataset upang isama lamang ang mga kinakailangang panahon at column, at i-scale upang matiyak na ang data ay nasa interval na 0,1. -1. I-filter ang orihinal na dataset upang isama lamang ang mga nabanggit na panahon bawat set at isama lamang ang kinakailangang column na 'load' kasama ang petsa: [^2] +1. I-filter ang orihinal na dataset upang isama lamang ang mga nabanggit na panahon bawat set at ang kinakailangang column na 'load' kasama ang petsa: [^2] ```python train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] @@ -133,7 +133,7 @@ Ngayon, kailangan mong ihanda ang data para sa training sa pamamagitan ng pag-fi ### Gumawa ng data gamit ang time-steps [^1] -Para sa SVR, kailangan mong i-transform ang input data upang maging anyong `[batch, timesteps]`. Kaya, i-reshape ang umiiral na `train_data` at `test_data` upang magkaroon ng bagong dimensyon na tumutukoy sa timesteps. +Para sa SVR, i-transform ang input data upang maging anyo ng `[batch, timesteps]`. Kaya, i-reshape ang umiiral na `train_data` at `test_data` upang magkaroon ng bagong dimensyon na tumutukoy sa timesteps. ```python # Converting to numpy arrays @@ -141,7 +141,7 @@ train_data = train.values test_data = test.values ``` -Para sa halimbawang ito, gagamitin natin ang `timesteps = 5`. Kaya, ang mga input sa modelo ay ang data para sa unang 4 na timesteps, at ang output ay ang data para sa ika-5 timestep. +Para sa halimbawang ito, kukunin natin ang `timesteps = 5`. Kaya, ang inputs sa modelo ay ang data para sa unang 4 na timesteps, at ang output ay ang data para sa ika-5 timestep. ```python timesteps=5 @@ -186,13 +186,13 @@ print(x_test.shape, y_test.shape) ### Ipatupad ang SVR [^1] -Ngayon, oras na upang ipatupad ang SVR. Para sa karagdagang impormasyon tungkol sa implementasyong ito, maaari kang sumangguni sa [dokumentasyong ito](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html). Para sa ating implementasyon, sundin ang mga hakbang na ito: +Ngayon, oras na para ipatupad ang SVR. Para sa karagdagang impormasyon tungkol sa implementasyong ito, maaari kang sumangguni sa [dokumentasyong ito](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html). Para sa ating implementasyon, sundin ang mga hakbang na ito: -1. Tukuyin ang modelo sa pamamagitan ng pagtawag sa `SVR()` at paglagay ng mga hyperparameter ng modelo: kernel, gamma, c, at epsilon. -2. Ihanda ang modelo para sa training data sa pamamagitan ng pagtawag sa `fit()` function. -3. Gumawa ng mga prediksyon gamit ang `predict()` function. + 1. Tukuyin ang modelo sa pamamagitan ng pagtawag sa `SVR()` at paglalagay ng mga hyperparameters ng modelo: kernel, gamma, c, at epsilon + 2. Ihanda ang modelo para sa training data sa pamamagitan ng pagtawag sa `fit()` function + 3. Gumawa ng prediksyon gamit ang `predict()` function -Ngayon, gagawa tayo ng SVR model. Dito, gagamitin natin ang [RBF kernel](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel), at itatakda ang mga hyperparameter na gamma, C, at epsilon bilang 0.5, 10, at 0.05 ayon sa pagkakasunod. +Ngayon, gumawa tayo ng SVR model. Dito, gagamit tayo ng [RBF kernel](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel), at itatakda ang mga hyperparameters gamma, C, at epsilon bilang 0.5, 10, at 0.05 ayon sa pagkakasunod. ```python model = SVR(kernel='rbf',gamma=0.5, C=10, epsilon = 0.05) @@ -209,7 +209,7 @@ SVR(C=10, cache_size=200, coef0=0.0, degree=3, epsilon=0.05, gamma=0.5, kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False) ``` -#### Gumawa ng mga prediksyon gamit ang modelo [^1] +#### Gumawa ng prediksyon gamit ang modelo [^1] ```python y_train_pred = model.predict(x_train).reshape(-1,1) @@ -222,13 +222,13 @@ print(y_train_pred.shape, y_test_pred.shape) (1412, 1) (44, 1) ``` -Nagawa mo na ang iyong SVR! Ngayon, kailangan nating suriin ito. +Nagawa mo na ang iyong SVR! Ngayon, kailangan natin itong suriin. ### Suriin ang iyong modelo [^1] -Para sa pagsusuri, una nating i-scale pabalik ang data sa orihinal nitong sukat. Pagkatapos, upang suriin ang performance, i-plot ang orihinal at predicted na time series plot, at i-print ang resulta ng MAPE. +Para sa pagsusuri, una nating i-scale pabalik ang data sa orihinal na scale. Pagkatapos, upang suriin ang performance, i-plot ang orihinal at predicted time series plot, at i-print ang resulta ng MAPE. -I-scale pabalik ang predicted at orihinal na output: +I-scale ang predicted at orihinal na output: ```python # Scaling the predictions @@ -248,7 +248,7 @@ print(len(y_train), len(y_test)) #### Suriin ang performance ng modelo sa training at testing data [^1] -Kunin ang mga timestamp mula sa dataset upang ipakita sa x-axis ng ating plot. Tandaan na ginagamit natin ang unang ```timesteps-1``` na mga halaga bilang input para sa unang output, kaya ang mga timestamp para sa output ay magsisimula pagkatapos nito. +Kunin ang timestamps mula sa dataset upang ipakita sa x-axis ng ating plot. Tandaan na ginagamit natin ang unang ```timesteps-1``` na mga halaga bilang input para sa unang output, kaya ang timestamps para sa output ay magsisimula pagkatapos nito. ```python train_timestamps = energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)].index[timesteps-1:] @@ -261,7 +261,7 @@ print(len(train_timestamps), len(test_timestamps)) 1412 44 ``` -I-plot ang mga prediksyon para sa training data: +I-plot ang prediksyon para sa training data: ```python plt.figure(figsize=(25,6)) @@ -273,9 +273,9 @@ plt.title("Training data prediction") plt.show() ``` -![training data prediction](../../../../translated_images/train-data-predict.3c4ef4e78553104ffdd53d47a4c06414007947ea328e9261ddf48d3eafdefbbf.tl.png) +![training data prediction](../../../../7-TimeSeries/3-SVR/images/train-data-predict.png) -I-print ang MAPE para sa training data: +I-print ang MAPE para sa training data ```python print('MAPE for training data: ', mape(y_train_pred, y_train)*100, '%') @@ -285,7 +285,7 @@ print('MAPE for training data: ', mape(y_train_pred, y_train)*100, '%') MAPE for training data: 1.7195710200875551 % ``` -I-plot ang mga prediksyon para sa testing data: +I-plot ang prediksyon para sa testing data ```python plt.figure(figsize=(10,3)) @@ -296,9 +296,9 @@ plt.xlabel('Timestamp') plt.show() ``` -![testing data prediction](../../../../translated_images/test-data-predict.8afc47ee7e52874f514ebdda4a798647e9ecf44a97cc927c535246fcf7a28aa9.tl.png) +![testing data prediction](../../../../7-TimeSeries/3-SVR/images/test-data-predict.png) -I-print ang MAPE para sa testing data: +I-print ang MAPE para sa testing data ```python print('MAPE for testing data: ', mape(y_test_pred, y_test)*100, '%') @@ -352,7 +352,7 @@ plt.xlabel('Timestamp') plt.show() ``` -![full data prediction](../../../../translated_images/full-data-predict.4f0fed16a131c8f3bcc57a3060039dc7f2f714a05b07b68c513e0fe7fb3d8964.tl.png) +![full data prediction](../../../../7-TimeSeries/3-SVR/images/full-data-predict.png) ```python print('MAPE: ', mape(Y_pred, Y)*100, '%') @@ -362,32 +362,32 @@ print('MAPE: ', mape(Y_pred, Y)*100, '%') MAPE: 2.0572089029888656 % ``` -🏆 Napakagandang mga plot, nagpapakita ng modelo na may mahusay na katumpakan. Magaling! +🏆 Napakagandang mga plot, nagpapakita ng modelo na may mahusay na accuracy. Magaling! --- ## 🚀Hamunin -- Subukang baguhin ang mga hyperparameter (gamma, C, epsilon) habang ginagawa ang modelo at suriin ito sa data upang makita kung aling set ng hyperparameter ang nagbibigay ng pinakamahusay na resulta sa testing data. Para sa karagdagang impormasyon tungkol sa mga hyperparameter na ito, maaari kang sumangguni sa dokumento [dito](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel). -- Subukang gumamit ng iba't ibang kernel functions para sa modelo at suriin ang kanilang performance sa dataset. Makakatulong ang dokumento na matatagpuan [dito](https://scikit-learn.org/stable/modules/svm.html#kernel-functions). -- Subukang gumamit ng iba't ibang halaga para sa `timesteps` para sa modelo upang tumingin pabalik para gumawa ng prediksyon. +- Subukang baguhin ang mga hyperparameters (gamma, C, epsilon) habang gumagawa ng modelo at suriin sa data upang makita kung aling set ng hyperparameters ang nagbibigay ng pinakamahusay na resulta sa testing data. Para sa karagdagang impormasyon tungkol sa mga hyperparameters, maaari kang sumangguni sa dokumento [dito](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel). +- Subukang gumamit ng iba't ibang kernel functions para sa modelo at suriin ang kanilang performance sa dataset. Makakatulong ang dokumento [dito](https://scikit-learn.org/stable/modules/svm.html#kernel-functions). +- Subukang gumamit ng iba't ibang halaga para sa `timesteps` para sa modelo upang mag-look back para gumawa ng prediksyon. -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/52/) +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -## Review at Pag-aaral sa Sarili +## Review & Self Study -Ang araling ito ay nagpakilala sa aplikasyon ng SVR para sa Time Series Forecasting. Para sa karagdagang impormasyon tungkol sa SVR, maaari kang sumangguni sa [blog na ito](https://www.analyticsvidhya.com/blog/2020/03/support-vector-regression-tutorial-for-machine-learning/). Ang [dokumentasyong ito sa scikit-learn](https://scikit-learn.org/stable/modules/svm.html) ay nagbibigay ng mas komprehensibong paliwanag tungkol sa SVMs sa pangkalahatan, [SVRs](https://scikit-learn.org/stable/modules/svm.html#regression), at iba pang detalye ng implementasyon tulad ng iba't ibang [kernel functions](https://scikit-learn.org/stable/modules/svm.html#kernel-functions) na maaaring gamitin, at ang kanilang mga parameter. +Ang araling ito ay nagpakilala sa aplikasyon ng SVR para sa Time Series Forecasting. Para sa karagdagang impormasyon tungkol sa SVR, maaari kang sumangguni sa [blog na ito](https://www.analyticsvidhya.com/blog/2020/03/support-vector-regression-tutorial-for-machine-learning/). Ang [dokumentasyong ito sa scikit-learn](https://scikit-learn.org/stable/modules/svm.html) ay nagbibigay ng mas komprehensibong paliwanag tungkol sa SVMs sa pangkalahatan, [SVRs](https://scikit-learn.org/stable/modules/svm.html#regression), at iba pang detalye ng implementasyon tulad ng iba't ibang [kernel functions](https://scikit-learn.org/stable/modules/svm.html#kernel-functions) na maaaring gamitin, at ang kanilang mga parameters. -## Takdang Aralin +## Takdang-Aralin [Isang bagong SVR model](assignment.md) -## Mga Kredito +## Credits -[^1]: Ang teksto, code, at output sa seksyong ito ay kontribusyon ni [@AnirbanMukherjeeXD](https://github.com/AnirbanMukherjeeXD) +[^1]: Ang teksto, code, at output sa seksyong ito ay kontribusyon ni [@AnirbanMukherjeeXD](https://github.com/AnirbanMukherjeeXD) [^2]: Ang teksto, code, at output sa seksyong ito ay kinuha mula sa [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA) --- **Paunawa**: -Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file +Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file diff --git a/translations/tl/8-Reinforcement/1-QLearning/README.md b/translations/tl/8-Reinforcement/1-QLearning/README.md index e577bdfd..e641117f 100644 --- a/translations/tl/8-Reinforcement/1-QLearning/README.md +++ b/translations/tl/8-Reinforcement/1-QLearning/README.md @@ -1,15 +1,15 @@ # Panimula sa Reinforcement Learning at Q-Learning -![Buod ng reinforcement sa machine learning sa isang sketchnote](../../../../translated_images/ml-reinforcement.94024374d63348dbb3571c343ca7ddabef72adac0b8086d47164b769ba3a8a1d.tl.png) +![Buod ng reinforcement sa machine learning sa isang sketchnote](../../../../sketchnotes/ml-reinforcement.png) > Sketchnote ni [Tomomi Imura](https://www.twitter.com/girlie_mac) Ang reinforcement learning ay may tatlong mahalagang konsepto: ang agent, ilang estado, at isang hanay ng mga aksyon sa bawat estado. Sa pamamagitan ng pagsasagawa ng isang aksyon sa isang tiyak na estado, binibigyan ang agent ng gantimpala. Isipin muli ang laro sa computer na Super Mario. Ikaw si Mario, nasa isang antas ng laro, nakatayo sa gilid ng bangin. Sa itaas mo ay may barya. Ikaw bilang si Mario, nasa isang antas ng laro, sa isang tiyak na posisyon ... iyon ang iyong estado. Ang paggalaw ng isang hakbang pakanan (isang aksyon) ay magdadala sa iyo sa gilid, at magbibigay iyon sa iyo ng mababang numerong puntos. Gayunpaman, ang pagpindot sa pindutan ng pagtalon ay magbibigay-daan sa iyo na makakuha ng puntos at manatiling buhay. Iyon ay isang positibong resulta at dapat kang gantimpalaan ng positibong numerong puntos. @@ -20,9 +20,9 @@ Sa pamamagitan ng paggamit ng reinforcement learning at isang simulator (ang lar > 🎥 I-click ang imahe sa itaas upang marinig si Dmitry na talakayin ang Reinforcement Learning -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/45/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -## Mga Kinakailangan at Setup +## Mga Paunang Kailangan at Setup Sa araling ito, mag-eeksperimento tayo gamit ang ilang code sa Python. Dapat mong magawang patakbuhin ang Jupyter Notebook code mula sa araling ito, alinman sa iyong computer o sa cloud. @@ -32,7 +32,7 @@ Maaari mong buksan ang [notebook ng aralin](https://github.com/microsoft/ML-For- ## Panimula -Sa araling ito, susuriin natin ang mundo ng **[Peter and the Wolf](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**, na inspirasyon ng isang musikal na kwento ng isang Russian composer, [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Gagamit tayo ng **Reinforcement Learning** upang hayaan si Peter na tuklasin ang kanyang kapaligiran, mangolekta ng masasarap na mansanas, at iwasan ang makasalubong ang lobo. +Sa araling ito, susuriin natin ang mundo ng **[Peter and the Wolf](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**, na inspirasyon ng isang musikal na kwento ng isang Russian composer, [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Gagamit tayo ng **Reinforcement Learning** upang tulungan si Peter na tuklasin ang kanyang kapaligiran, mangolekta ng masasarap na mansanas, at iwasan ang makaharap ang lobo. Ang **Reinforcement Learning** (RL) ay isang teknik sa pag-aaral na nagbibigay-daan sa atin na matutunan ang optimal na pag-uugali ng isang **agent** sa isang **environment** sa pamamagitan ng pagsasagawa ng maraming eksperimento. Ang agent sa environment na ito ay dapat mayroong **layunin**, na tinutukoy ng isang **reward function**. @@ -40,11 +40,11 @@ Ang **Reinforcement Learning** (RL) ay isang teknik sa pag-aaral na nagbibigay-d Para sa pagiging simple, isipin natin ang mundo ni Peter bilang isang square board na may sukat na `width` x `height`, tulad nito: -![Kapaligiran ni Peter](../../../../translated_images/environment.40ba3cb66256c93fa7e92f6f7214e1d1f588aafa97d266c11d108c5c5d101b6c.tl.png) +![Kapaligiran ni Peter](../../../../8-Reinforcement/1-QLearning/images/environment.png) Ang bawat cell sa board na ito ay maaaring: -* **lupa**, kung saan maaaring maglakad si Peter at ang iba pang nilalang. +* **lupa**, kung saan maaaring maglakad si Peter at iba pang nilalang. * **tubig**, kung saan malinaw na hindi ka maaaring maglakad. * isang **puno** o **damo**, isang lugar kung saan maaari kang magpahinga. * isang **mansanas**, na kumakatawan sa isang bagay na ikatutuwa ni Peter na makita upang pakainin ang sarili. @@ -65,11 +65,11 @@ Ang code na ito ay dapat mag-print ng larawan ng kapaligiran na katulad ng nasa ## Mga Aksyon at Patakaran -Sa ating halimbawa, ang layunin ni Peter ay makahanap ng mansanas, habang iniiwasan ang lobo at iba pang mga hadlang. Upang gawin ito, maaari siyang maglakad-lakad hanggang sa makita niya ang mansanas. +Sa ating halimbawa, ang layunin ni Peter ay makahanap ng mansanas, habang iniiwasan ang lobo at iba pang hadlang. Upang magawa ito, maaari siyang maglakad-lakad hanggang sa makita niya ang mansanas. Samakatuwid, sa anumang posisyon, maaari siyang pumili sa isa sa mga sumusunod na aksyon: pataas, pababa, pakaliwa, at pakanan. -Itatakda natin ang mga aksyon bilang isang diksyunaryo, at i-map ang mga ito sa mga pares ng kaukulang pagbabago sa coordinate. Halimbawa, ang paggalaw pakanan (`R`) ay tumutugma sa isang pares `(1,0)`. (code block 2): +Itatakda natin ang mga aksyon bilang isang diksyunaryo, at i-map ang mga ito sa mga pares ng kaukulang pagbabago sa coordinate. Halimbawa, ang paggalaw pakanan (`R`) ay tumutugma sa pares `(1,0)`. (code block 2): ```python actions = { "U" : (0,-1), "D" : (0,1), "L" : (-1,0), "R" : (1,0) } @@ -82,7 +82,7 @@ Sa kabuuan, ang estratehiya at layunin ng senaryong ito ay ang mga sumusunod: - **Ang layunin**, ng reinforcement learning ay sa huli matutunan ang isang mahusay na policy na magpapahintulot sa atin na malutas ang problema nang mahusay. Gayunpaman, bilang baseline, isaalang-alang natin ang pinakasimpleng policy na tinatawag na **random walk**. -## Random Walk +## Random walk Unahin nating lutasin ang ating problema sa pamamagitan ng pagpapatupad ng random walk strategy. Sa random walk, pipiliin natin nang random ang susunod na aksyon mula sa mga pinapayagang aksyon, hanggang sa maabot natin ang mansanas (code block 3). @@ -115,9 +115,9 @@ Unahin nating lutasin ang ating problema sa pamamagitan ng pagpapatupad ng rando walk(m,random_policy) ``` - Ang tawag sa `walk` ay dapat magbalik ng haba ng kaukulang landas, na maaaring mag-iba mula sa isang pagtakbo patungo sa isa pa. + Ang tawag sa `walk` ay dapat magbalik ng haba ng kaukulang landas, na maaaring mag-iba mula sa isang run patungo sa isa pa. -1. Patakbuhin ang eksperimento ng walk nang ilang beses (halimbawa, 100), at i-print ang mga resulta ng istatistika (code block 4): +1. Patakbuhin ang walk experiment nang ilang beses (sabihin, 100), at i-print ang mga resulta ng istatistika (code block 4): ```python def print_statistics(policy): @@ -136,13 +136,13 @@ Unahin nating lutasin ang ating problema sa pamamagitan ng pagpapatupad ng rando Tandaan na ang average na haba ng landas ay nasa paligid ng 30-40 hakbang, na medyo marami, kung isasaalang-alang ang katotohanan na ang average na distansya sa pinakamalapit na mansanas ay nasa paligid ng 5-6 hakbang. - Maaari mo ring makita kung ano ang hitsura ng paggalaw ni Peter sa panahon ng random walk: + Maaari mo ring makita kung ano ang hitsura ng galaw ni Peter sa random walk: ![Random Walk ni Peter](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif) -## Reward Function +## Reward function -Upang gawing mas matalino ang ating policy, kailangan nating maunawaan kung aling mga galaw ang "mas mabuti" kaysa sa iba. Upang gawin ito, kailangan nating tukuyin ang ating layunin. +Upang gawing mas matalino ang ating policy, kailangan nating maunawaan kung aling mga galaw ang "mas mabuti" kaysa sa iba. Upang magawa ito, kailangan nating tukuyin ang ating layunin. Ang layunin ay maaaring tukuyin sa mga tuntunin ng isang **reward function**, na magbabalik ng ilang halaga ng puntos para sa bawat estado. Ang mas mataas na numero, mas maganda ang reward function. (code block 5) @@ -163,7 +163,7 @@ def reward(m,pos=None): return move_reward ``` -Isang kawili-wiling bagay tungkol sa reward functions ay sa karamihan ng mga kaso, *binibigyan lamang tayo ng makabuluhang gantimpala sa dulo ng laro*. Nangangahulugan ito na ang ating algorithm ay dapat na alalahanin ang "magagandang" hakbang na humantong sa isang positibong gantimpala sa dulo, at dagdagan ang kanilang kahalagahan. Katulad nito, ang lahat ng mga galaw na humantong sa masamang resulta ay dapat na iwasan. +Isang kawili-wiling bagay tungkol sa reward functions ay sa karamihan ng mga kaso, *binibigyan lamang tayo ng makabuluhang gantimpala sa dulo ng laro*. Nangangahulugan ito na ang ating algorithm ay dapat na alalahanin ang "magagandang" hakbang na humantong sa positibong gantimpala sa dulo, at dagdagan ang kanilang kahalagahan. Katulad nito, ang lahat ng galaw na humantong sa masamang resulta ay dapat na iwasan. ## Q-Learning @@ -177,7 +177,7 @@ Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions) Pansinin na ini-initialize natin ang lahat ng mga halaga ng Q-Table sa pantay na halaga, sa ating kaso - 0.25. Ito ay tumutugma sa "random walk" policy, dahil ang lahat ng galaw sa bawat estado ay pantay na mabuti. Maaari nating ipasa ang Q-Table sa `plot` function upang i-visualize ang table sa board: `m.plot(Q)`. -![Kapaligiran ni Peter](../../../../translated_images/env_init.04e8f26d2d60089e128f21d22e5fef57d580e559f0d5937b06c689e5e7cdd438.tl.png) +![Kapaligiran ni Peter](../../../../8-Reinforcement/1-QLearning/images/env_init.png) Sa gitna ng bawat cell ay may "arrow" na nagpapahiwatig ng ginustong direksyon ng paggalaw. Dahil pantay ang lahat ng direksyon, isang tuldok ang ipinapakita. @@ -189,13 +189,13 @@ Kapag nagsimula na tayong gumalaw, ang bawat aksyon ay magkakaroon ng kaukulang > Tandaan na hindi ang agarang resulta ang mahalaga, kundi ang panghuling resulta, na makukuha natin sa dulo ng simulation. -Upang isaalang-alang ang naantalang gantimpala, kailangan nating gamitin ang mga prinsipyo ng **[dynamic programming](https://en.wikipedia.org/wiki/Dynamic_programming)**, na nagbibigay-daan sa atin na pag-isipan ang ating problema nang recursive. +Upang isaalang-alang ang naantalang gantimpala, kailangan nating gamitin ang mga prinsipyo ng **[dynamic programming](https://en.wikipedia.org/wiki/Dynamic_programming)**, na nagbibigay-daan sa atin na isipin ang ating problema nang recursive. -Ipagpalagay na tayo ay nasa estado *s* ngayon, at nais nating lumipat sa susunod na estado *s'*. Sa paggawa nito, makakatanggap tayo ng agarang gantimpala *r(s,a)*, na tinutukoy ng reward function, kasama ang ilang hinaharap na gantimpala. Kung ipagpalagay natin na ang ating Q-Table ay tama na sumasalamin sa "kagandahan" ng bawat aksyon, kung gayon sa estado *s'* pipili tayo ng aksyon *a* na tumutugma sa maximum na halaga ng *Q(s',a')*. Kaya, ang pinakamahusay na posibleng hinaharap na gantimpala na maaari nating makuha sa estado *s* ay tinutukoy bilang `max` +Ipagpalagay na tayo ay nasa estado *s* ngayon, at nais nating lumipat sa susunod na estado *s'*. Sa paggawa nito, makakatanggap tayo ng agarang gantimpala *r(s,a)*, na tinutukoy ng reward function, kasama ang ilang hinaharap na gantimpala. Kung ipagpalagay natin na ang ating Q-Table ay tama na sumasalamin sa "kaakit-akit" ng bawat aksyon, kung gayon sa estado *s'* pipili tayo ng aksyon *a* na tumutugma sa maximum na halaga ng *Q(s',a')*. Kaya, ang pinakamahusay na posibleng hinaharap na gantimpala na maaari nating makuha sa estado *s* ay tinutukoy bilang `max` -## Pagsusuri ng patakaran +## Pagsusuri ng polisiya -Dahil ang Q-Table ay naglilista ng "kaakit-akit" ng bawat aksyon sa bawat estado, madali itong gamitin upang tukuyin ang epektibong pag-navigate sa ating mundo. Sa pinakasimpleng kaso, maaari nating piliin ang aksyon na may pinakamataas na halaga sa Q-Table: (code block 9) +Dahil ang Q-Table ay naglilista ng "kaakit-akit" ng bawat aksyon sa bawat estado, madali itong gamitin upang tukuyin ang epektibong pag-navigate sa ating mundo. Sa pinakasimpleng kaso, maaari nating piliin ang aksyon na may pinakamataas na Q-Table value: (code block 9) ```python def qpolicy_strict(m): @@ -207,7 +207,7 @@ def qpolicy_strict(m): walk(m,qpolicy_strict) ``` -> Kapag sinubukan mo ang code sa itaas nang ilang beses, mapapansin mo na minsan ito ay "naghahang", at kailangan mong pindutin ang STOP button sa notebook upang ihinto ito. Nangyayari ito dahil maaaring may mga sitwasyon kung saan ang dalawang estado ay "nagtuturo" sa isa't isa batay sa optimal na Q-Value, na nagreresulta sa agent na paulit-ulit na gumagalaw sa pagitan ng mga estado na iyon. +> Kapag sinubukan mo ang code sa itaas nang ilang beses, mapapansin mo na minsan ito ay "naghahang", at kailangan mong pindutin ang STOP button sa notebook upang ihinto ito. Nangyayari ito dahil maaaring may mga sitwasyon kung saan ang dalawang estado ay "nagtuturo" sa isa't isa batay sa optimal na Q-Value, na nagreresulta sa agent na paulit-ulit na gumagalaw sa pagitan ng mga estadong iyon. ## 🚀Hamunin @@ -217,7 +217,7 @@ walk(m,qpolicy_strict) ## Pag-navigate -Mas mahusay na patakaran sa pag-navigate ang ginamit natin noong training, na pinagsasama ang exploitation at exploration. Sa patakarang ito, pipiliin natin ang bawat aksyon na may tiyak na probabilidad, na proporsyonal sa mga halaga sa Q-Table. Ang estratehiyang ito ay maaaring magresulta pa rin sa agent na bumalik sa posisyon na napuntahan na nito, ngunit, tulad ng makikita mo sa code sa ibaba, nagreresulta ito sa napakaikling average na landas patungo sa nais na lokasyon (tandaan na ang `print_statistics` ay nagpapatakbo ng simulation nang 100 beses): (code block 10) +Mas magandang polisiya sa pag-navigate ang ginamit natin noong training, na pinagsasama ang exploitation at exploration. Sa polisiya na ito, pipiliin natin ang bawat aksyon na may tiyak na probabilidad, na proporsyonal sa mga halaga sa Q-Table. Ang estratehiyang ito ay maaaring magresulta pa rin sa agent na bumalik sa posisyon na napuntahan na nito, ngunit, tulad ng makikita mo sa code sa ibaba, nagreresulta ito sa napakaikling average na landas patungo sa nais na lokasyon (tandaan na ang `print_statistics` ay nagpapatakbo ng simulation nang 100 beses): (code block 10) ```python def qpolicy(m): @@ -229,7 +229,7 @@ def qpolicy(m): print_statistics(qpolicy) ``` -Pagkatapos patakbuhin ang code na ito, dapat kang makakuha ng mas maikling average na haba ng landas kaysa dati, sa saklaw na 3-6. +Pagkatapos patakbuhin ang code na ito, dapat kang makakuha ng mas maliit na average na haba ng landas kaysa dati, sa saklaw na 3-6. ## Pagsisiyasat sa proseso ng pag-aaral @@ -237,15 +237,15 @@ Tulad ng nabanggit, ang proseso ng pag-aaral ay balanse sa pagitan ng exploratio ## Mga natutunan -- **Tumataas ang average na haba ng landas**. Sa simula, ang average na haba ng landas ay tumataas. Malamang ito ay dahil kapag wala tayong kaalaman tungkol sa kapaligiran, mas malamang na ma-trap tayo sa masamang estado, tulad ng tubig o lobo. Habang natututo tayo at nagsisimulang gamitin ang kaalamang ito, mas matagal nating ma-explore ang kapaligiran, ngunit hindi pa rin natin alam nang maayos kung nasaan ang mga mansanas. +- **Tumataas ang average na haba ng landas**. Sa simula, ang average na haba ng landas ay tumataas. Malamang ito ay dahil kapag wala tayong alam tungkol sa kapaligiran, mas malamang na ma-trap tayo sa masamang estado, tulad ng tubig o lobo. Habang natututo tayo at nagsisimulang gamitin ang kaalamang ito, mas matagal nating ma-explore ang kapaligiran, ngunit hindi pa rin natin alam nang maayos kung nasaan ang mga mansanas. -- **Bumababa ang haba ng landas habang natututo**. Kapag sapat na ang natutunan, mas madali para sa agent na maabot ang layunin, at nagsisimulang bumaba ang haba ng landas. Gayunpaman, bukas pa rin tayo sa exploration, kaya madalas tayong lumihis mula sa pinakamahusay na landas at mag-explore ng mga bagong opsyon, na nagpapahaba sa landas kaysa sa optimal. +- **Bumaba ang haba ng landas habang natututo**. Kapag sapat na ang natutunan, mas madali para sa agent na maabot ang layunin, at nagsisimulang bumaba ang haba ng landas. Gayunpaman, bukas pa rin tayo sa exploration, kaya madalas tayong lumihis mula sa pinakamahusay na landas at mag-explore ng mga bagong opsyon, na nagpapahaba sa landas kaysa sa optimal. -- **Biglang tumataas ang haba**. Mapapansin din natin sa graph na sa isang punto, biglang tumataas ang haba. Ipinapakita nito ang stochastic na kalikasan ng proseso, at na maaari nating "masira" ang mga coefficient ng Q-Table sa pamamagitan ng pag-overwrite ng mga ito ng mga bagong halaga. Dapat itong mabawasan sa pamamagitan ng pagbaba ng learning rate (halimbawa, sa pagtatapos ng training, ina-adjust lang natin ang mga halaga ng Q-Table nang kaunti). +- **Biglang tumataas ang haba**. Mapapansin din natin sa graph na sa isang punto, biglang tumataas ang haba. Ipinapakita nito ang stochastic na kalikasan ng proseso, at na maaari nating "masira" ang mga coefficient ng Q-Table sa pamamagitan ng pag-overwrite ng mga ito ng mga bagong halaga. Dapat itong mabawasan sa pamamagitan ng pagpapababa ng learning rate (halimbawa, sa pagtatapos ng training, ina-adjust lang natin ang mga halaga ng Q-Table nang kaunti). -Sa kabuuan, mahalagang tandaan na ang tagumpay at kalidad ng proseso ng pag-aaral ay malaki ang nakadepende sa mga parameter, tulad ng learning rate, learning rate decay, at discount factor. Ang mga ito ay madalas na tinatawag na **hyperparameters**, upang maiba sa **parameters**, na ina-optimize natin sa panahon ng training (halimbawa, mga coefficient ng Q-Table). Ang proseso ng paghahanap ng pinakamahusay na mga halaga ng hyperparameter ay tinatawag na **hyperparameter optimization**, at nararapat itong talakayin nang hiwalay. +Sa kabuuan, mahalagang tandaan na ang tagumpay at kalidad ng proseso ng pag-aaral ay malaki ang nakadepende sa mga parameter, tulad ng learning rate, learning rate decay, at discount factor. Ang mga ito ay madalas tawaging **hyperparameters**, upang maiba sa **parameters**, na ina-optimize natin sa panahon ng training (halimbawa, mga coefficient ng Q-Table). Ang proseso ng paghahanap ng pinakamahusay na halaga ng hyperparameters ay tinatawag na **hyperparameter optimization**, at ito ay karapat-dapat sa hiwalay na paksa. -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/46/) +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) ## Takdang-Aralin [A Mas Realistikong Mundo](assignment.md) @@ -253,4 +253,4 @@ Sa kabuuan, mahalagang tandaan na ang tagumpay at kalidad ng proseso ng pag-aara --- **Paunawa**: -Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na pinagmulan. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito. \ No newline at end of file +Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file diff --git a/translations/tl/8-Reinforcement/2-Gym/README.md b/translations/tl/8-Reinforcement/2-Gym/README.md index b71b13d5..79cc4495 100644 --- a/translations/tl/8-Reinforcement/2-Gym/README.md +++ b/translations/tl/8-Reinforcement/2-Gym/README.md @@ -1,19 +1,19 @@ ## Mga Paunang Kaalaman -Sa araling ito, gagamit tayo ng library na tinatawag na **OpenAI Gym** upang mag-simulate ng iba't ibang **kapaligiran**. Maaari mong patakbuhin ang code ng araling ito sa lokal na makina (halimbawa, gamit ang Visual Studio Code), kung saan magbubukas ang simulation sa isang bagong window. Kapag pinapatakbo ang code online, maaaring kailanganin mong baguhin ang ilang bahagi ng code, tulad ng ipinaliwanag [dito](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7). +Sa araling ito, gagamit tayo ng library na tinatawag na **OpenAI Gym** upang mag-simulate ng iba't ibang **kapaligiran**. Maaari mong patakbuhin ang code ng araling ito nang lokal (halimbawa, mula sa Visual Studio Code), kung saan magbubukas ang simulation sa isang bagong window. Kapag pinapatakbo ang code online, maaaring kailanganin mong gumawa ng ilang pagbabago sa code, tulad ng inilarawan [dito](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7). ## OpenAI Gym -Sa nakaraang aralin, ang mga patakaran ng laro at ang estado ay ibinigay ng `Board` class na tayo mismo ang nagtakda. Dito, gagamit tayo ng espesyal na **simulation environment**, na magsi-simulate ng pisika sa likod ng balancing pole. Isa sa mga pinakasikat na simulation environment para sa pagsasanay ng reinforcement learning algorithms ay tinatawag na [Gym](https://gym.openai.com/), na pinapanatili ng [OpenAI](https://openai.com/). Sa paggamit ng gym na ito, maaari tayong lumikha ng iba't ibang **kapaligiran** mula sa cartpole simulation hanggang sa mga laro ng Atari. +Sa nakaraang aralin, ang mga patakaran ng laro at ang estado ay ibinigay ng `Board` class na tayo mismo ang nagtakda. Dito, gagamit tayo ng isang espesyal na **simulation environment**, na magsi-simulate ng pisika sa likod ng balancing pole. Isa sa mga pinakasikat na simulation environment para sa pagsasanay ng reinforcement learning algorithms ay tinatawag na [Gym](https://gym.openai.com/), na pinapanatili ng [OpenAI](https://openai.com/). Sa pamamagitan ng paggamit ng gym na ito, maaari tayong lumikha ng iba't ibang **kapaligiran** mula sa cartpole simulation hanggang sa mga laro ng Atari. > **Note**: Makikita mo ang iba pang mga kapaligiran na available mula sa OpenAI Gym [dito](https://gym.openai.com/envs/#classic_control). @@ -29,11 +29,11 @@ import numpy as np import random ``` -## Ehersisyo - i-initialize ang isang cartpole environment +## Ehersisyo - I-initialize ang isang cartpole environment -Upang magtrabaho sa problema ng cartpole balancing, kailangan nating i-initialize ang kaukulang kapaligiran. Ang bawat kapaligiran ay may kaugnayan sa: +Upang magtrabaho sa problema ng cartpole balancing, kailangan nating i-initialize ang kaukulang kapaligiran. Ang bawat kapaligiran ay nauugnay sa: -- **Observation space** na tumutukoy sa istruktura ng impormasyon na natatanggap natin mula sa kapaligiran. Para sa problema ng cartpole, natatanggap natin ang posisyon ng pole, bilis, at iba pang mga halaga. +- **Observation space** na tumutukoy sa istruktura ng impormasyon na natatanggap natin mula sa kapaligiran. Para sa problema ng cartpole, natatanggap natin ang posisyon ng pole, bilis, at ilang iba pang mga halaga. - **Action space** na tumutukoy sa mga posibleng aksyon. Sa ating kaso, ang action space ay discrete, at binubuo ng dalawang aksyon - **kaliwa** at **kanan**. (code block 2) @@ -46,9 +46,9 @@ Upang magtrabaho sa problema ng cartpole balancing, kailangan nating i-initializ print(env.action_space.sample()) ``` -Upang makita kung paano gumagana ang kapaligiran, magpatakbo ng maikling simulation para sa 100 hakbang. Sa bawat hakbang, nagbibigay tayo ng isa sa mga aksyon na gagawin - sa simulation na ito, random nating pinipili ang isang aksyon mula sa `action_space`. +Upang makita kung paano gumagana ang kapaligiran, magpatakbo ng maikling simulation para sa 100 hakbang. Sa bawat hakbang, nagbibigay tayo ng isa sa mga aksyon na gagawin - sa simulation na ito, random lang nating pinipili ang isang aksyon mula sa `action_space`. -1. Patakbuhin ang code sa ibaba at tingnan ang resulta. +1. Patakbuhin ang code sa ibaba at tingnan kung ano ang resulta. ✅ Tandaan na mas mainam na patakbuhin ang code na ito sa lokal na Python installation! (code block 3) @@ -65,7 +65,7 @@ Upang makita kung paano gumagana ang kapaligiran, magpatakbo ng maikling simulat ![non-balancing cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif) -1. Sa panahon ng simulation, kailangan nating makakuha ng mga obserbasyon upang magdesisyon kung paano kumilos. Sa katunayan, ang step function ay nagbabalik ng kasalukuyang obserbasyon, isang reward function, at ang done flag na nagpapahiwatig kung may saysay pa bang ipagpatuloy ang simulation o hindi: (code block 4) +1. Sa panahon ng simulation, kailangan nating makuha ang mga obserbasyon upang magpasya kung paano kumilos. Sa katunayan, ang step function ay nagbabalik ng kasalukuyang obserbasyon, isang reward function, at ang done flag na nagpapahiwatig kung may saysay pa bang ipagpatuloy ang simulation o hindi: (code block 4) ```python env.reset() @@ -104,23 +104,23 @@ Upang makita kung paano gumagana ang kapaligiran, magpatakbo ng maikling simulat print(env.observation_space.high) ``` - Mapapansin mo rin na ang reward value sa bawat simulation step ay palaging 1. Ito ay dahil ang layunin natin ay magtagal hangga't maaari, ibig sabihin, panatilihin ang pole sa isang makatwirang patayong posisyon sa pinakamahabang panahon. + Mapapansin mo rin na ang reward value sa bawat hakbang ng simulation ay palaging 1. Ito ay dahil ang ating layunin ay mabuhay nang mas matagal hangga't maaari, ibig sabihin, panatilihin ang pole sa isang makatwirang patayong posisyon sa pinakamahabang panahon. - ✅ Sa katunayan, ang CartPole simulation ay itinuturing na nalutas kung makakakuha tayo ng average reward na 195 sa loob ng 100 sunud-sunod na pagsubok. + ✅ Sa katunayan, ang CartPole simulation ay itinuturing na nalutas kung makakakuha tayo ng average reward na 195 sa loob ng 100 sunod-sunod na pagsubok. -## Pag-discretize ng Estado +## State Discretization Sa Q-Learning, kailangan nating bumuo ng Q-Table na tumutukoy kung ano ang gagawin sa bawat estado. Upang magawa ito, kailangan ang estado ay **discreet**, mas partikular, dapat itong maglaman ng limitadong bilang ng mga discrete na halaga. Kaya, kailangan nating **i-discretize** ang ating mga obserbasyon, i-map ang mga ito sa isang limitadong set ng mga estado. May ilang paraan upang magawa ito: -- **Hatiin sa mga bins**. Kung alam natin ang interval ng isang tiyak na halaga, maaari nating hatiin ang interval na ito sa ilang **bins**, at pagkatapos ay palitan ang halaga ng numero ng bin kung saan ito kabilang. Magagawa ito gamit ang numpy [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) method. Sa ganitong paraan, tiyak nating malalaman ang laki ng estado, dahil ito ay depende sa bilang ng bins na pinili natin para sa digitalization. +- **Hatiin sa mga bins**. Kung alam natin ang interval ng isang tiyak na halaga, maaari nating hatiin ang interval na ito sa isang bilang ng **bins**, at pagkatapos ay palitan ang halaga ng numero ng bin kung saan ito kabilang. Magagawa ito gamit ang numpy [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) method. Sa kasong ito, tiyak nating malalaman ang laki ng estado, dahil ito ay depende sa bilang ng bins na pinili natin para sa digitalization. -✅ Maaari nating gamitin ang linear interpolation upang dalhin ang mga halaga sa isang limitadong interval (halimbawa, mula -20 hanggang 20), at pagkatapos ay i-convert ang mga numero sa integers sa pamamagitan ng pag-round. Nagbibigay ito sa atin ng kaunting kontrol sa laki ng estado, lalo na kung hindi natin alam ang eksaktong saklaw ng mga input na halaga. Halimbawa, sa ating kaso, 2 sa 4 na halaga ay walang upper/lower bounds sa kanilang mga halaga, na maaaring magresulta sa walang katapusang bilang ng mga estado. +✅ Maaari tayong gumamit ng linear interpolation upang dalhin ang mga halaga sa isang limitadong interval (halimbawa, mula -20 hanggang 20), at pagkatapos ay i-convert ang mga numero sa integers sa pamamagitan ng pag-round. Nagbibigay ito sa atin ng kaunting kontrol sa laki ng estado, lalo na kung hindi natin alam ang eksaktong saklaw ng mga input na halaga. Halimbawa, sa ating kaso, 2 sa 4 na halaga ay walang upper/lower bounds sa kanilang mga halaga, na maaaring magresulta sa walang katapusang bilang ng mga estado. -Sa ating halimbawa, gagamitin natin ang pangalawang paraan. Tulad ng mapapansin mo mamaya, sa kabila ng hindi tinukoy na upper/lower bounds, ang mga halagang iyon ay bihirang lumampas sa ilang limitadong interval, kaya ang mga estado na may extreme values ay magiging napakabihira. +Sa ating halimbawa, gagamitin natin ang pangalawang paraan. Tulad ng mapapansin mo mamaya, sa kabila ng hindi tinukoy na upper/lower bounds, ang mga halagang iyon ay bihirang kumuha ng mga halaga sa labas ng ilang limitadong interval, kaya ang mga estado na may matinding halaga ay magiging napakabihira. -1. Narito ang function na kukuha ng obserbasyon mula sa ating modelo at gagawa ng tuple ng 4 na integer values: (code block 6) +1. Narito ang function na kukuha ng obserbasyon mula sa ating modelo at magpo-produce ng tuple ng 4 na integer na halaga: (code block 6) ```python def discretize(x): @@ -143,9 +143,9 @@ Sa ating halimbawa, gagamitin natin ang pangalawang paraan. Tulad ng mapapansin return tuple(np.digitize(x[i],bins[i]) for i in range(4)) ``` -1. Ngayon, magpatakbo ng maikling simulation at obserbahan ang mga discrete environment values. Subukan ang parehong `discretize` at `discretize_bins` at tingnan kung may pagkakaiba. +1. Ngayon, magpatakbo ng maikling simulation at obserbahan ang mga discrete na halaga ng kapaligiran. Subukan ang parehong `discretize` at `discretize_bins` at tingnan kung may pagkakaiba. - ✅ Ang `discretize_bins` ay nagbabalik ng bin number, na 0-based. Kaya para sa mga halaga ng input variable na malapit sa 0, nagbabalik ito ng numero mula sa gitna ng interval (10). Sa `discretize`, hindi natin inintindi ang saklaw ng output values, pinapayagan ang mga ito na maging negatibo, kaya ang mga estado ay hindi na-shift, at ang 0 ay tumutugma sa 0. (code block 8) + ✅ Ang `discretize_bins` ay nagbabalik ng numero ng bin, na 0-based. Kaya para sa mga halaga ng input variable sa paligid ng 0, nagbabalik ito ng numero mula sa gitna ng interval (10). Sa `discretize`, hindi natin inalagaan ang saklaw ng mga output na halaga, na pinapayagan silang maging negatibo, kaya ang mga halaga ng estado ay hindi na-shift, at ang 0 ay tumutugma sa 0. (code block 8) ```python env.reset() @@ -159,13 +159,13 @@ Sa ating halimbawa, gagamitin natin ang pangalawang paraan. Tulad ng mapapansin env.close() ``` - ✅ I-uncomment ang linya na nagsisimula sa env.render kung nais mong makita kung paano isinasagawa ang kapaligiran. Kung hindi, maaari mo itong patakbuhin sa background, na mas mabilis. Gagamitin natin ang "invisible" execution na ito sa panahon ng proseso ng Q-Learning. + ✅ I-uncomment ang linya na nagsisimula sa env.render kung nais mong makita kung paano isinasagawa ang kapaligiran. Kung hindi, maaari mo itong isagawa sa background, na mas mabilis. Gagamitin natin ang "invisible" na pagpapatupad na ito sa panahon ng ating Q-Learning process. ## Ang Istruktura ng Q-Table -Sa nakaraang aralin, ang estado ay isang simpleng pares ng mga numero mula 0 hanggang 8, kaya't maginhawa itong i-representa ang Q-Table gamit ang isang numpy tensor na may hugis na 8x8x2. Kung gagamit tayo ng bins discretization, ang laki ng ating state vector ay kilala rin, kaya maaari nating gamitin ang parehong paraan at i-representa ang estado gamit ang array na may hugis na 20x20x10x10x2 (dito ang 2 ay ang dimensyon ng action space, at ang mga unang dimensyon ay tumutugma sa bilang ng bins na pinili natin para sa bawat parameter sa observation space). +Sa nakaraang aralin, ang estado ay isang simpleng pares ng mga numero mula 0 hanggang 8, kaya't maginhawa itong i-represent ang Q-Table gamit ang isang numpy tensor na may hugis na 8x8x2. Kung gagamit tayo ng bins discretization, ang laki ng ating state vector ay kilala rin, kaya maaari nating gamitin ang parehong paraan at i-represent ang estado gamit ang isang array na may hugis na 20x20x10x10x2 (dito ang 2 ay ang dimensyon ng action space, at ang mga unang dimensyon ay tumutugma sa bilang ng bins na pinili natin para sa bawat parameter sa observation space). -Gayunpaman, minsan ang eksaktong dimensyon ng observation space ay hindi alam. Sa kaso ng `discretize` function, hindi tayo sigurado na ang ating estado ay mananatili sa loob ng ilang limitasyon, dahil ang ilan sa mga orihinal na halaga ay hindi bound. Kaya, gagamit tayo ng bahagyang naiibang paraan at i-representa ang Q-Table gamit ang dictionary. +Gayunpaman, kung minsan ang eksaktong dimensyon ng observation space ay hindi alam. Sa kaso ng `discretize` function, maaaring hindi tayo sigurado na ang ating estado ay nananatili sa loob ng ilang limitasyon, dahil ang ilan sa mga orihinal na halaga ay hindi bound. Kaya, gagamit tayo ng bahagyang naiibang paraan at i-represent ang Q-Table gamit ang isang dictionary. 1. Gamitin ang pares *(state,action)* bilang key ng dictionary, at ang value ay tumutugma sa Q-Table entry value. (code block 9) @@ -177,13 +177,13 @@ Gayunpaman, minsan ang eksaktong dimensyon ng observation space ay hindi alam. S return [Q.get((state,a),0) for a in actions] ``` - Dito, nagtakda rin tayo ng function na `qvalues()`, na nagbabalik ng listahan ng Q-Table values para sa isang estado na tumutugma sa lahat ng posibleng aksyon. Kung ang entry ay wala sa Q-Table, magbabalik tayo ng 0 bilang default. + Dito, nagde-define din tayo ng function na `qvalues()`, na nagbabalik ng listahan ng mga Q-Table value para sa isang ibinigay na estado na tumutugma sa lahat ng posibleng aksyon. Kung ang entry ay wala sa Q-Table, magbabalik tayo ng 0 bilang default. ## Simulan ang Q-Learning -Ngayon, handa na nating turuan si Peter na magbalanse! +Ngayon, handa na tayong turuan si Peter na magbalanse! -1. Una, magtakda ng ilang hyperparameters: (code block 10) +1. Una, mag-set ng ilang hyperparameters: (code block 10) ```python # hyperparameters @@ -192,21 +192,21 @@ Ngayon, handa na nating turuan si Peter na magbalanse! epsilon = 0.90 ``` - Dito, ang `alpha` ay ang **learning rate** na tumutukoy kung hanggang saan natin dapat i-adjust ang kasalukuyang mga halaga ng Q-Table sa bawat hakbang. Sa nakaraang aralin, nagsimula tayo sa 1, at pagkatapos ay binawasan ang `alpha` sa mas mababang mga halaga sa panahon ng pagsasanay. Sa halimbawang ito, panatilihin natin itong constant para sa kasimplehan, at maaari kang mag-eksperimento sa pag-adjust ng mga halaga ng `alpha` sa ibang pagkakataon. + Dito, ang `alpha` ay ang **learning rate** na tumutukoy kung hanggang saan natin dapat i-adjust ang kasalukuyang mga halaga ng Q-Table sa bawat hakbang. Sa nakaraang aralin, nagsimula tayo sa 1, at pagkatapos ay binawasan ang `alpha` sa mas mababang mga halaga sa panahon ng pagsasanay. Sa halimbawang ito, panatilihin natin itong constant para sa pagiging simple, at maaari kang mag-eksperimento sa pag-adjust ng mga halaga ng `alpha` sa ibang pagkakataon. Ang `gamma` ay ang **discount factor** na nagpapakita kung hanggang saan natin dapat bigyang-priyoridad ang hinaharap na reward kaysa sa kasalukuyang reward. - Ang `epsilon` ay ang **exploration/exploitation factor** na tumutukoy kung mas pipiliin natin ang exploration kaysa exploitation o vice versa. Sa ating algorithm, sa `epsilon` na porsyento ng mga kaso, pipiliin natin ang susunod na aksyon ayon sa Q-Table values, at sa natitirang bilang ng mga kaso, magsasagawa tayo ng random na aksyon. Papayagan tayo nitong tuklasin ang mga bahagi ng search space na hindi pa natin nakikita. + Ang `epsilon` ay ang **exploration/exploitation factor** na tumutukoy kung dapat nating paboran ang exploration kaysa sa exploitation o vice versa. Sa ating algorithm, sa `epsilon` na porsyento ng mga kaso, pipiliin natin ang susunod na aksyon ayon sa mga halaga ng Q-Table, at sa natitirang bilang ng mga kaso, magsasagawa tayo ng random na aksyon. Papayagan tayo nitong galugarin ang mga bahagi ng search space na hindi pa natin nakikita. - ✅ Sa usapin ng pagbalanse - ang pagpili ng random na aksyon (exploration) ay kikilos bilang random na suntok sa maling direksyon, at ang pole ay kailangang matutong bumawi ng balanse mula sa mga "pagkakamali." + ✅ Sa usapin ng pagbalanse - ang pagpili ng random na aksyon (exploration) ay kikilos bilang isang random na suntok sa maling direksyon, at ang pole ay kailangang matutong bumawi ng balanse mula sa mga "pagkakamali" na iyon. ### Pagbutihin ang Algorithm Maaari rin nating gawin ang dalawang pagpapabuti sa ating algorithm mula sa nakaraang aralin: -- **Kalkulahin ang average cumulative reward**, sa loob ng ilang simulation. Ipi-print natin ang progreso bawat 5000 iterations, at i-average natin ang cumulative reward sa panahong iyon. Nangangahulugan ito na kung makakakuha tayo ng higit sa 195 puntos - maaari nating ituring na nalutas ang problema, na may mas mataas na kalidad kaysa sa kinakailangan. +- **Kalkulahin ang average cumulative reward**, sa loob ng ilang simulation. Ipi-print natin ang progreso bawat 5000 iterations, at i-average natin ang ating cumulative reward sa panahong iyon. Nangangahulugan ito na kung makakakuha tayo ng higit sa 195 puntos - maaari nating ituring na nalutas ang problema, na may mas mataas na kalidad kaysa sa kinakailangan. -- **Kalkulahin ang maximum average cumulative result**, `Qmax`, at itatabi natin ang Q-Table na tumutugma sa resulta na iyon. Kapag pinatakbo mo ang training, mapapansin mo na minsan ang average cumulative result ay nagsisimulang bumaba, at gusto nating panatilihin ang mga halaga ng Q-Table na tumutugma sa pinakamahusay na modelo na naobserbahan sa panahon ng pagsasanay. +- **Kalkulahin ang maximum average cumulative result**, `Qmax`, at i-store natin ang Q-Table na tumutugma sa resulta na iyon. Kapag pinatakbo mo ang training, mapapansin mo na minsan ang average cumulative result ay nagsisimulang bumaba, at gusto nating panatilihin ang mga halaga ng Q-Table na tumutugma sa pinakamahusay na modelo na naobserbahan sa panahon ng pagsasanay. 1. Kolektahin ang lahat ng cumulative rewards sa bawat simulation sa `rewards` vector para sa karagdagang pag-plot. (code block 11) @@ -249,13 +249,13 @@ Maaari rin nating gawin ang dalawang pagpapabuti sa ating algorithm mula sa naka cum_rewards=[] ``` -Ano ang mapapansin mo mula sa mga resulta: +Ano ang maaaring mapansin mula sa mga resulta: -- **Malapit sa ating layunin**. Malapit na nating maabot ang layunin na makakuha ng 195 cumulative rewards sa loob ng 100+ sunud-sunod na pagtakbo ng simulation, o maaaring naabot na natin ito! Kahit na makakuha tayo ng mas mababang mga numero, hindi pa rin natin alam, dahil nag-a-average tayo sa loob ng 5000 pagtakbo, at 100 pagtakbo lamang ang kinakailangan sa pormal na pamantayan. +- **Malapit sa ating layunin**. Napakalapit na natin sa pagkamit ng layunin na makakuha ng 195 cumulative rewards sa loob ng 100+ sunod-sunod na pagtakbo ng simulation, o maaaring naabot na natin ito! Kahit na makakuha tayo ng mas maliit na mga numero, hindi pa rin natin alam, dahil nag-a-average tayo sa loob ng 5000 pagtakbo, at 100 pagtakbo lamang ang kinakailangan sa pormal na pamantayan. -- **Reward nagsisimulang bumaba**. Minsan ang reward ay nagsisimulang bumaba, na nangangahulugang maaari nating "sirain" ang mga natutunang halaga sa Q-Table gamit ang mga bago na nagpapalala sa sitwasyon. +- **Reward nagsisimulang bumaba**. Minsan ang reward ay nagsisimulang bumaba, na nangangahulugan na maaari nating "sirain" ang mga natutunang halaga sa Q-Table gamit ang mga bago na nagpapalala sa sitwasyon. -Mas malinaw na makikita ang obserbasyong ito kung i-plot natin ang progreso ng pagsasanay. +Ang obserbasyong ito ay mas malinaw na makikita kung i-plot natin ang progreso ng pagsasanay. ## Pag-plot ng Progreso ng Pagsasanay @@ -265,9 +265,9 @@ Sa panahon ng pagsasanay, nakolekta natin ang cumulative reward value sa bawat i plt.plot(rewards) ``` -![raw progress](../../../../translated_images/train_progress_raw.2adfdf2daea09c596fc786fa347a23e9aceffe1b463e2257d20a9505794823ec.tl.png) +![raw progress](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.png) -Mula sa graph na ito, hindi posible na makapagsabi ng kahit ano, dahil sa likas na katangian ng stochastic training process, ang haba ng mga training session ay lubos na nag-iiba. Upang mas maunawaan ang graph na ito, maaari nating kalkulahin ang **running average** sa isang serye ng mga eksperimento, sabihin nating 100. Magagawa ito nang maginhawa gamit ang `np.convolve`: (code block 12) +Mula sa graph na ito, hindi posible na masabi ang anumang bagay, dahil sa likas na katangian ng stochastic training process, ang haba ng mga session ng pagsasanay ay lubos na nag-iiba. Upang mas magkaroon ng kahulugan ang graph na ito, maaari nating kalkulahin ang **running average** sa isang serye ng mga eksperimento, sabihin nating 100. Magagawa ito nang maginhawa gamit ang `np.convolve`: (code block 12) ```python def running_average(x,window): @@ -276,7 +276,7 @@ def running_average(x,window): plt.plot(running_average(rewards,100)) ``` -![training progress](../../../../translated_images/train_progress_runav.c71694a8fa9ab35935aff6f109e5ecdfdbdf1b0ae265da49479a81b5fae8f0aa.tl.png) +![training progress](../../../../8-Reinforcement/2-Gym/images/train_progress_runav.png) ## Pag-iiba ng Hyperparameters @@ -284,13 +284,13 @@ Upang gawing mas matatag ang pag-aaral, makatuwiran na i-adjust ang ilan sa atin - **Para sa learning rate**, `alpha`, maaari tayong magsimula sa mga halaga na malapit sa 1, at pagkatapos ay patuloy na bawasan ang parameter. Sa paglipas ng panahon, makakakuha tayo ng magagandang probability values sa Q-Table, kaya't dapat nating i-adjust ang mga ito nang bahagya, at hindi ganap na i-overwrite gamit ang mga bagong halaga. -- **Dagdagan ang epsilon**. Maaaring gusto nating unti-unting taasan ang `epsilon`, upang mas kaunti ang exploration at mas marami ang exploitation. Marahil ay makatuwiran na magsimula sa mas mababang halaga ng `epsilon`, at pataasin ito hanggang halos 1. +- **Dagdagan ang epsilon**. Maaaring gusto nating unti-unting taasan ang `epsilon`, upang mas kaunti ang pag-explore at mas marami ang pag-exploit. Malamang na makatuwiran na magsimula sa mas mababang halaga ng `epsilon`, at pataasin ito hanggang halos 1. > **Gawain 1**: Subukan ang iba't ibang halaga ng hyperparameter at tingnan kung makakamit mo ang mas mataas na kabuuang gantimpala. Nakakakuha ka ba ng higit sa 195? -> **Gawain 2**: Upang pormal na malutas ang problema, kailangan mong makakuha ng 195 average na gantimpala sa loob ng 100 magkakasunod na takbo. Sukatin ito habang nagsasanay at tiyaking nalutas mo na ang problema nang pormal! +> **Task 2**: Upang pormal na malutas ang problema, kailangan mong makakuha ng 195 average na gantimpala sa loob ng 100 magkakasunod na takbo. Sukatin ito habang nagsasanay at tiyaking pormal mong nalutas ang problema! -## Panoorin ang resulta sa aksyon +## Pagtingin sa resulta sa aksyon -Magiging interesante na makita kung paano kumikilos ang sinanay na modelo. Patakbuhin natin ang simulation at sundin ang parehong estratehiya sa pagpili ng aksyon tulad ng sa panahon ng pagsasanay, gamit ang sampling ayon sa probability distribution sa Q-Table: (code block 13) +Magiging interesante na makita kung paano kumikilos ang na-train na modelo. Patakbuhin natin ang simulation at sundin ang parehong estratehiya sa pagpili ng aksyon tulad ng ginawa sa training, gamit ang sampling ayon sa probability distribution sa Q-Table: (code block 13) ```python obs = env.reset() @@ -312,22 +312,22 @@ Makikita mo ang ganito: ## 🚀Hamunin -> **Gawain 3**: Dito, ginagamit natin ang huling kopya ng Q-Table, na maaaring hindi ang pinakamainam. Tandaan na iniimbak natin ang pinakamahusay na Q-Table sa `Qbest` na variable! Subukan ang parehong halimbawa gamit ang pinakamahusay na Q-Table sa pamamagitan ng pagkopya ng `Qbest` papunta sa `Q` at tingnan kung may mapapansin kang pagkakaiba. +> **Task 3**: Dito, ginamit natin ang huling kopya ng Q-Table, na maaaring hindi ang pinakamainam. Tandaan na iniimbak natin ang pinakamahusay na Q-Table sa `Qbest` na variable! Subukan ang parehong halimbawa gamit ang pinakamahusay na Q-Table sa pamamagitan ng pagkopya ng `Qbest` papunta sa `Q` at tingnan kung mapapansin mo ang pagkakaiba. -> **Gawain 4**: Dito, hindi natin pinipili ang pinakamahusay na aksyon sa bawat hakbang, kundi nagsa-sample tayo gamit ang kaukulang probability distribution. Mas may saysay kaya na palaging piliin ang pinakamahusay na aksyon, na may pinakamataas na halaga sa Q-Table? Magagawa ito gamit ang `np.argmax` na function upang malaman ang numero ng aksyon na may pinakamataas na halaga sa Q-Table. Ipatupad ang estratehiyang ito at tingnan kung mas mapapabuti nito ang balanse. +> **Task 4**: Dito, hindi natin pinipili ang pinakamahusay na aksyon sa bawat hakbang, kundi nagsa-sample tayo gamit ang kaukulang probability distribution. Mas makatuwiran ba na palaging piliin ang pinakamahusay na aksyon, na may pinakamataas na halaga sa Q-Table? Magagawa ito gamit ang `np.argmax` na function upang malaman ang numero ng aksyon na may pinakamataas na halaga sa Q-Table. Ipatupad ang estratehiyang ito at tingnan kung mas mapapabuti ang balancing. -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/48/) +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) ## Takdang-Aralin [Sanayin ang Mountain Car](assignment.md) ## Konklusyon -Natutuhan na natin ngayon kung paano sanayin ang mga ahente upang makamit ang magagandang resulta sa pamamagitan lamang ng pagbibigay sa kanila ng reward function na naglalarawan ng nais na estado ng laro, at pagbibigay sa kanila ng pagkakataong matalinong galugarin ang search space. Matagumpay nating naipatupad ang Q-Learning algorithm sa mga kaso ng discrete at continuous na kapaligiran, ngunit may discrete na mga aksyon. +Natutunan na natin kung paano sanayin ang mga ahente upang makamit ang magagandang resulta sa pamamagitan lamang ng pagbibigay sa kanila ng reward function na nagtatakda ng nais na estado ng laro, at pagbibigay sa kanila ng pagkakataong matalinong mag-explore sa search space. Matagumpay nating naipatupad ang Q-Learning algorithm sa mga kaso ng discrete at continuous na environment, ngunit may discrete na mga aksyon. -Mahalaga ring pag-aralan ang mga sitwasyon kung saan ang estado ng aksyon ay tuloy-tuloy din, at kung kailan mas kumplikado ang observation space, tulad ng imahe mula sa screen ng laro ng Atari. Sa mga problemang ito, madalas nating kailangang gumamit ng mas makapangyarihang mga teknik sa machine learning, tulad ng neural networks, upang makamit ang magagandang resulta. Ang mga mas advanced na paksang ito ay tatalakayin sa paparating nating mas advanced na kurso sa AI. +Mahalaga ring pag-aralan ang mga sitwasyon kung saan ang estado ng aksyon ay tuloy-tuloy, at kapag ang observation space ay mas kumplikado, tulad ng imahe mula sa screen ng Atari game. Sa mga ganitong problema, madalas nating kailangang gumamit ng mas makapangyarihang mga teknik sa machine learning, tulad ng neural networks, upang makamit ang magagandang resulta. Ang mga mas advanced na paksa na ito ang magiging laman ng ating susunod na mas advanced na kurso sa AI. --- **Paunawa**: -Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito. \ No newline at end of file +Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file diff --git a/translations/tl/9-Real-World/1-Applications/README.md b/translations/tl/9-Real-World/1-Applications/README.md index 66ebc25d..95d542f5 100644 --- a/translations/tl/9-Real-World/1-Applications/README.md +++ b/translations/tl/9-Real-World/1-Applications/README.md @@ -1,22 +1,22 @@ -# Postscript: Machine learning sa totoong mundo +# Postscript: Machine learning sa tunay na mundo -![Buod ng machine learning sa totoong mundo sa isang sketchnote](../../../../translated_images/ml-realworld.26ee2746716155771f8076598b6145e6533fe4a9e2e465ea745f46648cbf1b84.tl.png) +![Buod ng machine learning sa tunay na mundo sa isang sketchnote](../../../../sketchnotes/ml-realworld.png) > Sketchnote ni [Tomomi Imura](https://www.twitter.com/girlie_mac) -Sa kurikulum na ito, natutunan mo ang maraming paraan upang ihanda ang data para sa training at lumikha ng mga machine learning models. Gumawa ka ng serye ng mga klasikong regression, clustering, classification, natural language processing, at time series models. Binabati kita! Ngayon, maaaring iniisip mo kung para saan ang lahat ng ito... ano ang mga aplikasyon ng mga modelong ito sa totoong mundo? +Sa kurikulum na ito, natutunan mo ang maraming paraan para ihanda ang data para sa training at lumikha ng mga machine learning model. Nagtayo ka ng serye ng mga klasikong regression, clustering, classification, natural language processing, at time series models. Binabati kita! Ngayon, maaaring iniisip mo kung para saan ang lahat ng ito... ano ang mga aplikasyon ng mga modelong ito sa tunay na mundo? -Habang maraming interes sa industriya ang nakatuon sa AI, na karaniwang gumagamit ng deep learning, may mga mahalagang aplikasyon pa rin para sa mga klasikong machine learning models. Maaaring ginagamit mo na ang ilan sa mga aplikasyon na ito ngayon! Sa araling ito, tatalakayin natin kung paano ginagamit ng walong iba't ibang industriya at mga larangan ng kaalaman ang mga ganitong uri ng modelo upang gawing mas mahusay, maaasahan, matalino, at mahalaga ang kanilang mga aplikasyon para sa mga gumagamit. +Bagamat maraming interes sa industriya ang nakatuon sa AI, na karaniwang gumagamit ng deep learning, may mga mahalagang aplikasyon pa rin para sa mga klasikong machine learning model. Maaaring ginagamit mo na ang ilan sa mga aplikasyon na ito ngayon! Sa araling ito, susuriin mo kung paano ginagamit ng walong iba't ibang industriya at mga domain ng kaalaman ang mga ganitong uri ng modelo upang gawing mas mahusay, maaasahan, matalino, at mahalaga ang kanilang mga aplikasyon para sa mga gumagamit. -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/49/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) ## 💰 Pananalapi @@ -24,134 +24,136 @@ Ang sektor ng pananalapi ay nag-aalok ng maraming oportunidad para sa machine le ### Pagtuklas ng pandaraya sa credit card -Natuto tayo tungkol sa [k-means clustering](../../5-Clustering/2-K-Means/README.md) sa naunang bahagi ng kurso, ngunit paano ito magagamit upang lutasin ang mga problema kaugnay ng pandaraya sa credit card? +Natutunan natin ang tungkol sa [k-means clustering](../../5-Clustering/2-K-Means/README.md) sa mas maagang bahagi ng kurso, pero paano ito magagamit para lutasin ang mga problema kaugnay ng pandaraya sa credit card? -Ang k-means clustering ay kapaki-pakinabang sa isang teknik sa pagtuklas ng pandaraya sa credit card na tinatawag na **outlier detection**. Ang mga outlier, o mga paglihis sa obserbasyon ng isang set ng data, ay maaaring magpahiwatig kung ang isang credit card ay ginagamit sa normal na paraan o kung may kakaibang nangyayari. Gaya ng ipinakita sa papel na naka-link sa ibaba, maaari mong ayusin ang data ng credit card gamit ang isang k-means clustering algorithm at i-assign ang bawat transaksyon sa isang cluster batay sa kung gaano ito ka-outlier. Pagkatapos, maaari mong suriin ang mga pinaka-mapanganib na cluster para sa mga mapanlinlang kumpara sa mga lehitimong transaksyon. +Ang k-means clustering ay kapaki-pakinabang sa isang teknik sa pagtuklas ng pandaraya sa credit card na tinatawag na **outlier detection**. Ang mga outlier, o mga paglihis sa mga obserbasyon tungkol sa isang set ng data, ay maaaring magpahiwatig kung ang isang credit card ay ginagamit sa normal na paraan o kung may kakaibang nangyayari. Tulad ng ipinakita sa papel na naka-link sa ibaba, maaari mong ayusin ang data ng credit card gamit ang isang k-means clustering algorithm at i-assign ang bawat transaksyon sa isang cluster batay sa kung gaano ito ka-outlier. Pagkatapos, maaari mong suriin ang mga pinaka-mapanganib na cluster para sa mga pandaraya kumpara sa mga lehitimong transaksyon. [Reference](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.680.1195&rep=rep1&type=pdf) ### Pamamahala ng yaman -Sa pamamahala ng yaman, ang isang indibidwal o kumpanya ay humahawak ng mga pamumuhunan para sa kanilang mga kliyente. Ang kanilang trabaho ay panatilihin at palaguin ang yaman sa pangmatagalan, kaya mahalaga ang pumili ng mga pamumuhunan na maganda ang performance. +Sa pamamahala ng yaman, ang isang indibidwal o kumpanya ay humahawak ng mga pamumuhunan sa ngalan ng kanilang mga kliyente. Ang kanilang trabaho ay panatilihin at palaguin ang yaman sa pangmatagalan, kaya mahalaga ang pagpili ng mga pamumuhunan na maganda ang performance. -Isang paraan upang suriin kung paano nagpe-perform ang isang partikular na pamumuhunan ay sa pamamagitan ng statistical regression. Ang [linear regression](../../2-Regression/1-Tools/README.md) ay isang mahalagang tool para maunawaan kung paano nagpe-perform ang isang pondo kumpara sa isang benchmark. Maaari rin nating matukoy kung ang mga resulta ng regression ay statistically significant, o kung gaano kalaki ang epekto nito sa mga pamumuhunan ng kliyente. Maaari mo pang palawakin ang iyong pagsusuri gamit ang multiple regression, kung saan maaaring isaalang-alang ang karagdagang mga risk factor. Para sa isang halimbawa kung paano ito gagana para sa isang partikular na pondo, tingnan ang papel sa ibaba tungkol sa pagsusuri ng performance ng pondo gamit ang regression. +Isang paraan para suriin kung paano nagpe-perform ang isang partikular na pamumuhunan ay sa pamamagitan ng statistical regression. Ang [linear regression](../../2-Regression/1-Tools/README.md) ay isang mahalagang tool para maunawaan kung paano nagpe-perform ang isang fund kumpara sa isang benchmark. Maaari rin nating matukoy kung ang mga resulta ng regression ay statistically significant, o kung gaano kalaki ang epekto nito sa mga pamumuhunan ng kliyente. Maaari mo pang palawakin ang iyong pagsusuri gamit ang multiple regression, kung saan maaaring isama ang karagdagang mga risk factor. Para sa isang halimbawa kung paano ito gagana para sa isang partikular na fund, tingnan ang papel sa ibaba tungkol sa pagsusuri ng performance ng fund gamit ang regression. [Reference](http://www.brightwoodventures.com/evaluating-fund-performance-using-regression/) ## 🎓 Edukasyon -Ang sektor ng edukasyon ay isa ring napaka-interesanteng larangan kung saan maaaring gamitin ang ML. May mga kawili-wiling problema na maaaring lutasin tulad ng pagtuklas ng pandaraya sa mga pagsusulit o sanaysay o pamamahala ng bias, sinasadya man o hindi, sa proseso ng pagwawasto. +Ang sektor ng edukasyon ay isa ring napaka-interesanteng larangan kung saan maaaring gamitin ang ML. May mga kawili-wiling problema na maaaring lutasin tulad ng pagtuklas ng pandaraya sa mga pagsusulit o sanaysay, o pamamahala ng bias, sinasadya man o hindi, sa proseso ng pagwawasto. ### Pagtataya ng pag-uugali ng mag-aaral -Ang [Coursera](https://coursera.com), isang online open course provider, ay may mahusay na tech blog kung saan nila tinatalakay ang maraming desisyon sa engineering. Sa case study na ito, nag-plot sila ng regression line upang subukang tuklasin ang anumang kaugnayan sa pagitan ng mababang NPS (Net Promoter Score) rating at pag-retain o pag-drop-off ng kurso. +[Coursera](https://coursera.com), isang online open course provider, ay may mahusay na tech blog kung saan nila tinatalakay ang maraming desisyon sa engineering. Sa case study na ito, nag-plot sila ng regression line upang subukang tuklasin ang anumang ugnayan sa pagitan ng mababang NPS (Net Promoter Score) rating at retention o pag-drop-off sa kurso. [Reference](https://medium.com/coursera-engineering/controlled-regression-quantifying-the-impact-of-course-quality-on-learner-retention-31f956bd592a) ### Pagbawas ng bias -Ang [Grammarly](https://grammarly.com), isang writing assistant na nagche-check ng spelling at grammar errors, ay gumagamit ng mga sopistikadong [natural language processing systems](../../6-NLP/README.md) sa kanilang mga produkto. Nag-publish sila ng isang kawili-wiling case study sa kanilang tech blog tungkol sa kung paano nila hinarap ang gender bias sa machine learning, na natutunan mo sa aming [introductory fairness lesson](../../1-Introduction/3-fairness/README.md). +[Grammarly](https://grammarly.com), isang writing assistant na nagche-check ng spelling at grammar errors, ay gumagamit ng mga sopistikadong [natural language processing systems](../../6-NLP/README.md) sa kanilang mga produkto. Nag-publish sila ng isang kawili-wiling case study sa kanilang tech blog tungkol sa kung paano nila hinarap ang gender bias sa machine learning, na natutunan mo sa aming [introductory fairness lesson](../../1-Introduction/3-fairness/README.md). [Reference](https://www.grammarly.com/blog/engineering/mitigating-gender-bias-in-autocorrect/) ## 👜 Retail -Ang sektor ng retail ay tiyak na makikinabang mula sa paggamit ng ML, mula sa paglikha ng mas mahusay na customer journey hanggang sa optimal na pag-stock ng imbentaryo. +Ang sektor ng retail ay tiyak na makikinabang sa paggamit ng ML, mula sa paglikha ng mas mahusay na customer journey hanggang sa optimal na pamamahala ng imbentaryo. ### Pag-personalize ng customer journey -Sa Wayfair, isang kumpanya na nagbebenta ng mga gamit sa bahay tulad ng muwebles, mahalaga ang pagtulong sa mga customer na makahanap ng tamang produkto para sa kanilang panlasa at pangangailangan. Sa artikulong ito, inilarawan ng mga engineer mula sa kumpanya kung paano nila ginagamit ang ML at NLP upang "ipalabas ang tamang resulta para sa mga customer". Partikular, ang kanilang Query Intent Engine ay binuo upang gumamit ng entity extraction, classifier training, asset at opinion extraction, at sentiment tagging sa mga review ng customer. Ito ay isang klasikong halimbawa kung paano gumagana ang NLP sa online retail. +Sa Wayfair, isang kumpanya na nagbebenta ng mga gamit sa bahay tulad ng kasangkapan, mahalaga ang pagtulong sa mga customer na makahanap ng tamang produkto para sa kanilang panlasa at pangangailangan. Sa artikulong ito, inilalarawan ng mga engineer mula sa kumpanya kung paano nila ginagamit ang ML at NLP upang "ipalabas ang tamang resulta para sa mga customer". Kapansin-pansin, ang kanilang Query Intent Engine ay binuo upang gumamit ng entity extraction, classifier training, asset at opinion extraction, at sentiment tagging sa mga review ng customer. Ito ay isang klasikong halimbawa kung paano gumagana ang NLP sa online retail. [Reference](https://www.aboutwayfair.com/tech-innovation/how-we-use-machine-learning-and-natural-language-processing-to-empower-search) ### Pamamahala ng imbentaryo -Ang mga makabago at mabilis na kumpanya tulad ng [StitchFix](https://stitchfix.com), isang box service na nagpapadala ng damit sa mga consumer, ay lubos na umaasa sa ML para sa mga rekomendasyon at pamamahala ng imbentaryo. Ang kanilang mga styling team ay nagtutulungan kasama ang kanilang mga merchandising team. Sa katunayan, "ang isa sa aming mga data scientist ay nag-eksperimento sa isang genetic algorithm at inilapat ito sa damit upang mahulaan kung ano ang magiging matagumpay na piraso ng damit na hindi pa umiiral ngayon. Dinala namin ito sa merchandise team at ngayon maaari nila itong gamitin bilang isang tool." +Ang mga makabago at mabilis na kumpanya tulad ng [StitchFix](https://stitchfix.com), isang box service na nagpapadala ng damit sa mga consumer, ay lubos na umaasa sa ML para sa mga rekomendasyon at pamamahala ng imbentaryo. Ang kanilang mga styling team ay nagtutulungan sa kanilang mga merchandising team, sa katunayan: "isa sa aming mga data scientist ay nag-eksperimento sa isang genetic algorithm at inilapat ito sa damit upang mahulaan kung ano ang magiging matagumpay na piraso ng damit na hindi pa umiiral ngayon. Ibinahagi namin ito sa merchandise team at ngayon maaari nilang gamitin ito bilang isang tool." [Reference](https://www.zdnet.com/article/how-stitch-fix-uses-machine-learning-to-master-the-science-of-styling/) -## 🏥 Pangangalagang Pangkalusugan +## 🏥 Pangangalaga sa Kalusugan -Ang sektor ng pangangalagang pangkalusugan ay maaaring gumamit ng ML upang i-optimize ang mga gawain sa pananaliksik at pati na rin ang mga problemang logistic tulad ng muling pag-admit ng mga pasyente o pagpigil sa pagkalat ng mga sakit. +Ang sektor ng pangangalaga sa kalusugan ay maaaring gumamit ng ML upang i-optimize ang mga gawain sa pananaliksik at pati na rin ang mga problema sa logistics tulad ng readmitting ng mga pasyente o pagpigil sa pagkalat ng mga sakit. ### Pamamahala ng clinical trials -Ang toxicity sa clinical trials ay isang malaking alalahanin para sa mga gumagawa ng gamot. Gaano karaming toxicity ang katanggap-tanggap? Sa pag-aaral na ito, ang pagsusuri sa iba't ibang mga pamamaraan ng clinical trial ay humantong sa pagbuo ng isang bagong paraan para mahulaan ang posibilidad ng mga resulta ng clinical trial. Partikular, nagamit nila ang random forest upang makabuo ng isang [classifier](../../4-Classification/README.md) na kayang makilala ang mga grupo ng gamot. +Ang toxicity sa clinical trials ay isang malaking alalahanin para sa mga gumagawa ng gamot. Gaano karaming toxicity ang katanggap-tanggap? Sa pag-aaral na ito, ang pagsusuri sa iba't ibang mga clinical trial method ay humantong sa pagbuo ng isang bagong diskarte para sa pagtataya ng mga posibilidad ng mga resulta ng clinical trial. Partikular, nagamit nila ang random forest upang makabuo ng isang [classifier](../../4-Classification/README.md) na kayang mag-diskrimina sa pagitan ng mga grupo ng gamot. [Reference](https://www.sciencedirect.com/science/article/pii/S2451945616302914) -### Pamamahala ng muling pag-admit sa ospital +### Pamamahala ng readmission sa ospital -Ang pangangalaga sa ospital ay magastos, lalo na kapag kailangang muling i-admit ang mga pasyente. Tinalakay sa papel na ito ang isang kumpanya na gumagamit ng ML upang mahulaan ang potensyal na muling pag-admit gamit ang [clustering](../../5-Clustering/README.md) algorithms. Ang mga cluster na ito ay tumutulong sa mga analyst na "matuklasan ang mga grupo ng muling pag-admit na maaaring may parehong sanhi". +Ang pangangalaga sa ospital ay magastos, lalo na kapag kailangang ma-readmit ang mga pasyente. Ang papel na ito ay tinatalakay ang isang kumpanya na gumagamit ng ML upang mahulaan ang potensyal na readmission gamit ang [clustering](../../5-Clustering/README.md) algorithms. Ang mga cluster na ito ay tumutulong sa mga analyst upang "matuklasan ang mga grupo ng readmissions na maaaring may karaniwang sanhi". [Reference](https://healthmanagement.org/c/healthmanagement/issuearticle/hospital-readmissions-and-machine-learning) ### Pamamahala ng sakit -Ang kamakailang pandemya ay nagbigay-liwanag sa mga paraan kung paano makakatulong ang machine learning sa pagpigil sa pagkalat ng sakit. Sa artikulong ito, makikilala mo ang paggamit ng ARIMA, logistic curves, linear regression, at SARIMA. "Ang gawaing ito ay isang pagtatangka upang kalkulahin ang bilis ng pagkalat ng virus na ito at sa gayon ay mahulaan ang mga pagkamatay, paggaling, at kumpirmadong kaso, upang makatulong ito sa mas mahusay na paghahanda at kaligtasan." +Ang kamakailang pandemya ay nagbigay-diin sa mga paraan kung paano makakatulong ang machine learning sa pagpigil sa pagkalat ng sakit. Sa artikulong ito, makikilala mo ang paggamit ng ARIMA, logistic curves, linear regression, at SARIMA. "Ang gawaing ito ay isang pagsubok upang kalkulahin ang rate ng pagkalat ng virus na ito at sa gayon ay mahulaan ang mga pagkamatay, paggaling, at kumpirmadong kaso, upang makatulong sa mas mahusay na paghahanda at kaligtasan." [Reference](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7979218/) ## 🌲 Ekolohiya at Green Tech -Ang kalikasan at ekolohiya ay binubuo ng maraming sensitibong sistema kung saan ang ugnayan sa pagitan ng mga hayop at kalikasan ay napapansin. Mahalagang masukat nang tama ang mga sistemang ito at kumilos nang naaayon kung may mangyari, tulad ng sunog sa kagubatan o pagbaba ng populasyon ng hayop. +Ang kalikasan at ekolohiya ay binubuo ng maraming sensitibong sistema kung saan ang interaksyon sa pagitan ng mga hayop at kalikasan ay napapansin. Mahalagang masukat ang mga sistemang ito nang tama at kumilos nang naaayon kung may mangyari, tulad ng forest fire o pagbaba ng populasyon ng hayop. ### Pamamahala ng kagubatan -Natuto ka tungkol sa [Reinforcement Learning](../../8-Reinforcement/README.md) sa mga nakaraang aralin. Maaari itong maging napaka-kapaki-pakinabang kapag sinusubukang hulaan ang mga pattern sa kalikasan. Partikular, maaari itong magamit upang subaybayan ang mga problemang ekolohikal tulad ng sunog sa kagubatan at pagkalat ng invasive species. Sa Canada, isang grupo ng mga mananaliksik ang gumamit ng Reinforcement Learning upang bumuo ng mga modelo ng dynamics ng sunog sa kagubatan mula sa mga satellite images. Gamit ang isang makabagong "spatially spreading process (SSP)", inilarawan nila ang isang sunog sa kagubatan bilang "ang ahente sa anumang cell sa landscape." "Ang hanay ng mga aksyon na maaaring gawin ng sunog mula sa isang lokasyon sa anumang oras ay kinabibilangan ng pagkalat sa hilaga, timog, silangan, o kanluran o hindi pagkalat." +Natutunan mo ang tungkol sa [Reinforcement Learning](../../8-Reinforcement/README.md) sa mga nakaraang aralin. Maaari itong maging napaka-kapaki-pakinabang kapag sinusubukang hulaan ang mga pattern sa kalikasan. Partikular, maaari itong magamit upang subaybayan ang mga problema sa ekolohiya tulad ng forest fires at pagkalat ng invasive species. Sa Canada, isang grupo ng mga mananaliksik ang gumamit ng Reinforcement Learning upang bumuo ng mga modelo ng forest wildfire dynamics mula sa mga satellite images. Gamit ang isang makabago na "spatially spreading process (SSP)", inilarawan nila ang isang forest fire bilang "ang agent sa anumang cell sa landscape." "Ang set ng mga aksyon na maaaring gawin ng apoy mula sa isang lokasyon sa anumang punto ng oras ay kinabibilangan ng pagkalat sa hilaga, timog, silangan, o kanluran o hindi pagkalat. + +Ang diskarte na ito ay nagbabaliktad sa karaniwang RL setup dahil ang dynamics ng kaukulang Markov Decision Process (MDP) ay isang kilalang function para sa agarang pagkalat ng wildfire." Basahin ang higit pa tungkol sa mga klasikong algorithm na ginamit ng grupong ito sa link sa ibaba. [Reference](https://www.frontiersin.org/articles/10.3389/fict.2018.00006/full) -### Pagsubaybay sa galaw ng mga hayop +### Motion sensing ng mga hayop -Habang ang deep learning ay lumikha ng rebolusyon sa visual na pagsubaybay sa galaw ng mga hayop (maaari kang gumawa ng sarili mong [polar bear tracker](https://docs.microsoft.com/learn/modules/build-ml-model-with-azure-stream-analytics/?WT.mc_id=academic-77952-leestott) dito), may lugar pa rin ang klasikong ML sa gawaing ito. +Bagamat ang deep learning ay lumikha ng rebolusyon sa visual tracking ng mga galaw ng hayop (maaari kang gumawa ng sarili mong [polar bear tracker](https://docs.microsoft.com/learn/modules/build-ml-model-with-azure-stream-analytics/?WT.mc_id=academic-77952-leestott) dito), may lugar pa rin ang klasikong ML sa gawaing ito. -Ang mga sensor upang subaybayan ang galaw ng mga hayop sa bukid at IoT ay gumagamit ng ganitong uri ng visual processing, ngunit ang mas basic na ML techniques ay kapaki-pakinabang upang i-preprocess ang data. Halimbawa, sa papel na ito, ang mga postura ng tupa ay na-monitor at na-analyze gamit ang iba't ibang classifier algorithms. Maaaring makilala mo ang ROC curve sa pahina 335. +Ang mga sensor upang subaybayan ang mga galaw ng mga hayop sa sakahan at IoT ay gumagamit ng ganitong uri ng visual processing, ngunit ang mas basic na ML techniques ay kapaki-pakinabang para sa pag-preprocess ng data. Halimbawa, sa papel na ito, ang mga postura ng tupa ay na-monitor at na-analyze gamit ang iba't ibang classifier algorithms. Maaaring makilala mo ang ROC curve sa pahina 335. [Reference](https://druckhaus-hofmann.de/gallery/31-wj-feb-2020.pdf) ### ⚡️ Pamamahala ng Enerhiya -Sa ating mga aralin sa [time series forecasting](../../7-TimeSeries/README.md), binanggit natin ang konsepto ng smart parking meters upang makabuo ng kita para sa isang bayan batay sa pag-unawa sa supply at demand. Tinalakay nang detalyado sa artikulong ito kung paano pinagsama ang clustering, regression, at time series forecasting upang matulungan ang paghulaan ang hinaharap na paggamit ng enerhiya sa Ireland, batay sa smart metering. +Sa ating mga aralin sa [time series forecasting](../../7-TimeSeries/README.md), binanggit natin ang konsepto ng smart parking meters upang makabuo ng kita para sa isang bayan batay sa pag-unawa sa supply at demand. Ang artikulong ito ay nagdedetalye kung paano pinagsama ang clustering, regression, at time series forecasting upang makatulong sa pagtataya ng hinaharap na paggamit ng enerhiya sa Ireland, batay sa smart metering. [Reference](https://www-cdn.knime.com/sites/default/files/inline-images/knime_bigdata_energy_timeseries_whitepaper.pdf) -## 💼 Seguro +## 💼 Insurance -Ang sektor ng seguro ay isa pang sektor na gumagamit ng ML upang bumuo at i-optimize ang mga viable financial at actuarial models. +Ang sektor ng insurance ay isa pang sektor na gumagamit ng ML upang bumuo at i-optimize ang mga viable financial at actuarial models. ### Pamamahala ng Volatility -Ang MetLife, isang life insurance provider, ay bukas sa paraan kung paano nila sinusuri at binabawasan ang volatility sa kanilang mga financial models. Sa artikulong ito, mapapansin mo ang mga binary at ordinal classification visualizations. Makikita mo rin ang mga forecasting visualizations. +Ang MetLife, isang life insurance provider, ay bukas sa paraan kung paano nila sinusuri at binabawasan ang volatility sa kanilang mga financial models. Sa artikulong ito, makikita mo ang binary at ordinal classification visualizations. Makikita mo rin ang forecasting visualizations. [Reference](https://investments.metlife.com/content/dam/metlifecom/us/investments/insights/research-topics/macro-strategy/pdf/MetLifeInvestmentManagement_MachineLearnedRanking_070920.pdf) ## 🎨 Sining, Kultura, at Panitikan -Sa sining, halimbawa sa pamamahayag, maraming kawili-wiling problema. Ang pagtuklas ng pekeng balita ay isang malaking problema dahil napatunayang nakakaimpluwensya ito sa opinyon ng mga tao at kahit sa pagbagsak ng mga demokrasya. Ang mga museo ay maaari ring makinabang mula sa paggamit ng ML sa lahat ng bagay mula sa paghahanap ng mga ugnayan sa pagitan ng mga artifact hanggang sa pagpaplano ng mga mapagkukunan. +Sa sining, halimbawa sa journalism, maraming kawili-wiling problema. Ang pagtuklas ng pekeng balita ay isang malaking problema dahil napatunayan na ito ay nakakaimpluwensya sa opinyon ng mga tao at maging sa pagbagsak ng mga demokrasya. Ang mga museo ay maaari ring makinabang mula sa paggamit ng ML sa lahat ng bagay mula sa paghahanap ng mga koneksyon sa pagitan ng mga artifact hanggang sa pagpaplano ng mga resources. ### Pagtuklas ng pekeng balita -Ang pagtuklas ng pekeng balita ay naging isang laro ng habulan sa media ngayon. Sa artikulong ito, iminungkahi ng mga mananaliksik na ang isang sistema na pinagsasama ang ilang mga ML techniques na ating pinag-aralan ay maaaring subukan at ang pinakamahusay na modelo ay i-deploy: "Ang sistemang ito ay batay sa natural language processing upang kunin ang mga feature mula sa data at pagkatapos ang mga feature na ito ay ginagamit para sa training ng machine learning classifiers tulad ng Naive Bayes, Support Vector Machine (SVM), Random Forest (RF), Stochastic Gradient Descent (SGD), at Logistic Regression (LR)." +Ang pagtuklas ng pekeng balita ay naging isang laro ng habulan sa media ngayon. Sa artikulong ito, iminumungkahi ng mga mananaliksik na ang isang sistema na pinagsasama ang ilang mga ML techniques na ating pinag-aralan ay maaaring subukan at ang pinakamahusay na modelo ay i-deploy: "Ang sistemang ito ay batay sa natural language processing upang kunin ang mga feature mula sa data at pagkatapos ang mga feature na ito ay ginagamit para sa training ng machine learning classifiers tulad ng Naive Bayes, Support Vector Machine (SVM), Random Forest (RF), Stochastic Gradient Descent (SGD), at Logistic Regression(LR)." [Reference](https://www.irjet.net/archives/V7/i6/IRJET-V7I6688.pdf) Ipinapakita ng artikulong ito kung paano ang pagsasama-sama ng iba't ibang ML domains ay maaaring makabuo ng mga kawili-wiling resulta na makakatulong sa pagpigil sa pagkalat ng pekeng balita at paglikha ng tunay na pinsala; sa kasong ito, ang impetus ay ang pagkalat ng mga tsismis tungkol sa mga paggamot sa COVID na nag-udyok ng karahasan ng mob. ### Museum ML -Ang mga museo ay nasa hangganan ng isang AI rebolusyon kung saan ang pag-catalog at pag-digitize ng mga koleksyon at paghahanap ng mga ugnayan sa pagitan ng mga artifact ay nagiging mas madali habang umuunlad ang teknolohiya. Ang mga proyekto tulad ng [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources.) ay tumutulong na mabuksan ang mga misteryo ng mga hindi ma-access na koleksyon tulad ng Vatican Archives. Ngunit, ang aspeto ng negosyo ng mga museo ay nakikinabang din mula sa mga ML models. +Ang mga museo ay nasa hangganan ng isang AI rebolusyon kung saan ang pag-catalog at pag-digitize ng mga koleksyon at paghahanap ng mga koneksyon sa pagitan ng mga artifact ay nagiging mas madali habang umuunlad ang teknolohiya. Ang mga proyekto tulad ng [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources.) ay tumutulong sa pagbubukas ng mga misteryo ng mga hindi ma-access na koleksyon tulad ng Vatican Archives. Ngunit, ang business aspect ng mga museo ay nakikinabang din sa mga ML models. -Halimbawa, ang Art Institute of Chicago ay bumuo ng mga modelo upang mahulaan kung ano ang interes ng mga audience at kung kailan sila dadalo sa mga eksibisyon. Ang layunin ay lumikha ng mga individualized at optimized na karanasan ng bisita sa bawat pagbisita ng user sa museo. "Sa fiscal 2017, ang modelo ay hinulaan ang attendance at admissions na may 1 porsyento na katumpakan, sabi ni Andrew Simnick, senior vice president sa Art Institute." +Halimbawa, ang Art Institute of Chicago ay nagtayo ng mga modelo upang mahulaan kung ano ang interes ng mga audience at kung kailan sila dadalo sa mga eksibisyon. Ang layunin ay lumikha ng individualized at optimized na karanasan ng bisita sa bawat oras na bumisita ang user sa museo. "Noong fiscal 2017, ang modelo ay hinulaan ang attendance at admissions sa loob ng 1 porsyento ng katumpakan, sabi ni Andrew Simnick, senior vice president sa Art Institute." [Reference](https://www.chicagobusiness.com/article/20180518/ISSUE01/180519840/art-institute-of-chicago-uses-data-to-make-exhibit-choices) ## 🏷 Marketing -### Pag-segment ng customer +### Customer segmentation -Ang pinaka-epektibong mga estratehiya sa marketing ay nagta-target ng mga customer sa iba't ibang paraan batay sa iba't ibang mga grupo. Sa artikulong ito, tinalakay ang mga gamit ng Clustering algorithms upang suportahan ang differentiated marketing. Ang differentiated marketing ay tumutulong sa mga kumpanya na mapabuti ang brand recognition, maabot ang mas maraming customer, at kumita ng mas maraming pera. +Ang pinaka-epektibong mga estratehiya sa marketing ay nagta-target sa mga customer sa iba't ibang paraan batay sa iba't ibang mga grupo. Sa artikulong ito, tinalakay ang mga gamit ng Clustering algorithms upang suportahan ang differentiated marketing. Ang differentiated marketing ay tumutulong sa mga kumpanya na mapabuti ang brand recognition, maabot ang mas maraming customer, at kumita ng mas maraming pera. [Reference](https://ai.inqline.com/machine-learning-for-marketing-customer-segmentation/) ## 🚀 Hamon -Tukuyin ang isa pang sektor na nakikinabang mula sa ilang mga teknik na natutunan mo sa kurikulum na ito, at alamin kung paano nito ginagamit ang ML. -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/50/) +Tukuyin ang isa pang sektor na nakikinabang mula sa ilan sa mga teknik na natutunan mo sa kurikulum na ito, at alamin kung paano ito gumagamit ng ML. +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) -## Review & Pag-aaral sa Sarili +## Pagrepaso at Sariling Pag-aaral Ang Wayfair data science team ay may ilang mga kawili-wiling video tungkol sa kung paano nila ginagamit ang ML sa kanilang kumpanya. Sulit itong [panoorin](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos)! -## Takdang Aralin +## Takdang-Aralin [Isang ML scavenger hunt](assignment.md) --- **Paunawa**: -Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file +Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file diff --git a/translations/tl/9-Real-World/2-Debugging-ML-Models/README.md b/translations/tl/9-Real-World/2-Debugging-ML-Models/README.md index a9175ce7..74d28362 100644 --- a/translations/tl/9-Real-World/2-Debugging-ML-Models/README.md +++ b/translations/tl/9-Real-World/2-Debugging-ML-Models/README.md @@ -1,27 +1,27 @@ # Postscript: Pag-debug ng Modelo sa Machine Learning gamit ang mga Komponent ng Responsible AI Dashboard -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/) +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) ## Panimula -Ang machine learning ay may malaking epekto sa ating pang-araw-araw na buhay. Ang AI ay unti-unting nagiging bahagi ng mga mahahalagang sistema na nakakaapekto sa atin bilang indibidwal at sa lipunan, mula sa pangangalaga ng kalusugan, pananalapi, edukasyon, at trabaho. Halimbawa, ang mga sistema at modelo ay ginagamit sa mga pang-araw-araw na desisyon tulad ng diagnosis sa kalusugan o pagtukoy ng pandaraya. Dahil dito, ang mabilis na pag-unlad ng AI at ang mas pinalawak na paggamit nito ay nagdudulot ng mas mataas na inaasahan mula sa lipunan at mas mahigpit na regulasyon bilang tugon. Patuloy nating nakikita ang mga pagkakataon kung saan ang mga sistema ng AI ay hindi natutugunan ang mga inaasahan; nagdadala ito ng mga bagong hamon; at nagsisimula nang magpatupad ng regulasyon ang mga gobyerno sa mga solusyon ng AI. Kaya mahalaga na ang mga modelong ito ay masusing suriin upang makapagbigay ng patas, maaasahan, inklusibo, transparent, at responsableng resulta para sa lahat. +Ang machine learning ay may malaking epekto sa ating pang-araw-araw na buhay. Ang AI ay unti-unting nagiging bahagi ng mga mahahalagang sistema na nakakaapekto sa atin bilang mga indibidwal at sa ating lipunan, mula sa pangangalaga sa kalusugan, pananalapi, edukasyon, at trabaho. Halimbawa, ang mga sistema at modelo ay ginagamit sa mga pang-araw-araw na desisyon tulad ng mga diagnosis sa kalusugan o pagtuklas ng pandaraya. Dahil dito, ang mga pag-unlad sa AI kasabay ng mabilis na pag-aampon nito ay humaharap sa mga nagbabagong inaasahan ng lipunan at lumalaking regulasyon bilang tugon. Patuloy nating nakikita ang mga lugar kung saan ang mga sistema ng AI ay hindi natutugunan ang mga inaasahan; nagdadala ito ng mga bagong hamon; at nagsisimula nang i-regulate ng mga gobyerno ang mga solusyon sa AI. Kaya mahalaga na ang mga modelong ito ay masusing suriin upang magbigay ng patas, maaasahan, inklusibo, transparent, at responsable na resulta para sa lahat. Sa kurikulum na ito, tatalakayin natin ang mga praktikal na tool na maaaring gamitin upang suriin kung ang isang modelo ay may mga isyu sa Responsible AI. Ang tradisyunal na mga teknik sa pag-debug ng machine learning ay kadalasang nakabatay sa mga kalkulasyong dami tulad ng pinagsama-samang katumpakan o average na error loss. Isipin kung ano ang maaaring mangyari kapag ang data na ginagamit mo upang bumuo ng mga modelong ito ay kulang sa ilang demograpiko, tulad ng lahi, kasarian, pananaw sa politika, relihiyon, o hindi pantay na kinakatawan ang mga demograpikong ito. Paano kung ang output ng modelo ay pabor sa ilang demograpiko? Maaari itong magdulot ng labis o kulang na representasyon ng mga sensitibong grupo ng tampok na nagreresulta sa mga isyu sa pagiging patas, inklusibo, o maaasahan ng modelo. Isa pang salik ay ang mga modelo ng machine learning ay itinuturing na "black boxes," na nagpapahirap sa pag-unawa at pagpapaliwanag kung ano ang nag-uudyok sa prediksyon ng modelo. Ang lahat ng ito ay mga hamon na kinakaharap ng mga data scientist at AI developer kapag wala silang sapat na tool upang i-debug at suriin ang pagiging patas o pagiging mapagkakatiwalaan ng isang modelo. -Sa araling ito, matututuhan mo ang pag-debug ng iyong mga modelo gamit ang: +Sa araling ito, matututo ka tungkol sa pag-debug ng iyong mga modelo gamit ang: - **Error Analysis**: Tukuyin kung saan sa distribusyon ng iyong data ang modelo ay may mataas na error rates. -- **Model Overview**: Magsagawa ng comparative analysis sa iba't ibang data cohorts upang matuklasan ang mga pagkakaiba sa performance metrics ng iyong modelo. -- **Data Analysis**: Suriin kung saan maaaring may labis o kulang na representasyon ng iyong data na maaaring magdulot ng bias sa modelo upang paboran ang isang demograpiko laban sa iba. +- **Model Overview**: Gumawa ng comparative analysis sa iba't ibang data cohorts upang matuklasan ang mga pagkakaiba sa performance metrics ng iyong modelo. +- **Data Analysis**: Suriin kung saan maaaring may labis o kulang na representasyon ng iyong data na maaaring magdulot ng bias sa modelo upang paboran ang isang demograpiko kumpara sa iba. - **Feature Importance**: Unawain kung aling mga tampok ang nag-uudyok sa prediksyon ng iyong modelo sa global o lokal na antas. ## Paunang Kaalaman @@ -32,36 +32,36 @@ Bilang paunang kaalaman, mangyaring suriin ang [Responsible AI tools for develop ## Error Analysis -Ang tradisyunal na mga performance metrics ng modelo na ginagamit upang sukatin ang katumpakan ay kadalasang mga kalkulasyon batay sa tama vs maling prediksyon. Halimbawa, ang pagtukoy na ang isang modelo ay tama 89% ng oras na may error loss na 0.001 ay maaaring ituring na magandang performance. Gayunpaman, ang mga error ay kadalasang hindi pantay na ipinamamahagi sa iyong dataset. Maaaring makakuha ka ng 89% na accuracy score ng modelo ngunit matuklasan na may mga rehiyon ng iyong data kung saan nabibigo ang modelo 42% ng oras. Ang epekto ng mga pattern ng pagkabigo na ito sa ilang grupo ng data ay maaaring magdulot ng mga isyu sa pagiging patas o pagiging maaasahan. Mahalagang maunawaan ang mga lugar kung saan mahusay o hindi mahusay ang performance ng modelo. Ang mga rehiyon ng data kung saan may mataas na bilang ng mga kamalian sa iyong modelo ay maaaring maging mahalagang demograpiko ng data. +Ang tradisyunal na mga performance metrics ng modelo na ginagamit upang sukatin ang katumpakan ay kadalasang mga kalkulasyon batay sa tama kumpara sa maling prediksyon. Halimbawa, ang pagtukoy na ang isang modelo ay tama sa 89% ng oras na may error loss na 0.001 ay maaaring ituring na magandang performance. Gayunpaman, ang mga error ay kadalasang hindi pantay na ipinamamahagi sa iyong dataset. Maaaring makakuha ka ng 89% na accuracy score ng modelo ngunit matuklasan na may mga rehiyon ng iyong data kung saan nabibigo ang modelo sa 42% ng oras. Ang resulta ng mga pattern ng pagkabigo na ito sa ilang grupo ng data ay maaaring magdulot ng mga isyu sa pagiging patas o pagiging maaasahan. Mahalagang maunawaan ang mga lugar kung saan mahusay o hindi mahusay ang performance ng modelo. Ang mga rehiyon ng data kung saan may mataas na bilang ng mga kamalian sa iyong modelo ay maaaring maging mahalagang demograpiko ng data. -![Analyze and debug model errors](../../../../translated_images/ea-error-distribution.117452e1177c1dd84fab2369967a68bcde787c76c6ea7fdb92fcf15d1fce8206.tl.png) +![Suriin at i-debug ang mga error ng modelo](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-distribution.png) -Ang Error Analysis component sa RAI dashboard ay nagpapakita kung paano ipinamamahagi ang pagkabigo ng modelo sa iba't ibang cohorts gamit ang tree visualization. Ito ay kapaki-pakinabang sa pagtukoy ng mga tampok o lugar kung saan may mataas na error rate sa iyong dataset. Sa pamamagitan ng pagtingin kung saan nagmumula ang karamihan ng mga kamalian ng modelo, maaari mong simulan ang pagsisiyasat sa ugat ng problema. Maaari ka ring lumikha ng mga cohort ng data upang magsagawa ng pagsusuri. Ang mga cohort ng data na ito ay tumutulong sa proseso ng pag-debug upang matukoy kung bakit maganda ang performance ng modelo sa isang cohort ngunit may kamalian sa iba. +Ang Error Analysis component sa RAI dashboard ay nagpapakita kung paano ipinamamahagi ang pagkabigo ng modelo sa iba't ibang cohorts gamit ang tree visualization. Ito ay kapaki-pakinabang sa pagtukoy ng mga tampok o lugar kung saan may mataas na error rate sa iyong dataset. Sa pamamagitan ng pagtingin kung saan nagmumula ang karamihan sa mga kamalian ng modelo, maaari mong simulan ang pagsisiyasat sa ugat ng problema. Maaari ka ring lumikha ng mga cohort ng data upang magsagawa ng pagsusuri. Ang mga cohort ng data na ito ay nakakatulong sa proseso ng pag-debug upang matukoy kung bakit maganda ang performance ng modelo sa isang cohort ngunit may kamalian sa iba. -![Error Analysis](../../../../translated_images/ea-error-cohort.6886209ea5d438c4daa8bfbf5ce3a7042586364dd3eccda4a4e3d05623ac702a.tl.png) +![Error Analysis](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-cohort.png) -Ang mga visual indicator sa tree map ay tumutulong sa mas mabilis na pagtukoy ng mga problemang lugar. Halimbawa, ang mas madilim na lilim ng pulang kulay sa isang tree node ay nagpapahiwatig ng mas mataas na error rate. +Ang mga visual indicator sa tree map ay nakakatulong sa mas mabilis na pagtukoy ng mga problemang lugar. Halimbawa, ang mas madilim na lilim ng pulang kulay sa isang tree node ay nagpapahiwatig ng mas mataas na error rate. -Ang heat map ay isa pang visualization functionality na maaaring gamitin ng mga user upang suriin ang error rate gamit ang isa o dalawang tampok upang matukoy ang kontribusyon sa mga kamalian ng modelo sa buong dataset o cohorts. +Ang heat map ay isa pang functionality ng visualization na maaaring gamitin ng mga user upang suriin ang error rate gamit ang isa o dalawang tampok upang matukoy ang mga salik na nag-aambag sa mga error ng modelo sa buong dataset o cohorts. -![Error Analysis Heatmap](../../../../translated_images/ea-heatmap.8d27185e28cee3830c85e1b2e9df9d2d5e5c8c940f41678efdb68753f2f7e56c.tl.png) +![Error Analysis Heatmap](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-heatmap.png) Gamitin ang error analysis kapag kailangan mong: * Makakuha ng mas malalim na pag-unawa kung paano ipinamamahagi ang mga pagkabigo ng modelo sa isang dataset at sa iba't ibang input at feature dimensions. -* Hatiin ang pinagsama-samang performance metrics upang awtomatikong matuklasan ang mga erroneous cohorts na magbibigay impormasyon sa iyong targeted mitigation steps. +* Hatiin ang pinagsama-samang performance metrics upang awtomatikong matuklasan ang mga erroneous cohorts na magbibigay impormasyon sa iyong mga targeted mitigation steps. ## Model Overview -Ang pagsusuri sa performance ng isang machine learning model ay nangangailangan ng holistic na pag-unawa sa pag-uugali nito. Maaaring makamit ito sa pamamagitan ng pagsusuri sa higit sa isang metric tulad ng error rate, accuracy, recall, precision, o MAE (Mean Absolute Error) upang matukoy ang mga pagkakaiba sa performance metrics. Ang isang performance metric ay maaaring mukhang maganda, ngunit maaaring maipakita ang mga kamalian sa ibang metric. Bukod dito, ang paghahambing ng mga metrics para sa mga pagkakaiba sa buong dataset o cohorts ay nakakatulong upang makita kung saan mahusay o hindi mahusay ang performance ng modelo. Ito ay lalong mahalaga sa pagsusuri ng performance ng modelo sa mga sensitibo vs hindi sensitibong tampok (hal., lahi ng pasyente, kasarian, o edad) upang matuklasan ang potensyal na hindi pagiging patas ng modelo. Halimbawa, ang pagtuklas na ang modelo ay mas maraming kamalian sa isang cohort na may sensitibong tampok ay maaaring magpakita ng potensyal na hindi pagiging patas ng modelo. +Ang pagsusuri sa performance ng isang machine learning model ay nangangailangan ng holistic na pag-unawa sa pag-uugali nito. Ito ay maaaring makamit sa pamamagitan ng pagsusuri sa higit sa isang metric tulad ng error rate, accuracy, recall, precision, o MAE (Mean Absolute Error) upang matukoy ang mga pagkakaiba sa performance metrics. Ang isang performance metric ay maaaring magmukhang maganda, ngunit maaaring maipakita ang mga kamalian sa ibang metric. Bukod dito, ang paghahambing ng mga metrics para sa mga pagkakaiba sa buong dataset o cohorts ay nakakatulong upang makita kung saan mahusay o hindi mahusay ang performance ng modelo. Ito ay lalong mahalaga sa pagtingin sa performance ng modelo sa pagitan ng mga sensitibo at hindi sensitibong tampok (hal., lahi ng pasyente, kasarian, o edad) upang matuklasan ang potensyal na pagiging hindi patas ng modelo. Halimbawa, ang pagtuklas na ang modelo ay mas maraming kamalian sa isang cohort na may sensitibong tampok ay maaaring magbunyag ng potensyal na pagiging hindi patas ng modelo. Ang Model Overview component ng RAI dashboard ay tumutulong hindi lamang sa pagsusuri ng performance metrics ng representasyon ng data sa isang cohort, kundi nagbibigay din ito ng kakayahan sa mga user na ihambing ang pag-uugali ng modelo sa iba't ibang cohorts. -![Dataset cohorts - model overview in RAI dashboard](../../../../translated_images/model-overview-dataset-cohorts.dfa463fb527a35a0afc01b7b012fc87bf2cad756763f3652bbd810cac5d6cf33.tl.png) +![Dataset cohorts - model overview sa RAI dashboard](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-dataset-cohorts.png) -Ang functionality ng feature-based analysis ng component ay nagbibigay-daan sa mga user na mag-focus sa mga subgroup ng data sa loob ng isang partikular na tampok upang matukoy ang mga anomalya sa mas detalyadong antas. Halimbawa, ang dashboard ay may built-in intelligence upang awtomatikong bumuo ng mga cohort para sa isang user-selected feature (hal., *"time_in_hospital < 3"* o *"time_in_hospital >= 7"*). Pinapayagan nito ang user na ihiwalay ang isang partikular na tampok mula sa mas malaking grupo ng data upang makita kung ito ay isang pangunahing salik sa mga kamalian ng modelo. +Ang functionality ng feature-based analysis ng component ay nagbibigay-daan sa mga user na mag-focus sa mga subgroup ng data sa loob ng isang partikular na tampok upang matukoy ang mga anomalya sa mas detalyadong antas. Halimbawa, ang dashboard ay may built-in intelligence upang awtomatikong bumuo ng mga cohort para sa isang user-selected feature (hal., *"time_in_hospital < 3"* o *"time_in_hospital >= 7"*). Ito ay nagbibigay-daan sa user na ihiwalay ang isang partikular na tampok mula sa mas malaking grupo ng data upang makita kung ito ay isang pangunahing salik ng mga kamalian ng modelo. -![Feature cohorts - model overview in RAI dashboard](../../../../translated_images/model-overview-feature-cohorts.c5104d575ffd0c80b7ad8ede7703fab6166bfc6f9125dd395dcc4ace2f522f70.tl.png) +![Feature cohorts - model overview sa RAI dashboard](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-feature-cohorts.png) Ang Model Overview component ay sumusuporta sa dalawang klase ng disparity metrics: @@ -77,80 +77,78 @@ Ang Model Overview component ay sumusuporta sa dalawang klase ng disparity metri ## Data Analysis -> "Kung pinilit mo ang data nang matagal, aamin ito sa kahit ano" - Ronald Coase +> "Kung pipilitin mo ang data nang matagal, aamin ito sa kahit ano" - Ronald Coase -Ang pahayag na ito ay mukhang matindi, ngunit totoo na ang data ay maaaring manipulahin upang suportahan ang anumang konklusyon. Ang ganitong manipulasyon ay minsan nangyayari nang hindi sinasadya. Bilang tao, lahat tayo ay may bias, at madalas mahirap malaman kung kailan tayo nagdadala ng bias sa data. Ang pagtiyak ng pagiging patas sa AI at machine learning ay nananatiling isang kumplikadong hamon. +Ang pahayag na ito ay tunog matindi, ngunit totoo na ang data ay maaaring manipulahin upang suportahan ang anumang konklusyon. Ang ganitong manipulasyon ay minsan nangyayari nang hindi sinasadya. Bilang mga tao, lahat tayo ay may bias, at madalas mahirap malaman kung kailan tayo nagdadala ng bias sa data. Ang pagtiyak ng pagiging patas sa AI at machine learning ay nananatiling isang kumplikadong hamon. -Ang data ay isang malaking blind spot para sa tradisyunal na performance metrics ng modelo. Maaaring mataas ang accuracy scores mo, ngunit hindi nito palaging naipapakita ang bias sa ilalim ng data na maaaring nasa iyong dataset. Halimbawa, kung ang dataset ng mga empleyado ay may 27% na kababaihan sa mga posisyon ng ehekutibo sa isang kumpanya at 73% na kalalakihan sa parehong antas, ang isang AI model para sa job advertising na sinanay sa data na ito ay maaaring mag-target ng karamihan sa mga kalalakihan para sa senior level job positions. Ang imbalance na ito sa data ay nagdulot ng bias sa prediksyon ng modelo upang paboran ang isang kasarian. Ipinapakita nito ang isang isyu sa pagiging patas kung saan may gender bias sa AI model. +Ang data ay isang malaking blind spot para sa tradisyunal na mga performance metrics ng modelo. Maaaring mataas ang accuracy scores mo, ngunit hindi nito palaging naipapakita ang bias sa data na maaaring nasa iyong dataset. Halimbawa, kung ang dataset ng mga empleyado ay may 27% na kababaihan sa mga executive positions sa isang kumpanya at 73% na kalalakihan sa parehong antas, ang isang job advertising AI model na sinanay sa data na ito ay maaaring mag-target ng karamihan sa mga kalalakihan para sa senior level job positions. Ang imbalance na ito sa data ay nagdulot ng bias sa prediksyon ng modelo upang paboran ang isang kasarian. Ipinapakita nito ang isang isyu sa pagiging patas kung saan may gender bias sa AI model. -Ang Data Analysis component sa RAI dashboard ay tumutulong upang matukoy ang mga lugar kung saan may labis o kulang na representasyon sa dataset. Tinutulungan nito ang mga user na suriin ang ugat ng mga kamalian at isyu sa pagiging patas na dulot ng imbalance sa data o kakulangan ng representasyon ng isang partikular na grupo ng data. Binibigyan nito ang mga user ng kakayahan na i-visualize ang mga dataset batay sa predicted at actual outcomes, error groups, at mga partikular na tampok. Minsan, ang pagtuklas ng underrepresented na grupo ng data ay maaari ring magpakita na ang modelo ay hindi natututo nang maayos, kaya mataas ang mga kamalian. Ang pagkakaroon ng modelo na may bias sa data ay hindi lamang isang isyu sa pagiging patas kundi nagpapakita rin na ang modelo ay hindi inklusibo o maaasahan. +Ang Data Analysis component sa RAI dashboard ay tumutulong upang matukoy ang mga lugar kung saan may labis o kulang na representasyon sa dataset. Tinutulungan nito ang mga user na suriin ang ugat ng mga error at isyu sa pagiging patas na dulot ng mga imbalance sa data o kakulangan ng representasyon ng isang partikular na grupo ng data. Binibigyan nito ang mga user ng kakayahan na i-visualize ang mga dataset batay sa predicted at actual outcomes, error groups, at mga partikular na tampok. Minsan ang pagtuklas ng underrepresented na grupo ng data ay maaari ring magbunyag na ang modelo ay hindi natututo nang maayos, kaya't mataas ang mga kamalian. Ang pagkakaroon ng modelo na may bias sa data ay hindi lamang isyu sa pagiging patas kundi nagpapakita rin na ang modelo ay hindi inklusibo o maaasahan. -![Data Analysis component on RAI Dashboard](../../../../translated_images/dataanalysis-cover.8d6d0683a70a5c1e274e5a94b27a71137e3d0a3b707761d7170eb340dd07f11d.tl.png) +![Data Analysis component sa RAI Dashboard](../../../../9-Real-World/2-Debugging-ML-Models/images/dataanalysis-cover.png) Gamitin ang data analysis kapag kailangan mong: * Galugarin ang mga istatistika ng iyong dataset sa pamamagitan ng pagpili ng iba't ibang filter upang hatiin ang iyong data sa iba't ibang dimensyon (kilala rin bilang cohorts). -* Unawain ang distribusyon ng iyong dataset sa iba't ibang cohorts at feature groups. -* Tukuyin kung ang iyong mga natuklasan na may kaugnayan sa pagiging patas, error analysis, at causality (na nakuha mula sa iba pang mga component ng dashboard) ay resulta ng distribusyon ng iyong dataset. -* Magpasya kung saang mga lugar dapat mangolekta ng mas maraming data upang mabawasan ang mga kamalian na dulot ng mga isyu sa representasyon, label noise, feature noise, label bias, at mga katulad na salik. +* Unawain ang distribusyon ng iyong dataset sa iba't ibang cohorts at grupo ng tampok. +* Tukuyin kung ang iyong mga natuklasan na may kaugnayan sa pagiging patas, error analysis, at causality (mula sa iba pang mga component ng dashboard) ay resulta ng distribusyon ng iyong dataset. +* Magpasya kung saang mga lugar dapat mangolekta ng mas maraming data upang mabawasan ang mga error na dulot ng mga isyu sa representasyon, label noise, feature noise, label bias, at mga katulad na salik. ## Model Interpretability -Ang mga modelo ng machine learning ay kadalasang itinuturing na "black boxes." Ang pag-unawa kung aling mga pangunahing tampok ng data ang nag-uudyok sa prediksyon ng modelo ay maaaring maging hamon. Mahalagang magbigay ng transparency kung bakit gumagawa ng isang partikular na prediksyon ang modelo. Halimbawa, kung ang isang AI system ay nagpredikta na ang isang diabetic na pasyente ay nasa panganib na ma-readmit sa ospital sa loob ng mas mababa sa 30 araw, dapat itong magbigay ng mga sumusuportang data na nagdulot ng prediksyon nito. Ang pagkakaroon ng mga sumusuportang data indicator ay nagdadala ng transparency upang matulungan ang mga clinician o ospital na makagawa ng mas maayos na desisyon. Bukod dito, ang kakayahang ipaliwanag kung bakit gumawa ng prediksyon ang modelo para sa isang indibidwal na pasyente ay nagbibigay ng accountability sa mga regulasyon sa kalusugan. Kapag ginagamit mo ang mga modelo ng machine learning sa mga paraan na nakakaapekto sa buhay ng mga tao, mahalagang maunawaan at maipaliwanag kung ano ang nag-uudyok sa pag-uugali ng modelo. Ang model explainability at interpretability ay tumutulong upang sagutin ang mga tanong sa mga sitwasyon tulad ng: +Ang mga modelo ng machine learning ay kadalasang itinuturing na "black boxes." Ang pag-unawa kung aling mga pangunahing tampok ng data ang nag-uudyok sa prediksyon ng modelo ay maaaring maging hamon. Mahalagang magbigay ng transparency kung bakit gumagawa ng isang partikular na prediksyon ang modelo. Halimbawa, kung ang isang sistema ng AI ay nagpredikta na ang isang diabetic na pasyente ay nasa panganib na ma-readmit sa ospital sa loob ng mas mababa sa 30 araw, dapat itong magbigay ng mga sumusuportang data na nagdulot ng prediksyon nito. Ang pagkakaroon ng mga sumusuportang data indicator ay nagdadala ng transparency upang matulungan ang mga clinician o ospital na makagawa ng mas maayos na desisyon. Bukod dito, ang kakayahang ipaliwanag kung bakit gumawa ng prediksyon ang modelo para sa isang indibidwal na pasyente ay nagbibigay ng accountability sa mga regulasyon sa kalusugan. Kapag gumagamit ka ng mga modelo ng machine learning sa mga paraan na nakakaapekto sa buhay ng mga tao, mahalagang maunawaan at maipaliwanag kung ano ang nag-uudyok sa pag-uugali ng modelo. Ang model explainability at interpretability ay tumutulong upang sagutin ang mga tanong sa mga sitwasyon tulad ng: * Pag-debug ng modelo: Bakit nagkamali ang aking modelo? Paano ko mapapabuti ang aking modelo? * Pakikipagtulungan ng tao at AI: Paano ko mauunawaan at mapagkakatiwalaan ang mga desisyon ng modelo? * Pagsunod sa regulasyon: Natutugunan ba ng aking modelo ang mga legal na kinakailangan? -Ang Feature Importance component ng RAI dashboard ay tumutulong sa pag-debug at pagkuha ng komprehensibong pag-unawa kung paano gumagawa ng prediksyon ang modelo. Ito rin ay kapaki-pakinabang na tool para sa mga propesyonal sa machine learning at mga tagapagdesisyon upang ipaliwanag at ipakita ang ebidensya ng mga tampok na nakakaapekto sa pag-uugali ng modelo para sa pagsunod sa regulasyon. Bukod dito, maaaring tuklasin ng mga user ang parehong global at local explanations upang ma-validate kung aling mga tampok ang nag-uudyok sa prediksyon ng modelo. Ang global explanations ay naglilista ng mga pangunahing tampok na nakaapekto sa pangkalahatang prediksyon ng modelo. Ang local explanations ay nagpapakita kung aling mga tampok ang nagdulot ng prediksyon ng modelo para sa isang indibidwal na kaso. Ang kakayahang suriin ang local explanations ay kapaki-pakinabang din sa pag-debug o pag-audit ng isang partikular na kaso upang mas maunawaan at maipaliwanag kung bakit gumawa ng tama o maling prediksyon ang modelo. +Ang Feature Importance component ng RAI dashboard ay tumutulong sa pag-debug at pagkuha ng komprehensibong pag-unawa kung paano gumagawa ng prediksyon ang modelo. Ito rin ay kapaki-pakinabang na tool para sa mga propesyonal sa machine learning at mga tagapagdesisyon upang ipaliwanag at ipakita ang ebidensya ng mga tampok na nakakaimpluwensya sa pag-uugali ng modelo para sa pagsunod sa regulasyon. Susunod, maaaring tuklasin ng mga user ang parehong global at local explanations upang mapatunayan kung aling mga tampok ang nag-uudyok sa prediksyon ng modelo. Ang global explanations ay naglilista ng mga pangunahing tampok na nakaapekto sa pangkalahatang prediksyon ng modelo. Ang local explanations ay nagpapakita kung aling mga tampok ang nagdulot ng prediksyon ng modelo para sa isang indibidwal na kaso. Ang kakayahang suriin ang local explanations ay kapaki-pakinabang din sa pag-debug o pag-audit ng isang partikular na kaso upang mas maunawaan at maipaliwanag kung bakit gumawa ng tama o maling prediksyon ang modelo. -![Feature Importance component of the RAI dashboard](../../../../translated_images/9-feature-importance.cd3193b4bba3fd4bccd415f566c2437fb3298c4824a3dabbcab15270d783606e.tl.png) +![Feature Importance component ng RAI dashboard](../../../../9-Real-World/2-Debugging-ML-Models/images/9-feature-importance.png) * Global explanations: Halimbawa, anong mga tampok ang nakaapekto sa pangkalahatang pag-uugali ng isang diabetes hospital readmission model? * Local explanations: Halimbawa, bakit ang isang diabetic na pasyente na higit sa 60 taong gulang na may mga nakaraang hospitalizations ay napredikta na ma-readmit o hindi ma-readmit sa loob ng 30 araw pabalik sa ospital? -Sa proseso ng pag-debug ng pagsusuri sa performance ng modelo sa iba't ibang cohorts, ipinapakita ng Feature Importance kung anong antas ng epekto ang mayroon ang isang tampok sa iba't ibang cohorts. Tumutulong ito upang maipakita ang mga anomalya kapag inihambing ang antas ng impluwensya ng tampok sa pag-uudyok ng mga kamalian ng modelo. Ang Feature Importance component ay maaaring magpakita kung aling mga halaga sa isang tampok ang positibo o negatibong nakaapekto sa resulta ng modelo. Halimbawa, kung ang modelo ay gumawa ng maling prediksyon, binibigyan ka ng component ng kakayahan na mag-drill down at tukuyin kung anong mga tampok o halaga ng tampok ang nagdulot ng prediksyon. Ang antas ng detalye na ito ay tumutulong hindi lamang sa pag-debug kundi nagbibigay din ng transparency at accountability sa mga sitwasyon ng pag-audit. Sa wakas, ang component ay maaaring tumulong upang matukoy ang mga isyu sa pagiging patas. Halimbawa, kung ang isang sensitibong tampok tulad ng etnisidad o kasarian ay may mataas na impluwensya sa pag-uudyok ng prediksyon ng modelo, maaaring ito ay senyales ng bias sa lahi o kasarian sa modelo. +Sa proseso ng pag-debug sa pagsusuri ng performance ng modelo sa iba't ibang cohorts, ipinapakita ng Feature Importance kung anong antas ng epekto ang mayroon ang isang tampok sa iba't ibang cohorts. Nakakatulong ito upang maipakita ang mga anomalya kapag inihambing ang antas ng impluwensya ng tampok sa pag-uudyok ng mga maling prediksyon ng modelo. Ang Feature Importance component ay maaaring magpakita kung aling mga halaga sa isang tampok ang positibo o negatibong nakaimpluwensya sa resulta ng modelo. Halimbawa, kung ang modelo ay gumawa ng maling prediksyon, binibigyan ka ng component ng kakayahang suriin at tukuyin kung aling mga tampok o halaga ng tampok ang nagdulot ng prediksyon. Ang antas ng detalye na ito ay hindi lamang nakakatulong sa pag-debug kundi nagbibigay din ng transparency at accountability sa mga sitwasyon ng pag-audit. Sa wakas, ang component ay maaaring makatulong upang matukoy ang mga isyu sa pagiging patas. Halimbawa, kung ang isang sensitibong tampok tulad ng etnisidad o kasarian ay may mataas na impluwensya sa pag-uudyok ng prediksyon ng modelo, maaaring ito ay senyales ng bias sa lahi o kasarian sa modelo. -![Feature importance](../../../../translated_images/9-features-influence.3ead3d3f68a84029f1e40d3eba82107445d3d3b6975d4682b23d8acc905da6d0.tl.png) +![Feature importance](../../../../9-Real-World/2-Debugging-ML-Models/images/9-features-influence.png) Gamitin ang interpretability kapag kailangan mong: * Tukuyin kung gaano mapagkakatiwalaan ang mga prediksyon ng iyong AI system sa pamamagitan ng pag-unawa kung aling mga tampok ang pinakamahalaga para sa mga prediksyon. -* Lapitan ang pag-debug ng iyong modelo sa pamamagitan ng pag-unawa dito muna at pagtukoy kung ang modelo ay gumagamit ng mga tamang tampok o maling correlations lamang. -* Tuklasin ang mga potensyal na pinagmumulan ng hindi pagiging patas sa pamamagitan ng pag-unawa kung ang modelo ay batay sa mga sensitibong tampok o sa mga tampok na lubos na nauugnay sa mga ito. -* Bumuo ng tiwala ng user sa mga desisyon ng modelo sa pamamagitan ng pagbuo ng local explanations upang ipakita ang kanilang mga resulta. -* Kumpletuhin ang regulatory audit ng isang AI system upang i-validate ang mga modelo at subaybayan ang epekto ng mga desisyon ng modelo sa mga tao. +* Lapitan ang pag-debug ng iyong modelo sa pamamagitan ng pag-unawa dito muna at pagtukoy kung ang modelo ay gumagamit ng malusog na mga tampok o simpleng maling correlations. +* Tuklasin ang mga potensyal na pinagmulan ng pagiging hindi patas sa pamamagitan ng pag-unawa kung ang modelo ay batay sa mga sensitibong tampok o sa mga tampok na lubos na nauugnay sa mga ito. +* Bumuo ng tiwala ng user sa mga desisyon ng iyong modelo sa pamamagitan ng pagbuo ng local explanations upang ipakita ang kanilang mga resulta. +* Kumpletuhin ang regulatory audit ng isang AI system upang mapatunayan ang mga modelo at subaybayan ang epekto ng mga desisyon ng modelo sa mga tao. ## Konklusyon -Ang lahat ng mga component ng RAI dashboard ay mga praktikal na tool upang matulungan kang bumuo ng mga modelo ng machine learning na mas hindi nakakapinsala at mas mapagkakatiwalaan sa lipunan. Pinapabuti nito ang pag-iwas sa mga banta sa karapatang pantao; diskriminasyon o pag-aalis sa ilang grupo sa mga oportunidad sa buhay; at ang panganib ng pisikal o sikolohikal na pinsala. Tumutulong din ito upang bumuo ng tiwala sa mga desisyon -- **Sobra o kulang na representasyon**. Ang ideya ay may isang grupo na hindi nakikita sa isang partikular na propesyon, at anumang serbisyo o function na patuloy na nagpo-promote nito ay nagdudulot ng pinsala. +Ang lahat ng mga component ng RAI dashboard ay mga praktikal na tool upang matulungan kang bumuo ng mga modelo ng machine learning na mas hindi nakakapinsala at mas mapagkakatiwalaan sa lipunan. Pinapabuti nito ang pag-iwas sa mga banta sa karapatang pantao; diskriminasyon o pag-aalis sa ilang grupo sa mga oportunidad sa buhay; at ang panganib ng pisikal o sikolohikal na pinsala. Nakakatulong din ito upang bumuo ng tiwala sa mga des +- **Sobra o kulang na representasyon**. Ang ideya ay mayroong isang grupo na hindi nakikita sa isang partikular na propesyon, at anumang serbisyo o tungkulin na patuloy na nagpo-promote nito ay nagdudulot ng pinsala. ### Azure RAI dashboard -[Azure RAI dashboard](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) ay binuo gamit ang mga open-source na tools na ginawa ng mga nangungunang akademikong institusyon at organisasyon, kabilang ang Microsoft. Ang mga ito ay mahalaga para sa mga data scientist at AI developer upang mas maunawaan ang ugali ng modelo, matuklasan, at mabawasan ang mga hindi kanais-nais na isyu mula sa mga AI model. +[Azure RAI dashboard](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) ay binuo gamit ang mga open-source na tools na ginawa ng mga nangungunang akademikong institusyon at organisasyon, kabilang ang Microsoft, na mahalaga para sa mga data scientist at AI developer upang mas maunawaan ang ugali ng modelo, tuklasin at bawasan ang mga hindi kanais-nais na isyu mula sa mga AI model. - Alamin kung paano gamitin ang iba't ibang bahagi sa pamamagitan ng pag-check sa RAI dashboard [docs.](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) - Tingnan ang ilang RAI dashboard [sample notebooks](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) para sa pag-debug ng mas responsableng AI scenarios sa Azure Machine Learning. --- - ## 🚀 Hamon Upang maiwasan ang pagpasok ng statistical o data biases mula sa simula, dapat nating: -- magkaroon ng iba't ibang background at pananaw sa mga taong nagtatrabaho sa mga sistema +- magkaroon ng iba't ibang pinagmulan at pananaw sa mga taong nagtatrabaho sa mga sistema - mag-invest sa mga dataset na sumasalamin sa pagkakaiba-iba ng ating lipunan -- mag-develop ng mas mahusay na mga pamamaraan para sa pagtuklas at pagwawasto ng bias kapag ito ay nangyari +- bumuo ng mas mahusay na mga pamamaraan para sa pagtuklas at pagwawasto ng bias kapag ito ay nangyari Pag-isipan ang mga totoong sitwasyon kung saan halata ang kawalan ng katarungan sa paggawa at paggamit ng modelo. Ano pa ang dapat nating isaalang-alang? -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/6/) - -## Review & Self Study +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) +## Review at Pag-aaral ng Sarili -Sa araling ito, natutunan mo ang ilang praktikal na tools para maisama ang responsableng AI sa machine learning. +Sa araling ito, natutunan mo ang ilang praktikal na tools para isama ang responsableng AI sa machine learning. Panoorin ang workshop na ito upang mas malalim na talakayin ang mga paksa: @@ -177,4 +175,4 @@ Gamitin ang mga sumusunod na materyales upang matuto pa tungkol sa responsableng --- **Paunawa**: -Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito. \ No newline at end of file +Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito. \ No newline at end of file diff --git a/translations/tl/README.md b/translations/tl/README.md index 8229e678..39b87bc3 100644 --- a/translations/tl/README.md +++ b/translations/tl/README.md @@ -1,8 +1,8 @@ +# Giới thiệu về học máy + +## [Câu hỏi 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 - Giới thiệu về học máy cho người mới bắt đầu](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](https://youtu.be/6mSx_KJxcHI "Học máy cho người mới bắt đầu - Giới thiệu về học máy cho người mới bắt đầu") + +> 🎥 Nhấp vào hình ảnh trên để xem video ngắn về bài học này. + +Chào mừng bạn đến với khóa học về học máy cổ điển dành cho người mới bắt đầu! Dù bạn hoàn toàn mới với chủ đề này hay là một người thực hành học máy có kinh nghiệm muốn ôn lại một lĩnh vực, chúng tôi rất vui khi bạn tham gia cùng chúng tôi! Chúng tôi muốn tạo một điểm khởi đầu thân thiện cho việc học học máy của bạn và rất vui được đánh giá, phản hồi và tích hợp [ý kiến đóng góp của bạn](https://github.com/microsoft/ML-For-Beginners/discussions). + +[![Giới thiệu về học máy](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Giới thiệu về học máy") + +> 🎥 Nhấp vào hình ảnh trên để xem video: John Guttag từ MIT giới thiệu về học máy + +--- +## Bắt đầu với học máy + +Trước khi bắt đầu với chương trình học này, bạn cần chuẩn bị máy tính của mình để chạy các notebook cục bộ. + +- **Cấu hình máy của bạn với các video này**. Sử dụng các liên kết sau để học [cách cài đặt Python](https://youtu.be/CXZYvNRIAKM) trên hệ thống của bạn và [cài đặt trình soạn thảo văn bản](https://youtu.be/EU8eayHWoZg) để phát triển. +- **Học Python**. Bạn cũng nên có hiểu biết cơ bản về [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), một ngôn ngữ lập trình hữu ích cho các nhà khoa học dữ liệu mà chúng tôi sử dụng trong khóa học này. +- **Học Node.js và JavaScript**. Chúng tôi cũng sử dụng JavaScript vài lần trong khóa học này khi xây dựng ứng dụng web, vì vậy bạn cần cài đặt [node](https://nodejs.org) và [npm](https://www.npmjs.com/), cũng như [Visual Studio Code](https://code.visualstudio.com/) để phát triển cả Python và JavaScript. +- **Tạo tài khoản GitHub**. Vì bạn đã tìm thấy chúng tôi trên [GitHub](https://github.com), có thể bạn đã có tài khoản, nhưng nếu chưa, hãy tạo một tài khoản và sau đó fork chương trình học này để sử dụng riêng. (Đừng ngại cho chúng tôi một ngôi sao nhé 😊) +- **Khám phá Scikit-learn**. Làm quen với [Scikit-learn](https://scikit-learn.org/stable/user_guide.html), một bộ thư viện học máy mà chúng tôi tham khảo trong các bài học này. + +--- +## Học máy là gì? + +Thuật ngữ 'học máy' là một trong những thuật ngữ phổ biến và được sử dụng nhiều nhất hiện nay. Có khả năng cao là bạn đã nghe thuật ngữ này ít nhất một lần nếu bạn có chút quen thuộc với công nghệ, bất kể lĩnh vực bạn làm việc. Tuy nhiên, cơ chế của học máy vẫn là một bí ẩn đối với hầu hết mọi người. Đối với người mới bắt đầu học máy, chủ đề này đôi khi có thể cảm thấy quá tải. Vì vậy, điều quan trọng là phải hiểu học máy thực sự là gì và học về nó từng bước, thông qua các ví dụ thực tế. + +--- +## Đường cong cường điệu + +![ml hype curve](../../../../1-Introduction/1-intro-to-ML/images/hype.png) + +> Google Trends cho thấy 'đường cong cường điệu' gần đây của thuật ngữ 'học máy' + +--- +## Một vũ trụ bí ẩn + +Chúng ta sống trong một vũ trụ đầy những bí ẩn hấp dẫn. Những nhà khoa học vĩ đại như Stephen Hawking, Albert Einstein, và nhiều người khác đã dành cả cuộc đời để tìm kiếm thông tin có ý nghĩa nhằm khám phá những bí ẩn của thế giới xung quanh chúng ta. Đây là bản chất học hỏi của con người: một đứa trẻ học những điều mới và khám phá cấu trúc của thế giới xung quanh nó từng năm khi nó lớn lên. + +--- +## Bộ não của trẻ em + +Bộ não và các giác quan của trẻ em nhận thức các sự kiện xung quanh và dần dần học các mẫu ẩn của cuộc sống, giúp trẻ tạo ra các quy tắc logic để nhận diện các mẫu đã học. Quá trình học hỏi của bộ não con người khiến con người trở thành sinh vật sống tinh vi nhất trên thế giới này. Việc học liên tục bằng cách khám phá các mẫu ẩn và sau đó đổi mới trên các mẫu đó cho phép chúng ta cải thiện bản thân ngày càng tốt hơn trong suốt cuộc đời. Khả năng học hỏi và phát triển này liên quan đến một khái niệm gọi là [tính dẻo của não](https://www.simplypsychology.org/brain-plasticity.html). Một cách bề mặt, chúng ta có thể rút ra một số điểm tương đồng mang tính động lực giữa quá trình học hỏi của bộ não con người và các khái niệm của học máy. + +--- +## Bộ não con người + +[Bộ não con người](https://www.livescience.com/29365-human-brain.html) nhận thức các sự kiện từ thế giới thực, xử lý thông tin nhận thức, đưa ra quyết định hợp lý và thực hiện các hành động nhất định dựa trên hoàn cảnh. Đây là điều chúng ta gọi là hành xử thông minh. Khi chúng ta lập trình một bản sao của quá trình hành xử thông minh vào một máy móc, nó được gọi là trí tuệ nhân tạo (AI). + +--- +## Một số thuật ngữ + +Mặc dù các thuật ngữ có thể gây nhầm lẫn, học máy (ML) là một phần quan trọng của trí tuệ nhân tạo. **ML liên quan đến việc sử dụng các thuật toán chuyên biệt để khám phá thông tin có ý nghĩa và tìm các mẫu ẩn từ dữ liệu nhận thức nhằm hỗ trợ quá trình ra quyết định hợp lý**. + +--- +## AI, ML, Học sâu + +![AI, ML, deep learning, data science](../../../../1-Introduction/1-intro-to-ML/images/ai-ml-ds.png) + +> Một sơ đồ hiển thị mối quan hệ giữa AI, ML, học sâu và khoa học dữ liệu. Đồ họa thông tin bởi [Jen Looper](https://twitter.com/jenlooper) lấy cảm hứng từ [đồ họa này](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) + +--- +## Các khái niệm sẽ được đề cập + +Trong chương trình học này, chúng ta sẽ chỉ đề cập đến các khái niệm cốt lõi của học máy mà người mới bắt đầu cần biết. Chúng ta sẽ tập trung vào cái gọi là 'học máy cổ điển', chủ yếu sử dụng Scikit-learn, một thư viện xuất sắc mà nhiều sinh viên sử dụng để học các kiến thức cơ bản. Để hiểu các khái niệm rộng hơn về trí tuệ nhân tạo hoặc học sâu, một nền tảng kiến thức vững chắc về học máy là không thể thiếu, và chúng tôi muốn cung cấp điều đó ở đây. + +--- +## Trong khóa học này bạn sẽ học: + +- các khái niệm cốt lõi của học máy +- lịch sử của ML +- ML và sự công bằng +- các kỹ thuật ML hồi quy +- các kỹ thuật ML phân loại +- các kỹ thuật ML phân cụm +- các kỹ thuật ML xử lý ngôn ngữ tự nhiên +- các kỹ thuật ML dự đoán chuỗi thời gian +- học tăng cường +- các ứng dụng thực tế của ML + +--- +## Những gì chúng ta sẽ không đề cập + +- học sâu +- mạng nơ-ron +- AI + +Để tạo trải nghiệm học tập tốt hơn, chúng ta sẽ tránh các phức tạp của mạng nơ-ron, 'học sâu' - xây dựng mô hình nhiều lớp bằng mạng nơ-ron - và AI, mà chúng ta sẽ thảo luận trong một chương trình học khác. Chúng tôi cũng sẽ cung cấp một chương trình học khoa học dữ liệu sắp tới để tập trung vào khía cạnh đó của lĩnh vực lớn hơn này. + +--- +## Tại sao học máy lại quan trọng? + +Học máy, từ góc độ hệ thống, được định nghĩa là việc tạo ra các hệ thống tự động có thể học các mẫu ẩn từ dữ liệu để hỗ trợ đưa ra các quyết định thông minh. + +Động lực này được lấy cảm hứng một cách lỏng lẻo từ cách bộ não con người học một số điều dựa trên dữ liệu mà nó nhận thức từ thế giới bên ngoài. + +✅ Hãy nghĩ trong một phút tại sao một doanh nghiệp lại muốn sử dụng các chiến lược học máy thay vì tạo một hệ thống dựa trên các quy tắc được mã hóa cứng. + +--- +## Ứng dụng của học máy + +Ứng dụng của học máy hiện nay gần như ở khắp mọi nơi, và phổ biến như dữ liệu đang lưu chuyển xung quanh xã hội của chúng ta, được tạo ra bởi điện thoại thông minh, các thiết bị kết nối, và các hệ thống khác. Xét đến tiềm năng to lớn của các thuật toán học máy tiên tiến, các nhà nghiên cứu đã khám phá khả năng của chúng để giải quyết các vấn đề thực tế đa chiều và đa ngành với kết quả tích cực lớn. + +--- +## Ví dụ về học máy ứng dụng + +**Bạn có thể sử dụng học máy theo nhiều cách**: + +- Dự đoán khả năng mắc bệnh từ lịch sử y tế hoặc báo cáo của bệnh nhân. +- Sử dụng dữ liệu thời tiết để dự đoán các sự kiện thời tiết. +- Hiểu cảm xúc của một văn bản. +- Phát hiện tin tức giả để ngăn chặn sự lan truyền của tuyên truyền. + +Tài chính, kinh tế, khoa học trái đất, khám phá không gian, kỹ thuật y sinh, khoa học nhận thức, và thậm chí các lĩnh vực trong nhân văn đã thích nghi với học máy để giải quyết các vấn đề nặng về xử lý dữ liệu trong lĩnh vực của họ. + +--- +## Kết luận + +Học máy tự động hóa quá trình khám phá mẫu bằng cách tìm kiếm các thông tin có ý nghĩa từ dữ liệu thực tế hoặc dữ liệu được tạo ra. Nó đã chứng minh giá trị của mình trong các ứng dụng kinh doanh, y tế, và tài chính, cùng nhiều lĩnh vực khác. + +Trong tương lai gần, việc hiểu các kiến thức cơ bản về học máy sẽ trở thành một yêu cầu cần thiết cho mọi người từ bất kỳ lĩnh vực nào do sự phổ biến rộng rãi của nó. + +--- +# 🚀 Thử thách + +Phác thảo, trên giấy hoặc sử dụng một ứng dụng trực tuyến như [Excalidraw](https://excalidraw.com/), sự hiểu biết của bạn về sự khác biệt giữa AI, ML, học sâu, và khoa học dữ liệu. Thêm một số ý tưởng về các vấn đề mà mỗi kỹ thuật này có thể giải quyết tốt. + +# [Câu hỏi sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +--- +# Ôn tập & Tự học + +Để tìm hiểu thêm về cách bạn có thể làm việc với các thuật toán ML trên đám mây, hãy theo dõi [Lộ trình học tập](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott). + +Tham gia một [Lộ trình học tập](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) về các kiến thức cơ bản của ML. + +--- +# Bài tập + +[Khởi động và chạy](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 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 diff --git a/translations/vi/1-Introduction/1-intro-to-ML/assignment.md b/translations/vi/1-Introduction/1-intro-to-ML/assignment.md new file mode 100644 index 00000000..60769ffc --- /dev/null +++ b/translations/vi/1-Introduction/1-intro-to-ML/assignment.md @@ -0,0 +1,23 @@ + +# Bắt đầu và hoạt động + +## Hướng dẫn + +Trong bài tập không tính điểm này, bạn nên ôn lại Python và thiết lập môi trường của mình để có thể chạy các notebook. + +Hãy tham khảo [Lộ trình học Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), sau đó thiết lập hệ thống của bạn bằng cách xem qua các video giới thiệu sau: + +https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 + +--- + +**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 diff --git a/translations/vi/1-Introduction/2-history-of-ML/README.md b/translations/vi/1-Introduction/2-history-of-ML/README.md new file mode 100644 index 00000000..d6b604e5 --- /dev/null +++ b/translations/vi/1-Introduction/2-history-of-ML/README.md @@ -0,0 +1,164 @@ + +# Lịch sử học máy + +![Tóm tắt lịch sử học máy trong một bản vẽ](../../../../sketchnotes/ml-history.png) +> Bản vẽ của [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [Câu hỏi 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 - Lịch sử học máy](https://img.youtube.com/vi/N6wxM4wZ7V0/0.jpg)](https://youtu.be/N6wxM4wZ7V0 "Học máy cho người mới bắt đầu - Lịch sử học máy") + +> 🎥 Nhấp vào hình ảnh trên để xem video ngắn về bài học này. + +Trong bài học này, chúng ta sẽ cùng tìm hiểu các cột mốc quan trọng trong lịch sử học máy và trí tuệ nhân tạo. + +Lịch sử của trí tuệ nhân tạo (AI) như một lĩnh vực nghiên cứu gắn liền với lịch sử học máy, vì các thuật toán và tiến bộ tính toán làm nền tảng cho học máy đã góp phần vào sự phát triển của AI. Điều quan trọng là nhớ rằng, mặc dù các lĩnh vực này bắt đầu hình thành rõ ràng vào những năm 1950, nhưng các khám phá [thuật toán, thống kê, toán học, tính toán và kỹ thuật](https://wikipedia.org/wiki/Timeline_of_machine_learning) quan trọng đã xuất hiện trước và chồng chéo với thời kỳ này. Thực tế, con người đã suy nghĩ về những câu hỏi này trong [hàng trăm năm](https://wikipedia.org/wiki/History_of_artificial_intelligence): bài viết này thảo luận về nền tảng trí tuệ lịch sử của ý tưởng về một 'cỗ máy biết suy nghĩ.' + +--- +## Những khám phá đáng chú ý + +- 1763, 1812 [Định lý Bayes](https://wikipedia.org/wiki/Bayes%27_theorem) và các tiền thân của nó. Định lý này và các ứng dụng của nó là nền tảng cho suy luận, mô tả xác suất xảy ra của một sự kiện dựa trên kiến thức trước đó. +- 1805 [Lý thuyết Bình phương nhỏ nhất](https://wikipedia.org/wiki/Least_squares) của nhà toán học người Pháp Adrien-Marie Legendre. Lý thuyết này, bạn sẽ học trong phần hồi quy, giúp trong việc khớp dữ liệu. +- 1913 [Chuỗi Markov](https://wikipedia.org/wiki/Markov_chain), được đặt tên theo nhà toán học người Nga Andrey Markov, được sử dụng để mô tả một chuỗi các sự kiện có thể xảy ra dựa trên trạng thái trước đó. +- 1957 [Perceptron](https://wikipedia.org/wiki/Perceptron) là một loại bộ phân loại tuyến tính được phát minh bởi nhà tâm lý học người Mỹ Frank Rosenblatt, làm nền tảng cho các tiến bộ trong học sâu. + +--- + +- 1967 [Hàng xóm gần nhất](https://wikipedia.org/wiki/Nearest_neighbor) là một thuật toán ban đầu được thiết kế để lập bản đồ tuyến đường. Trong ngữ cảnh học máy, nó được sử dụng để phát hiện các mẫu. +- 1970 [Lan truyền ngược](https://wikipedia.org/wiki/Backpropagation) được sử dụng để huấn luyện [mạng nơ-ron truyền thẳng](https://wikipedia.org/wiki/Feedforward_neural_network). +- 1982 [Mạng nơ-ron hồi quy](https://wikipedia.org/wiki/Recurrent_neural_network) là mạng nơ-ron nhân tạo được phát triển từ mạng nơ-ron truyền thẳng, tạo ra các đồ thị thời gian. + +✅ Tìm hiểu thêm. Những mốc thời gian nào khác nổi bật trong lịch sử học máy và AI? + +--- +## 1950: Máy móc biết suy nghĩ + +Alan Turing, một người thực sự xuất chúng, được công chúng bình chọn [năm 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) là nhà khoa học vĩ đại nhất thế kỷ 20, được ghi nhận là người đặt nền móng cho khái niệm 'máy móc có thể suy nghĩ.' Ông đã đối mặt với những người phản đối và nhu cầu của chính mình về bằng chứng thực nghiệm cho khái niệm này bằng cách tạo ra [Bài kiểm tra Turing](https://www.bbc.com/news/technology-18475646), mà bạn sẽ khám phá trong các bài học NLP. + +--- +## 1956: Dự án nghiên cứu mùa hè tại Dartmouth + +"Dự án nghiên cứu mùa hè tại Dartmouth về trí tuệ nhân tạo là một sự kiện quan trọng đối với trí tuệ nhân tạo như một lĩnh vực," và tại đây thuật ngữ 'trí tuệ nhân tạo' đã được đặt ra ([nguồn](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). + +> Mọi khía cạnh của học tập hoặc bất kỳ đặc điểm nào khác của trí tuệ đều có thể được mô tả một cách chính xác đến mức một cỗ máy có thể được tạo ra để mô phỏng nó. + +--- + +Nhà nghiên cứu chính, giáo sư toán học John McCarthy, hy vọng "tiến hành dựa trên giả thuyết rằng mọi khía cạnh của học tập hoặc bất kỳ đặc điểm nào khác của trí tuệ đều có thể được mô tả một cách chính xác đến mức một cỗ máy có thể được tạo ra để mô phỏng nó." Những người tham gia bao gồm một nhân vật nổi bật khác trong lĩnh vực này, Marvin Minsky. + +Hội thảo này được ghi nhận là đã khởi xướng và khuyến khích nhiều cuộc thảo luận bao gồm "sự nổi lên của các phương pháp biểu tượng, các hệ thống tập trung vào các lĩnh vực hạn chế (các hệ thống chuyên gia ban đầu), và các hệ thống suy diễn so với các hệ thống quy nạp." ([nguồn](https://wikipedia.org/wiki/Dartmouth_workshop)). + +--- +## 1956 - 1974: "Những năm vàng" + +Từ những năm 1950 đến giữa những năm 1970, sự lạc quan cao độ về hy vọng rằng AI có thể giải quyết nhiều vấn đề. Năm 1967, Marvin Minsky tự tin tuyên bố rằng "Trong một thế hệ ... vấn đề tạo ra 'trí tuệ nhân tạo' sẽ được giải quyết đáng kể." (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) + +Nghiên cứu xử lý ngôn ngữ tự nhiên phát triển mạnh mẽ, tìm kiếm được tinh chỉnh và trở nên mạnh mẽ hơn, và khái niệm 'thế giới vi mô' được tạo ra, nơi các nhiệm vụ đơn giản được hoàn thành bằng cách sử dụng các hướng dẫn ngôn ngữ đơn giản. + +--- + +Nghiên cứu được tài trợ tốt bởi các cơ quan chính phủ, các tiến bộ được thực hiện trong tính toán và thuật toán, và các nguyên mẫu của máy móc thông minh được xây dựng. Một số máy móc này bao gồm: + +* [Shakey the robot](https://wikipedia.org/wiki/Shakey_the_robot), có thể di chuyển và quyết định cách thực hiện các nhiệm vụ một cách 'thông minh'. + + ![Shakey, một robot thông minh](../../../../1-Introduction/2-history-of-ML/images/shakey.jpg) + > Shakey năm 1972 + +--- + +* Eliza, một 'chatterbot' ban đầu, có thể trò chuyện với con người và hoạt động như một 'nhà trị liệu' sơ khai. Bạn sẽ tìm hiểu thêm về Eliza trong các bài học NLP. + + ![Eliza, một bot](../../../../1-Introduction/2-history-of-ML/images/eliza.png) + > Một phiên bản của Eliza, chatbot + +--- + +* "Blocks world" là một ví dụ về thế giới vi mô nơi các khối có thể được xếp chồng và sắp xếp, và các thí nghiệm trong việc dạy máy móc đưa ra quyết định có thể được thử nghiệm. Các tiến bộ được xây dựng với các thư viện như [SHRDLU](https://wikipedia.org/wiki/SHRDLU) đã giúp thúc đẩy xử lý ngôn ngữ. + + [![blocks world với SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "blocks world với SHRDLU") + + > 🎥 Nhấp vào hình ảnh trên để xem video: Blocks world với SHRDLU + +--- +## 1974 - 1980: "Mùa đông AI" + +Đến giữa những năm 1970, đã trở nên rõ ràng rằng sự phức tạp của việc tạo ra 'máy móc thông minh' đã bị đánh giá thấp và lời hứa của nó, với sức mạnh tính toán hiện có, đã bị thổi phồng. Nguồn tài trợ cạn kiệt và niềm tin vào lĩnh vực này chậm lại. Một số vấn đề ảnh hưởng đến niềm tin bao gồm: +--- +- **Hạn chế**. Sức mạnh tính toán quá hạn chế. +- **Bùng nổ tổ hợp**. Số lượng tham số cần được huấn luyện tăng theo cấp số nhân khi yêu cầu nhiều hơn từ máy tính, mà không có sự tiến hóa song song của sức mạnh và khả năng tính toán. +- **Thiếu dữ liệu**. Sự thiếu hụt dữ liệu đã cản trở quá trình thử nghiệm, phát triển và tinh chỉnh thuật toán. +- **Chúng ta có đang đặt đúng câu hỏi không?**. Chính những câu hỏi được đặt ra bắt đầu bị nghi ngờ. Các nhà nghiên cứu bắt đầu đối mặt với sự chỉ trích về cách tiếp cận của họ: + - Các bài kiểm tra Turing bị đặt câu hỏi bởi các lý thuyết như 'phòng Trung Quốc', cho rằng, "lập trình một máy tính kỹ thuật số có thể khiến nó dường như hiểu ngôn ngữ nhưng không thể tạo ra sự hiểu biết thực sự." ([nguồn](https://plato.stanford.edu/entries/chinese-room/)) + - Đạo đức của việc giới thiệu trí tuệ nhân tạo như "nhà trị liệu" ELIZA vào xã hội bị thách thức. + +--- + +Đồng thời, các trường phái AI khác nhau bắt đầu hình thành. Một sự phân đôi được thiết lập giữa các thực hành ["AI lộn xộn" và "AI gọn gàng"](https://wikipedia.org/wiki/Neats_and_scruffies). Các phòng thí nghiệm _lộn xộn_ chỉnh sửa chương trình trong nhiều giờ cho đến khi đạt được kết quả mong muốn. Các phòng thí nghiệm _gọn gàng_ "tập trung vào logic và giải quyết vấn đề chính thức". ELIZA và SHRDLU là các hệ thống _lộn xộn_ nổi tiếng. Vào những năm 1980, khi nhu cầu xuất hiện để làm cho các hệ thống học máy có thể tái tạo, cách tiếp cận _gọn gàng_ dần dần chiếm ưu thế vì kết quả của nó dễ giải thích hơn. + +--- +## Hệ thống chuyên gia trong thập niên 1980 + +Khi lĩnh vực này phát triển, lợi ích của nó đối với kinh doanh trở nên rõ ràng hơn, và trong thập niên 1980, các 'hệ thống chuyên gia' bắt đầu phổ biến. "Hệ thống chuyên gia là một trong những hình thức phần mềm trí tuệ nhân tạo (AI) đầu tiên thực sự thành công." ([nguồn](https://wikipedia.org/wiki/Expert_system)). + +Loại hệ thống này thực sự là _lai_, bao gồm một phần là động cơ quy tắc xác định các yêu cầu kinh doanh, và một động cơ suy luận sử dụng hệ thống quy tắc để suy ra các sự kiện mới. + +Thời kỳ này cũng chứng kiến sự chú ý ngày càng tăng đối với mạng nơ-ron. + +--- +## 1987 - 1993: "Lạnh giá AI" + +Sự phổ biến của phần cứng hệ thống chuyên gia chuyên biệt đã có tác động không may là trở nên quá chuyên biệt. Sự xuất hiện của máy tính cá nhân cũng cạnh tranh với các hệ thống lớn, chuyên biệt, tập trung này. Sự dân chủ hóa tính toán đã bắt đầu, và cuối cùng nó mở đường cho sự bùng nổ hiện đại của dữ liệu lớn. + +--- +## 1993 - 2011 + +Thời kỳ này chứng kiến một kỷ nguyên mới cho học máy và AI để giải quyết một số vấn đề đã gây ra trước đó bởi sự thiếu hụt dữ liệu và sức mạnh tính toán. Lượng dữ liệu bắt đầu tăng nhanh và trở nên phổ biến hơn, cả tốt và xấu, đặc biệt với sự xuất hiện của điện thoại thông minh vào khoảng năm 2007. Sức mạnh tính toán mở rộng theo cấp số nhân, và các thuật toán phát triển song song. Lĩnh vực này bắt đầu trưởng thành khi những ngày tự do của quá khứ bắt đầu kết tinh thành một ngành thực sự. + +--- +## Hiện tại + +Ngày nay học máy và AI chạm đến hầu hết mọi phần trong cuộc sống của chúng ta. Thời kỳ này đòi hỏi sự hiểu biết cẩn thận về các rủi ro và tác động tiềm năng của các thuật toán này đối với cuộc sống con người. Như Brad Smith của Microsoft đã tuyên bố, "Công nghệ thông tin đặt ra các vấn đề liên quan đến các bảo vệ quyền con người cơ bản như quyền riêng tư và tự do ngôn luận. Những vấn đề này làm tăng trách nhiệm của các công ty công nghệ tạo ra các sản phẩm này. Theo quan điểm của chúng tôi, chúng cũng kêu gọi sự điều chỉnh cẩn thận của chính phủ và sự phát triển các chuẩn mực về các cách sử dụng chấp nhận được" ([nguồn](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). + +--- + +Vẫn còn phải xem tương lai sẽ ra sao, nhưng điều quan trọng là hiểu các hệ thống máy tính này và phần mềm cùng các thuật toán mà chúng chạy. Chúng tôi hy vọng rằng chương trình học này sẽ giúp bạn hiểu rõ hơn để bạn có thể tự mình quyết định. + +[![Lịch sử học sâu](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 "Lịch sử học sâu") +> 🎥 Nhấp vào hình ảnh trên để xem video: Yann LeCun thảo luận về lịch sử học sâu trong bài giảng này + +--- +## 🚀Thử thách + +Khám phá một trong những khoảnh khắc lịch sử này và tìm hiểu thêm về những người đứng sau chúng. Có những nhân vật thú vị, và không có khám phá khoa học nào được tạo ra trong một môi trường văn hóa cô lập. Bạn khám phá được điều gì? + +## [Câu hỏi sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +--- +## Ôn tập & Tự học + +Dưới đây là các tài liệu để xem và nghe: + +[Podcast này nơi Amy Boyd thảo luận về sự phát triển của AI](http://runasradio.com/Shows/Show/739) + +[![Lịch sử AI bởi Amy Boyd](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "Lịch sử AI bởi Amy Boyd") + +--- + +## Bài tập + +[Tạo một dòng thời gian](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 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 từ con người. Chúng tôi không chịu trách nhiệm về 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 diff --git a/translations/vi/1-Introduction/2-history-of-ML/assignment.md b/translations/vi/1-Introduction/2-history-of-ML/assignment.md new file mode 100644 index 00000000..0408aecc --- /dev/null +++ b/translations/vi/1-Introduction/2-history-of-ML/assignment.md @@ -0,0 +1,25 @@ + +# Tạo dòng thời gian + +## Hướng dẫn + +Sử dụng [repo này](https://github.com/Digital-Humanities-Toolkit/timeline-builder), tạo một dòng thời gian về một khía cạnh nào đó trong lịch sử của thuật toán, toán học, thống kê, AI, hoặc ML, hoặc sự kết hợp của những lĩnh vực này. Bạn có thể tập trung vào một cá nhân, một ý tưởng, hoặc một khoảng thời gian dài của tư duy. Hãy chắc chắn thêm các yếu tố đa phương tiện. + +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| --------- | -------------------------------------------------- | --------------------------------------- | ---------------------------------------------------------------- | +| | Một dòng thời gian đã được triển khai dưới dạng trang GitHub | Mã không hoàn chỉnh và chưa được triển khai | Dòng thời gian chưa hoàn chỉnh, nghiên cứu chưa kỹ và chưa được triển khai | + +--- + +**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 diff --git a/translations/vi/1-Introduction/3-fairness/README.md b/translations/vi/1-Introduction/3-fairness/README.md new file mode 100644 index 00000000..5fc1e6fc --- /dev/null +++ b/translations/vi/1-Introduction/3-fairness/README.md @@ -0,0 +1,168 @@ + +# Xây dựng giải pháp Machine Learning với AI có trách nhiệm + +![Tóm tắt về AI có trách nhiệm trong Machine Learning qua sketchnote](../../../../sketchnotes/ml-fairness.png) +> Sketchnote bởi [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [Câu hỏi trước bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +## Giới thiệu + +Trong chương trình học này, bạn sẽ bắt đầu khám phá cách mà machine learning có thể và đang ảnh hưởng đến cuộc sống hàng ngày của chúng ta. Ngay cả hiện tại, các hệ thống và mô hình đã tham gia vào các nhiệm vụ ra quyết định hàng ngày, chẳng hạn như chẩn đoán y tế, phê duyệt khoản vay hoặc phát hiện gian lận. Vì vậy, điều quan trọng là các mô hình này phải hoạt động tốt để cung cấp kết quả đáng tin cậy. Giống như bất kỳ ứng dụng phần mềm nào, các hệ thống AI cũng có thể không đáp ứng được kỳ vọng hoặc tạo ra kết quả không mong muốn. Đó là lý do tại sao việc hiểu và giải thích hành vi của một mô hình AI là rất cần thiết. + +Hãy tưởng tượng điều gì có thể xảy ra khi dữ liệu bạn sử dụng để xây dựng các mô hình này thiếu các nhóm nhân khẩu học nhất định, chẳng hạn như chủng tộc, giới tính, quan điểm chính trị, tôn giáo, hoặc đại diện không cân đối cho các nhóm nhân khẩu học đó. Điều gì xảy ra khi đầu ra của mô hình được diễn giải để ưu tiên một số nhóm nhân khẩu học? Hậu quả đối với ứng dụng là gì? Ngoài ra, điều gì xảy ra khi mô hình có kết quả bất lợi và gây hại cho con người? Ai sẽ chịu trách nhiệm cho hành vi của hệ thống AI? Đây là một số câu hỏi mà chúng ta sẽ khám phá trong chương trình học này. + +Trong bài học này, bạn sẽ: + +- Nâng cao nhận thức về tầm quan trọng của sự công bằng trong machine learning và các tác hại liên quan đến sự không công bằng. +- Làm quen với việc khám phá các trường hợp ngoại lệ và tình huống bất thường để đảm bảo độ tin cậy và an toàn. +- Hiểu rõ về nhu cầu trao quyền cho mọi người bằng cách thiết kế các hệ thống toàn diện. +- Khám phá tầm quan trọng của việc bảo vệ quyền riêng tư và an ninh của dữ liệu và con người. +- Thấy được sự cần thiết của cách tiếp cận "hộp kính" để giải thích hành vi của các mô hình AI. +- Nhận thức rằng trách nhiệm là yếu tố thiết yếu để xây dựng niềm tin vào các hệ thống AI. + +## Điều kiện tiên quyết + +Trước khi bắt đầu, hãy tham gia lộ trình học "Nguyên tắc AI có trách nhiệm" và xem video dưới đây về chủ đề này: + +Tìm hiểu thêm về AI có trách nhiệm qua [Lộ trình học](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) + +[![Cách tiếp cận của Microsoft đối với AI có trách nhiệm](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Cách tiếp cận của Microsoft đối với AI có trách nhiệm") + +> 🎥 Nhấp vào hình ảnh trên để xem video: Cách tiếp cận của Microsoft đối với AI có trách nhiệm + +## Công bằng + +Các hệ thống AI nên đối xử công bằng với mọi người và tránh ảnh hưởng đến các nhóm tương tự theo cách khác nhau. Ví dụ, khi các hệ thống AI cung cấp hướng dẫn về điều trị y tế, đơn xin vay vốn, hoặc việc làm, chúng nên đưa ra các khuyến nghị giống nhau cho mọi người có triệu chứng, hoàn cảnh tài chính, hoặc trình độ chuyên môn tương tự. Mỗi chúng ta, với tư cách là con người, đều mang theo những định kiến di truyền ảnh hưởng đến quyết định và hành động của mình. Những định kiến này có thể xuất hiện trong dữ liệu mà chúng ta sử dụng để huấn luyện các hệ thống AI. Đôi khi, sự thao túng này xảy ra một cách vô tình. Thường rất khó để nhận thức rõ ràng khi bạn đang đưa định kiến vào dữ liệu. + +**“Sự không công bằng”** bao gồm các tác động tiêu cực, hay “tác hại”, đối với một nhóm người, chẳng hạn như những người được định nghĩa theo chủng tộc, giới tính, tuổi tác, hoặc tình trạng khuyết tật. Các tác hại chính liên quan đến sự không công bằng có thể được phân loại như sau: + +- **Phân bổ**, nếu một giới tính hoặc dân tộc, chẳng hạn, được ưu tiên hơn nhóm khác. +- **Chất lượng dịch vụ**. Nếu bạn huấn luyện dữ liệu cho một kịch bản cụ thể nhưng thực tế phức tạp hơn nhiều, điều này dẫn đến dịch vụ hoạt động kém. Ví dụ, một máy phân phối xà phòng không thể nhận diện người có làn da tối màu. [Tham khảo](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) +- **Phỉ báng**. Chỉ trích và gán nhãn không công bằng cho một thứ hoặc một người. Ví dụ, công nghệ gán nhãn hình ảnh từng gán nhãn sai hình ảnh của người da tối màu là khỉ đột. +- **Đại diện quá mức hoặc thiếu đại diện**. Ý tưởng rằng một nhóm nhất định không được nhìn thấy trong một nghề nghiệp nào đó, và bất kỳ dịch vụ hoặc chức năng nào tiếp tục thúc đẩy điều đó đều góp phần gây hại. +- **Định kiến**. Gắn một nhóm nhất định với các thuộc tính được gán trước. Ví dụ, một hệ thống dịch ngôn ngữ giữa tiếng Anh và tiếng Thổ Nhĩ Kỳ có thể gặp sai sót do các từ có liên kết định kiến với giới tính. + +![dịch sang tiếng Thổ Nhĩ Kỳ](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png) +> dịch sang tiếng Thổ Nhĩ Kỳ + +![dịch lại sang tiếng Anh](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png) +> dịch lại sang tiếng Anh + +Khi thiết kế và kiểm tra các hệ thống AI, chúng ta cần đảm bảo rằng AI công bằng và không được lập trình để đưa ra các quyết định thiên vị hoặc phân biệt đối xử, điều mà con người cũng bị cấm thực hiện. Đảm bảo sự công bằng trong AI và machine learning vẫn là một thách thức xã hội-kỹ thuật phức tạp. + +### Độ tin cậy và an toàn + +Để xây dựng niềm tin, các hệ thống AI cần phải đáng tin cậy, an toàn, và nhất quán trong điều kiện bình thường và bất ngờ. Điều quan trọng là phải biết các hệ thống AI sẽ hoạt động như thế nào trong nhiều tình huống khác nhau, đặc biệt là khi chúng gặp các trường hợp ngoại lệ. Khi xây dựng các giải pháp AI, cần tập trung đáng kể vào cách xử lý một loạt các tình huống mà các giải pháp AI có thể gặp phải. Ví dụ, một chiếc xe tự lái cần đặt sự an toàn của con người lên hàng đầu. Do đó, AI điều khiển xe cần xem xét tất cả các kịch bản có thể xảy ra như ban đêm, giông bão, bão tuyết, trẻ em chạy qua đường, thú cưng, công trình đường bộ, v.v. Mức độ mà một hệ thống AI có thể xử lý một loạt các điều kiện một cách đáng tin cậy và an toàn phản ánh mức độ dự đoán mà nhà khoa học dữ liệu hoặc nhà phát triển AI đã xem xét trong quá trình thiết kế hoặc kiểm tra hệ thống. + +> [🎥 Nhấp vào đây để xem video: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl) + +### Tính toàn diện + +Các hệ thống AI nên được thiết kế để thu hút và trao quyền cho mọi người. Khi thiết kế và triển khai các hệ thống AI, các nhà khoa học dữ liệu và nhà phát triển AI cần xác định và giải quyết các rào cản tiềm năng trong hệ thống có thể vô tình loại trừ một số người. Ví dụ, có 1 tỷ người khuyết tật trên toàn thế giới. Với sự phát triển của AI, họ có thể dễ dàng tiếp cận một loạt thông tin và cơ hội trong cuộc sống hàng ngày. Bằng cách giải quyết các rào cản, điều này tạo ra cơ hội đổi mới và phát triển các sản phẩm AI với trải nghiệm tốt hơn, mang lại lợi ích cho tất cả mọi người. + +> [🎥 Nhấp vào đây để xem video: tính toàn diện trong AI](https://www.microsoft.com/videoplayer/embed/RE4vl9v) + +### An ninh và quyền riêng tư + +Các hệ thống AI nên an toàn và tôn trọng quyền riêng tư của mọi người. Mọi người ít tin tưởng vào các hệ thống đặt quyền riêng tư, thông tin, hoặc cuộc sống của họ vào rủi ro. Khi huấn luyện các mô hình machine learning, chúng ta dựa vào dữ liệu để tạo ra kết quả tốt nhất. Trong quá trình này, nguồn gốc và tính toàn vẹn của dữ liệu phải được xem xét. Ví dụ, dữ liệu có được người dùng cung cấp hay công khai? Tiếp theo, trong khi làm việc với dữ liệu, điều quan trọng là phải phát triển các hệ thống AI có thể bảo vệ thông tin bí mật và chống lại các cuộc tấn công. Khi AI trở nên phổ biến hơn, việc bảo vệ quyền riêng tư và đảm bảo an ninh cho thông tin cá nhân và doanh nghiệp quan trọng ngày càng trở nên cấp thiết và phức tạp. Các vấn đề về quyền riêng tư và bảo mật dữ liệu đòi hỏi sự chú ý đặc biệt đối với AI vì việc truy cập dữ liệu là rất cần thiết để các hệ thống AI đưa ra dự đoán và quyết định chính xác, có thông tin về con người. + +> [🎥 Nhấp vào đây để xem video: an ninh trong AI](https://www.microsoft.com/videoplayer/embed/RE4voJF) + +- Ngành công nghiệp đã đạt được những tiến bộ đáng kể trong quyền riêng tư và bảo mật, được thúc đẩy đáng kể bởi các quy định như GDPR (Quy định chung về bảo vệ dữ liệu). +- Tuy nhiên, với các hệ thống AI, chúng ta phải thừa nhận sự căng thẳng giữa nhu cầu về dữ liệu cá nhân để làm cho các hệ thống trở nên cá nhân hóa và hiệu quả hơn – và quyền riêng tư. +- Giống như sự ra đời của máy tính kết nối với internet, chúng ta cũng đang chứng kiến sự gia tăng lớn về số lượng các vấn đề bảo mật liên quan đến AI. +- Đồng thời, chúng ta đã thấy AI được sử dụng để cải thiện an ninh. Ví dụ, hầu hết các trình quét virus hiện đại đều được điều khiển bởi các thuật toán AI. +- Chúng ta cần đảm bảo rằng các quy trình khoa học dữ liệu của mình hòa hợp với các thực tiễn bảo mật và quyền riêng tư mới nhất. + +### Tính minh bạch + +Các hệ thống AI nên dễ hiểu. Một phần quan trọng của tính minh bạch là giải thích hành vi của các hệ thống AI và các thành phần của chúng. Việc cải thiện sự hiểu biết về các hệ thống AI đòi hỏi các bên liên quan phải hiểu cách thức và lý do chúng hoạt động để có thể xác định các vấn đề về hiệu suất tiềm năng, lo ngại về an toàn và quyền riêng tư, định kiến, các thực tiễn loại trừ, hoặc kết quả không mong muốn. Chúng tôi cũng tin rằng những người sử dụng các hệ thống AI nên trung thực và cởi mở về thời điểm, lý do, và cách họ chọn triển khai chúng, cũng như những hạn chế của các hệ thống mà họ sử dụng. Ví dụ, nếu một ngân hàng sử dụng hệ thống AI để hỗ trợ các quyết định cho vay tiêu dùng, điều quan trọng là phải kiểm tra kết quả và hiểu dữ liệu nào ảnh hưởng đến các khuyến nghị của hệ thống. Các chính phủ đang bắt đầu điều chỉnh AI trong các ngành công nghiệp, vì vậy các nhà khoa học dữ liệu và tổ chức phải giải thích liệu hệ thống AI có đáp ứng các yêu cầu quy định hay không, đặc biệt là khi có kết quả không mong muốn. + +> [🎥 Nhấp vào đây để xem video: tính minh bạch trong AI](https://www.microsoft.com/videoplayer/embed/RE4voJF) + +- Vì các hệ thống AI rất phức tạp, nên rất khó để hiểu cách chúng hoạt động và diễn giải kết quả. +- Sự thiếu hiểu biết này ảnh hưởng đến cách các hệ thống này được quản lý, vận hành, và ghi chép. +- Quan trọng hơn, sự thiếu hiểu biết này ảnh hưởng đến các quyết định được đưa ra dựa trên kết quả mà các hệ thống này tạo ra. + +### Trách nhiệm + +Những người thiết kế và triển khai các hệ thống AI phải chịu trách nhiệm về cách các hệ thống của họ hoạt động. Nhu cầu về trách nhiệm đặc biệt quan trọng với các công nghệ nhạy cảm như nhận diện khuôn mặt. Gần đây, đã có nhu cầu ngày càng tăng đối với công nghệ nhận diện khuôn mặt, đặc biệt từ các tổ chức thực thi pháp luật, những người thấy tiềm năng của công nghệ này trong các ứng dụng như tìm kiếm trẻ em mất tích. Tuy nhiên, các công nghệ này có thể được sử dụng bởi một chính phủ để đặt các quyền tự do cơ bản của công dân vào rủi ro, chẳng hạn như cho phép giám sát liên tục các cá nhân cụ thể. Do đó, các nhà khoa học dữ liệu và tổ chức cần chịu trách nhiệm về cách hệ thống AI của họ ảnh hưởng đến cá nhân hoặc xã hội. + +[![Nhà nghiên cứu AI hàng đầu cảnh báo về giám sát hàng loạt qua nhận diện khuôn mặt](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Cách tiếp cận của Microsoft đối với AI có trách nhiệm") + +> 🎥 Nhấp vào hình ảnh trên để xem video: Cảnh báo về giám sát hàng loạt qua nhận diện khuôn mặt + +Cuối cùng, một trong những câu hỏi lớn nhất cho thế hệ của chúng ta, với tư cách là thế hệ đầu tiên đưa AI vào xã hội, là làm thế nào để đảm bảo rằng máy tính sẽ luôn chịu trách nhiệm trước con người và làm thế nào để đảm bảo rằng những người thiết kế máy tính chịu trách nhiệm trước tất cả mọi người. + +## Đánh giá tác động + +Trước khi huấn luyện một mô hình machine learning, điều quan trọng là phải thực hiện đánh giá tác động để hiểu mục đích của hệ thống AI; mục đích sử dụng dự kiến; nơi nó sẽ được triển khai; và ai sẽ tương tác với hệ thống. Những điều này rất hữu ích cho người đánh giá hoặc kiểm tra hệ thống để biết các yếu tố cần xem xét khi xác định các rủi ro tiềm năng và hậu quả dự kiến. + +Các lĩnh vực cần tập trung khi thực hiện đánh giá tác động bao gồm: + +* **Tác động bất lợi đối với cá nhân**. Nhận thức về bất kỳ hạn chế hoặc yêu cầu nào, việc sử dụng không được hỗ trợ hoặc bất kỳ giới hạn nào đã biết cản trở hiệu suất của hệ thống là rất quan trọng để đảm bảo rằng hệ thống không được sử dụng theo cách có thể gây hại cho cá nhân. +* **Yêu cầu dữ liệu**. Hiểu cách và nơi hệ thống sẽ sử dụng dữ liệu cho phép người đánh giá khám phá bất kỳ yêu cầu dữ liệu nào cần lưu ý (ví dụ: các quy định về dữ liệu GDPR hoặc HIPPA). Ngoài ra, kiểm tra xem nguồn hoặc số lượng dữ liệu có đủ để huấn luyện hay không. +* **Tóm tắt tác động**. Thu thập danh sách các tác hại tiềm năng có thể phát sinh từ việc sử dụng hệ thống. Trong suốt vòng đời ML, xem xét liệu các vấn đề đã xác định có được giảm thiểu hoặc giải quyết hay không. +* **Mục tiêu áp dụng** cho từng nguyên tắc cốt lõi. Đánh giá xem các mục tiêu từ mỗi nguyên tắc có được đáp ứng hay không và liệu có bất kỳ khoảng trống nào. + +## Gỡ lỗi với AI có trách nhiệm + +Tương tự như việc gỡ lỗi một ứng dụng phần mềm, gỡ lỗi một hệ thống AI là một quá trình cần thiết để xác định và giải quyết các vấn đề trong hệ thống. Có nhiều yếu tố có thể ảnh hưởng đến việc một mô hình không hoạt động như mong đợi hoặc không có trách nhiệm. Hầu hết các chỉ số hiệu suất mô hình truyền thống là các tổng hợp định lượng về hiệu suất của mô hình, không đủ để phân tích cách một mô hình vi phạm các nguyên tắc AI có trách nhiệm. Hơn nữa, một mô hình machine learning là một hộp đen, khiến việc hiểu điều gì thúc đẩy kết quả của nó hoặc cung cấp lời giải thích khi nó mắc lỗi trở nên khó khăn. Sau này trong khóa học, chúng ta sẽ học cách sử dụng bảng điều khiển AI có trách nhiệm để giúp gỡ lỗi các hệ thống AI. Bảng điều khiển cung cấp một công cụ toàn diện cho các nhà khoa học dữ liệu và nhà phát triển AI để thực hiện: + +* **Phân tích lỗi**. Để xác định phân bố lỗi của mô hình có thể ảnh hưởng đến sự công bằng hoặc độ tin cậy của hệ thống. +* **Tổng quan về mô hình**. Để khám phá nơi có sự chênh lệch trong hiệu suất của mô hình trên các nhóm dữ liệu. +* **Phân tích dữ liệu**. Để hiểu phân bố dữ liệu và xác định bất kỳ định kiến tiềm năng nào trong dữ liệu có thể dẫn đến các vấn đề về công bằng, tính toàn diện, và độ tin cậy. +* **Giải thích mô hình**. Để hiểu điều gì ảnh hưởng hoặc tác động đến các dự đoán của mô hình. Điều này giúp giải thích hành vi của mô hình, điều quan trọng đối với tính minh bạch và trách nhiệm. + +## 🚀 Thử thách + +Để ngăn chặn các tác hại được đưa vào ngay từ đầu, chúng ta nên: + +- có sự đa dạng về nền tảng và quan điểm giữa những người làm việc trên các hệ thống +- đầu tư vào các tập dữ liệu phản ánh sự đa dạng của xã hội chúng ta +- phát triển các phương pháp tốt hơn trong suốt vòng đời machine learning để phát hiện và sửa chữa AI có trách nhiệm khi nó xảy ra + +Hãy nghĩ về các tình huống thực tế nơi sự không đáng tin cậy của mô hình trở nên rõ ràng trong việc xây dựng và sử dụng mô hình. Chúng ta còn cần xem xét điều gì nữa? + +## [Câu hỏi sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) + + +Xem hội thảo này để tìm hiểu sâu hơn về các chủ đề: + +- Theo đuổi AI có trách nhiệm: Đưa các nguyên tắc vào thực tiễn bởi Besmira Nushi, Mehrnoosh Sameki và Amit Sharma + +[![Responsible AI Toolbox: Một khung nguồn mở để xây dựng AI có trách nhiệm](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Một khung nguồn mở để xây dựng AI có trách nhiệm") + +> 🎥 Nhấp vào hình ảnh trên để xem video: RAI Toolbox: Một khung nguồn mở để xây dựng AI có trách nhiệm bởi Besmira Nushi, Mehrnoosh Sameki và Amit Sharma + +Ngoài ra, hãy đọc: + +- Trung tâm tài nguyên RAI của Microsoft: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- Nhóm nghiên cứu FATE của Microsoft: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) + +RAI Toolbox: + +- [Kho lưu trữ GitHub của Responsible AI Toolbox](https://github.com/microsoft/responsible-ai-toolbox) + +Tìm hiểu về các công cụ của Azure Machine Learning để đảm bảo tính công bằng: + +- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) + +## Bài tập + +[Khám phá RAI Toolbox](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 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 diff --git a/translations/vi/1-Introduction/3-fairness/assignment.md b/translations/vi/1-Introduction/3-fairness/assignment.md new file mode 100644 index 00000000..5672bed5 --- /dev/null +++ b/translations/vi/1-Introduction/3-fairness/assignment.md @@ -0,0 +1,25 @@ + +# Khám phá Bộ công cụ AI có trách nhiệm + +## Hướng dẫn + +Trong bài học này, bạn đã tìm hiểu về Bộ công cụ AI có trách nhiệm, một "dự án mã nguồn mở, được cộng đồng thúc đẩy nhằm giúp các nhà khoa học dữ liệu phân tích và cải thiện các hệ thống AI." Đối với bài tập này, hãy khám phá một trong các [notebook](https://github.com/microsoft/responsible-ai-toolbox/blob/main/notebooks/responsibleaidashboard/getting-started.ipynb) của RAI Toolbox và báo cáo những phát hiện của bạn trong một bài viết hoặc bài thuyết trình. + +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| -------- | --------- | ----------- | ------------- | +| | Một bài viết hoặc bài thuyết trình PowerPoint được trình bày, thảo luận về các hệ thống của Fairlearn, notebook đã chạy, và các kết luận rút ra từ việc chạy nó | Một bài viết được trình bày nhưng không có kết luận | Không có bài viết nào được trình bày | + +--- + +**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 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. \ No newline at end of file diff --git a/translations/vi/1-Introduction/4-techniques-of-ML/README.md b/translations/vi/1-Introduction/4-techniques-of-ML/README.md new file mode 100644 index 00000000..37841369 --- /dev/null +++ b/translations/vi/1-Introduction/4-techniques-of-ML/README.md @@ -0,0 +1,132 @@ + +# Kỹ thuật Học Máy + +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ẽ: + +- Hiểu các quy trình nền tảng của học máy ở 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/) + +[![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") + +> 🎥 Nhấp vào hình ảnh trên để xem video ngắn về 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: + +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. + +## 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. + +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. + +✅ 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. + +## 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ố. + +### 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: + +- **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. + +✅ 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)! + +### Đặc trưng 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ụ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. + +### 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)) + +### 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)). + +### Chia tập dữ liệu của bạn + +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. + +- **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)). + +## 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. + +### Quyết định 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. + +### 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'). + +### Đá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. + +🎓 **Fit 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. + +🎓 **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'. + +![mô hình overfitting](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png) +> Đồ 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). + +## 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á. + +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'. + +--- + +## 🚀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? + +## [Câu hỏi 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). + +## Bài tập + +[Phỏng vấn một nhà khoa học dữ liệu](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 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 diff --git a/translations/vi/1-Introduction/4-techniques-of-ML/assignment.md b/translations/vi/1-Introduction/4-techniques-of-ML/assignment.md new file mode 100644 index 00000000..eff72b52 --- /dev/null +++ b/translations/vi/1-Introduction/4-techniques-of-ML/assignment.md @@ -0,0 +1,25 @@ + +# Phỏng vấn một nhà khoa học dữ liệu + +## Hướng dẫn + +Trong công ty của bạn, trong một nhóm người dùng, hoặc giữa bạn bè hoặc đồng nghiệp, hãy nói chuyện với một người làm việc chuyên nghiệp với vai trò nhà khoa học dữ liệu. Viết một bài luận ngắn (500 từ) về công việc hàng ngày của họ. Họ là chuyên gia hay làm việc theo kiểu 'full stack'? + +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| --------- | ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | --------------------- | +| | Một bài luận đúng độ dài, có nguồn được ghi rõ, được trình bày dưới dạng tệp .doc | Bài luận có nguồn ghi không rõ ràng hoặc ngắn hơn độ dài yêu cầu | Không có bài luận nào | + +--- + +**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 diff --git a/translations/vi/1-Introduction/README.md b/translations/vi/1-Introduction/README.md new file mode 100644 index 00000000..ebf30744 --- /dev/null +++ b/translations/vi/1-Introduction/README.md @@ -0,0 +1,37 @@ + +# Giới thiệu về học máy + +Trong phần này của chương trình học, bạn sẽ được giới thiệu về các khái niệm cơ bản trong lĩnh vực học máy, học máy là gì, cũng như tìm hiểu về lịch sử và các kỹ thuật mà các nhà nghiên cứu sử dụng để làm việc với nó. Hãy cùng khám phá thế giới mới của học máy (ML) nhé! + +![globe](../../../1-Introduction/images/globe.jpg) +> Ảnh của Bill Oxford trên Unsplash + +### Bài học + +1. [Giới thiệu về học máy](1-intro-to-ML/README.md) +1. [Lịch sử của học máy và AI](2-history-of-ML/README.md) +1. [Sự công bằng trong học máy](3-fairness/README.md) +1. [Các kỹ thuật của học máy](4-techniques-of-ML/README.md) + +### Tác giả + +"Giới thiệu về Học Máy" được viết với ♥️ bởi một nhóm bao gồm [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) và [Jen Looper](https://twitter.com/jenlooper) + +"Lịch sử của Học Máy" được viết với ♥️ bởi [Jen Looper](https://twitter.com/jenlooper) và [Amy Boyd](https://twitter.com/AmyKateNicho) + +"Sự công bằng trong Học Máy" được viết với ♥️ bởi [Tomomi Imura](https://twitter.com/girliemac) + +"Các kỹ thuật của Học Máy" được viết với ♥️ bởi [Jen Looper](https://twitter.com/jenlooper) và [Chris Noring](https://twitter.com/softchris) + +--- + +**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 diff --git a/translations/vi/2-Regression/1-Tools/README.md b/translations/vi/2-Regression/1-Tools/README.md new file mode 100644 index 00000000..d90db356 --- /dev/null +++ b/translations/vi/2-Regression/1-Tools/README.md @@ -0,0 +1,239 @@ + +# Bắt đầu với Python và Scikit-learn cho các mô hình hồi quy + +![Tóm tắt về hồi quy trong một sketchnote](../../../../sketchnotes/ml-regression.png) + +> Sketchnote bởi [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [Câu hỏi trước bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Bài học này có sẵn bằng R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) + +## Giới thiệu + +Trong bốn bài học này, bạn sẽ khám phá cách xây dựng các mô hình hồi quy. Chúng ta sẽ thảo luận về mục đích của chúng trong thời gian ngắn. Nhưng trước khi bắt đầu, hãy đảm bảo rằng bạn đã chuẩn bị đúng công cụ để bắt đầu quá trình! + +Trong bài học này, bạn sẽ học cách: + +- Cấu hình máy tính của bạn cho các tác vụ học máy cục bộ. +- Làm việc với Jupyter notebooks. +- Sử dụng Scikit-learn, bao gồm cả việc cài đặt. +- Khám phá hồi quy tuyến tính thông qua một bài tập thực hành. + +## Cài đặt và cấu hình + +[![ML cho người mới bắt đầu - Cài đặt công cụ để xây dựng mô hình học máy](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML cho người mới bắt đầu - Cài đặt công cụ để xây dựng mô hình học máy") + +> 🎥 Nhấp vào hình ảnh trên để xem video ngắn hướng dẫn cấu hình máy tính của bạn cho ML. + +1. **Cài đặt Python**. Đảm bảo rằng [Python](https://www.python.org/downloads/) đã được cài đặt trên máy tính của bạn. Bạn sẽ sử dụng Python cho nhiều tác vụ khoa học dữ liệu và học máy. Hầu hết các hệ thống máy tính đều đã có sẵn Python. Ngoài ra, có các [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) hữu ích để giúp một số người dùng dễ dàng cài đặt. + + Tuy nhiên, một số ứng dụng của Python yêu cầu một phiên bản cụ thể của phần mềm, trong khi các ứng dụng khác yêu cầu phiên bản khác. Vì lý do này, việc làm việc trong một [môi trường ảo](https://docs.python.org/3/library/venv.html) là rất hữu ích. + +2. **Cài đặt Visual Studio Code**. Đảm bảo rằng bạn đã cài đặt Visual Studio Code trên máy tính của mình. Làm theo hướng dẫn này để [cài đặt Visual Studio Code](https://code.visualstudio.com/) cơ bản. Bạn sẽ sử dụng Python trong Visual Studio Code trong khóa học này, vì vậy bạn có thể muốn tìm hiểu cách [cấu hình Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) cho phát triển Python. + + > Làm quen với Python bằng cách làm theo bộ sưu tập [Learn modules](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) + > + > [![Cài đặt Python với Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Cài đặt Python với Visual Studio Code") + > + > 🎥 Nhấp vào hình ảnh trên để xem video: sử dụng Python trong VS Code. + +3. **Cài đặt Scikit-learn**, bằng cách làm theo [hướng dẫn này](https://scikit-learn.org/stable/install.html). Vì bạn cần đảm bảo rằng mình sử dụng Python 3, nên khuyến nghị sử dụng môi trường ảo. Lưu ý, nếu bạn đang cài đặt thư viện này trên Mac M1, có các hướng dẫn đặc biệt trên trang liên kết ở trên. + +4. **Cài đặt Jupyter Notebook**. Bạn sẽ cần [cài đặt gói Jupyter](https://pypi.org/project/jupyter/). + +## Môi trường tác giả ML của bạn + +Bạn sẽ sử dụng **notebooks** để phát triển mã Python và tạo các mô hình học máy. Loại tệp này là công cụ phổ biến cho các nhà khoa học dữ liệu, và chúng có thể được nhận diện bởi phần mở rộng `.ipynb`. + +Notebooks là môi trường tương tác cho phép nhà phát triển vừa viết mã vừa thêm ghi chú và tài liệu xung quanh mã, rất hữu ích cho các dự án thử nghiệm hoặc nghiên cứu. + +[![ML cho người mới bắt đầu - Cài đặt Jupyter Notebooks để bắt đầu xây dựng mô hình hồi quy](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML cho người mới bắt đầu - Cài đặt Jupyter Notebooks để bắt đầu xây dựng mô hình hồi quy") + +> 🎥 Nhấp vào hình ảnh trên để xem video ngắn hướng dẫn bài tập này. + +### Bài tập - làm việc với notebook + +Trong thư mục này, bạn sẽ tìm thấy tệp _notebook.ipynb_. + +1. Mở _notebook.ipynb_ trong Visual Studio Code. + + Một máy chủ Jupyter sẽ khởi động với Python 3+. Bạn sẽ thấy các khu vực của notebook có thể `chạy`, các đoạn mã. Bạn có thể chạy một khối mã bằng cách chọn biểu tượng giống nút phát. + +2. Chọn biểu tượng `md` và thêm một chút markdown, với văn bản sau **# Chào mừng bạn đến với notebook của mình**. + + Tiếp theo, thêm một số mã Python. + +3. Gõ **print('hello notebook')** trong khối mã. +4. Chọn mũi tên để chạy mã. + + Bạn sẽ thấy câu lệnh được in ra: + + ```output + hello notebook + ``` + +![VS Code với một notebook đang mở](../../../../2-Regression/1-Tools/images/notebook.jpg) + +Bạn có thể xen kẽ mã của mình với các nhận xét để tự tài liệu hóa notebook. + +✅ Hãy nghĩ một chút về sự khác biệt giữa môi trường làm việc của nhà phát triển web và của nhà khoa học dữ liệu. + +## Bắt đầu với Scikit-learn + +Bây giờ Python đã được thiết lập trong môi trường cục bộ của bạn, và bạn đã quen thuộc với Jupyter notebooks, hãy làm quen với Scikit-learn (phát âm là `sci` như trong `science`). Scikit-learn cung cấp một [API phong phú](https://scikit-learn.org/stable/modules/classes.html#api-ref) để giúp bạn thực hiện các tác vụ ML. + +Theo [trang web của họ](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn là một thư viện học máy mã nguồn mở hỗ trợ học có giám sát và không giám sát. Nó cũng cung cấp nhiều công cụ cho việc xây dựng mô hình, tiền xử lý dữ liệu, lựa chọn và đánh giá mô hình, cùng nhiều tiện ích khác." + +Trong khóa học này, bạn sẽ sử dụng Scikit-learn và các công cụ khác để xây dựng các mô hình học máy nhằm thực hiện các tác vụ 'học máy truyền thống'. Chúng tôi đã cố tình tránh các mạng nơ-ron và học sâu, vì chúng sẽ được đề cập trong chương trình 'AI cho người mới bắt đầu' sắp tới của chúng tôi. + +Scikit-learn giúp việc xây dựng mô hình và đánh giá chúng trở nên đơn giản. Nó chủ yếu tập trung vào việc sử dụng dữ liệu số và chứa một số bộ dữ liệu sẵn có để sử dụng như công cụ học tập. Nó cũng bao gồm các mô hình được xây dựng sẵn để sinh viên thử nghiệm. Hãy khám phá quy trình tải dữ liệu được đóng gói sẵn và sử dụng một bộ ước lượng để tạo mô hình ML đầu tiên với Scikit-learn bằng một số dữ liệu cơ bản. + +## Bài tập - notebook Scikit-learn đầu tiên của bạn + +> Hướng dẫn này được lấy cảm hứng từ [ví dụ hồi quy tuyến tính](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) trên trang web của Scikit-learn. + +[![ML cho người mới bắt đầu - Dự án hồi quy tuyến tính đầu tiên của bạn trong Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML cho người mới bắt đầu - Dự án hồi quy tuyến tính đầu tiên của bạn trong Python") + +> 🎥 Nhấp vào hình ảnh trên để xem video ngắn hướng dẫn bài tập này. + +Trong tệp _notebook.ipynb_ liên quan đến bài học này, xóa tất cả các ô bằng cách nhấn vào biểu tượng 'thùng rác'. + +Trong phần này, bạn sẽ làm việc với một bộ dữ liệu nhỏ về bệnh tiểu đường được tích hợp trong Scikit-learn để học tập. Hãy tưởng tượng rằng bạn muốn thử nghiệm một phương pháp điều trị cho bệnh nhân tiểu đường. Các mô hình học máy có thể giúp bạn xác định bệnh nhân nào sẽ phản ứng tốt hơn với phương pháp điều trị, dựa trên sự kết hợp của các biến. Ngay cả một mô hình hồi quy rất cơ bản, khi được trực quan hóa, cũng có thể cung cấp thông tin về các biến giúp bạn tổ chức các thử nghiệm lâm sàng lý thuyết. + +✅ Có nhiều loại phương pháp hồi quy, và việc chọn loại nào phụ thuộc vào câu trả lời bạn đang tìm kiếm. Nếu bạn muốn dự đoán chiều cao có thể xảy ra của một người ở một độ tuổi nhất định, bạn sẽ sử dụng hồi quy tuyến tính, vì bạn đang tìm kiếm một **giá trị số**. Nếu bạn muốn xác định liệu một loại ẩm thực có nên được coi là thuần chay hay không, bạn đang tìm kiếm một **phân loại danh mục**, vì vậy bạn sẽ sử dụng hồi quy logistic. Bạn sẽ học thêm về hồi quy logistic sau này. Hãy nghĩ một chút về các câu hỏi bạn có thể đặt ra với dữ liệu, và phương pháp nào sẽ phù hợp hơn. + +Hãy bắt đầu nhiệm vụ này. + +### Nhập thư viện + +Đối với nhiệm vụ này, chúng ta sẽ nhập một số thư viện: + +- **matplotlib**. Đây là một [công cụ vẽ đồ thị](https://matplotlib.org/) hữu ích và chúng ta sẽ sử dụng nó để tạo biểu đồ đường. +- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) là một thư viện hữu ích để xử lý dữ liệu số trong Python. +- **sklearn**. Đây là thư viện [Scikit-learn](https://scikit-learn.org/stable/user_guide.html). + +Nhập một số thư viện để hỗ trợ nhiệm vụ của bạn. + +1. Thêm các lệnh nhập bằng cách gõ mã sau: + + ```python + import matplotlib.pyplot as plt + import numpy as np + from sklearn import datasets, linear_model, model_selection + ``` + + Ở trên, bạn đang nhập `matplotlib`, `numpy` và bạn đang nhập `datasets`, `linear_model` và `model_selection` từ `sklearn`. `model_selection` được sử dụng để chia dữ liệu thành tập huấn luyện và tập kiểm tra. + +### Bộ dữ liệu tiểu đường + +Bộ dữ liệu [tiểu đường](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) tích hợp bao gồm 442 mẫu dữ liệu về bệnh tiểu đường, với 10 biến đặc trưng, một số trong đó bao gồm: + +- age: tuổi tính bằng năm +- bmi: chỉ số khối cơ thể +- bp: huyết áp trung bình +- s1 tc: T-Cells (một loại tế bào bạch cầu) + +✅ Bộ dữ liệu này bao gồm khái niệm 'giới tính' như một biến đặc trưng quan trọng trong nghiên cứu về bệnh tiểu đường. Nhiều bộ dữ liệu y tế bao gồm loại phân loại nhị phân này. Hãy nghĩ một chút về cách các phân loại như vậy có thể loại trừ một số phần của dân số khỏi các phương pháp điều trị. + +Bây giờ, hãy tải dữ liệu X và y. + +> 🎓 Nhớ rằng, đây là học có giám sát, và chúng ta cần một mục tiêu 'y' được đặt tên. + +Trong một ô mã mới, tải bộ dữ liệu tiểu đường bằng cách gọi `load_diabetes()`. Đầu vào `return_X_y=True` báo hiệu rằng `X` sẽ là ma trận dữ liệu, và `y` sẽ là mục tiêu hồi quy. + +1. Thêm một số lệnh in để hiển thị hình dạng của ma trận dữ liệu và phần tử đầu tiên của nó: + + ```python + X, y = datasets.load_diabetes(return_X_y=True) + print(X.shape) + print(X[0]) + ``` + + Những gì bạn nhận được là một tuple. Bạn đang gán hai giá trị đầu tiên của tuple cho `X` và `y` tương ứng. Tìm hiểu thêm [về tuple](https://wikipedia.org/wiki/Tuple). + + Bạn có thể thấy rằng dữ liệu này có 442 mục được định hình trong các mảng gồm 10 phần tử: + + ```text + (442, 10) + [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 + -0.04340085 -0.00259226 0.01990842 -0.01764613] + ``` + + ✅ Hãy nghĩ một chút về mối quan hệ giữa dữ liệu và mục tiêu hồi quy. Hồi quy tuyến tính dự đoán mối quan hệ giữa đặc trưng X và biến mục tiêu y. Bạn có thể tìm thấy [mục tiêu](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) cho bộ dữ liệu tiểu đường trong tài liệu không? Bộ dữ liệu này đang thể hiện điều gì, dựa trên mục tiêu? + +2. Tiếp theo, chọn một phần của bộ dữ liệu này để vẽ bằng cách chọn cột thứ 3 của bộ dữ liệu. Bạn có thể làm điều này bằng cách sử dụng toán tử `:` để chọn tất cả các hàng, và sau đó chọn cột thứ 3 bằng cách sử dụng chỉ số (2). Bạn cũng có thể định hình lại dữ liệu thành mảng 2D - như yêu cầu để vẽ - bằng cách sử dụng `reshape(n_rows, n_columns)`. Nếu một trong các tham số là -1, kích thước tương ứng sẽ được tính tự động. + + ```python + X = X[:, 2] + X = X.reshape((-1,1)) + ``` + + ✅ Bất cứ lúc nào, hãy in dữ liệu ra để kiểm tra hình dạng của nó. + +3. Bây giờ bạn đã có dữ liệu sẵn sàng để vẽ, bạn có thể xem liệu máy có thể giúp xác định một đường phân chia hợp lý giữa các số trong bộ dữ liệu này hay không. Để làm điều này, bạn cần chia cả dữ liệu (X) và mục tiêu (y) thành tập kiểm tra và tập huấn luyện. Scikit-learn có cách đơn giản để làm điều này; bạn có thể chia dữ liệu kiểm tra của mình tại một điểm nhất định. + + ```python + X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) + ``` + +4. Bây giờ bạn đã sẵn sàng để huấn luyện mô hình của mình! Tải mô hình hồi quy tuyến tính và huấn luyện nó với các tập huấn luyện X và y của bạn bằng cách sử dụng `model.fit()`: + + ```python + model = linear_model.LinearRegression() + model.fit(X_train, y_train) + ``` + + ✅ `model.fit()` là một hàm bạn sẽ thấy trong nhiều thư viện ML như TensorFlow. + +5. Sau đó, tạo một dự đoán bằng cách sử dụng dữ liệu kiểm tra, sử dụng hàm `predict()`. Điều này sẽ được sử dụng để vẽ đường giữa các nhóm dữ liệu. + + ```python + y_pred = model.predict(X_test) + ``` + +6. Bây giờ là lúc hiển thị dữ liệu trong một biểu đồ. Matplotlib là một công cụ rất hữu ích cho nhiệm vụ này. Tạo biểu đồ scatterplot của tất cả dữ liệu kiểm tra X và y, và sử dụng dự đoán để vẽ một đường ở vị trí thích hợp nhất, giữa các nhóm dữ liệu của mô hình. + + ```python + plt.scatter(X_test, y_test, color='black') + plt.plot(X_test, y_pred, color='blue', linewidth=3) + plt.xlabel('Scaled BMIs') + plt.ylabel('Disease Progression') + plt.title('A Graph Plot Showing Diabetes Progression Against BMI') + plt.show() + ``` + + ![biểu đồ scatterplot hiển thị các điểm dữ liệu về bệnh tiểu đường](../../../../2-Regression/1-Tools/images/scatterplot.png) +✅ Hãy suy nghĩ một chút về điều đang diễn ra ở đây. Một đường thẳng đang chạy qua nhiều điểm dữ liệu nhỏ, nhưng nó thực sự đang làm gì? Bạn có thể thấy cách sử dụng đường thẳng này để dự đoán vị trí của một điểm dữ liệu mới, chưa được nhìn thấy, trong mối quan hệ với trục y của biểu đồ không? Hãy thử diễn đạt bằng lời về ứng dụng thực tế của mô hình này. + +Chúc mừng bạn, bạn đã xây dựng mô hình hồi quy tuyến tính đầu tiên, tạo ra một dự đoán với nó, và hiển thị nó trên biểu đồ! + +--- +## 🚀Thử thách + +Vẽ biểu đồ cho một biến khác từ tập dữ liệu này. Gợi ý: chỉnh sửa dòng này: `X = X[:,2]`. Với mục tiêu của tập dữ liệu này, bạn có thể khám phá được điều gì về sự tiến triển của bệnh tiểu đường? + +## [Câu hỏi sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +## Ôn tập & Tự học + +Trong hướng dẫn này, bạn đã làm việc với hồi quy tuyến tính đơn giản, thay vì hồi quy đơn biến hoặc hồi quy đa biến. Hãy đọc thêm một chút về sự khác biệt giữa các phương pháp này, hoặc xem [video này](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef). + +Tìm hiểu thêm về khái niệm hồi quy và suy nghĩ về những loại câu hỏi có thể được trả lời bằng kỹ thuật này. Hãy tham gia [hướng dẫn này](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) để nâng cao hiểu biết của bạn. + +## Bài tập + +[Một tập dữ liệu khác](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 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 diff --git a/translations/vi/2-Regression/1-Tools/assignment.md b/translations/vi/2-Regression/1-Tools/assignment.md new file mode 100644 index 00000000..8cb33539 --- /dev/null +++ b/translations/vi/2-Regression/1-Tools/assignment.md @@ -0,0 +1,27 @@ + +# Hồi quy với Scikit-learn + +## Hướng dẫn + +Hãy xem qua [bộ dữ liệu Linnerud](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) trong Scikit-learn. Bộ dữ liệu này có nhiều [mục tiêu](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset): 'Nó bao gồm ba biến bài tập (dữ liệu) và ba biến sinh lý (mục tiêu) được thu thập từ hai mươi người đàn ông trung niên tại một câu lạc bộ thể hình'. + +Bằng lời của bạn, hãy mô tả cách tạo một mô hình hồi quy để vẽ mối quan hệ giữa vòng eo và số lần thực hiện động tác ngồi lên. Làm tương tự cho các điểm dữ liệu khác trong bộ dữ liệu này. + +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| ------------------------------ | ----------------------------------- | ----------------------------- | -------------------------- | +| Nộp một đoạn mô tả chi tiết | Đoạn mô tả được viết tốt | Một vài câu được nộp | Không có mô tả nào được cung cấp | + +--- + +**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, nên 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. \ No newline at end of file diff --git a/translations/vi/2-Regression/1-Tools/solution/Julia/README.md b/translations/vi/2-Regression/1-Tools/solution/Julia/README.md new file mode 100644 index 00000000..adf100fc --- /dev/null +++ b/translations/vi/2-Regression/1-Tools/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 diff --git a/translations/vi/2-Regression/2-Data/README.md b/translations/vi/2-Regression/2-Data/README.md new file mode 100644 index 00000000..0cd7afcd --- /dev/null +++ b/translations/vi/2-Regression/2-Data/README.md @@ -0,0 +1,226 @@ + +# Xây dựng mô hình hồi quy sử dụng Scikit-learn: chuẩn bị và trực quan hóa dữ liệu + +![Infographic trực quan hóa dữ liệu](../../../../2-Regression/2-Data/images/data-visualization.png) + +Infographic bởi [Dasani Madipalli](https://twitter.com/dasani_decoded) + +## [Câu hỏi trước bài học](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Bài học này có sẵn bằng R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html) + +## Giới thiệu + +Bây giờ bạn đã có các công cụ cần thiết để bắt đầu xây dựng mô hình học máy với Scikit-learn, bạn đã sẵn sàng để bắt đầu đặt câu hỏi về dữ liệu của mình. Khi làm việc với dữ liệu và áp dụng các giải pháp ML, điều rất quan trọng là phải hiểu cách đặt câu hỏi đúng để khai thác tiềm năng của tập dữ liệu một cách hiệu quả. + +Trong bài học này, bạn sẽ học: + +- Cách chuẩn bị dữ liệu cho việc xây dựng mô hình. +- Cách sử dụng Matplotlib để trực quan hóa dữ liệu. + +## Đặt câu hỏi đúng về dữ liệu của bạn + +Câu hỏi bạn cần trả lời sẽ quyết định loại thuật toán ML mà bạn sẽ sử dụng. Và chất lượng của câu trả lời bạn nhận được sẽ phụ thuộc rất nhiều vào bản chất của dữ liệu. + +Hãy xem [dữ liệu](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) được cung cấp cho bài học này. Bạn có thể mở tệp .csv này trong VS Code. Một cái nhìn nhanh sẽ cho thấy rằng có các ô trống và sự pha trộn giữa dữ liệu dạng chuỗi và số. Ngoài ra còn có một cột kỳ lạ gọi là 'Package' với dữ liệu là sự pha trộn giữa 'sacks', 'bins' và các giá trị khác. Thực tế, dữ liệu này khá lộn xộn. + +[![ML cho người mới bắt đầu - Cách phân tích và làm sạch tập dữ liệu](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML cho người mới bắt đầu - Cách phân tích và làm sạch tập dữ liệu") + +> 🎥 Nhấp vào hình ảnh trên để xem video ngắn về cách chuẩn bị dữ liệu cho bài học này. + +Thực tế, không thường xuyên bạn nhận được một tập dữ liệu hoàn toàn sẵn sàng để sử dụng để tạo mô hình ML ngay lập tức. Trong bài học này, bạn sẽ học cách chuẩn bị một tập dữ liệu thô bằng cách sử dụng các thư viện Python tiêu chuẩn. Bạn cũng sẽ học các kỹ thuật khác nhau để trực quan hóa dữ liệu. + +## Nghiên cứu trường hợp: 'thị trường bí ngô' + +Trong thư mục này, bạn sẽ tìm thấy một tệp .csv trong thư mục gốc `data` có tên [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) bao gồm 1757 dòng dữ liệu về thị trường bí ngô, được phân loại theo thành phố. Đây là dữ liệu thô được trích xuất từ [Báo cáo Tiêu chuẩn Thị trường Cây Trồng Đặc Biệt](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) do Bộ Nông nghiệp Hoa Kỳ phân phối. + +### Chuẩn bị dữ liệu + +Dữ liệu này thuộc phạm vi công cộng. Nó có thể được tải xuống dưới dạng nhiều tệp riêng biệt, theo từng thành phố, từ trang web USDA. Để tránh quá nhiều tệp riêng biệt, chúng tôi đã gộp tất cả dữ liệu thành phố vào một bảng tính, do đó chúng tôi đã _chuẩn bị_ dữ liệu một chút. Tiếp theo, hãy xem xét kỹ hơn dữ liệu. + +### Dữ liệu bí ngô - kết luận ban đầu + +Bạn nhận thấy gì về dữ liệu này? Bạn đã thấy rằng có sự pha trộn giữa chuỗi, số, ô trống và các giá trị kỳ lạ mà bạn cần hiểu. + +Bạn có thể đặt câu hỏi nào về dữ liệu này, sử dụng kỹ thuật hồi quy? Ví dụ: "Dự đoán giá của một quả bí ngô được bán trong một tháng cụ thể". Nhìn lại dữ liệu, có một số thay đổi bạn cần thực hiện để tạo cấu trúc dữ liệu cần thiết cho nhiệm vụ này. + +## Bài tập - phân tích dữ liệu bí ngô + +Hãy sử dụng [Pandas](https://pandas.pydata.org/) (tên viết tắt của `Python Data Analysis`), một công cụ rất hữu ích để định hình dữ liệu, để phân tích và chuẩn bị dữ liệu bí ngô này. + +### Đầu tiên, kiểm tra các ngày bị thiếu + +Bạn sẽ cần thực hiện các bước để kiểm tra các ngày bị thiếu: + +1. Chuyển đổi các ngày sang định dạng tháng (đây là ngày tháng kiểu Mỹ, nên định dạng là `MM/DD/YYYY`). +2. Trích xuất tháng vào một cột mới. + +Mở tệp _notebook.ipynb_ trong Visual Studio Code và nhập bảng tính vào một dataframe Pandas mới. + +1. Sử dụng hàm `head()` để xem năm hàng đầu tiên. + + ```python + import pandas as pd + pumpkins = pd.read_csv('../data/US-pumpkins.csv') + pumpkins.head() + ``` + + ✅ Bạn sẽ sử dụng hàm nào để xem năm hàng cuối cùng? + +1. Kiểm tra xem có dữ liệu bị thiếu trong dataframe hiện tại không: + + ```python + pumpkins.isnull().sum() + ``` + + Có dữ liệu bị thiếu, nhưng có thể nó sẽ không ảnh hưởng đến nhiệm vụ hiện tại. + +1. Để làm cho dataframe của bạn dễ làm việc hơn, chỉ chọn các cột bạn cần, sử dụng hàm `loc` để trích xuất từ dataframe gốc một nhóm hàng (được truyền làm tham số đầu tiên) và cột (được truyền làm tham số thứ hai). Biểu thức `:` trong trường hợp dưới đây có nghĩa là "tất cả các hàng". + + ```python + columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] + pumpkins = pumpkins.loc[:, columns_to_select] + ``` + +### Thứ hai, xác định giá trung bình của bí ngô + +Hãy nghĩ về cách xác định giá trung bình của một quả bí ngô trong một tháng cụ thể. Bạn sẽ chọn những cột nào cho nhiệm vụ này? Gợi ý: bạn sẽ cần 3 cột. + +Giải pháp: lấy trung bình của các cột `Low Price` và `High Price` để điền vào cột Price mới, và chuyển đổi cột Date để chỉ hiển thị tháng. May mắn thay, theo kiểm tra ở trên, không có dữ liệu bị thiếu cho ngày tháng hoặc giá cả. + +1. Để tính trung bình, thêm đoạn mã sau: + + ```python + price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 + + month = pd.DatetimeIndex(pumpkins['Date']).month + + ``` + + ✅ Bạn có thể in bất kỳ dữ liệu nào bạn muốn kiểm tra bằng cách sử dụng `print(month)`. + +2. Bây giờ, sao chép dữ liệu đã chuyển đổi của bạn vào một dataframe Pandas mới: + + ```python + new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) + ``` + + In dataframe của bạn sẽ hiển thị một tập dữ liệu sạch sẽ, gọn gàng mà bạn có thể sử dụng để xây dựng mô hình hồi quy mới. + +### Nhưng khoan đã! Có điều gì đó kỳ lạ ở đây + +Nếu bạn nhìn vào cột `Package`, bí ngô được bán theo nhiều cấu hình khác nhau. Một số được bán theo đơn vị '1 1/9 bushel', một số theo '1/2 bushel', một số theo quả, một số theo pound, và một số trong các hộp lớn với các kích thước khác nhau. + +> Bí ngô dường như rất khó để cân đo một cách nhất quán + +Đào sâu vào dữ liệu gốc, thật thú vị khi bất kỳ mục nào có `Unit of Sale` bằng 'EACH' hoặc 'PER BIN' cũng có kiểu `Package` theo inch, theo bin, hoặc 'each'. Bí ngô dường như rất khó để cân đo một cách nhất quán, vì vậy hãy lọc chúng bằng cách chỉ chọn bí ngô có chuỗi 'bushel' trong cột `Package`. + +1. Thêm bộ lọc ở đầu tệp, dưới phần nhập .csv ban đầu: + + ```python + pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] + ``` + + Nếu bạn in dữ liệu bây giờ, bạn có thể thấy rằng bạn chỉ nhận được khoảng 415 dòng dữ liệu chứa bí ngô theo bushel. + +### Nhưng khoan đã! Còn một việc nữa cần làm + +Bạn có nhận thấy rằng lượng bushel thay đổi theo từng dòng không? Bạn cần chuẩn hóa giá để hiển thị giá theo bushel, vì vậy hãy thực hiện một số phép toán để chuẩn hóa. + +1. Thêm các dòng sau sau khối tạo dataframe new_pumpkins: + + ```python + new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) + + new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2) + ``` + +✅ Theo [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), trọng lượng của một bushel phụ thuộc vào loại sản phẩm, vì đây là một phép đo thể tích. "Một bushel cà chua, ví dụ, được cho là nặng 56 pound... Lá và rau xanh chiếm nhiều không gian hơn với ít trọng lượng hơn, vì vậy một bushel rau bina chỉ nặng 20 pound." Điều này khá phức tạp! Hãy không chuyển đổi bushel sang pound, thay vào đó tính giá theo bushel. Tất cả nghiên cứu về bushel bí ngô này, tuy nhiên, cho thấy việc hiểu rõ bản chất của dữ liệu là rất quan trọng! + +Bây giờ, bạn có thể phân tích giá theo đơn vị dựa trên đo lường bushel của chúng. Nếu bạn in dữ liệu một lần nữa, bạn có thể thấy cách nó được chuẩn hóa. + +✅ Bạn có nhận thấy rằng bí ngô được bán theo nửa bushel rất đắt không? Bạn có thể tìm ra lý do tại sao không? Gợi ý: bí ngô nhỏ thường đắt hơn bí ngô lớn, có lẽ vì có nhiều quả hơn trong một bushel, do không gian trống bị chiếm bởi một quả bí ngô lớn rỗng. + +## Chiến lược trực quan hóa + +Một phần vai trò của nhà khoa học dữ liệu là thể hiện chất lượng và bản chất của dữ liệu mà họ đang làm việc. Để làm điều này, họ thường tạo ra các hình ảnh trực quan thú vị, hoặc biểu đồ, đồ thị, và sơ đồ, hiển thị các khía cạnh khác nhau của dữ liệu. Bằng cách này, họ có thể trực quan hóa các mối quan hệ và khoảng trống mà nếu không sẽ khó phát hiện. + +[![ML cho người mới bắt đầu - Cách trực quan hóa dữ liệu với Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML cho người mới bắt đầu - Cách trực quan hóa dữ liệu với Matplotlib") + +> 🎥 Nhấp vào hình ảnh trên để xem video ngắn về cách trực quan hóa dữ liệu cho bài học này. + +Các hình ảnh trực quan cũng có thể giúp xác định kỹ thuật học máy phù hợp nhất với dữ liệu. Một biểu đồ phân tán có vẻ theo một đường thẳng, ví dụ, cho thấy rằng dữ liệu là ứng viên tốt cho bài tập hồi quy tuyến tính. + +Một thư viện trực quan hóa dữ liệu hoạt động tốt trong Jupyter notebooks là [Matplotlib](https://matplotlib.org/) (mà bạn cũng đã thấy trong bài học trước). + +> Tìm hiểu thêm về trực quan hóa dữ liệu trong [các hướng dẫn này](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott). + +## Bài tập - thử nghiệm với Matplotlib + +Hãy thử tạo một số biểu đồ cơ bản để hiển thị dataframe mới mà bạn vừa tạo. Một biểu đồ đường cơ bản sẽ hiển thị điều gì? + +1. Nhập Matplotlib ở đầu tệp, dưới phần nhập Pandas: + + ```python + import matplotlib.pyplot as plt + ``` + +1. Chạy lại toàn bộ notebook để làm mới. +1. Ở cuối notebook, thêm một ô để vẽ dữ liệu dưới dạng hộp: + + ```python + price = new_pumpkins.Price + month = new_pumpkins.Month + plt.scatter(price, month) + plt.show() + ``` + + ![Biểu đồ phân tán hiển thị mối quan hệ giữa giá và tháng](../../../../2-Regression/2-Data/images/scatterplot.png) + + Đây có phải là biểu đồ hữu ích không? Có điều gì về nó làm bạn ngạc nhiên không? + + Nó không đặc biệt hữu ích vì tất cả những gì nó làm là hiển thị dữ liệu của bạn dưới dạng một loạt các điểm trong một tháng nhất định. + +### Làm cho nó hữu ích + +Để các biểu đồ hiển thị dữ liệu hữu ích, bạn thường cần nhóm dữ liệu theo cách nào đó. Hãy thử tạo một biểu đồ mà trục y hiển thị các tháng và dữ liệu thể hiện sự phân bố của dữ liệu. + +1. Thêm một ô để tạo biểu đồ cột nhóm: + + ```python + new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') + plt.ylabel("Pumpkin Price") + ``` + + ![Biểu đồ cột hiển thị mối quan hệ giữa giá và tháng](../../../../2-Regression/2-Data/images/barchart.png) + + Đây là một hình ảnh trực quan dữ liệu hữu ích hơn! Dường như nó chỉ ra rằng giá cao nhất cho bí ngô xảy ra vào tháng 9 và tháng 10. Điều này có đúng với mong đợi của bạn không? Tại sao hoặc tại sao không? + +--- + +## 🚀Thử thách + +Khám phá các loại hình ảnh trực quan khác nhau mà Matplotlib cung cấp. Loại nào phù hợp nhất cho các bài toán hồi quy? + +## [Câu hỏi sau bài học](https://ff-quizzes.netlify.app/en/ml/) + +## Ôn tập & Tự học + +Hãy xem xét các cách khác nhau để trực quan hóa dữ liệu. Lập danh sách các thư viện khác nhau có sẵn và ghi chú loại nào tốt nhất cho các loại nhiệm vụ cụ thể, ví dụ trực quan hóa 2D so với trực quan hóa 3D. Bạn phát hiện ra điều gì? + +## Bài tập + +[Khám phá trực quan hóa](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 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 diff --git a/translations/vi/2-Regression/2-Data/assignment.md b/translations/vi/2-Regression/2-Data/assignment.md new file mode 100644 index 00000000..b3bc84e2 --- /dev/null +++ b/translations/vi/2-Regression/2-Data/assignment.md @@ -0,0 +1,23 @@ + +# Khám phá trực quan hóa dữ liệu + +Có nhiều thư viện khác nhau có sẵn để trực quan hóa dữ liệu. Tạo một số biểu đồ trực quan sử dụng dữ liệu Pumpkin trong bài học này với matplotlib và seaborn trong một notebook mẫu. Những thư viện nào dễ sử dụng hơn? + +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| -------- | --------- | ----------- | ------------- | +| | Một notebook được nộp với hai khám phá/trực quan hóa dữ liệu | Một notebook được nộp với một khám phá/trực quan hóa dữ liệu | Không có notebook nào được nộp | + +--- + +**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 diff --git a/translations/vi/2-Regression/2-Data/solution/Julia/README.md b/translations/vi/2-Regression/2-Data/solution/Julia/README.md new file mode 100644 index 00000000..900970f0 --- /dev/null +++ b/translations/vi/2-Regression/2-Data/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 diff --git a/translations/vi/2-Regression/3-Linear/README.md b/translations/vi/2-Regression/3-Linear/README.md new file mode 100644 index 00000000..e322f5ea --- /dev/null +++ b/translations/vi/2-Regression/3-Linear/README.md @@ -0,0 +1,380 @@ + +# Xây dựng mô hình hồi quy sử dụng Scikit-learn: hồi quy theo bốn cách + +![Đồ họa thông tin hồi quy tuyến tính và đa thức](../../../../2-Regression/3-Linear/images/linear-polynomial.png) +> Đồ họa thông tin bởi [Dasani Madipalli](https://twitter.com/dasani_decoded) +## [Câu hỏi trước bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +> ### [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 + +Cho đến nay, bạn đã tìm hiểu hồi quy là gì với dữ liệu mẫu thu thập từ tập 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 đã 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 cho 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 mối quan hệ dữ liệu, và chúng 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ẽ 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 cơ bản của các kỹ thuật này. Những mô hình này sẽ cho phép chúng ta dự đoán giá bí ngô dựa trên các dữ liệu đầu vào khác nhau. + +[![ML cho người mới bắt đầu - Hiểu về 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 về hồi quy tuyến tính") + +> 🎥 Nhấp vào hình ảnh trên để xem video ngắn về hồi quy tuyến tính. + +> Trong 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 đối với học sinh đến từ các lĩnh vực khác, vì vậy hãy chú ý đến các ghi chú, 🧮 các điểm nhấn, sơ đồ và các công cụ học tập khác để hỗ trợ việc hiểu bài. + +### Điều kiện tiên quyết + +Đến giờ bạn đã quen thuộc với cấu trúc của 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 trước trong tệp _notebook.ipynb_ của bài học này. Trong tệp, giá bí ngô được hiển thị theo giạ trong một khung dữ liệu mới. Hãy đảm bảo rằng 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 nhở, bạn đang tải dữ liệu này để đặt câu hỏi về 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ô nhỏ sẽ là bao nhiêu? +- Tôi nên mua chúng trong giạ nửa hay trong hộp 1 1/9 giạ? +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 khung dữ liệu Pandas và điền vào nó một phần của tập dữ liệu gốc, chuẩn hóa giá theo giạ. Tuy nhiên, bằng cách làm như vậy, bạn chỉ có thể thu thập khoảng 400 điểm dữ liệu và chỉ cho các tháng mùa thu. + +Hãy xem dữ liệu mà chúng tôi đã 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 đồ phân tán ban đầu đã được vẽ để hiển thị dữ liệu theo tháng. Có lẽ chúng ta có thể tìm hiểu thêm về bản chất của dữ liệu bằng cách làm sạch nó nhiều hơn. + +## Đường hồi quy tuyến tính + +Như bạn đã học trong Bài học 1, mục tiêu của một bài tập hồi quy tuyến tính là có thể vẽ một đường để: + +- **Hiển thị mối quan hệ giữa các biến**. Hiển thị mối quan hệ giữa các biến +- **Dự đoán**. Dự đoán chính xác nơi một điểm dữ liệu mới sẽ nằm trong mối quan hệ với đường đó. + +Thông thường, **Hồi quy Bình phương Tối thiểu** được sử dụng để vẽ loại đường này. Thuật ngữ 'bình phương tối thiểu' có nghĩa là tất cả các điểm dữ liệu xung quanh đường hồi quy được bình phương và sau đó cộng lại. Lý tưởng nhất, tổng cuối cùng này càng nhỏ càng tốt, vì chúng ta muốn số lỗi thấp, hay `bình phương tối thiểu`. + +Chúng ta làm như vậy vì muốn mô hình hóa một đường có khoảng cách tích lũy nhỏ nhất từ tất cả các điểm dữ liệu của chúng ta. Chúng ta cũng bình phương các giá trị trước khi cộng chúng vì chúng ta quan tâm đến độ lớn của chúng hơn là hướng của chúng. + +> **🧮 Hiển thị toán học** +> +> Đường này, được 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à giao điểm với trục y, tức là giá trị của `Y` khi `X = 0`. +> +>![tính độ dốc](../../../../2-Regression/3-Linear/images/slope.png) +> +> Đầu tiên, tính độ dốc `b`. Đồ họa 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á của một giạ bí ngô theo tháng", `X` sẽ là giá và `Y` sẽ là tháng bán. +> +>![hoàn thành phương trình](../../../../2-Regression/3-Linear/images/calculation.png) +> +> Tính giá trị của Y. Nếu bạn đang trả khoảng $4, chắc hẳn là tháng Tư! Đồ họa thông tin bởi [Jen Looper](https://twitter.com/jenlooper) +> +> Toán học tính toán đường này phải thể hiện độ dốc của đường, cũng phụ thuộc vào giao điểm, hoặc vị trí của `Y` khi `X = 0`. +> +> Bạn có thể quan sát phương pháp tính toán các giá trị này trên trang web [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Cũng ghé thăm [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 các giá trị số ảnh hưởng đến đường. + +## Tương quan + +Một thuật ngữ khác 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 hình dung hệ số này. Một biểu đồ với các điểm dữ liệu phân tán theo một đường gọn gàng có tương quan cao, nhưng một biểu đồ với các điểm dữ liệu phân tán khắp nơi giữa X và Y có tương quan thấp. + +Một mô hình hồi quy tuyến tính tốt sẽ là mô hình 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 một đường hồi quy. + +✅ Chạy notebook đi kèm bài học này và xem biểu đồ phân tán Giá theo Tháng. Dữ liệu liên kết Tháng với Giá bán bí ngô có vẻ có tương quan cao hay thấp, theo cách bạn diễn giải trực quan biểu đồ phân tán? Điều đó có thay đổi nếu bạn sử dụng thước đo chi tiết hơn thay vì `Tháng`, ví dụ như *ngày trong năm* (tức là số ngày kể từ đầu năm)? + +Trong đoạn mã dưới đây, chúng ta sẽ giả định rằng chúng ta đã làm sạch dữ liệu và thu được một khung dữ liệu gọi là `new_pumpkins`, tương tự như sau: + +ID | Tháng | NgàyTrongNăm | Loại | Thành phố | Gói | Giá thấp | Giá cao | Giá +---|-------|--------------|------|-----------|-----|----------|---------|----- +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 + +> Đoạn mã để làm sạch dữ liệu có sẵn trong [`notebook.ipynb`](../../../../2-Regression/3-Linear/notebook.ipynb). Chúng tôi đã thực hiện các bước làm sạch tương tự như trong bài học trước và đã tính toán cột `NgàyTrongNăm` bằng cách sử dụ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 đằ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. Ai đó mua bí ngô cho một khu vườn bí ngô vào dịp lễ có thể muốn thông tin này để tối ưu hóa việc mua các gói bí ngô cho khu vườn. + +## Tìm kiếm Tương quan + +[![ML cho người mới bắt đầu - Tìm kiếm Tương quan: Chìa khóa cho 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 kiếm Tương quan: Chìa khóa cho Hồi quy Tuyến tính") + +> 🎥 Nhấp vào hình ảnh trên để xem video 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ư thế này: + +Giá trung bình theo tháng + +Điều này gợi ý rằng có thể có một số 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 `Tháng` và `Giá`, hoặc giữa `NgàyTrongNăm` và `Giá`. Đây là biểu đồ phân tán cho thấy mối quan hệ sau: + +Biểu đồ phân tán Giá vs. Ngày trong Năm + +Hãy xem liệu có tương quan nào không bằng cách sử dụng hàm `corr`: + +```python +print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) +print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) +``` + +Có vẻ như tương quan khá nhỏ, -0.15 theo `Tháng` và -0.17 theo `NgàyTrongNăm`, nhưng có thể có một mối quan hệ quan trọng khác. Có vẻ như có các cụ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ẽ từng loại bí ngô bằng một màu khác nhau. Bằng cách truyền tham số `ax` vào hàm vẽ biểu đồ phân tán, chúng ta có thể vẽ tất cả các điểm trên cùng một biểu đồ: + +```python +ax=None +colors = ['red','blue','green','yellow'] +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) +``` + +Biểu đồ phân tán Giá vs. Ngày trong Năm + +Cuộc điều tra của chúng ta gợi ý rằng loại bí ngô có ảnh hưởng lớn 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 với biểu đồ cột: + +```python +new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') +``` + +Biểu đồ cột giá vs loại bí ngô + +Hãy tập trung vào một loại bí ngô, loại 'pie type', và xem ngày bán có ảnh hưởng gì đến giá: + +```python +pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] +pie_pumpkins.plot.scatter('DayOfYear','Price') +``` +Biểu đồ phân tán Giá vs. Ngày trong Năm + +Nếu bây giờ chúng ta tính toán tương quan giữa `Giá` và `NgàyTrongNăm` bằng cách sử dụng hàm `corr`, chúng ta sẽ nhận được giá trị khoảng `-0.27` - điều này có nghĩa là việc huấn luyện một mô hình dự đoán là hợp lý. + +> Trước khi huấn luyện mô hình hồi quy tuyến tính, điều quan trọng là phải đảm bảo rằng dữ liệu của chúng ta đã được làm sạch. Hồi quy tuyến tính không hoạt động tốt với các giá trị bị thiếu, do đó, hợp lý để 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ị trống bằng giá trị trung bình từ cột tương ứng. + +## Hồi quy Tuyến tính Đơn giản + +[![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ấp vào hình ảnh trên để xem video 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 của chúng ta, chúng ta sẽ sử dụng thư viện **Scikit-learn**. + +```python +from sklearn.linear_model import LinearRegression +from sklearn.metrics import mean_squared_error +from sklearn.model_selection import train_test_split +``` + +Chúng ta bắt đầu bằng cách tách các giá trị đầu vào (đặc trưng) và đầu ra mong đợi (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 ý rằng chúng ta phải thực hiện `reshape` trên dữ liệu đầu vào để gói Hồi quy Tuyến tính hiểu đúng. Hồi quy Tuyến tính yêu cầu một mảng 2D làm đầu vào, trong đó mỗi hàng của mảng tương ứng với một vector của các đặc trưng đầu vào. Trong trường hợp của chúng ta, vì chỉ có một đầu vào - chúng ta cần một mảng có hình dạng N×1, trong đó N là kích thước tập dữ liệu. + +Sau đó, chúng ta cần chia dữ liệu thành tập huấn luyện và tập kiểm tra, để có thể xác thực 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 Hồi quy Tuyến tính thực tế chỉ mất hai dòng mã. Chúng ta định nghĩa đối tượng `LinearRegression`, và khớp nó với dữ liệu của chúng ta bằng phương thức `fit`: + +```python +lin_reg = LinearRegression() +lin_reg.fit(X_train,y_train) +``` + +Đối tượng `LinearRegression` sau khi được khớp 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ố, giá trị này sẽ khoảng `-0.017`. Điều này có nghĩa là giá dường như giảm một chút theo thời gian, nhưng không quá nhiều, khoảng 2 xu 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_` - giá trị này sẽ khoảng `21` trong trường hợp của chúng ta, chỉ ra 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 tập kiểm tra, và sau đó đo lường mức độ gần gũi giữa dự đoán và giá trị mong đợi. Điều 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 (MSE), là trung bình của tất cả các sai lệch bình phương giữa giá trị mong đợi và giá trị dự đoán. + +```python +pred = lin_reg.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}%)') +``` +Lỗi của chúng ta dường như nằm ở khoảng 2 điểm, tương đương ~17%. Không quá tốt. Một chỉ số khác để đánh giá chất lượng mô hình là **hệ số xác định**, có thể được tính như sau: + +```python +score = lin_reg.score(X_train,y_train) +print('Model determination: ', score) +``` +Nếu giá trị là 0, điều đó có nghĩa là mô hình không xem xét dữ liệu đầu vào và hoạt động như *dự đoán tuyến tính tệ nhất*, chỉ đơn giản là giá trị trung bình của kết quả. Giá trị 1 có nghĩa là chúng ta có thể dự đoán hoàn hảo tất cả các đầu ra mong đợi. Trong trường hợp của chúng ta, hệ số xác định khoảng 0.06, khá thấp. + +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) +plt.plot(X_test,pred) +``` + +Hồi quy tuyến tính + +## Hồi quy đa thức + +Một loại hồi quy tuyến tính khác 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 - ví dụ, bí ngô có thể tích lớn hơn thì giá cao hơn - nhưng đôi khi những mối quan hệ này không thể được biểu diễn bằng mặt phẳng hoặc đường thẳng. + +✅ Đây là [một số ví dụ](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á. Biểu đồ phân tán 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ả không thể dao động sao? 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ể bao gồm một hoặc nhiều biến và hệ số. + +Hồi quy đa thức tạo ra một đường cong để phù hợp hơn với dữ liệu phi tuyến tính. Trong trường hợp của chúng ta, nếu chúng ta thêm biến `DayOfYear` bình phương vào dữ liệu đầu vào, chúng ta có thể phù hợp với 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 bao gồm 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 khác nhau. Một **pipeline** là một chuỗi các **bộ ước lượng**. Trong trường hợp của chúng ta, chúng ta sẽ tạo một pipeline đầu tiên 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 +from sklearn.pipeline import make_pipeline + +pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) + +pipeline.fit(X_train,y_train) +``` + +Sử dụng `PolynomialFeatures(2)` có nghĩa là chúng ta sẽ bao gồm tất cả các đa thức bậc hai từ dữ liệu đầu vào. Trong trường hợp của chúng ta, điều này chỉ có nghĩa 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ể sử dụng các đa thức bậc cao hơn nếu muốn. + +Pipeline có thể được sử dụng theo cách tương tự như đối tượng `LinearRegression` ban đầu, tức là chúng ta có thể `fit` pipeline, sau đó sử dụng `predict` để nhận kết quả dự đoán. Đây là biểu đồ hiển thị dữ liệu kiểm tra và đường cong xấp xỉ: + +Hồi quy đa thức + +Sử dụng hồi quy đa thức, chúng ta có thể đạt được MSE thấp hơn một chút và hệ số xác định cao hơn, nhưng không đáng kể. Chúng ta cần xem xét các đặc trưng khác! + +> Bạn có thể thấy rằng giá bí ngô thấp nhất được quan sát vào khoảng Halloween. Làm thế nào bạn giải thích điều này? + +🎃 Chúc mừng, bạn vừa tạo một mô hình giúp dự đoán giá bí ngô làm bánh. Bạn có thể lặp lại quy trình tương tự cho tất cả các loại bí ngô, nhưng điều đó sẽ rất tẻ nhạt. Hãy cùng học cách đưa loại bí ngô vào mô hình của chúng ta! + +## Đặc trưng phân loại + +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. Tuy nhiên, cột `Variety` hơi khác so với các cột như `Month`, vì nó chứa các giá trị không phải số. Những cột như vậy được gọi là **phân loại**. + +[![ML cho người mới bắt đầu - 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 bắt đầu - Dự đoán đặc trưng phân loại với hồi quy tuyến tính") + +> 🎥 Nhấp vào hình ảnh trên để xem video ngắn về cách sử dụng đặc trưng phân loại. + +Dưới đây là cách giá trung bình phụ thuộc vào loại bí ngô: + +Giá trung bình theo loại + +Để đưa loại bí ngô vào mô hình, trước tiên chúng ta cần chuyển đổi nó sang dạng số, hoặc **mã hóa**. Có một số cách để thực hiệ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ử dụng giá trị số thực của chỉ số và thêm nó vào kết quả, nhân với một hệ số nào đó. Trong trường hợp của chúng ta, mối quan hệ giữa số chỉ số và giá rõ ràng là không tuyến tính, ngay cả khi chúng ta đảm bảo rằng các chỉ số được sắp xếp theo một cách cụ thể. +* **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. Mỗi cột sẽ chứa `1` nếu hàng tương ứng thuộc loại đó, và `0` nếu không. Điều này có nghĩa là sẽ có bốn hệ số trong hồi quy tuyến tính, mỗi hệ số cho một loại bí ngô, chịu trách nhiệm cho "giá khởi điểm" (hoặc "giá bổ sung") cho loại cụ thể đó. + +Dưới đây là mã để mã hóa one-hot một loại: + +```python +pd.get_dummies(new_pumpkins['Variety']) +``` + + ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE +----|-----------|-----------|--------------------------|---------- +70 | 0 | 0 | 0 | 1 +71 | 0 | 0 | 0 | 1 +... | ... | ... | ... | ... +1738 | 0 | 1 | 0 | 0 +1739 | 0 | 1 | 0 | 0 +1740 | 0 | 1 | 0 | 0 +1741 | 0 | 1 | 0 | 0 +1742 | 0 | 1 | 0 | 0 + +Để huấn luyện hồi quy tuyến tính sử dụng loại mã hóa one-hot làm đầu vào, chúng ta chỉ cần khởi tạo dữ liệu `X` và `y` một cách chính xác: + +```python +X = pd.get_dummies(new_pumpkins['Variety']) +y = new_pumpkins['Price'] +``` + +Phần còn lại của mã giống như những gì chúng ta đã sử dụng ở trên để huấn luyện hồi quy tuyến tính. Nếu bạn thử, bạn sẽ thấy rằng sai số bình phương trung bình gần như giống nhau, nhưng chúng ta đạt được hệ số xác định cao hơn (~77%). Để có dự đoán chính xác hơn, chúng ta có thể xem xét thêm các đặc trưng phân loại khác, cũng như các đặc trưng số như `Month` hoặc `DayOfYear`. Để có một mảng lớn các đặc trưng, chúng ta có thể sử dụng `join`: + +```python +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'] +``` + +Ở đây chúng ta cũng xem xét `City` và loại `Package`, điều này cho chúng ta MSE 2.84 (10%) và hệ số xác định 0.94! + +## Tổng hợp tất cả + +Để tạo mô hình tốt nhất, chúng ta có thể sử dụng dữ liệu kết hợp (mã hóa one-hot phân loại + số) từ ví dụ trên cùng với hồi quy đa thức. Dưới đây là mã hoàn chỉnh để bạn tiện tham khảo: + +```python +# set up training data +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'] + +# make train-test split +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + +# setup and train the pipeline +pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) +pipeline.fit(X_train,y_train) + +# predict results for test data +pred = pipeline.predict(X_test) + +# calculate MSE and determination +mse = np.sqrt(mean_squared_error(y_test,pred)) +print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') + +score = pipeline.score(X_train,y_train) +print('Model determination: ', score) +``` + +Điều này sẽ cho chúng ta hệ số xác định tốt nhất gần 97% và MSE=2.23 (~8% lỗi dự đoán). + +| Mô hình | MSE | 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 | + +🏆 Chúc mừng! 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 để xác định các danh mục. + +--- +## 🚀Thử thách + +Thử nghiệm một số biến khác nhau trong notebook này để xem mối tương quan ảnh hưởng như thế nào đến độ chính xác của mô hình. + +## [Câu hỏi sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +## Ôn tập & Tự học + +Trong bài học này, chúng ta đã học về hồi quy tuyến tính. Có những loại hồi quy quan trọng khác. Đọ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 Stanford Statistical Learning](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning). + +## Bài tập + +[Phát triển 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 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 diff --git a/translations/vi/2-Regression/3-Linear/assignment.md b/translations/vi/2-Regression/3-Linear/assignment.md new file mode 100644 index 00000000..b658de44 --- /dev/null +++ b/translations/vi/2-Regression/3-Linear/assignment.md @@ -0,0 +1,25 @@ + +# Tạo Mô Hình Hồi Quy + +## Hướng dẫn + +Trong bài học này, bạn đã được hướng dẫn cách xây dựng mô hình sử dụng cả Hồi Quy Tuyến Tính và Hồi Quy Đa Thức. Dựa trên kiến thức này, hãy tìm một tập dữ liệu hoặc sử dụng một trong các tập dữ liệu tích hợp của Scikit-learn để xây dựng một mô hình mới. Giải thích trong notebook của bạn lý do bạn chọn kỹ thuật đó và chứng minh độ chính xác của mô hình. Nếu mô hình không chính xác, hãy giải thích lý do. + +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| --------- | ----------------------------------------------------------- | -------------------------- | ------------------------------ | +| | trình bày một notebook hoàn chỉnh với giải pháp được ghi chép rõ ràng | giải pháp chưa hoàn chỉnh | giải pháp có lỗi hoặc không hoạt động | + +--- + +**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 diff --git a/translations/vi/2-Regression/3-Linear/solution/Julia/README.md b/translations/vi/2-Regression/3-Linear/solution/Julia/README.md new file mode 100644 index 00000000..5922ef9f --- /dev/null +++ b/translations/vi/2-Regression/3-Linear/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 diff --git a/translations/vi/2-Regression/4-Logistic/README.md b/translations/vi/2-Regression/4-Logistic/README.md new file mode 100644 index 00000000..9dbea3cc --- /dev/null +++ b/translations/vi/2-Regression/4-Logistic/README.md @@ -0,0 +1,405 @@ + +# Hồi quy Logistic để dự đoán danh mục + +![Infographic về hồi quy Logistic và hồi quy tuyến tính](../../../../2-Regression/4-Logistic/images/linear-vs-logistic.png) + +## [Quiz trước bài học](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Bài học này có sẵn bằng R!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html) + +## Giới thiệu + +Trong bài học cuối cùng về Hồi quy, một trong những kỹ thuật _cổ điển_ cơ bản của ML, chúng ta sẽ tìm hiểu về Hồi quy Logistic. Bạn sẽ sử dụng kỹ thuật này để khám phá các mẫu nhằm dự đoán các danh mục nhị phân. Kẹo này có phải là sô-cô-la hay không? Bệnh này có lây hay không? Khách hàng này có chọn sản phẩm này hay không? + +Trong bài học này, bạn sẽ học: + +- Một thư viện mới để trực quan hóa dữ liệu +- Các kỹ thuật hồi quy logistic + +✅ Nâng cao hiểu biết của bạn về cách làm việc với loại hồi quy này trong [Learn module](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) + +## Điều kiện tiên quyết + +Sau khi làm việc với dữ liệu về bí ngô, chúng ta đã đủ quen thuộc để nhận ra rằng có một danh mục nhị phân mà chúng ta có thể làm việc: `Color`. + +Hãy xây dựng một mô hình hồi quy logistic để dự đoán rằng, dựa trên một số biến, _màu sắc của một quả bí ngô cụ thể có khả năng là gì_ (cam 🎃 hoặc trắng 👻). + +> Tại sao chúng ta lại nói về phân loại nhị phân trong một bài học về hồi quy? Chỉ vì sự tiện lợi về ngôn ngữ, vì hồi quy logistic thực chất là [một phương pháp phân loại](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), mặc dù dựa trên tuyến tính. Tìm hiểu về các cách khác để phân loại dữ liệu trong nhóm bài học tiếp theo. + +## Xác định câu hỏi + +Đối với mục đích của chúng ta, chúng ta sẽ biểu thị điều này dưới dạng nhị phân: 'Trắng' hoặc 'Không Trắng'. Cũng có một danh mục 'có sọc' trong tập dữ liệu của chúng ta nhưng có rất ít trường hợp, vì vậy chúng ta sẽ không sử dụng nó. Nó sẽ biến mất khi chúng ta loại bỏ các giá trị null khỏi tập dữ liệu. + +> 🎃 Thực tế thú vị, đôi khi chúng ta gọi bí ngô trắng là bí ngô 'ma'. Chúng không dễ khắc hình, vì vậy chúng không phổ biến như bí ngô cam nhưng trông rất thú vị! Vì vậy, chúng ta cũng có thể diễn đạt lại câu hỏi của mình là: 'Ma' hoặc 'Không Ma'. 👻 + +## Về hồi quy logistic + +Hồi quy logistic khác với hồi quy tuyến tính, mà bạn đã học trước đó, ở một số điểm quan trọng. + +[![ML cho người mới bắt đầu - Hiểu về hồi quy Logistic trong phân loại dữ liệu](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "ML cho người mới bắt đầu - Hiểu về hồi quy Logistic trong phân loại dữ liệu") + +> 🎥 Nhấp vào hình ảnh trên để xem video ngắn về hồi quy logistic. + +### Phân loại nhị phân + +Hồi quy logistic không cung cấp các tính năng giống như hồi quy tuyến tính. Phương pháp trước đưa ra dự đoán về một danh mục nhị phân ("trắng hoặc không trắng") trong khi phương pháp sau có khả năng dự đoán các giá trị liên tục, ví dụ như dựa trên nguồn gốc của bí ngô và thời gian thu hoạch, _giá của nó sẽ tăng bao nhiêu_. + +![Mô hình phân loại bí ngô](../../../../2-Regression/4-Logistic/images/pumpkin-classifier.png) +> Infographic bởi [Dasani Madipalli](https://twitter.com/dasani_decoded) + +### Các phân loại khác + +Có các loại hồi quy logistic khác, bao gồm đa danh mục và thứ tự: + +- **Đa danh mục**, liên quan đến việc có nhiều hơn một danh mục - "Cam, Trắng, và Có Sọc". +- **Thứ tự**, liên quan đến các danh mục có thứ tự, hữu ích nếu chúng ta muốn sắp xếp kết quả một cách logic, như bí ngô của chúng ta được sắp xếp theo một số kích thước hữu hạn (mini, nhỏ, vừa, lớn, rất lớn, cực lớn). + +![Hồi quy đa danh mục vs hồi quy thứ tự](../../../../2-Regression/4-Logistic/images/multinomial-vs-ordinal.png) + +### Các biến KHÔNG cần phải tương quan + +Bạn còn nhớ hồi quy tuyến tính hoạt động tốt hơn với các biến tương quan không? Hồi quy logistic thì ngược lại - các biến không cần phải liên kết. Điều này phù hợp với dữ liệu này, vốn có các mối tương quan khá yếu. + +### Bạn cần nhiều dữ liệu sạch + +Hồi quy logistic sẽ cho kết quả chính xác hơn nếu bạn sử dụng nhiều dữ liệu; tập dữ liệu nhỏ của chúng ta không phải là tối ưu cho nhiệm vụ này, vì vậy hãy ghi nhớ điều đó. + +[![ML cho người mới bắt đầu - Phân tích và chuẩn bị dữ liệu cho hồi quy Logistic](https://img.youtube.com/vi/B2X4H9vcXTs/0.jpg)](https://youtu.be/B2X4H9vcXTs "ML cho người mới bắt đầu - Phân tích và chuẩn bị dữ liệu cho hồi quy Logistic") + +✅ Hãy suy nghĩ về các loại dữ liệu phù hợp với hồi quy logistic. + +## Bài tập - làm sạch dữ liệu + +Đầu tiên, làm sạch dữ liệu một chút, loại bỏ các giá trị null và chỉ chọn một số cột: + +1. Thêm đoạn mã sau: + + ```python + + columns_to_select = ['City Name','Package','Variety', 'Origin','Item Size', 'Color'] + pumpkins = full_pumpkins.loc[:, columns_to_select] + + pumpkins.dropna(inplace=True) + ``` + + Bạn luôn có thể xem qua dataframe mới của mình: + + ```python + pumpkins.info + ``` + +### Trực quan hóa - biểu đồ danh mục + +Đến giờ bạn đã tải lên [notebook khởi đầu](../../../../2-Regression/4-Logistic/notebook.ipynb) với dữ liệu bí ngô một lần nữa và làm sạch nó để giữ lại một tập dữ liệu chứa một vài biến, bao gồm `Color`. Hãy trực quan hóa dataframe trong notebook bằng một thư viện khác: [Seaborn](https://seaborn.pydata.org/index.html), được xây dựng trên Matplotlib mà chúng ta đã sử dụng trước đó. + +Seaborn cung cấp một số cách thú vị để trực quan hóa dữ liệu của bạn. Ví dụ, bạn có thể so sánh phân phối dữ liệu cho mỗi `Variety` và `Color` trong một biểu đồ danh mục. + +1. Tạo biểu đồ như vậy bằng cách sử dụng hàm `catplot`, sử dụng dữ liệu bí ngô `pumpkins`, và chỉ định ánh xạ màu cho mỗi danh mục bí ngô (cam hoặc trắng): + + ```python + import seaborn as sns + + palette = { + 'ORANGE': 'orange', + 'WHITE': 'wheat', + } + + sns.catplot( + data=pumpkins, y="Variety", hue="Color", kind="count", + palette=palette, + ) + ``` + + ![Lưới dữ liệu được trực quan hóa](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_1.png) + + Bằng cách quan sát dữ liệu, bạn có thể thấy cách dữ liệu `Color` liên quan đến `Variety`. + + ✅ Dựa trên biểu đồ danh mục này, bạn có thể hình dung những khám phá thú vị nào? + +### Tiền xử lý dữ liệu: mã hóa đặc trưng và nhãn +Tập dữ liệu bí ngô của chúng ta chứa các giá trị chuỗi cho tất cả các cột. Làm việc với dữ liệu danh mục rất trực quan đối với con người nhưng không phải đối với máy móc. Các thuật toán học máy hoạt động tốt với các con số. Đó là lý do tại sao mã hóa là một bước rất quan trọng trong giai đoạn tiền xử lý dữ liệu, vì nó cho phép chúng ta chuyển đổi dữ liệu danh mục thành dữ liệu số mà không mất thông tin. Mã hóa tốt dẫn đến việc xây dựng một mô hình tốt. + +Đối với mã hóa đặc trưng, có hai loại mã hóa chính: + +1. Mã hóa thứ tự: phù hợp với các biến thứ tự, là các biến danh mục mà dữ liệu của chúng tuân theo một thứ tự logic, như cột `Item Size` trong tập dữ liệu của chúng ta. Nó tạo ra một ánh xạ sao cho mỗi danh mục được biểu thị bằng một số, là thứ tự của danh mục trong cột. + + ```python + from sklearn.preprocessing import OrdinalEncoder + + item_size_categories = [['sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo']] + ordinal_features = ['Item Size'] + ordinal_encoder = OrdinalEncoder(categories=item_size_categories) + ``` + +2. Mã hóa danh mục: phù hợp với các biến danh mục, là các biến danh mục mà dữ liệu của chúng không tuân theo một thứ tự logic, như tất cả các đặc trưng khác ngoài `Item Size` trong tập dữ liệu của chúng ta. Đây là một mã hóa one-hot, nghĩa là mỗi danh mục được biểu thị bằng một cột nhị phân: biến được mã hóa bằng 1 nếu bí ngô thuộc về Variety đó và 0 nếu không. + + ```python + from sklearn.preprocessing import OneHotEncoder + + categorical_features = ['City Name', 'Package', 'Variety', 'Origin'] + categorical_encoder = OneHotEncoder(sparse_output=False) + ``` +Sau đó, `ColumnTransformer` được sử dụng để kết hợp nhiều bộ mã hóa thành một bước duy nhất và áp dụng chúng cho các cột thích hợp. + +```python + from sklearn.compose import ColumnTransformer + + ct = ColumnTransformer(transformers=[ + ('ord', ordinal_encoder, ordinal_features), + ('cat', categorical_encoder, categorical_features) + ]) + + ct.set_output(transform='pandas') + encoded_features = ct.fit_transform(pumpkins) +``` +Mặt khác, để mã hóa nhãn, chúng ta sử dụng lớp `LabelEncoder` của scikit-learn, là một lớp tiện ích để giúp chuẩn hóa nhãn sao cho chúng chỉ chứa các giá trị từ 0 đến n_classes-1 (ở đây là 0 và 1). + +```python + from sklearn.preprocessing import LabelEncoder + + label_encoder = LabelEncoder() + encoded_label = label_encoder.fit_transform(pumpkins['Color']) +``` +Khi chúng ta đã mã hóa các đặc trưng và nhãn, chúng ta có thể hợp nhất chúng thành một dataframe mới `encoded_pumpkins`. + +```python + encoded_pumpkins = encoded_features.assign(Color=encoded_label) +``` +✅ Những lợi ích của việc sử dụng mã hóa thứ tự cho cột `Item Size` là gì? + +### Phân tích mối quan hệ giữa các biến + +Bây giờ chúng ta đã tiền xử lý dữ liệu, chúng ta có thể phân tích mối quan hệ giữa các đặc trưng và nhãn để hiểu rõ hơn về khả năng dự đoán nhãn của mô hình dựa trên các đặc trưng. +Cách tốt nhất để thực hiện loại phân tích này là vẽ biểu đồ dữ liệu. Chúng ta sẽ sử dụng lại hàm `catplot` của Seaborn để trực quan hóa mối quan hệ giữa `Item Size`, `Variety` và `Color` trong một biểu đồ danh mục. Để vẽ biểu đồ dữ liệu tốt hơn, chúng ta sẽ sử dụng cột `Item Size` đã được mã hóa và cột `Variety` chưa được mã hóa. + +```python + palette = { + 'ORANGE': 'orange', + 'WHITE': 'wheat', + } + pumpkins['Item Size'] = encoded_pumpkins['ord__Item Size'] + + g = sns.catplot( + data=pumpkins, + x="Item Size", y="Color", row='Variety', + kind="box", orient="h", + sharex=False, margin_titles=True, + height=1.8, aspect=4, palette=palette, + ) + g.set(xlabel="Item Size", ylabel="").set(xlim=(0,6)) + g.set_titles(row_template="{row_name}") +``` +![Biểu đồ danh mục của dữ liệu được trực quan hóa](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_2.png) + +### Sử dụng biểu đồ swarm + +Vì `Color` là một danh mục nhị phân (Trắng hoặc Không), nó cần 'một [cách tiếp cận chuyên biệt](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) để trực quan hóa'. Có những cách khác để trực quan hóa mối quan hệ của danh mục này với các biến khác. + +Bạn có thể trực quan hóa các biến cạnh nhau bằng các biểu đồ của Seaborn. + +1. Thử sử dụng biểu đồ 'swarm' để hiển thị phân phối các giá trị: + + ```python + palette = { + 0: 'orange', + 1: 'wheat' + } + sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette) + ``` + + ![Một swarm của dữ liệu được trực quan hóa](../../../../2-Regression/4-Logistic/images/swarm_2.png) + +**Lưu ý**: đoạn mã trên có thể tạo ra cảnh báo, vì Seaborn không thể biểu diễn số lượng điểm dữ liệu lớn như vậy trong biểu đồ swarm. Một giải pháp khả thi là giảm kích thước của điểm đánh dấu bằng cách sử dụng tham số 'size'. Tuy nhiên, hãy lưu ý rằng điều này ảnh hưởng đến khả năng đọc của biểu đồ. + +> **🧮 Hiển thị Toán học** +> +> Hồi quy logistic dựa trên khái niệm 'xác suất tối đa' sử dụng [hàm sigmoid](https://wikipedia.org/wiki/Sigmoid_function). Một 'Hàm Sigmoid' trên biểu đồ trông giống như hình chữ 'S'. Nó lấy một giá trị và ánh xạ nó vào khoảng từ 0 đến 1. Đường cong của nó cũng được gọi là 'đường cong logistic'. Công thức của nó trông như thế này: +> +> ![hàm logistic](../../../../2-Regression/4-Logistic/images/sigmoid.png) +> +> trong đó điểm giữa của sigmoid nằm ở điểm 0 của x, L là giá trị tối đa của đường cong, và k là độ dốc của đường cong. Nếu kết quả của hàm lớn hơn 0.5, nhãn được xét sẽ được gán vào lớp '1' của lựa chọn nhị phân. Nếu không, nó sẽ được phân loại là '0'. + +## Xây dựng mô hình của bạn + +Xây dựng một mô hình để tìm các phân loại nhị phân này khá đơn giản trong Scikit-learn. + +[![ML cho người mới bắt đầu - Hồi quy Logistic để phân loại dữ liệu](https://img.youtube.com/vi/MmZS2otPrQ8/0.jpg)](https://youtu.be/MmZS2otPrQ8 "ML cho người mới bắt đầu - Hồi quy Logistic để phân loại dữ liệu") + +> 🎥 Nhấp vào hình ảnh trên để xem video ngắn về xây dựng mô hình hồi quy tuyến tính. + +1. Chọn các biến bạn muốn sử dụng trong mô hình phân loại của mình và chia tập huấn luyện và tập kiểm tra bằng cách gọi `train_test_split()`: + + ```python + from sklearn.model_selection import train_test_split + + X = encoded_pumpkins[encoded_pumpkins.columns.difference(['Color'])] + y = encoded_pumpkins['Color'] + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + + ``` + +2. Bây giờ bạn có thể huấn luyện mô hình của mình bằng cách gọi `fit()` với dữ liệu huấn luyện và in kết quả của nó: + + ```python + from sklearn.metrics import f1_score, classification_report + from sklearn.linear_model import LogisticRegression + + model = LogisticRegression() + model.fit(X_train, y_train) + predictions = model.predict(X_test) + + print(classification_report(y_test, predictions)) + print('Predicted labels: ', predictions) + print('F1-score: ', f1_score(y_test, predictions)) + ``` + + Xem qua bảng điểm của mô hình của bạn. Không tệ, xét rằng bạn chỉ có khoảng 1000 hàng dữ liệu: + + ```output + precision recall f1-score support + + 0 0.94 0.98 0.96 166 + 1 0.85 0.67 0.75 33 + + accuracy 0.92 199 + macro avg 0.89 0.82 0.85 199 + weighted avg 0.92 0.92 0.92 199 + + Predicted labels: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 + 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 + 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 0 0 0 1 0 0 0 0 0 0 0 0 1 1] + F1-score: 0.7457627118644068 + ``` + +## Hiểu rõ hơn qua ma trận nhầm lẫn + +Mặc dù bạn có thể nhận được báo cáo bảng điểm [thuật ngữ](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) bằng cách in các mục trên, bạn có thể hiểu mô hình của mình dễ dàng hơn bằng cách sử dụng [ma trận nhầm lẫn](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) để giúp chúng ta hiểu cách mô hình đang hoạt động. + +> 🎓 Một '[ma trận nhầm lẫn](https://wikipedia.org/wiki/Confusion_matrix)' (hoặc 'ma trận lỗi') là một bảng biểu thị các giá trị dương và âm thực sự so với sai của mô hình, từ đó đánh giá độ chính xác của dự đoán. + +1. Để sử dụng ma trận nhầm lẫn, gọi `confusion_matrix()`: + + ```python + from sklearn.metrics import confusion_matrix + confusion_matrix(y_test, predictions) + ``` + + Xem qua ma trận nhầm lẫn của mô hình của bạn: + + ```output + array([[162, 4], + [ 11, 22]]) + ``` + +Trong Scikit-learn, các hàng (trục 0) là nhãn thực tế và các cột (trục 1) là nhãn dự đoán. + +| | 0 | 1 | +| :---: | :---: | :---: | +| 0 | TN | FP | +| 1 | FN | TP | + +Chuyện gì đang xảy ra ở đây? Giả sử mô hình của chúng ta được yêu cầu phân loại bí ngô giữa hai danh mục nhị phân, danh mục 'trắng' và danh mục 'không trắng'. + +- Nếu mô hình của bạn dự đoán một quả bí ngô là không trắng và thực tế nó thuộc danh mục 'không trắng', chúng ta gọi đó là âm tính thực sự, được biểu thị bằng số ở góc trên bên trái. +- Nếu mô hình của bạn dự đoán một quả bí ngô là trắng và thực tế nó thuộc danh mục 'không trắng', chúng ta gọi đó là âm tính sai, được biểu thị bằng số ở góc dưới bên trái. +- Nếu mô hình của bạn dự đoán một quả bí ngô là không trắng và thực tế nó thuộc danh mục 'trắng', chúng ta gọi đó là dương tính sai, được biểu thị bằng số ở góc trên bên phải. +- Nếu mô hình của bạn dự đoán một quả bí ngô là trắng và thực tế nó thuộc danh mục 'trắng', chúng ta gọi đó là dương tính thực sự, được biểu thị bằng số ở góc dưới bên phải. + +Như bạn có thể đoán, sẽ tốt hơn nếu có số lượng dương tính thực sự và âm tính thực sự lớn hơn, và số lượng dương tính sai và âm tính sai nhỏ hơn, điều này cho thấy mô hình hoạt động tốt hơn. +Làm thế nào ma trận nhầm lẫn liên quan đến độ chính xác và độ hồi tưởng? Hãy nhớ rằng báo cáo phân loại được in ở trên đã hiển thị độ chính xác (0.85) và độ hồi tưởng (0.67). + +Độ chính xác = tp / (tp + fp) = 22 / (22 + 4) = 0.8461538461538461 + +Độ hồi tưởng = tp / (tp + fn) = 22 / (22 + 11) = 0.6666666666666666 + +✅ Hỏi: Theo ma trận nhầm lẫn, mô hình hoạt động như thế nào? Trả lời: Không tệ; có một số lượng lớn các giá trị âm đúng nhưng cũng có một vài giá trị âm sai. + +Hãy cùng xem lại các thuật ngữ mà chúng ta đã thấy trước đó với sự trợ giúp của việc ánh xạ TP/TN và FP/FN trong ma trận nhầm lẫn: + +🎓 Độ chính xác: TP/(TP + FP) Phần trăm các trường hợp liên quan trong số các trường hợp được truy xuất (ví dụ: các nhãn được gán đúng) + +🎓 Độ hồi tưởng: TP/(TP + FN) Phần trăm các trường hợp liên quan được truy xuất, bất kể có được gán đúng hay không + +🎓 f1-score: (2 * độ chính xác * độ hồi tưởng)/(độ chính xác + độ hồi tưởng) Trung bình có trọng số của độ chính xác và độ hồi tưởng, với giá trị tốt nhất là 1 và tệ nhất là 0 + +🎓 Support: Số lần xuất hiện của mỗi nhãn được truy xuất + +🎓 Độ chính xác: (TP + TN)/(TP + TN + FP + FN) Phần trăm các nhãn được dự đoán chính xác cho một mẫu. + +🎓 Macro Avg: Tính toán trung bình không trọng số của các chỉ số cho mỗi nhãn, không tính đến sự mất cân bằng nhãn. + +🎓 Weighted Avg: Tính toán trung bình có trọng số của các chỉ số cho mỗi nhãn, tính đến sự mất cân bằng nhãn bằng cách trọng số theo số lượng hỗ trợ (số trường hợp đúng cho mỗi nhãn). + +✅ Bạn có thể nghĩ đến chỉ số nào cần theo dõi nếu bạn muốn mô hình của mình giảm số lượng giá trị âm sai? + +## Trực quan hóa đường cong ROC của mô hình này + +[![ML cho người mới bắt đầu - Phân tích hiệu suất hồi quy logistic với đường cong ROC](https://img.youtube.com/vi/GApO575jTA0/0.jpg)](https://youtu.be/GApO575jTA0 "ML cho người mới bắt đầu - Phân tích hiệu suất hồi quy logistic với đường cong ROC") + +> 🎥 Nhấp vào hình ảnh trên để xem video ngắn về đường cong ROC + +Hãy thực hiện một hình ảnh hóa nữa để xem cái gọi là 'ROC' curve: + +```python +from sklearn.metrics import roc_curve, roc_auc_score +import matplotlib +import matplotlib.pyplot as plt +%matplotlib inline + +y_scores = model.predict_proba(X_test) +fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1]) + +fig = plt.figure(figsize=(6, 6)) +plt.plot([0, 1], [0, 1], 'k--') +plt.plot(fpr, tpr) +plt.xlabel('False Positive Rate') +plt.ylabel('True Positive Rate') +plt.title('ROC Curve') +plt.show() +``` + +Sử dụng Matplotlib, vẽ [Đặc tính Hoạt động Nhận diện](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) hoặc ROC của mô hình. Đường cong ROC thường được sử dụng để có cái nhìn về đầu ra của một bộ phân loại theo các giá trị đúng và sai. "Đường cong ROC thường có tỷ lệ đúng trên trục Y và tỷ lệ sai trên trục X." Do đó, độ dốc của đường cong và khoảng cách giữa đường trung điểm và đường cong rất quan trọng: bạn muốn một đường cong nhanh chóng đi lên và vượt qua đường. Trong trường hợp của chúng ta, có các giá trị sai ban đầu, sau đó đường cong đi lên và vượt qua đúng cách: + +![ROC](../../../../2-Regression/4-Logistic/images/ROC_2.png) + +Cuối cùng, sử dụng API [`roc_auc_score`](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score) của Scikit-learn để tính toán 'Diện tích Dưới Đường Cong' (AUC): + +```python +auc = roc_auc_score(y_test,y_scores[:,1]) +print(auc) +``` +Kết quả là `0.9749908725812341`. Vì AUC dao động từ 0 đến 1, bạn muốn một điểm số lớn, vì một mô hình dự đoán chính xác 100% sẽ có AUC là 1; trong trường hợp này, mô hình _khá tốt_. + +Trong các bài học tương lai về phân loại, bạn sẽ học cách lặp lại để cải thiện điểm số của mô hình. Nhưng hiện tại, chúc mừng bạn! Bạn đã hoàn thành các bài học về hồi quy này! + +--- +## 🚀Thử thách + +Có rất nhiều điều để khám phá về hồi quy logistic! Nhưng cách tốt nhất để học là thử nghiệm. Tìm một tập dữ liệu phù hợp với loại phân tích này và xây dựng một mô hình với nó. Bạn học được gì? mẹo: thử [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) để tìm các tập dữ liệu thú vị. + +## [Câu hỏi sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +## Ôn tập & Tự học + +Đọc vài trang đầu của [bài viết này từ Stanford](https://web.stanford.edu/~jurafsky/slp3/5.pdf) về một số ứng dụng thực tế của hồi quy logistic. Hãy suy nghĩ về các nhiệm vụ phù hợp hơn với một loại hồi quy hoặc loại khác mà chúng ta đã học cho đến nay. Điều gì sẽ hoạt động tốt nhất? + +## Bài tập + +[Thử lại hồi quy này](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 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 diff --git a/translations/vi/2-Regression/4-Logistic/assignment.md b/translations/vi/2-Regression/4-Logistic/assignment.md new file mode 100644 index 00000000..2764f71d --- /dev/null +++ b/translations/vi/2-Regression/4-Logistic/assignment.md @@ -0,0 +1,25 @@ + +# Thử lại một số hồi quy + +## Hướng dẫn + +Trong bài học, bạn đã sử dụng một phần dữ liệu về bí ngô. Bây giờ, hãy quay lại dữ liệu gốc và thử sử dụng toàn bộ dữ liệu, đã được làm sạch và chuẩn hóa, để xây dựng một mô hình Hồi quy Logistic. + +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| --------- | ------------------------------------------------------------------------ | ----------------------------------------------------------- | ---------------------------------------------------------- | +| | Notebook được trình bày với mô hình được giải thích rõ ràng và hoạt động tốt | Notebook được trình bày với mô hình hoạt động ở mức tối thiểu | Notebook được trình bày với mô hình hoạt động kém hoặc không có mô hình | + +--- + +**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 diff --git a/translations/vi/2-Regression/4-Logistic/solution/Julia/README.md b/translations/vi/2-Regression/4-Logistic/solution/Julia/README.md new file mode 100644 index 00000000..1c4726b6 --- /dev/null +++ b/translations/vi/2-Regression/4-Logistic/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 diff --git a/translations/vi/2-Regression/README.md b/translations/vi/2-Regression/README.md new file mode 100644 index 00000000..6968791f --- /dev/null +++ b/translations/vi/2-Regression/README.md @@ -0,0 +1,54 @@ + +# Các mô hình hồi quy trong học máy +## Chủ đề khu vực: Các mô hình hồi quy cho giá bí ngô ở Bắc Mỹ 🎃 + +Ở Bắc Mỹ, bí ngô thường được khắc thành những khuôn mặt đáng sợ cho lễ Halloween. Hãy cùng khám phá thêm về loại rau củ thú vị này! + +![jack-o-lanterns](../../../2-Regression/images/jack-o-lanterns.jpg) +> Ảnh của Beth Teutschmann trên Unsplash + +## Những gì bạn sẽ học + +[![Giới thiệu về Hồi quy](https://img.youtube.com/vi/5QnJtDad4iQ/0.jpg)](https://youtu.be/5QnJtDad4iQ "Video giới thiệu về Hồi quy - Nhấn để xem!") +> 🎥 Nhấn vào hình ảnh trên để xem video giới thiệu nhanh về bài học này + +Các bài học trong phần này bao gồm các loại hồi quy trong bối cảnh học máy. Các mô hình hồi quy có thể giúp xác định _mối quan hệ_ giữa các biến. Loại mô hình này có thể dự đoán các giá trị như chiều dài, nhiệt độ, hoặc tuổi tác, từ đó khám phá mối quan hệ giữa các biến khi phân tích các điểm dữ liệu. + +Trong loạt bài học này, bạn sẽ khám phá sự khác biệt giữa hồi quy tuyến tính và hồi quy logistic, cũng như khi nào nên ưu tiên sử dụng một loại so với loại kia. + +[![Học máy cho người mới bắt đầu - Giới thiệu về các mô hình hồi quy trong học máy](https://img.youtube.com/vi/XA3OaoW86R8/0.jpg)](https://youtu.be/XA3OaoW86R8 "Học máy cho người mới bắt đầu - Giới thiệu về các mô hình hồi quy trong học máy") + +> 🎥 Nhấn vào hình ảnh trên để xem video ngắn giới thiệu về các mô hình hồi quy. + +Trong nhóm bài học này, bạn sẽ được thiết lập để bắt đầu các nhiệm vụ học máy, bao gồm cấu hình Visual Studio Code để quản lý notebook, môi trường phổ biến dành cho các nhà khoa học dữ liệu. Bạn sẽ khám phá Scikit-learn, một thư viện dành cho học máy, và bạn sẽ xây dựng các mô hình đầu tiên của mình, tập trung vào các mô hình hồi quy trong chương này. + +> Có những công cụ ít mã hóa hữu ích có thể giúp bạn học cách làm việc với các mô hình hồi quy. Hãy thử [Azure ML cho nhiệm vụ này](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +### Các bài học + +1. [Công cụ cần thiết](1-Tools/README.md) +2. [Quản lý dữ liệu](2-Data/README.md) +3. [Hồi quy tuyến tính và đa thức](3-Linear/README.md) +4. [Hồi quy logistic](4-Logistic/README.md) + +--- +### Tín dụng + +"ML với hồi quy" được viết với ♥️ bởi [Jen Looper](https://twitter.com/jenlooper) + +♥️ Những người đóng góp cho bài kiểm tra bao gồm: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) và [Ornella Altunyan](https://twitter.com/ornelladotcom) + +Bộ dữ liệu về bí ngô được đề xuất bởi [dự án này trên Kaggle](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) và dữ liệu của nó được lấy từ [Báo cáo Tiêu chuẩn Thị trường Đầu mối Cây trồng Đặc sản](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) do Bộ Nông nghiệp Hoa Kỳ phân phối. Chúng tôi đã thêm một số điểm liên quan đến màu sắc dựa trên giống để chuẩn hóa phân phối. Dữ liệu này thuộc phạm vi công cộng. + +--- + +**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 diff --git a/translations/vi/3-Web-App/1-Web-App/README.md b/translations/vi/3-Web-App/1-Web-App/README.md new file mode 100644 index 00000000..a5c3ba03 --- /dev/null +++ b/translations/vi/3-Web-App/1-Web-App/README.md @@ -0,0 +1,359 @@ + +# Xây dựng ứng dụng web sử dụng mô hình ML + +Trong bài học này, bạn sẽ huấn luyện một mô hình ML trên một tập dữ liệu đặc biệt: _Các lần nhìn thấy UFO trong thế kỷ qua_, được lấy từ cơ sở dữ liệu của NUFORC. + +Bạn sẽ học: + +- Cách 'pickle' một mô hình đã được huấn luyện +- Cách sử dụng mô hình đó trong một ứng dụng Flask + +Chúng ta sẽ tiếp tục sử dụng notebook để làm sạch dữ liệu và huấn luyện mô hình, nhưng bạn có thể tiến thêm một bước bằng cách khám phá cách sử dụng mô hình trong thực tế, cụ thể là trong một ứng dụng web. + +Để làm điều này, bạn cần xây dựng một ứng dụng web sử dụng Flask. + +## [Quiz trước bài học](https://ff-quizzes.netlify.app/en/ml/) + +## Xây dựng ứng dụng + +Có nhiều cách để xây dựng ứng dụng web sử dụng mô hình học máy. Kiến trúc web của bạn có thể ảnh hưởng đến cách mô hình được huấn luyện. Hãy tưởng tượng bạn đang làm việc trong một doanh nghiệp nơi nhóm khoa học dữ liệu đã huấn luyện một mô hình mà họ muốn bạn sử dụng trong ứng dụng. + +### Những điều cần cân nhắc + +Có nhiều câu hỏi bạn cần đặt ra: + +- **Đó là ứng dụng web hay ứng dụng di động?** Nếu bạn đang xây dựng một ứng dụng di động hoặc cần sử dụng mô hình trong ngữ cảnh IoT, bạn có thể sử dụng [TensorFlow Lite](https://www.tensorflow.org/lite/) và tích hợp mô hình vào ứng dụng Android hoặc iOS. +- **Mô hình sẽ được lưu trữ ở đâu?** Trên đám mây hay cục bộ? +- **Hỗ trợ ngoại tuyến.** Ứng dụng có cần hoạt động ngoại tuyến không? +- **Công nghệ nào được sử dụng để huấn luyện mô hình?** Công nghệ được chọn có thể ảnh hưởng đến công cụ bạn cần sử dụng. + - **Sử dụng TensorFlow.** Nếu bạn huấn luyện mô hình bằng TensorFlow, ví dụ, hệ sinh thái này cung cấp khả năng chuyển đổi mô hình TensorFlow để sử dụng trong ứng dụng web bằng cách sử dụng [TensorFlow.js](https://www.tensorflow.org/js/). + - **Sử dụng PyTorch.** Nếu bạn xây dựng mô hình bằng thư viện như [PyTorch](https://pytorch.org/), bạn có tùy chọn xuất mô hình ở định dạng [ONNX](https://onnx.ai/) (Open Neural Network Exchange) để sử dụng trong các ứng dụng web JavaScript có thể sử dụng [Onnx Runtime](https://www.onnxruntime.ai/). Tùy chọn này sẽ được khám phá trong bài học tương lai với mô hình được huấn luyện bằng Scikit-learn. + - **Sử dụng Lobe.ai hoặc Azure Custom Vision.** Nếu bạn sử dụng hệ thống ML SaaS (Phần mềm như một dịch vụ) như [Lobe.ai](https://lobe.ai/) hoặc [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) để huấn luyện mô hình, loại phần mềm này cung cấp cách xuất mô hình cho nhiều nền tảng, bao gồm xây dựng API tùy chỉnh để truy vấn trên đám mây bởi ứng dụng trực tuyến của bạn. + +Bạn cũng có cơ hội xây dựng toàn bộ ứng dụng web Flask có thể tự huấn luyện mô hình ngay trong trình duyệt web. Điều này cũng có thể được thực hiện bằng cách sử dụng TensorFlow.js trong ngữ cảnh JavaScript. + +Đối với mục đích của chúng ta, vì chúng ta đã làm việc với notebook dựa trên Python, hãy khám phá các bước bạn cần thực hiện để xuất một mô hình đã huấn luyện từ notebook sang định dạng có thể đọc được bởi ứng dụng web xây dựng bằng Python. + +## Công cụ + +Để thực hiện nhiệm vụ này, bạn cần hai công cụ: Flask và Pickle, cả hai đều chạy trên Python. + +✅ [Flask](https://palletsprojects.com/p/flask/) là gì? Được định nghĩa là 'micro-framework' bởi các nhà sáng tạo, Flask cung cấp các tính năng cơ bản của framework web sử dụng Python và một công cụ tạo mẫu để xây dựng trang web. Hãy xem [module học này](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) để thực hành xây dựng với Flask. + +✅ [Pickle](https://docs.python.org/3/library/pickle.html) là gì? Pickle 🥒 là một module Python dùng để tuần tự hóa và giải tuần tự hóa cấu trúc đối tượng Python. Khi bạn 'pickle' một mô hình, bạn tuần tự hóa hoặc làm phẳng cấu trúc của nó để sử dụng trên web. Hãy cẩn thận: pickle không an toàn về bản chất, vì vậy hãy cẩn thận nếu được yêu cầu 'un-pickle' một tệp. Một tệp pickled có hậu tố `.pkl`. + +## Bài tập - làm sạch dữ liệu + +Trong bài học này, bạn sẽ sử dụng dữ liệu từ 80,000 lần nhìn thấy UFO, được thu thập bởi [NUFORC](https://nuforc.org) (Trung tâm Báo cáo UFO Quốc gia). Dữ liệu này có một số mô tả thú vị về các lần nhìn thấy UFO, ví dụ: + +- **Mô tả dài.** "Một người đàn ông xuất hiện từ một tia sáng chiếu xuống một cánh đồng cỏ vào ban đêm và chạy về phía bãi đậu xe của Texas Instruments". +- **Mô tả ngắn.** "những ánh sáng đuổi theo chúng tôi". + +Bảng tính [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) bao gồm các cột về `city`, `state` và `country` nơi xảy ra lần nhìn thấy, hình dạng của vật thể (`shape`) và `latitude` và `longitude`. + +Trong [notebook](../../../../3-Web-App/1-Web-App/notebook.ipynb) trống được bao gồm trong bài học này: + +1. import `pandas`, `matplotlib`, và `numpy` như bạn đã làm trong các bài học trước và import bảng tính ufos. Bạn có thể xem một mẫu tập dữ liệu: + + ```python + import pandas as pd + import numpy as np + + ufos = pd.read_csv('./data/ufos.csv') + ufos.head() + ``` + +1. Chuyển đổi dữ liệu ufos thành một dataframe nhỏ với tiêu đề mới. Kiểm tra các giá trị duy nhất trong trường `Country`. + + ```python + ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) + + ufos.Country.unique() + ``` + +1. Bây giờ, bạn có thể giảm lượng dữ liệu cần xử lý bằng cách loại bỏ các giá trị null và chỉ import các lần nhìn thấy trong khoảng từ 1-60 giây: + + ```python + ufos.dropna(inplace=True) + + ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] + + ufos.info() + ``` + +1. Import thư viện `LabelEncoder` của Scikit-learn để chuyển đổi các giá trị văn bản của quốc gia thành số: + + ✅ LabelEncoder mã hóa dữ liệu theo thứ tự bảng chữ cái + + ```python + from sklearn.preprocessing import LabelEncoder + + ufos['Country'] = LabelEncoder().fit_transform(ufos['Country']) + + ufos.head() + ``` + + Dữ liệu của bạn sẽ trông như thế này: + + ```output + Seconds Country Latitude Longitude + 2 20.0 3 53.200000 -2.916667 + 3 20.0 4 28.978333 -96.645833 + 14 30.0 4 35.823889 -80.253611 + 23 60.0 4 45.582778 -122.352222 + 24 3.0 3 51.783333 -0.783333 + ``` + +## Bài tập - xây dựng mô hình + +Bây giờ bạn có thể chuẩn bị huấn luyện mô hình bằng cách chia dữ liệu thành nhóm huấn luyện và kiểm tra. + +1. Chọn ba đặc trưng bạn muốn huấn luyện làm vector X, và vector y sẽ là `Country`. Bạn muốn có thể nhập `Seconds`, `Latitude` và `Longitude` và nhận được mã quốc gia để trả về. + + ```python + from sklearn.model_selection import train_test_split + + Selected_features = ['Seconds','Latitude','Longitude'] + + X = ufos[Selected_features] + y = ufos['Country'] + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + ``` + +1. Huấn luyện mô hình của bạn bằng logistic regression: + + ```python + from sklearn.metrics import accuracy_score, classification_report + from sklearn.linear_model import LogisticRegression + model = LogisticRegression() + model.fit(X_train, y_train) + predictions = model.predict(X_test) + + print(classification_report(y_test, predictions)) + print('Predicted labels: ', predictions) + print('Accuracy: ', accuracy_score(y_test, predictions)) + ``` + +Độ chính xác không tệ **(khoảng 95%)**, không có gì ngạc nhiên, vì `Country` và `Latitude/Longitude` có mối tương quan. + +Mô hình bạn tạo ra không quá đột phá vì bạn có thể suy luận một `Country` từ `Latitude` và `Longitude`, nhưng đây là một bài tập tốt để thử huấn luyện từ dữ liệu thô mà bạn đã làm sạch, xuất ra, và sau đó sử dụng mô hình này trong một ứng dụng web. + +## Bài tập - 'pickle' mô hình của bạn + +Bây giờ, đã đến lúc _pickle_ mô hình của bạn! Bạn có thể làm điều đó chỉ trong vài dòng mã. Sau khi _pickled_, tải mô hình đã pickled và kiểm tra nó với một mảng dữ liệu mẫu chứa các giá trị cho seconds, latitude và longitude, + +```python +import pickle +model_filename = 'ufo-model.pkl' +pickle.dump(model, open(model_filename,'wb')) + +model = pickle.load(open('ufo-model.pkl','rb')) +print(model.predict([[50,44,-12]])) +``` + +Mô hình trả về **'3'**, là mã quốc gia của Vương quốc Anh. Thật thú vị! 👽 + +## Bài tập - xây dựng ứng dụng Flask + +Bây giờ bạn có thể xây dựng một ứng dụng Flask để gọi mô hình của bạn và trả về kết quả tương tự, nhưng theo cách trực quan hơn. + +1. Bắt đầu bằng cách tạo một thư mục tên **web-app** bên cạnh tệp _notebook.ipynb_ nơi tệp _ufo-model.pkl_ của bạn nằm. + +1. Trong thư mục đó, tạo thêm ba thư mục: **static**, với một thư mục **css** bên trong, và **templates**. Bạn sẽ có các tệp và thư mục sau: + + ```output + web-app/ + static/ + css/ + templates/ + notebook.ipynb + ufo-model.pkl + ``` + + ✅ Tham khảo thư mục giải pháp để xem ứng dụng hoàn chỉnh + +1. Tệp đầu tiên cần tạo trong thư mục _web-app_ là tệp **requirements.txt**. Giống như _package.json_ trong ứng dụng JavaScript, tệp này liệt kê các phụ thuộc cần thiết cho ứng dụng. Trong **requirements.txt** thêm các dòng: + + ```text + scikit-learn + pandas + numpy + flask + ``` + +1. Bây giờ, chạy tệp này bằng cách điều hướng đến _web-app_: + + ```bash + cd web-app + ``` + +1. Trong terminal của bạn, gõ `pip install`, để cài đặt các thư viện được liệt kê trong _requirements.txt_: + + ```bash + pip install -r requirements.txt + ``` + +1. Bây giờ, bạn đã sẵn sàng tạo thêm ba tệp để hoàn thành ứng dụng: + + 1. Tạo **app.py** trong thư mục gốc. + 2. Tạo **index.html** trong thư mục _templates_. + 3. Tạo **styles.css** trong thư mục _static/css_. + +1. Xây dựng tệp _styles.css_ với một vài kiểu: + + ```css + body { + width: 100%; + height: 100%; + font-family: 'Helvetica'; + background: black; + color: #fff; + text-align: center; + letter-spacing: 1.4px; + font-size: 30px; + } + + input { + min-width: 150px; + } + + .grid { + width: 300px; + border: 1px solid #2d2d2d; + display: grid; + justify-content: center; + margin: 20px auto; + } + + .box { + color: #fff; + background: #2d2d2d; + padding: 12px; + display: inline-block; + } + ``` + +1. Tiếp theo, xây dựng tệp _index.html_: + + ```html + + + + + 🛸 UFO Appearance Prediction! 👽 + + + + +
                                          + +
                                          + +

                                          According to the number of seconds, latitude and longitude, which country is likely to have reported seeing a UFO?

                                          + +
                                          + + + + +
                                          + +

                                          {{ prediction_text }}

                                          + +
                                          + +
                                          + + + + ``` + + Hãy xem cách tạo mẫu trong tệp này. Lưu ý cú pháp 'mustache' xung quanh các biến sẽ được cung cấp bởi ứng dụng, như văn bản dự đoán: `{{}}`. Có một biểu mẫu gửi dự đoán đến route `/predict`. + + Cuối cùng, bạn đã sẵn sàng xây dựng tệp Python điều khiển việc sử dụng mô hình và hiển thị các dự đoán: + +1. Trong `app.py` thêm: + + ```python + import numpy as np + from flask import Flask, request, render_template + import pickle + + app = Flask(__name__) + + model = pickle.load(open("./ufo-model.pkl", "rb")) + + + @app.route("/") + def home(): + return render_template("index.html") + + + @app.route("/predict", methods=["POST"]) + def predict(): + + int_features = [int(x) for x in request.form.values()] + final_features = [np.array(int_features)] + prediction = model.predict(final_features) + + output = prediction[0] + + countries = ["Australia", "Canada", "Germany", "UK", "US"] + + return render_template( + "index.html", prediction_text="Likely country: {}".format(countries[output]) + ) + + + if __name__ == "__main__": + app.run(debug=True) + ``` + + > 💡 Mẹo: khi bạn thêm [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) trong khi chạy ứng dụng web bằng Flask, bất kỳ thay đổi nào bạn thực hiện đối với ứng dụng của mình sẽ được phản ánh ngay lập tức mà không cần khởi động lại máy chủ. Lưu ý! Đừng bật chế độ này trong ứng dụng sản xuất. + +Nếu bạn chạy `python app.py` hoặc `python3 app.py` - máy chủ web của bạn sẽ khởi động, cục bộ, và bạn có thể điền vào một biểu mẫu ngắn để nhận câu trả lời cho câu hỏi của bạn về nơi UFO đã được nhìn thấy! + +Trước khi làm điều đó, hãy xem các phần của `app.py`: + +1. Đầu tiên, các phụ thuộc được tải và ứng dụng bắt đầu. +1. Sau đó, mô hình được import. +1. Sau đó, index.html được render trên route chính. + +Trên route `/predict`, một số điều xảy ra khi biểu mẫu được gửi: + +1. Các biến biểu mẫu được thu thập và chuyển đổi thành mảng numpy. Sau đó, chúng được gửi đến mô hình và một dự đoán được trả về. +2. Các quốc gia mà chúng ta muốn hiển thị được render lại dưới dạng văn bản dễ đọc từ mã quốc gia dự đoán, và giá trị đó được gửi lại index.html để render trong mẫu. + +Sử dụng mô hình theo cách này, với Flask và mô hình đã pickled, tương đối đơn giản. Điều khó nhất là hiểu dữ liệu cần gửi đến mô hình để nhận dự đoán có hình dạng như thế nào. Điều đó hoàn toàn phụ thuộc vào cách mô hình được huấn luyện. Mô hình này có ba điểm dữ liệu cần nhập để nhận dự đoán. + +Trong môi trường chuyên nghiệp, bạn có thể thấy rằng giao tiếp tốt là cần thiết giữa những người huấn luyện mô hình và những người sử dụng nó trong ứng dụng web hoặc di động. Trong trường hợp của chúng ta, chỉ có một người, chính bạn! + +--- + +## 🚀 Thử thách + +Thay vì làm việc trong notebook và import mô hình vào ứng dụng Flask, bạn có thể huấn luyện mô hình ngay trong ứng dụng Flask! Hãy thử chuyển đổi mã Python của bạn trong notebook, có thể sau khi dữ liệu của bạn được làm sạch, để huấn luyện mô hình từ trong ứng dụng trên một route gọi là `train`. Những ưu và nhược điểm của việc theo đuổi phương pháp này là gì? + +## [Quiz sau bài học](https://ff-quizzes.netlify.app/en/ml/) + +## Ôn tập & Tự học + +Có nhiều cách để xây dựng ứng dụng web sử dụng mô hình ML. Hãy lập danh sách các cách bạn có thể sử dụng JavaScript hoặc Python để xây dựng ứng dụng web tận dụng học máy. Xem xét kiến trúc: mô hình nên ở trong ứng dụng hay trên đám mây? Nếu là đám mây, bạn sẽ truy cập nó như thế nào? Vẽ ra một mô hình kiến trúc cho một giải pháp web ML ứng dụng. + +## Bài tập + +[Thử một mô hình khác](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 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 diff --git a/translations/vi/3-Web-App/1-Web-App/assignment.md b/translations/vi/3-Web-App/1-Web-App/assignment.md new file mode 100644 index 00000000..e6f03f1e --- /dev/null +++ b/translations/vi/3-Web-App/1-Web-App/assignment.md @@ -0,0 +1,25 @@ + +# Thử một mô hình khác + +## Hướng dẫn + +Bây giờ bạn đã xây dựng một ứng dụng web sử dụng mô hình Regression đã được huấn luyện, hãy sử dụng một trong các mô hình từ bài học Regression trước đó để làm lại ứng dụng web này. Bạn có thể giữ nguyên phong cách hoặc thiết kế lại để phù hợp với dữ liệu về bí ngô. Hãy cẩn thận thay đổi các đầu vào để phản ánh phương pháp huấn luyện của mô hình. + +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| -------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | -------------------------------------- | +| | Ứng dụng web chạy đúng như mong đợi và được triển khai lên đám mây | Ứng dụng web có lỗi hoặc cho kết quả không như mong đợi | Ứng dụng web không hoạt động đúng cách | + +--- + +**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 diff --git a/translations/vi/3-Web-App/README.md b/translations/vi/3-Web-App/README.md new file mode 100644 index 00000000..b68e08c3 --- /dev/null +++ b/translations/vi/3-Web-App/README.md @@ -0,0 +1,35 @@ + +# Xây dựng ứng dụng web để sử dụng mô hình ML của bạn + +Trong phần này của chương trình học, bạn sẽ được giới thiệu về một chủ đề ML ứng dụng: cách lưu mô hình Scikit-learn của bạn dưới dạng tệp để có thể sử dụng để dự đoán trong một ứng dụng web. Sau khi mô hình được lưu, bạn sẽ học cách sử dụng nó trong một ứng dụng web được xây dựng bằng Flask. Đầu tiên, bạn sẽ tạo một mô hình sử dụng một số dữ liệu liên quan đến các lần nhìn thấy UFO! Sau đó, bạn sẽ xây dựng một ứng dụng web cho phép bạn nhập số giây cùng với giá trị vĩ độ và kinh độ để dự đoán quốc gia nào đã báo cáo nhìn thấy UFO. + +![Bãi đỗ UFO](../../../3-Web-App/images/ufo.jpg) + +Ảnh của Michael Herren trên Unsplash + +## Bài học + +1. [Xây dựng ứng dụng web](1-Web-App/README.md) + +## Tín dụng + +"Xây dựng ứng dụng web" được viết với ♥️ bởi [Jen Looper](https://twitter.com/jenlooper). + +♥️ Các câu đố được viết bởi Rohan Raj. + +Bộ dữ liệu được lấy từ [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings). + +Kiến trúc ứng dụng web được gợi ý một phần bởi [bài viết này](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4) và [repo này](https://github.com/abhinavsagar/machine-learning-deployment) của Abhinav Sagar. + +--- + +**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 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. \ No newline at end of file diff --git a/translations/vi/4-Classification/1-Introduction/README.md b/translations/vi/4-Classification/1-Introduction/README.md new file mode 100644 index 00000000..f19d433b --- /dev/null +++ b/translations/vi/4-Classification/1-Introduction/README.md @@ -0,0 +1,313 @@ + +# Giới thiệu về phân loại + +Trong bốn bài học này, bạn sẽ khám phá một trọng tâm cơ bản của học máy cổ điển - _phân loại_. Chúng ta sẽ cùng tìm hiểu cách sử dụng các thuật toán phân loại khác nhau với một tập dữ liệu về các món ăn tuyệt vời của châu Á và Ấn Độ. Hy vọng bạn đã sẵn sàng để thưởng thức! + +![chỉ một chút thôi!](../../../../4-Classification/1-Introduction/images/pinch.png) + +> Hãy cùng tôn vinh các món ăn châu Á trong những bài học này! Hình ảnh bởi [Jen Looper](https://twitter.com/jenlooper) + +Phân loại là một hình thức [học có giám sát](https://wikipedia.org/wiki/Supervised_learning) có nhiều điểm tương đồng với các kỹ thuật hồi quy. Nếu học máy là về việc dự đoán giá trị hoặc tên của các đối tượng bằng cách sử dụng tập dữ liệu, thì phân loại thường chia thành hai nhóm: _phân loại nhị phân_ và _phân loại đa lớp_. + +[![Giới thiệu về phân loại](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "Giới thiệu về phân loại") + +> 🎥 Nhấp vào hình ảnh trên để xem video: John Guttag của MIT giới thiệu về phân loại + +Hãy nhớ: + +- **Hồi quy tuyến tính** giúp bạn dự đoán mối quan hệ giữa các biến và đưa ra dự đoán chính xác về vị trí mà một điểm dữ liệu mới sẽ nằm trong mối quan hệ với đường thẳng đó. Ví dụ, bạn có thể dự đoán _giá của một quả bí ngô vào tháng 9 so với tháng 12_. +- **Hồi quy logistic** giúp bạn khám phá "các danh mục nhị phân": ở mức giá này, _quả bí ngô này có màu cam hay không màu cam_? + +Phân loại sử dụng các thuật toán khác nhau để xác định các cách khác nhau nhằm gán nhãn hoặc lớp cho một điểm dữ liệu. Hãy cùng làm việc với dữ liệu về các món ăn này để xem liệu, bằng cách quan sát một nhóm nguyên liệu, chúng ta có thể xác định nguồn gốc của món ăn đó hay không. + +## [Câu hỏi trước bài học](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Bài học này có sẵn bằng R!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html) + +### Giới thiệu + +Phân loại là một trong những hoạt động cơ bản của nhà nghiên cứu học máy và nhà khoa học dữ liệu. Từ việc phân loại cơ bản một giá trị nhị phân ("email này có phải là spam hay không?"), đến phân loại hình ảnh phức tạp và phân đoạn bằng cách sử dụng thị giác máy tính, việc có thể phân loại dữ liệu thành các lớp và đặt câu hỏi về nó luôn hữu ích. + +Nói theo cách khoa học hơn, phương pháp phân loại của bạn tạo ra một mô hình dự đoán cho phép bạn ánh xạ mối quan hệ giữa các biến đầu vào và biến đầu ra. + +![phân loại nhị phân vs. đa lớp](../../../../4-Classification/1-Introduction/images/binary-multiclass.png) + +> Các vấn đề nhị phân và đa lớp mà các thuật toán phân loại cần xử lý. Đồ họa thông tin bởi [Jen Looper](https://twitter.com/jenlooper) + +Trước khi bắt đầu quá trình làm sạch dữ liệu, trực quan hóa nó và chuẩn bị cho các nhiệm vụ học máy của chúng ta, hãy tìm hiểu một chút về các cách khác nhau mà học máy có thể được sử dụng để phân loại dữ liệu. + +Xuất phát từ [thống kê](https://wikipedia.org/wiki/Statistical_classification), phân loại sử dụng học máy cổ điển dựa vào các đặc điểm như `smoker`, `weight`, và `age` để xác định _khả năng phát triển bệnh X_. Là một kỹ thuật học có giám sát tương tự như các bài tập hồi quy bạn đã thực hiện trước đó, dữ liệu của bạn được gán nhãn và các thuật toán học máy sử dụng các nhãn đó để phân loại và dự đoán các lớp (hoặc 'đặc điểm') của một tập dữ liệu và gán chúng vào một nhóm hoặc kết quả. + +✅ Hãy dành một chút thời gian để tưởng tượng một tập dữ liệu về các món ăn. Một mô hình phân loại đa lớp có thể trả lời những câu hỏi gì? Một mô hình phân loại nhị phân có thể trả lời những câu hỏi gì? Điều gì sẽ xảy ra nếu bạn muốn xác định liệu một món ăn cụ thể có khả năng sử dụng hạt cỏ cà ri hay không? Điều gì sẽ xảy ra nếu bạn muốn xem liệu, với một túi quà gồm hoa hồi, atisô, súp lơ và cải ngựa, bạn có thể tạo ra một món ăn Ấn Độ điển hình hay không? + +[![Giỏ bí ẩn điên rồ](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "Giỏ bí ẩn điên rồ") + +> 🎥 Nhấp vào hình ảnh trên để xem video. Toàn bộ ý tưởng của chương trình 'Chopped' là 'giỏ bí ẩn', nơi các đầu bếp phải tạo ra một món ăn từ một lựa chọn ngẫu nhiên các nguyên liệu. Chắc chắn một mô hình học máy sẽ giúp ích! + +## Xin chào 'bộ phân loại' + +Câu hỏi chúng ta muốn đặt ra với tập dữ liệu món ăn này thực sự là một câu hỏi **đa lớp**, vì chúng ta có nhiều món ăn quốc gia tiềm năng để làm việc. Với một nhóm nguyên liệu, lớp nào trong số nhiều lớp này sẽ phù hợp với dữ liệu? + +Scikit-learn cung cấp một số thuật toán khác nhau để phân loại dữ liệu, tùy thuộc vào loại vấn đề bạn muốn giải quyết. Trong hai bài học tiếp theo, bạn sẽ tìm hiểu về một số thuật toán này. + +## Bài tập - làm sạch và cân bằng dữ liệu của bạn + +Nhiệm vụ đầu tiên, trước khi bắt đầu dự án này, là làm sạch và **cân bằng** dữ liệu của bạn để có kết quả tốt hơn. Bắt đầu với tệp _notebook.ipynb_ trống trong thư mục gốc của thư mục này. + +Điều đầu tiên cần cài đặt là [imblearn](https://imbalanced-learn.org/stable/). Đây là một gói Scikit-learn sẽ cho phép bạn cân bằng dữ liệu tốt hơn (bạn sẽ tìm hiểu thêm về nhiệm vụ này trong một phút). + +1. Để cài đặt `imblearn`, chạy `pip install`, như sau: + + ```python + pip install imblearn + ``` + +1. Nhập các gói bạn cần để nhập dữ liệu và trực quan hóa nó, cũng như nhập `SMOTE` từ `imblearn`. + + ```python + import pandas as pd + import matplotlib.pyplot as plt + import matplotlib as mpl + import numpy as np + from imblearn.over_sampling import SMOTE + ``` + + Bây giờ bạn đã sẵn sàng để nhập dữ liệu tiếp theo. + +1. Nhiệm vụ tiếp theo sẽ là nhập dữ liệu: + + ```python + df = pd.read_csv('../data/cuisines.csv') + ``` + + Sử dụng `read_csv()` sẽ đọc nội dung của tệp csv _cusines.csv_ và đặt nó vào biến `df`. + +1. Kiểm tra hình dạng của dữ liệu: + + ```python + df.head() + ``` + + Năm hàng đầu tiên trông như thế này: + + ```output + | | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | + | --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- | + | 0 | 65 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 1 | 66 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 2 | 67 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 3 | 68 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 4 | 69 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + ``` + +1. Lấy thông tin về dữ liệu này bằng cách gọi `info()`: + + ```python + df.info() + ``` + + Kết quả của bạn giống như sau: + + ```output + + RangeIndex: 2448 entries, 0 to 2447 + Columns: 385 entries, Unnamed: 0 to zucchini + dtypes: int64(384), object(1) + memory usage: 7.2+ MB + ``` + +## Bài tập - tìm hiểu về các món ăn + +Bây giờ công việc bắt đầu trở nên thú vị hơn. Hãy khám phá sự phân bố dữ liệu theo từng món ăn. + +1. Vẽ dữ liệu dưới dạng biểu đồ thanh ngang bằng cách gọi `barh()`: + + ```python + df.cuisine.value_counts().plot.barh() + ``` + + ![phân bố dữ liệu món ăn](../../../../4-Classification/1-Introduction/images/cuisine-dist.png) + + Có một số lượng món ăn hữu hạn, nhưng sự phân bố dữ liệu không đồng đều. Bạn có thể sửa điều đó! Trước khi làm vậy, hãy khám phá thêm một chút. + +1. Tìm hiểu có bao nhiêu dữ liệu có sẵn cho mỗi món ăn và in ra: + + ```python + thai_df = df[(df.cuisine == "thai")] + japanese_df = df[(df.cuisine == "japanese")] + chinese_df = df[(df.cuisine == "chinese")] + indian_df = df[(df.cuisine == "indian")] + korean_df = df[(df.cuisine == "korean")] + + print(f'thai df: {thai_df.shape}') + print(f'japanese df: {japanese_df.shape}') + print(f'chinese df: {chinese_df.shape}') + print(f'indian df: {indian_df.shape}') + print(f'korean df: {korean_df.shape}') + ``` + + Kết quả trông như sau: + + ```output + thai df: (289, 385) + japanese df: (320, 385) + chinese df: (442, 385) + indian df: (598, 385) + korean df: (799, 385) + ``` + +## Khám phá nguyên liệu + +Bây giờ bạn có thể đi sâu hơn vào dữ liệu và tìm hiểu những nguyên liệu điển hình cho mỗi món ăn. Bạn nên loại bỏ dữ liệu lặp lại gây nhầm lẫn giữa các món ăn, vì vậy hãy tìm hiểu về vấn đề này. + +1. Tạo một hàm `create_ingredient()` trong Python để tạo một dataframe nguyên liệu. Hàm này sẽ bắt đầu bằng cách loại bỏ một cột không hữu ích và sắp xếp các nguyên liệu theo số lượng: + + ```python + def create_ingredient_df(df): + ingredient_df = df.T.drop(['cuisine','Unnamed: 0']).sum(axis=1).to_frame('value') + ingredient_df = ingredient_df[(ingredient_df.T != 0).any()] + ingredient_df = ingredient_df.sort_values(by='value', ascending=False, + inplace=False) + return ingredient_df + ``` + + Bây giờ bạn có thể sử dụng hàm đó để có ý tưởng về mười nguyên liệu phổ biến nhất theo từng món ăn. + +1. Gọi `create_ingredient()` và vẽ biểu đồ bằng cách gọi `barh()`: + + ```python + thai_ingredient_df = create_ingredient_df(thai_df) + thai_ingredient_df.head(10).plot.barh() + ``` + + ![thai](../../../../4-Classification/1-Introduction/images/thai.png) + +1. Làm tương tự với dữ liệu món ăn Nhật Bản: + + ```python + japanese_ingredient_df = create_ingredient_df(japanese_df) + japanese_ingredient_df.head(10).plot.barh() + ``` + + ![japanese](../../../../4-Classification/1-Introduction/images/japanese.png) + +1. Bây giờ với các nguyên liệu món ăn Trung Quốc: + + ```python + chinese_ingredient_df = create_ingredient_df(chinese_df) + chinese_ingredient_df.head(10).plot.barh() + ``` + + ![chinese](../../../../4-Classification/1-Introduction/images/chinese.png) + +1. Vẽ biểu đồ các nguyên liệu món ăn Ấn Độ: + + ```python + indian_ingredient_df = create_ingredient_df(indian_df) + indian_ingredient_df.head(10).plot.barh() + ``` + + ![indian](../../../../4-Classification/1-Introduction/images/indian.png) + +1. Cuối cùng, vẽ biểu đồ các nguyên liệu món ăn Hàn Quốc: + + ```python + korean_ingredient_df = create_ingredient_df(korean_df) + korean_ingredient_df.head(10).plot.barh() + ``` + + ![korean](../../../../4-Classification/1-Introduction/images/korean.png) + +1. Bây giờ, loại bỏ các nguyên liệu phổ biến nhất gây nhầm lẫn giữa các món ăn khác nhau bằng cách gọi `drop()`: + + Ai cũng yêu thích cơm, tỏi và gừng! + + ```python + feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) + labels_df = df.cuisine #.unique() + feature_df.head() + ``` + +## Cân bằng tập dữ liệu + +Bây giờ bạn đã làm sạch dữ liệu, hãy sử dụng [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "Kỹ thuật Tăng Cường Mẫu Thiểu Số Tổng Hợp" - để cân bằng nó. + +1. Gọi `fit_resample()`, chiến lược này tạo ra các mẫu mới bằng cách nội suy. + + ```python + oversample = SMOTE() + transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) + ``` + + Bằng cách cân bằng dữ liệu của bạn, bạn sẽ có kết quả tốt hơn khi phân loại nó. Hãy nghĩ về một phân loại nhị phân. Nếu phần lớn dữ liệu của bạn thuộc một lớp, một mô hình học máy sẽ dự đoán lớp đó thường xuyên hơn, chỉ vì có nhiều dữ liệu hơn cho nó. Cân bằng dữ liệu giúp loại bỏ sự mất cân bằng này. + +1. Bây giờ bạn có thể kiểm tra số lượng nhãn theo nguyên liệu: + + ```python + print(f'new label count: {transformed_label_df.value_counts()}') + print(f'old label count: {df.cuisine.value_counts()}') + ``` + + Kết quả của bạn trông như sau: + + ```output + new label count: korean 799 + chinese 799 + indian 799 + japanese 799 + thai 799 + Name: cuisine, dtype: int64 + old label count: korean 799 + indian 598 + chinese 442 + japanese 320 + thai 289 + Name: cuisine, dtype: int64 + ``` + + Dữ liệu đã được làm sạch, cân bằng và rất hấp dẫn! + +1. Bước cuối cùng là lưu dữ liệu đã cân bằng của bạn, bao gồm nhãn và đặc điểm, vào một dataframe mới có thể được xuất ra tệp: + + ```python + transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') + ``` + +1. Bạn có thể xem lại dữ liệu bằng cách sử dụng `transformed_df.head()` và `transformed_df.info()`. Lưu một bản sao của dữ liệu này để sử dụng trong các bài học sau: + + ```python + transformed_df.head() + transformed_df.info() + transformed_df.to_csv("../data/cleaned_cuisines.csv") + ``` + + Tệp CSV mới này hiện có thể được tìm thấy trong thư mục dữ liệu gốc. + +--- + +## 🚀Thử thách + +Chương trình học này chứa một số tập dữ liệu thú vị. Hãy tìm kiếm trong các thư mục `data` và xem liệu có tập dữ liệu nào phù hợp cho phân loại nhị phân hoặc đa lớp không? Bạn sẽ đặt câu hỏi gì với tập dữ liệu này? + +## [Câu hỏi sau bài học](https://ff-quizzes.netlify.app/en/ml/) + +## Ôn tập & Tự học + +Khám phá API của SMOTE. Những trường hợp sử dụng nào là tốt nhất cho nó? Những vấn đề nào nó giải quyết? + +## Bài tập + +[Khám phá các phương pháp phân loại](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 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 diff --git a/translations/vi/4-Classification/1-Introduction/assignment.md b/translations/vi/4-Classification/1-Introduction/assignment.md new file mode 100644 index 00000000..daaf08ed --- /dev/null +++ b/translations/vi/4-Classification/1-Introduction/assignment.md @@ -0,0 +1,25 @@ + +# Khám phá các phương pháp phân loại + +## Hướng dẫn + +Trong [tài liệu Scikit-learn](https://scikit-learn.org/stable/supervised_learning.html), bạn sẽ tìm thấy một danh sách lớn các cách để phân loại dữ liệu. Hãy thực hiện một cuộc săn tìm thông tin trong các tài liệu này: mục tiêu của bạn là tìm các phương pháp phân loại và ghép nối một tập dữ liệu trong chương trình học này, một câu hỏi bạn có thể đặt ra về nó, và một kỹ thuật phân loại. Tạo một bảng tính hoặc bảng trong tệp .doc và giải thích cách tập dữ liệu sẽ hoạt động với thuật toán phân loại. + +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| --------- | ----------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| | một tài liệu được trình bày với tổng quan về 5 thuật toán cùng với một kỹ thuật phân loại. Tổng quan được giải thích rõ ràng và chi tiết. | một tài liệu được trình bày với tổng quan về 3 thuật toán cùng với một kỹ thuật phân loại. Tổng quan được giải thích rõ ràng và chi tiết. | một tài liệu được trình bày với tổng quan ít hơn ba thuật toán cùng với một kỹ thuật phân loại và tổng quan không được giải thích rõ ràng hoặc chi tiết. | + +--- + +**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 về 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 diff --git a/translations/vi/4-Classification/1-Introduction/solution/Julia/README.md b/translations/vi/4-Classification/1-Introduction/solution/Julia/README.md new file mode 100644 index 00000000..6642af3c --- /dev/null +++ b/translations/vi/4-Classification/1-Introduction/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 diff --git a/translations/vi/4-Classification/2-Classifiers-1/README.md b/translations/vi/4-Classification/2-Classifiers-1/README.md new file mode 100644 index 00000000..8960b806 --- /dev/null +++ b/translations/vi/4-Classification/2-Classifiers-1/README.md @@ -0,0 +1,253 @@ + +# Bộ phân loại ẩm thực 1 + +Trong bài học này, bạn sẽ sử dụng tập dữ liệu mà bạn đã lưu từ bài học trước, chứa đầy dữ liệu cân bằng và sạch về các nền ẩm thực. + +Bạn sẽ sử dụng tập dữ liệu này với nhiều bộ phân loại khác nhau để _dự đoán một nền ẩm thực quốc gia dựa trên nhóm nguyên liệu_. Trong quá trình thực hiện, bạn sẽ tìm hiểu thêm về một số cách mà các thuật toán có thể được sử dụng cho các nhiệm vụ phân loại. + +## [Câu hỏi trước bài giảng](https://ff-quizzes.netlify.app/en/ml/) +# Chuẩn bị + +Giả sử bạn đã hoàn thành [Bài học 1](../1-Introduction/README.md), hãy đảm bảo rằng tệp _cleaned_cuisines.csv_ tồn tại trong thư mục gốc `/data` cho bốn bài học này. + +## Bài tập - dự đoán một nền ẩm thực quốc gia + +1. Làm việc trong thư mục _notebook.ipynb_ của bài học này, nhập tệp đó cùng với thư viện Pandas: + + ```python + import pandas as pd + cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv") + cuisines_df.head() + ``` + + Dữ liệu trông như thế này: + +| | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | +| --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- | +| 0 | 0 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 1 | 1 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 2 | 2 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 3 | 3 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 4 | 4 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + + +1. Bây giờ, nhập thêm một số thư viện: + + ```python + from sklearn.linear_model import LogisticRegression + from sklearn.model_selection import train_test_split, cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve + from sklearn.svm import SVC + import numpy as np + ``` + +1. Chia tọa độ X và y thành hai dataframe để huấn luyện. `cuisine` có thể là dataframe nhãn: + + ```python + cuisines_label_df = cuisines_df['cuisine'] + cuisines_label_df.head() + ``` + + Nó sẽ trông như thế này: + + ```output + 0 indian + 1 indian + 2 indian + 3 indian + 4 indian + Name: cuisine, dtype: object + ``` + +1. Loại bỏ cột `Unnamed: 0` và cột `cuisine` bằng cách gọi `drop()`. Lưu phần còn lại của dữ liệu làm các đặc trưng để huấn luyện: + + ```python + cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) + cuisines_feature_df.head() + ``` + + Các đặc trưng của bạn trông như thế này: + +| | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | artemisia | artichoke | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | +| ---: | -----: | -------: | ----: | ---------: | ----: | -----------: | ------: | -------: | --------: | --------: | ---: | ------: | ----------: | ---------: | ----------------------: | ---: | ---: | ---: | ----: | -----: | -------: | +| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | + +Bây giờ bạn đã sẵn sàng để huấn luyện mô hình của mình! + +## Chọn bộ phân loại + +Bây giờ dữ liệu của bạn đã sạch và sẵn sàng để huấn luyện, bạn cần quyết định thuật toán nào sẽ sử dụng cho công việc. + +Scikit-learn nhóm phân loại dưới Học có giám sát, và trong danh mục này, bạn sẽ tìm thấy nhiều cách để phân loại. [Sự đa dạng](https://scikit-learn.org/stable/supervised_learning.html) có thể khá choáng ngợp lúc ban đầu. Các phương pháp sau đây đều bao gồm các kỹ thuật phân loại: + +- Mô hình tuyến tính +- Máy vector hỗ trợ +- Gradient ngẫu nhiên +- Láng giềng gần nhất +- Quá trình Gaussian +- Cây quyết định +- Phương pháp tổng hợp (bộ phân loại bỏ phiếu) +- Thuật toán đa lớp và đa đầu ra (phân loại đa lớp và đa nhãn, phân loại đa lớp-đa đầu ra) + +> Bạn cũng có thể sử dụng [mạng nơ-ron để phân loại dữ liệu](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification), nhưng điều này nằm ngoài phạm vi của bài học này. + +### Nên chọn bộ phân loại nào? + +Vậy, bạn nên chọn bộ phân loại nào? Thường thì việc thử qua nhiều bộ phân loại và tìm kiếm kết quả tốt là một cách để kiểm tra. Scikit-learn cung cấp một [so sánh song song](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) trên một tập dữ liệu được tạo, so sánh KNeighbors, SVC hai cách, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB và QuadraticDiscrinationAnalysis, hiển thị kết quả dưới dạng hình ảnh: + +![so sánh các bộ phân loại](../../../../4-Classification/2-Classifiers-1/images/comparison.png) +> Các biểu đồ được tạo trên tài liệu của Scikit-learn + +> AutoML giải quyết vấn đề này một cách gọn gàng bằng cách chạy các so sánh này trên đám mây, cho phép bạn chọn thuật toán tốt nhất cho dữ liệu của mình. Thử tại [đây](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott) + +### Một cách tiếp cận tốt hơn + +Một cách tốt hơn thay vì đoán mò là làm theo các ý tưởng trong [ML Cheat sheet](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott) có thể tải xuống. Tại đây, chúng ta phát hiện rằng, đối với vấn đề phân loại đa lớp của chúng ta, chúng ta có một số lựa chọn: + +![cheatsheet cho các vấn đề đa lớp](../../../../4-Classification/2-Classifiers-1/images/cheatsheet.png) +> Một phần của Bảng Cheat Thuật toán của Microsoft, chi tiết các tùy chọn phân loại đa lớp + +✅ Tải xuống bảng cheat này, in ra và treo lên tường của bạn! + +### Lý luận + +Hãy xem liệu chúng ta có thể lý luận qua các cách tiếp cận khác nhau dựa trên các ràng buộc mà chúng ta có: + +- **Mạng nơ-ron quá nặng**. Với tập dữ liệu sạch nhưng tối thiểu của chúng ta, và thực tế là chúng ta đang chạy huấn luyện cục bộ qua notebook, mạng nơ-ron quá nặng cho nhiệm vụ này. +- **Không sử dụng bộ phân loại hai lớp**. Chúng ta không sử dụng bộ phân loại hai lớp, vì vậy loại bỏ phương pháp one-vs-all. +- **Cây quyết định hoặc hồi quy logistic có thể hoạt động**. Một cây quyết định có thể hoạt động, hoặc hồi quy logistic cho dữ liệu đa lớp. +- **Cây quyết định tăng cường đa lớp giải quyết vấn đề khác**. Cây quyết định tăng cường đa lớp phù hợp nhất cho các nhiệm vụ phi tham số, ví dụ như các nhiệm vụ được thiết kế để xây dựng xếp hạng, vì vậy nó không hữu ích cho chúng ta. + +### Sử dụng Scikit-learn + +Chúng ta sẽ sử dụng Scikit-learn để phân tích dữ liệu của mình. Tuy nhiên, có nhiều cách để sử dụng hồi quy logistic trong Scikit-learn. Hãy xem các [tham số cần truyền](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). + +Về cơ bản, có hai tham số quan trọng - `multi_class` và `solver` - mà chúng ta cần chỉ định khi yêu cầu Scikit-learn thực hiện hồi quy logistic. Giá trị `multi_class` áp dụng một hành vi nhất định. Giá trị của solver là thuật toán nào sẽ được sử dụng. Không phải tất cả các solver đều có thể kết hợp với tất cả các giá trị `multi_class`. + +Theo tài liệu, trong trường hợp đa lớp, thuật toán huấn luyện: + +- **Sử dụng phương pháp one-vs-rest (OvR)**, nếu tùy chọn `multi_class` được đặt là `ovr` +- **Sử dụng tổn thất cross-entropy**, nếu tùy chọn `multi_class` được đặt là `multinomial`. (Hiện tại tùy chọn `multinomial` chỉ được hỗ trợ bởi các solver ‘lbfgs’, ‘sag’, ‘saga’ và ‘newton-cg’.)" + +> 🎓 'Phương pháp' ở đây có thể là 'ovr' (one-vs-rest) hoặc 'multinomial'. Vì hồi quy logistic thực sự được thiết kế để hỗ trợ phân loại nhị phân, các phương pháp này cho phép nó xử lý tốt hơn các nhiệm vụ phân loại đa lớp. [nguồn](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/) + +> 🎓 'Solver' được định nghĩa là "thuật toán được sử dụng trong bài toán tối ưu hóa". [nguồn](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). + +Scikit-learn cung cấp bảng này để giải thích cách các solver xử lý các thách thức khác nhau do các cấu trúc dữ liệu khác nhau gây ra: + +![solvers](../../../../4-Classification/2-Classifiers-1/images/solvers.png) + +## Bài tập - chia dữ liệu + +Chúng ta có thể tập trung vào hồi quy logistic cho lần thử huấn luyện đầu tiên của mình vì bạn đã học về nó trong bài học trước. +Chia dữ liệu của bạn thành nhóm huấn luyện và kiểm tra bằng cách gọi `train_test_split()`: + +```python +X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) +``` + +## Bài tập - áp dụng hồi quy logistic + +Vì bạn đang sử dụng trường hợp đa lớp, bạn cần chọn _phương pháp_ nào để sử dụng và _solver_ nào để đặt. Sử dụng LogisticRegression với cài đặt đa lớp và solver **liblinear** để huấn luyện. + +1. Tạo một hồi quy logistic với multi_class được đặt là `ovr` và solver được đặt là `liblinear`: + + ```python + lr = LogisticRegression(multi_class='ovr',solver='liblinear') + model = lr.fit(X_train, np.ravel(y_train)) + + accuracy = model.score(X_test, y_test) + print ("Accuracy is {}".format(accuracy)) + ``` + + ✅ Thử một solver khác như `lbfgs`, thường được đặt làm mặc định. +> Lưu ý, sử dụng hàm Pandas [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html) để làm phẳng dữ liệu của bạn khi cần thiết. +Độ chính xác đạt trên **80%**! + +1. Bạn có thể xem mô hình này hoạt động bằng cách thử nghiệm một hàng dữ liệu (#50): + + ```python + print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}') + print(f'cuisine: {y_test.iloc[50]}') + ``` + + Kết quả được in ra: + + ```output + ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object') + cuisine: indian + ``` + + ✅ Thử một số hàng khác và kiểm tra kết quả + +1. Đào sâu hơn, bạn có thể kiểm tra độ chính xác của dự đoán này: + + ```python + test= X_test.iloc[50].values.reshape(-1, 1).T + proba = model.predict_proba(test) + classes = model.classes_ + resultdf = pd.DataFrame(data=proba, columns=classes) + + topPrediction = resultdf.T.sort_values(by=[0], ascending = [False]) + topPrediction.head() + ``` + + Kết quả được in ra - ẩm thực Ấn Độ là dự đoán tốt nhất, với xác suất cao: + + | | 0 | + | -------: | -------: | + | indian | 0.715851 | + | chinese | 0.229475 | + | japanese | 0.029763 | + | korean | 0.017277 | + | thai | 0.007634 | + + ✅ Bạn có thể giải thích tại sao mô hình khá chắc chắn đây là ẩm thực Ấn Độ không? + +1. Tìm hiểu chi tiết hơn bằng cách in báo cáo phân loại, như bạn đã làm trong bài học về hồi quy: + + ```python + y_pred = model.predict(X_test) + print(classification_report(y_test,y_pred)) + ``` + + | | precision | recall | f1-score | support | + | ------------ | --------- | ------ | -------- | ------- | + | chinese | 0.73 | 0.71 | 0.72 | 229 | + | indian | 0.91 | 0.93 | 0.92 | 254 | + | japanese | 0.70 | 0.75 | 0.72 | 220 | + | korean | 0.86 | 0.76 | 0.81 | 242 | + | thai | 0.79 | 0.85 | 0.82 | 254 | + | accuracy | 0.80 | 1199 | | | + | macro avg | 0.80 | 0.80 | 0.80 | 1199 | + | weighted avg | 0.80 | 0.80 | 0.80 | 1199 | + +## 🚀Thử thách + +Trong bài học này, bạn đã sử dụng dữ liệu đã được làm sạch để xây dựng một mô hình học máy có thể dự đoán ẩm thực quốc gia dựa trên một loạt các nguyên liệu. Dành thời gian để đọc qua các tùy chọn mà Scikit-learn cung cấp để phân loại dữ liệu. Đào sâu hơn vào khái niệm 'solver' để hiểu những gì diễn ra phía sau. + +## [Câu hỏi sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +## Ôn tập & Tự học + +Tìm hiểu thêm về toán học đằng sau hồi quy logistic trong [bài học này](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf) +## Bài tập + +[Khám phá các solver](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 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 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. \ No newline at end of file diff --git a/translations/vi/4-Classification/2-Classifiers-1/assignment.md b/translations/vi/4-Classification/2-Classifiers-1/assignment.md new file mode 100644 index 00000000..94511b68 --- /dev/null +++ b/translations/vi/4-Classification/2-Classifiers-1/assignment.md @@ -0,0 +1,23 @@ + +# Nghiên cứu các bộ giải +## Hướng dẫn + +Trong bài học này, bạn đã tìm hiểu về các bộ giải khác nhau kết hợp thuật toán với quy trình học máy để tạo ra một mô hình chính xác. Hãy xem qua các bộ giải được liệt kê trong bài học và chọn hai bộ giải. Bằng lời của bạn, hãy so sánh và đối chiếu hai bộ giải này. Chúng giải quyết loại vấn đề nào? Chúng hoạt động như thế nào với các cấu trúc dữ liệu khác nhau? Tại sao bạn lại chọn một bộ giải này thay vì bộ giải kia? +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| -------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------- | +| | Một tệp .doc được trình bày với hai đoạn văn, mỗi đoạn về một bộ giải, so sánh một cách sâu sắc. | Một tệp .doc được trình bày với chỉ một đoạn văn | Bài tập chưa hoàn thành | + +--- + +**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, nên 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 về 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 diff --git a/translations/vi/4-Classification/2-Classifiers-1/solution/Julia/README.md b/translations/vi/4-Classification/2-Classifiers-1/solution/Julia/README.md new file mode 100644 index 00000000..86c4d3ae --- /dev/null +++ b/translations/vi/4-Classification/2-Classifiers-1/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 diff --git a/translations/vi/4-Classification/3-Classifiers-2/README.md b/translations/vi/4-Classification/3-Classifiers-2/README.md new file mode 100644 index 00000000..ced4deb9 --- /dev/null +++ b/translations/vi/4-Classification/3-Classifiers-2/README.md @@ -0,0 +1,249 @@ + +# Bộ phân loại ẩm thực 2 + +Trong bài học phân loại thứ hai này, bạn sẽ khám phá thêm các cách để phân loại dữ liệu số. Bạn cũng sẽ tìm hiểu về hậu quả của việc chọn một bộ phân loại này thay vì bộ phân loại khác. + +## [Câu hỏi trước bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +### Điều kiện tiên quyết + +Chúng tôi giả định rằng bạn đã hoàn thành các bài học trước và có một tập dữ liệu đã được làm sạch trong thư mục `data` của bạn, được gọi là _cleaned_cuisines.csv_ trong thư mục gốc của bài học gồm 4 phần này. + +### Chuẩn bị + +Chúng tôi đã tải tệp _notebook.ipynb_ của bạn với tập dữ liệu đã được làm sạch và đã chia nó thành các dataframe X và y, sẵn sàng cho quá trình xây dựng mô hình. + +## Bản đồ phân loại + +Trước đây, bạn đã tìm hiểu về các tùy chọn khác nhau khi phân loại dữ liệu bằng bảng cheat sheet của Microsoft. Scikit-learn cung cấp một bảng cheat sheet tương tự nhưng chi tiết hơn, giúp bạn thu hẹp các bộ ước lượng (một thuật ngữ khác cho bộ phân loại): + +![Bản đồ ML từ Scikit-learn](../../../../4-Classification/3-Classifiers-2/images/map.png) +> Mẹo: [truy cập bản đồ này trực tuyến](https://scikit-learn.org/stable/tutorial/machine_learning_map/) và nhấp vào các đường dẫn để đọc tài liệu. + +### Kế hoạch + +Bản đồ này rất hữu ích khi bạn đã hiểu rõ về dữ liệu của mình, vì bạn có thể 'đi bộ' dọc theo các đường dẫn để đưa ra quyết định: + +- Chúng ta có >50 mẫu +- Chúng ta muốn dự đoán một danh mục +- Chúng ta có dữ liệu được gắn nhãn +- Chúng ta có ít hơn 100K mẫu +- ✨ Chúng ta có thể chọn Linear SVC +- Nếu điều đó không hiệu quả, vì chúng ta có dữ liệu số + - Chúng ta có thể thử ✨ KNeighbors Classifier + - Nếu điều đó không hiệu quả, thử ✨ SVC và ✨ Ensemble Classifiers + +Đây là một lộ trình rất hữu ích để làm theo. + +## Bài tập - chia dữ liệu + +Theo lộ trình này, chúng ta nên bắt đầu bằng cách nhập một số thư viện cần thiết. + +1. Nhập các thư viện cần thiết: + + ```python + from sklearn.neighbors import KNeighborsClassifier + from sklearn.linear_model import LogisticRegression + from sklearn.svm import SVC + from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier + from sklearn.model_selection import train_test_split, cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve + import numpy as np + ``` + +1. Chia dữ liệu huấn luyện và kiểm tra: + + ```python + X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) + ``` + +## Bộ phân loại Linear SVC + +Support-Vector clustering (SVC) là một nhánh của gia đình các kỹ thuật máy học Support-Vector machines (tìm hiểu thêm về chúng bên dưới). Trong phương pháp này, bạn có thể chọn một 'kernel' để quyết định cách phân cụm các nhãn. Tham số 'C' đề cập đến 'regularization', điều chỉnh ảnh hưởng của các tham số. Kernel có thể là một trong [nhiều loại](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC); ở đây chúng ta đặt nó là 'linear' để đảm bảo rằng chúng ta sử dụng Linear SVC. Xác suất mặc định là 'false'; ở đây chúng ta đặt nó là 'true' để thu thập các ước tính xác suất. Chúng ta đặt random state là '0' để xáo trộn dữ liệu nhằm thu được xác suất. + +### Bài tập - áp dụng Linear SVC + +Bắt đầu bằng cách tạo một mảng các bộ phân loại. Bạn sẽ thêm dần vào mảng này khi chúng ta thử nghiệm. + +1. Bắt đầu với Linear SVC: + + ```python + C = 10 + # Create different classifiers. + classifiers = { + 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) + } + ``` + +2. Huấn luyện mô hình của bạn bằng Linear SVC và in ra báo cáo: + + ```python + n_classifiers = len(classifiers) + + for index, (name, classifier) in enumerate(classifiers.items()): + classifier.fit(X_train, np.ravel(y_train)) + + y_pred = classifier.predict(X_test) + accuracy = accuracy_score(y_test, y_pred) + print("Accuracy (train) for %s: %0.1f%% " % (name, accuracy * 100)) + print(classification_report(y_test,y_pred)) + ``` + + Kết quả khá tốt: + + ```output + Accuracy (train) for Linear SVC: 78.6% + precision recall f1-score support + + chinese 0.71 0.67 0.69 242 + indian 0.88 0.86 0.87 234 + japanese 0.79 0.74 0.76 254 + korean 0.85 0.81 0.83 242 + thai 0.71 0.86 0.78 227 + + accuracy 0.79 1199 + macro avg 0.79 0.79 0.79 1199 + weighted avg 0.79 0.79 0.79 1199 + ``` + +## Bộ phân loại K-Neighbors + +K-Neighbors là một phần của gia đình các phương pháp máy học "neighbors", có thể được sử dụng cho cả học có giám sát và không giám sát. Trong phương pháp này, một số điểm được xác định trước và dữ liệu được thu thập xung quanh các điểm này để dự đoán các nhãn tổng quát cho dữ liệu. + +### Bài tập - áp dụng bộ phân loại K-Neighbors + +Bộ phân loại trước đó khá tốt và hoạt động tốt với dữ liệu, nhưng có thể chúng ta có thể đạt được độ chính xác tốt hơn. Thử bộ phân loại K-Neighbors. + +1. Thêm một dòng vào mảng bộ phân loại của bạn (thêm dấu phẩy sau mục Linear SVC): + + ```python + 'KNN classifier': KNeighborsClassifier(C), + ``` + + Kết quả hơi kém hơn: + + ```output + Accuracy (train) for KNN classifier: 73.8% + precision recall f1-score support + + chinese 0.64 0.67 0.66 242 + indian 0.86 0.78 0.82 234 + japanese 0.66 0.83 0.74 254 + korean 0.94 0.58 0.72 242 + thai 0.71 0.82 0.76 227 + + accuracy 0.74 1199 + macro avg 0.76 0.74 0.74 1199 + weighted avg 0.76 0.74 0.74 1199 + ``` + + ✅ Tìm hiểu về [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) + +## Bộ phân loại Support Vector + +Bộ phân loại Support-Vector là một phần của gia đình [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine) các phương pháp máy học được sử dụng cho các nhiệm vụ phân loại và hồi quy. SVMs "ánh xạ các ví dụ huấn luyện thành các điểm trong không gian" để tối đa hóa khoảng cách giữa hai danh mục. Dữ liệu tiếp theo được ánh xạ vào không gian này để dự đoán danh mục của chúng. + +### Bài tập - áp dụng bộ phân loại Support Vector + +Hãy thử đạt độ chính xác tốt hơn một chút với bộ phân loại Support Vector. + +1. Thêm dấu phẩy sau mục K-Neighbors, sau đó thêm dòng này: + + ```python + 'SVC': SVC(), + ``` + + Kết quả khá tốt! + + ```output + Accuracy (train) for SVC: 83.2% + precision recall f1-score support + + chinese 0.79 0.74 0.76 242 + indian 0.88 0.90 0.89 234 + japanese 0.87 0.81 0.84 254 + korean 0.91 0.82 0.86 242 + thai 0.74 0.90 0.81 227 + + accuracy 0.83 1199 + macro avg 0.84 0.83 0.83 1199 + weighted avg 0.84 0.83 0.83 1199 + ``` + + ✅ Tìm hiểu về [Support-Vectors](https://scikit-learn.org/stable/modules/svm.html#svm) + +## Bộ phân loại Ensemble + +Hãy đi theo lộ trình đến cuối cùng, mặc dù thử nghiệm trước đó khá tốt. Hãy thử một số bộ phân loại 'Ensemble', cụ thể là Random Forest và AdaBoost: + +```python + 'RFST': RandomForestClassifier(n_estimators=100), + 'ADA': AdaBoostClassifier(n_estimators=100) +``` + +Kết quả rất tốt, đặc biệt là với Random Forest: + +```output +Accuracy (train) for RFST: 84.5% + precision recall f1-score support + + chinese 0.80 0.77 0.78 242 + indian 0.89 0.92 0.90 234 + japanese 0.86 0.84 0.85 254 + korean 0.88 0.83 0.85 242 + thai 0.80 0.87 0.83 227 + + accuracy 0.84 1199 + macro avg 0.85 0.85 0.84 1199 +weighted avg 0.85 0.84 0.84 1199 + +Accuracy (train) for ADA: 72.4% + precision recall f1-score support + + chinese 0.64 0.49 0.56 242 + indian 0.91 0.83 0.87 234 + japanese 0.68 0.69 0.69 254 + korean 0.73 0.79 0.76 242 + thai 0.67 0.83 0.74 227 + + accuracy 0.72 1199 + macro avg 0.73 0.73 0.72 1199 +weighted avg 0.73 0.72 0.72 1199 +``` + +✅ Tìm hiểu về [Ensemble Classifiers](https://scikit-learn.org/stable/modules/ensemble.html) + +Phương pháp máy học này "kết hợp các dự đoán của một số bộ ước lượng cơ bản" để cải thiện chất lượng mô hình. Trong ví dụ của chúng ta, chúng ta đã sử dụng Random Trees và AdaBoost. + +- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), một phương pháp trung bình, xây dựng một 'rừng' các 'cây quyết định' được thêm ngẫu nhiên để tránh overfitting. Tham số n_estimators được đặt là số lượng cây. + +- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) khớp một bộ phân loại với tập dữ liệu và sau đó khớp các bản sao của bộ phân loại đó với cùng tập dữ liệu. Nó tập trung vào trọng số của các mục được phân loại sai và điều chỉnh khớp cho bộ phân loại tiếp theo để sửa lỗi. + +--- + +## 🚀Thử thách + +Mỗi kỹ thuật này có một số lượng lớn các tham số mà bạn có thể điều chỉnh. Nghiên cứu các tham số mặc định của từng kỹ thuật và suy nghĩ về ý nghĩa của việc điều chỉnh các tham số này đối với chất lượng mô hình. + +## [Câu hỏi sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +## Ôn tập & Tự học + +Có rất nhiều thuật ngữ chuyên ngành trong các bài học này, vì vậy hãy dành một chút thời gian để xem lại [danh sách này](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) các thuật ngữ hữu ích! + +## Bài tập + +[Chơi với tham số](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 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 diff --git a/translations/vi/4-Classification/3-Classifiers-2/assignment.md b/translations/vi/4-Classification/3-Classifiers-2/assignment.md new file mode 100644 index 00000000..c5e03165 --- /dev/null +++ b/translations/vi/4-Classification/3-Classifiers-2/assignment.md @@ -0,0 +1,25 @@ + +# Chơi với Tham số + +## Hướng dẫn + +Có rất nhiều tham số được thiết lập mặc định khi làm việc với các bộ phân loại này. Intellisense trong VS Code có thể giúp bạn tìm hiểu chúng. Áp dụng một trong các kỹ thuật phân loại ML trong bài học này và huấn luyện lại các mô hình bằng cách điều chỉnh các giá trị tham số khác nhau. Xây dựng một notebook giải thích tại sao một số thay đổi cải thiện chất lượng mô hình trong khi những thay đổi khác làm giảm chất lượng. Hãy trả lời một cách chi tiết. + +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| -------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | ----------------------------- | +| | Một notebook được trình bày với một bộ phân loại được xây dựng hoàn chỉnh và các tham số được điều chỉnh, các thay đổi được giải thích trong các hộp văn bản | Một notebook được trình bày một phần hoặc giải thích chưa rõ ràng | Một notebook có lỗi hoặc không hoàn chỉnh | + +--- + +**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, nên 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 diff --git a/translations/vi/4-Classification/3-Classifiers-2/solution/Julia/README.md b/translations/vi/4-Classification/3-Classifiers-2/solution/Julia/README.md new file mode 100644 index 00000000..4916dcc8 --- /dev/null +++ b/translations/vi/4-Classification/3-Classifiers-2/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 diff --git a/translations/vi/4-Classification/4-Applied/README.md b/translations/vi/4-Classification/4-Applied/README.md new file mode 100644 index 00000000..28b39e1a --- /dev/null +++ b/translations/vi/4-Classification/4-Applied/README.md @@ -0,0 +1,329 @@ + +# Xây dựng ứng dụng web gợi ý món ăn + +Trong bài học này, bạn sẽ xây dựng một mô hình phân loại bằng cách sử dụng một số kỹ thuật đã học trong các bài trước và với bộ dữ liệu món ăn ngon được sử dụng xuyên suốt loạt bài này. Ngoài ra, bạn sẽ xây dựng một ứng dụng web nhỏ để sử dụng mô hình đã lưu, tận dụng runtime web của Onnx. + +Một trong những ứng dụng thực tiễn hữu ích nhất của học máy là xây dựng hệ thống gợi ý, và hôm nay bạn có thể bắt đầu bước đầu tiên trong hướng đi này! + +[![Trình bày ứng dụng web này](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "Applied ML") + +> 🎥 Nhấn vào hình ảnh trên để xem video: Jen Looper xây dựng một ứng dụng web sử dụng dữ liệu món ăn đã phân loại + +## [Câu hỏi trước bài học](https://ff-quizzes.netlify.app/en/ml/) + +Trong bài học này, bạn sẽ học: + +- Cách xây dựng mô hình và lưu nó dưới dạng mô hình Onnx +- Cách sử dụng Netron để kiểm tra mô hình +- Cách sử dụng mô hình của bạn trong ứng dụng web để suy luận + +## Xây dựng mô hình của bạn + +Xây dựng hệ thống học máy ứng dụng là một phần quan trọng trong việc tận dụng các công nghệ này cho hệ thống kinh doanh của bạn. Bạn có thể sử dụng các mô hình trong ứng dụng web của mình (và do đó sử dụng chúng trong ngữ cảnh offline nếu cần) bằng cách sử dụng Onnx. + +Trong một [bài học trước](../../3-Web-App/1-Web-App/README.md), bạn đã xây dựng một mô hình hồi quy về các lần nhìn thấy UFO, "pickled" nó, và sử dụng nó trong một ứng dụng Flask. Mặc dù kiến trúc này rất hữu ích để biết, nhưng nó là một ứng dụng Python full-stack, và yêu cầu của bạn có thể bao gồm việc sử dụng một ứng dụng JavaScript. + +Trong bài học này, bạn có thể xây dựng một hệ thống cơ bản dựa trên JavaScript để suy luận. Tuy nhiên, trước tiên bạn cần huấn luyện một mô hình và chuyển đổi nó để sử dụng với Onnx. + +## Bài tập - huấn luyện mô hình phân loại + +Đầu tiên, huấn luyện một mô hình phân loại bằng cách sử dụng bộ dữ liệu món ăn đã được làm sạch mà chúng ta đã sử dụng. + +1. Bắt đầu bằng cách nhập các thư viện hữu ích: + + ```python + !pip install skl2onnx + import pandas as pd + ``` + + Bạn cần '[skl2onnx](https://onnx.ai/sklearn-onnx/)' để giúp chuyển đổi mô hình Scikit-learn của bạn sang định dạng Onnx. + +1. Sau đó, làm việc với dữ liệu của bạn theo cách bạn đã làm trong các bài học trước, bằng cách đọc tệp CSV sử dụng `read_csv()`: + + ```python + data = pd.read_csv('../data/cleaned_cuisines.csv') + data.head() + ``` + +1. Loại bỏ hai cột không cần thiết đầu tiên và lưu dữ liệu còn lại dưới dạng 'X': + + ```python + X = data.iloc[:,2:] + X.head() + ``` + +1. Lưu các nhãn dưới dạng 'y': + + ```python + y = data[['cuisine']] + y.head() + + ``` + +### Bắt đầu quy trình huấn luyện + +Chúng ta sẽ sử dụng thư viện 'SVC' với độ chính xác tốt. + +1. Nhập các thư viện phù hợp từ Scikit-learn: + + ```python + from sklearn.model_selection import train_test_split + from sklearn.svm import SVC + from sklearn.model_selection import cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report + ``` + +1. Tách tập huấn luyện và tập kiểm tra: + + ```python + X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3) + ``` + +1. Xây dựng mô hình phân loại SVC như bạn đã làm trong bài học trước: + + ```python + model = SVC(kernel='linear', C=10, probability=True,random_state=0) + model.fit(X_train,y_train.values.ravel()) + ``` + +1. Bây giờ, kiểm tra mô hình của bạn bằng cách gọi `predict()`: + + ```python + y_pred = model.predict(X_test) + ``` + +1. In báo cáo phân loại để kiểm tra chất lượng mô hình: + + ```python + print(classification_report(y_test,y_pred)) + ``` + + Như chúng ta đã thấy trước đó, độ chính xác là tốt: + + ```output + precision recall f1-score support + + chinese 0.72 0.69 0.70 257 + indian 0.91 0.87 0.89 243 + japanese 0.79 0.77 0.78 239 + korean 0.83 0.79 0.81 236 + thai 0.72 0.84 0.78 224 + + accuracy 0.79 1199 + macro avg 0.79 0.79 0.79 1199 + weighted avg 0.79 0.79 0.79 1199 + ``` + +### Chuyển đổi mô hình của bạn sang Onnx + +Đảm bảo thực hiện chuyển đổi với số Tensor phù hợp. Bộ dữ liệu này có 380 nguyên liệu được liệt kê, vì vậy bạn cần ghi chú số đó trong `FloatTensorType`: + +1. Chuyển đổi sử dụng số tensor là 380. + + ```python + from skl2onnx import convert_sklearn + from skl2onnx.common.data_types import FloatTensorType + + initial_type = [('float_input', FloatTensorType([None, 380]))] + options = {id(model): {'nocl': True, 'zipmap': False}} + ``` + +1. Tạo tệp onx và lưu dưới dạng tệp **model.onnx**: + + ```python + onx = convert_sklearn(model, initial_types=initial_type, options=options) + with open("./model.onnx", "wb") as f: + f.write(onx.SerializeToString()) + ``` + + > Lưu ý, bạn có thể truyền vào [tùy chọn](https://onnx.ai/sklearn-onnx/parameterized.html) trong script chuyển đổi của mình. Trong trường hợp này, chúng ta đã truyền vào 'nocl' là True và 'zipmap' là False. Vì đây là mô hình phân loại, bạn có tùy chọn loại bỏ ZipMap, thứ tạo ra danh sách các từ điển (không cần thiết). `nocl` đề cập đến thông tin lớp được bao gồm trong mô hình. Giảm kích thước mô hình của bạn bằng cách đặt `nocl` là 'True'. + +Chạy toàn bộ notebook bây giờ sẽ xây dựng một mô hình Onnx và lưu nó vào thư mục này. + +## Xem mô hình của bạn + +Các mô hình Onnx không hiển thị rõ ràng trong Visual Studio Code, nhưng có một phần mềm miễn phí rất tốt mà nhiều nhà nghiên cứu sử dụng để trực quan hóa mô hình nhằm đảm bảo rằng nó được xây dựng đúng cách. Tải xuống [Netron](https://github.com/lutzroeder/Netron) và mở tệp model.onnx của bạn. Bạn có thể thấy mô hình đơn giản của mình được trực quan hóa, với 380 đầu vào và bộ phân loại được liệt kê: + +![Netron visual](../../../../4-Classification/4-Applied/images/netron.png) + +Netron là một công cụ hữu ích để xem các mô hình của bạn. + +Bây giờ bạn đã sẵn sàng sử dụng mô hình thú vị này trong một ứng dụng web. Hãy xây dựng một ứng dụng sẽ hữu ích khi bạn nhìn vào tủ lạnh của mình và cố gắng tìm ra sự kết hợp của các nguyên liệu còn lại mà bạn có thể sử dụng để nấu một món ăn cụ thể, như được xác định bởi mô hình của bạn. + +## Xây dựng ứng dụng web gợi ý + +Bạn có thể sử dụng mô hình của mình trực tiếp trong một ứng dụng web. Kiến trúc này cũng cho phép bạn chạy nó cục bộ và thậm chí offline nếu cần. Bắt đầu bằng cách tạo tệp `index.html` trong cùng thư mục nơi bạn lưu tệp `model.onnx`. + +1. Trong tệp này _index.html_, thêm đoạn mã sau: + + ```html + + +
                                          + Cuisine Matcher +
                                          + + ... + + + ``` + +1. Bây giờ, làm việc trong thẻ `body`, thêm một chút mã để hiển thị danh sách các hộp kiểm phản ánh một số nguyên liệu: + + ```html +

                                          Check your refrigerator. What can you create?

                                          +
                                          +
                                          + + +
                                          + +
                                          + + +
                                          + +
                                          + + +
                                          + +
                                          + + +
                                          + +
                                          + + +
                                          + +
                                          + + +
                                          + +
                                          + + +
                                          +
                                          +
                                          + +
                                          + ``` + + Lưu ý rằng mỗi hộp kiểm được gán một giá trị. Giá trị này phản ánh chỉ số nơi nguyên liệu được tìm thấy theo bộ dữ liệu. Ví dụ, táo trong danh sách theo thứ tự bảng chữ cái này chiếm cột thứ năm, vì vậy giá trị của nó là '4' vì chúng ta bắt đầu đếm từ 0. Bạn có thể tham khảo [bảng nguyên liệu](../../../../4-Classification/data/ingredient_indexes.csv) để tìm chỉ số của một nguyên liệu cụ thể. + + Tiếp tục làm việc trong tệp index.html, thêm một khối script nơi mô hình được gọi sau thẻ đóng `` cuối cùng. + +1. Đầu tiên, nhập [Onnx Runtime](https://www.onnxruntime.ai/): + + ```html + + ``` + + > Onnx Runtime được sử dụng để cho phép chạy các mô hình Onnx của bạn trên nhiều nền tảng phần cứng, bao gồm các tối ưu hóa và một API để sử dụng. + +1. Khi Runtime đã được thiết lập, bạn có thể gọi nó: + + ```html + + ``` + +Trong đoạn mã này, có một số điều đang diễn ra: + +1. Bạn đã tạo một mảng gồm 380 giá trị có thể (1 hoặc 0) để được thiết lập và gửi đến mô hình để suy luận, tùy thuộc vào việc hộp kiểm nguyên liệu có được chọn hay không. +2. Bạn đã tạo một mảng các hộp kiểm và một cách để xác định liệu chúng có được chọn hay không trong hàm `init` được gọi khi ứng dụng bắt đầu. Khi một hộp kiểm được chọn, mảng `ingredients` được thay đổi để phản ánh nguyên liệu đã chọn. +3. Bạn đã tạo một hàm `testCheckboxes` để kiểm tra liệu có hộp kiểm nào được chọn hay không. +4. Bạn sử dụng hàm `startInference` khi nút được nhấn và, nếu có hộp kiểm nào được chọn, bạn bắt đầu suy luận. +5. Quy trình suy luận bao gồm: + 1. Thiết lập tải không đồng bộ của mô hình + 2. Tạo cấu trúc Tensor để gửi đến mô hình + 3. Tạo 'feeds' phản ánh đầu vào `float_input` mà bạn đã tạo khi huấn luyện mô hình của mình (bạn có thể sử dụng Netron để xác minh tên đó) + 4. Gửi các 'feeds' này đến mô hình và chờ phản hồi + +## Kiểm tra ứng dụng của bạn + +Mở một phiên terminal trong Visual Studio Code trong thư mục nơi tệp index.html của bạn nằm. Đảm bảo rằng bạn đã cài đặt [http-server](https://www.npmjs.com/package/http-server) toàn cầu, và gõ `http-server` tại dấu nhắc. Một localhost sẽ mở ra và bạn có thể xem ứng dụng web của mình. Kiểm tra món ăn nào được gợi ý dựa trên các nguyên liệu khác nhau: + +![ứng dụng web nguyên liệu](../../../../4-Classification/4-Applied/images/web-app.png) + +Chúc mừng, bạn đã tạo một ứng dụng web 'gợi ý' với một vài trường. Hãy dành thời gian để xây dựng hệ thống này! + +## 🚀Thử thách + +Ứng dụng web của bạn rất đơn giản, vì vậy hãy tiếp tục xây dựng nó bằng cách sử dụng các nguyên liệu và chỉ số của chúng từ dữ liệu [ingredient_indexes](../../../../4-Classification/data/ingredient_indexes.csv). Những sự kết hợp hương vị nào hoạt động để tạo ra một món ăn quốc gia cụ thể? + +## [Câu hỏi sau bài học](https://ff-quizzes.netlify.app/en/ml/) + +## Ôn tập & Tự học + +Mặc dù bài học này chỉ đề cập đến tiện ích của việc tạo hệ thống gợi ý cho các nguyên liệu món ăn, lĩnh vực ứng dụng ML này rất phong phú với các ví dụ. Đọc thêm về cách các hệ thống này được xây dựng: + +- https://www.sciencedirect.com/topics/computer-science/recommendation-engine +- https://www.technologyreview.com/2014/08/25/171547/the-ultimate-challenge-for-recommendation-engines/ +- https://www.technologyreview.com/2015/03/23/168831/everything-is-a-recommendation/ + +## Bài tập + +[Hãy xây dựng một hệ thống gợi ý mới](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 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 diff --git a/translations/vi/4-Classification/4-Applied/assignment.md b/translations/vi/4-Classification/4-Applied/assignment.md new file mode 100644 index 00000000..0b30c8fa --- /dev/null +++ b/translations/vi/4-Classification/4-Applied/assignment.md @@ -0,0 +1,25 @@ + +# Xây dựng hệ thống gợi ý + +## Hướng dẫn + +Dựa trên các bài tập trong bài học này, bạn đã biết cách xây dựng ứng dụng web dựa trên JavaScript sử dụng Onnx Runtime và mô hình Onnx đã được chuyển đổi. Hãy thử nghiệm xây dựng một hệ thống gợi ý mới sử dụng dữ liệu từ các bài học này hoặc từ nguồn khác (hãy ghi nguồn, nếu có). Bạn có thể tạo một hệ thống gợi ý thú cưng dựa trên các đặc điểm tính cách, hoặc hệ thống gợi ý thể loại âm nhạc dựa trên tâm trạng của một người. Hãy sáng tạo! + +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| -------- | ----------------------------------------------------------------------- | ------------------------------------ | --------------------------------- | +| | Một ứng dụng web và notebook được trình bày, cả hai đều được tài liệu hóa tốt và hoạt động | Một trong hai bị thiếu hoặc có lỗi | Cả hai đều bị thiếu hoặc có lỗi | + +--- + +**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 diff --git a/translations/vi/4-Classification/README.md b/translations/vi/4-Classification/README.md new file mode 100644 index 00000000..5cfd8940 --- /dev/null +++ b/translations/vi/4-Classification/README.md @@ -0,0 +1,41 @@ + +# Bắt đầu với phân loại + +## Chủ đề khu vực: Các món ăn ngon của châu Á và Ấn Độ 🍜 + +Ở châu Á và Ấn Độ, truyền thống ẩm thực vô cùng đa dạng và rất ngon miệng! Hãy cùng xem dữ liệu về các món ăn khu vực để hiểu rõ hơn về các thành phần của chúng. + +![Người bán đồ ăn Thái](../../../4-Classification/images/thai-food.jpg) +> Ảnh của Lisheng Chang trên Unsplash + +## Những gì bạn sẽ học + +Trong phần này, bạn sẽ tiếp tục nghiên cứu về Hồi quy và tìm hiểu về các bộ phân loại khác mà bạn có thể sử dụng để hiểu rõ hơn về dữ liệu. + +> Có những công cụ low-code hữu ích có thể giúp bạn học cách làm việc với các mô hình phân loại. Hãy thử [Azure ML cho nhiệm vụ này](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +## Các bài học + +1. [Giới thiệu về phân loại](1-Introduction/README.md) +2. [Các bộ phân loại khác](2-Classifiers-1/README.md) +3. [Thêm các bộ phân loại khác nữa](3-Classifiers-2/README.md) +4. [ML ứng dụng: xây dựng ứng dụng web](4-Applied/README.md) + +## Tín dụng + +"Bắt đầu với phân loại" được viết với ♥️ bởi [Cassie Breviu](https://www.twitter.com/cassiebreviu) và [Jen Looper](https://www.twitter.com/jenlooper) + +Bộ dữ liệu về các món ăn ngon được lấy từ [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines). + +--- + +**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 diff --git a/translations/vi/5-Clustering/1-Visualize/README.md b/translations/vi/5-Clustering/1-Visualize/README.md new file mode 100644 index 00000000..7f6318b9 --- /dev/null +++ b/translations/vi/5-Clustering/1-Visualize/README.md @@ -0,0 +1,347 @@ + +# Giới thiệu về phân cụm + +Phân cụm là một loại [Học không giám sát](https://wikipedia.org/wiki/Unsupervised_learning) giả định rằng một tập dữ liệu không được gắn nhãn hoặc các đầu vào của nó không được liên kết với các đầu ra được định nghĩa trước. Nó sử dụng các thuật toán khác nhau để phân loại dữ liệu không gắn nhãn và cung cấp các nhóm dựa trên các mẫu mà nó nhận ra trong dữ liệu. + +[![No One Like You by PSquare](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](https://youtu.be/ty2advRiWJM "No One Like You by PSquare") + +> 🎥 Nhấp vào hình ảnh trên để xem video. Trong khi bạn đang học máy với phân cụm, hãy thưởng thức một số bài hát Dance Hall của Nigeria - đây là một bài hát được đánh giá cao từ năm 2014 của PSquare. + +## [Câu hỏi trước bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +### Giới thiệu + +[Phân cụm](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) rất hữu ích cho việc khám phá dữ liệu. Hãy xem liệu nó có thể giúp khám phá xu hướng và mẫu trong cách khán giả Nigeria tiêu thụ âm nhạc. + +✅ Dành một phút để suy nghĩ về các ứng dụng của phân cụm. Trong đời sống thực, phân cụm xảy ra bất cứ khi nào bạn có một đống quần áo và cần phân loại quần áo của các thành viên trong gia đình 🧦👕👖🩲. Trong khoa học dữ liệu, phân cụm xảy ra khi cố gắng phân tích sở thích của người dùng hoặc xác định các đặc điểm của bất kỳ tập dữ liệu không gắn nhãn nào. Phân cụm, theo một cách nào đó, giúp làm sáng tỏ sự hỗn loạn, giống như ngăn kéo đựng tất. + +[![Introduction to ML](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Introduction to Clustering") + +> 🎥 Nhấp vào hình ảnh trên để xem video: John Guttag của MIT giới thiệu về phân cụm + +Trong môi trường chuyên nghiệp, phân cụm có thể được sử dụng để xác định các phân khúc thị trường, chẳng hạn như xác định nhóm tuổi nào mua những mặt hàng nào. Một ứng dụng khác có thể là phát hiện bất thường, chẳng hạn để phát hiện gian lận từ một tập dữ liệu giao dịch thẻ tín dụng. Hoặc bạn có thể sử dụng phân cụm để xác định khối u trong một loạt các bản quét y tế. + +✅ Dành một phút để suy nghĩ về cách bạn có thể đã gặp phân cụm 'trong thực tế', trong ngân hàng, thương mại điện tử hoặc môi trường kinh doanh. + +> 🎓 Thú vị là, phân tích cụm bắt nguồn từ các lĩnh vực Nhân học và Tâm lý học vào những năm 1930. Bạn có thể tưởng tượng nó đã được sử dụng như thế nào không? + +Ngoài ra, bạn có thể sử dụng nó để nhóm các kết quả tìm kiếm - chẳng hạn như liên kết mua sắm, hình ảnh hoặc đánh giá. Phân cụm rất hữu ích khi bạn có một tập dữ liệu lớn mà bạn muốn giảm bớt và thực hiện phân tích chi tiết hơn, vì vậy kỹ thuật này có thể được sử dụng để tìm hiểu về dữ liệu trước khi xây dựng các mô hình khác. + +✅ Khi dữ liệu của bạn được tổ chức thành các cụm, bạn gán cho nó một Id cụm, và kỹ thuật này có thể hữu ích khi bảo vệ quyền riêng tư của tập dữ liệu; bạn có thể thay thế việc tham chiếu một điểm dữ liệu bằng Id cụm của nó, thay vì bằng dữ liệu nhận dạng tiết lộ hơn. Bạn có thể nghĩ ra những lý do khác tại sao bạn lại tham chiếu một Id cụm thay vì các yếu tố khác của cụm để xác định nó không? + +Tìm hiểu sâu hơn về các kỹ thuật phân cụm trong [Learn module này](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott) + +## Bắt đầu với phân cụm + +[Scikit-learn cung cấp một loạt lớn](https://scikit-learn.org/stable/modules/clustering.html) các phương pháp để thực hiện phân cụm. Loại bạn chọn sẽ phụ thuộc vào trường hợp sử dụng của bạn. Theo tài liệu, mỗi phương pháp có các lợi ích khác nhau. Dưới đây là bảng đơn giản hóa các phương pháp được hỗ trợ bởi Scikit-learn và các trường hợp sử dụng phù hợp: + +| Tên phương pháp | Trường hợp sử dụng | +| :--------------------------- | :------------------------------------------------------------------- | +| K-Means | mục đích chung, suy diễn | +| Affinity propagation | nhiều cụm không đều, suy diễn | +| Mean-shift | nhiều cụm không đều, suy diễn | +| Spectral clustering | ít cụm đều, suy diễn ngược | +| Ward hierarchical clustering | nhiều cụm bị ràng buộc, suy diễn ngược | +| Agglomerative clustering | nhiều cụm bị ràng buộc, khoảng cách không Euclidean, suy diễn ngược | +| DBSCAN | hình học không phẳng, cụm không đều, suy diễn ngược | +| OPTICS | hình học không phẳng, cụm không đều với mật độ biến đổi, suy diễn ngược | +| Gaussian mixtures | hình học phẳng, suy diễn | +| BIRCH | tập dữ liệu lớn với các điểm ngoại lai, suy diễn | + +> 🎓 Cách chúng ta tạo cụm có liên quan nhiều đến cách chúng ta tập hợp các điểm dữ liệu thành nhóm. Hãy cùng tìm hiểu một số thuật ngữ: +> +> 🎓 ['Suy diễn ngược' vs. 'suy diễn'](https://wikipedia.org/wiki/Transduction_(machine_learning)) +> +> Suy diễn ngược được rút ra từ các trường hợp huấn luyện quan sát được ánh xạ tới các trường hợp kiểm tra cụ thể. Suy diễn được rút ra từ các trường hợp huấn luyện ánh xạ tới các quy tắc chung, sau đó mới được áp dụng cho các trường hợp kiểm tra. +> +> Một ví dụ: Hãy tưởng tượng bạn có một tập dữ liệu chỉ được gắn nhãn một phần. Một số thứ là 'đĩa nhạc', một số là 'cd', và một số là trống. Nhiệm vụ của bạn là cung cấp nhãn cho các mục trống. Nếu bạn chọn cách tiếp cận suy diễn, bạn sẽ huấn luyện một mô hình tìm kiếm 'đĩa nhạc' và 'cd', và áp dụng các nhãn đó cho dữ liệu chưa được gắn nhãn. Cách tiếp cận này sẽ gặp khó khăn trong việc phân loại những thứ thực sự là 'băng cassette'. Một cách tiếp cận suy diễn ngược, mặt khác, xử lý dữ liệu chưa biết này hiệu quả hơn vì nó hoạt động để nhóm các mục tương tự lại với nhau và sau đó áp dụng nhãn cho một nhóm. Trong trường hợp này, các cụm có thể phản ánh 'những thứ âm nhạc hình tròn' và 'những thứ âm nhạc hình vuông'. +> +> 🎓 ['Hình học không phẳng' vs. 'hình học phẳng'](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering) +> +> Được lấy từ thuật ngữ toán học, hình học không phẳng vs. phẳng đề cập đến việc đo khoảng cách giữa các điểm bằng các phương pháp hình học 'phẳng' ([Euclidean](https://wikipedia.org/wiki/Euclidean_geometry)) hoặc 'không phẳng' (không Euclidean). +> +>'Phẳng' trong ngữ cảnh này đề cập đến hình học Euclidean (một phần của nó được dạy như hình học 'mặt phẳng'), và không phẳng đề cập đến hình học không Euclidean. Hình học liên quan gì đến học máy? Vâng, vì hai lĩnh vực này đều dựa trên toán học, cần phải có một cách chung để đo khoảng cách giữa các điểm trong các cụm, và điều đó có thể được thực hiện theo cách 'phẳng' hoặc 'không phẳng', tùy thuộc vào bản chất của dữ liệu. [Khoảng cách Euclidean](https://wikipedia.org/wiki/Euclidean_distance) được đo bằng chiều dài của một đoạn thẳng giữa hai điểm. [Khoảng cách không Euclidean](https://wikipedia.org/wiki/Non-Euclidean_geometry) được đo dọc theo một đường cong. Nếu dữ liệu của bạn, khi được hình dung, dường như không tồn tại trên một mặt phẳng, bạn có thể cần sử dụng một thuật toán chuyên biệt để xử lý nó. +> +![Flat vs Nonflat Geometry Infographic](../../../../5-Clustering/1-Visualize/images/flat-nonflat.png) +> Infographic bởi [Dasani Madipalli](https://twitter.com/dasani_decoded) +> +> 🎓 ['Khoảng cách'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf) +> +> Các cụm được định nghĩa bởi ma trận khoảng cách của chúng, ví dụ: khoảng cách giữa các điểm. Khoảng cách này có thể được đo bằng một vài cách. Các cụm Euclidean được định nghĩa bởi giá trị trung bình của các điểm, và chứa một 'trọng tâm' hoặc điểm trung tâm. Khoảng cách do đó được đo bằng khoảng cách tới trọng tâm đó. Khoảng cách không Euclidean đề cập đến 'clustroids', điểm gần nhất với các điểm khác. Clustroids lần lượt có thể được định nghĩa theo nhiều cách. +> +> 🎓 ['Bị ràng buộc'](https://wikipedia.org/wiki/Constrained_clustering) +> +> [Phân cụm bị ràng buộc](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) giới thiệu 'học bán giám sát' vào phương pháp không giám sát này. Các mối quan hệ giữa các điểm được đánh dấu là 'không thể liên kết' hoặc 'phải liên kết' để một số quy tắc được áp dụng cho tập dữ liệu. +> +> Một ví dụ: Nếu một thuật toán được tự do trên một loạt dữ liệu không gắn nhãn hoặc bán gắn nhãn, các cụm mà nó tạo ra có thể có chất lượng kém. Trong ví dụ trên, các cụm có thể nhóm 'những thứ âm nhạc hình tròn' và 'những thứ âm nhạc hình vuông' và 'những thứ hình tam giác' và 'bánh quy'. Nếu được cung cấp một số ràng buộc, hoặc quy tắc để tuân theo ("mục phải được làm bằng nhựa", "mục cần có khả năng tạo ra âm nhạc") điều này có thể giúp 'ràng buộc' thuật toán để đưa ra các lựa chọn tốt hơn. +> +> 🎓 'Mật độ' +> +> Dữ liệu 'nhiễu' được coi là 'dày đặc'. Khoảng cách giữa các điểm trong mỗi cụm của nó có thể chứng minh, khi kiểm tra, là dày đặc hơn hoặc ít dày đặc hơn, hoặc 'đông đúc' và do đó dữ liệu này cần được phân tích bằng phương pháp phân cụm phù hợp. [Bài viết này](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) minh họa sự khác biệt giữa việc sử dụng phân cụm K-Means vs. các thuật toán HDBSCAN để khám phá một tập dữ liệu nhiễu với mật độ cụm không đều. + +## Các thuật toán phân cụm + +Có hơn 100 thuật toán phân cụm, và việc sử dụng chúng phụ thuộc vào bản chất của dữ liệu hiện có. Hãy thảo luận một số thuật toán chính: + +- **Phân cụm phân cấp**. Nếu một đối tượng được phân loại dựa trên sự gần gũi của nó với một đối tượng gần đó, thay vì với một đối tượng xa hơn, các cụm được hình thành dựa trên khoảng cách của các thành viên của chúng tới và từ các đối tượng khác. Phân cụm kết hợp của Scikit-learn là phân cấp. + + ![Hierarchical clustering Infographic](../../../../5-Clustering/1-Visualize/images/hierarchical.png) + > Infographic bởi [Dasani Madipalli](https://twitter.com/dasani_decoded) + +- **Phân cụm trọng tâm**. Thuật toán phổ biến này yêu cầu lựa chọn 'k', hoặc số lượng cụm cần hình thành, sau đó thuật toán xác định điểm trung tâm của một cụm và tập hợp dữ liệu xung quanh điểm đó. [Phân cụm K-means](https://wikipedia.org/wiki/K-means_clustering) là một phiên bản phổ biến của phân cụm trọng tâm. Trung tâm được xác định bởi giá trị trung bình gần nhất, do đó có tên gọi. Khoảng cách bình phương từ cụm được giảm thiểu. + + ![Centroid clustering Infographic](../../../../5-Clustering/1-Visualize/images/centroid.png) + > Infographic bởi [Dasani Madipalli](https://twitter.com/dasani_decoded) + +- **Phân cụm dựa trên phân phối**. Dựa trên mô hình thống kê, phân cụm dựa trên phân phối tập trung vào việc xác định xác suất rằng một điểm dữ liệu thuộc về một cụm, và gán nó tương ứng. Các phương pháp hỗn hợp Gaussian thuộc loại này. + +- **Phân cụm dựa trên mật độ**. Các điểm dữ liệu được gán vào các cụm dựa trên mật độ của chúng, hoặc sự tập hợp xung quanh nhau. Các điểm dữ liệu xa nhóm được coi là điểm ngoại lai hoặc nhiễu. DBSCAN, Mean-shift và OPTICS thuộc loại phân cụm này. + +- **Phân cụm dựa trên lưới**. Đối với các tập dữ liệu đa chiều, một lưới được tạo ra và dữ liệu được chia giữa các ô của lưới, từ đó tạo ra các cụm. + +## Bài tập - phân cụm dữ liệu của bạn + +Phân cụm như một kỹ thuật được hỗ trợ rất nhiều bởi việc trực quan hóa đúng cách, vì vậy hãy bắt đầu bằng cách trực quan hóa dữ liệu âm nhạc của chúng ta. Bài tập này sẽ giúp chúng ta quyết định phương pháp phân cụm nào nên được sử dụng hiệu quả nhất cho bản chất của dữ liệu này. + +1. Mở tệp [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) trong thư mục này. + +1. Nhập gói `Seaborn` để trực quan hóa dữ liệu tốt. + + ```python + !pip install seaborn + ``` + +1. Thêm dữ liệu bài hát từ [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv). Tải lên một dataframe với một số dữ liệu về các bài hát. Chuẩn bị khám phá dữ liệu này bằng cách nhập các thư viện và xuất dữ liệu: + + ```python + import matplotlib.pyplot as plt + import pandas as pd + + df = pd.read_csv("../data/nigerian-songs.csv") + df.head() + ``` + + Kiểm tra vài dòng đầu tiên của dữ liệu: + + | | name | album | artist | artist_top_genre | release_date | length | popularity | danceability | acousticness | energy | instrumentalness | liveness | loudness | speechiness | tempo | time_signature | + | --- | ------------------------ | ---------------------------- | ------------------- | ---------------- | ------------ | ------ | ---------- | ------------ | ------------ | ------ | ---------------- | -------- | -------- | ----------- | ------- | -------------- | + | 0 | Sparky | Mandy & The Jungle | Cruel Santino | alternative r&b | 2019 | 144000 | 48 | 0.666 | 0.851 | 0.42 | 0.534 | 0.11 | -6.699 | 0.0829 | 133.015 | 5 | + | 1 | shuga rush | EVERYTHING YOU HEARD IS TRUE | Odunsi (The Engine) | afropop | 2020 | 89488 | 30 | 0.71 | 0.0822 | 0.683 | 0.000169 | 0.101 | -5.64 | 0.36 | 129.993 | 3 | +| 2 | LITT! | LITT! | AYLØ | indie r&b | 2018 | 207758 | 40 | 0.836 | 0.272 | 0.564 | 0.000537 | 0.11 | -7.127 | 0.0424 | 130.005 | 4 | +| 3 | Confident / Feeling Cool | Enjoy Your Life | Lady Donli | nigerian pop | 2019 | 175135 | 14 | 0.894 | 0.798 | 0.611 | 0.000187 | 0.0964 | -4.961 | 0.113 | 111.087 | 4 | +| 4 | wanted you | rare. | Odunsi (The Engine) | afropop | 2018 | 152049 | 25 | 0.702 | 0.116 | 0.833 | 0.91 | 0.348 | -6.044 | 0.0447 | 105.115 | 4 | + +1. Lấy một số thông tin về dataframe bằng cách gọi `info()`: + + ```python + df.info() + ``` + + Kết quả sẽ trông như sau: + + ```output + + RangeIndex: 530 entries, 0 to 529 + Data columns (total 16 columns): + # Column Non-Null Count Dtype + --- ------ -------------- ----- + 0 name 530 non-null object + 1 album 530 non-null object + 2 artist 530 non-null object + 3 artist_top_genre 530 non-null object + 4 release_date 530 non-null int64 + 5 length 530 non-null int64 + 6 popularity 530 non-null int64 + 7 danceability 530 non-null float64 + 8 acousticness 530 non-null float64 + 9 energy 530 non-null float64 + 10 instrumentalness 530 non-null float64 + 11 liveness 530 non-null float64 + 12 loudness 530 non-null float64 + 13 speechiness 530 non-null float64 + 14 tempo 530 non-null float64 + 15 time_signature 530 non-null int64 + dtypes: float64(8), int64(4), object(4) + memory usage: 66.4+ KB + ``` + +1. Kiểm tra lại giá trị null bằng cách gọi `isnull()` và xác nhận tổng số bằng 0: + + ```python + df.isnull().sum() + ``` + + Trông ổn: + + ```output + name 0 + album 0 + artist 0 + artist_top_genre 0 + release_date 0 + length 0 + popularity 0 + danceability 0 + acousticness 0 + energy 0 + instrumentalness 0 + liveness 0 + loudness 0 + speechiness 0 + tempo 0 + time_signature 0 + dtype: int64 + ``` + +1. Mô tả dữ liệu: + + ```python + df.describe() + ``` + + | | release_date | length | popularity | danceability | acousticness | energy | instrumentalness | liveness | loudness | speechiness | tempo | time_signature | + | ----- | ------------ | ----------- | ---------- | ------------ | ------------ | -------- | ---------------- | -------- | --------- | ----------- | ---------- | -------------- | + | count | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | + | mean | 2015.390566 | 222298.1698 | 17.507547 | 0.741619 | 0.265412 | 0.760623 | 0.016305 | 0.147308 | -4.953011 | 0.130748 | 116.487864 | 3.986792 | + | std | 3.131688 | 39696.82226 | 18.992212 | 0.117522 | 0.208342 | 0.148533 | 0.090321 | 0.123588 | 2.464186 | 0.092939 | 23.518601 | 0.333701 | + | min | 1998 | 89488 | 0 | 0.255 | 0.000665 | 0.111 | 0 | 0.0283 | -19.362 | 0.0278 | 61.695 | 3 | + | 25% | 2014 | 199305 | 0 | 0.681 | 0.089525 | 0.669 | 0 | 0.07565 | -6.29875 | 0.0591 | 102.96125 | 4 | + | 50% | 2016 | 218509 | 13 | 0.761 | 0.2205 | 0.7845 | 0.000004 | 0.1035 | -4.5585 | 0.09795 | 112.7145 | 4 | + | 75% | 2017 | 242098.5 | 31 | 0.8295 | 0.403 | 0.87575 | 0.000234 | 0.164 | -3.331 | 0.177 | 125.03925 | 4 | + | max | 2020 | 511738 | 73 | 0.966 | 0.954 | 0.995 | 0.91 | 0.811 | 0.582 | 0.514 | 206.007 | 5 | + +> 🤔 Nếu chúng ta đang làm việc với clustering, một phương pháp không giám sát không yêu cầu dữ liệu được gắn nhãn, tại sao lại hiển thị dữ liệu này với nhãn? Trong giai đoạn khám phá dữ liệu, chúng rất hữu ích, nhưng không cần thiết để các thuật toán clustering hoạt động. Bạn cũng có thể loại bỏ tiêu đề cột và tham chiếu dữ liệu bằng số cột. + +Hãy xem các giá trị tổng quát của dữ liệu. Lưu ý rằng độ phổ biến có thể là '0', điều này cho thấy các bài hát không có xếp hạng. Hãy loại bỏ chúng ngay sau đây. + +1. Sử dụng biểu đồ cột để tìm ra các thể loại phổ biến nhất: + + ```python + import seaborn as sns + + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top[:5].index,y=top[:5].values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + + ![most popular](../../../../5-Clustering/1-Visualize/images/popular.png) + +✅ Nếu bạn muốn xem thêm các giá trị hàng đầu, hãy thay đổi top `[:5]` thành một giá trị lớn hơn hoặc loại bỏ nó để xem tất cả. + +Lưu ý, khi thể loại hàng đầu được mô tả là 'Missing', điều đó có nghĩa là Spotify không phân loại nó, vì vậy hãy loại bỏ nó. + +1. Loại bỏ dữ liệu thiếu bằng cách lọc nó ra + + ```python + df = df[df['artist_top_genre'] != 'Missing'] + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top.index,y=top.values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + + Bây giờ kiểm tra lại các thể loại: + + ![most popular](../../../../5-Clustering/1-Visualize/images/all-genres.png) + +1. Ba thể loại hàng đầu chiếm ưu thế trong tập dữ liệu này. Hãy tập trung vào `afro dancehall`, `afropop`, và `nigerian pop`, đồng thời lọc tập dữ liệu để loại bỏ bất kỳ giá trị độ phổ biến nào bằng 0 (nghĩa là nó không được phân loại với độ phổ biến trong tập dữ liệu và có thể được coi là nhiễu đối với mục đích của chúng ta): + + ```python + df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')] + df = df[(df['popularity'] > 0)] + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top.index,y=top.values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + +1. Thực hiện một thử nghiệm nhanh để xem liệu dữ liệu có tương quan theo cách đặc biệt mạnh mẽ nào không: + + ```python + corrmat = df.corr(numeric_only=True) + f, ax = plt.subplots(figsize=(12, 9)) + sns.heatmap(corrmat, vmax=.8, square=True) + ``` + + ![correlations](../../../../5-Clustering/1-Visualize/images/correlation.png) + + Mối tương quan mạnh duy nhất là giữa `energy` và `loudness`, điều này không quá ngạc nhiên, vì âm nhạc lớn thường khá sôi động. Ngoài ra, các mối tương quan tương đối yếu. Sẽ rất thú vị để xem một thuật toán clustering có thể làm gì với dữ liệu này. + + > 🎓 Lưu ý rằng tương quan không ngụ ý nguyên nhân! Chúng ta có bằng chứng về tương quan nhưng không có bằng chứng về nguyên nhân. Một [trang web thú vị](https://tylervigen.com/spurious-correlations) có một số hình ảnh minh họa nhấn mạnh điểm này. + +Liệu có sự hội tụ trong tập dữ liệu này xung quanh độ phổ biến và khả năng nhảy của một bài hát? Một FacetGrid cho thấy có các vòng tròn đồng tâm xếp hàng, bất kể thể loại. Có thể sở thích của người Nigeria hội tụ ở một mức độ nhảy nhất định cho thể loại này? + +✅ Thử các điểm dữ liệu khác (energy, loudness, speechiness) và nhiều thể loại âm nhạc khác hoặc khác nhau. Bạn có thể khám phá được gì? Hãy xem bảng `df.describe()` để thấy sự phân bố tổng quát của các điểm dữ liệu. + +### Bài tập - phân bố dữ liệu + +Liệu ba thể loại này có khác biệt đáng kể trong cách nhìn nhận về khả năng nhảy của chúng, dựa trên độ phổ biến? + +1. Kiểm tra phân bố dữ liệu của ba thể loại hàng đầu về độ phổ biến và khả năng nhảy dọc theo trục x và y nhất định. + + ```python + sns.set_theme(style="ticks") + + g = sns.jointplot( + data=df, + x="popularity", y="danceability", hue="artist_top_genre", + kind="kde", + ) + ``` + + Bạn có thể khám phá các vòng tròn đồng tâm xung quanh một điểm hội tụ tổng quát, cho thấy sự phân bố của các điểm. + + > 🎓 Lưu ý rằng ví dụ này sử dụng biểu đồ KDE (Kernel Density Estimate) để biểu diễn dữ liệu bằng một đường cong mật độ xác suất liên tục. Điều này cho phép chúng ta diễn giải dữ liệu khi làm việc với nhiều phân bố. + + Nhìn chung, ba thể loại này liên kết lỏng lẻo về độ phổ biến và khả năng nhảy. Xác định các cụm trong dữ liệu liên kết lỏng lẻo này sẽ là một thách thức: + + ![distribution](../../../../5-Clustering/1-Visualize/images/distribution.png) + +1. Tạo biểu đồ scatter: + + ```python + sns.FacetGrid(df, hue="artist_top_genre", height=5) \ + .map(plt.scatter, "popularity", "danceability") \ + .add_legend() + ``` + + Biểu đồ scatter của cùng các trục cho thấy một mô hình hội tụ tương tự + + ![Facetgrid](../../../../5-Clustering/1-Visualize/images/facetgrid.png) + +Nhìn chung, đối với clustering, bạn có thể sử dụng biểu đồ scatter để hiển thị các cụm dữ liệu, vì vậy việc thành thạo loại hình trực quan hóa này rất hữu ích. Trong bài học tiếp theo, chúng ta sẽ lấy dữ liệu đã lọc này và sử dụng k-means clustering để khám phá các nhóm trong dữ liệu này có xu hướng chồng lấn theo những cách thú vị. + +--- + +## 🚀Thử thách + +Để chuẩn bị cho bài học tiếp theo, hãy tạo một biểu đồ về các thuật toán clustering khác nhau mà bạn có thể khám phá và sử dụng trong môi trường sản xuất. Các vấn đề mà clustering đang cố gắng giải quyết là gì? + +## [Câu hỏi sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +## Ôn tập & Tự học + +Trước khi áp dụng các thuật toán clustering, như chúng ta đã học, việc hiểu bản chất của tập dữ liệu là một ý tưởng tốt. Đọc thêm về chủ đề này [tại đây](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) + +[Bài viết hữu ích này](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) hướng dẫn bạn cách các thuật toán clustering khác nhau hoạt động, dựa trên các hình dạng dữ liệu khác nhau. + +## Bài tập + +[Nghiên cứu các hình thức trực quan hóa khác cho clustering](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 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, nên 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. \ No newline at end of file diff --git a/translations/vi/5-Clustering/1-Visualize/assignment.md b/translations/vi/5-Clustering/1-Visualize/assignment.md new file mode 100644 index 00000000..62c05a64 --- /dev/null +++ b/translations/vi/5-Clustering/1-Visualize/assignment.md @@ -0,0 +1,25 @@ + +# Nghiên cứu các cách trực quan hóa khác cho phân cụm + +## Hướng dẫn + +Trong bài học này, bạn đã làm việc với một số kỹ thuật trực quan hóa để hiểu cách vẽ dữ liệu nhằm chuẩn bị cho việc phân cụm. Đặc biệt, biểu đồ phân tán rất hữu ích để tìm các nhóm đối tượng. Nghiên cứu các cách khác nhau và các thư viện khác nhau để tạo biểu đồ phân tán và ghi lại công việc của bạn trong một notebook. Bạn có thể sử dụng dữ liệu từ bài học này, các bài học khác, hoặc dữ liệu bạn tự tìm kiếm (tuy nhiên, hãy ghi nguồn của nó trong notebook của bạn). Vẽ một số dữ liệu bằng biểu đồ phân tán và giải thích những gì bạn khám phá được. + +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| --------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------ | --------------------------------- | +| | Một notebook được trình bày với năm biểu đồ phân tán được ghi chú rõ ràng | Một notebook được trình bày với ít hơn năm biểu đồ phân tán và ghi chú ít rõ ràng hơn | Một notebook chưa hoàn chỉnh được trình bày | + +--- + +**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 diff --git a/translations/vi/5-Clustering/1-Visualize/solution/Julia/README.md b/translations/vi/5-Clustering/1-Visualize/solution/Julia/README.md new file mode 100644 index 00000000..c2e4fc8b --- /dev/null +++ b/translations/vi/5-Clustering/1-Visualize/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 diff --git a/translations/vi/5-Clustering/2-K-Means/README.md b/translations/vi/5-Clustering/2-K-Means/README.md new file mode 100644 index 00000000..d298663a --- /dev/null +++ b/translations/vi/5-Clustering/2-K-Means/README.md @@ -0,0 +1,261 @@ + +# Phân cụm K-Means + +## [Câu hỏi trước bài học](https://ff-quizzes.netlify.app/en/ml/) + +Trong bài học này, bạn sẽ học cách tạo các cụm bằng cách sử dụng Scikit-learn và bộ dữ liệu âm nhạc Nigeria mà bạn đã nhập trước đó. Chúng ta sẽ tìm hiểu những điều cơ bản về K-Means để phân cụm. Hãy nhớ rằng, như bạn đã học trong bài trước, có nhiều cách để làm việc với các cụm và phương pháp bạn sử dụng phụ thuộc vào dữ liệu của bạn. Chúng ta sẽ thử K-Means vì đây là kỹ thuật phân cụm phổ biến nhất. Bắt đầu nào! + +Các thuật ngữ bạn sẽ học: + +- Điểm số Silhouette +- Phương pháp Elbow +- Quán tính (Inertia) +- Phương sai (Variance) + +## Giới thiệu + +[Phân cụm K-Means](https://wikipedia.org/wiki/K-means_clustering) là một phương pháp xuất phát từ lĩnh vực xử lý tín hiệu. Nó được sử dụng để chia và phân nhóm dữ liệu thành 'k' cụm bằng cách sử dụng một loạt các quan sát. Mỗi quan sát hoạt động để nhóm một điểm dữ liệu gần nhất với 'mean' của nó, hoặc điểm trung tâm của một cụm. + +Các cụm có thể được hình dung dưới dạng [biểu đồ Voronoi](https://wikipedia.org/wiki/Voronoi_diagram), bao gồm một điểm (hoặc 'hạt giống') và vùng tương ứng của nó. + +![voronoi diagram](../../../../5-Clustering/2-K-Means/images/voronoi.png) + +> Đồ họa thông tin bởi [Jen Looper](https://twitter.com/jenlooper) + +Quy trình phân cụm K-Means [thực hiện theo ba bước](https://scikit-learn.org/stable/modules/clustering.html#k-means): + +1. Thuật toán chọn số lượng điểm trung tâm k bằng cách lấy mẫu từ tập dữ liệu. Sau đó, nó lặp lại: + 1. Gán mỗi mẫu cho điểm trung tâm gần nhất. + 2. Tạo các điểm trung tâm mới bằng cách lấy giá trị trung bình của tất cả các mẫu được gán cho các điểm trung tâm trước đó. + 3. Sau đó, tính toán sự khác biệt giữa các điểm trung tâm mới và cũ và lặp lại cho đến khi các điểm trung tâm ổn định. + +Một nhược điểm của việc sử dụng K-Means là bạn cần xác định 'k', tức là số lượng điểm trung tâm. May mắn thay, phương pháp 'elbow' giúp ước tính giá trị khởi đầu tốt cho 'k'. Bạn sẽ thử nó ngay bây giờ. + +## Điều kiện tiên quyết + +Bạn sẽ làm việc trong tệp [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/notebook.ipynb) của bài học này, bao gồm việc nhập dữ liệu và làm sạch sơ bộ mà bạn đã thực hiện trong bài học trước. + +## Bài tập - chuẩn bị + +Bắt đầu bằng cách xem lại dữ liệu bài hát. + +1. Tạo biểu đồ hộp, gọi `boxplot()` cho mỗi cột: + + ```python + plt.figure(figsize=(20,20), dpi=200) + + plt.subplot(4,3,1) + sns.boxplot(x = 'popularity', data = df) + + plt.subplot(4,3,2) + sns.boxplot(x = 'acousticness', data = df) + + plt.subplot(4,3,3) + sns.boxplot(x = 'energy', data = df) + + plt.subplot(4,3,4) + sns.boxplot(x = 'instrumentalness', data = df) + + plt.subplot(4,3,5) + sns.boxplot(x = 'liveness', data = df) + + plt.subplot(4,3,6) + sns.boxplot(x = 'loudness', data = df) + + plt.subplot(4,3,7) + sns.boxplot(x = 'speechiness', data = df) + + plt.subplot(4,3,8) + sns.boxplot(x = 'tempo', data = df) + + plt.subplot(4,3,9) + sns.boxplot(x = 'time_signature', data = df) + + plt.subplot(4,3,10) + sns.boxplot(x = 'danceability', data = df) + + plt.subplot(4,3,11) + sns.boxplot(x = 'length', data = df) + + plt.subplot(4,3,12) + sns.boxplot(x = 'release_date', data = df) + ``` + + Dữ liệu này hơi nhiễu: bằng cách quan sát mỗi cột dưới dạng biểu đồ hộp, bạn có thể thấy các giá trị ngoại lai. + + ![outliers](../../../../5-Clustering/2-K-Means/images/boxplots.png) + +Bạn có thể đi qua tập dữ liệu và loại bỏ các giá trị ngoại lai này, nhưng điều đó sẽ làm cho dữ liệu khá ít. + +1. Hiện tại, hãy chọn các cột bạn sẽ sử dụng cho bài tập phân cụm. Chọn các cột có phạm vi tương tự và mã hóa cột `artist_top_genre` dưới dạng dữ liệu số: + + ```python + from sklearn.preprocessing import LabelEncoder + le = LabelEncoder() + + X = df.loc[:, ('artist_top_genre','popularity','danceability','acousticness','loudness','energy')] + + y = df['artist_top_genre'] + + X['artist_top_genre'] = le.fit_transform(X['artist_top_genre']) + + y = le.transform(y) + ``` + +1. Bây giờ bạn cần chọn số lượng cụm để nhắm mục tiêu. Bạn biết có 3 thể loại bài hát mà chúng ta đã phân loại từ tập dữ liệu, vì vậy hãy thử 3: + + ```python + from sklearn.cluster import KMeans + + nclusters = 3 + seed = 0 + + km = KMeans(n_clusters=nclusters, random_state=seed) + km.fit(X) + + # Predict the cluster for each data point + + y_cluster_kmeans = km.predict(X) + y_cluster_kmeans + ``` + +Bạn sẽ thấy một mảng được in ra với các cụm dự đoán (0, 1 hoặc 2) cho mỗi hàng của dataframe. + +1. Sử dụng mảng này để tính toán 'điểm số silhouette': + + ```python + from sklearn import metrics + score = metrics.silhouette_score(X, y_cluster_kmeans) + score + ``` + +## Điểm số Silhouette + +Tìm điểm số silhouette gần 1. Điểm số này dao động từ -1 đến 1, và nếu điểm số là 1, cụm sẽ dày đặc và tách biệt tốt với các cụm khác. Giá trị gần 0 đại diện cho các cụm chồng chéo với các mẫu rất gần ranh giới quyết định của các cụm lân cận. [(Nguồn)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam) + +Điểm số của chúng ta là **.53**, tức là ở mức trung bình. Điều này cho thấy dữ liệu của chúng ta không thực sự phù hợp với loại phân cụm này, nhưng hãy tiếp tục. + +### Bài tập - xây dựng mô hình + +1. Nhập `KMeans` và bắt đầu quá trình phân cụm. + + ```python + from sklearn.cluster import KMeans + wcss = [] + + for i in range(1, 11): + kmeans = KMeans(n_clusters = i, init = 'k-means++', random_state = 42) + kmeans.fit(X) + wcss.append(kmeans.inertia_) + + ``` + + Có một vài phần cần giải thích. + + > 🎓 range: Đây là số lần lặp của quá trình phân cụm. + + > 🎓 random_state: "Xác định việc tạo số ngẫu nhiên để khởi tạo điểm trung tâm." [Nguồn](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans) + + > 🎓 WCSS: "tổng bình phương trong cụm" đo khoảng cách trung bình bình phương của tất cả các điểm trong một cụm đến điểm trung tâm của cụm. [Nguồn](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce). + + > 🎓 Inertia: Thuật toán K-Means cố gắng chọn các điểm trung tâm để giảm thiểu 'inertia', "một thước đo mức độ gắn kết nội bộ của các cụm." [Nguồn](https://scikit-learn.org/stable/modules/clustering.html). Giá trị này được thêm vào biến wcss trong mỗi lần lặp. + + > 🎓 k-means++: Trong [Scikit-learn](https://scikit-learn.org/stable/modules/clustering.html#k-means), bạn có thể sử dụng tối ưu hóa 'k-means++', giúp "khởi tạo các điểm trung tâm để (thường) cách xa nhau, dẫn đến kết quả có thể tốt hơn so với khởi tạo ngẫu nhiên." + +### Phương pháp Elbow + +Trước đó, bạn đã suy đoán rằng, vì bạn đã nhắm mục tiêu 3 thể loại bài hát, bạn nên chọn 3 cụm. Nhưng có đúng như vậy không? + +1. Sử dụng phương pháp 'elbow' để đảm bảo. + + ```python + plt.figure(figsize=(10,5)) + sns.lineplot(x=range(1, 11), y=wcss, marker='o', color='red') + plt.title('Elbow') + plt.xlabel('Number of clusters') + plt.ylabel('WCSS') + plt.show() + ``` + + Sử dụng biến `wcss` mà bạn đã xây dựng ở bước trước để tạo biểu đồ hiển thị nơi 'gấp khúc' trong elbow, điều này cho thấy số lượng cụm tối ưu. Có thể nó **đúng là** 3! + + ![elbow method](../../../../5-Clustering/2-K-Means/images/elbow.png) + +## Bài tập - hiển thị các cụm + +1. Thử lại quy trình, lần này đặt ba cụm và hiển thị các cụm dưới dạng biểu đồ phân tán: + + ```python + from sklearn.cluster import KMeans + kmeans = KMeans(n_clusters = 3) + kmeans.fit(X) + labels = kmeans.predict(X) + plt.scatter(df['popularity'],df['danceability'],c = labels) + plt.xlabel('popularity') + plt.ylabel('danceability') + plt.show() + ``` + +1. Kiểm tra độ chính xác của mô hình: + + ```python + labels = kmeans.labels_ + + correct_labels = sum(y == labels) + + print("Result: %d out of %d samples were correctly labeled." % (correct_labels, y.size)) + + print('Accuracy score: {0:0.2f}'. format(correct_labels/float(y.size))) + ``` + + Độ chính xác của mô hình này không tốt lắm, và hình dạng của các cụm cho bạn một gợi ý tại sao. + + ![clusters](../../../../5-Clustering/2-K-Means/images/clusters.png) + + Dữ liệu này quá mất cân bằng, quá ít tương quan và có quá nhiều phương sai giữa các giá trị cột để phân cụm tốt. Thực tế, các cụm được hình thành có thể bị ảnh hưởng hoặc lệch nhiều bởi ba thể loại mà chúng ta đã xác định ở trên. Đó là một quá trình học tập! + + Trong tài liệu của Scikit-learn, bạn có thể thấy rằng một mô hình như thế này, với các cụm không được phân định rõ ràng, có vấn đề về 'phương sai': + + ![problem models](../../../../5-Clustering/2-K-Means/images/problems.png) + > Đồ họa thông tin từ Scikit-learn + +## Phương sai + +Phương sai được định nghĩa là "trung bình của các bình phương sai khác từ giá trị trung bình" [(Nguồn)](https://www.mathsisfun.com/data/standard-deviation.html). Trong bối cảnh của vấn đề phân cụm này, nó đề cập đến dữ liệu mà các số trong tập dữ liệu của chúng ta có xu hướng lệch quá nhiều so với giá trị trung bình. + +✅ Đây là thời điểm tuyệt vời để suy nghĩ về tất cả các cách bạn có thể khắc phục vấn đề này. Tinh chỉnh dữ liệu thêm một chút? Sử dụng các cột khác? Sử dụng thuật toán khác? Gợi ý: Thử [chuẩn hóa dữ liệu của bạn](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) để làm cho nó đồng nhất và thử nghiệm các cột khác. + +> Thử '[máy tính phương sai](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)' để hiểu thêm về khái niệm này. + +--- + +## 🚀Thử thách + +Dành thời gian với notebook này, tinh chỉnh các tham số. Bạn có thể cải thiện độ chính xác của mô hình bằng cách làm sạch dữ liệu thêm (ví dụ như loại bỏ các giá trị ngoại lai)? Bạn có thể sử dụng trọng số để tăng trọng số cho các mẫu dữ liệu nhất định. Bạn còn có thể làm gì để tạo ra các cụm tốt hơn? + +Gợi ý: Thử chuẩn hóa dữ liệu của bạn. Có mã được bình luận trong notebook thêm chuẩn hóa tiêu chuẩn để làm cho các cột dữ liệu giống nhau hơn về phạm vi. Bạn sẽ thấy rằng mặc dù điểm số silhouette giảm xuống, nhưng 'gấp khúc' trong biểu đồ elbow trở nên mượt mà hơn. Điều này là do để dữ liệu không được chuẩn hóa cho phép dữ liệu có ít phương sai hơn mang trọng số lớn hơn. Đọc thêm về vấn đề này [tại đây](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226). + +## [Câu hỏi sau bài học](https://ff-quizzes.netlify.app/en/ml/) + +## Ôn tập & Tự học + +Xem một trình mô phỏng K-Means [như thế này](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). Bạn có thể sử dụng công cụ này để hình dung các điểm dữ liệu mẫu và xác định các điểm trung tâm của chúng. Bạn có thể chỉnh sửa độ ngẫu nhiên của dữ liệu, số lượng cụm và số lượng điểm trung tâm. Điều này có giúp bạn hiểu cách dữ liệu có thể được nhóm lại không? + +Ngoài ra, hãy xem [tài liệu về K-Means](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) từ Stanford. + +## Bài tập + +[Thử các phương pháp phân cụm khác](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 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, 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. \ No newline at end of file diff --git a/translations/vi/5-Clustering/2-K-Means/assignment.md b/translations/vi/5-Clustering/2-K-Means/assignment.md new file mode 100644 index 00000000..20ca9cbe --- /dev/null +++ b/translations/vi/5-Clustering/2-K-Means/assignment.md @@ -0,0 +1,25 @@ + +# Thử các phương pháp phân cụm khác + +## Hướng dẫn + +Trong bài học này, bạn đã học về phân cụm K-Means. Đôi khi K-Means không phù hợp với dữ liệu của bạn. Hãy tạo một notebook sử dụng dữ liệu từ các bài học này hoặc từ một nguồn khác (ghi rõ nguồn) và trình bày một phương pháp phân cụm khác KHÔNG sử dụng K-Means. Bạn đã học được gì? + +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| --------- | ---------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------- | +| | Một notebook được trình bày với mô hình phân cụm được tài liệu hóa tốt | Một notebook được trình bày nhưng không có tài liệu tốt và/hoặc không đầy đủ | Công việc được nộp không hoàn chỉnh | + +--- + +**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 diff --git a/translations/vi/5-Clustering/2-K-Means/solution/Julia/README.md b/translations/vi/5-Clustering/2-K-Means/solution/Julia/README.md new file mode 100644 index 00000000..7c88a2f5 --- /dev/null +++ b/translations/vi/5-Clustering/2-K-Means/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 diff --git a/translations/vi/5-Clustering/README.md b/translations/vi/5-Clustering/README.md new file mode 100644 index 00000000..4b46dd7b --- /dev/null +++ b/translations/vi/5-Clustering/README.md @@ -0,0 +1,42 @@ + +# Các mô hình phân cụm trong học máy + +Phân cụm là một nhiệm vụ trong học máy, nơi nó tìm cách xác định các đối tượng giống nhau và nhóm chúng lại thành các nhóm gọi là cụm. Điều làm phân cụm khác biệt so với các phương pháp khác trong học máy là mọi thứ diễn ra tự động, thực tế có thể nói rằng nó hoàn toàn trái ngược với học có giám sát. + +## Chủ đề khu vực: các mô hình phân cụm cho sở thích âm nhạc của khán giả Nigeria 🎧 + +Khán giả đa dạng của Nigeria có sở thích âm nhạc phong phú. Sử dụng dữ liệu được thu thập từ Spotify (lấy cảm hứng từ [bài viết này](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421)), hãy cùng xem một số bài hát phổ biến ở Nigeria. Bộ dữ liệu này bao gồm thông tin về điểm 'danceability', 'acousticness', độ lớn âm thanh, 'speechiness', mức độ phổ biến và năng lượng của các bài hát. Sẽ rất thú vị khi khám phá các mẫu trong dữ liệu này! + +![Một bàn xoay](../../../5-Clustering/images/turntable.jpg) + +> Ảnh của Marcela Laskoski trên Unsplash + +Trong loạt bài học này, bạn sẽ khám phá những cách mới để phân tích dữ liệu bằng các kỹ thuật phân cụm. Phân cụm đặc biệt hữu ích khi bộ dữ liệu của bạn không có nhãn. Nếu nó có nhãn, thì các kỹ thuật phân loại như những gì bạn đã học trong các bài học trước có thể hữu ích hơn. Nhưng trong trường hợp bạn muốn nhóm dữ liệu không có nhãn, phân cụm là một cách tuyệt vời để khám phá các mẫu. + +> Có những công cụ low-code hữu ích có thể giúp bạn tìm hiểu cách làm việc với các mô hình phân cụm. Hãy thử [Azure ML cho nhiệm vụ này](https://docs.microsoft.com/learn/modules/create-clustering-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +## Các bài học + +1. [Giới thiệu về phân cụm](1-Visualize/README.md) +2. [Phân cụm K-Means](2-K-Means/README.md) + +## Tín dụng + +Các bài học này được viết với 🎶 bởi [Jen Looper](https://www.twitter.com/jenlooper) cùng với các đánh giá hữu ích từ [Rishit Dagli](https://rishit_dagli) và [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan). + +Bộ dữ liệu [Nigerian Songs](https://www.kaggle.com/sootersaalu/nigerian-songs-spotify) được lấy từ Kaggle, được thu thập từ Spotify. + +Các ví dụ K-Means hữu ích hỗ trợ việc tạo bài học này bao gồm [khám phá iris](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering), [notebook giới thiệu](https://www.kaggle.com/prashant111/k-means-clustering-with-python), và [ví dụ giả định về NGO](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering). + +--- + +**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, nên 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 về 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 diff --git a/translations/vi/6-NLP/1-Introduction-to-NLP/README.md b/translations/vi/6-NLP/1-Introduction-to-NLP/README.md new file mode 100644 index 00000000..d3ec866e --- /dev/null +++ b/translations/vi/6-NLP/1-Introduction-to-NLP/README.md @@ -0,0 +1,179 @@ + +# Giới thiệu về xử lý ngôn ngữ tự nhiên + +Bài học này bao gồm lịch sử ngắn gọn và các khái niệm quan trọng của *xử lý ngôn ngữ tự nhiên*, một lĩnh vực con của *ngôn ngữ học tính toán*. + +## [Câu hỏi trước bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +## Giới thiệu + +NLP, như thường được gọi, là một trong những lĩnh vực nổi tiếng nhất nơi học máy đã được áp dụng và sử dụng trong phần mềm sản xuất. + +✅ Bạn có thể nghĩ đến phần mềm nào mà bạn sử dụng hàng ngày có thể tích hợp một số NLP không? Còn các chương trình xử lý văn bản hoặc ứng dụng di động mà bạn thường xuyên sử dụng thì sao? + +Bạn sẽ học về: + +- **Ý tưởng về ngôn ngữ**. Cách ngôn ngữ phát triển và các lĩnh vực nghiên cứu chính đã được thực hiện. +- **Định nghĩa và khái niệm**. Bạn cũng sẽ học các định nghĩa và khái niệm về cách máy tính xử lý văn bản, bao gồm phân tích cú pháp, ngữ pháp, và xác định danh từ và động từ. Có một số nhiệm vụ lập trình trong bài học này, và một số khái niệm quan trọng sẽ được giới thiệu mà bạn sẽ học cách lập trình trong các bài học tiếp theo. + +## Ngôn ngữ học tính toán + +Ngôn ngữ học tính toán là một lĩnh vực nghiên cứu và phát triển qua nhiều thập kỷ, nghiên cứu cách máy tính có thể làm việc với, thậm chí hiểu, dịch và giao tiếp bằng ngôn ngữ. Xử lý ngôn ngữ tự nhiên (NLP) là một lĩnh vực liên quan tập trung vào cách máy tính có thể xử lý ngôn ngữ 'tự nhiên', hay ngôn ngữ của con người. + +### Ví dụ - nhập liệu bằng giọng nói trên điện thoại + +Nếu bạn từng nhập liệu bằng giọng nói thay vì gõ hoặc hỏi một trợ lý ảo một câu hỏi, giọng nói của bạn đã được chuyển đổi thành dạng văn bản và sau đó được xử lý hoặc *phân tích cú pháp* từ ngôn ngữ bạn nói. Các từ khóa được phát hiện sau đó được xử lý thành một định dạng mà điện thoại hoặc trợ lý có thể hiểu và thực hiện. + +![comprehension](../../../../6-NLP/1-Introduction-to-NLP/images/comprehension.png) +> Hiểu ngôn ngữ thực sự rất khó! Hình ảnh bởi [Jen Looper](https://twitter.com/jenlooper) + +### Công nghệ này được thực hiện như thế nào? + +Điều này có thể thực hiện được vì ai đó đã viết một chương trình máy tính để làm điều này. Vài thập kỷ trước, một số nhà văn khoa học viễn tưởng đã dự đoán rằng con người sẽ chủ yếu nói chuyện với máy tính của họ, và máy tính sẽ luôn hiểu chính xác ý nghĩa của họ. Đáng tiếc, vấn đề này hóa ra khó hơn nhiều so với tưởng tượng, và mặc dù ngày nay vấn đề này đã được hiểu rõ hơn, vẫn còn nhiều thách thức lớn trong việc đạt được xử lý ngôn ngữ tự nhiên 'hoàn hảo' khi nói đến việc hiểu ý nghĩa của một câu. Đây là một vấn đề đặc biệt khó khi nói đến việc hiểu sự hài hước hoặc phát hiện cảm xúc như sự mỉa mai trong một câu. + +Lúc này, bạn có thể nhớ lại các lớp học ở trường nơi giáo viên dạy về các phần ngữ pháp trong một câu. Ở một số quốc gia, học sinh được dạy ngữ pháp và ngôn ngữ học như một môn học riêng biệt, nhưng ở nhiều nơi, các chủ đề này được bao gồm như một phần của việc học ngôn ngữ: hoặc ngôn ngữ đầu tiên của bạn ở trường tiểu học (học đọc và viết) và có thể là ngôn ngữ thứ hai ở cấp trung học. Đừng lo lắng nếu bạn không phải là chuyên gia trong việc phân biệt danh từ với động từ hoặc trạng từ với tính từ! + +Nếu bạn gặp khó khăn với sự khác biệt giữa *hiện tại đơn* và *hiện tại tiếp diễn*, bạn không đơn độc. Đây là một điều thách thức đối với nhiều người, ngay cả những người nói ngôn ngữ đó như tiếng mẹ đẻ. Tin tốt là máy tính thực sự rất giỏi trong việc áp dụng các quy tắc chính thức, và bạn sẽ học cách viết mã để *phân tích cú pháp* một câu tốt như con người. Thách thức lớn hơn mà bạn sẽ khám phá sau này là hiểu *ý nghĩa* và *cảm xúc* của một câu. + +## Yêu cầu trước + +Đối với bài học này, yêu cầu chính là có thể đọc và hiểu ngôn ngữ của bài học này. Không có bài toán hoặc phương trình nào cần giải. Mặc dù tác giả ban đầu viết bài học này bằng tiếng Anh, nó cũng được dịch sang các ngôn ngữ khác, vì vậy bạn có thể đang đọc một bản dịch. Có những ví dụ nơi một số ngôn ngữ khác nhau được sử dụng (để so sánh các quy tắc ngữ pháp khác nhau của các ngôn ngữ). Những ví dụ này *không* được dịch, nhưng văn bản giải thích thì có, vì vậy ý nghĩa sẽ rõ ràng. + +Đối với các nhiệm vụ lập trình, bạn sẽ sử dụng Python và các ví dụ sử dụng Python 3.8. + +Trong phần này, bạn sẽ cần và sử dụng: + +- **Hiểu Python 3**. Hiểu ngôn ngữ lập trình Python 3, bài học này sử dụng đầu vào, vòng lặp, đọc tệp, mảng. +- **Visual Studio Code + tiện ích mở rộng**. Chúng ta sẽ sử dụng Visual Studio Code và tiện ích mở rộng Python của nó. Bạn cũng có thể sử dụng một IDE Python mà bạn chọn. +- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) là một thư viện xử lý văn bản đơn giản hóa cho Python. Làm theo hướng dẫn trên trang TextBlob để cài đặt nó trên hệ thống của bạn (cài đặt cả corpora như được hiển thị dưới đây): + + ```bash + pip install -U textblob + python -m textblob.download_corpora + ``` + +> 💡 Mẹo: Bạn có thể chạy Python trực tiếp trong môi trường VS Code. Kiểm tra [tài liệu](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) để biết thêm thông tin. + +## Nói chuyện với máy móc + +Lịch sử cố gắng làm cho máy tính hiểu ngôn ngữ của con người đã kéo dài hàng thập kỷ, và một trong những nhà khoa học đầu tiên xem xét xử lý ngôn ngữ tự nhiên là *Alan Turing*. + +### 'Kiểm tra Turing' + +Khi Turing nghiên cứu *trí tuệ nhân tạo* vào những năm 1950, ông đã xem xét liệu một bài kiểm tra hội thoại có thể được thực hiện giữa một con người và máy tính (thông qua trao đổi văn bản) nơi con người trong cuộc hội thoại không chắc chắn liệu họ đang nói chuyện với một con người khác hay một máy tính. + +Nếu, sau một khoảng thời gian hội thoại nhất định, con người không thể xác định rằng các câu trả lời là từ máy tính hay không, thì liệu máy tính có thể được coi là *đang suy nghĩ*? + +### Cảm hứng - 'trò chơi bắt chước' + +Ý tưởng này xuất phát từ một trò chơi tiệc tùng gọi là *Trò chơi Bắt chước* nơi một người thẩm vấn ở một phòng riêng và được giao nhiệm vụ xác định ai trong hai người (ở phòng khác) là nam và nữ tương ứng. Người thẩm vấn có thể gửi ghi chú, và phải cố gắng nghĩ ra các câu hỏi mà câu trả lời bằng văn bản tiết lộ giới tính của người bí ẩn. Tất nhiên, những người chơi ở phòng khác đang cố gắng đánh lừa người thẩm vấn bằng cách trả lời các câu hỏi theo cách gây nhầm lẫn hoặc làm người thẩm vấn hiểu sai, đồng thời cũng tạo ra vẻ ngoài trả lời một cách trung thực. + +### Phát triển Eliza + +Vào những năm 1960, một nhà khoa học MIT tên là *Joseph Weizenbaum* đã phát triển [*Eliza*](https://wikipedia.org/wiki/ELIZA), một 'nhà trị liệu' máy tính sẽ hỏi con người các câu hỏi và tạo ra vẻ ngoài hiểu câu trả lời của họ. Tuy nhiên, mặc dù Eliza có thể phân tích cú pháp một câu và xác định một số cấu trúc ngữ pháp và từ khóa nhất định để đưa ra câu trả lời hợp lý, nó không thể được coi là *hiểu* câu. Nếu Eliza được đưa ra một câu theo định dạng "**Tôi đang** buồn", nó có thể sắp xếp lại và thay thế các từ trong câu để tạo thành câu trả lời "Bạn đã **buồn** bao lâu?". + +Điều này tạo ra ấn tượng rằng Eliza hiểu tuyên bố và đang hỏi một câu hỏi tiếp theo, trong khi thực tế, nó chỉ thay đổi thì và thêm một số từ. Nếu Eliza không thể xác định một từ khóa mà nó có câu trả lời, nó sẽ thay vào đó đưa ra một câu trả lời ngẫu nhiên có thể áp dụng cho nhiều tuyên bố khác nhau. Eliza có thể dễ dàng bị đánh lừa, ví dụ nếu người dùng viết "**Bạn là** một chiếc xe đạp", nó có thể trả lời "Tôi đã **là** một chiếc xe đạp bao lâu?", thay vì một câu trả lời hợp lý hơn. + +[![Trò chuyện với Eliza](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "Trò chuyện với Eliza") + +> 🎥 Nhấp vào hình ảnh trên để xem video về chương trình ELIZA gốc + +> Lưu ý: Bạn có thể đọc mô tả gốc về [Eliza](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) được xuất bản năm 1966 nếu bạn có tài khoản ACM. Ngoài ra, hãy đọc về Eliza trên [wikipedia](https://wikipedia.org/wiki/ELIZA) + +## Bài tập - lập trình một bot hội thoại cơ bản + +Một bot hội thoại, giống như Eliza, là một chương trình thu hút đầu vào của người dùng và dường như hiểu và phản hồi một cách thông minh. Không giống như Eliza, bot của chúng ta sẽ không có nhiều quy tắc tạo ra vẻ ngoài của một cuộc hội thoại thông minh. Thay vào đó, bot của chúng ta sẽ chỉ có một khả năng duy nhất, đó là tiếp tục cuộc hội thoại với các câu trả lời ngẫu nhiên có thể phù hợp trong hầu hết các cuộc hội thoại đơn giản. + +### Kế hoạch + +Các bước của bạn khi xây dựng một bot hội thoại: + +1. In hướng dẫn cho người dùng cách tương tác với bot +2. Bắt đầu một vòng lặp + 1. Nhận đầu vào từ người dùng + 2. Nếu người dùng yêu cầu thoát, thì thoát + 3. Xử lý đầu vào của người dùng và xác định câu trả lời (trong trường hợp này, câu trả lời là một lựa chọn ngẫu nhiên từ danh sách các câu trả lời chung có thể) + 4. In câu trả lời +3. Quay lại bước 2 + +### Xây dựng bot + +Hãy tạo bot ngay bây giờ. Chúng ta sẽ bắt đầu bằng cách định nghĩa một số câu nói. + +1. Tự tạo bot này trong Python với các câu trả lời ngẫu nhiên sau: + + ```python + random_responses = ["That is quite interesting, please tell me more.", + "I see. Do go on.", + "Why do you say that?", + "Funny weather we've been having, isn't it?", + "Let's change the subject.", + "Did you catch the game last night?"] + ``` + + Đây là một số đầu ra mẫu để hướng dẫn bạn (đầu vào của người dùng nằm trên các dòng bắt đầu bằng `>`): + + ```output + Hello, I am Marvin, the simple robot. + You can end this conversation at any time by typing 'bye' + After typing each answer, press 'enter' + How are you today? + > I am good thanks + That is quite interesting, please tell me more. + > today I went for a walk + Did you catch the game last night? + > I did, but my team lost + Funny weather we've been having, isn't it? + > yes but I hope next week is better + Let's change the subject. + > ok, lets talk about music + Why do you say that? + > because I like music! + Why do you say that? + > bye + It was nice talking to you, goodbye! + ``` + + Một giải pháp khả thi cho nhiệm vụ này có thể được tìm thấy [ở đây](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/1-Introduction-to-NLP/solution/bot.py) + + ✅ Dừng lại và suy nghĩ + + 1. Bạn có nghĩ rằng các câu trả lời ngẫu nhiên có thể 'đánh lừa' ai đó nghĩ rằng bot thực sự hiểu họ không? + 2. Bot cần có những tính năng gì để hiệu quả hơn? + 3. Nếu một bot thực sự có thể 'hiểu' ý nghĩa của một câu, liệu nó có cần 'nhớ' ý nghĩa của các câu trước đó trong một cuộc hội thoại không? + +--- + +## 🚀Thử thách + +Chọn một trong các yếu tố "dừng lại và suy nghĩ" ở trên và thử triển khai nó trong mã hoặc viết một giải pháp trên giấy bằng mã giả. + +Trong bài học tiếp theo, bạn sẽ học về một số cách tiếp cận khác để phân tích ngôn ngữ tự nhiên và học máy. + +## [Câu hỏi sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +## Ôn tập & Tự học + +Hãy xem các tài liệu tham khảo dưới đây như cơ hội đọc thêm. + +### Tài liệu tham khảo + +1. Schubert, Lenhart, "Ngôn ngữ học tính toán", *The Stanford Encyclopedia of Philosophy* (Phiên bản Mùa Xuân 2020), Edward N. Zalta (ed.), URL = . +2. Đại học Princeton "Giới thiệu về WordNet." [WordNet](https://wordnet.princeton.edu/). Đại học Princeton. 2010. + +## Bài tập + +[Tìm kiếm một bot](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 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 diff --git a/translations/vi/6-NLP/1-Introduction-to-NLP/assignment.md b/translations/vi/6-NLP/1-Introduction-to-NLP/assignment.md new file mode 100644 index 00000000..782b294d --- /dev/null +++ b/translations/vi/6-NLP/1-Introduction-to-NLP/assignment.md @@ -0,0 +1,25 @@ + +# Tìm kiếm một bot + +## Hướng dẫn + +Bots có mặt ở khắp mọi nơi. Nhiệm vụ của bạn: tìm một bot và "nhận nuôi" nó! Bạn có thể tìm thấy chúng trên các trang web, trong các ứng dụng ngân hàng, và qua điện thoại, ví dụ như khi bạn gọi đến các công ty dịch vụ tài chính để xin tư vấn hoặc thông tin tài khoản. Phân tích bot và xem liệu bạn có thể làm nó bối rối không. Nếu bạn có thể làm bot bối rối, tại sao bạn nghĩ điều đó xảy ra? Viết một bài ngắn về trải nghiệm của bạn. + +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| --------- | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------ | --------------------- | +| | Viết một bài đầy đủ một trang, giải thích kiến trúc dự đoán của bot và mô tả trải nghiệm của bạn với nó | Bài viết không đầy đủ hoặc nghiên cứu chưa kỹ | Không nộp bài | + +--- + +**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 diff --git a/translations/vi/6-NLP/2-Tasks/README.md b/translations/vi/6-NLP/2-Tasks/README.md new file mode 100644 index 00000000..ba5e0f0e --- /dev/null +++ b/translations/vi/6-NLP/2-Tasks/README.md @@ -0,0 +1,228 @@ + +# Các nhiệm vụ và kỹ thuật phổ biến trong xử lý ngôn ngữ tự nhiên + +Đối với hầu hết các nhiệm vụ *xử lý ngôn ngữ tự nhiên*, văn bản cần được xử lý phải được phân tích, kiểm tra, và kết quả được lưu trữ hoặc đối chiếu với các quy tắc và tập dữ liệu. Những nhiệm vụ này cho phép lập trình viên xác định _ý nghĩa_, _mục đích_, hoặc chỉ đơn giản là _tần suất_ của các thuật ngữ và từ trong văn bản. + +## [Câu hỏi trước bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +Hãy khám phá các kỹ thuật phổ biến được sử dụng trong xử lý văn bản. Kết hợp với học máy, các kỹ thuật này giúp bạn phân tích lượng lớn văn bản một cách hiệu quả. Tuy nhiên, trước khi áp dụng học máy vào các nhiệm vụ này, hãy tìm hiểu các vấn đề mà một chuyên gia NLP thường gặp phải. + +## Các nhiệm vụ phổ biến trong NLP + +Có nhiều cách khác nhau để phân tích văn bản mà bạn đang làm việc. Có những nhiệm vụ bạn có thể thực hiện, và thông qua các nhiệm vụ này, bạn có thể hiểu được văn bản và rút ra kết luận. Thông thường, bạn thực hiện các nhiệm vụ này theo một trình tự. + +### Phân tách từ (Tokenization) + +Có lẽ điều đầu tiên mà hầu hết các thuật toán NLP phải làm là chia văn bản thành các token, hoặc từ. Mặc dù điều này nghe có vẻ đơn giản, việc phải xử lý dấu câu và các dấu phân cách từ và câu của các ngôn ngữ khác nhau có thể làm cho nó trở nên phức tạp. Bạn có thể phải sử dụng nhiều phương pháp để xác định các điểm phân cách. + +![tokenization](../../../../6-NLP/2-Tasks/images/tokenization.png) +> Phân tách một câu từ **Pride and Prejudice**. Đồ họa thông tin bởi [Jen Looper](https://twitter.com/jenlooper) + +### Biểu diễn từ (Embeddings) + +[Biểu diễn từ](https://wikipedia.org/wiki/Word_embedding) là một cách để chuyển đổi dữ liệu văn bản của bạn thành dạng số. Biểu diễn được thực hiện sao cho các từ có ý nghĩa tương tự hoặc các từ thường được sử dụng cùng nhau sẽ được nhóm lại gần nhau. + +![word embeddings](../../../../6-NLP/2-Tasks/images/embedding.png) +> "Tôi rất tôn trọng thần kinh của bạn, chúng là những người bạn cũ của tôi." - Biểu diễn từ cho một câu trong **Pride and Prejudice**. Đồ họa thông tin bởi [Jen Looper](https://twitter.com/jenlooper) + +✅ Thử [công cụ thú vị này](https://projector.tensorflow.org/) để thực nghiệm với biểu diễn từ. Nhấp vào một từ sẽ hiển thị các nhóm từ tương tự: 'toy' được nhóm với 'disney', 'lego', 'playstation', và 'console'. + +### Phân tích cú pháp & Gắn thẻ từ loại (Parsing & Part-of-speech Tagging) + +Mỗi từ đã được phân tách có thể được gắn thẻ như một từ loại - danh từ, động từ, hoặc tính từ. Câu `the quick red fox jumped over the lazy brown dog` có thể được gắn thẻ từ loại như fox = danh từ, jumped = động từ. + +![parsing](../../../../6-NLP/2-Tasks/images/parse.png) + +> Phân tích cú pháp một câu từ **Pride and Prejudice**. Đồ họa thông tin bởi [Jen Looper](https://twitter.com/jenlooper) + +Phân tích cú pháp là việc nhận biết các từ có liên quan với nhau trong một câu - ví dụ `the quick red fox jumped` là một chuỗi tính từ-danh từ-động từ tách biệt với chuỗi `lazy brown dog`. + +### Tần suất từ và cụm từ + +Một quy trình hữu ích khi phân tích một lượng lớn văn bản là xây dựng một từ điển của mọi từ hoặc cụm từ quan tâm và tần suất xuất hiện của chúng. Cụm từ `the quick red fox jumped over the lazy brown dog` có tần suất từ là 2 cho từ "the". + +Hãy xem một ví dụ văn bản nơi chúng ta đếm tần suất từ. Bài thơ The Winners của Rudyard Kipling chứa đoạn sau: + +```output +What the moral? Who rides may read. +When the night is thick and the tracks are blind +A friend at a pinch is a friend, indeed, +But a fool to wait for the laggard behind. +Down to Gehenna or up to the Throne, +He travels the fastest who travels alone. +``` + +Vì tần suất cụm từ có thể không phân biệt chữ hoa chữ thường hoặc phân biệt chữ hoa chữ thường tùy theo yêu cầu, cụm từ `a friend` có tần suất là 2 và `the` có tần suất là 6, và `travels` là 2. + +### N-grams + +Văn bản có thể được chia thành các chuỗi từ với độ dài cố định, một từ (unigram), hai từ (bigram), ba từ (trigram) hoặc bất kỳ số lượng từ nào (n-grams). + +Ví dụ `the quick red fox jumped over the lazy brown dog` với điểm n-gram là 2 tạo ra các n-grams sau: + +1. the quick +2. quick red +3. red fox +4. fox jumped +5. jumped over +6. over the +7. the lazy +8. lazy brown +9. brown dog + +Có thể dễ dàng hình dung nó như một hộp trượt qua câu. Đây là ví dụ cho n-grams gồm 3 từ, n-gram được in đậm trong mỗi câu: + +1. **the quick red** fox jumped over the lazy brown dog +2. the **quick red fox** jumped over the lazy brown dog +3. the quick **red fox jumped** over the lazy brown dog +4. the quick red **fox jumped over** the lazy brown dog +5. the quick red fox **jumped over the** lazy brown dog +6. the quick red fox jumped **over the lazy** brown dog +7. the quick red fox jumped over **the lazy brown** dog +8. the quick red fox jumped over the **lazy brown dog** + +![n-grams sliding window](../../../../6-NLP/2-Tasks/images/n-grams.gif) + +> Giá trị N-gram là 3: Đồ họa thông tin bởi [Jen Looper](https://twitter.com/jenlooper) + +### Trích xuất cụm danh từ + +Trong hầu hết các câu, có một danh từ là chủ ngữ hoặc đối tượng của câu. Trong tiếng Anh, nó thường được nhận biết bằng cách có 'a', 'an', hoặc 'the' đứng trước. Xác định chủ ngữ hoặc đối tượng của một câu bằng cách 'trích xuất cụm danh từ' là một nhiệm vụ phổ biến trong NLP khi cố gắng hiểu ý nghĩa của câu. + +✅ Trong câu "I cannot fix on the hour, or the spot, or the look or the words, which laid the foundation. It is too long ago. I was in the middle before I knew that I had begun.", bạn có thể xác định các cụm danh từ không? + +Trong câu `the quick red fox jumped over the lazy brown dog` có 2 cụm danh từ: **quick red fox** và **lazy brown dog**. + +### Phân tích cảm xúc + +Một câu hoặc văn bản có thể được phân tích để xác định cảm xúc, hoặc mức độ *tích cực* hay *tiêu cực*. Cảm xúc được đo lường bằng *độ phân cực* và *khách quan/chủ quan*. Độ phân cực được đo từ -1.0 đến 1.0 (tiêu cực đến tích cực) và 0.0 đến 1.0 (khách quan nhất đến chủ quan nhất). + +✅ Sau này bạn sẽ học rằng có nhiều cách khác nhau để xác định cảm xúc bằng cách sử dụng học máy, nhưng một cách là có một danh sách các từ và cụm từ được phân loại là tích cực hoặc tiêu cực bởi một chuyên gia con người và áp dụng mô hình đó vào văn bản để tính điểm phân cực. Bạn có thể thấy cách này hoạt động tốt trong một số trường hợp và không tốt trong các trường hợp khác? + +### Biến đổi từ (Inflection) + +Biến đổi từ cho phép bạn lấy một từ và tìm dạng số ít hoặc số nhiều của từ đó. + +### Chuẩn hóa từ (Lemmatization) + +Một *lemma* là gốc hoặc từ chính cho một tập hợp các từ, ví dụ *flew*, *flies*, *flying* có lemma là động từ *fly*. + +Ngoài ra còn có các cơ sở dữ liệu hữu ích dành cho nhà nghiên cứu NLP, đáng chú ý là: + +### WordNet + +[WordNet](https://wordnet.princeton.edu/) là một cơ sở dữ liệu về từ, từ đồng nghĩa, từ trái nghĩa và nhiều chi tiết khác cho mỗi từ trong nhiều ngôn ngữ khác nhau. Nó cực kỳ hữu ích khi cố gắng xây dựng các công cụ dịch thuật, kiểm tra chính tả, hoặc các công cụ ngôn ngữ thuộc bất kỳ loại nào. + +## Thư viện NLP + +May mắn thay, bạn không cần phải tự xây dựng tất cả các kỹ thuật này, vì có các thư viện Python xuất sắc giúp việc này trở nên dễ tiếp cận hơn đối với các nhà phát triển không chuyên về xử lý ngôn ngữ tự nhiên hoặc học máy. Các bài học tiếp theo sẽ bao gồm nhiều ví dụ hơn về những thư viện này, nhưng ở đây bạn sẽ học một số ví dụ hữu ích để giúp bạn với nhiệm vụ tiếp theo. + +### Bài tập - sử dụng thư viện `TextBlob` + +Hãy sử dụng một thư viện gọi là TextBlob vì nó chứa các API hữu ích để giải quyết các loại nhiệm vụ này. TextBlob "được xây dựng trên nền tảng vững chắc của [NLTK](https://nltk.org) và [pattern](https://github.com/clips/pattern), và hoạt động tốt với cả hai." Nó có một lượng lớn học máy được tích hợp trong API của mình. + +> Lưu ý: Một hướng dẫn [Quick Start](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) hữu ích có sẵn cho TextBlob, được khuyến nghị cho các nhà phát triển Python có kinh nghiệm. + +Khi cố gắng xác định *cụm danh từ*, TextBlob cung cấp một số tùy chọn trình trích xuất để tìm cụm danh từ. + +1. Hãy xem `ConllExtractor`. + + ```python + from textblob import TextBlob + from textblob.np_extractors import ConllExtractor + # import and create a Conll extractor to use later + extractor = ConllExtractor() + + # later when you need a noun phrase extractor: + user_input = input("> ") + user_input_blob = TextBlob(user_input, np_extractor=extractor) # note non-default extractor specified + np = user_input_blob.noun_phrases + ``` + + > Điều gì đang diễn ra ở đây? [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) là "Một trình trích xuất cụm danh từ sử dụng phân tích cú pháp khối được huấn luyện với tập dữ liệu huấn luyện ConLL-2000." ConLL-2000 đề cập đến Hội nghị về Học Tự nhiên Ngôn ngữ Tính toán năm 2000. Mỗi năm hội nghị tổ chức một hội thảo để giải quyết một vấn đề khó khăn trong NLP, và năm 2000 là phân tích khối danh từ. Một mô hình đã được huấn luyện trên Wall Street Journal, với "các phần 15-18 làm dữ liệu huấn luyện (211727 token) và phần 20 làm dữ liệu kiểm tra (47377 token)". Bạn có thể xem các quy trình được sử dụng [tại đây](https://www.clips.uantwerpen.be/conll2000/chunking/) và [kết quả](https://ifarm.nl/erikt/research/np-chunking.html). + +### Thử thách - cải thiện bot của bạn với NLP + +Trong bài học trước, bạn đã xây dựng một bot Q&A rất đơn giản. Bây giờ, bạn sẽ làm cho Marvin trở nên đồng cảm hơn bằng cách phân tích đầu vào của bạn để xác định cảm xúc và in ra phản hồi phù hợp với cảm xúc đó. Bạn cũng cần xác định một `noun_phrase` và hỏi về nó. + +Các bước của bạn khi xây dựng một bot trò chuyện tốt hơn: + +1. In hướng dẫn khuyên người dùng cách tương tác với bot +2. Bắt đầu vòng lặp + 1. Nhận đầu vào từ người dùng + 2. Nếu người dùng yêu cầu thoát, thì thoát + 3. Xử lý đầu vào của người dùng và xác định phản hồi cảm xúc phù hợp + 4. Nếu một cụm danh từ được phát hiện trong cảm xúc, chuyển nó sang dạng số nhiều và hỏi thêm về chủ đề đó + 5. In phản hồi +3. Quay lại bước 2 + +Đây là đoạn mã để xác định cảm xúc bằng TextBlob. Lưu ý rằng chỉ có bốn *mức độ* phản hồi cảm xúc (bạn có thể thêm nhiều hơn nếu muốn): + +```python +if user_input_blob.polarity <= -0.5: + response = "Oh dear, that sounds bad. " +elif user_input_blob.polarity <= 0: + response = "Hmm, that's not great. " +elif user_input_blob.polarity <= 0.5: + response = "Well, that sounds positive. " +elif user_input_blob.polarity <= 1: + response = "Wow, that sounds great. " +``` + +Đây là một số đầu ra mẫu để hướng dẫn bạn (đầu vào của người dùng nằm trên các dòng bắt đầu bằng >): + +```output +Hello, I am Marvin, the friendly robot. +You can end this conversation at any time by typing 'bye' +After typing each answer, press 'enter' +How are you today? +> I am ok +Well, that sounds positive. Can you tell me more? +> I went for a walk and saw a lovely cat +Well, that sounds positive. Can you tell me more about lovely cats? +> cats are the best. But I also have a cool dog +Wow, that sounds great. Can you tell me more about cool dogs? +> I have an old hounddog but he is sick +Hmm, that's not great. Can you tell me more about old hounddogs? +> bye +It was nice talking to you, goodbye! +``` + +Một giải pháp khả thi cho nhiệm vụ này có thể được tìm thấy [tại đây](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/2-Tasks/solution/bot.py) + +✅ Kiểm tra kiến thức + +1. Bạn có nghĩ rằng các phản hồi đồng cảm có thể 'lừa' ai đó nghĩ rằng bot thực sự hiểu họ không? +2. Việc xác định cụm danh từ có làm cho bot trở nên 'đáng tin' hơn không? +3. Tại sao việc trích xuất một 'cụm danh từ' từ một câu lại là điều hữu ích? + +--- + +Hãy triển khai bot trong phần kiểm tra kiến thức trước đó và thử nghiệm nó với một người bạn. Nó có thể lừa họ không? Bạn có thể làm cho bot của mình trở nên 'đáng tin' hơn không? + +## 🚀Thử thách + +Hãy thực hiện một nhiệm vụ trong phần kiểm tra kiến thức trước đó và thử triển khai nó. Thử nghiệm bot với một người bạn. Nó có thể lừa họ không? Bạn có thể làm cho bot của mình trở nên 'đáng tin' hơn không? + +## [Câu hỏi sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +## Ôn tập & Tự học + +Trong các bài học tiếp theo, bạn sẽ học thêm về phân tích cảm xúc. Nghiên cứu kỹ thuật thú vị này trong các bài viết như bài viết trên [KDNuggets](https://www.kdnuggets.com/tag/nlp) + +## Bài tập + +[Hãy làm cho bot phản hồi](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 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 diff --git a/translations/vi/6-NLP/2-Tasks/assignment.md b/translations/vi/6-NLP/2-Tasks/assignment.md new file mode 100644 index 00000000..716c1490 --- /dev/null +++ b/translations/vi/6-NLP/2-Tasks/assignment.md @@ -0,0 +1,25 @@ + +# Làm cho Bot phản hồi + +## Hướng dẫn + +Trong những bài học trước, bạn đã lập trình một bot cơ bản để trò chuyện. Bot này đưa ra các câu trả lời ngẫu nhiên cho đến khi bạn nói 'bye'. Bạn có thể làm cho các câu trả lời ít ngẫu nhiên hơn và kích hoạt các câu trả lời khi bạn nói những từ cụ thể như 'tại sao' hoặc 'như thế nào' không? Hãy suy nghĩ một chút về cách học máy có thể làm cho loại công việc này bớt thủ công hơn khi bạn mở rộng bot của mình. Bạn có thể sử dụng thư viện NLTK hoặc TextBlob để làm cho các nhiệm vụ của mình dễ dàng hơn. + +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| --------- | --------------------------------------------- | ------------------------------------------------ | ----------------------- | +| | Một tệp bot.py mới được trình bày và có tài liệu | Một tệp bot mới được trình bày nhưng có lỗi | Không có tệp nào được trình bày | + +--- + +**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, nên 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. \ No newline at end of file diff --git a/translations/vi/6-NLP/3-Translation-Sentiment/README.md b/translations/vi/6-NLP/3-Translation-Sentiment/README.md new file mode 100644 index 00000000..a467b272 --- /dev/null +++ b/translations/vi/6-NLP/3-Translation-Sentiment/README.md @@ -0,0 +1,200 @@ + +# Dịch thuật và phân tích cảm xúc với ML + +Trong các bài học trước, bạn đã học cách xây dựng một bot cơ bản sử dụng `TextBlob`, một thư viện tích hợp ML phía sau để thực hiện các nhiệm vụ NLP cơ bản như trích xuất cụm danh từ. Một thách thức quan trọng khác trong ngôn ngữ học máy tính là việc dịch _chính xác_ một câu từ một ngôn ngữ nói hoặc viết sang một ngôn ngữ khác. + +## [Câu hỏi trước bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +Dịch thuật là một vấn đề rất khó khăn do có hàng ngàn ngôn ngữ và mỗi ngôn ngữ có thể có các quy tắc ngữ pháp rất khác nhau. Một cách tiếp cận là chuyển đổi các quy tắc ngữ pháp chính thức của một ngôn ngữ, chẳng hạn như tiếng Anh, thành một cấu trúc không phụ thuộc vào ngôn ngữ, sau đó dịch bằng cách chuyển đổi lại sang ngôn ngữ khác. Cách tiếp cận này có nghĩa là bạn sẽ thực hiện các bước sau: + +1. **Xác định**. Xác định hoặc gắn thẻ các từ trong ngôn ngữ đầu vào thành danh từ, động từ, v.v. +2. **Tạo bản dịch**. Tạo bản dịch trực tiếp của từng từ theo định dạng ngôn ngữ đích. + +### Ví dụ câu, từ tiếng Anh sang tiếng Ireland + +Trong tiếng 'Anh', câu _I feel happy_ gồm ba từ theo thứ tự: + +- **chủ ngữ** (I) +- **động từ** (feel) +- **tính từ** (happy) + +Tuy nhiên, trong ngôn ngữ 'Ireland', câu tương tự có cấu trúc ngữ pháp rất khác - cảm xúc như "*happy*" hoặc "*sad*" được diễn đạt như là *đang ở trên bạn*. + +Cụm từ tiếng Anh `I feel happy` trong tiếng Ireland sẽ là `Tá athas orm`. Một bản dịch *theo nghĩa đen* sẽ là `Happy is upon me`. + +Một người nói tiếng Ireland dịch sang tiếng Anh sẽ nói `I feel happy`, không phải `Happy is upon me`, bởi vì họ hiểu ý nghĩa của câu, ngay cả khi từ ngữ và cấu trúc câu khác nhau. + +Thứ tự chính thức của câu trong tiếng Ireland là: + +- **động từ** (Tá hoặc is) +- **tính từ** (athas, hoặc happy) +- **chủ ngữ** (orm, hoặc upon me) + +## Dịch thuật + +Một chương trình dịch thuật đơn giản có thể chỉ dịch từ mà bỏ qua cấu trúc câu. + +✅ Nếu bạn đã học một ngôn ngữ thứ hai (hoặc thứ ba hoặc nhiều hơn) khi trưởng thành, bạn có thể đã bắt đầu bằng cách suy nghĩ bằng ngôn ngữ mẹ đẻ, dịch một khái niệm từng từ trong đầu sang ngôn ngữ thứ hai, và sau đó nói ra bản dịch của mình. Điều này tương tự như những gì các chương trình dịch thuật máy tính đơn giản đang làm. Điều quan trọng là phải vượt qua giai đoạn này để đạt được sự lưu loát! + +Dịch thuật đơn giản dẫn đến các bản dịch sai (và đôi khi hài hước): `I feel happy` dịch theo nghĩa đen thành `Mise bhraitheann athas` trong tiếng Ireland. Điều đó có nghĩa (theo nghĩa đen) là `me feel happy` và không phải là một câu hợp lệ trong tiếng Ireland. Mặc dù tiếng Anh và tiếng Ireland là các ngôn ngữ được nói trên hai hòn đảo láng giềng gần nhau, chúng là những ngôn ngữ rất khác nhau với cấu trúc ngữ pháp khác nhau. + +> Bạn có thể xem một số video về truyền thống ngôn ngữ Ireland như [video này](https://www.youtube.com/watch?v=mRIaLSdRMMs) + +### Các phương pháp học máy + +Cho đến nay, bạn đã học về cách tiếp cận quy tắc chính thức đối với xử lý ngôn ngữ tự nhiên. Một cách tiếp cận khác là bỏ qua ý nghĩa của các từ, và _thay vào đó sử dụng học máy để phát hiện các mẫu_. Điều này có thể hoạt động trong dịch thuật nếu bạn có nhiều văn bản (một *corpus*) hoặc các văn bản (*corpora*) trong cả ngôn ngữ gốc và ngôn ngữ đích. + +Ví dụ, hãy xem xét trường hợp của *Pride and Prejudice*, một tiểu thuyết tiếng Anh nổi tiếng được viết bởi Jane Austen vào năm 1813. Nếu bạn tham khảo cuốn sách bằng tiếng Anh và một bản dịch của con người sang tiếng *Pháp*, bạn có thể phát hiện các cụm từ trong một ngôn ngữ được dịch _theo cách diễn đạt_ sang ngôn ngữ kia. Bạn sẽ làm điều đó trong một phút nữa. + +Ví dụ, khi một cụm từ tiếng Anh như `I have no money` được dịch theo nghĩa đen sang tiếng Pháp, nó có thể trở thành `Je n'ai pas de monnaie`. "Monnaie" là một từ tiếng Pháp dễ gây nhầm lẫn, vì 'money' và 'monnaie' không đồng nghĩa. Một bản dịch tốt hơn mà một người nói tiếng Pháp có thể làm sẽ là `Je n'ai pas d'argent`, vì nó truyền tải ý nghĩa rằng bạn không có tiền (thay vì 'tiền lẻ' là ý nghĩa của 'monnaie'). + +![monnaie](../../../../6-NLP/3-Translation-Sentiment/images/monnaie.png) + +> Hình ảnh bởi [Jen Looper](https://twitter.com/jenlooper) + +Nếu một mô hình ML có đủ các bản dịch của con người để xây dựng một mô hình, nó có thể cải thiện độ chính xác của các bản dịch bằng cách xác định các mẫu phổ biến trong các văn bản đã được dịch trước đó bởi các chuyên gia nói cả hai ngôn ngữ. + +### Bài tập - dịch thuật + +Bạn có thể sử dụng `TextBlob` để dịch các câu. Hãy thử câu nổi tiếng đầu tiên của **Pride and Prejudice**: + +```python +from textblob import TextBlob + +blob = TextBlob( + "It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife!" +) +print(blob.translate(to="fr")) + +``` + +`TextBlob` làm khá tốt việc dịch: "C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme!". + +Có thể cho rằng bản dịch của TextBlob thực sự chính xác hơn so với bản dịch tiếng Pháp năm 1932 của cuốn sách bởi V. Leconte và Ch. Pressoir: + +"C'est une vérité universelle qu'un célibataire pourvu d'une belle fortune doit avoir envie de se marier, et, si peu que l'on sache de son sentiment à cet egard, lorsqu'il arrive dans une nouvelle résidence, cette idée est si bien fixée dans l'esprit de ses voisins qu'ils le considèrent sur-le-champ comme la propriété légitime de l'une ou l'autre de leurs filles." + +Trong trường hợp này, bản dịch được hỗ trợ bởi ML làm tốt hơn so với người dịch, người đã thêm các từ không cần thiết vào lời của tác giả gốc để làm rõ. + +> Điều gì đang xảy ra ở đây? Và tại sao TextBlob lại tốt trong việc dịch thuật? Thực tế, phía sau nó đang sử dụng Google Translate, một AI tinh vi có khả năng phân tích hàng triệu cụm từ để dự đoán các chuỗi tốt nhất cho nhiệm vụ. Không có gì thủ công diễn ra ở đây và bạn cần kết nối internet để sử dụng `blob.translate`. + +✅ Hãy thử một số câu khác. Cái nào tốt hơn, ML hay bản dịch của con người? Trong những trường hợp nào? + +## Phân tích cảm xúc + +Một lĩnh vực khác mà học máy có thể hoạt động rất tốt là phân tích cảm xúc. Một cách tiếp cận không sử dụng ML để phân tích cảm xúc là xác định các từ và cụm từ 'tích cực' và 'tiêu cực'. Sau đó, với một đoạn văn bản mới, tính toán tổng giá trị của các từ tích cực, tiêu cực và trung lập để xác định cảm xúc tổng thể. + +Cách tiếp cận này dễ bị đánh lừa như bạn có thể đã thấy trong nhiệm vụ Marvin - câu `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` là một câu cảm xúc tiêu cực mang tính châm biếm, nhưng thuật toán đơn giản phát hiện 'great', 'wonderful', 'glad' là tích cực và 'waste', 'lost' và 'dark' là tiêu cực. Cảm xúc tổng thể bị ảnh hưởng bởi những từ mâu thuẫn này. + +✅ Dừng lại một chút và nghĩ về cách chúng ta truyền tải sự châm biếm khi nói. Ngữ điệu đóng vai trò lớn. Hãy thử nói câu "Well, that film was awesome" theo nhiều cách khác nhau để khám phá cách giọng nói của bạn truyền tải ý nghĩa. + +### Các phương pháp ML + +Cách tiếp cận ML sẽ là thu thập thủ công các đoạn văn bản tiêu cực và tích cực - tweet, hoặc đánh giá phim, hoặc bất cứ điều gì mà con người đã đưa ra điểm số *và* ý kiến bằng văn bản. Sau đó, các kỹ thuật NLP có thể được áp dụng để phân tích ý kiến và điểm số, để các mẫu xuất hiện (ví dụ: các đánh giá phim tích cực có xu hướng chứa cụm từ 'Oscar worthy' nhiều hơn các đánh giá phim tiêu cực, hoặc các đánh giá nhà hàng tích cực nói 'gourmet' nhiều hơn 'disgusting'). + +> ⚖️ **Ví dụ**: Nếu bạn làm việc trong văn phòng của một chính trị gia và có một luật mới đang được tranh luận, các cử tri có thể viết email đến văn phòng để ủng hộ hoặc phản đối luật mới đó. Giả sử bạn được giao nhiệm vụ đọc email và phân loại chúng thành 2 nhóm, *ủng hộ* và *phản đối*. Nếu có rất nhiều email, bạn có thể bị quá tải khi cố gắng đọc tất cả. Sẽ thật tuyệt nếu một bot có thể đọc tất cả cho bạn, hiểu chúng và cho bạn biết mỗi email thuộc nhóm nào? +> +> Một cách để đạt được điều đó là sử dụng Học Máy. Bạn sẽ huấn luyện mô hình với một phần email *phản đối* và một phần email *ủng hộ*. Mô hình sẽ có xu hướng liên kết các cụm từ và từ với nhóm phản đối và nhóm ủng hộ, *nhưng nó sẽ không hiểu bất kỳ nội dung nào*, chỉ là các từ và mẫu nhất định có khả năng xuất hiện nhiều hơn trong email *phản đối* hoặc *ủng hộ*. Bạn có thể kiểm tra nó với một số email mà bạn chưa sử dụng để huấn luyện mô hình, và xem liệu nó có đưa ra kết luận giống như bạn không. Sau đó, khi bạn hài lòng với độ chính xác của mô hình, bạn có thể xử lý các email trong tương lai mà không cần phải đọc từng cái. + +✅ Quy trình này có giống với các quy trình bạn đã sử dụng trong các bài học trước không? + +## Bài tập - các câu cảm xúc + +Cảm xúc được đo bằng *độ phân cực* từ -1 đến 1, nghĩa là -1 là cảm xúc tiêu cực nhất, và 1 là cảm xúc tích cực nhất. Cảm xúc cũng được đo bằng điểm từ 0 - 1 cho tính khách quan (0) và tính chủ quan (1). + +Hãy xem lại *Pride and Prejudice* của Jane Austen. Văn bản có sẵn tại [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm). Mẫu dưới đây hiển thị một chương trình ngắn phân tích cảm xúc của câu đầu tiên và câu cuối cùng từ cuốn sách và hiển thị độ phân cực cảm xúc và điểm số khách quan/chủ quan của nó. + +Bạn nên sử dụng thư viện `TextBlob` (được mô tả ở trên) để xác định `sentiment` (bạn không cần phải tự viết trình tính toán cảm xúc) trong nhiệm vụ sau. + +```python +from textblob import TextBlob + +quote1 = """It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife.""" + +quote2 = """Darcy, as well as Elizabeth, really loved them; and they were both ever sensible of the warmest gratitude towards the persons who, by bringing her into Derbyshire, had been the means of uniting them.""" + +sentiment1 = TextBlob(quote1).sentiment +sentiment2 = TextBlob(quote2).sentiment + +print(quote1 + " has a sentiment of " + str(sentiment1)) +print(quote2 + " has a sentiment of " + str(sentiment2)) +``` + +Bạn sẽ thấy đầu ra sau: + +```output +It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want # of a wife. has a sentiment of Sentiment(polarity=0.20952380952380953, subjectivity=0.27142857142857146) + +Darcy, as well as Elizabeth, really loved them; and they were + both ever sensible of the warmest gratitude towards the persons + who, by bringing her into Derbyshire, had been the means of + uniting them. has a sentiment of Sentiment(polarity=0.7, subjectivity=0.8) +``` + +## Thử thách - kiểm tra độ phân cực cảm xúc + +Nhiệm vụ của bạn là xác định, sử dụng độ phân cực cảm xúc, liệu *Pride and Prejudice* có nhiều câu hoàn toàn tích cực hơn câu hoàn toàn tiêu cực hay không. Đối với nhiệm vụ này, bạn có thể giả định rằng điểm độ phân cực là 1 hoặc -1 tương ứng với cảm xúc hoàn toàn tích cực hoặc tiêu cực. + +**Các bước:** + +1. Tải xuống một [bản sao của Pride and Prejudice](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) từ Project Gutenberg dưới dạng tệp .txt. Loại bỏ siêu dữ liệu ở đầu và cuối tệp, chỉ để lại văn bản gốc +2. Mở tệp trong Python và trích xuất nội dung dưới dạng chuỗi +3. Tạo một TextBlob bằng chuỗi của cuốn sách +4. Phân tích từng câu trong cuốn sách trong một vòng lặp + 1. Nếu độ phân cực là 1 hoặc -1, lưu câu vào một mảng hoặc danh sách các thông điệp tích cực hoặc tiêu cực +5. Cuối cùng, in ra tất cả các câu tích cực và tiêu cực (riêng biệt) và số lượng của mỗi loại. + +Đây là một [giải pháp mẫu](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb). + +✅ Kiểm tra kiến thức + +1. Cảm xúc dựa trên các từ được sử dụng trong câu, nhưng liệu mã có *hiểu* các từ không? +2. Bạn có nghĩ rằng độ phân cực cảm xúc là chính xác không, hay nói cách khác, bạn có *đồng ý* với các điểm số không? + 1. Đặc biệt, bạn có đồng ý hay không đồng ý với độ phân cực **tích cực** tuyệt đối của các câu sau đây? + * “What an excellent father you have, girls!” said she, when the door was shut. + * “Your examination of Mr. Darcy is over, I presume,” said Miss Bingley; “and pray what is the result?” “I am perfectly convinced by it that Mr. Darcy has no defect. + * How wonderfully these sort of things occur! + * I have the greatest dislike in the world to that sort of thing. + * Charlotte is an excellent manager, I dare say. + * “This is delightful indeed! + * I am so happy! + * Your idea of the ponies is delightful. + 2. Ba câu tiếp theo được đánh giá với cảm xúc tích cực tuyệt đối, nhưng khi đọc kỹ, chúng không phải là câu tích cực. Tại sao phân tích cảm xúc lại nghĩ rằng chúng là câu tích cực? + * Happy shall I be, when his stay at Netherfield is over!” “I wish I could say anything to comfort you,” replied Elizabeth; “but it is wholly out of my power. + * If I could but see you as happy! + * Our distress, my dear Lizzy, is very great. + 3. Bạn có đồng ý hay không đồng ý với độ phân cực **tiêu cực** tuyệt đối của các câu sau đây? + - Everybody is disgusted with his pride. + - “I should like to know how he behaves among strangers.” “You shall hear then—but prepare yourself for something very dreadful. + - The pause was to Elizabeth’s feelings dreadful. + - It would be dreadful! + +✅ Bất kỳ người yêu thích Jane Austen nào cũng sẽ hiểu rằng bà thường sử dụng các cuốn sách của mình để phê phán các khía cạnh lố bịch hơn của xã hội Anh thời Regency. Elizabeth Bennett, nhân vật chính trong *Pride and Prejudice*, là một nhà quan sát xã hội sắc sảo (như tác giả) và ngôn ngữ của cô thường rất tinh tế. Ngay cả Mr. Darcy (người yêu trong câu chuyện) cũng nhận xét về cách sử dụng ngôn ngữ vui tươi và trêu chọc của Elizabeth: "Tôi đã có niềm vui được quen biết bạn đủ lâu để biết rằng bạn rất thích thú khi thỉnh thoảng bày tỏ những ý kiến mà thực tế không phải của bạn." + +--- + +## 🚀Thử thách + +Bạn có thể làm cho Marvin tốt hơn bằng cách trích xuất các đặc điểm khác từ đầu vào của người dùng không? + +## [Câu hỏi sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +## Ôn tập & Tự học +Có nhiều cách để trích xuất cảm xúc từ văn bản. Hãy nghĩ về các ứng dụng kinh doanh có thể sử dụng kỹ thuật này. Hãy nghĩ về cách nó có thể gặp sai sót. Đọc thêm về các hệ thống phân tích cảm xúc tiên tiến, sẵn sàng cho doanh nghiệp như [Azure Text Analysis](https://docs.microsoft.com/azure/cognitive-services/Text-Analytics/how-tos/text-analytics-how-to-sentiment-analysis?tabs=version-3-1?WT.mc_id=academic-77952-leestott). Thử nghiệm một số câu từ Pride and Prejudice ở trên và xem liệu nó có thể phát hiện được sắc thái hay không. + +## Bài tập + +[Giấy phép sáng tạo](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 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 diff --git a/translations/vi/6-NLP/3-Translation-Sentiment/assignment.md b/translations/vi/6-NLP/3-Translation-Sentiment/assignment.md new file mode 100644 index 00000000..acde3369 --- /dev/null +++ b/translations/vi/6-NLP/3-Translation-Sentiment/assignment.md @@ -0,0 +1,25 @@ + +# Giấy phép sáng tạo + +## Hướng dẫn + +Trong [notebook này](https://www.kaggle.com/jenlooper/emily-dickinson-word-frequency), bạn sẽ tìm thấy hơn 500 bài thơ của Emily Dickinson đã được phân tích cảm xúc trước đó bằng cách sử dụng Azure text analytics. Sử dụng tập dữ liệu này, hãy phân tích nó bằng các kỹ thuật được mô tả trong bài học. Cảm xúc được gợi ý của một bài thơ có khớp với quyết định của dịch vụ Azure tiên tiến hơn không? Theo ý kiến của bạn, tại sao hoặc tại sao không? Có điều gì khiến bạn ngạc nhiên không? + +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| --------- | ------------------------------------------------------------------------- | ------------------------------------------------------- | ----------------------- | +| | Một notebook được trình bày với phân tích vững chắc về mẫu đầu ra của tác giả | Notebook chưa hoàn chỉnh hoặc không thực hiện phân tích | Không có notebook nào được trình bày | + +--- + +**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 diff --git a/translations/vi/6-NLP/3-Translation-Sentiment/solution/Julia/README.md b/translations/vi/6-NLP/3-Translation-Sentiment/solution/Julia/README.md new file mode 100644 index 00000000..416a5169 --- /dev/null +++ b/translations/vi/6-NLP/3-Translation-Sentiment/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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, nên 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 diff --git a/translations/vi/6-NLP/3-Translation-Sentiment/solution/R/README.md b/translations/vi/6-NLP/3-Translation-Sentiment/solution/R/README.md new file mode 100644 index 00000000..f6e03c95 --- /dev/null +++ b/translations/vi/6-NLP/3-Translation-Sentiment/solution/R/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 diff --git a/translations/vi/6-NLP/4-Hotel-Reviews-1/README.md b/translations/vi/6-NLP/4-Hotel-Reviews-1/README.md new file mode 100644 index 00000000..6aec89ee --- /dev/null +++ b/translations/vi/6-NLP/4-Hotel-Reviews-1/README.md @@ -0,0 +1,417 @@ + +# Phân tích cảm xúc với đánh giá khách sạn - xử lý dữ liệu + +Trong phần này, bạn sẽ sử dụng các kỹ thuật đã học ở các bài trước để thực hiện phân tích dữ liệu khám phá trên một tập dữ liệu lớn. Sau khi hiểu rõ về tính hữu ích của các cột khác nhau, bạn sẽ học: + +- cách loại bỏ các cột không cần thiết +- cách tính toán dữ liệu mới dựa trên các cột hiện có +- cách lưu tập dữ liệu kết quả để sử dụng trong thử thách cuối cùng + +## [Câu hỏi trước bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +### Giới thiệu + +Cho đến nay, bạn đã học về cách dữ liệu văn bản khác biệt hoàn toàn so với dữ liệu dạng số. Nếu đó là văn bản được viết hoặc nói bởi con người, nó có thể được phân tích để tìm ra các mẫu, tần suất, cảm xúc và ý nghĩa. Bài học này sẽ đưa bạn vào một tập dữ liệu thực tế với một thử thách thực tế: **[515K Đánh giá Khách sạn ở Châu Âu](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)** và bao gồm giấy phép [CC0: Public Domain license](https://creativecommons.org/publicdomain/zero/1.0/). Tập dữ liệu này được thu thập từ Booking.com từ các nguồn công khai. Người tạo tập dữ liệu là Jiashen Liu. + +### Chuẩn bị + +Bạn sẽ cần: + +* Khả năng chạy các notebook .ipynb bằng Python 3 +* pandas +* NLTK, [cài đặt tại đây](https://www.nltk.org/install.html) +* Tập dữ liệu có sẵn trên Kaggle [515K Đánh giá Khách sạn ở Châu Âu](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe). Tập dữ liệu này có dung lượng khoảng 230 MB sau khi giải nén. Tải xuống và lưu vào thư mục gốc `/data` liên quan đến các bài học NLP này. + +## Phân tích dữ liệu khám phá + +Thử thách này giả định rằng bạn đang xây dựng một bot gợi ý khách sạn sử dụng phân tích cảm xúc và điểm đánh giá của khách. Tập dữ liệu bạn sẽ sử dụng bao gồm các đánh giá của 1493 khách sạn khác nhau tại 6 thành phố. + +Sử dụng Python, tập dữ liệu đánh giá khách sạn, và phân tích cảm xúc của NLTK, bạn có thể tìm ra: + +* Những từ và cụm từ nào được sử dụng thường xuyên nhất trong các đánh giá? +* Các *thẻ* chính thức mô tả khách sạn có liên quan đến điểm đánh giá không (ví dụ: liệu các đánh giá tiêu cực hơn có xuất hiện nhiều hơn đối với một khách sạn dành cho *Gia đình có trẻ nhỏ* so với *Khách du lịch một mình*, có thể cho thấy khách sạn phù hợp hơn với *Khách du lịch một mình*)? +* Điểm cảm xúc của NLTK có 'đồng ý' với điểm số đánh giá của khách không? + +#### Tập dữ liệu + +Hãy khám phá tập dữ liệu mà bạn đã tải xuống và lưu cục bộ. Mở tệp trong một trình soạn thảo như VS Code hoặc thậm chí Excel. + +Các tiêu đề trong tập dữ liệu như sau: + +*Hotel_Address, Additional_Number_of_Scoring, Review_Date, Average_Score, Hotel_Name, Reviewer_Nationality, Negative_Review, Review_Total_Negative_Word_Counts, Total_Number_of_Reviews, Positive_Review, Review_Total_Positive_Word_Counts, Total_Number_of_Reviews_Reviewer_Has_Given, Reviewer_Score, Tags, days_since_review, lat, lng* + +Dưới đây là cách nhóm các cột để dễ dàng kiểm tra hơn: +##### Các cột về khách sạn + +* `Hotel_Name`, `Hotel_Address`, `lat` (vĩ độ), `lng` (kinh độ) + * Sử dụng *lat* và *lng* bạn có thể vẽ bản đồ bằng Python hiển thị vị trí khách sạn (có thể mã hóa màu cho các đánh giá tiêu cực và tích cực) + * Hotel_Address không rõ ràng là hữu ích với chúng ta, và có thể sẽ được thay thế bằng quốc gia để dễ dàng sắp xếp và tìm kiếm + +**Các cột meta-review của khách sạn** + +* `Average_Score` + * Theo người tạo tập dữ liệu, cột này là *Điểm trung bình của khách sạn, được tính dựa trên nhận xét mới nhất trong năm qua*. Đây có vẻ là một cách tính điểm không bình thường, nhưng vì đây là dữ liệu được thu thập nên chúng ta có thể tạm chấp nhận. + + ✅ Dựa trên các cột khác trong dữ liệu này, bạn có thể nghĩ ra cách nào khác để tính điểm trung bình không? + +* `Total_Number_of_Reviews` + * Tổng số đánh giá mà khách sạn này đã nhận được - không rõ (nếu không viết mã) liệu điều này có đề cập đến các đánh giá trong tập dữ liệu hay không. +* `Additional_Number_of_Scoring` + * Điều này có nghĩa là một điểm số đánh giá đã được đưa ra nhưng không có đánh giá tích cực hoặc tiêu cực nào được viết bởi người đánh giá. + +**Các cột đánh giá** + +- `Reviewer_Score` + - Đây là giá trị số với tối đa 1 chữ số thập phân giữa giá trị tối thiểu và tối đa là 2.5 và 10 + - Không được giải thích tại sao 2.5 là điểm thấp nhất có thể +- `Negative_Review` + - Nếu người đánh giá không viết gì, trường này sẽ có "**No Negative**" + - Lưu ý rằng người đánh giá có thể viết một đánh giá tích cực trong cột Negative review (ví dụ: "không có gì xấu về khách sạn này") +- `Review_Total_Negative_Word_Counts` + - Số lượng từ tiêu cực cao hơn cho thấy điểm số thấp hơn (mà không kiểm tra cảm xúc) +- `Positive_Review` + - Nếu người đánh giá không viết gì, trường này sẽ có "**No Positive**" + - Lưu ý rằng người đánh giá có thể viết một đánh giá tiêu cực trong cột Positive review (ví dụ: "không có gì tốt về khách sạn này cả") +- `Review_Total_Positive_Word_Counts` + - Số lượng từ tích cực cao hơn cho thấy điểm số cao hơn (mà không kiểm tra cảm xúc) +- `Review_Date` và `days_since_review` + - Có thể áp dụng một thước đo độ mới hoặc cũ cho một đánh giá (các đánh giá cũ có thể không chính xác bằng các đánh giá mới vì quản lý khách sạn đã thay đổi, hoặc đã được cải tạo, hoặc đã thêm một hồ bơi, v.v.) +- `Tags` + - Đây là các mô tả ngắn mà người đánh giá có thể chọn để mô tả loại khách mà họ là (ví dụ: đi một mình hoặc gia đình), loại phòng họ đã ở, thời gian lưu trú và cách đánh giá được gửi. + - Thật không may, việc sử dụng các thẻ này gặp vấn đề, hãy xem phần bên dưới thảo luận về tính hữu ích của chúng. + +**Các cột về người đánh giá** + +- `Total_Number_of_Reviews_Reviewer_Has_Given` + - Điều này có thể là một yếu tố trong mô hình gợi ý, ví dụ, nếu bạn có thể xác định rằng những người đánh giá thường xuyên với hàng trăm đánh giá có xu hướng tiêu cực hơn là tích cực. Tuy nhiên, người đánh giá của bất kỳ đánh giá cụ thể nào không được xác định bằng một mã duy nhất, và do đó không thể liên kết với một tập hợp các đánh giá. Có 30 người đánh giá với 100 hoặc nhiều đánh giá hơn, nhưng khó thấy điều này có thể hỗ trợ mô hình gợi ý như thế nào. +- `Reviewer_Nationality` + - Một số người có thể nghĩ rằng một số quốc tịch có xu hướng đưa ra đánh giá tích cực hoặc tiêu cực hơn vì một khuynh hướng quốc gia. Hãy cẩn thận khi xây dựng những quan điểm giai thoại như vậy vào các mô hình của bạn. Đây là những khuôn mẫu quốc gia (và đôi khi là chủng tộc), và mỗi người đánh giá là một cá nhân đã viết một đánh giá dựa trên trải nghiệm của họ. Nó có thể đã được lọc qua nhiều lăng kính như các lần lưu trú khách sạn trước đó, khoảng cách đã đi, và tính cách cá nhân của họ. Việc nghĩ rằng quốc tịch của họ là lý do cho điểm số đánh giá là khó biện minh. + +##### Ví dụ + +| Average Score | Total Number Reviews | Reviewer Score | Negative
                                          Review | Positive Review | Tags | +| -------------- | ---------------------- | ---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------- | +| 7.8 | 1945 | 2.5 | Đây hiện tại không phải là một khách sạn mà là một công trường xây dựng Tôi bị làm phiền từ sáng sớm và cả ngày với tiếng ồn xây dựng không thể chấp nhận được trong khi nghỉ ngơi sau một chuyến đi dài và làm việc trong phòng Người ta làm việc cả ngày với máy khoan trong các phòng liền kề Tôi yêu cầu đổi phòng nhưng không có phòng yên tĩnh nào có sẵn Tệ hơn nữa, tôi bị tính phí quá mức Tôi trả phòng vào buổi tối vì tôi phải rời đi chuyến bay rất sớm và nhận được hóa đơn phù hợp Một ngày sau khách sạn đã thực hiện một khoản phí khác mà không có sự đồng ý của tôi vượt quá giá đã đặt Đây là một nơi khủng khiếp Đừng tự làm khổ mình bằng cách đặt phòng ở đây | Không có gì Nơi khủng khiếp Tránh xa | Chuyến công tác Cặp đôi Phòng đôi tiêu chuẩn Lưu trú 2 đêm | + +Như bạn có thể thấy, vị khách này đã không có một kỳ nghỉ vui vẻ tại khách sạn này. Khách sạn có điểm trung bình tốt là 7.8 và 1945 đánh giá, nhưng người đánh giá này đã cho điểm 2.5 và viết 115 từ về việc kỳ nghỉ của họ tiêu cực như thế nào. Nếu họ không viết gì trong cột Positive_Review, bạn có thể suy luận rằng không có gì tích cực, nhưng họ đã viết 7 từ cảnh báo. Nếu chúng ta chỉ đếm từ thay vì ý nghĩa, hoặc cảm xúc của các từ, chúng ta có thể có một cái nhìn sai lệch về ý định của người đánh giá. Lạ thay, điểm số 2.5 của họ gây nhầm lẫn, bởi vì nếu kỳ nghỉ tại khách sạn đó tệ như vậy, tại sao lại cho bất kỳ điểm nào? Khi điều tra tập dữ liệu kỹ lưỡng, bạn sẽ thấy rằng điểm thấp nhất có thể là 2.5, không phải 0. Điểm cao nhất có thể là 10. + +##### Tags + +Như đã đề cập ở trên, thoạt nhìn, ý tưởng sử dụng `Tags` để phân loại dữ liệu có vẻ hợp lý. Tuy nhiên, các thẻ này không được chuẩn hóa, điều này có nghĩa là trong một khách sạn, các tùy chọn có thể là *Phòng đơn*, *Phòng đôi*, và *Phòng đôi tiêu chuẩn*, nhưng ở khách sạn tiếp theo, chúng là *Phòng đơn cao cấp*, *Phòng Queen cổ điển*, và *Phòng King điều hành*. Đây có thể là cùng một loại phòng, nhưng có quá nhiều biến thể khiến lựa chọn trở thành: + +1. Cố gắng thay đổi tất cả các thuật ngữ thành một tiêu chuẩn duy nhất, điều này rất khó khăn, vì không rõ đường dẫn chuyển đổi sẽ là gì trong mỗi trường hợp (ví dụ: *Phòng đơn cổ điển* ánh xạ tới *Phòng đơn* nhưng *Phòng Queen cao cấp với sân vườn hoặc tầm nhìn thành phố* khó ánh xạ hơn) + +1. Chúng ta có thể áp dụng cách tiếp cận NLP và đo tần suất của các thuật ngữ nhất định như *Đi một mình*, *Khách công tác*, hoặc *Gia đình có trẻ nhỏ* khi chúng áp dụng cho mỗi khách sạn, và đưa yếu tố này vào mô hình gợi ý. + +Các thẻ thường (nhưng không phải luôn luôn) là một trường duy nhất chứa danh sách 5 đến 6 giá trị được phân tách bằng dấu phẩy tương ứng với *Loại chuyến đi*, *Loại khách*, *Loại phòng*, *Số đêm*, và *Loại thiết bị đánh giá được gửi*. Tuy nhiên, vì một số người đánh giá không điền vào mỗi trường (họ có thể để trống một trường), các giá trị không phải lúc nào cũng theo cùng một thứ tự. + +Ví dụ, hãy lấy *Loại nhóm*. Có 1025 khả năng duy nhất trong trường này trong cột `Tags`, và không may chỉ một số trong số đó đề cập đến nhóm (một số là loại phòng, v.v.). Nếu bạn lọc chỉ những giá trị đề cập đến gia đình, kết quả chứa nhiều loại *Phòng gia đình*. Nếu bạn bao gồm thuật ngữ *với*, tức là đếm các giá trị *Gia đình với*, kết quả sẽ tốt hơn, với hơn 80,000 trong số 515,000 kết quả chứa cụm từ "Gia đình với trẻ nhỏ" hoặc "Gia đình với trẻ lớn". + +Điều này có nghĩa là cột thẻ không hoàn toàn vô dụng với chúng ta, nhưng sẽ cần một số công việc để làm cho nó hữu ích. + +##### Điểm trung bình của khách sạn + +Có một số điểm kỳ lạ hoặc không nhất quán với tập dữ liệu mà tôi không thể giải thích, nhưng được minh họa ở đây để bạn nhận thức được khi xây dựng các mô hình của mình. Nếu bạn tìm ra, hãy cho chúng tôi biết trong phần thảo luận! + +Tập dữ liệu có các cột sau liên quan đến điểm trung bình và số lượng đánh giá: + +1. Hotel_Name +2. Additional_Number_of_Scoring +3. Average_Score +4. Total_Number_of_Reviews +5. Reviewer_Score + +Khách sạn duy nhất có số lượng đánh giá nhiều nhất trong tập dữ liệu này là *Britannia International Hotel Canary Wharf* với 4789 đánh giá trong số 515,000. Nhưng nếu chúng ta xem giá trị `Total_Number_of_Reviews` cho khách sạn này, nó là 9086. Bạn có thể suy luận rằng có nhiều điểm số hơn mà không có đánh giá, vì vậy có lẽ chúng ta nên thêm giá trị cột `Additional_Number_of_Scoring`. Giá trị đó là 2682, và cộng nó với 4789 được 7471, vẫn thiếu 1615 so với `Total_Number_of_Reviews`. + +Nếu bạn lấy cột `Average_Score`, bạn có thể suy luận rằng đó là điểm trung bình của các đánh giá trong tập dữ liệu, nhưng mô tả từ Kaggle là "*Điểm trung bình của khách sạn, được tính dựa trên nhận xét mới nhất trong năm qua*". Điều này có vẻ không hữu ích lắm, nhưng chúng ta có thể tự tính điểm trung bình dựa trên điểm số đánh giá trong tập dữ liệu. Sử dụng cùng một khách sạn làm ví dụ, điểm trung bình của khách sạn được đưa ra là 7.1 nhưng điểm số tính toán (điểm trung bình của người đánh giá *trong* tập dữ liệu) là 6.8. Điều này gần đúng, nhưng không phải là giá trị giống nhau, và chúng ta chỉ có thể đoán rằng các điểm số được đưa ra trong các đánh giá `Additional_Number_of_Scoring` đã tăng điểm trung bình lên 7.1. Thật không may, không có cách nào để kiểm tra hoặc chứng minh khẳng định đó, rất khó để sử dụng hoặc tin tưởng `Average_Score`, `Additional_Number_of_Scoring` và `Total_Number_of_Reviews` khi chúng dựa trên, hoặc đề cập đến, dữ liệu mà chúng ta không có. + +Để làm phức tạp thêm, khách sạn có số lượng đánh giá cao thứ hai có điểm trung bình tính toán là 8.12 và điểm trung bình trong tập dữ liệu là 8.1. Điều này có phải là điểm số chính xác hay là sự trùng hợp ngẫu nhiên hoặc khách sạn đầu tiên là một sự không nhất quán? + +Với khả năng rằng các khách sạn này có thể là một ngoại lệ, và có thể hầu hết các giá trị khớp nhau (nhưng một số không vì lý do nào đó), chúng ta sẽ viết một chương trình ngắn tiếp theo để khám phá các giá trị trong tập dữ liệu và xác định cách sử dụng đúng (hoặc không sử dụng) các giá trị. +> 🚨 Một lưu ý quan trọng +> +> Khi làm việc với bộ dữ liệu này, bạn sẽ viết mã để tính toán điều gì đó từ văn bản mà không cần phải đọc hoặc phân tích văn bản trực tiếp. Đây chính là cốt lõi của NLP, diễn giải ý nghĩa hoặc cảm xúc mà không cần con người thực hiện. Tuy nhiên, có khả năng bạn sẽ đọc một số đánh giá tiêu cực. Tôi khuyên bạn không nên làm vậy, vì bạn không cần phải làm thế. Một số đánh giá tiêu cực có thể ngớ ngẩn hoặc không liên quan, chẳng hạn như "Thời tiết không tốt", điều này nằm ngoài khả năng kiểm soát của khách sạn, hoặc thực tế là bất kỳ ai. Nhưng cũng có mặt tối trong một số đánh giá. Đôi khi các đánh giá tiêu cực mang tính phân biệt chủng tộc, giới tính, hoặc tuổi tác. Điều này thật đáng tiếc nhưng không thể tránh khỏi trong một bộ dữ liệu được thu thập từ một trang web công cộng. Một số người viết đánh giá mà bạn có thể thấy khó chịu, không thoải mái, hoặc gây tổn thương. Tốt hơn là để mã đo lường cảm xúc thay vì tự mình đọc chúng và cảm thấy khó chịu. Dù vậy, chỉ có một số ít người viết những điều như vậy, nhưng chúng vẫn tồn tại. +## Bài tập - Khám phá dữ liệu +### Tải dữ liệu + +Đủ rồi việc kiểm tra dữ liệu bằng mắt, bây giờ bạn sẽ viết một số đoạn mã để tìm câu trả lời! Phần này sử dụng thư viện pandas. Nhiệm vụ đầu tiên của bạn là đảm bảo rằng bạn có thể tải và đọc dữ liệu CSV. Thư viện pandas có một trình tải CSV nhanh, và kết quả được đặt trong một dataframe, giống như trong các bài học trước. Tệp CSV mà chúng ta đang tải có hơn nửa triệu dòng, nhưng chỉ có 17 cột. Pandas cung cấp nhiều cách mạnh mẽ để tương tác với dataframe, bao gồm khả năng thực hiện các thao tác trên từng dòng. + +Từ đây trở đi trong bài học này, sẽ có các đoạn mã và một số giải thích về mã cũng như thảo luận về ý nghĩa của kết quả. Sử dụng tệp _notebook.ipynb_ đi kèm để viết mã của bạn. + +Hãy bắt đầu bằng cách tải tệp dữ liệu mà bạn sẽ sử dụng: + +```python +# Load the hotel reviews from CSV +import pandas as pd +import time +# importing time so the start and end time can be used to calculate file loading time +print("Loading data file now, this could take a while depending on file size") +start = time.time() +# df is 'DataFrame' - make sure you downloaded the file to the data folder +df = pd.read_csv('../../data/Hotel_Reviews.csv') +end = time.time() +print("Loading took " + str(round(end - start, 2)) + " seconds") +``` + +Bây giờ dữ liệu đã được tải, chúng ta có thể thực hiện một số thao tác trên nó. Giữ đoạn mã này ở đầu chương trình của bạn cho phần tiếp theo. + +## Khám phá dữ liệu + +Trong trường hợp này, dữ liệu đã được *làm sạch*, nghĩa là nó đã sẵn sàng để làm việc và không có các ký tự trong ngôn ngữ khác có thể gây lỗi cho các thuật toán chỉ mong đợi ký tự tiếng Anh. + +✅ Bạn có thể phải làm việc với dữ liệu yêu cầu một số xử lý ban đầu để định dạng trước khi áp dụng các kỹ thuật NLP, nhưng không phải lần này. Nếu bạn phải làm, bạn sẽ xử lý các ký tự không phải tiếng Anh như thế nào? + +Dành một chút thời gian để đảm bảo rằng sau khi dữ liệu được tải, bạn có thể khám phá nó bằng mã. Rất dễ bị thu hút vào các cột `Negative_Review` và `Positive_Review`. Chúng chứa văn bản tự nhiên để các thuật toán NLP của bạn xử lý. Nhưng khoan đã! Trước khi bạn bắt đầu với NLP và phân tích cảm xúc, bạn nên làm theo đoạn mã dưới đây để xác định xem các giá trị được cung cấp trong tập dữ liệu có khớp với các giá trị bạn tính toán bằng pandas hay không. + +## Các thao tác trên dataframe + +Nhiệm vụ đầu tiên trong bài học này là kiểm tra xem các khẳng định sau có đúng không bằng cách viết một số đoạn mã để kiểm tra dataframe (mà không thay đổi nó). + +> Giống như nhiều nhiệm vụ lập trình, có nhiều cách để hoàn thành, nhưng lời khuyên tốt là làm theo cách đơn giản và dễ dàng nhất, đặc biệt nếu nó sẽ dễ hiểu hơn khi bạn quay lại đoạn mã này trong tương lai. Với dataframe, có một API toàn diện thường sẽ có cách để làm điều bạn muốn một cách hiệu quả. + +Hãy coi các câu hỏi sau như các nhiệm vụ lập trình và cố gắng trả lời chúng mà không nhìn vào giải pháp. + +1. In ra *shape* của dataframe mà bạn vừa tải (shape là số dòng và cột). +2. Tính tần suất xuất hiện của quốc tịch người đánh giá: + 1. Có bao nhiêu giá trị khác nhau cho cột `Reviewer_Nationality` và chúng là gì? + 2. Quốc tịch người đánh giá nào phổ biến nhất trong tập dữ liệu (in tên quốc gia và số lượng đánh giá)? + 3. 10 quốc tịch phổ biến tiếp theo và tần suất xuất hiện của chúng là gì? +3. Khách sạn nào được đánh giá nhiều nhất bởi mỗi quốc tịch trong top 10 quốc tịch người đánh giá? +4. Có bao nhiêu đánh giá cho mỗi khách sạn (tần suất xuất hiện của khách sạn) trong tập dữ liệu? +5. Mặc dù có cột `Average_Score` cho mỗi khách sạn trong tập dữ liệu, bạn cũng có thể tính điểm trung bình (lấy trung bình tất cả điểm đánh giá của người đánh giá trong tập dữ liệu cho mỗi khách sạn). Thêm một cột mới vào dataframe của bạn với tiêu đề cột `Calc_Average_Score` chứa điểm trung bình đã tính toán. +6. Có khách sạn nào có giá trị `Average_Score` và `Calc_Average_Score` giống nhau (làm tròn đến 1 chữ số thập phân) không? + 1. Thử viết một hàm Python nhận một Series (dòng) làm tham số và so sánh các giá trị, in ra thông báo khi các giá trị không bằng nhau. Sau đó sử dụng phương thức `.apply()` để xử lý từng dòng với hàm này. +7. Tính và in ra có bao nhiêu dòng có giá trị cột `Negative_Review` là "No Negative". +8. Tính và in ra có bao nhiêu dòng có giá trị cột `Positive_Review` là "No Positive". +9. Tính và in ra có bao nhiêu dòng có giá trị cột `Positive_Review` là "No Positive" **và** giá trị cột `Negative_Review` là "No Negative". + +### Đáp án bằng mã + +1. In ra *shape* của dataframe mà bạn vừa tải (shape là số dòng và cột). + + ```python + print("The shape of the data (rows, cols) is " + str(df.shape)) + > The shape of the data (rows, cols) is (515738, 17) + ``` + +2. Tính tần suất xuất hiện của quốc tịch người đánh giá: + + 1. Có bao nhiêu giá trị khác nhau cho cột `Reviewer_Nationality` và chúng là gì? + 2. Quốc tịch người đánh giá nào phổ biến nhất trong tập dữ liệu (in tên quốc gia và số lượng đánh giá)? + + ```python + # value_counts() creates a Series object that has index and values in this case, the country and the frequency they occur in reviewer nationality + nationality_freq = df["Reviewer_Nationality"].value_counts() + print("There are " + str(nationality_freq.size) + " different nationalities") + # print first and last rows of the Series. Change to nationality_freq.to_string() to print all of the data + print(nationality_freq) + + There are 227 different nationalities + United Kingdom 245246 + United States of America 35437 + Australia 21686 + Ireland 14827 + United Arab Emirates 10235 + ... + Comoros 1 + Palau 1 + Northern Mariana Islands 1 + Cape Verde 1 + Guinea 1 + Name: Reviewer_Nationality, Length: 227, dtype: int64 + ``` + + 3. 10 quốc tịch phổ biến tiếp theo và tần suất xuất hiện của chúng là gì? + + ```python + print("The highest frequency reviewer nationality is " + str(nationality_freq.index[0]).strip() + " with " + str(nationality_freq[0]) + " reviews.") + # Notice there is a leading space on the values, strip() removes that for printing + # What is the top 10 most common nationalities and their frequencies? + print("The next 10 highest frequency reviewer nationalities are:") + print(nationality_freq[1:11].to_string()) + + The highest frequency reviewer nationality is United Kingdom with 245246 reviews. + The next 10 highest frequency reviewer nationalities are: + United States of America 35437 + Australia 21686 + Ireland 14827 + United Arab Emirates 10235 + Saudi Arabia 8951 + Netherlands 8772 + Switzerland 8678 + Germany 7941 + Canada 7894 + France 7296 + ``` + +3. Khách sạn nào được đánh giá nhiều nhất bởi mỗi quốc tịch trong top 10 quốc tịch người đánh giá? + + ```python + # What was the most frequently reviewed hotel for the top 10 nationalities + # Normally with pandas you will avoid an explicit loop, but wanted to show creating a new dataframe using criteria (don't do this with large amounts of data because it could be very slow) + for nat in nationality_freq[:10].index: + # First, extract all the rows that match the criteria into a new dataframe + nat_df = df[df["Reviewer_Nationality"] == nat] + # Now get the hotel freq + freq = nat_df["Hotel_Name"].value_counts() + print("The most reviewed hotel for " + str(nat).strip() + " was " + str(freq.index[0]) + " with " + str(freq[0]) + " reviews.") + + The most reviewed hotel for United Kingdom was Britannia International Hotel Canary Wharf with 3833 reviews. + The most reviewed hotel for United States of America was Hotel Esther a with 423 reviews. + The most reviewed hotel for Australia was Park Plaza Westminster Bridge London with 167 reviews. + The most reviewed hotel for Ireland was Copthorne Tara Hotel London Kensington with 239 reviews. + The most reviewed hotel for United Arab Emirates was Millennium Hotel London Knightsbridge with 129 reviews. + The most reviewed hotel for Saudi Arabia was The Cumberland A Guoman Hotel with 142 reviews. + The most reviewed hotel for Netherlands was Jaz Amsterdam with 97 reviews. + The most reviewed hotel for Switzerland was Hotel Da Vinci with 97 reviews. + The most reviewed hotel for Germany was Hotel Da Vinci with 86 reviews. + The most reviewed hotel for Canada was St James Court A Taj Hotel London with 61 reviews. + ``` + +4. Có bao nhiêu đánh giá cho mỗi khách sạn (tần suất xuất hiện của khách sạn) trong tập dữ liệu? + + ```python + # First create a new dataframe based on the old one, removing the uneeded columns + hotel_freq_df = df.drop(["Hotel_Address", "Additional_Number_of_Scoring", "Review_Date", "Average_Score", "Reviewer_Nationality", "Negative_Review", "Review_Total_Negative_Word_Counts", "Positive_Review", "Review_Total_Positive_Word_Counts", "Total_Number_of_Reviews_Reviewer_Has_Given", "Reviewer_Score", "Tags", "days_since_review", "lat", "lng"], axis = 1) + + # Group the rows by Hotel_Name, count them and put the result in a new column Total_Reviews_Found + hotel_freq_df['Total_Reviews_Found'] = hotel_freq_df.groupby('Hotel_Name').transform('count') + + # Get rid of all the duplicated rows + hotel_freq_df = hotel_freq_df.drop_duplicates(subset = ["Hotel_Name"]) + display(hotel_freq_df) + ``` + | Hotel_Name | Total_Number_of_Reviews | Total_Reviews_Found | + | :----------------------------------------: | :---------------------: | :-----------------: | + | Britannia International Hotel Canary Wharf | 9086 | 4789 | + | Park Plaza Westminster Bridge London | 12158 | 4169 | + | Copthorne Tara Hotel London Kensington | 7105 | 3578 | + | ... | ... | ... | + | Mercure Paris Porte d Orleans | 110 | 10 | + | Hotel Wagner | 135 | 10 | + | Hotel Gallitzinberg | 173 | 8 | + + Bạn có thể nhận thấy rằng kết quả *được đếm trong tập dữ liệu* không khớp với giá trị trong `Total_Number_of_Reviews`. Không rõ liệu giá trị này trong tập dữ liệu đại diện cho tổng số đánh giá mà khách sạn có, nhưng không phải tất cả đều được thu thập, hay một tính toán nào khác. `Total_Number_of_Reviews` không được sử dụng trong mô hình vì sự không rõ ràng này. + +5. Mặc dù có cột `Average_Score` cho mỗi khách sạn trong tập dữ liệu, bạn cũng có thể tính điểm trung bình (lấy trung bình tất cả điểm đánh giá của người đánh giá trong tập dữ liệu cho mỗi khách sạn). Thêm một cột mới vào dataframe của bạn với tiêu đề cột `Calc_Average_Score` chứa điểm trung bình đã tính toán. In ra các cột `Hotel_Name`, `Average_Score`, và `Calc_Average_Score`. + + ```python + # define a function that takes a row and performs some calculation with it + def get_difference_review_avg(row): + return row["Average_Score"] - row["Calc_Average_Score"] + + # 'mean' is mathematical word for 'average' + df['Calc_Average_Score'] = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) + + # Add a new column with the difference between the two average scores + df["Average_Score_Difference"] = df.apply(get_difference_review_avg, axis = 1) + + # Create a df without all the duplicates of Hotel_Name (so only 1 row per hotel) + review_scores_df = df.drop_duplicates(subset = ["Hotel_Name"]) + + # Sort the dataframe to find the lowest and highest average score difference + review_scores_df = review_scores_df.sort_values(by=["Average_Score_Difference"]) + + display(review_scores_df[["Average_Score_Difference", "Average_Score", "Calc_Average_Score", "Hotel_Name"]]) + ``` + + Bạn cũng có thể thắc mắc về giá trị `Average_Score` và tại sao đôi khi nó khác với điểm trung bình đã tính toán. Vì chúng ta không thể biết tại sao một số giá trị khớp, nhưng những giá trị khác lại có sự khác biệt, tốt nhất trong trường hợp này là sử dụng điểm đánh giá mà chúng ta có để tự tính toán điểm trung bình. Tuy nhiên, sự khác biệt thường rất nhỏ, đây là các khách sạn có độ lệch lớn nhất giữa điểm trung bình trong tập dữ liệu và điểm trung bình đã tính toán: + + | Average_Score_Difference | Average_Score | Calc_Average_Score | Hotel_Name | + | :----------------------: | :-----------: | :----------------: | ------------------------------------------: | + | -0.8 | 7.7 | 8.5 | Best Western Hotel Astoria | + | -0.7 | 8.8 | 9.5 | Hotel Stendhal Place Vend me Paris MGallery | + | -0.7 | 7.5 | 8.2 | Mercure Paris Porte d Orleans | + | -0.7 | 7.9 | 8.6 | Renaissance Paris Vendome Hotel | + | -0.5 | 7.0 | 7.5 | Hotel Royal Elys es | + | ... | ... | ... | ... | + | 0.7 | 7.5 | 6.8 | Mercure Paris Op ra Faubourg Montmartre | + | 0.8 | 7.1 | 6.3 | Holiday Inn Paris Montparnasse Pasteur | + | 0.9 | 6.8 | 5.9 | Villa Eugenie | + | 0.9 | 8.6 | 7.7 | MARQUIS Faubourg St Honor Relais Ch teaux | + | 1.3 | 7.2 | 5.9 | Kube Hotel Ice Bar | + + Với chỉ 1 khách sạn có sự khác biệt về điểm lớn hơn 1, điều này có nghĩa là chúng ta có thể bỏ qua sự khác biệt và sử dụng điểm trung bình đã tính toán. + +6. Tính và in ra có bao nhiêu dòng có giá trị cột `Negative_Review` là "No Negative". + +7. Tính và in ra có bao nhiêu dòng có giá trị cột `Positive_Review` là "No Positive". + +8. Tính và in ra có bao nhiêu dòng có giá trị cột `Positive_Review` là "No Positive" **và** giá trị cột `Negative_Review` là "No Negative". + + ```python + # with lambdas: + start = time.time() + no_negative_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" else False , axis=1) + print("Number of No Negative reviews: " + str(len(no_negative_reviews[no_negative_reviews == True].index))) + + no_positive_reviews = df.apply(lambda x: True if x['Positive_Review'] == "No Positive" else False , axis=1) + print("Number of No Positive reviews: " + str(len(no_positive_reviews[no_positive_reviews == True].index))) + + both_no_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" and x['Positive_Review'] == "No Positive" else False , axis=1) + print("Number of both No Negative and No Positive reviews: " + str(len(both_no_reviews[both_no_reviews == True].index))) + end = time.time() + print("Lambdas took " + str(round(end - start, 2)) + " seconds") + + Number of No Negative reviews: 127890 + Number of No Positive reviews: 35946 + Number of both No Negative and No Positive reviews: 127 + Lambdas took 9.64 seconds + ``` + +## Một cách khác + +Một cách khác để đếm các mục mà không cần Lambdas, và sử dụng sum để đếm các dòng: + + ```python + # without lambdas (using a mixture of notations to show you can use both) + start = time.time() + no_negative_reviews = sum(df.Negative_Review == "No Negative") + print("Number of No Negative reviews: " + str(no_negative_reviews)) + + no_positive_reviews = sum(df["Positive_Review"] == "No Positive") + print("Number of No Positive reviews: " + str(no_positive_reviews)) + + both_no_reviews = sum((df.Negative_Review == "No Negative") & (df.Positive_Review == "No Positive")) + print("Number of both No Negative and No Positive reviews: " + str(both_no_reviews)) + + end = time.time() + print("Sum took " + str(round(end - start, 2)) + " seconds") + + Number of No Negative reviews: 127890 + Number of No Positive reviews: 35946 + Number of both No Negative and No Positive reviews: 127 + Sum took 0.19 seconds + ``` + + Bạn có thể nhận thấy rằng có 127 dòng có cả giá trị "No Negative" và "No Positive" cho các cột `Negative_Review` và `Positive_Review` tương ứng. Điều này có nghĩa là người đánh giá đã cho khách sạn một điểm số, nhưng từ chối viết cả đánh giá tích cực hoặc tiêu cực. May mắn thay, đây là một lượng nhỏ dòng (127 trong số 515738, hoặc 0.02%), vì vậy nó có lẽ sẽ không làm lệch mô hình hoặc kết quả của chúng ta theo bất kỳ hướng nào, nhưng bạn có thể không mong đợi một tập dữ liệu đánh giá lại có các dòng không có đánh giá, vì vậy việc khám phá dữ liệu để phát hiện các dòng như thế này là rất đáng giá. + +Bây giờ bạn đã khám phá tập dữ liệu, trong bài học tiếp theo bạn sẽ lọc dữ liệu và thêm một số phân tích cảm xúc. + +--- +## 🚀Thử thách + +Bài học này minh họa, như chúng ta đã thấy trong các bài học trước, tầm quan trọng cực kỳ của việc hiểu dữ liệu và những điểm bất thường của nó trước khi thực hiện các thao tác trên đó. Dữ liệu dựa trên văn bản, đặc biệt, cần được kiểm tra cẩn thận. Khám phá các tập dữ liệu nặng về văn bản khác nhau và xem liệu bạn có thể phát hiện ra các khu vực có thể giới thiệu sự thiên vị hoặc cảm xúc lệch lạc vào một mô hình. + +## [Câu hỏi sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +## Ôn tập & Tự học + +Tham gia [Lộ trình học về NLP này](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott) để khám phá các công cụ thử nghiệm khi xây dựng các mô hình nặng về giọng nói và văn bản. + +## Bài tập + +[NLTK](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 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 diff --git a/translations/vi/6-NLP/4-Hotel-Reviews-1/assignment.md b/translations/vi/6-NLP/4-Hotel-Reviews-1/assignment.md new file mode 100644 index 00000000..cf494617 --- /dev/null +++ b/translations/vi/6-NLP/4-Hotel-Reviews-1/assignment.md @@ -0,0 +1,19 @@ + +# NLTK + +## Hướng dẫn + +NLTK là một thư viện nổi tiếng được sử dụng trong ngôn ngữ học tính toán và xử lý ngôn ngữ tự nhiên (NLP). Hãy tận dụng cơ hội này để đọc qua '[sách NLTK](https://www.nltk.org/book/)' và thử làm các bài tập trong đó. Trong bài tập không chấm điểm này, bạn sẽ có cơ hội tìm hiểu sâu hơn về thư viện này. + +--- + +**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 diff --git a/translations/vi/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md b/translations/vi/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md new file mode 100644 index 00000000..1b35da68 --- /dev/null +++ b/translations/vi/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 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. \ No newline at end of file diff --git a/translations/vi/6-NLP/4-Hotel-Reviews-1/solution/R/README.md b/translations/vi/6-NLP/4-Hotel-Reviews-1/solution/R/README.md new file mode 100644 index 00000000..2fbf3e31 --- /dev/null +++ b/translations/vi/6-NLP/4-Hotel-Reviews-1/solution/R/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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, nên 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 diff --git a/translations/vi/6-NLP/5-Hotel-Reviews-2/README.md b/translations/vi/6-NLP/5-Hotel-Reviews-2/README.md new file mode 100644 index 00000000..21fb2e1d --- /dev/null +++ b/translations/vi/6-NLP/5-Hotel-Reviews-2/README.md @@ -0,0 +1,389 @@ + +# Phân tích cảm xúc với đánh giá khách sạn + +Bây giờ bạn đã khám phá chi tiết bộ dữ liệu, đã đến lúc lọc các cột và sử dụng các kỹ thuật NLP trên bộ dữ liệu để thu thập những thông tin mới về các khách sạn. + +## [Câu hỏi trước bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +### Các thao tác lọc và phân tích cảm xúc + +Như bạn có thể đã nhận thấy, bộ dữ liệu có một số vấn đề. Một số cột chứa thông tin không cần thiết, trong khi những cột khác dường như không chính xác. Nếu chúng chính xác, thì cũng không rõ cách chúng được tính toán, và bạn không thể tự mình xác minh kết quả. + +## Bài tập: xử lý dữ liệu thêm một chút + +Hãy làm sạch dữ liệu thêm một chút. Thêm các cột hữu ích cho các bước sau, thay đổi giá trị trong các cột khác, và loại bỏ hoàn toàn một số cột. + +1. Xử lý cột ban đầu + + 1. Loại bỏ `lat` và `lng` + + 2. Thay thế giá trị `Hotel_Address` bằng các giá trị sau (nếu địa chỉ chứa tên thành phố và quốc gia, hãy thay đổi thành chỉ tên thành phố và quốc gia). + + Đây là các thành phố và quốc gia duy nhất trong bộ dữ liệu: + + Amsterdam, Netherlands + + Barcelona, Spain + + London, United Kingdom + + Milan, Italy + + Paris, France + + Vienna, Austria + + ```python + def replace_address(row): + if "Netherlands" in row["Hotel_Address"]: + return "Amsterdam, Netherlands" + elif "Barcelona" in row["Hotel_Address"]: + return "Barcelona, Spain" + elif "United Kingdom" in row["Hotel_Address"]: + return "London, United Kingdom" + elif "Milan" in row["Hotel_Address"]: + return "Milan, Italy" + elif "France" in row["Hotel_Address"]: + return "Paris, France" + elif "Vienna" in row["Hotel_Address"]: + return "Vienna, Austria" + + # Replace all the addresses with a shortened, more useful form + df["Hotel_Address"] = df.apply(replace_address, axis = 1) + # The sum of the value_counts() should add up to the total number of reviews + print(df["Hotel_Address"].value_counts()) + ``` + + Bây giờ bạn có thể truy vấn dữ liệu theo cấp quốc gia: + + ```python + display(df.groupby("Hotel_Address").agg({"Hotel_Name": "nunique"})) + ``` + + | Hotel_Address | Hotel_Name | + | :--------------------- | :--------: | + | Amsterdam, Netherlands | 105 | + | Barcelona, Spain | 211 | + | London, United Kingdom | 400 | + | Milan, Italy | 162 | + | Paris, France | 458 | + | Vienna, Austria | 158 | + +2. Xử lý các cột Meta-review của khách sạn + + 1. Loại bỏ `Additional_Number_of_Scoring` + + 2. Thay thế `Total_Number_of_Reviews` bằng tổng số đánh giá thực sự có trong bộ dữ liệu cho khách sạn đó + + 3. Thay thế `Average_Score` bằng điểm số tự tính toán của chúng ta + + ```python + # Drop `Additional_Number_of_Scoring` + df.drop(["Additional_Number_of_Scoring"], axis = 1, inplace=True) + # Replace `Total_Number_of_Reviews` and `Average_Score` with our own calculated values + df.Total_Number_of_Reviews = df.groupby('Hotel_Name').transform('count') + df.Average_Score = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) + ``` + +3. Xử lý các cột đánh giá + + 1. Loại bỏ `Review_Total_Negative_Word_Counts`, `Review_Total_Positive_Word_Counts`, `Review_Date` và `days_since_review` + + 2. Giữ nguyên `Reviewer_Score`, `Negative_Review`, và `Positive_Review` + + 3. Giữ `Tags` tạm thời + + - Chúng ta sẽ thực hiện một số thao tác lọc bổ sung trên các thẻ trong phần tiếp theo và sau đó sẽ loại bỏ các thẻ + +4. Xử lý các cột của người đánh giá + + 1. Loại bỏ `Total_Number_of_Reviews_Reviewer_Has_Given` + + 2. Giữ `Reviewer_Nationality` + +### Cột thẻ (Tags) + +Cột `Tag` gặp vấn đề vì nó là một danh sách (dạng văn bản) được lưu trong cột. Thật không may, thứ tự và số lượng các phần trong cột này không phải lúc nào cũng giống nhau. Rất khó để con người xác định các cụm từ chính xác cần quan tâm, vì có 515,000 hàng, 1427 khách sạn, và mỗi khách sạn có các tùy chọn hơi khác nhau mà người đánh giá có thể chọn. Đây là nơi NLP phát huy tác dụng. Bạn có thể quét văn bản và tìm các cụm từ phổ biến nhất, sau đó đếm chúng. + +Thật không may, chúng ta không quan tâm đến các từ đơn lẻ, mà là các cụm từ nhiều từ (ví dụ: *Business trip*). Chạy một thuật toán phân phối tần suất cụm từ nhiều từ trên lượng dữ liệu lớn như vậy (6762646 từ) có thể mất rất nhiều thời gian, nhưng nếu không xem xét dữ liệu, có vẻ như đó là một chi phí cần thiết. Đây là lúc phân tích dữ liệu khám phá trở nên hữu ích, vì bạn đã thấy một mẫu của các thẻ như `[' Business trip ', ' Solo traveler ', ' Single Room ', ' Stayed 5 nights ', ' Submitted from a mobile device ']`, bạn có thể bắt đầu hỏi liệu có thể giảm đáng kể khối lượng xử lý cần thực hiện hay không. May mắn thay, điều đó là có thể - nhưng trước tiên bạn cần thực hiện một vài bước để xác định các thẻ quan tâm. + +### Lọc thẻ + +Hãy nhớ rằng mục tiêu của bộ dữ liệu là thêm cảm xúc và các cột giúp bạn chọn khách sạn tốt nhất (cho bản thân hoặc có thể là một khách hàng yêu cầu bạn tạo bot gợi ý khách sạn). Bạn cần tự hỏi liệu các thẻ có hữu ích hay không trong bộ dữ liệu cuối cùng. Đây là một cách diễn giải (nếu bạn cần bộ dữ liệu cho các mục đích khác, các thẻ khác có thể được giữ lại/loại bỏ): + +1. Loại hình chuyến đi là quan trọng và nên giữ lại +2. Loại nhóm khách là quan trọng và nên giữ lại +3. Loại phòng, suite, hoặc studio mà khách đã ở không liên quan (tất cả các khách sạn về cơ bản đều có các phòng giống nhau) +4. Thiết bị mà đánh giá được gửi từ không liên quan +5. Số đêm mà người đánh giá đã ở *có thể* liên quan nếu bạn cho rằng thời gian lưu trú dài hơn đồng nghĩa với việc họ thích khách sạn hơn, nhưng điều này không chắc chắn và có lẽ không liên quan + +Tóm lại, **giữ lại 2 loại thẻ và loại bỏ các thẻ khác**. + +Đầu tiên, bạn không muốn đếm các thẻ cho đến khi chúng ở định dạng tốt hơn, điều đó có nghĩa là loại bỏ các dấu ngoặc vuông và dấu ngoặc kép. Bạn có thể làm điều này theo nhiều cách, nhưng bạn muốn cách nhanh nhất vì nó có thể mất nhiều thời gian để xử lý lượng dữ liệu lớn. May mắn thay, pandas có một cách dễ dàng để thực hiện từng bước này. + +```Python +# Remove opening and closing brackets +df.Tags = df.Tags.str.strip("[']") +# remove all quotes too +df.Tags = df.Tags.str.replace(" ', '", ",", regex = False) +``` + +Mỗi thẻ trở thành dạng như: `Business trip, Solo traveler, Single Room, Stayed 5 nights, Submitted from a mobile device`. + +Tiếp theo, chúng ta gặp một vấn đề. Một số đánh giá, hoặc hàng, có 5 cột, một số có 3, một số có 6. Đây là kết quả của cách bộ dữ liệu được tạo ra, và khó sửa chữa. Bạn muốn có một số tần suất của mỗi cụm từ, nhưng chúng ở các thứ tự khác nhau trong mỗi đánh giá, vì vậy số lượng có thể bị sai, và một khách sạn có thể không nhận được thẻ mà nó xứng đáng. + +Thay vào đó, bạn sẽ sử dụng thứ tự khác nhau này để làm lợi thế, vì mỗi thẻ là cụm từ nhiều từ nhưng cũng được phân tách bằng dấu phẩy! Cách đơn giản nhất để làm điều này là tạo 6 cột tạm thời với mỗi thẻ được chèn vào cột tương ứng với thứ tự của nó trong thẻ. Sau đó, bạn có thể gộp 6 cột này thành một cột lớn và chạy phương thức `value_counts()` trên cột kết quả. Khi in ra, bạn sẽ thấy có 2428 thẻ duy nhất. Đây là một mẫu nhỏ: + +| Tag | Count | +| ------------------------------ | ------ | +| Leisure trip | 417778 | +| Submitted from a mobile device | 307640 | +| Couple | 252294 | +| Stayed 1 night | 193645 | +| Stayed 2 nights | 133937 | +| Solo traveler | 108545 | +| Stayed 3 nights | 95821 | +| Business trip | 82939 | +| Group | 65392 | +| Family with young children | 61015 | +| Stayed 4 nights | 47817 | +| Double Room | 35207 | +| Standard Double Room | 32248 | +| Superior Double Room | 31393 | +| Family with older children | 26349 | +| Deluxe Double Room | 24823 | +| Double or Twin Room | 22393 | +| Stayed 5 nights | 20845 | +| Standard Double or Twin Room | 17483 | +| Classic Double Room | 16989 | +| Superior Double or Twin Room | 13570 | +| 2 rooms | 12393 | + +Một số thẻ phổ biến như `Submitted from a mobile device` không có ích đối với chúng ta, vì vậy có thể là một ý tưởng thông minh để loại bỏ chúng trước khi đếm số lần xuất hiện của cụm từ, nhưng đây là một thao tác nhanh nên bạn có thể để chúng lại và bỏ qua. + +### Loại bỏ các thẻ về thời gian lưu trú + +Loại bỏ các thẻ này là bước đầu tiên, nó giảm số lượng thẻ cần xem xét một chút. Lưu ý rằng bạn không loại bỏ chúng khỏi bộ dữ liệu, chỉ chọn loại bỏ chúng khỏi việc xem xét như các giá trị để đếm/giữ trong bộ dữ liệu đánh giá. + +| Length of stay | Count | +| ---------------- | ------ | +| Stayed 1 night | 193645 | +| Stayed 2 nights | 133937 | +| Stayed 3 nights | 95821 | +| Stayed 4 nights | 47817 | +| Stayed 5 nights | 20845 | +| Stayed 6 nights | 9776 | +| Stayed 7 nights | 7399 | +| Stayed 8 nights | 2502 | +| Stayed 9 nights | 1293 | +| ... | ... | + +Có rất nhiều loại phòng, suite, studio, căn hộ và v.v. Tất cả chúng đều có ý nghĩa tương tự và không liên quan đến bạn, vì vậy hãy loại bỏ chúng khỏi việc xem xét. + +| Type of room | Count | +| ----------------------------- | ----- | +| Double Room | 35207 | +| Standard Double Room | 32248 | +| Superior Double Room | 31393 | +| Deluxe Double Room | 24823 | +| Double or Twin Room | 22393 | +| Standard Double or Twin Room | 17483 | +| Classic Double Room | 16989 | +| Superior Double or Twin Room | 13570 | + +Cuối cùng, và điều này thật thú vị (vì không mất nhiều công xử lý), bạn sẽ còn lại các thẻ *hữu ích* sau: + +| Tag | Count | +| --------------------------------------------- | ------ | +| Leisure trip | 417778 | +| Couple | 252294 | +| Solo traveler | 108545 | +| Business trip | 82939 | +| Group (combined with Travellers with friends) | 67535 | +| Family with young children | 61015 | +| Family with older children | 26349 | +| With a pet | 1405 | + +Bạn có thể cho rằng `Travellers with friends` giống như `Group` hơn hoặc kém, và điều đó sẽ hợp lý để gộp hai thẻ này lại như trên. Mã để xác định các thẻ chính xác nằm trong [Tags notebook](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb). + +Bước cuối cùng là tạo các cột mới cho từng thẻ này. Sau đó, đối với mỗi hàng đánh giá, nếu cột `Tag` khớp với một trong các cột mới, thêm giá trị 1, nếu không, thêm giá trị 0. Kết quả cuối cùng sẽ là số lượng người đánh giá đã chọn khách sạn này (tổng hợp) cho, ví dụ, công việc so với giải trí, hoặc để mang theo thú cưng, và đây là thông tin hữu ích khi gợi ý khách sạn. + +```python +# Process the Tags into new columns +# The file Hotel_Reviews_Tags.py, identifies the most important tags +# Leisure trip, Couple, Solo traveler, Business trip, Group combined with Travelers with friends, +# Family with young children, Family with older children, With a pet +df["Leisure_trip"] = df.Tags.apply(lambda tag: 1 if "Leisure trip" in tag else 0) +df["Couple"] = df.Tags.apply(lambda tag: 1 if "Couple" in tag else 0) +df["Solo_traveler"] = df.Tags.apply(lambda tag: 1 if "Solo traveler" in tag else 0) +df["Business_trip"] = df.Tags.apply(lambda tag: 1 if "Business trip" in tag else 0) +df["Group"] = df.Tags.apply(lambda tag: 1 if "Group" in tag or "Travelers with friends" in tag else 0) +df["Family_with_young_children"] = df.Tags.apply(lambda tag: 1 if "Family with young children" in tag else 0) +df["Family_with_older_children"] = df.Tags.apply(lambda tag: 1 if "Family with older children" in tag else 0) +df["With_a_pet"] = df.Tags.apply(lambda tag: 1 if "With a pet" in tag else 0) + +``` + +### Lưu tệp của bạn + +Cuối cùng, lưu bộ dữ liệu như hiện tại với một tên mới. + +```python +df.drop(["Review_Total_Negative_Word_Counts", "Review_Total_Positive_Word_Counts", "days_since_review", "Total_Number_of_Reviews_Reviewer_Has_Given"], axis = 1, inplace=True) + +# Saving new data file with calculated columns +print("Saving results to Hotel_Reviews_Filtered.csv") +df.to_csv(r'../data/Hotel_Reviews_Filtered.csv', index = False) +``` + +## Các thao tác phân tích cảm xúc + +Trong phần cuối này, bạn sẽ áp dụng phân tích cảm xúc cho các cột đánh giá và lưu kết quả vào bộ dữ liệu. + +## Bài tập: tải và lưu dữ liệu đã lọc + +Lưu ý rằng bây giờ bạn đang tải bộ dữ liệu đã lọc được lưu trong phần trước, **không phải** bộ dữ liệu gốc. + +```python +import time +import pandas as pd +import nltk as nltk +from nltk.corpus import stopwords +from nltk.sentiment.vader import SentimentIntensityAnalyzer +nltk.download('vader_lexicon') + +# Load the filtered hotel reviews from CSV +df = pd.read_csv('../../data/Hotel_Reviews_Filtered.csv') + +# You code will be added here + + +# Finally remember to save the hotel reviews with new NLP data added +print("Saving results to Hotel_Reviews_NLP.csv") +df.to_csv(r'../data/Hotel_Reviews_NLP.csv', index = False) +``` + +### Loại bỏ các từ dừng + +Nếu bạn chạy phân tích cảm xúc trên các cột đánh giá tiêu cực và tích cực, có thể mất rất nhiều thời gian. Được thử nghiệm trên một laptop mạnh với CPU nhanh, mất từ 12 - 14 phút tùy thuộc vào thư viện phân tích cảm xúc được sử dụng. Đây là khoảng thời gian (tương đối) dài, vì vậy đáng để điều tra xem liệu có thể tăng tốc hay không. + +Loại bỏ các từ dừng, hoặc các từ tiếng Anh phổ biến không làm thay đổi cảm xúc của câu, là bước đầu tiên. Bằng cách loại bỏ chúng, phân tích cảm xúc sẽ chạy nhanh hơn, nhưng không kém chính xác (vì các từ dừng không ảnh hưởng đến cảm xúc, nhưng chúng làm chậm quá trình phân tích). + +Đánh giá tiêu cực dài nhất là 395 từ, nhưng sau khi loại bỏ các từ dừng, chỉ còn 195 từ. + +Loại bỏ các từ dừng cũng là một thao tác nhanh, loại bỏ các từ dừng khỏi 2 cột đánh giá trên 515,000 hàng mất 3.3 giây trên thiết bị thử nghiệm. Có thể mất ít hoặc nhiều thời gian hơn một chút tùy thuộc vào tốc độ CPU, RAM, việc bạn có SSD hay không, và một số yếu tố khác. Thời gian ngắn tương đối của thao tác này có nghĩa là nếu nó cải thiện thời gian phân tích cảm xúc, thì đáng để thực hiện. + +```python +from nltk.corpus import stopwords + +# Load the hotel reviews from CSV +df = pd.read_csv("../../data/Hotel_Reviews_Filtered.csv") + +# Remove stop words - can be slow for a lot of text! +# Ryan Han (ryanxjhan on Kaggle) has a great post measuring performance of different stop words removal approaches +# https://www.kaggle.com/ryanxjhan/fast-stop-words-removal # using the approach that Ryan recommends +start = time.time() +cache = set(stopwords.words("english")) +def remove_stopwords(review): + text = " ".join([word for word in review.split() if word not in cache]) + return text + +# Remove the stop words from both columns +df.Negative_Review = df.Negative_Review.apply(remove_stopwords) +df.Positive_Review = df.Positive_Review.apply(remove_stopwords) +``` + +### Thực hiện phân tích cảm xúc + +Bây giờ bạn nên tính toán phân tích cảm xúc cho cả cột đánh giá tiêu cực và tích cực, và lưu kết quả vào 2 cột mới. Bài kiểm tra cảm xúc sẽ là so sánh nó với điểm số của người đánh giá cho cùng một đánh giá. Ví dụ, nếu phân tích cảm xúc cho rằng đánh giá tiêu cực có cảm xúc là 1 (cảm xúc cực kỳ tích cực) và cảm xúc của đánh giá tích cực là 1, nhưng người đánh giá cho khách sạn điểm thấp nhất có thể, thì hoặc văn bản đánh giá không khớp với điểm số, hoặc công cụ phân tích cảm xúc không thể nhận diện cảm xúc chính xác. Bạn nên mong đợi một số điểm cảm xúc hoàn toàn sai, và thường điều đó sẽ có thể giải thích được, ví dụ: đánh giá có thể cực kỳ mỉa mai "Tất nhiên tôi RẤT THÍCH ngủ trong một phòng không có sưởi" và công cụ phân tích cảm xúc nghĩ rằng đó là cảm xúc tích cực, mặc dù con người đọc sẽ biết đó là sự mỉa mai. +NLTK cung cấp nhiều công cụ phân tích cảm xúc khác nhau để bạn học hỏi, và bạn có thể thay thế chúng để xem liệu kết quả phân tích cảm xúc có chính xác hơn hay không. Phân tích cảm xúc VADER được sử dụng ở đây. + +> Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014. + +```python +from nltk.sentiment.vader import SentimentIntensityAnalyzer + +# Create the vader sentiment analyser (there are others in NLTK you can try too) +vader_sentiment = SentimentIntensityAnalyzer() +# Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014. + +# There are 3 possibilities of input for a review: +# It could be "No Negative", in which case, return 0 +# It could be "No Positive", in which case, return 0 +# It could be a review, in which case calculate the sentiment +def calc_sentiment(review): + if review == "No Negative" or review == "No Positive": + return 0 + return vader_sentiment.polarity_scores(review)["compound"] +``` + +Sau đó, trong chương trình của bạn, khi bạn sẵn sàng tính toán cảm xúc, bạn có thể áp dụng nó cho từng đánh giá như sau: + +```python +# Add a negative sentiment and positive sentiment column +print("Calculating sentiment columns for both positive and negative reviews") +start = time.time() +df["Negative_Sentiment"] = df.Negative_Review.apply(calc_sentiment) +df["Positive_Sentiment"] = df.Positive_Review.apply(calc_sentiment) +end = time.time() +print("Calculating sentiment took " + str(round(end - start, 2)) + " seconds") +``` + +Quá trình này mất khoảng 120 giây trên máy tính của tôi, nhưng thời gian sẽ khác nhau trên mỗi máy tính. Nếu bạn muốn in kết quả và xem liệu cảm xúc có khớp với đánh giá hay không: + +```python +df = df.sort_values(by=["Negative_Sentiment"], ascending=True) +print(df[["Negative_Review", "Negative_Sentiment"]]) +df = df.sort_values(by=["Positive_Sentiment"], ascending=True) +print(df[["Positive_Review", "Positive_Sentiment"]]) +``` + +Việc cuối cùng cần làm với tệp trước khi sử dụng nó trong thử thách là lưu lại! Bạn cũng nên cân nhắc sắp xếp lại tất cả các cột mới để chúng dễ làm việc hơn (đối với con người, đây là một thay đổi mang tính thẩm mỹ). + +```python +# Reorder the columns (This is cosmetic, but to make it easier to explore the data later) +df = df.reindex(["Hotel_Name", "Hotel_Address", "Total_Number_of_Reviews", "Average_Score", "Reviewer_Score", "Negative_Sentiment", "Positive_Sentiment", "Reviewer_Nationality", "Leisure_trip", "Couple", "Solo_traveler", "Business_trip", "Group", "Family_with_young_children", "Family_with_older_children", "With_a_pet", "Negative_Review", "Positive_Review"], axis=1) + +print("Saving results to Hotel_Reviews_NLP.csv") +df.to_csv(r"../data/Hotel_Reviews_NLP.csv", index = False) +``` + +Bạn nên chạy toàn bộ mã trong [notebook phân tích](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) (sau khi bạn đã chạy [notebook lọc dữ liệu](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) để tạo tệp Hotel_Reviews_Filtered.csv). + +Để tổng kết, các bước thực hiện là: + +1. Tệp dữ liệu gốc **Hotel_Reviews.csv** được khám phá trong bài học trước với [notebook khám phá](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb) +2. Hotel_Reviews.csv được lọc bởi [notebook lọc dữ liệu](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) tạo ra **Hotel_Reviews_Filtered.csv** +3. Hotel_Reviews_Filtered.csv được xử lý bởi [notebook phân tích cảm xúc](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) tạo ra **Hotel_Reviews_NLP.csv** +4. Sử dụng Hotel_Reviews_NLP.csv trong Thử thách NLP dưới đây + +### Kết luận + +Khi bạn bắt đầu, bạn có một tập dữ liệu với các cột và dữ liệu nhưng không phải tất cả đều có thể được xác minh hoặc sử dụng. Bạn đã khám phá dữ liệu, lọc ra những gì không cần thiết, chuyển đổi các thẻ thành thứ gì đó hữu ích, tính toán trung bình của riêng bạn, thêm một số cột cảm xúc và hy vọng rằng bạn đã học được một số điều thú vị về xử lý văn bản tự nhiên. + +## [Câu hỏi sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +## Thử thách + +Bây giờ bạn đã phân tích cảm xúc cho tập dữ liệu của mình, hãy thử sử dụng các chiến lược bạn đã học trong chương trình học này (có thể là phân cụm?) để xác định các mẫu liên quan đến cảm xúc. + +## Ôn tập & Tự học + +Tham khảo [module học này](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott) để tìm hiểu thêm và sử dụng các công cụ khác nhau để khám phá cảm xúc trong văn bản. + +## Bài tập + +[Thử một tập dữ liệu khác](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 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 diff --git a/translations/vi/6-NLP/5-Hotel-Reviews-2/assignment.md b/translations/vi/6-NLP/5-Hotel-Reviews-2/assignment.md new file mode 100644 index 00000000..6dbf644d --- /dev/null +++ b/translations/vi/6-NLP/5-Hotel-Reviews-2/assignment.md @@ -0,0 +1,25 @@ + +# Thử một bộ dữ liệu khác + +## Hướng dẫn + +Bây giờ bạn đã học cách sử dụng NLTK để gán cảm xúc cho văn bản, hãy thử một bộ dữ liệu khác. Có thể bạn sẽ cần xử lý dữ liệu xung quanh nó, vì vậy hãy tạo một notebook và ghi lại quá trình suy nghĩ của bạn. Bạn khám phá được điều gì? + +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| --------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | ---------------------- | +| | Một notebook hoàn chỉnh và bộ dữ liệu được trình bày với các ô được ghi chú rõ ràng giải thích cách gán cảm xúc | Notebook thiếu các giải thích tốt | Notebook có lỗi | + +--- + +**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 diff --git a/translations/vi/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md b/translations/vi/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md new file mode 100644 index 00000000..3dbee5a1 --- /dev/null +++ b/translations/vi/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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, nên 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 diff --git a/translations/vi/6-NLP/5-Hotel-Reviews-2/solution/R/README.md b/translations/vi/6-NLP/5-Hotel-Reviews-2/solution/R/README.md new file mode 100644 index 00000000..4d89340a --- /dev/null +++ b/translations/vi/6-NLP/5-Hotel-Reviews-2/solution/R/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 diff --git a/translations/vi/6-NLP/README.md b/translations/vi/6-NLP/README.md new file mode 100644 index 00000000..8345887f --- /dev/null +++ b/translations/vi/6-NLP/README.md @@ -0,0 +1,38 @@ + +# Bắt đầu với xử lý ngôn ngữ tự nhiên + +Xử lý ngôn ngữ tự nhiên (NLP) là khả năng của một chương trình máy tính để hiểu ngôn ngữ con người khi nó được nói và viết - được gọi là ngôn ngữ tự nhiên. Đây là một thành phần của trí tuệ nhân tạo (AI). NLP đã tồn tại hơn 50 năm và có nguồn gốc từ lĩnh vực ngôn ngữ học. Toàn bộ lĩnh vực này hướng đến việc giúp máy móc hiểu và xử lý ngôn ngữ con người. Điều này sau đó có thể được sử dụng để thực hiện các nhiệm vụ như kiểm tra chính tả hoặc dịch máy. NLP có nhiều ứng dụng thực tế trong nhiều lĩnh vực, bao gồm nghiên cứu y học, công cụ tìm kiếm và trí tuệ kinh doanh. + +## Chủ đề khu vực: Ngôn ngữ và văn học châu Âu và các khách sạn lãng mạn ở châu Âu ❤️ + +Trong phần này của chương trình học, bạn sẽ được giới thiệu về một trong những ứng dụng phổ biến nhất của học máy: xử lý ngôn ngữ tự nhiên (NLP). Được phát triển từ ngôn ngữ học tính toán, lĩnh vực trí tuệ nhân tạo này là cầu nối giữa con người và máy móc thông qua giao tiếp bằng giọng nói hoặc văn bản. + +Trong các bài học này, chúng ta sẽ học những kiến thức cơ bản về NLP bằng cách xây dựng các bot trò chuyện nhỏ để hiểu cách học máy hỗ trợ làm cho các cuộc trò chuyện này ngày càng trở nên 'thông minh' hơn. Bạn sẽ quay ngược thời gian, trò chuyện với Elizabeth Bennett và Mr. Darcy từ tiểu thuyết kinh điển **Kiêu hãnh và Định kiến** của Jane Austen, xuất bản năm 1813. Sau đó, bạn sẽ nâng cao kiến thức của mình bằng cách tìm hiểu về phân tích cảm xúc thông qua các đánh giá khách sạn ở châu Âu. + +![Sách Kiêu hãnh và Định kiến và trà](../../../6-NLP/images/p&p.jpg) +> Ảnh của Elaine Howlin trên Unsplash + +## Các bài học + +1. [Giới thiệu về xử lý ngôn ngữ tự nhiên](1-Introduction-to-NLP/README.md) +2. [Các nhiệm vụ và kỹ thuật phổ biến trong NLP](2-Tasks/README.md) +3. [Dịch thuật và phân tích cảm xúc với học máy](3-Translation-Sentiment/README.md) +4. [Chuẩn bị dữ liệu của bạn](4-Hotel-Reviews-1/README.md) +5. [NLTK cho phân tích cảm xúc](5-Hotel-Reviews-2/README.md) + +## Tín dụng + +Các bài học về xử lý ngôn ngữ tự nhiên này được viết với ☕ bởi [Stephen Howell](https://twitter.com/Howell_MSFT) + +--- + +**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, nên 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 diff --git a/translations/vi/6-NLP/data/README.md b/translations/vi/6-NLP/data/README.md new file mode 100644 index 00000000..755891c0 --- /dev/null +++ b/translations/vi/6-NLP/data/README.md @@ -0,0 +1,15 @@ + +Tải dữ liệu đánh giá khách sạn về thư mục này. + +--- + +**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 diff --git a/translations/vi/7-TimeSeries/1-Introduction/README.md b/translations/vi/7-TimeSeries/1-Introduction/README.md new file mode 100644 index 00000000..57467f69 --- /dev/null +++ b/translations/vi/7-TimeSeries/1-Introduction/README.md @@ -0,0 +1,199 @@ + +# Giới thiệu về dự đoán chuỗi thời gian + +![Tóm tắt về chuỗi thời gian trong một bản vẽ phác thảo](../../../../sketchnotes/ml-timeseries.png) + +> Bản vẽ phác thảo bởi [Tomomi Imura](https://www.twitter.com/girlie_mac) + +Trong bài học này và bài học tiếp theo, bạn sẽ tìm hiểu một chút về dự đoán chuỗi thời gian, một phần thú vị và có giá trị trong kho kiến thức của nhà khoa học ML, nhưng lại ít được biết đến hơn so với các chủ đề khác. Dự đoán chuỗi thời gian giống như một "quả cầu pha lê": dựa trên hiệu suất trong quá khứ của một biến số như giá cả, bạn có thể dự đoán giá trị tiềm năng của nó trong tương lai. + +[![Giới thiệu về dự đoán chuỗi thời gian](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](https://youtu.be/cBojo1hsHiI "Giới thiệu về dự đoán chuỗi thời gian") + +> 🎥 Nhấp vào hình ảnh trên để xem video về dự đoán chuỗi thời gian + +## [Câu hỏi trước bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +Đây là một lĩnh vực hữu ích và thú vị với giá trị thực tế đối với doanh nghiệp, nhờ vào ứng dụng trực tiếp của nó trong các vấn đề về giá cả, hàng tồn kho và chuỗi cung ứng. Mặc dù các kỹ thuật học sâu đã bắt đầu được sử dụng để có thêm những hiểu biết nhằm dự đoán hiệu suất tương lai tốt hơn, dự đoán chuỗi thời gian vẫn là một lĩnh vực được thông tin rất nhiều bởi các kỹ thuật ML cổ điển. + +> Chương trình học hữu ích về chuỗi thời gian của Penn State có thể được tìm thấy [tại đây](https://online.stat.psu.edu/stat510/lesson/1) + +## Giới thiệu + +Giả sử bạn quản lý một loạt các đồng hồ đỗ xe thông minh cung cấp dữ liệu về tần suất sử dụng và thời gian sử dụng theo thời gian. + +> Điều gì sẽ xảy ra nếu bạn có thể dự đoán, dựa trên hiệu suất trong quá khứ của đồng hồ, giá trị tương lai của nó theo quy luật cung và cầu? + +Dự đoán chính xác thời điểm hành động để đạt được mục tiêu của bạn là một thách thức có thể được giải quyết bằng dự đoán chuỗi thời gian. Mặc dù việc tăng giá vào thời điểm đông đúc khi mọi người đang tìm chỗ đỗ xe có thể không làm họ hài lòng, nhưng đó sẽ là một cách chắc chắn để tạo ra doanh thu để làm sạch đường phố! + +Hãy cùng khám phá một số loại thuật toán chuỗi thời gian và bắt đầu một notebook để làm sạch và chuẩn bị dữ liệu. Dữ liệu bạn sẽ phân tích được lấy từ cuộc thi dự đoán GEFCom2014. Nó bao gồm 3 năm dữ liệu tải điện và nhiệt độ hàng giờ từ năm 2012 đến năm 2014. Dựa trên các mẫu lịch sử của tải điện và nhiệt độ, bạn có thể dự đoán giá trị tải điện trong tương lai. + +Trong ví dụ này, bạn sẽ học cách dự đoán một bước thời gian trước, chỉ sử dụng dữ liệu tải lịch sử. Tuy nhiên, trước khi bắt đầu, sẽ rất hữu ích để hiểu những gì đang diễn ra phía sau. + +## Một số định nghĩa + +Khi gặp thuật ngữ "chuỗi thời gian", bạn cần hiểu cách sử dụng của nó trong một số ngữ cảnh khác nhau. + +🎓 **Chuỗi thời gian** + +Trong toán học, "chuỗi thời gian là một loạt các điểm dữ liệu được lập chỉ mục (hoặc liệt kê hoặc vẽ đồ thị) theo thứ tự thời gian. Thông thường nhất, chuỗi thời gian là một chuỗi được lấy tại các điểm cách đều nhau theo thời gian." Một ví dụ về chuỗi thời gian là giá trị đóng cửa hàng ngày của [Dow Jones Industrial Average](https://wikipedia.org/wiki/Time_series). Việc sử dụng đồ thị chuỗi thời gian và mô hình thống kê thường được gặp trong xử lý tín hiệu, dự báo thời tiết, dự đoán động đất và các lĩnh vực khác nơi các sự kiện xảy ra và các điểm dữ liệu có thể được vẽ theo thời gian. + +🎓 **Phân tích chuỗi thời gian** + +Phân tích chuỗi thời gian là việc phân tích dữ liệu chuỗi thời gian đã đề cập ở trên. Dữ liệu chuỗi thời gian có thể có các dạng khác nhau, bao gồm 'chuỗi thời gian bị gián đoạn', phát hiện các mẫu trong sự phát triển của chuỗi thời gian trước và sau một sự kiện gián đoạn. Loại phân tích cần thiết cho chuỗi thời gian phụ thuộc vào bản chất của dữ liệu. Dữ liệu chuỗi thời gian có thể là một chuỗi số hoặc ký tự. + +Phân tích được thực hiện sử dụng nhiều phương pháp khác nhau, bao gồm miền tần số và miền thời gian, tuyến tính và phi tuyến tính, và nhiều hơn nữa. [Tìm hiểu thêm](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) về các cách phân tích loại dữ liệu này. + +🎓 **Dự đoán chuỗi thời gian** + +Dự đoán chuỗi thời gian là việc sử dụng một mô hình để dự đoán giá trị tương lai dựa trên các mẫu được hiển thị bởi dữ liệu đã thu thập trước đó khi nó xảy ra trong quá khứ. Mặc dù có thể sử dụng các mô hình hồi quy để khám phá dữ liệu chuỗi thời gian, với các chỉ số thời gian làm biến x trên đồ thị, dữ liệu như vậy tốt nhất nên được phân tích bằng các loại mô hình đặc biệt. + +Dữ liệu chuỗi thời gian là một danh sách các quan sát có thứ tự, không giống như dữ liệu có thể được phân tích bằng hồi quy tuyến tính. Loại phổ biến nhất là ARIMA, một từ viết tắt của "Autoregressive Integrated Moving Average". + +[Mô hình ARIMA](https://online.stat.psu.edu/stat510/lesson/1/1.1) "liên kết giá trị hiện tại của một chuỗi với các giá trị trong quá khứ và các lỗi dự đoán trong quá khứ." Chúng phù hợp nhất để phân tích dữ liệu miền thời gian, nơi dữ liệu được sắp xếp theo thời gian. + +> Có một số loại mô hình ARIMA, bạn có thể tìm hiểu [tại đây](https://people.duke.edu/~rnau/411arim.htm) và sẽ được đề cập trong bài học tiếp theo. + +Trong bài học tiếp theo, bạn sẽ xây dựng một mô hình ARIMA sử dụng [Chuỗi thời gian đơn biến](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm), tập trung vào một biến số thay đổi giá trị theo thời gian. Một ví dụ về loại dữ liệu này là [bộ dữ liệu này](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm) ghi lại nồng độ CO2 hàng tháng tại Đài quan sát Mauna Loa: + +| CO2 | YearMonth | Year | Month | +| :-----: | :-------: | :---: | :---: | +| 330.62 | 1975.04 | 1975 | 1 | +| 331.40 | 1975.13 | 1975 | 2 | +| 331.87 | 1975.21 | 1975 | 3 | +| 333.18 | 1975.29 | 1975 | 4 | +| 333.92 | 1975.38 | 1975 | 5 | +| 333.43 | 1975.46 | 1975 | 6 | +| 331.85 | 1975.54 | 1975 | 7 | +| 330.01 | 1975.63 | 1975 | 8 | +| 328.51 | 1975.71 | 1975 | 9 | +| 328.41 | 1975.79 | 1975 | 10 | +| 329.25 | 1975.88 | 1975 | 11 | +| 330.97 | 1975.96 | 1975 | 12 | + +✅ Xác định biến số thay đổi theo thời gian trong bộ dữ liệu này + +## Các đặc điểm của dữ liệu chuỗi thời gian cần xem xét + +Khi xem dữ liệu chuỗi thời gian, bạn có thể nhận thấy rằng nó có [một số đặc điểm nhất định](https://online.stat.psu.edu/stat510/lesson/1/1.1) mà bạn cần xem xét và giảm thiểu để hiểu rõ hơn các mẫu của nó. Nếu bạn coi dữ liệu chuỗi thời gian như một tín hiệu tiềm năng mà bạn muốn phân tích, các đặc điểm này có thể được coi là "nhiễu". Bạn thường cần giảm "nhiễu" này bằng cách bù đắp một số đặc điểm này bằng các kỹ thuật thống kê. + +Dưới đây là một số khái niệm bạn nên biết để làm việc với chuỗi thời gian: + +🎓 **Xu hướng** + +Xu hướng được định nghĩa là sự tăng hoặc giảm có thể đo lường theo thời gian. [Đọc thêm](https://machinelearningmastery.com/time-series-trends-in-python). Trong ngữ cảnh chuỗi thời gian, đó là cách sử dụng và, nếu cần thiết, loại bỏ xu hướng khỏi chuỗi thời gian của bạn. + +🎓 **[Tính thời vụ](https://machinelearningmastery.com/time-series-seasonality-with-python/)** + +Tính thời vụ được định nghĩa là các biến động định kỳ, chẳng hạn như sự tăng đột biến trong kỳ nghỉ lễ có thể ảnh hưởng đến doanh số bán hàng. [Xem thêm](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm) về cách các loại đồ thị khác nhau hiển thị tính thời vụ trong dữ liệu. + +🎓 **Giá trị ngoại lai** + +Giá trị ngoại lai nằm cách xa sự biến đổi dữ liệu tiêu chuẩn. + +🎓 **Chu kỳ dài hạn** + +Không phụ thuộc vào tính thời vụ, dữ liệu có thể hiển thị một chu kỳ dài hạn như suy thoái kinh tế kéo dài hơn một năm. + +🎓 **Biến đổi không đổi** + +Theo thời gian, một số dữ liệu hiển thị các biến động không đổi, chẳng hạn như mức sử dụng năng lượng mỗi ngày và đêm. + +🎓 **Thay đổi đột ngột** + +Dữ liệu có thể hiển thị một sự thay đổi đột ngột cần phân tích thêm. Ví dụ, việc đóng cửa đột ngột các doanh nghiệp do COVID đã gây ra những thay đổi trong dữ liệu. + +✅ Đây là một [đồ thị chuỗi thời gian mẫu](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python) hiển thị chi tiêu tiền tệ trong trò chơi hàng ngày trong vài năm. Bạn có thể xác định bất kỳ đặc điểm nào được liệt kê ở trên trong dữ liệu này không? + +![Chi tiêu tiền tệ trong trò chơi](../../../../7-TimeSeries/1-Introduction/images/currency.png) + +## Bài tập - bắt đầu với dữ liệu sử dụng năng lượng + +Hãy bắt đầu tạo một mô hình chuỗi thời gian để dự đoán mức sử dụng năng lượng trong tương lai dựa trên mức sử dụng trong quá khứ. + +> Dữ liệu trong ví dụ này được lấy từ cuộc thi dự đoán GEFCom2014. Nó bao gồm 3 năm dữ liệu tải điện và nhiệt độ hàng giờ từ năm 2012 đến năm 2014. +> +> Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli và Rob J. Hyndman, "Dự báo năng lượng xác suất: Cuộc thi Dự báo Năng lượng Toàn cầu 2014 và hơn thế nữa", Tạp chí Dự báo Quốc tế, tập 32, số 3, trang 896-913, tháng 7-tháng 9, 2016. + +1. Trong thư mục `working` của bài học này, mở tệp _notebook.ipynb_. Bắt đầu bằng cách thêm các thư viện sẽ giúp bạn tải và trực quan hóa dữ liệu + + ```python + import os + import matplotlib.pyplot as plt + from common.utils import load_data + %matplotlib inline + ``` + + Lưu ý, bạn đang sử dụng các tệp từ thư mục `common` đi kèm, thiết lập môi trường của bạn và xử lý việc tải dữ liệu. + +2. Tiếp theo, kiểm tra dữ liệu dưới dạng dataframe bằng cách gọi `load_data()` và `head()`: + + ```python + data_dir = './data' + energy = load_data(data_dir)[['load']] + energy.head() + ``` + + Bạn có thể thấy rằng có hai cột đại diện cho ngày và tải: + + | | load | + | :-----------------: | :----: | + | 2012-01-01 00:00:00 | 2698.0 | + | 2012-01-01 01:00:00 | 2558.0 | + | 2012-01-01 02:00:00 | 2444.0 | + | 2012-01-01 03:00:00 | 2402.0 | + | 2012-01-01 04:00:00 | 2403.0 | + +3. Bây giờ, vẽ đồ thị dữ liệu bằng cách gọi `plot()`: + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![Đồ thị năng lượng](../../../../7-TimeSeries/1-Introduction/images/energy-plot.png) + +4. Tiếp theo, vẽ đồ thị tuần đầu tiên của tháng 7 năm 2014, bằng cách cung cấp nó làm đầu vào cho `energy` theo mẫu `[từ ngày]: [đến ngày]`: + + ```python + energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![Tháng 7](../../../../7-TimeSeries/1-Introduction/images/july-2014.png) + + Một đồ thị tuyệt đẹp! Hãy xem các đồ thị này và xem liệu bạn có thể xác định bất kỳ đặc điểm nào được liệt kê ở trên không. Chúng ta có thể suy luận gì khi trực quan hóa dữ liệu? + +Trong bài học tiếp theo, bạn sẽ tạo một mô hình ARIMA để tạo một số dự đoán. + +--- + +## 🚀Thử thách + +Lập danh sách tất cả các ngành và lĩnh vực nghiên cứu mà bạn có thể nghĩ rằng sẽ được hưởng lợi từ dự đoán chuỗi thời gian. Bạn có thể nghĩ ra một ứng dụng của các kỹ thuật này trong nghệ thuật? Trong Kinh tế lượng? Sinh thái học? Bán lẻ? Công nghiệp? Tài chính? Còn ở đâu nữa? + +## [Câu hỏi sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +## Ôn tập & Tự học + +Mặc dù chúng ta sẽ không đề cập đến chúng ở đây, mạng nơ-ron đôi khi được sử dụng để nâng cao các phương pháp cổ điển của dự đoán chuỗi thời gian. Đọc thêm về chúng [trong bài viết này](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412) + +## Bài tập + +[Trực quan hóa thêm một số chuỗi thời gian](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 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 diff --git a/translations/vi/7-TimeSeries/1-Introduction/assignment.md b/translations/vi/7-TimeSeries/1-Introduction/assignment.md new file mode 100644 index 00000000..6dd51d30 --- /dev/null +++ b/translations/vi/7-TimeSeries/1-Introduction/assignment.md @@ -0,0 +1,25 @@ + +# Hình dung thêm một số chuỗi thời gian + +## Hướng dẫn + +Bạn đã bắt đầu tìm hiểu về Dự đoán Chuỗi Thời Gian bằng cách xem xét loại dữ liệu cần mô hình hóa đặc biệt này. Bạn đã hình dung một số dữ liệu liên quan đến năng lượng. Bây giờ, hãy tìm kiếm một số dữ liệu khác có thể hưởng lợi từ Dự đoán Chuỗi Thời Gian. Tìm ba ví dụ (thử [Kaggle](https://kaggle.com) và [Azure Open Datasets](https://azure.microsoft.com/en-us/services/open-datasets/catalog/?WT.mc_id=academic-77952-leestott)) và tạo một notebook để hình dung chúng. Ghi chú bất kỳ đặc điểm đặc biệt nào mà chúng có (tính mùa vụ, thay đổi đột ngột, hoặc các xu hướng khác) trong notebook. + +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| -------- | ------------------------------------------------------ | --------------------------------------------------- | --------------------------------------------------------------------------------------- | +| | Ba bộ dữ liệu được vẽ và giải thích trong notebook | Hai bộ dữ liệu được vẽ và giải thích trong notebook | Ít bộ dữ liệu được vẽ hoặc giải thích trong notebook hoặc dữ liệu được trình bày không đủ | + +--- + +**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 diff --git a/translations/vi/7-TimeSeries/1-Introduction/solution/Julia/README.md b/translations/vi/7-TimeSeries/1-Introduction/solution/Julia/README.md new file mode 100644 index 00000000..34895014 --- /dev/null +++ b/translations/vi/7-TimeSeries/1-Introduction/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 từ con người. Chúng tôi không chịu trách nhiệm về 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 diff --git a/translations/vi/7-TimeSeries/1-Introduction/solution/R/README.md b/translations/vi/7-TimeSeries/1-Introduction/solution/R/README.md new file mode 100644 index 00000000..5334ef5b --- /dev/null +++ b/translations/vi/7-TimeSeries/1-Introduction/solution/R/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 diff --git a/translations/vi/7-TimeSeries/2-ARIMA/README.md b/translations/vi/7-TimeSeries/2-ARIMA/README.md new file mode 100644 index 00000000..27b32131 --- /dev/null +++ b/translations/vi/7-TimeSeries/2-ARIMA/README.md @@ -0,0 +1,405 @@ + +# Dự đoán chuỗi thời gian với ARIMA + +Trong bài học trước, bạn đã tìm hiểu một chút về dự đoán chuỗi thời gian và tải một tập dữ liệu cho thấy sự biến động của tải điện qua một khoảng thời gian. + +[![Giới thiệu về ARIMA](https://img.youtube.com/vi/IUSk-YDau10/0.jpg)](https://youtu.be/IUSk-YDau10 "Giới thiệu về ARIMA") + +> 🎥 Nhấp vào hình ảnh trên để xem video: Giới thiệu ngắn gọn về mô hình ARIMA. Ví dụ được thực hiện bằng R, nhưng các khái niệm là phổ quát. + +## [Câu hỏi trước bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +## Giới thiệu + +Trong bài học này, bạn sẽ khám phá một cách cụ thể để xây dựng mô hình với [ARIMA: *A*uto*R*egressive *I*ntegrated *M*oving *A*verage](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average). Mô hình ARIMA đặc biệt phù hợp để xử lý dữ liệu cho thấy [tính không dừng](https://wikipedia.org/wiki/Stationary_process). + +## Các khái niệm chung + +Để làm việc với ARIMA, có một số khái niệm bạn cần biết: + +- 🎓 **Tính dừng**. Trong ngữ cảnh thống kê, tính dừng đề cập đến dữ liệu có phân phối không thay đổi khi dịch chuyển theo thời gian. Dữ liệu không dừng, do đó, cho thấy sự biến động do xu hướng và cần được biến đổi để phân tích. Tính thời vụ, ví dụ, có thể gây ra sự biến động trong dữ liệu và có thể được loại bỏ bằng quá trình 'khác biệt hóa theo mùa'. + +- 🎓 **[Khác biệt hóa](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**. Khác biệt hóa dữ liệu, trong ngữ cảnh thống kê, đề cập đến quá trình biến đổi dữ liệu không dừng để làm cho nó trở thành dữ liệu dừng bằng cách loại bỏ xu hướng không cố định. "Khác biệt hóa loại bỏ sự thay đổi trong mức độ của chuỗi thời gian, loại bỏ xu hướng và tính thời vụ, và do đó ổn định giá trị trung bình của chuỗi thời gian." [Bài báo của Shixiong et al](https://arxiv.org/abs/1904.07632) + +## ARIMA trong ngữ cảnh chuỗi thời gian + +Hãy phân tích các phần của ARIMA để hiểu rõ hơn cách nó giúp chúng ta mô hình hóa chuỗi thời gian và đưa ra dự đoán. + +- **AR - cho AutoRegressive (tự hồi quy)**. Mô hình tự hồi quy, như tên gọi, nhìn 'lại' thời gian để phân tích các giá trị trước đó trong dữ liệu của bạn và đưa ra giả định về chúng. Các giá trị trước đó này được gọi là 'độ trễ'. Một ví dụ là dữ liệu cho thấy doanh số bán bút chì hàng tháng. Tổng doanh số mỗi tháng sẽ được coi là một 'biến tiến hóa' trong tập dữ liệu. Mô hình này được xây dựng khi "biến tiến hóa được hồi quy trên các giá trị trễ (tức là giá trị trước đó) của chính nó." [wikipedia](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) + +- **I - cho Integrated (tích hợp)**. Khác với mô hình 'ARMA' tương tự, 'I' trong ARIMA đề cập đến khía cạnh *[tích hợp](https://wikipedia.org/wiki/Order_of_integration)* của nó. Dữ liệu được 'tích hợp' khi các bước khác biệt hóa được áp dụng để loại bỏ tính không dừng. + +- **MA - cho Moving Average (trung bình động)**. Khía cạnh [trung bình động](https://wikipedia.org/wiki/Moving-average_model) của mô hình này đề cập đến biến đầu ra được xác định bằng cách quan sát các giá trị hiện tại và quá khứ của độ trễ. + +Tóm lại: ARIMA được sử dụng để tạo một mô hình phù hợp nhất với dạng đặc biệt của dữ liệu chuỗi thời gian. + +## Bài tập - xây dựng mô hình ARIMA + +Mở thư mục [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/working) trong bài học này và tìm tệp [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/2-ARIMA/working/notebook.ipynb). + +1. Chạy notebook để tải thư viện Python `statsmodels`; bạn sẽ cần thư viện này cho mô hình ARIMA. + +1. Tải các thư viện cần thiết. + +1. Bây giờ, tải thêm một số thư viện hữu ích để vẽ dữ liệu: + + ```python + import os + import warnings + import matplotlib.pyplot as plt + import numpy as np + import pandas as pd + import datetime as dt + import math + + from pandas.plotting import autocorrelation_plot + from statsmodels.tsa.statespace.sarimax import SARIMAX + from sklearn.preprocessing import MinMaxScaler + from common.utils import load_data, mape + from IPython.display import Image + + %matplotlib inline + pd.options.display.float_format = '{:,.2f}'.format + np.set_printoptions(precision=2) + warnings.filterwarnings("ignore") # specify to ignore warning messages + ``` + +1. Tải dữ liệu từ tệp `/data/energy.csv` vào một dataframe Pandas và xem qua: + + ```python + energy = load_data('./data')[['load']] + energy.head(10) + ``` + +1. Vẽ tất cả dữ liệu năng lượng có sẵn từ tháng 1 năm 2012 đến tháng 12 năm 2014. Không có gì bất ngờ vì chúng ta đã thấy dữ liệu này trong bài học trước: + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + Bây giờ, hãy xây dựng một mô hình! + +### Tạo tập dữ liệu huấn luyện và kiểm tra + +Bây giờ dữ liệu của bạn đã được tải, bạn có thể tách nó thành tập huấn luyện và tập kiểm tra. Bạn sẽ huấn luyện mô hình của mình trên tập huấn luyện. Như thường lệ, sau khi mô hình hoàn thành huấn luyện, bạn sẽ đánh giá độ chính xác của nó bằng tập kiểm tra. Bạn cần đảm bảo rằng tập kiểm tra bao phủ một khoảng thời gian sau tập huấn luyện để đảm bảo rằng mô hình không nhận được thông tin từ các khoảng thời gian trong tương lai. + +1. Phân bổ khoảng thời gian hai tháng từ ngày 1 tháng 9 đến ngày 31 tháng 10 năm 2014 cho tập huấn luyện. Tập kiểm tra sẽ bao gồm khoảng thời gian hai tháng từ ngày 1 tháng 11 đến ngày 31 tháng 12 năm 2014: + + ```python + train_start_dt = '2014-11-01 00:00:00' + test_start_dt = '2014-12-30 00:00:00' + ``` + + Vì dữ liệu này phản ánh mức tiêu thụ năng lượng hàng ngày, có một mô hình thời vụ mạnh mẽ, nhưng mức tiêu thụ gần giống nhất với mức tiêu thụ trong những ngày gần đây. + +1. Hiển thị sự khác biệt: + + ```python + energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ + .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ + .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![dữ liệu huấn luyện và kiểm tra](../../../../7-TimeSeries/2-ARIMA/images/train-test.png) + + Do đó, sử dụng một khoảng thời gian tương đối nhỏ để huấn luyện dữ liệu nên đủ. + + > Lưu ý: Vì hàm chúng ta sử dụng để khớp mô hình ARIMA sử dụng xác thực trong mẫu trong quá trình khớp, chúng ta sẽ bỏ qua dữ liệu xác thực. + +### Chuẩn bị dữ liệu để huấn luyện + +Bây giờ, bạn cần chuẩn bị dữ liệu để huấn luyện bằng cách lọc và chuẩn hóa dữ liệu của mình. Lọc tập dữ liệu của bạn để chỉ bao gồm các khoảng thời gian và cột cần thiết, và chuẩn hóa để đảm bảo dữ liệu được chiếu trong khoảng 0,1. + +1. Lọc tập dữ liệu gốc để chỉ bao gồm các khoảng thời gian đã đề cập ở trên cho mỗi tập và chỉ bao gồm cột 'load' cần thiết cùng với ngày: + + ```python + train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] + test = energy.copy()[energy.index >= test_start_dt][['load']] + + print('Training data shape: ', train.shape) + print('Test data shape: ', test.shape) + ``` + + Bạn có thể xem hình dạng của dữ liệu: + + ```output + Training data shape: (1416, 1) + Test data shape: (48, 1) + ``` + +1. Chuẩn hóa dữ liệu để nằm trong khoảng (0, 1). + + ```python + scaler = MinMaxScaler() + train['load'] = scaler.fit_transform(train) + train.head(10) + ``` + +1. Hiển thị dữ liệu gốc so với dữ liệu đã chuẩn hóa: + + ```python + energy[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']].rename(columns={'load':'original load'}).plot.hist(bins=100, fontsize=12) + train.rename(columns={'load':'scaled load'}).plot.hist(bins=100, fontsize=12) + plt.show() + ``` + + ![gốc](../../../../7-TimeSeries/2-ARIMA/images/original.png) + + > Dữ liệu gốc + + ![chuẩn hóa](../../../../7-TimeSeries/2-ARIMA/images/scaled.png) + + > Dữ liệu đã chuẩn hóa + +1. Bây giờ bạn đã hiệu chỉnh dữ liệu đã chuẩn hóa, bạn có thể chuẩn hóa dữ liệu kiểm tra: + + ```python + test['load'] = scaler.transform(test) + test.head() + ``` + +### Triển khai ARIMA + +Đã đến lúc triển khai ARIMA! Bây giờ bạn sẽ sử dụng thư viện `statsmodels` mà bạn đã cài đặt trước đó. + +Bây giờ bạn cần thực hiện một số bước: + + 1. Định nghĩa mô hình bằng cách gọi `SARIMAX()` và truyền các tham số mô hình: các tham số p, d, và q, và các tham số P, D, và Q. + 2. Chuẩn bị mô hình cho dữ liệu huấn luyện bằng cách gọi hàm fit(). + 3. Dự đoán bằng cách gọi hàm `forecast()` và chỉ định số bước (đường chân trời) để dự đoán. + +> 🎓 Các tham số này dùng để làm gì? Trong mô hình ARIMA, có 3 tham số được sử dụng để giúp mô hình hóa các khía cạnh chính của chuỗi thời gian: tính thời vụ, xu hướng, và nhiễu. Các tham số này là: + +`p`: tham số liên quan đến khía cạnh tự hồi quy của mô hình, kết hợp các giá trị *quá khứ*. +`d`: tham số liên quan đến phần tích hợp của mô hình, ảnh hưởng đến số lượng *khác biệt hóa* (🎓 nhớ khác biệt hóa 👆?) được áp dụng cho chuỗi thời gian. +`q`: tham số liên quan đến phần trung bình động của mô hình. + +> Lưu ý: Nếu dữ liệu của bạn có khía cạnh thời vụ - như dữ liệu này - , chúng ta sử dụng mô hình ARIMA thời vụ (SARIMA). Trong trường hợp đó, bạn cần sử dụng một bộ tham số khác: `P`, `D`, và `Q` mô tả các liên kết tương tự như `p`, `d`, và `q`, nhưng tương ứng với các thành phần thời vụ của mô hình. + +1. Bắt đầu bằng cách đặt giá trị đường chân trời mong muốn của bạn. Hãy thử 3 giờ: + + ```python + # Specify the number of steps to forecast ahead + HORIZON = 3 + print('Forecasting horizon:', HORIZON, 'hours') + ``` + + Việc chọn các giá trị tốt nhất cho các tham số của mô hình ARIMA có thể khó khăn vì nó khá chủ quan và tốn thời gian. Bạn có thể cân nhắc sử dụng hàm `auto_arima()` từ thư viện [`pyramid`](https://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html). + +1. Hiện tại hãy thử một số lựa chọn thủ công để tìm một mô hình tốt. + + ```python + order = (4, 1, 0) + seasonal_order = (1, 1, 0, 24) + + model = SARIMAX(endog=train, order=order, seasonal_order=seasonal_order) + results = model.fit() + + print(results.summary()) + ``` + + Một bảng kết quả được in ra. + +Bạn đã xây dựng mô hình đầu tiên của mình! Bây giờ chúng ta cần tìm cách đánh giá nó. + +### Đánh giá mô hình của bạn + +Để đánh giá mô hình của bạn, bạn có thể thực hiện cái gọi là xác thực `walk forward`. Trong thực tế, các mô hình chuỗi thời gian được huấn luyện lại mỗi khi có dữ liệu mới. Điều này cho phép mô hình đưa ra dự đoán tốt nhất tại mỗi bước thời gian. + +Bắt đầu từ đầu chuỗi thời gian bằng kỹ thuật này, huấn luyện mô hình trên tập dữ liệu huấn luyện. Sau đó đưa ra dự đoán cho bước thời gian tiếp theo. Dự đoán được đánh giá dựa trên giá trị đã biết. Tập huấn luyện sau đó được mở rộng để bao gồm giá trị đã biết và quá trình được lặp lại. + +> Lưu ý: Bạn nên giữ cửa sổ tập huấn luyện cố định để huấn luyện hiệu quả hơn, để mỗi lần bạn thêm một quan sát mới vào tập huấn luyện, bạn loại bỏ quan sát từ đầu tập. + +Quá trình này cung cấp một ước tính mạnh mẽ hơn về cách mô hình sẽ hoạt động trong thực tế. Tuy nhiên, nó đi kèm với chi phí tính toán khi tạo ra nhiều mô hình. Điều này chấp nhận được nếu dữ liệu nhỏ hoặc mô hình đơn giản, nhưng có thể là vấn đề ở quy mô lớn. + +Xác thực walk-forward là tiêu chuẩn vàng để đánh giá mô hình chuỗi thời gian và được khuyến nghị cho các dự án của bạn. + +1. Đầu tiên, tạo một điểm dữ liệu kiểm tra cho mỗi bước HORIZON. + + ```python + test_shifted = test.copy() + + for t in range(1, HORIZON+1): + test_shifted['load+'+str(t)] = test_shifted['load'].shift(-t, freq='H') + + test_shifted = test_shifted.dropna(how='any') + test_shifted.head(5) + ``` + + | | | load | load+1 | load+2 | + | ---------- | -------- | ---- | ------ | ------ | + | 2014-12-30 | 00:00:00 | 0.33 | 0.29 | 0.27 | + | 2014-12-30 | 01:00:00 | 0.29 | 0.27 | 0.27 | + | 2014-12-30 | 02:00:00 | 0.27 | 0.27 | 0.30 | + | 2014-12-30 | 03:00:00 | 0.27 | 0.30 | 0.41 | + | 2014-12-30 | 04:00:00 | 0.30 | 0.41 | 0.57 | + + Dữ liệu được dịch ngang theo điểm đường chân trời của nó. + +1. Dự đoán trên dữ liệu kiểm tra của bạn bằng cách sử dụng cách tiếp cận cửa sổ trượt trong một vòng lặp có kích thước bằng độ dài dữ liệu kiểm tra: + + ```python + %%time + training_window = 720 # dedicate 30 days (720 hours) for training + + train_ts = train['load'] + test_ts = test_shifted + + history = [x for x in train_ts] + history = history[(-training_window):] + + predictions = list() + + order = (2, 1, 0) + seasonal_order = (1, 1, 0, 24) + + for t in range(test_ts.shape[0]): + model = SARIMAX(endog=history, order=order, seasonal_order=seasonal_order) + model_fit = model.fit() + yhat = model_fit.forecast(steps = HORIZON) + predictions.append(yhat) + obs = list(test_ts.iloc[t]) + # move the training window + history.append(obs[0]) + history.pop(0) + print(test_ts.index[t]) + print(t+1, ': predicted =', yhat, 'expected =', obs) + ``` + + Bạn có thể xem quá trình huấn luyện đang diễn ra: + + ```output + 2014-12-30 00:00:00 + 1 : predicted = [0.32 0.29 0.28] expected = [0.32945389435989236, 0.2900626678603402, 0.2739480752014323] + + 2014-12-30 01:00:00 + 2 : predicted = [0.3 0.29 0.3 ] expected = [0.2900626678603402, 0.2739480752014323, 0.26812891674127126] + + 2014-12-30 02:00:00 + 3 : predicted = [0.27 0.28 0.32] expected = [0.2739480752014323, 0.26812891674127126, 0.3025962399283795] + ``` + +1. So sánh các dự đoán với tải thực tế: + + ```python + eval_df = pd.DataFrame(predictions, columns=['t+'+str(t) for t in range(1, HORIZON+1)]) + eval_df['timestamp'] = test.index[0:len(test.index)-HORIZON+1] + eval_df = pd.melt(eval_df, id_vars='timestamp', value_name='prediction', var_name='h') + eval_df['actual'] = np.array(np.transpose(test_ts)).ravel() + eval_df[['prediction', 'actual']] = scaler.inverse_transform(eval_df[['prediction', 'actual']]) + eval_df.head() + ``` + + Kết quả + | | | timestamp | h | prediction | actual | + | --- | ---------- | --------- | --- | ---------- | -------- | + | 0 | 2014-12-30 | 00:00:00 | t+1 | 3,008.74 | 3,023.00 | + | 1 | 2014-12-30 | 01:00:00 | t+1 | 2,955.53 | 2,935.00 | + | 2 | 2014-12-30 | 02:00:00 | t+1 | 2,900.17 | 2,899.00 | + | 3 | 2014-12-30 | 03:00:00 | t+1 | 2,917.69 | 2,886.00 | + | 4 | 2014-12-30 | 04:00:00 | t+1 | 2,946.99 | 2,963.00 | + + Quan sát dự đoán dữ liệu hàng giờ, so với tải thực tế. Độ chính xác của nó như thế nào? + +### Kiểm tra độ chính xác của mô hình + +Kiểm tra độ chính xác của mô hình của bạn bằng cách kiểm tra lỗi phần trăm tuyệt đối trung bình (MAPE) của nó trên tất cả các dự đoán. +> **🧮 Hiển thị công thức toán học** +> +> ![MAPE](../../../../7-TimeSeries/2-ARIMA/images/mape.png) +> +> [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) được sử dụng để thể hiện độ chính xác của dự đoán dưới dạng tỷ lệ được định nghĩa bởi công thức trên. Sự khác biệt giữa giá trị thực tế và giá trị dự đoán được chia cho giá trị thực tế. "Giá trị tuyệt đối trong phép tính này được cộng lại cho mỗi điểm dự đoán theo thời gian và chia cho số lượng điểm được khớp n." [wikipedia](https://wikipedia.org/wiki/Mean_absolute_percentage_error) +1. Biểu diễn phương trình trong mã: + + ```python + if(HORIZON > 1): + eval_df['APE'] = (eval_df['prediction'] - eval_df['actual']).abs() / eval_df['actual'] + print(eval_df.groupby('h')['APE'].mean()) + ``` + +1. Tính MAPE của một bước: + + ```python + print('One step forecast MAPE: ', (mape(eval_df[eval_df['h'] == 't+1']['prediction'], eval_df[eval_df['h'] == 't+1']['actual']))*100, '%') + ``` + + MAPE dự báo một bước: 0.5570581332313952 % + +1. In MAPE dự báo nhiều bước: + + ```python + print('Multi-step forecast MAPE: ', mape(eval_df['prediction'], eval_df['actual'])*100, '%') + ``` + + ```output + Multi-step forecast MAPE: 1.1460048657704118 % + ``` + + Một con số thấp là tốt: hãy xem xét rằng một dự báo có MAPE là 10 thì sai lệch 10%. + +1. Nhưng như thường lệ, cách dễ nhất để thấy loại đo lường độ chính xác này là trực quan hóa, vì vậy hãy vẽ biểu đồ: + + ```python + if(HORIZON == 1): + ## Plotting single step forecast + eval_df.plot(x='timestamp', y=['actual', 'prediction'], style=['r', 'b'], figsize=(15, 8)) + + else: + ## Plotting multi step forecast + plot_df = eval_df[(eval_df.h=='t+1')][['timestamp', 'actual']] + for t in range(1, HORIZON+1): + plot_df['t+'+str(t)] = eval_df[(eval_df.h=='t+'+str(t))]['prediction'].values + + fig = plt.figure(figsize=(15, 8)) + ax = plt.plot(plot_df['timestamp'], plot_df['actual'], color='red', linewidth=4.0) + ax = fig.add_subplot(111) + for t in range(1, HORIZON+1): + x = plot_df['timestamp'][(t-1):] + y = plot_df['t+'+str(t)][0:len(x)] + ax.plot(x, y, color='blue', linewidth=4*math.pow(.9,t), alpha=math.pow(0.8,t)) + + ax.legend(loc='best') + + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![một mô hình chuỗi thời gian](../../../../7-TimeSeries/2-ARIMA/images/accuracy.png) + +🏆 Một biểu đồ rất đẹp, cho thấy một mô hình với độ chính xác tốt. Làm tốt lắm! + +--- + +## 🚀Thử thách + +Khám phá các cách để kiểm tra độ chính xác của một mô hình chuỗi thời gian. Chúng ta đã đề cập đến MAPE trong bài học này, nhưng liệu có các phương pháp khác mà bạn có thể sử dụng? Nghiên cứu chúng và chú thích lại. Một tài liệu hữu ích có thể được tìm thấy [tại đây](https://otexts.com/fpp2/accuracy.html) + +## [Câu hỏi sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +## Ôn tập & Tự học + +Bài học này chỉ đề cập đến những kiến thức cơ bản về Dự báo Chuỗi Thời Gian với ARIMA. Hãy dành thời gian để mở rộng kiến thức của bạn bằng cách khám phá [kho lưu trữ này](https://microsoft.github.io/forecasting/) và các loại mô hình khác nhau để học cách xây dựng các mô hình Chuỗi Thời Gian khác. + +## Bài tập + +[Một mô hình ARIMA mới](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 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 diff --git a/translations/vi/7-TimeSeries/2-ARIMA/assignment.md b/translations/vi/7-TimeSeries/2-ARIMA/assignment.md new file mode 100644 index 00000000..d9d67d76 --- /dev/null +++ b/translations/vi/7-TimeSeries/2-ARIMA/assignment.md @@ -0,0 +1,25 @@ + +# Một mô hình ARIMA mới + +## Hướng dẫn + +Bây giờ bạn đã xây dựng một mô hình ARIMA, hãy tạo một mô hình mới với dữ liệu mới (thử một trong [các bộ dữ liệu này từ Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Ghi chú công việc của bạn trong một notebook, trực quan hóa dữ liệu và mô hình của bạn, và kiểm tra độ chính xác của nó bằng MAPE. + +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| --------- | ------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------- | ----------------------------------- | +| | Một notebook được trình bày với mô hình ARIMA mới được xây dựng, kiểm tra và giải thích bằng các biểu đồ và độ chính xác được nêu rõ. | Notebook được trình bày không có chú thích hoặc chứa lỗi | Một notebook chưa hoàn chỉnh được trình bày | + +--- + +**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 diff --git a/translations/vi/7-TimeSeries/2-ARIMA/solution/Julia/README.md b/translations/vi/7-TimeSeries/2-ARIMA/solution/Julia/README.md new file mode 100644 index 00000000..ba0497e4 --- /dev/null +++ b/translations/vi/7-TimeSeries/2-ARIMA/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 diff --git a/translations/vi/7-TimeSeries/2-ARIMA/solution/R/README.md b/translations/vi/7-TimeSeries/2-ARIMA/solution/R/README.md new file mode 100644 index 00000000..362b5467 --- /dev/null +++ b/translations/vi/7-TimeSeries/2-ARIMA/solution/R/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 diff --git a/translations/vi/7-TimeSeries/3-SVR/README.md b/translations/vi/7-TimeSeries/3-SVR/README.md new file mode 100644 index 00000000..8a437bcf --- /dev/null +++ b/translations/vi/7-TimeSeries/3-SVR/README.md @@ -0,0 +1,393 @@ + +# Dự đoán chuỗi thời gian với Support Vector Regressor + +Trong bài học trước, bạn đã học cách sử dụng mô hình ARIMA để dự đoán chuỗi thời gian. Bây giờ, bạn sẽ tìm hiểu về mô hình Support Vector Regressor, một mô hình hồi quy được sử dụng để dự đoán dữ liệu liên tục. + +## [Câu hỏi trước bài học](https://ff-quizzes.netlify.app/en/ml/) + +## Giới thiệu + +Trong bài học này, bạn sẽ khám phá một cách cụ thể để xây dựng mô hình với [**SVM**: **S**upport **V**ector **M**achine](https://en.wikipedia.org/wiki/Support-vector_machine) cho hồi quy, hay **SVR: Support Vector Regressor**. + +### SVR trong bối cảnh chuỗi thời gian [^1] + +Trước khi hiểu được tầm quan trọng của SVR trong dự đoán chuỗi thời gian, đây là một số khái niệm quan trọng mà bạn cần biết: + +- **Hồi quy:** Kỹ thuật học có giám sát để dự đoán giá trị liên tục từ một tập hợp đầu vào. Ý tưởng là tìm một đường cong (hoặc đường thẳng) trong không gian đặc trưng có số lượng điểm dữ liệu tối đa. [Nhấn vào đây](https://en.wikipedia.org/wiki/Regression_analysis) để biết thêm thông tin. +- **Support Vector Machine (SVM):** Một loại mô hình học máy có giám sát được sử dụng cho phân loại, hồi quy và phát hiện điểm bất thường. Mô hình là một siêu phẳng trong không gian đặc trưng, trong trường hợp phân loại nó hoạt động như một ranh giới, và trong trường hợp hồi quy nó hoạt động như đường thẳng phù hợp nhất. Trong SVM, một hàm Kernel thường được sử dụng để chuyển đổi tập dữ liệu sang không gian có số chiều cao hơn, để chúng có thể dễ dàng phân tách. [Nhấn vào đây](https://en.wikipedia.org/wiki/Support-vector_machine) để biết thêm thông tin về SVM. +- **Support Vector Regressor (SVR):** Một loại SVM, để tìm đường thẳng phù hợp nhất (trong trường hợp của SVM là siêu phẳng) có số lượng điểm dữ liệu tối đa. + +### Tại sao lại là SVR? [^1] + +Trong bài học trước, bạn đã học về ARIMA, một phương pháp thống kê tuyến tính rất thành công để dự đoán dữ liệu chuỗi thời gian. Tuy nhiên, trong nhiều trường hợp, dữ liệu chuỗi thời gian có tính *phi tuyến*, điều mà các mô hình tuyến tính không thể ánh xạ được. Trong những trường hợp như vậy, khả năng của SVM trong việc xem xét tính phi tuyến của dữ liệu cho các nhiệm vụ hồi quy khiến SVR trở nên thành công trong dự đoán chuỗi thời gian. + +## Bài tập - xây dựng mô hình SVR + +Các bước đầu tiên để chuẩn bị dữ liệu giống như bài học trước về [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA). + +Mở thư mục [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/3-SVR/working) trong bài học này và tìm tệp [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/3-SVR/working/notebook.ipynb). [^2] + +1. Chạy notebook và nhập các thư viện cần thiết: [^2] + + ```python + import sys + sys.path.append('../../') + ``` + + ```python + import os + import warnings + import matplotlib.pyplot as plt + import numpy as np + import pandas as pd + import datetime as dt + import math + + from sklearn.svm import SVR + from sklearn.preprocessing import MinMaxScaler + from common.utils import load_data, mape + ``` + +2. Tải dữ liệu từ tệp `/data/energy.csv` vào một dataframe của Pandas và xem qua: [^2] + + ```python + energy = load_data('../../data')[['load']] + ``` + +3. Vẽ biểu đồ tất cả dữ liệu năng lượng có sẵn từ tháng 1 năm 2012 đến tháng 12 năm 2014: [^2] + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![full data](../../../../7-TimeSeries/3-SVR/images/full-data.png) + + Bây giờ, hãy xây dựng mô hình SVR của chúng ta. + +### Tạo tập dữ liệu huấn luyện và kiểm tra + +Bây giờ dữ liệu của bạn đã được tải, bạn có thể tách nó thành tập huấn luyện và kiểm tra. Sau đó, bạn sẽ định hình lại dữ liệu để tạo một tập dữ liệu dựa trên bước thời gian, điều này sẽ cần thiết cho SVR. Bạn sẽ huấn luyện mô hình của mình trên tập huấn luyện. Sau khi mô hình hoàn thành việc huấn luyện, bạn sẽ đánh giá độ chính xác của nó trên tập huấn luyện, tập kiểm tra và sau đó là toàn bộ tập dữ liệu để xem hiệu suất tổng thể. Bạn cần đảm bảo rằng tập kiểm tra bao gồm một khoảng thời gian sau tập huấn luyện để đảm bảo rằng mô hình không thu thập thông tin từ các khoảng thời gian trong tương lai [^2] (một tình huống được gọi là *Overfitting*). + +1. Phân bổ khoảng thời gian hai tháng từ ngày 1 tháng 9 đến ngày 31 tháng 10 năm 2014 cho tập huấn luyện. Tập kiểm tra sẽ bao gồm khoảng thời gian hai tháng từ ngày 1 tháng 11 đến ngày 31 tháng 12 năm 2014: [^2] + + ```python + train_start_dt = '2014-11-01 00:00:00' + test_start_dt = '2014-12-30 00:00:00' + ``` + +2. Hiển thị sự khác biệt: [^2] + + ```python + energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ + .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ + .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![training and testing data](../../../../7-TimeSeries/3-SVR/images/train-test.png) + +### Chuẩn bị dữ liệu để huấn luyện + +Bây giờ, bạn cần chuẩn bị dữ liệu để huấn luyện bằng cách lọc và chuẩn hóa dữ liệu của mình. Lọc tập dữ liệu để chỉ bao gồm các khoảng thời gian và cột cần thiết, và chuẩn hóa để đảm bảo dữ liệu được chiếu trong khoảng 0,1. + +1. Lọc tập dữ liệu gốc để chỉ bao gồm các khoảng thời gian đã đề cập ở trên cho mỗi tập và chỉ bao gồm cột 'load' cần thiết cùng với ngày tháng: [^2] + + ```python + train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] + test = energy.copy()[energy.index >= test_start_dt][['load']] + + print('Training data shape: ', train.shape) + print('Test data shape: ', test.shape) + ``` + + ```output + Training data shape: (1416, 1) + Test data shape: (48, 1) + ``` + +2. Chuẩn hóa dữ liệu huấn luyện để nằm trong khoảng (0, 1): [^2] + + ```python + scaler = MinMaxScaler() + train['load'] = scaler.fit_transform(train) + ``` + +4. Bây giờ, bạn chuẩn hóa dữ liệu kiểm tra: [^2] + + ```python + test['load'] = scaler.transform(test) + ``` + +### Tạo dữ liệu với bước thời gian [^1] + +Đối với SVR, bạn chuyển đổi dữ liệu đầu vào thành dạng `[batch, timesteps]`. Vì vậy, bạn định hình lại `train_data` và `test_data` hiện tại sao cho có một chiều mới đề cập đến các bước thời gian. + +```python +# Converting to numpy arrays +train_data = train.values +test_data = test.values +``` + +Trong ví dụ này, chúng ta lấy `timesteps = 5`. Vì vậy, đầu vào cho mô hình là dữ liệu của 4 bước thời gian đầu tiên, và đầu ra sẽ là dữ liệu của bước thời gian thứ 5. + +```python +timesteps=5 +``` + +Chuyển đổi dữ liệu huấn luyện thành tensor 2D bằng cách sử dụng list comprehension lồng nhau: + +```python +train_data_timesteps=np.array([[j for j in train_data[i:i+timesteps]] for i in range(0,len(train_data)-timesteps+1)])[:,:,0] +train_data_timesteps.shape +``` + +```output +(1412, 5) +``` + +Chuyển đổi dữ liệu kiểm tra thành tensor 2D: + +```python +test_data_timesteps=np.array([[j for j in test_data[i:i+timesteps]] for i in range(0,len(test_data)-timesteps+1)])[:,:,0] +test_data_timesteps.shape +``` + +```output +(44, 5) +``` + +Chọn đầu vào và đầu ra từ dữ liệu huấn luyện và kiểm tra: + +```python +x_train, y_train = train_data_timesteps[:,:timesteps-1],train_data_timesteps[:,[timesteps-1]] +x_test, y_test = test_data_timesteps[:,:timesteps-1],test_data_timesteps[:,[timesteps-1]] + +print(x_train.shape, y_train.shape) +print(x_test.shape, y_test.shape) +``` + +```output +(1412, 4) (1412, 1) +(44, 4) (44, 1) +``` + +### Triển khai SVR [^1] + +Bây giờ, đã đến lúc triển khai SVR. Để đọc thêm về triển khai này, bạn có thể tham khảo [tài liệu này](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html). Đối với triển khai của chúng ta, chúng ta thực hiện các bước sau: + + 1. Định nghĩa mô hình bằng cách gọi `SVR()` và truyền vào các siêu tham số của mô hình: kernel, gamma, c và epsilon + 2. Chuẩn bị mô hình cho dữ liệu huấn luyện bằng cách gọi hàm `fit()` + 3. Thực hiện dự đoán bằng cách gọi hàm `predict()` + +Bây giờ chúng ta tạo một mô hình SVR. Ở đây chúng ta sử dụng [kernel RBF](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel), và đặt các siêu tham số gamma, C và epsilon lần lượt là 0.5, 10 và 0.05. + +```python +model = SVR(kernel='rbf',gamma=0.5, C=10, epsilon = 0.05) +``` + +#### Huấn luyện mô hình trên dữ liệu huấn luyện [^1] + +```python +model.fit(x_train, y_train[:,0]) +``` + +```output +SVR(C=10, cache_size=200, coef0=0.0, degree=3, epsilon=0.05, gamma=0.5, + kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False) +``` + +#### Thực hiện dự đoán của mô hình [^1] + +```python +y_train_pred = model.predict(x_train).reshape(-1,1) +y_test_pred = model.predict(x_test).reshape(-1,1) + +print(y_train_pred.shape, y_test_pred.shape) +``` + +```output +(1412, 1) (44, 1) +``` + +Bạn đã xây dựng SVR của mình! Bây giờ chúng ta cần đánh giá nó. + +### Đánh giá mô hình của bạn [^1] + +Để đánh giá, trước tiên chúng ta sẽ chuẩn hóa lại dữ liệu về thang đo ban đầu. Sau đó, để kiểm tra hiệu suất, chúng ta sẽ vẽ biểu đồ chuỗi thời gian gốc và dự đoán, và cũng in kết quả MAPE. + +Chuẩn hóa lại dữ liệu dự đoán và đầu ra gốc: + +```python +# Scaling the predictions +y_train_pred = scaler.inverse_transform(y_train_pred) +y_test_pred = scaler.inverse_transform(y_test_pred) + +print(len(y_train_pred), len(y_test_pred)) +``` + +```python +# Scaling the original values +y_train = scaler.inverse_transform(y_train) +y_test = scaler.inverse_transform(y_test) + +print(len(y_train), len(y_test)) +``` + +#### Kiểm tra hiệu suất mô hình trên dữ liệu huấn luyện và kiểm tra [^1] + +Chúng ta trích xuất các dấu thời gian từ tập dữ liệu để hiển thị trên trục x của biểu đồ. Lưu ý rằng chúng ta đang sử dụng ```timesteps-1``` giá trị đầu tiên làm đầu vào cho đầu ra đầu tiên, vì vậy các dấu thời gian cho đầu ra sẽ bắt đầu sau đó. + +```python +train_timestamps = energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)].index[timesteps-1:] +test_timestamps = energy[test_start_dt:].index[timesteps-1:] + +print(len(train_timestamps), len(test_timestamps)) +``` + +```output +1412 44 +``` + +Vẽ biểu đồ dự đoán cho dữ liệu huấn luyện: + +```python +plt.figure(figsize=(25,6)) +plt.plot(train_timestamps, y_train, color = 'red', linewidth=2.0, alpha = 0.6) +plt.plot(train_timestamps, y_train_pred, color = 'blue', linewidth=0.8) +plt.legend(['Actual','Predicted']) +plt.xlabel('Timestamp') +plt.title("Training data prediction") +plt.show() +``` + +![training data prediction](../../../../7-TimeSeries/3-SVR/images/train-data-predict.png) + +In MAPE cho dữ liệu huấn luyện + +```python +print('MAPE for training data: ', mape(y_train_pred, y_train)*100, '%') +``` + +```output +MAPE for training data: 1.7195710200875551 % +``` + +Vẽ biểu đồ dự đoán cho dữ liệu kiểm tra + +```python +plt.figure(figsize=(10,3)) +plt.plot(test_timestamps, y_test, color = 'red', linewidth=2.0, alpha = 0.6) +plt.plot(test_timestamps, y_test_pred, color = 'blue', linewidth=0.8) +plt.legend(['Actual','Predicted']) +plt.xlabel('Timestamp') +plt.show() +``` + +![testing data prediction](../../../../7-TimeSeries/3-SVR/images/test-data-predict.png) + +In MAPE cho dữ liệu kiểm tra + +```python +print('MAPE for testing data: ', mape(y_test_pred, y_test)*100, '%') +``` + +```output +MAPE for testing data: 1.2623790187854018 % +``` + +🏆 Bạn đã đạt được kết quả rất tốt trên tập dữ liệu kiểm tra! + +### Kiểm tra hiệu suất mô hình trên toàn bộ tập dữ liệu [^1] + +```python +# Extracting load values as numpy array +data = energy.copy().values + +# Scaling +data = scaler.transform(data) + +# Transforming to 2D tensor as per model input requirement +data_timesteps=np.array([[j for j in data[i:i+timesteps]] for i in range(0,len(data)-timesteps+1)])[:,:,0] +print("Tensor shape: ", data_timesteps.shape) + +# Selecting inputs and outputs from data +X, Y = data_timesteps[:,:timesteps-1],data_timesteps[:,[timesteps-1]] +print("X shape: ", X.shape,"\nY shape: ", Y.shape) +``` + +```output +Tensor shape: (26300, 5) +X shape: (26300, 4) +Y shape: (26300, 1) +``` + +```python +# Make model predictions +Y_pred = model.predict(X).reshape(-1,1) + +# Inverse scale and reshape +Y_pred = scaler.inverse_transform(Y_pred) +Y = scaler.inverse_transform(Y) +``` + +```python +plt.figure(figsize=(30,8)) +plt.plot(Y, color = 'red', linewidth=2.0, alpha = 0.6) +plt.plot(Y_pred, color = 'blue', linewidth=0.8) +plt.legend(['Actual','Predicted']) +plt.xlabel('Timestamp') +plt.show() +``` + +![full data prediction](../../../../7-TimeSeries/3-SVR/images/full-data-predict.png) + +```python +print('MAPE: ', mape(Y_pred, Y)*100, '%') +``` + +```output +MAPE: 2.0572089029888656 % +``` + +🏆 Biểu đồ rất đẹp, cho thấy một mô hình với độ chính xác tốt. Làm tốt lắm! + +--- + +## 🚀Thử thách + +- Thử điều chỉnh các siêu tham số (gamma, C, epsilon) khi tạo mô hình và đánh giá trên dữ liệu để xem bộ siêu tham số nào cho kết quả tốt nhất trên dữ liệu kiểm tra. Để biết thêm về các siêu tham số này, bạn có thể tham khảo tài liệu [tại đây](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel). +- Thử sử dụng các hàm kernel khác nhau cho mô hình và phân tích hiệu suất của chúng trên tập dữ liệu. Một tài liệu hữu ích có thể được tìm thấy [tại đây](https://scikit-learn.org/stable/modules/svm.html#kernel-functions). +- Thử sử dụng các giá trị khác nhau cho `timesteps` để mô hình nhìn lại và thực hiện dự đoán. + +## [Câu hỏi sau bài học](https://ff-quizzes.netlify.app/en/ml/) + +## Ôn tập & Tự học + +Bài học này nhằm giới thiệu ứng dụng của SVR trong dự đoán chuỗi thời gian. Để đọc thêm về SVR, bạn có thể tham khảo [blog này](https://www.analyticsvidhya.com/blog/2020/03/support-vector-regression-tutorial-for-machine-learning/). Tài liệu [scikit-learn này](https://scikit-learn.org/stable/modules/svm.html) cung cấp một giải thích toàn diện hơn về SVM nói chung, [SVRs](https://scikit-learn.org/stable/modules/svm.html#regression) và cũng các chi tiết triển khai khác như các [hàm kernel](https://scikit-learn.org/stable/modules/svm.html#kernel-functions) khác nhau có thể được sử dụng, và các tham số của chúng. + +## Bài tập + +[Một mô hình SVR mới](assignment.md) + +## Tín dụng + +[^1]: Văn bản, mã và kết quả trong phần này được đóng góp bởi [@AnirbanMukherjeeXD](https://github.com/AnirbanMukherjeeXD) +[^2]: Văn bản, mã và kết quả trong phần này được lấy từ [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA) + +--- + +**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 diff --git a/translations/vi/7-TimeSeries/3-SVR/assignment.md b/translations/vi/7-TimeSeries/3-SVR/assignment.md new file mode 100644 index 00000000..fed3b66c --- /dev/null +++ b/translations/vi/7-TimeSeries/3-SVR/assignment.md @@ -0,0 +1,29 @@ + +# Một mô hình SVR mới + +## Hướng dẫn [^1] + +Bây giờ bạn đã xây dựng một mô hình SVR, hãy tạo một mô hình mới với dữ liệu mới (thử một trong [các bộ dữ liệu này từ Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Ghi chú công việc của bạn trong một notebook, trực quan hóa dữ liệu và mô hình của bạn, và kiểm tra độ chính xác của nó bằng cách sử dụng các biểu đồ phù hợp và MAPE. Ngoài ra, hãy thử điều chỉnh các siêu tham số khác nhau và sử dụng các giá trị khác nhau cho các bước thời gian. + +## Tiêu chí đánh giá [^1] + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| -------- | ----------------------------------------------------------- | ------------------------------------------------------- | ----------------------------------- | +| | Một notebook được trình bày với mô hình SVR được xây dựng, kiểm tra và giải thích bằng các biểu đồ trực quan và độ chính xác được nêu rõ. | Notebook được trình bày không có chú thích hoặc chứa lỗi. | Một notebook chưa hoàn chỉnh được trình bày. | + + + +[^1]: Văn bản trong phần này được dựa trên [bài tập từ ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/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 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 diff --git a/translations/vi/7-TimeSeries/README.md b/translations/vi/7-TimeSeries/README.md new file mode 100644 index 00000000..7212413a --- /dev/null +++ b/translations/vi/7-TimeSeries/README.md @@ -0,0 +1,37 @@ + +# Giới thiệu về dự đoán chuỗi thời gian + +Dự đoán chuỗi thời gian là gì? Đó là việc dự đoán các sự kiện trong tương lai bằng cách phân tích xu hướng trong quá khứ. + +## Chủ đề khu vực: sử dụng điện trên toàn thế giới ✨ + +Trong hai bài học này, bạn sẽ được giới thiệu về dự đoán chuỗi thời gian, một lĩnh vực ít được biết đến hơn trong học máy nhưng lại vô cùng giá trị đối với các ứng dụng trong ngành công nghiệp và kinh doanh, cũng như các lĩnh vực khác. Mặc dù mạng nơ-ron có thể được sử dụng để tăng cường hiệu quả của các mô hình này, chúng ta sẽ nghiên cứu chúng trong bối cảnh học máy cổ điển, nơi các mô hình giúp dự đoán hiệu suất tương lai dựa trên dữ liệu quá khứ. + +Trọng tâm khu vực của chúng ta là việc sử dụng điện trên toàn thế giới, một tập dữ liệu thú vị để học cách dự đoán nhu cầu điện trong tương lai dựa trên các mẫu tải trong quá khứ. Bạn có thể thấy rằng loại dự đoán này rất hữu ích trong môi trường kinh doanh. + +![lưới điện](../../../7-TimeSeries/images/electric-grid.jpg) + +Ảnh của [Peddi Sai hrithik](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) về các cột điện trên một con đường ở Rajasthan trên [Unsplash](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) + +## Các bài học + +1. [Giới thiệu về dự đoán chuỗi thời gian](1-Introduction/README.md) +2. [Xây dựng mô hình chuỗi thời gian ARIMA](2-ARIMA/README.md) +3. [Xây dựng Support Vector Regressor cho dự đoán chuỗi thời gian](3-SVR/README.md) + +## Tín dụng + +"Giới thiệu về dự đoán chuỗi thời gian" được viết với ⚡️ bởi [Francesca Lazzeri](https://twitter.com/frlazzeri) và [Jen Looper](https://twitter.com/jenlooper). Các notebook lần đầu tiên xuất hiện trực tuyến trong [repo "Deep Learning For Time Series" của Azure](https://github.com/Azure/DeepLearningForTimeSeriesForecasting) ban đầu được viết bởi Francesca Lazzeri. Bài học về SVR được viết bởi [Anirban Mukherjee](https://github.com/AnirbanMukherjeeXD). + +--- + +**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, nên 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. \ No newline at end of file diff --git a/translations/vi/8-Reinforcement/1-QLearning/README.md b/translations/vi/8-Reinforcement/1-QLearning/README.md new file mode 100644 index 00000000..899cb5dd --- /dev/null +++ b/translations/vi/8-Reinforcement/1-QLearning/README.md @@ -0,0 +1,256 @@ + +# Giới thiệu về Học Tăng Cường và Q-Learning + +![Tóm tắt về học tăng cường trong học máy qua sketchnote](../../../../sketchnotes/ml-reinforcement.png) +> Sketchnote bởi [Tomomi Imura](https://www.twitter.com/girlie_mac) + +Học tăng cường liên quan đến ba khái niệm quan trọng: tác nhân, các trạng thái, và một tập hợp các hành động cho mỗi trạng thái. Bằng cách thực hiện một hành động trong một trạng thái cụ thể, tác nhân sẽ nhận được phần thưởng. Hãy tưởng tượng trò chơi điện tử Super Mario. Bạn là Mario, bạn đang ở một cấp độ trong trò chơi, đứng cạnh mép vực. Phía trên bạn là một đồng xu. Bạn là Mario, ở một cấp độ trò chơi, tại một vị trí cụ thể... đó là trạng thái của bạn. Di chuyển một bước sang phải (một hành động) sẽ khiến bạn rơi xuống vực, và điều đó sẽ cho bạn một điểm số thấp. Tuy nhiên, nhấn nút nhảy sẽ giúp bạn ghi điểm và bạn sẽ sống sót. Đó là một kết quả tích cực và điều đó sẽ thưởng cho bạn một điểm số cao. + +Bằng cách sử dụng học tăng cường và một trình mô phỏng (trò chơi), bạn có thể học cách chơi trò chơi để tối đa hóa phần thưởng, đó là sống sót và ghi được càng nhiều điểm càng tốt. + +[![Giới thiệu về Học Tăng Cường](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo) + +> 🎥 Nhấn vào hình ảnh trên để nghe Dmitry thảo luận về Học Tăng Cường + +## [Câu hỏi trước bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +## Yêu cầu và Cài đặt + +Trong bài học này, chúng ta sẽ thử nghiệm một số đoạn mã trong Python. Bạn cần có khả năng chạy mã Jupyter Notebook từ bài học này, trên máy tính của bạn hoặc trên đám mây. + +Bạn có thể mở [notebook bài học](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) và đi qua bài học này để xây dựng. + +> **Lưu ý:** Nếu bạn mở mã này từ đám mây, bạn cũng cần lấy tệp [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), được sử dụng trong mã notebook. Thêm nó vào cùng thư mục với notebook. + +## Giới thiệu + +Trong bài học này, chúng ta sẽ khám phá thế giới của **[Peter và con sói](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**, lấy cảm hứng từ câu chuyện cổ tích âm nhạc của nhà soạn nhạc người Nga, [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Chúng ta sẽ sử dụng **Học Tăng Cường** để giúp Peter khám phá môi trường của mình, thu thập những quả táo ngon và tránh gặp con sói. + +**Học Tăng Cường** (RL) là một kỹ thuật học cho phép chúng ta học hành vi tối ưu của một **tác nhân** trong một **môi trường** bằng cách thực hiện nhiều thử nghiệm. Một tác nhân trong môi trường này cần có một **mục tiêu**, được định nghĩa bởi một **hàm phần thưởng**. + +## Môi trường + +Để đơn giản, hãy xem thế giới của Peter là một bảng vuông có kích thước `width` x `height`, như sau: + +![Môi trường của Peter](../../../../8-Reinforcement/1-QLearning/images/environment.png) + +Mỗi ô trong bảng này có thể là: + +* **mặt đất**, nơi Peter và các sinh vật khác có thể đi lại. +* **nước**, nơi bạn rõ ràng không thể đi lại. +* một **cây** hoặc **cỏ**, nơi bạn có thể nghỉ ngơi. +* một **quả táo**, thứ mà Peter sẽ rất vui khi tìm thấy để ăn. +* một **con sói**, thứ nguy hiểm và cần tránh. + +Có một module Python riêng biệt, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), chứa mã để làm việc với môi trường này. Vì mã này không quan trọng để hiểu các khái niệm của chúng ta, chúng ta sẽ nhập module và sử dụng nó để tạo bảng mẫu (code block 1): + +```python +from rlboard import * + +width, height = 8,8 +m = Board(width,height) +m.randomize(seed=13) +m.plot() +``` + +Mã này sẽ in ra hình ảnh của môi trường tương tự như hình trên. + +## Hành động và chính sách + +Trong ví dụ của chúng ta, mục tiêu của Peter là tìm được quả táo, đồng thời tránh con sói và các chướng ngại vật khác. Để làm điều này, anh ta có thể đi lại cho đến khi tìm thấy quả táo. + +Do đó, tại bất kỳ vị trí nào, anh ta có thể chọn một trong các hành động sau: lên, xuống, trái và phải. + +Chúng ta sẽ định nghĩa các hành động đó dưới dạng một từ điển và ánh xạ chúng tới các cặp thay đổi tọa độ tương ứng. Ví dụ, di chuyển sang phải (`R`) sẽ tương ứng với cặp `(1,0)`. (code block 2): + +```python +actions = { "U" : (0,-1), "D" : (0,1), "L" : (-1,0), "R" : (1,0) } +action_idx = { a : i for i,a in enumerate(actions.keys()) } +``` + +Tóm lại, chiến lược và mục tiêu của kịch bản này như sau: + +- **Chiến lược**, của tác nhân (Peter) được định nghĩa bởi một cái gọi là **chính sách**. Chính sách là một hàm trả về hành động tại bất kỳ trạng thái nào. Trong trường hợp của chúng ta, trạng thái của vấn đề được biểu diễn bởi bảng, bao gồm vị trí hiện tại của người chơi. + +- **Mục tiêu**, của học tăng cường là cuối cùng học được một chính sách tốt cho phép chúng ta giải quyết vấn đề một cách hiệu quả. Tuy nhiên, như một cơ sở, hãy xem xét chính sách đơn giản nhất gọi là **đi bộ ngẫu nhiên**. + +## Đi bộ ngẫu nhiên + +Hãy giải quyết vấn đề của chúng ta bằng cách triển khai chiến lược đi bộ ngẫu nhiên. Với đi bộ ngẫu nhiên, chúng ta sẽ chọn ngẫu nhiên hành động tiếp theo từ các hành động được phép, cho đến khi chúng ta đạt được quả táo (code block 3). + +1. Triển khai đi bộ ngẫu nhiên với mã dưới đây: + + ```python + def random_policy(m): + return random.choice(list(actions)) + + def walk(m,policy,start_position=None): + n = 0 # number of steps + # set initial position + if start_position: + m.human = start_position + else: + m.random_start() + while True: + if m.at() == Board.Cell.apple: + return n # success! + if m.at() in [Board.Cell.wolf, Board.Cell.water]: + return -1 # eaten by wolf or drowned + while True: + a = actions[policy(m)] + new_pos = m.move_pos(m.human,a) + if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water: + m.move(a) # do the actual move + break + n+=1 + + walk(m,random_policy) + ``` + + Lệnh gọi `walk` sẽ trả về độ dài của đường đi tương ứng, có thể thay đổi từ lần chạy này sang lần chạy khác. + +1. Thực hiện thử nghiệm đi bộ một số lần (ví dụ, 100 lần), và in ra thống kê kết quả (code block 4): + + ```python + def print_statistics(policy): + s,w,n = 0,0,0 + for _ in range(100): + z = walk(m,policy) + if z<0: + w+=1 + else: + s += z + n += 1 + print(f"Average path length = {s/n}, eaten by wolf: {w} times") + + print_statistics(random_policy) + ``` + + Lưu ý rằng độ dài trung bình của một đường đi là khoảng 30-40 bước, khá nhiều, trong khi khoảng cách trung bình đến quả táo gần nhất là khoảng 5-6 bước. + + Bạn cũng có thể xem chuyển động của Peter trong quá trình đi bộ ngẫu nhiên: + + ![Đi bộ ngẫu nhiên của Peter](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif) + +## Hàm phần thưởng + +Để làm cho chính sách của chúng ta thông minh hơn, chúng ta cần hiểu hành động nào "tốt hơn" hành động khác. Để làm điều này, chúng ta cần định nghĩa mục tiêu của mình. + +Mục tiêu có thể được định nghĩa dưới dạng một **hàm phần thưởng**, hàm này sẽ trả về một giá trị điểm cho mỗi trạng thái. Số càng cao, hàm phần thưởng càng tốt. (code block 5) + +```python +move_reward = -0.1 +goal_reward = 10 +end_reward = -10 + +def reward(m,pos=None): + pos = pos or m.human + if not m.is_valid(pos): + return end_reward + x = m.at(pos) + if x==Board.Cell.water or x == Board.Cell.wolf: + return end_reward + if x==Board.Cell.apple: + return goal_reward + return move_reward +``` + +Một điều thú vị về các hàm phần thưởng là trong hầu hết các trường hợp, *chúng ta chỉ nhận được phần thưởng đáng kể vào cuối trò chơi*. Điều này có nghĩa là thuật toán của chúng ta cần phải nhớ các bước "tốt" dẫn đến phần thưởng tích cực ở cuối, và tăng tầm quan trọng của chúng. Tương tự, tất cả các bước dẫn đến kết quả xấu cần bị giảm giá trị. + +## Q-Learning + +Thuật toán mà chúng ta sẽ thảo luận ở đây được gọi là **Q-Learning**. Trong thuật toán này, chính sách được định nghĩa bởi một hàm (hoặc cấu trúc dữ liệu) gọi là **Q-Table**. Nó ghi lại "mức độ tốt" của mỗi hành động trong một trạng thái nhất định. + +Nó được gọi là Q-Table vì thường tiện lợi để biểu diễn nó dưới dạng một bảng, hoặc mảng đa chiều. Vì bảng của chúng ta có kích thước `width` x `height`, chúng ta có thể biểu diễn Q-Table bằng một mảng numpy với hình dạng `width` x `height` x `len(actions)`: (code block 6) + +```python +Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions) +``` + +Lưu ý rằng chúng ta khởi tạo tất cả các giá trị của Q-Table với một giá trị bằng nhau, trong trường hợp của chúng ta là 0.25. Điều này tương ứng với chính sách "đi bộ ngẫu nhiên", vì tất cả các hành động trong mỗi trạng thái đều tốt như nhau. Chúng ta có thể truyền Q-Table vào hàm `plot` để trực quan hóa bảng trên bảng: `m.plot(Q)`. + +![Môi trường của Peter](../../../../8-Reinforcement/1-QLearning/images/env_init.png) + +Ở trung tâm của mỗi ô có một "mũi tên" chỉ hướng di chuyển ưu tiên. Vì tất cả các hướng đều bằng nhau, một dấu chấm được hiển thị. + +Bây giờ chúng ta cần chạy mô phỏng, khám phá môi trường của mình, và học một phân phối giá trị Q-Table tốt hơn, điều này sẽ cho phép chúng ta tìm đường đến quả táo nhanh hơn nhiều. + +## Bản chất của Q-Learning: Phương trình Bellman + +Khi chúng ta bắt đầu di chuyển, mỗi hành động sẽ có một phần thưởng tương ứng, tức là chúng ta có thể lý thuyết chọn hành động tiếp theo dựa trên phần thưởng ngay lập tức cao nhất. Tuy nhiên, trong hầu hết các trạng thái, hành động sẽ không đạt được mục tiêu của chúng ta là đến quả táo, và do đó chúng ta không thể ngay lập tức quyết định hướng nào tốt hơn. + +> Hãy nhớ rằng điều quan trọng không phải là kết quả ngay lập tức, mà là kết quả cuối cùng, mà chúng ta sẽ đạt được vào cuối mô phỏng. + +Để tính đến phần thưởng bị trì hoãn này, chúng ta cần sử dụng các nguyên tắc của **[lập trình động](https://en.wikipedia.org/wiki/Dynamic_programming)**, cho phép chúng ta suy nghĩ về vấn đề của mình một cách đệ quy. + +Giả sử chúng ta đang ở trạng thái *s*, và chúng ta muốn di chuyển đến trạng thái tiếp theo *s'*. Bằng cách làm như vậy, chúng ta sẽ nhận được phần thưởng ngay lập tức *r(s,a)*, được định nghĩa bởi hàm phần thưởng, cộng với một phần thưởng tương lai. Nếu chúng ta giả sử rằng Q-Table của chúng ta phản ánh chính xác "sự hấp dẫn" của mỗi hành động, thì tại trạng thái *s'* chúng ta sẽ chọn một hành động *a* tương ứng với giá trị tối đa của *Q(s',a')*. Do đó, phần thưởng tương lai tốt nhất có thể mà chúng ta có thể nhận được tại trạng thái *s* sẽ được định nghĩa là `max` + +## Kiểm tra chính sách + +Vì Q-Table liệt kê "mức độ hấp dẫn" của mỗi hành động tại mỗi trạng thái, nên rất dễ sử dụng nó để xác định cách điều hướng hiệu quả trong thế giới của chúng ta. Trong trường hợp đơn giản nhất, chúng ta có thể chọn hành động tương ứng với giá trị Q-Table cao nhất: (code block 9) + +```python +def qpolicy_strict(m): + x,y = m.human + v = probs(Q[x,y]) + a = list(actions)[np.argmax(v)] + return a + +walk(m,qpolicy_strict) +``` + +> Nếu bạn thử đoạn mã trên nhiều lần, bạn có thể nhận thấy rằng đôi khi nó "bị treo", và bạn cần nhấn nút STOP trong notebook để dừng lại. Điều này xảy ra vì có thể có những tình huống khi hai trạng thái "chỉ" vào nhau về mặt giá trị Q tối ưu, dẫn đến việc agent di chuyển qua lại giữa các trạng thái đó vô thời hạn. + +## 🚀Thử thách + +> **Nhiệm vụ 1:** Sửa đổi hàm `walk` để giới hạn độ dài tối đa của đường đi bằng một số bước nhất định (ví dụ, 100), và xem đoạn mã trên trả về giá trị này theo thời gian. + +> **Nhiệm vụ 2:** Sửa đổi hàm `walk` để không quay lại những nơi mà nó đã từng đi qua trước đó. Điều này sẽ ngăn `walk` lặp lại, tuy nhiên, agent vẫn có thể bị "mắc kẹt" ở một vị trí mà nó không thể thoát ra. + +## Điều hướng + +Một chính sách điều hướng tốt hơn sẽ là chính sách mà chúng ta đã sử dụng trong quá trình huấn luyện, kết hợp giữa khai thác và khám phá. Trong chính sách này, chúng ta sẽ chọn mỗi hành động với một xác suất nhất định, tỷ lệ thuận với các giá trị trong Q-Table. Chiến lược này vẫn có thể dẫn đến việc agent quay lại một vị trí mà nó đã khám phá, nhưng như bạn có thể thấy từ đoạn mã dưới đây, nó dẫn đến một đường đi trung bình rất ngắn đến vị trí mong muốn (hãy nhớ rằng `print_statistics` chạy mô phỏng 100 lần): (code block 10) + +```python +def qpolicy(m): + x,y = m.human + v = probs(Q[x,y]) + a = random.choices(list(actions),weights=v)[0] + return a + +print_statistics(qpolicy) +``` + +Sau khi chạy đoạn mã này, bạn sẽ nhận được độ dài đường đi trung bình nhỏ hơn nhiều so với trước, trong khoảng từ 3-6. + +## Khám phá quá trình học + +Như chúng ta đã đề cập, quá trình học là sự cân bằng giữa việc khám phá và khai thác kiến thức đã thu được về cấu trúc không gian vấn đề. Chúng ta đã thấy rằng kết quả của việc học (khả năng giúp agent tìm đường ngắn đến mục tiêu) đã được cải thiện, nhưng cũng rất thú vị khi quan sát cách độ dài đường đi trung bình thay đổi trong quá trình học: + +## Tóm tắt bài học: + +- **Độ dài đường đi trung bình tăng lên**. Điều chúng ta thấy ở đây là ban đầu, độ dài đường đi trung bình tăng lên. Điều này có thể là do khi chúng ta chưa biết gì về môi trường, chúng ta có khả năng bị mắc kẹt ở các trạng thái xấu, như nước hoặc sói. Khi chúng ta học được nhiều hơn và bắt đầu sử dụng kiến thức này, chúng ta có thể khám phá môi trường lâu hơn, nhưng vẫn chưa biết rõ vị trí của những quả táo. + +- **Độ dài đường đi giảm khi học được nhiều hơn**. Khi chúng ta học đủ, việc đạt được mục tiêu trở nên dễ dàng hơn đối với agent, và độ dài đường đi bắt đầu giảm. Tuy nhiên, chúng ta vẫn mở rộng khám phá, vì vậy chúng ta thường đi lệch khỏi đường đi tốt nhất và khám phá các lựa chọn mới, làm cho đường đi dài hơn mức tối ưu. + +- **Độ dài tăng đột ngột**. Điều chúng ta cũng quan sát được trên biểu đồ này là tại một số thời điểm, độ dài tăng đột ngột. Điều này cho thấy tính ngẫu nhiên của quá trình, và rằng chúng ta có thể "làm hỏng" các hệ số Q-Table bằng cách ghi đè chúng với các giá trị mới. Điều này lý tưởng nên được giảm thiểu bằng cách giảm tốc độ học (ví dụ, về cuối quá trình huấn luyện, chúng ta chỉ điều chỉnh các giá trị Q-Table bằng một giá trị nhỏ). + +Nhìn chung, điều quan trọng cần nhớ là sự thành công và chất lượng của quá trình học phụ thuộc đáng kể vào các tham số, như tốc độ học, sự giảm tốc độ học, và hệ số chiết khấu. Những tham số này thường được gọi là **siêu tham số**, để phân biệt với **tham số**, mà chúng ta tối ưu trong quá trình huấn luyện (ví dụ, các hệ số Q-Table). Quá trình tìm giá trị siêu tham số tốt nhất được gọi là **tối ưu hóa siêu tham số**, và nó xứng đáng là một chủ đề riêng. + +## [Câu hỏi sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +## Bài tập +[Một thế giới thực tế hơn](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 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 diff --git a/translations/vi/8-Reinforcement/1-QLearning/assignment.md b/translations/vi/8-Reinforcement/1-QLearning/assignment.md new file mode 100644 index 00000000..933dd26c --- /dev/null +++ b/translations/vi/8-Reinforcement/1-QLearning/assignment.md @@ -0,0 +1,41 @@ + +# Một Thế Giới Thực Tế Hơn + +Trong tình huống của chúng ta, Peter có thể di chuyển gần như không cảm thấy mệt mỏi hay đói. Trong một thế giới thực tế hơn, anh ấy cần phải ngồi xuống nghỉ ngơi thỉnh thoảng, và cũng cần ăn uống để duy trì sức khỏe. Hãy làm cho thế giới của chúng ta thực tế hơn bằng cách áp dụng các quy tắc sau: + +1. Khi di chuyển từ nơi này sang nơi khác, Peter mất **năng lượng** và tăng thêm **mệt mỏi**. +2. Peter có thể tăng năng lượng bằng cách ăn táo. +3. Peter có thể giảm mệt mỏi bằng cách nghỉ ngơi dưới gốc cây hoặc trên cỏ (tức là đi vào vị trí trên bảng có cây hoặc cỏ - ô màu xanh lá). +4. Peter cần tìm và tiêu diệt con sói. +5. Để tiêu diệt con sói, Peter cần đạt mức năng lượng và mệt mỏi nhất định, nếu không anh ấy sẽ thua trong trận chiến. + +## Hướng Dẫn + +Sử dụng [notebook.ipynb](../../../../8-Reinforcement/1-QLearning/notebook.ipynb) gốc làm điểm bắt đầu cho giải pháp của bạn. + +Chỉnh sửa hàm thưởng theo các quy tắc của trò chơi, chạy thuật toán học tăng cường để tìm chiến lược tốt nhất để chiến thắng trò chơi, và so sánh kết quả của việc đi ngẫu nhiên với thuật toán của bạn về số lượng trò chơi thắng và thua. + +> **Note**: Trong thế giới mới của bạn, trạng thái phức tạp hơn, và ngoài vị trí của con người còn bao gồm mức độ mệt mỏi và năng lượng. Bạn có thể chọn biểu diễn trạng thái dưới dạng một tuple (Board,energy,fatigue), hoặc định nghĩa một lớp cho trạng thái (bạn cũng có thể muốn kế thừa từ `Board`), hoặc thậm chí chỉnh sửa lớp `Board` gốc trong [rlboard.py](../../../../8-Reinforcement/1-QLearning/rlboard.py). + +Trong giải pháp của bạn, hãy giữ lại đoạn mã chịu trách nhiệm cho chiến lược đi ngẫu nhiên, và so sánh kết quả của thuật toán của bạn với chiến lược đi ngẫu nhiên ở cuối. + +> **Note**: Bạn có thể cần điều chỉnh các siêu tham số để làm cho nó hoạt động, đặc biệt là số lượng epochs. Vì thành công của trò chơi (đánh bại con sói) là một sự kiện hiếm gặp, bạn có thể mong đợi thời gian huấn luyện lâu hơn. + +## Tiêu Chí Đánh Giá + +| Tiêu chí | Xuất Sắc | Đạt Yêu Cầu | Cần Cải Thiện | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| | Notebook được trình bày với định nghĩa các quy tắc mới của thế giới, thuật toán Q-Learning và một số giải thích bằng văn bản. Q-Learning có thể cải thiện đáng kể kết quả so với đi ngẫu nhiên. | Notebook được trình bày, Q-Learning được triển khai và cải thiện kết quả so với đi ngẫu nhiên, nhưng không đáng kể; hoặc notebook được tài liệu hóa kém và mã không được cấu trúc tốt | Có một số cố gắng để tái định nghĩa các quy tắc của thế giới, nhưng thuật toán Q-Learning không hoạt động, hoặc hàm thưởng không được định nghĩa đầy đủ | + +--- + +**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, nên 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 diff --git a/translations/vi/8-Reinforcement/1-QLearning/solution/Julia/README.md b/translations/vi/8-Reinforcement/1-QLearning/solution/Julia/README.md new file mode 100644 index 00000000..83be41b6 --- /dev/null +++ b/translations/vi/8-Reinforcement/1-QLearning/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 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. \ No newline at end of file diff --git a/translations/vi/8-Reinforcement/1-QLearning/solution/R/README.md b/translations/vi/8-Reinforcement/1-QLearning/solution/R/README.md new file mode 100644 index 00000000..38951fb4 --- /dev/null +++ b/translations/vi/8-Reinforcement/1-QLearning/solution/R/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 diff --git a/translations/vi/8-Reinforcement/2-Gym/README.md b/translations/vi/8-Reinforcement/2-Gym/README.md new file mode 100644 index 00000000..e57e2dc3 --- /dev/null +++ b/translations/vi/8-Reinforcement/2-Gym/README.md @@ -0,0 +1,351 @@ + +# Trượt ván CartPole + +Bài toán mà chúng ta đã giải trong bài học trước có vẻ như là một vấn đề đơn giản, không thực sự áp dụng được vào các tình huống thực tế. Nhưng thực tế không phải vậy, vì nhiều vấn đề trong thế giới thực cũng có kịch bản tương tự - bao gồm chơi cờ vua hoặc cờ vây. Chúng tương tự nhau vì chúng ta cũng có một bàn cờ với các quy tắc nhất định và một **trạng thái rời rạc**. + +## [Câu hỏi trước bài học](https://ff-quizzes.netlify.app/en/ml/) + +## Giới thiệu + +Trong bài học này, chúng ta sẽ áp dụng các nguyên tắc của Q-Learning vào một bài toán với **trạng thái liên tục**, tức là trạng thái được biểu diễn bằng một hoặc nhiều số thực. Chúng ta sẽ giải quyết bài toán sau: + +> **Bài toán**: Nếu Peter muốn thoát khỏi con sói, cậu ấy cần phải di chuyển nhanh hơn. Chúng ta sẽ xem cách Peter học cách trượt ván, đặc biệt là giữ thăng bằng, bằng cách sử dụng Q-Learning. + +![Cuộc chạy trốn vĩ đại!](../../../../8-Reinforcement/2-Gym/images/escape.png) + +> Peter và các bạn của cậu ấy sáng tạo để thoát khỏi con sói! Hình ảnh bởi [Jen Looper](https://twitter.com/jenlooper) + +Chúng ta sẽ sử dụng một phiên bản đơn giản của việc giữ thăng bằng được gọi là bài toán **CartPole**. Trong thế giới CartPole, chúng ta có một thanh trượt ngang có thể di chuyển sang trái hoặc phải, và mục tiêu là giữ thăng bằng một cây cột thẳng đứng trên thanh trượt. + +## Yêu cầu trước + +Trong bài học này, chúng ta sẽ sử dụng một thư viện gọi là **OpenAI Gym** để mô phỏng các **môi trường** khác nhau. Bạn có thể chạy mã của bài học này trên máy tính cá nhân (ví dụ: từ Visual Studio Code), trong trường hợp đó, mô phỏng sẽ mở trong một cửa sổ mới. Khi chạy mã trực tuyến, bạn có thể cần thực hiện một số điều chỉnh, như được mô tả [ở đây](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7). + +## OpenAI Gym + +Trong bài học trước, các quy tắc của trò chơi và trạng thái được cung cấp bởi lớp `Board` mà chúng ta tự định nghĩa. Ở đây, chúng ta sẽ sử dụng một **môi trường mô phỏng** đặc biệt, mô phỏng vật lý đằng sau cây cột giữ thăng bằng. Một trong những môi trường mô phỏng phổ biến nhất để huấn luyện các thuật toán học tăng cường được gọi là [Gym](https://gym.openai.com/), được duy trì bởi [OpenAI](https://openai.com/). Bằng cách sử dụng Gym này, chúng ta có thể tạo ra các **môi trường** khác nhau từ mô phỏng CartPole đến các trò chơi Atari. + +> **Lưu ý**: Bạn có thể xem các môi trường khác có sẵn từ OpenAI Gym [tại đây](https://gym.openai.com/envs/#classic_control). + +Đầu tiên, hãy cài đặt Gym và nhập các thư viện cần thiết (mã khối 1): + +```python +import sys +!{sys.executable} -m pip install gym + +import gym +import matplotlib.pyplot as plt +import numpy as np +import random +``` + +## Bài tập - khởi tạo môi trường CartPole + +Để làm việc với bài toán giữ thăng bằng CartPole, chúng ta cần khởi tạo môi trường tương ứng. Mỗi môi trường được liên kết với: + +- **Không gian quan sát** định nghĩa cấu trúc thông tin mà chúng ta nhận được từ môi trường. Đối với bài toán CartPole, chúng ta nhận được vị trí của cây cột, vận tốc và một số giá trị khác. + +- **Không gian hành động** định nghĩa các hành động có thể thực hiện. Trong trường hợp của chúng ta, không gian hành động là rời rạc và bao gồm hai hành động - **trái** và **phải**. (mã khối 2) + +1. Để khởi tạo, hãy nhập mã sau: + + ```python + env = gym.make("CartPole-v1") + print(env.action_space) + print(env.observation_space) + print(env.action_space.sample()) + ``` + +Để xem cách môi trường hoạt động, hãy chạy một mô phỏng ngắn trong 100 bước. Tại mỗi bước, chúng ta cung cấp một hành động để thực hiện - trong mô phỏng này, chúng ta chỉ chọn ngẫu nhiên một hành động từ `action_space`. + +1. Chạy mã dưới đây và xem kết quả. + + ✅ Nhớ rằng nên chạy mã này trên cài đặt Python cục bộ! (mã khối 3) + + ```python + env.reset() + + for i in range(100): + env.render() + env.step(env.action_space.sample()) + env.close() + ``` + + Bạn sẽ thấy một hình ảnh tương tự như hình này: + + ![CartPole không giữ thăng bằng](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif) + +1. Trong quá trình mô phỏng, chúng ta cần nhận các quan sát để quyết định cách hành động. Thực tế, hàm bước trả về các quan sát hiện tại, một hàm thưởng, và cờ `done` cho biết liệu có nên tiếp tục mô phỏng hay không: (mã khối 4) + + ```python + env.reset() + + done = False + while not done: + env.render() + obs, rew, done, info = env.step(env.action_space.sample()) + print(f"{obs} -> {rew}") + env.close() + ``` + + Bạn sẽ thấy kết quả tương tự như thế này trong đầu ra của notebook: + + ```text + [ 0.03403272 -0.24301182 0.02669811 0.2895829 ] -> 1.0 + [ 0.02917248 -0.04828055 0.03248977 0.00543839] -> 1.0 + [ 0.02820687 0.14636075 0.03259854 -0.27681916] -> 1.0 + [ 0.03113408 0.34100283 0.02706215 -0.55904489] -> 1.0 + [ 0.03795414 0.53573468 0.01588125 -0.84308041] -> 1.0 + ... + [ 0.17299878 0.15868546 -0.20754175 -0.55975453] -> 1.0 + [ 0.17617249 0.35602306 -0.21873684 -0.90998894] -> 1.0 + ``` + + Vector quan sát được trả về tại mỗi bước của mô phỏng chứa các giá trị sau: + - Vị trí của xe đẩy + - Vận tốc của xe đẩy + - Góc của cây cột + - Tốc độ quay của cây cột + +1. Lấy giá trị nhỏ nhất và lớn nhất của các số này: (mã khối 5) + + ```python + print(env.observation_space.low) + print(env.observation_space.high) + ``` + + Bạn cũng có thể nhận thấy rằng giá trị thưởng tại mỗi bước mô phỏng luôn là 1. Điều này là vì mục tiêu của chúng ta là tồn tại lâu nhất có thể, tức là giữ cây cột ở vị trí thẳng đứng hợp lý trong thời gian dài nhất. + + ✅ Thực tế, mô phỏng CartPole được coi là đã giải quyết nếu chúng ta đạt được phần thưởng trung bình là 195 trong 100 lần thử liên tiếp. + +## Rời rạc hóa trạng thái + +Trong Q-Learning, chúng ta cần xây dựng Q-Table để xác định hành động tại mỗi trạng thái. Để làm được điều này, trạng thái cần phải **rời rạc**, cụ thể hơn, nó phải chứa một số lượng hữu hạn các giá trị rời rạc. Vì vậy, chúng ta cần **rời rạc hóa** các quan sát, ánh xạ chúng thành một tập hợp hữu hạn các trạng thái. + +Có một vài cách để làm điều này: + +- **Chia thành các khoảng**. Nếu chúng ta biết khoảng của một giá trị nhất định, chúng ta có thể chia khoảng này thành một số **khoảng nhỏ**, và sau đó thay thế giá trị bằng số thứ tự của khoảng mà nó thuộc về. Điều này có thể được thực hiện bằng phương pháp [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) của numpy. Trong trường hợp này, chúng ta sẽ biết chính xác kích thước trạng thái, vì nó sẽ phụ thuộc vào số lượng khoảng mà chúng ta chọn để số hóa. + +✅ Chúng ta có thể sử dụng nội suy tuyến tính để đưa các giá trị về một khoảng hữu hạn (ví dụ, từ -20 đến 20), và sau đó chuyển đổi các số thành số nguyên bằng cách làm tròn. Điều này cho chúng ta ít kiểm soát hơn về kích thước của trạng thái, đặc biệt nếu chúng ta không biết chính xác phạm vi của các giá trị đầu vào. Ví dụ, trong trường hợp của chúng ta, 2 trong số 4 giá trị không có giới hạn trên/dưới, điều này có thể dẫn đến số lượng trạng thái vô hạn. + +Trong ví dụ của chúng ta, chúng ta sẽ sử dụng cách tiếp cận thứ hai. Như bạn có thể nhận thấy sau này, mặc dù không có giới hạn trên/dưới, những giá trị này hiếm khi vượt ra ngoài một khoảng hữu hạn nhất định, do đó những trạng thái với giá trị cực đoan sẽ rất hiếm. + +1. Đây là hàm sẽ lấy quan sát từ mô hình của chúng ta và tạo ra một bộ giá trị nguyên gồm 4 giá trị: (mã khối 6) + + ```python + def discretize(x): + return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int)) + ``` + +1. Hãy khám phá một phương pháp rời rạc hóa khác sử dụng các khoảng: (mã khối 7) + + ```python + def create_bins(i,num): + return np.arange(num+1)*(i[1]-i[0])/num+i[0] + + print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10)) + + ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter + nbins = [20,20,10,10] # number of bins for each parameter + bins = [create_bins(ints[i],nbins[i]) for i in range(4)] + + def discretize_bins(x): + return tuple(np.digitize(x[i],bins[i]) for i in range(4)) + ``` + +1. Bây giờ hãy chạy một mô phỏng ngắn và quan sát các giá trị môi trường rời rạc. Hãy thử cả `discretize` và `discretize_bins` để xem có sự khác biệt nào không. + + ✅ `discretize_bins` trả về số thứ tự của khoảng, bắt đầu từ 0. Vì vậy, đối với các giá trị của biến đầu vào xung quanh 0, nó trả về số từ giữa khoảng (10). Trong `discretize`, chúng ta không quan tâm đến phạm vi của các giá trị đầu ra, cho phép chúng là số âm, do đó các giá trị trạng thái không bị dịch chuyển, và 0 tương ứng với 0. (mã khối 8) + + ```python + env.reset() + + done = False + while not done: + #env.render() + obs, rew, done, info = env.step(env.action_space.sample()) + #print(discretize_bins(obs)) + print(discretize(obs)) + env.close() + ``` + + ✅ Bỏ chú thích dòng bắt đầu bằng `env.render` nếu bạn muốn xem cách môi trường thực thi. Nếu không, bạn có thể thực thi nó trong nền, điều này nhanh hơn. Chúng ta sẽ sử dụng cách thực thi "ẩn" này trong quá trình Q-Learning. + +## Cấu trúc Q-Table + +Trong bài học trước, trạng thái là một cặp số đơn giản từ 0 đến 8, và do đó rất tiện lợi để biểu diễn Q-Table bằng một tensor numpy với kích thước 8x8x2. Nếu chúng ta sử dụng rời rạc hóa bằng khoảng, kích thước của vector trạng thái cũng được biết, vì vậy chúng ta có thể sử dụng cách tiếp cận tương tự và biểu diễn trạng thái bằng một mảng có kích thước 20x20x10x10x2 (ở đây 2 là kích thước của không gian hành động, và các kích thước đầu tiên tương ứng với số lượng khoảng mà chúng ta đã chọn để sử dụng cho mỗi tham số trong không gian quan sát). + +Tuy nhiên, đôi khi kích thước chính xác của không gian quan sát không được biết. Trong trường hợp của hàm `discretize`, chúng ta có thể không bao giờ chắc chắn rằng trạng thái của chúng ta nằm trong một giới hạn nhất định, vì một số giá trị ban đầu không bị giới hạn. Do đó, chúng ta sẽ sử dụng một cách tiếp cận hơi khác và biểu diễn Q-Table bằng một từ điển. + +1. Sử dụng cặp *(state,action)* làm khóa của từ điển, và giá trị sẽ tương ứng với giá trị của mục trong Q-Table. (mã khối 9) + + ```python + Q = {} + actions = (0,1) + + def qvalues(state): + return [Q.get((state,a),0) for a in actions] + ``` + + Ở đây chúng ta cũng định nghĩa một hàm `qvalues()`, trả về danh sách các giá trị Q-Table cho một trạng thái nhất định tương ứng với tất cả các hành động có thể. Nếu mục không có trong Q-Table, chúng ta sẽ trả về 0 làm giá trị mặc định. + +## Bắt đầu Q-Learning + +Bây giờ chúng ta đã sẵn sàng để dạy Peter cách giữ thăng bằng! + +1. Đầu tiên, hãy đặt một số siêu tham số: (mã khối 10) + + ```python + # hyperparameters + alpha = 0.3 + gamma = 0.9 + epsilon = 0.90 + ``` + + Ở đây, `alpha` là **tốc độ học** xác định mức độ chúng ta nên điều chỉnh các giá trị hiện tại của Q-Table tại mỗi bước. Trong bài học trước, chúng ta bắt đầu với giá trị 1, và sau đó giảm `alpha` xuống các giá trị thấp hơn trong quá trình huấn luyện. Trong ví dụ này, chúng ta sẽ giữ nó cố định chỉ để đơn giản, và bạn có thể thử nghiệm với việc điều chỉnh giá trị `alpha` sau. + + `gamma` là **hệ số chiết khấu** cho biết mức độ chúng ta nên ưu tiên phần thưởng trong tương lai so với phần thưởng hiện tại. + + `epsilon` là **yếu tố khám phá/khai thác** xác định liệu chúng ta nên ưu tiên khám phá hay khai thác. Trong thuật toán của chúng ta, chúng ta sẽ chọn hành động tiếp theo theo giá trị Q-Table trong `epsilon` phần trăm trường hợp, và trong số trường hợp còn lại, chúng ta sẽ thực hiện một hành động ngẫu nhiên. Điều này sẽ cho phép chúng ta khám phá các khu vực của không gian tìm kiếm mà chúng ta chưa từng thấy trước đây. + + ✅ Về mặt giữ thăng bằng - chọn hành động ngẫu nhiên (khám phá) sẽ giống như một cú đẩy ngẫu nhiên sai hướng, và cây cột sẽ phải học cách phục hồi thăng bằng từ những "sai lầm" đó. + +### Cải thiện thuật toán + +Chúng ta cũng có thể thực hiện hai cải tiến cho thuật toán từ bài học trước: + +- **Tính phần thưởng tích lũy trung bình**, qua một số lần mô phỏng. Chúng ta sẽ in tiến trình mỗi 5000 lần lặp, và chúng ta sẽ tính trung bình phần thưởng tích lũy qua khoảng thời gian đó. Điều này có nghĩa là nếu chúng ta đạt được hơn 195 điểm - chúng ta có thể coi bài toán đã được giải quyết, với chất lượng thậm chí cao hơn yêu cầu. + +- **Tính kết quả tích lũy trung bình tối đa**, `Qmax`, và chúng ta sẽ lưu trữ Q-Table tương ứng với kết quả đó. Khi bạn chạy quá trình huấn luyện, bạn sẽ nhận thấy rằng đôi khi kết quả tích lũy trung bình bắt đầu giảm, và chúng ta muốn giữ lại các giá trị của Q-Table tương ứng với mô hình tốt nhất được quan sát trong quá trình huấn luyện. + +1. Thu thập tất cả phần thưởng tích lũy tại mỗi lần mô phỏng vào vector `rewards` để vẽ biểu đồ sau này. (mã khối 11) + + ```python + def probs(v,eps=1e-4): + v = v-v.min()+eps + v = v/v.sum() + return v + + Qmax = 0 + cum_rewards = [] + rewards = [] + for epoch in range(100000): + obs = env.reset() + done = False + cum_reward=0 + # == do the simulation == + while not done: + s = discretize(obs) + if random.random() Qmax: + Qmax = np.average(cum_rewards) + Qbest = Q + cum_rewards=[] + ``` + +Những gì bạn có thể nhận thấy từ các kết quả này: + +- **Gần đạt mục tiêu**. Chúng ta rất gần đạt được mục tiêu là đạt 195 phần thưởng tích lũy qua hơn 100 lần chạy liên tiếp của mô phỏng, hoặc chúng ta có thể đã đạt được nó! Ngay cả khi chúng ta đạt được các số nhỏ hơn, chúng ta vẫn không biết, vì chúng ta tính trung bình qua 5000 lần chạy, và chỉ cần 100 lần chạy là đủ theo tiêu chí chính thức. + +- **Phần thưởng bắt đầu giảm**. Đôi khi phần thưởng bắt đầu giảm, điều này có nghĩa là chúng ta có thể "phá hủy" các giá trị đã học trong Q-Table bằng các giá trị làm tình hình trở nên tệ hơn. + +Quan sát này rõ ràng hơn nếu chúng ta vẽ biểu đồ tiến trình huấn luyện. + +## Vẽ biểu đồ tiến trình huấn luyện + +Trong quá trình huấn luyện, chúng ta đã thu thập giá trị phần thưởng tích lũy tại mỗi lần lặp vào vector `rewards`. Đây là cách nó trông khi chúng ta vẽ biểu đồ so với số lần lặp: + +```python +plt.plot(rewards) +``` + +![Tiến trình thô](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.png) + +Từ biểu đồ này, không thể nói được điều gì, vì do bản chất của quá trình huấn luyện ngẫu nhiên, độ dài của các phiên huấn luyện thay đổi rất nhiều. Để làm cho biểu đồ này có ý nghĩa hơn, chúng ta có thể tính **trung bình chạy** qua một loạt các thí nghiệm, giả sử là 100. Điều này có thể được thực hiện một cách thuận tiện bằng cách sử dụng `np.convolve`: (mã khối 12) + +```python +def running_average(x,window): + return np.convolve(x,np.ones(window)/window,mode='valid') + +plt.plot(running_average(rewards,100)) +``` + +![Tiến trình huấn luyện](../../../../8-Reinforcement/2-Gym/images/train_progress_runav.png) + +## Thay đổi siêu tham số + +Để làm cho việc học ổn định hơn, có ý nghĩa khi điều chỉnh một số siêu tham số của chúng ta trong quá trình huấn luyện. Cụ thể: + +- **Đối với tốc độ học**, `alpha`, chúng ta có thể bắt đầu với các giá trị gần 1, và sau đó tiếp tục giảm tham số này. Theo thời gian, chúng ta sẽ nhận được các giá trị xác suất tốt trong Q-Table, và do đó chúng ta nên điều chỉnh chúng một cách nhẹ nhàng, thay vì ghi đè hoàn toàn bằng các giá trị mới. + +- **Tăng epsilon**. Chúng ta có thể muốn tăng `epsilon` từ từ, để khám phá ít hơn và khai thác nhiều hơn. Có lẽ hợp lý khi bắt đầu với giá trị thấp của `epsilon`, và tăng lên gần 1. +> **Nhiệm vụ 1**: Thử thay đổi các giá trị siêu tham số và xem liệu bạn có thể đạt được tổng phần thưởng cao hơn không. Bạn có đạt trên 195 không? +> **Nhiệm vụ 2**: Để giải quyết vấn đề một cách chính thức, bạn cần đạt được mức thưởng trung bình 195 qua 100 lần chạy liên tiếp. Đo lường điều này trong quá trình huấn luyện và đảm bảo rằng bạn đã giải quyết vấn đề một cách chính thức! + +## Xem kết quả hoạt động + +Sẽ rất thú vị khi thực sự thấy mô hình đã huấn luyện hoạt động như thế nào. Hãy chạy mô phỏng và áp dụng chiến lược chọn hành động giống như trong quá trình huấn luyện, bằng cách lấy mẫu theo phân phối xác suất trong Q-Table: (khối mã 13) + +```python +obs = env.reset() +done = False +while not done: + s = discretize(obs) + env.render() + v = probs(np.array(qvalues(s))) + a = random.choices(actions,weights=v)[0] + obs,_,done,_ = env.step(a) +env.close() +``` + +Bạn sẽ thấy điều gì đó như thế này: + +![a balancing cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif) + +--- + +## 🚀Thử thách + +> **Nhiệm vụ 3**: Ở đây, chúng ta đang sử dụng bản sao cuối cùng của Q-Table, nhưng có thể nó không phải là bản tốt nhất. Hãy nhớ rằng chúng ta đã lưu Q-Table có hiệu suất tốt nhất vào biến `Qbest`! Thử ví dụ tương tự với Q-Table có hiệu suất tốt nhất bằng cách sao chép `Qbest` sang `Q` và xem liệu bạn có nhận thấy sự khác biệt không. + +> **Nhiệm vụ 4**: Ở đây chúng ta không chọn hành động tốt nhất ở mỗi bước, mà thay vào đó lấy mẫu theo phân phối xác suất tương ứng. Liệu có hợp lý hơn không nếu luôn chọn hành động tốt nhất, với giá trị cao nhất trong Q-Table? Điều này có thể thực hiện bằng cách sử dụng hàm `np.argmax` để tìm số hành động tương ứng với giá trị cao nhất trong Q-Table. Hãy triển khai chiến lược này và xem liệu nó có cải thiện khả năng cân bằng không. + +## [Câu hỏi sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +## Bài tập +[Huấn luyện Mountain Car](assignment.md) + +## Kết luận + +Chúng ta đã học cách huấn luyện các tác nhân để đạt được kết quả tốt chỉ bằng cách cung cấp cho chúng một hàm thưởng định nghĩa trạng thái mong muốn của trò chơi, và cho chúng cơ hội khám phá không gian tìm kiếm một cách thông minh. Chúng ta đã áp dụng thành công thuật toán Q-Learning trong các trường hợp môi trường rời rạc và liên tục, nhưng với các hành động rời rạc. + +Điều quan trọng là cũng cần nghiên cứu các tình huống mà trạng thái hành động cũng liên tục, và khi không gian quan sát phức tạp hơn nhiều, chẳng hạn như hình ảnh từ màn hình trò chơi Atari. Trong những vấn đề này, chúng ta thường cần sử dụng các kỹ thuật học máy mạnh mẽ hơn, chẳng hạn như mạng nơ-ron, để đạt được kết quả tốt. Những chủ đề nâng cao này sẽ là nội dung của khóa học AI nâng cao sắp tới của chúng ta. + +--- + +**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, nên 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. \ No newline at end of file diff --git a/translations/vi/8-Reinforcement/2-Gym/assignment.md b/translations/vi/8-Reinforcement/2-Gym/assignment.md new file mode 100644 index 00000000..61c772d3 --- /dev/null +++ b/translations/vi/8-Reinforcement/2-Gym/assignment.md @@ -0,0 +1,55 @@ + +# Huấn luyện Mountain Car + +[OpenAI Gym](http://gym.openai.com) được thiết kế sao cho tất cả các môi trường đều cung cấp cùng một API - tức là các phương thức `reset`, `step` và `render`, cùng các khái niệm về **action space** và **observation space**. Do đó, có thể áp dụng cùng một thuật toán học tăng cường cho các môi trường khác nhau với ít thay đổi mã nguồn. + +## Môi trường Mountain Car + +[Môi trường Mountain Car](https://gym.openai.com/envs/MountainCar-v0/) chứa một chiếc xe bị mắc kẹt trong một thung lũng: + +Mục tiêu là thoát khỏi thung lũng và bắt được lá cờ, bằng cách thực hiện một trong các hành động sau tại mỗi bước: + +| Giá trị | Ý nghĩa | +|---|---| +| 0 | Tăng tốc về bên trái | +| 1 | Không tăng tốc | +| 2 | Tăng tốc về bên phải | + +Điểm mấu chốt của vấn đề này là động cơ của xe không đủ mạnh để leo lên núi trong một lần. Vì vậy, cách duy nhất để thành công là lái xe qua lại để tạo đà. + +Không gian quan sát chỉ bao gồm hai giá trị: + +| Num | Quan sát | Min | Max | +|-----|----------------|-------|-------| +| 0 | Vị trí của xe | -1.2 | 0.6 | +| 1 | Vận tốc của xe | -0.07 | 0.07 | + +Hệ thống thưởng trong Mountain Car khá phức tạp: + + * Thưởng 0 được trao nếu agent đạt được lá cờ (vị trí = 0.5) trên đỉnh núi. + * Thưởng -1 được trao nếu vị trí của agent nhỏ hơn 0.5. + +Tập sẽ kết thúc nếu vị trí của xe lớn hơn 0.5, hoặc độ dài tập vượt quá 200. +## Hướng dẫn + +Điều chỉnh thuật toán học tăng cường của chúng ta để giải quyết vấn đề Mountain Car. Bắt đầu với mã nguồn hiện có trong [notebook.ipynb](../../../../8-Reinforcement/2-Gym/notebook.ipynb), thay thế môi trường mới, thay đổi các hàm phân chia trạng thái, và cố gắng làm cho thuật toán hiện có huấn luyện với ít thay đổi mã nguồn nhất. Tối ưu hóa kết quả bằng cách điều chỉnh các siêu tham số. + +> **Note**: Có khả năng cần điều chỉnh siêu tham số để làm cho thuật toán hội tụ. +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| -------- | -------- | ----------- | ------------- | +| | Thuật toán Q-Learning được điều chỉnh thành công từ ví dụ CartPole, với ít thay đổi mã nguồn, có thể giải quyết vấn đề bắt được lá cờ trong dưới 200 bước. | Một thuật toán Q-Learning mới được áp dụng từ Internet, nhưng được tài liệu hóa tốt; hoặc thuật toán hiện có được áp dụng nhưng không đạt kết quả mong muốn. | Học viên không thể áp dụng thành công bất kỳ thuật toán nào, nhưng đã có những bước tiến đáng kể hướng tới giải pháp (đã triển khai phân chia trạng thái, cấu trúc dữ liệu Q-Table, v.v.) | + +--- + +**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 diff --git a/translations/vi/8-Reinforcement/2-Gym/solution/Julia/README.md b/translations/vi/8-Reinforcement/2-Gym/solution/Julia/README.md new file mode 100644 index 00000000..f2e66465 --- /dev/null +++ b/translations/vi/8-Reinforcement/2-Gym/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 diff --git a/translations/vi/8-Reinforcement/2-Gym/solution/R/README.md b/translations/vi/8-Reinforcement/2-Gym/solution/R/README.md new file mode 100644 index 00000000..6ba6178a --- /dev/null +++ b/translations/vi/8-Reinforcement/2-Gym/solution/R/README.md @@ -0,0 +1,15 @@ + + + +--- + +**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 diff --git a/translations/vi/8-Reinforcement/README.md b/translations/vi/8-Reinforcement/README.md new file mode 100644 index 00000000..58dd9b34 --- /dev/null +++ b/translations/vi/8-Reinforcement/README.md @@ -0,0 +1,67 @@ + +# Giới thiệu về học tăng cường + +Học tăng cường, hay RL, được xem là một trong những mô hình học máy cơ bản, bên cạnh học có giám sát và học không giám sát. RL xoay quanh việc đưa ra quyết định: đưa ra quyết định đúng hoặc ít nhất là học hỏi từ những quyết định đã đưa ra. + +Hãy tưởng tượng bạn có một môi trường mô phỏng như thị trường chứng khoán. Điều gì sẽ xảy ra nếu bạn áp dụng một quy định nhất định? Nó có tác động tích cực hay tiêu cực? Nếu có điều gì tiêu cực xảy ra, bạn cần tiếp nhận _tăng cường tiêu cực_, học hỏi từ đó và thay đổi hướng đi. Nếu kết quả là tích cực, bạn cần xây dựng dựa trên _tăng cường tích cực_ đó. + +![peter và con sói](../../../8-Reinforcement/images/peter.png) + +> Peter và bạn bè của cậu ấy cần thoát khỏi con sói đói! Hình ảnh bởi [Jen Looper](https://twitter.com/jenlooper) + +## Chủ đề khu vực: Peter và con sói (Nga) + +[Peter và con sói](https://en.wikipedia.org/wiki/Peter_and_the_Wolf) là một câu chuyện cổ tích âm nhạc được viết bởi nhà soạn nhạc người Nga [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Đây là câu chuyện về cậu bé tiên phong Peter, người dũng cảm rời khỏi nhà để đến khu rừng và đuổi theo con sói. Trong phần này, chúng ta sẽ huấn luyện các thuật toán học máy để giúp Peter: + +- **Khám phá** khu vực xung quanh và xây dựng bản đồ điều hướng tối ưu +- **Học** cách sử dụng ván trượt và giữ thăng bằng trên đó để di chuyển nhanh hơn. + +[![Peter và con sói](https://img.youtube.com/vi/Fmi5zHg4QSM/0.jpg)](https://www.youtube.com/watch?v=Fmi5zHg4QSM) + +> 🎥 Nhấp vào hình ảnh trên để nghe Peter và con sói của Prokofiev + +## Học tăng cường + +Trong các phần trước, bạn đã thấy hai ví dụ về các vấn đề học máy: + +- **Có giám sát**, nơi chúng ta có các tập dữ liệu gợi ý các giải pháp mẫu cho vấn đề mà chúng ta muốn giải quyết. [Phân loại](../4-Classification/README.md) và [hồi quy](../2-Regression/README.md) là các nhiệm vụ học có giám sát. +- **Không giám sát**, trong đó chúng ta không có dữ liệu huấn luyện được gắn nhãn. Ví dụ chính của học không giám sát là [Phân cụm](../5-Clustering/README.md). + +Trong phần này, chúng ta sẽ giới thiệu một loại vấn đề học mới không yêu cầu dữ liệu huấn luyện được gắn nhãn. Có một số loại vấn đề như vậy: + +- **[Học bán giám sát](https://wikipedia.org/wiki/Semi-supervised_learning)**, nơi chúng ta có rất nhiều dữ liệu không gắn nhãn có thể được sử dụng để tiền huấn luyện mô hình. +- **[Học tăng cường](https://wikipedia.org/wiki/Reinforcement_learning)**, trong đó một tác nhân học cách hành xử bằng cách thực hiện các thí nghiệm trong một môi trường mô phỏng. + +### Ví dụ - trò chơi máy tính + +Giả sử bạn muốn dạy máy tính chơi một trò chơi, chẳng hạn như cờ vua, hoặc [Super Mario](https://wikipedia.org/wiki/Super_Mario). Để máy tính chơi trò chơi, chúng ta cần nó dự đoán nước đi nào cần thực hiện trong mỗi trạng thái của trò chơi. Mặc dù điều này có vẻ giống như một vấn đề phân loại, nhưng thực tế không phải - vì chúng ta không có tập dữ liệu với các trạng thái và hành động tương ứng. Mặc dù chúng ta có thể có một số dữ liệu như các trận đấu cờ vua hiện có hoặc các bản ghi của người chơi chơi Super Mario, nhưng có khả năng dữ liệu đó sẽ không đủ để bao phủ một số lượng lớn các trạng thái có thể xảy ra. + +Thay vì tìm kiếm dữ liệu trò chơi hiện có, **Học tăng cường** (RL) dựa trên ý tưởng *cho máy tính chơi* nhiều lần và quan sát kết quả. Do đó, để áp dụng Học tăng cường, chúng ta cần hai điều: + +- **Một môi trường** và **một trình mô phỏng** cho phép chúng ta chơi trò chơi nhiều lần. Trình mô phỏng này sẽ định nghĩa tất cả các quy tắc trò chơi cũng như các trạng thái và hành động có thể xảy ra. + +- **Một hàm thưởng**, sẽ cho chúng ta biết chúng ta đã làm tốt như thế nào trong mỗi nước đi hoặc trò chơi. + +Sự khác biệt chính giữa các loại học máy khác và RL là trong RL chúng ta thường không biết liệu chúng ta thắng hay thua cho đến khi kết thúc trò chơi. Do đó, chúng ta không thể nói liệu một nước đi cụ thể có tốt hay không - chúng ta chỉ nhận được phần thưởng vào cuối trò chơi. Và mục tiêu của chúng ta là thiết kế các thuật toán cho phép chúng ta huấn luyện một mô hình trong điều kiện không chắc chắn. Chúng ta sẽ tìm hiểu về một thuật toán RL gọi là **Q-learning**. + +## Các bài học + +1. [Giới thiệu về học tăng cường và Q-Learning](1-QLearning/README.md) +2. [Sử dụng môi trường mô phỏng gym](2-Gym/README.md) + +## Tín dụng + +"Giới thiệu về Học Tăng Cường" được viết với ♥️ bởi [Dmitry Soshnikov](http://soshnikov.com) + +--- + +**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 diff --git a/translations/vi/9-Real-World/1-Applications/README.md b/translations/vi/9-Real-World/1-Applications/README.md new file mode 100644 index 00000000..8b9c7c82 --- /dev/null +++ b/translations/vi/9-Real-World/1-Applications/README.md @@ -0,0 +1,159 @@ + +# Tái bút: Học máy trong thế giới thực + +![Tóm tắt về học máy trong thế giới thực qua sketchnote](../../../../sketchnotes/ml-realworld.png) +> Sketchnote bởi [Tomomi Imura](https://www.twitter.com/girlie_mac) + +Trong chương trình học này, bạn đã học nhiều cách để chuẩn bị dữ liệu cho việc huấn luyện và tạo ra các mô hình học máy. Bạn đã xây dựng một loạt các mô hình kinh điển như hồi quy, phân cụm, phân loại, xử lý ngôn ngữ tự nhiên và chuỗi thời gian. Chúc mừng bạn! Bây giờ, bạn có thể đang tự hỏi tất cả những điều này để làm gì... ứng dụng thực tế của các mô hình này là gì? + +Mặc dù AI, thường sử dụng học sâu, đã thu hút rất nhiều sự quan tâm trong ngành công nghiệp, nhưng các mô hình học máy cổ điển vẫn có những ứng dụng giá trị. Bạn thậm chí có thể đang sử dụng một số ứng dụng này ngay hôm nay! Trong bài học này, bạn sẽ khám phá cách tám ngành công nghiệp và lĩnh vực chuyên môn khác nhau sử dụng các loại mô hình này để làm cho ứng dụng của họ trở nên hiệu quả hơn, đáng tin cậy hơn, thông minh hơn và có giá trị hơn đối với người dùng. + +## [Câu hỏi trước bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +## 💰 Tài chính + +Ngành tài chính mang lại nhiều cơ hội cho học máy. Nhiều vấn đề trong lĩnh vực này có thể được mô hình hóa và giải quyết bằng cách sử dụng học máy. + +### Phát hiện gian lận thẻ tín dụng + +Chúng ta đã học về [phân cụm k-means](../../5-Clustering/2-K-Means/README.md) trước đó trong khóa học, nhưng làm thế nào nó có thể được sử dụng để giải quyết các vấn đề liên quan đến gian lận thẻ tín dụng? + +Phân cụm k-means rất hữu ích trong một kỹ thuật phát hiện gian lận thẻ tín dụng gọi là **phát hiện điểm ngoại lai**. Các điểm ngoại lai, hoặc sự sai lệch trong các quan sát về một tập dữ liệu, có thể cho chúng ta biết liệu một thẻ tín dụng đang được sử dụng bình thường hay có điều gì bất thường đang xảy ra. Như được trình bày trong bài báo liên kết dưới đây, bạn có thể phân loại dữ liệu thẻ tín dụng bằng thuật toán phân cụm k-means và gán mỗi giao dịch vào một cụm dựa trên mức độ ngoại lai của nó. Sau đó, bạn có thể đánh giá các cụm rủi ro nhất để phân biệt giao dịch gian lận và hợp pháp. +[Tham khảo](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.680.1195&rep=rep1&type=pdf) + +### Quản lý tài sản + +Trong quản lý tài sản, một cá nhân hoặc công ty xử lý các khoản đầu tư thay mặt cho khách hàng của họ. Công việc của họ là duy trì và tăng trưởng tài sản trong dài hạn, vì vậy việc chọn các khoản đầu tư có hiệu quả là rất quan trọng. + +Một cách để đánh giá hiệu quả của một khoản đầu tư cụ thể là thông qua hồi quy thống kê. [Hồi quy tuyến tính](../../2-Regression/1-Tools/README.md) là một công cụ giá trị để hiểu cách một quỹ hoạt động so với một chuẩn mực nào đó. Chúng ta cũng có thể suy luận liệu kết quả của hồi quy có ý nghĩa thống kê hay không, hoặc mức độ ảnh hưởng của nó đến các khoản đầu tư của khách hàng. Bạn thậm chí có thể mở rộng phân tích của mình bằng cách sử dụng hồi quy đa biến, nơi các yếu tố rủi ro bổ sung có thể được tính đến. Để biết ví dụ về cách điều này hoạt động đối với một quỹ cụ thể, hãy xem bài báo dưới đây về việc đánh giá hiệu suất quỹ bằng hồi quy. +[Tham khảo](http://www.brightwoodventures.com/evaluating-fund-performance-using-regression/) + +## 🎓 Giáo dục + +Ngành giáo dục cũng là một lĩnh vực rất thú vị nơi học máy có thể được áp dụng. Có những vấn đề thú vị cần giải quyết như phát hiện gian lận trong bài kiểm tra hoặc bài luận, hoặc quản lý sự thiên vị, dù vô tình hay không, trong quá trình chấm điểm. + +### Dự đoán hành vi của học sinh + +[Coursera](https://coursera.com), một nhà cung cấp khóa học trực tuyến mở, có một blog công nghệ tuyệt vời nơi họ thảo luận về nhiều quyết định kỹ thuật. Trong nghiên cứu trường hợp này, họ đã vẽ một đường hồi quy để cố gắng khám phá bất kỳ mối tương quan nào giữa điểm NPS (Net Promoter Score) thấp và việc giữ chân hoặc bỏ học khóa học. +[Tham khảo](https://medium.com/coursera-engineering/controlled-regression-quantifying-the-impact-of-course-quality-on-learner-retention-31f956bd592a) + +### Giảm thiểu sự thiên vị + +[Grammarly](https://grammarly.com), một trợ lý viết giúp kiểm tra lỗi chính tả và ngữ pháp, sử dụng các [hệ thống xử lý ngôn ngữ tự nhiên](../../6-NLP/README.md) tinh vi trong các sản phẩm của mình. Họ đã xuất bản một nghiên cứu trường hợp thú vị trên blog công nghệ của mình về cách họ xử lý sự thiên vị giới tính trong học máy, điều mà bạn đã học trong [bài học về công bằng](../../1-Introduction/3-fairness/README.md). +[Tham khảo](https://www.grammarly.com/blog/engineering/mitigating-gender-bias-in-autocorrect/) + +## 👜 Bán lẻ + +Ngành bán lẻ chắc chắn có thể hưởng lợi từ việc sử dụng học máy, từ việc tạo ra hành trình khách hàng tốt hơn đến việc quản lý hàng tồn kho một cách tối ưu. + +### Cá nhân hóa hành trình khách hàng + +Tại Wayfair, một công ty bán đồ gia dụng như nội thất, việc giúp khách hàng tìm thấy sản phẩm phù hợp với sở thích và nhu cầu của họ là điều tối quan trọng. Trong bài viết này, các kỹ sư của công ty mô tả cách họ sử dụng học máy và NLP để "hiển thị kết quả phù hợp cho khách hàng". Đáng chú ý, Công cụ Ý định Tìm kiếm của họ đã được xây dựng để sử dụng trích xuất thực thể, huấn luyện bộ phân loại, trích xuất tài sản và ý kiến, và gắn thẻ cảm xúc trên các đánh giá của khách hàng. Đây là một trường hợp sử dụng kinh điển của cách NLP hoạt động trong bán lẻ trực tuyến. +[Tham khảo](https://www.aboutwayfair.com/tech-innovation/how-we-use-machine-learning-and-natural-language-processing-to-empower-search) + +### Quản lý hàng tồn kho + +Các công ty sáng tạo, linh hoạt như [StitchFix](https://stitchfix.com), một dịch vụ hộp gửi quần áo đến người tiêu dùng, dựa rất nhiều vào học máy để đưa ra gợi ý và quản lý hàng tồn kho. Các nhóm tạo kiểu của họ làm việc cùng với các nhóm hàng hóa của họ, thực tế: "một trong những nhà khoa học dữ liệu của chúng tôi đã thử nghiệm với một thuật toán di truyền và áp dụng nó vào lĩnh vực thời trang để dự đoán một món đồ quần áo thành công mà hiện tại chưa tồn tại. Chúng tôi đã mang điều đó đến nhóm hàng hóa và bây giờ họ có thể sử dụng nó như một công cụ." +[Tham khảo](https://www.zdnet.com/article/how-stitch-fix-uses-machine-learning-to-master-the-science-of-styling/) + +## 🏥 Chăm sóc sức khỏe + +Ngành chăm sóc sức khỏe có thể tận dụng học máy để tối ưu hóa các nhiệm vụ nghiên cứu và các vấn đề hậu cần như tái nhập viện hoặc ngăn chặn sự lây lan của bệnh. + +### Quản lý thử nghiệm lâm sàng + +Độc tính trong các thử nghiệm lâm sàng là một mối quan tâm lớn đối với các nhà sản xuất thuốc. Bao nhiêu độc tính là có thể chấp nhận được? Trong nghiên cứu này, việc phân tích các phương pháp thử nghiệm lâm sàng khác nhau đã dẫn đến việc phát triển một cách tiếp cận mới để dự đoán khả năng kết quả của thử nghiệm lâm sàng. Cụ thể, họ đã sử dụng random forest để tạo ra một [bộ phân loại](../../4-Classification/README.md) có khả năng phân biệt giữa các nhóm thuốc. +[Tham khảo](https://www.sciencedirect.com/science/article/pii/S2451945616302914) + +### Quản lý tái nhập viện + +Chăm sóc bệnh viện rất tốn kém, đặc biệt khi bệnh nhân phải tái nhập viện. Bài báo này thảo luận về một công ty sử dụng học máy để dự đoán khả năng tái nhập viện bằng cách sử dụng các thuật toán [phân cụm](../../5-Clustering/README.md). Các cụm này giúp các nhà phân tích "phát hiện các nhóm tái nhập viện có thể chia sẻ một nguyên nhân chung". +[Tham khảo](https://healthmanagement.org/c/healthmanagement/issuearticle/hospital-readmissions-and-machine-learning) + +### Quản lý bệnh dịch + +Đại dịch gần đây đã làm nổi bật cách học máy có thể hỗ trợ ngăn chặn sự lây lan của bệnh. Trong bài viết này, bạn sẽ nhận ra việc sử dụng ARIMA, logistic curves, hồi quy tuyến tính và SARIMA. "Công việc này là một nỗ lực để tính toán tốc độ lây lan của virus này và do đó dự đoán số ca tử vong, hồi phục và ca nhiễm, để giúp chúng ta chuẩn bị tốt hơn và sống sót." +[Tham khảo](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7979218/) + +## 🌲 Sinh thái và Công nghệ xanh + +Thiên nhiên và sinh thái bao gồm nhiều hệ thống nhạy cảm nơi sự tương tác giữa động vật và thiên nhiên được chú trọng. Việc đo lường chính xác các hệ thống này và hành động phù hợp nếu có điều gì xảy ra, như cháy rừng hoặc sự suy giảm số lượng động vật, là rất quan trọng. + +### Quản lý rừng + +Bạn đã học về [Học tăng cường](../../8-Reinforcement/README.md) trong các bài học trước. Nó có thể rất hữu ích khi cố gắng dự đoán các mô hình trong tự nhiên. Đặc biệt, nó có thể được sử dụng để theo dõi các vấn đề sinh thái như cháy rừng và sự lây lan của các loài xâm lấn. Ở Canada, một nhóm các nhà nghiên cứu đã sử dụng Học tăng cường để xây dựng các mô hình động lực cháy rừng từ hình ảnh vệ tinh. Sử dụng một quy trình "lan truyền không gian (SSP)" sáng tạo, họ hình dung một đám cháy rừng như "tác nhân tại bất kỳ ô nào trong cảnh quan." "Tập hợp các hành động mà đám cháy có thể thực hiện từ một vị trí tại bất kỳ thời điểm nào bao gồm lan truyền về phía bắc, nam, đông, hoặc tây hoặc không lan truyền. + +Cách tiếp cận này đảo ngược thiết lập RL thông thường vì động lực của Quy trình Quyết định Markov (MDP) tương ứng là một hàm đã biết đối với sự lan truyền ngay lập tức của cháy rừng." Đọc thêm về các thuật toán kinh điển được nhóm này sử dụng tại liên kết dưới đây. +[Tham khảo](https://www.frontiersin.org/articles/10.3389/fict.2018.00006/full) + +### Cảm biến chuyển động của động vật + +Mặc dù học sâu đã tạo ra một cuộc cách mạng trong việc theo dõi chuyển động của động vật bằng hình ảnh (bạn có thể tự xây dựng [trình theo dõi gấu Bắc Cực](https://docs.microsoft.com/learn/modules/build-ml-model-with-azure-stream-analytics/?WT.mc_id=academic-77952-leestott) tại đây), học máy cổ điển vẫn có chỗ đứng trong nhiệm vụ này. + +Các cảm biến để theo dõi chuyển động của động vật nuôi và IoT sử dụng loại xử lý hình ảnh này, nhưng các kỹ thuật học máy cơ bản hơn lại hữu ích để tiền xử lý dữ liệu. Ví dụ, trong bài báo này, tư thế của cừu đã được giám sát và phân tích bằng các thuật toán phân loại khác nhau. Bạn có thể nhận ra đường cong ROC ở trang 335. +[Tham khảo](https://druckhaus-hofmann.de/gallery/31-wj-feb-2020.pdf) + +### ⚡️ Quản lý năng lượng + +Trong các bài học về [dự báo chuỗi thời gian](../../7-TimeSeries/README.md), chúng ta đã đề cập đến khái niệm đồng hồ đỗ xe thông minh để tạo doanh thu cho một thị trấn dựa trên việc hiểu cung và cầu. Bài viết này thảo luận chi tiết cách phân cụm, hồi quy và dự báo chuỗi thời gian kết hợp để giúp dự đoán mức sử dụng năng lượng trong tương lai ở Ireland, dựa trên đồng hồ đo thông minh. +[Tham khảo](https://www-cdn.knime.com/sites/default/files/inline-images/knime_bigdata_energy_timeseries_whitepaper.pdf) + +## 💼 Bảo hiểm + +Ngành bảo hiểm là một lĩnh vực khác sử dụng học máy để xây dựng và tối ưu hóa các mô hình tài chính và tính toán khả thi. + +### Quản lý biến động + +MetLife, một nhà cung cấp bảo hiểm nhân thọ, rất cởi mở về cách họ phân tích và giảm thiểu biến động trong các mô hình tài chính của mình. Trong bài viết này, bạn sẽ thấy các hình ảnh trực quan về phân loại nhị phân và thứ tự. Bạn cũng sẽ khám phá các hình ảnh trực quan về dự báo. +[Tham khảo](https://investments.metlife.com/content/dam/metlifecom/us/investments/insights/research-topics/macro-strategy/pdf/MetLifeInvestmentManagement_MachineLearnedRanking_070920.pdf) + +## 🎨 Nghệ thuật, Văn hóa và Văn học + +Trong lĩnh vực nghệ thuật, ví dụ như báo chí, có nhiều vấn đề thú vị. Phát hiện tin giả là một vấn đề lớn vì nó đã được chứng minh là ảnh hưởng đến ý kiến của mọi người và thậm chí làm lung lay các nền dân chủ. Các bảo tàng cũng có thể hưởng lợi từ việc sử dụng học máy trong mọi thứ từ tìm kiếm liên kết giữa các hiện vật đến lập kế hoạch tài nguyên. + +### Phát hiện tin giả + +Phát hiện tin giả đã trở thành một trò chơi mèo vờn chuột trong truyền thông ngày nay. Trong bài viết này, các nhà nghiên cứu đề xuất rằng một hệ thống kết hợp một số kỹ thuật học máy mà chúng ta đã nghiên cứu có thể được thử nghiệm và mô hình tốt nhất được triển khai: "Hệ thống này dựa trên xử lý ngôn ngữ tự nhiên để trích xuất các đặc điểm từ dữ liệu và sau đó các đặc điểm này được sử dụng để huấn luyện các bộ phân loại học máy như Naive Bayes, Support Vector Machine (SVM), Random Forest (RF), Stochastic Gradient Descent (SGD), và Logistic Regression (LR)." +[Tham khảo](https://www.irjet.net/archives/V7/i6/IRJET-V7I6688.pdf) + +Bài viết này cho thấy cách kết hợp các lĩnh vực học máy khác nhau có thể tạo ra kết quả thú vị giúp ngăn chặn tin giả lan truyền và gây ra thiệt hại thực sự; trong trường hợp này, động lực là sự lan truyền tin đồn về các phương pháp điều trị COVID đã kích động bạo lực đám đông. + +### Học máy trong bảo tàng + +Các bảo tàng đang ở ngưỡng cửa của một cuộc cách mạng AI, nơi việc lập danh mục và số hóa các bộ sưu tập và tìm kiếm liên kết giữa các hiện vật trở nên dễ dàng hơn khi công nghệ tiến bộ. Các dự án như [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources.) đang giúp mở khóa những bí ẩn của các bộ sưu tập khó tiếp cận như Lưu trữ Vatican. Nhưng, khía cạnh kinh doanh của các bảo tàng cũng hưởng lợi từ các mô hình học máy. + +Ví dụ, Viện Nghệ thuật Chicago đã xây dựng các mô hình để dự đoán những gì khán giả quan tâm và khi nào họ sẽ tham dự triển lãm. Mục tiêu là tạo ra trải nghiệm khách tham quan cá nhân hóa và tối ưu hóa mỗi lần người dùng ghé thăm bảo tàng. "Trong năm tài chính 2017, mô hình đã dự đoán số lượng khách tham quan và doanh thu vé với độ chính xác trong vòng 1%, theo Andrew Simnick, phó chủ tịch cấp cao tại Viện Nghệ thuật." +[Tham khảo](https://www.chicagobusiness.com/article/20180518/ISSUE01/180519840/art-institute-of-chicago-uses-data-to-make-exhibit-choices) + +## 🏷 Tiếp thị + +### Phân khúc khách hàng + +Các chiến lược tiếp thị hiệu quả nhất nhắm mục tiêu khách hàng theo những cách khác nhau dựa trên các nhóm khác nhau. Trong bài viết này, các ứng dụng của các thuật toán phân cụm được thảo luận để hỗ trợ tiếp thị phân biệt. Tiếp thị phân biệt giúp các công ty cải thiện nhận diện thương hiệu, tiếp cận nhiều khách hàng hơn và kiếm được nhiều tiền hơn. +[Tham khảo](https://ai.inqline.com/machine-learning-for-marketing-customer-segmentation/) + +## 🚀 Thử thách + +Xác định một lĩnh vực khác hưởng lợi từ một số kỹ thuật bạn đã học trong chương trình học này và khám phá cách nó sử dụng học máy. +## [Câu hỏi kiểm tra sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +## Ôn tập & Tự học + +Đội ngũ khoa học dữ liệu của Wayfair có một số video thú vị về cách họ sử dụng ML tại công ty của mình. Đáng để [xem qua](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos)! + +## Bài tập + +[Một cuộc săn tìm ML](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 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 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. \ No newline at end of file diff --git a/translations/vi/9-Real-World/1-Applications/assignment.md b/translations/vi/9-Real-World/1-Applications/assignment.md new file mode 100644 index 00000000..c5e596f0 --- /dev/null +++ b/translations/vi/9-Real-World/1-Applications/assignment.md @@ -0,0 +1,27 @@ + +# Một Cuộc Săn Lùng ML + +## Hướng dẫn + +Trong bài học này, bạn đã tìm hiểu về nhiều trường hợp sử dụng thực tế được giải quyết bằng ML cổ điển. Mặc dù việc sử dụng học sâu, các kỹ thuật và công cụ mới trong AI, và tận dụng mạng nơ-ron đã giúp tăng tốc sản xuất các công cụ hỗ trợ trong các lĩnh vực này, ML cổ điển sử dụng các kỹ thuật trong chương trình học này vẫn giữ giá trị lớn. + +Trong bài tập này, hãy tưởng tượng rằng bạn đang tham gia một hackathon. Sử dụng những gì bạn đã học trong chương trình học để đề xuất một giải pháp sử dụng ML cổ điển nhằm giải quyết một vấn đề trong một trong các lĩnh vực được thảo luận trong bài học này. Tạo một bài thuyết trình nơi bạn thảo luận cách bạn sẽ triển khai ý tưởng của mình. Điểm thưởng nếu bạn có thể thu thập dữ liệu mẫu và xây dựng một mô hình ML để hỗ trợ ý tưởng của mình! + +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| -------- | ------------------------------------------------------------------- | ------------------------------------------------ | ---------------------- | +| | Một bài thuyết trình PowerPoint được trình bày - điểm thưởng nếu xây dựng mô hình | Một bài thuyết trình cơ bản, không sáng tạo được trình bày | Công việc chưa hoàn thành | + +--- + +**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 diff --git a/translations/vi/9-Real-World/2-Debugging-ML-Models/README.md b/translations/vi/9-Real-World/2-Debugging-ML-Models/README.md new file mode 100644 index 00000000..6cae729c --- /dev/null +++ b/translations/vi/9-Real-World/2-Debugging-ML-Models/README.md @@ -0,0 +1,178 @@ + +# Tái bút: Gỡ lỗi mô hình trong Machine Learning bằng các thành phần của bảng điều khiển AI có trách nhiệm + +## [Câu hỏi trước bài giảng](https://ff-quizzes.netlify.app/en/ml/) + +## Giới thiệu + +Machine learning ảnh hưởng đến cuộc sống hàng ngày của chúng ta. AI đang dần xuất hiện trong một số hệ thống quan trọng nhất ảnh hưởng đến chúng ta với tư cách cá nhân cũng như xã hội, từ chăm sóc sức khỏe, tài chính, giáo dục, đến việc làm. Ví dụ, các hệ thống và mô hình được sử dụng trong các nhiệm vụ ra quyết định hàng ngày như chẩn đoán y tế hoặc phát hiện gian lận. Do đó, sự tiến bộ của AI cùng với việc áp dụng nhanh chóng đang đối mặt với những kỳ vọng xã hội đang thay đổi và các quy định ngày càng tăng. Chúng ta thường thấy những trường hợp AI không đáp ứng được kỳ vọng, làm lộ ra những thách thức mới, và các chính phủ bắt đầu điều chỉnh các giải pháp AI. Vì vậy, điều quan trọng là các mô hình này phải được phân tích để đảm bảo kết quả công bằng, đáng tin cậy, bao trùm, minh bạch và có trách nhiệm cho tất cả mọi người. + +Trong chương trình học này, chúng ta sẽ tìm hiểu các công cụ thực tiễn có thể được sử dụng để đánh giá xem một mô hình có vấn đề về AI có trách nhiệm hay không. Các kỹ thuật gỡ lỗi truyền thống trong machine learning thường dựa trên các tính toán định lượng như độ chính xác tổng hợp hoặc lỗi trung bình. Hãy tưởng tượng điều gì sẽ xảy ra khi dữ liệu bạn sử dụng để xây dựng các mô hình này thiếu một số nhóm nhân khẩu học, chẳng hạn như chủng tộc, giới tính, quan điểm chính trị, tôn giáo, hoặc đại diện không cân đối các nhóm này. Hoặc khi đầu ra của mô hình được diễn giải để ưu tiên một số nhóm nhân khẩu học. Điều này có thể dẫn đến sự đại diện quá mức hoặc thiếu mức của các nhóm đặc điểm nhạy cảm, gây ra các vấn đề về công bằng, bao trùm hoặc độ tin cậy từ mô hình. Một yếu tố khác là các mô hình machine learning thường được coi là "hộp đen", khiến việc hiểu và giải thích điều gì thúc đẩy dự đoán của mô hình trở nên khó khăn. Tất cả những điều này là thách thức mà các nhà khoa học dữ liệu và nhà phát triển AI phải đối mặt khi họ không có đủ công cụ để gỡ lỗi và đánh giá tính công bằng hoặc độ tin cậy của mô hình. + +Trong bài học này, bạn sẽ học cách gỡ lỗi mô hình của mình bằng cách sử dụng: + +- **Phân tích lỗi**: xác định nơi trong phân phối dữ liệu mà mô hình có tỷ lệ lỗi cao. +- **Tổng quan mô hình**: thực hiện phân tích so sánh giữa các nhóm dữ liệu khác nhau để khám phá sự chênh lệch trong các chỉ số hiệu suất của mô hình. +- **Phân tích dữ liệu**: điều tra nơi có thể xảy ra sự đại diện quá mức hoặc thiếu mức trong dữ liệu của bạn, điều này có thể làm lệch mô hình để ưu tiên một nhóm nhân khẩu học hơn nhóm khác. +- **Tầm quan trọng của đặc điểm**: hiểu các đặc điểm nào đang thúc đẩy dự đoán của mô hình ở cấp độ toàn cầu hoặc cấp độ cục bộ. + +## Điều kiện tiên quyết + +Trước khi bắt đầu, vui lòng xem lại [Các công cụ AI có trách nhiệm dành cho nhà phát triển](https://www.microsoft.com/ai/ai-lab-responsible-ai-dashboard) + +> ![Gif về các công cụ AI có trách nhiệm](../../../../9-Real-World/2-Debugging-ML-Models/images/rai-overview.gif) + +## Phân tích lỗi + +Các chỉ số hiệu suất mô hình truyền thống được sử dụng để đo lường độ chính xác chủ yếu là các tính toán dựa trên dự đoán đúng và sai. Ví dụ, xác định rằng một mô hình chính xác 89% thời gian với lỗi mất mát là 0.001 có thể được coi là hiệu suất tốt. Tuy nhiên, lỗi thường không được phân phối đồng đều trong tập dữ liệu cơ bản của bạn. Bạn có thể đạt được điểm độ chính xác mô hình 89% nhưng phát hiện ra rằng có những vùng dữ liệu khác nhau mà mô hình thất bại 42% thời gian. Hậu quả của các mẫu lỗi này với một số nhóm dữ liệu nhất định có thể dẫn đến các vấn đề về công bằng hoặc độ tin cậy. Điều cần thiết là phải hiểu các khu vực mà mô hình hoạt động tốt hoặc không. Các vùng dữ liệu có số lượng lỗi cao trong mô hình của bạn có thể hóa ra là một nhóm nhân khẩu học quan trọng. + +![Phân tích và gỡ lỗi lỗi mô hình](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-distribution.png) + +Thành phần Phân tích Lỗi trên bảng điều khiển RAI minh họa cách lỗi mô hình được phân phối qua các nhóm khác nhau bằng cách sử dụng hình ảnh cây. Điều này hữu ích trong việc xác định các đặc điểm hoặc khu vực có tỷ lệ lỗi cao trong tập dữ liệu của bạn. Bằng cách thấy nơi hầu hết các lỗi của mô hình xuất hiện, bạn có thể bắt đầu điều tra nguyên nhân gốc rễ. Bạn cũng có thể tạo các nhóm dữ liệu để thực hiện phân tích. Các nhóm dữ liệu này hỗ trợ trong quá trình gỡ lỗi để xác định lý do tại sao hiệu suất mô hình tốt ở một nhóm nhưng lại sai ở nhóm khác. + +![Phân tích lỗi](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-cohort.png) + +Các chỉ báo trực quan trên bản đồ cây giúp xác định các khu vực vấn đề nhanh hơn. Ví dụ, màu đỏ đậm hơn của một nút cây cho thấy tỷ lệ lỗi cao hơn. + +Bản đồ nhiệt là một chức năng hình ảnh khác mà người dùng có thể sử dụng để điều tra tỷ lệ lỗi bằng cách sử dụng một hoặc hai đặc điểm để tìm yếu tố góp phần vào lỗi mô hình trên toàn bộ tập dữ liệu hoặc các nhóm. + +![Bản đồ nhiệt phân tích lỗi](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-heatmap.png) + +Sử dụng phân tích lỗi khi bạn cần: + +* Hiểu sâu về cách lỗi mô hình được phân phối qua tập dữ liệu và qua nhiều đầu vào và đặc điểm. +* Phân tích các chỉ số hiệu suất tổng hợp để tự động khám phá các nhóm lỗi nhằm thông báo các bước giảm thiểu mục tiêu của bạn. + +## Tổng quan mô hình + +Đánh giá hiệu suất của một mô hình machine learning yêu cầu hiểu toàn diện về hành vi của nó. Điều này có thể đạt được bằng cách xem xét nhiều chỉ số như tỷ lệ lỗi, độ chính xác, recall, precision, hoặc MAE (Mean Absolute Error) để tìm sự chênh lệch giữa các chỉ số hiệu suất. Một chỉ số hiệu suất có thể trông tuyệt vời, nhưng các lỗi có thể được lộ ra ở một chỉ số khác. Ngoài ra, so sánh các chỉ số để tìm sự chênh lệch trên toàn bộ tập dữ liệu hoặc các nhóm giúp làm sáng tỏ nơi mô hình hoạt động tốt hoặc không. Điều này đặc biệt quan trọng trong việc xem hiệu suất của mô hình giữa các đặc điểm nhạy cảm và không nhạy cảm (ví dụ: chủng tộc, giới tính, hoặc tuổi của bệnh nhân) để phát hiện sự không công bằng tiềm ẩn mà mô hình có thể có. Ví dụ, phát hiện rằng mô hình có nhiều lỗi hơn ở một nhóm có các đặc điểm nhạy cảm có thể tiết lộ sự không công bằng tiềm ẩn. + +Thành phần Tổng quan Mô hình của bảng điều khiển RAI không chỉ giúp phân tích các chỉ số hiệu suất của sự đại diện dữ liệu trong một nhóm, mà còn cung cấp cho người dùng khả năng so sánh hành vi của mô hình giữa các nhóm khác nhau. + +![Nhóm dữ liệu - tổng quan mô hình trong bảng điều khiển RAI](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-dataset-cohorts.png) + +Chức năng phân tích dựa trên đặc điểm của thành phần này cho phép người dùng thu hẹp các nhóm dữ liệu con trong một đặc điểm cụ thể để xác định các bất thường ở mức độ chi tiết. Ví dụ, bảng điều khiển có trí tuệ tích hợp để tự động tạo các nhóm cho một đặc điểm do người dùng chọn (ví dụ: *"time_in_hospital < 3"* hoặc *"time_in_hospital >= 7"*). Điều này cho phép người dùng cô lập một đặc điểm cụ thể từ một nhóm dữ liệu lớn hơn để xem liệu nó có phải là yếu tố ảnh hưởng chính đến kết quả sai của mô hình hay không. + +![Nhóm đặc điểm - tổng quan mô hình trong bảng điều khiển RAI](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-feature-cohorts.png) + +Thành phần Tổng quan Mô hình hỗ trợ hai loại chỉ số chênh lệch: + +**Chênh lệch trong hiệu suất mô hình**: Các chỉ số này tính toán sự chênh lệch (khác biệt) trong giá trị của chỉ số hiệu suất được chọn giữa các nhóm dữ liệu. Một vài ví dụ: + +* Chênh lệch trong tỷ lệ chính xác +* Chênh lệch trong tỷ lệ lỗi +* Chênh lệch trong precision +* Chênh lệch trong recall +* Chênh lệch trong lỗi tuyệt đối trung bình (MAE) + +**Chênh lệch trong tỷ lệ lựa chọn**: Chỉ số này chứa sự khác biệt trong tỷ lệ lựa chọn (dự đoán thuận lợi) giữa các nhóm. Một ví dụ về điều này là chênh lệch trong tỷ lệ phê duyệt khoản vay. Tỷ lệ lựa chọn nghĩa là phần trăm điểm dữ liệu trong mỗi lớp được phân loại là 1 (trong phân loại nhị phân) hoặc phân phối giá trị dự đoán (trong hồi quy). + +## Phân tích dữ liệu + +> "Nếu bạn tra tấn dữ liệu đủ lâu, nó sẽ thú nhận bất cứ điều gì" - Ronald Coase + +Câu nói này nghe có vẻ cực đoan, nhưng đúng là dữ liệu có thể bị thao túng để hỗ trợ bất kỳ kết luận nào. Sự thao túng này đôi khi xảy ra một cách vô tình. Là con người, chúng ta đều có thành kiến, và thường khó nhận thức được khi nào chúng ta đang đưa thành kiến vào dữ liệu. Đảm bảo tính công bằng trong AI và machine learning vẫn là một thách thức phức tạp. + +Dữ liệu là một điểm mù lớn đối với các chỉ số hiệu suất mô hình truyền thống. Bạn có thể có điểm độ chính xác cao, nhưng điều này không phải lúc nào cũng phản ánh sự thiên vị dữ liệu cơ bản có thể tồn tại trong tập dữ liệu của bạn. Ví dụ, nếu một tập dữ liệu về nhân viên có 27% phụ nữ ở vị trí điều hành trong một công ty và 73% nam giới ở cùng cấp độ, một mô hình AI quảng cáo việc làm được đào tạo trên dữ liệu này có thể chủ yếu nhắm mục tiêu đến nam giới cho các vị trí cấp cao. Sự mất cân bằng này trong dữ liệu đã làm lệch dự đoán của mô hình để ưu tiên một giới tính. Điều này cho thấy vấn đề công bằng, nơi có sự thiên vị giới tính trong mô hình AI. + +Thành phần Phân tích Dữ liệu trên bảng điều khiển RAI giúp xác định các khu vực có sự đại diện quá mức hoặc thiếu mức trong tập dữ liệu. Nó giúp người dùng chẩn đoán nguyên nhân gốc rễ của các lỗi và vấn đề công bằng được tạo ra từ sự mất cân bằng dữ liệu hoặc thiếu sự đại diện của một nhóm dữ liệu cụ thể. Điều này cung cấp cho người dùng khả năng hình dung tập dữ liệu dựa trên kết quả dự đoán và thực tế, nhóm lỗi, và các đặc điểm cụ thể. Đôi khi việc phát hiện một nhóm dữ liệu thiếu đại diện cũng có thể tiết lộ rằng mô hình không học tốt, dẫn đến tỷ lệ lỗi cao. Có một mô hình có sự thiên vị dữ liệu không chỉ là vấn đề công bằng mà còn cho thấy mô hình không bao trùm hoặc đáng tin cậy. + +![Thành phần Phân tích Dữ liệu trên bảng điều khiển RAI](../../../../9-Real-World/2-Debugging-ML-Models/images/dataanalysis-cover.png) + +Sử dụng phân tích dữ liệu khi bạn cần: + +* Khám phá thống kê tập dữ liệu của bạn bằng cách chọn các bộ lọc khác nhau để phân chia dữ liệu của bạn thành các chiều khác nhau (còn được gọi là nhóm). +* Hiểu sự phân phối của tập dữ liệu của bạn qua các nhóm và nhóm đặc điểm khác nhau. +* Xác định liệu các phát hiện của bạn liên quan đến công bằng, phân tích lỗi, và nhân quả (được lấy từ các thành phần khác của bảng điều khiển) có phải là kết quả của sự phân phối tập dữ liệu của bạn hay không. +* Quyết định khu vực nào cần thu thập thêm dữ liệu để giảm thiểu các lỗi xuất phát từ vấn đề đại diện, nhiễu nhãn, nhiễu đặc điểm, thiên vị nhãn, và các yếu tố tương tự. + +## Giải thích mô hình + +Các mô hình machine learning thường được coi là "hộp đen". Hiểu các đặc điểm dữ liệu chính nào thúc đẩy dự đoán của mô hình có thể là một thách thức. Điều quan trọng là phải cung cấp sự minh bạch về lý do tại sao một mô hình đưa ra một dự đoán nhất định. Ví dụ, nếu một hệ thống AI dự đoán rằng một bệnh nhân tiểu đường có nguy cơ nhập viện lại trong vòng chưa đầy 30 ngày, nó nên cung cấp dữ liệu hỗ trợ dẫn đến dự đoán của nó. Có các chỉ số dữ liệu hỗ trợ mang lại sự minh bạch để giúp các bác sĩ hoặc bệnh viện đưa ra quyết định sáng suốt. Ngoài ra, khả năng giải thích lý do tại sao một mô hình đưa ra dự đoán cho một bệnh nhân cụ thể cho phép trách nhiệm với các quy định y tế. Khi bạn sử dụng các mô hình machine learning theo cách ảnh hưởng đến cuộc sống của con người, điều quan trọng là phải hiểu và giải thích điều gì ảnh hưởng đến hành vi của mô hình. Giải thích và hiểu mô hình giúp trả lời các câu hỏi trong các tình huống như: + +* Gỡ lỗi mô hình: Tại sao mô hình của tôi lại mắc lỗi này? Làm thế nào tôi có thể cải thiện mô hình của mình? +* Hợp tác giữa con người và AI: Làm thế nào tôi có thể hiểu và tin tưởng các quyết định của mô hình? +* Tuân thủ quy định: Mô hình của tôi có đáp ứng các yêu cầu pháp lý không? + +Thành phần Tầm quan trọng của Đặc điểm trên bảng điều khiển RAI giúp bạn gỡ lỗi và có cái nhìn toàn diện về cách một mô hình đưa ra dự đoán. Đây cũng là một công cụ hữu ích cho các chuyên gia machine learning và những người ra quyết định để giải thích và cung cấp bằng chứng về các đặc điểm ảnh hưởng đến hành vi của mô hình nhằm tuân thủ quy định. Tiếp theo, người dùng có thể khám phá cả giải thích toàn cầu và cục bộ để xác nhận các đặc điểm nào thúc đẩy dự đoán của mô hình. Giải thích toàn cầu liệt kê các đặc điểm hàng đầu ảnh hưởng đến dự đoán tổng thể của mô hình. Giải thích cục bộ hiển thị các đặc điểm dẫn đến dự đoán của mô hình cho một trường hợp cụ thể. Khả năng đánh giá các giải thích cục bộ cũng hữu ích trong việc gỡ lỗi hoặc kiểm tra một trường hợp cụ thể để hiểu rõ hơn và giải thích lý do tại sao mô hình đưa ra dự đoán chính xác hoặc không chính xác. + +![Thành phần Tầm quan trọng của Đặc điểm trên bảng điều khiển RAI](../../../../9-Real-World/2-Debugging-ML-Models/images/9-feature-importance.png) + +* Giải thích toàn cầu: Ví dụ, các đặc điểm nào ảnh hưởng đến hành vi tổng thể của mô hình nhập viện lại của bệnh nhân tiểu đường? +* Giải thích cục bộ: Ví dụ, tại sao một bệnh nhân tiểu đường trên 60 tuổi với các lần nhập viện trước đó lại được dự đoán sẽ nhập viện lại hoặc không nhập viện lại trong vòng 30 ngày? + +Trong quá trình gỡ lỗi để kiểm tra hiệu suất của mô hình qua các nhóm khác nhau, Tầm quan trọng của Đặc điểm cho thấy mức độ ảnh hưởng của một đặc điểm qua các nhóm. Nó giúp tiết lộ các bất thường khi so sánh mức độ ảnh hưởng của đặc điểm trong việc thúc đẩy các dự đoán sai của mô hình. Thành phần Tầm quan trọng của Đặc điểm có thể hiển thị các giá trị trong một đặc điểm ảnh hưởng tích cực hoặc tiêu cực đến kết quả của mô hình. Ví dụ, nếu một mô hình đưa ra dự đoán không chính xác, thành phần này cung cấp khả năng khoan sâu và xác định đặc điểm hoặc giá trị đặc điểm nào đã thúc đẩy dự đoán. Mức độ chi tiết này không chỉ giúp trong việc gỡ lỗi mà còn cung cấp sự minh bạch và trách nhiệm trong các tình huống kiểm tra. Cuối cùng, thành phần này có thể giúp bạn xác định các vấn đề về công bằng. Để minh họa, nếu một đặc điểm nhạy cảm như dân tộc hoặc giới tính có ảnh hưởng lớn trong việc thúc đẩy dự đoán của mô hình, điều này có thể là dấu hiệu của sự thiên vị về chủng tộc hoặc giới tính trong mô hình. + +![Tầm quan trọng của đặc điểm](../../../../9-Real-World/2-Debugging-ML-Models/images/9-features-influence.png) + +Sử dụng khả năng giải thích khi bạn cần: + +* Xác định mức độ đáng tin cậy của các dự đoán của hệ thống AI của bạn bằng cách hiểu các đặc điểm nào quan trọng nhất đối với các dự đoán. +* Tiếp cận việc gỡ lỗi mô hình của bạn bằng cách hiểu nó trước và xác định liệu mô hình có đang sử dụng các đặc điểm lành mạnh hay chỉ là các mối tương quan sai lầm. +* Phát hiện các nguồn gốc tiềm năng của sự không công bằng bằng cách hiểu liệu mô hình có đang dựa vào các đặc điểm nhạy cảm hoặc các đặc điểm có mối tương quan cao với chúng hay không. +* Xây dựng lòng tin của người dùng vào các quyết định của mô hình của bạn bằng cách tạo ra các giải thích cục bộ để minh họa kết quả của chúng. +* Hoàn thành kiểm tra quy định của một hệ thống AI để xác nhận các mô hình và giám sát tác động của các quyết định mô hình đối với con người. + +## Kết luận + +Tất cả các thành phần của bảng điều khiển RAI đều là các công cụ thực tiễn giúp bạn xây dựng các mô hình machine learning ít gây hại hơn và đáng tin cậy hơn đối với xã hội. Nó cải thiện việc ngăn chặn các mối đe dọa đối với quyền con người; phân biệt hoặc loại trừ một số nhóm khỏi các cơ hội sống; và giảm thiểu nguy cơ tổn thương thể chất hoặc tâm lý. Nó cũng giúp xây dựng lòng tin vào các quyết định của mô +- **Đại diện quá mức hoặc quá ít**. Ý tưởng ở đây là một nhóm nhất định không được nhìn thấy trong một nghề nghiệp nào đó, và bất kỳ dịch vụ hoặc chức năng nào tiếp tục thúc đẩy điều này đều góp phần gây hại. + +### Bảng điều khiển Azure RAI + +[Bảng điều khiển Azure RAI](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) được xây dựng dựa trên các công cụ mã nguồn mở do các tổ chức và học viện hàng đầu, bao gồm Microsoft, phát triển. Đây là công cụ quan trọng giúp các nhà khoa học dữ liệu và nhà phát triển AI hiểu rõ hơn về hành vi của mô hình, phát hiện và giảm thiểu các vấn đề không mong muốn từ các mô hình AI. + +- Tìm hiểu cách sử dụng các thành phần khác nhau bằng cách xem tài liệu về bảng điều khiển RAI [docs.](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) + +- Xem một số [notebook mẫu](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) của bảng điều khiển RAI để gỡ lỗi các kịch bản AI có trách nhiệm hơn trong Azure Machine Learning. + +--- +## 🚀 Thử thách + +Để ngăn chặn sự thiên vị thống kê hoặc dữ liệu ngay từ đầu, chúng ta nên: + +- có sự đa dạng về nền tảng và quan điểm giữa những người làm việc trên các hệ thống +- đầu tư vào các tập dữ liệu phản ánh sự đa dạng của xã hội chúng ta +- phát triển các phương pháp tốt hơn để phát hiện và sửa chữa sự thiên vị khi nó xảy ra + +Hãy suy nghĩ về các tình huống thực tế nơi sự không công bằng rõ ràng trong việc xây dựng và sử dụng mô hình. Chúng ta còn cần cân nhắc điều gì khác? + +## [Câu hỏi sau bài giảng](https://ff-quizzes.netlify.app/en/ml/) +## Ôn tập & Tự học + +Trong bài học này, bạn đã học một số công cụ thực tiễn để tích hợp AI có trách nhiệm vào học máy. + +Xem hội thảo này để tìm hiểu sâu hơn về các chủ đề: + +- Bảng điều khiển AI có trách nhiệm: Nền tảng toàn diện để thực hiện RAI trong thực tế bởi Besmira Nushi và Mehrnoosh Sameki + +[![Bảng điều khiển AI có trách nhiệm: Nền tảng toàn diện để thực hiện RAI trong thực tế](https://img.youtube.com/vi/f1oaDNl3djg/0.jpg)](https://www.youtube.com/watch?v=f1oaDNl3djg "Bảng điều khiển AI có trách nhiệm: Nền tảng toàn diện để thực hiện RAI trong thực tế") + +> 🎥 Nhấp vào hình ảnh trên để xem video: Bảng điều khiển AI có trách nhiệm: Nền tảng toàn diện để thực hiện RAI trong thực tế bởi Besmira Nushi và Mehrnoosh Sameki + +Tham khảo các tài liệu sau để tìm hiểu thêm về AI có trách nhiệm và cách xây dựng các mô hình đáng tin cậy hơn: + +- Công cụ bảng điều khiển RAI của Microsoft để gỡ lỗi mô hình ML: [Tài nguyên công cụ AI có trách nhiệm](https://aka.ms/rai-dashboard) + +- Khám phá bộ công cụ AI có trách nhiệm: [Github](https://github.com/microsoft/responsible-ai-toolbox) + +- Trung tâm tài nguyên RAI của Microsoft: [Tài nguyên AI có trách nhiệm – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- Nhóm nghiên cứu FATE của Microsoft: [FATE: Công bằng, Trách nhiệm, Minh bạch và Đạo đức trong AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) + +## Bài tập + +[Khám phá bảng điều khiển RAI](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 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, nên 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. \ No newline at end of file diff --git a/translations/vi/9-Real-World/2-Debugging-ML-Models/assignment.md b/translations/vi/9-Real-World/2-Debugging-ML-Models/assignment.md new file mode 100644 index 00000000..671b6c17 --- /dev/null +++ b/translations/vi/9-Real-World/2-Debugging-ML-Models/assignment.md @@ -0,0 +1,25 @@ + +# Khám phá bảng điều khiển AI có trách nhiệm (RAI) + +## Hướng dẫn + +Trong bài học này, bạn đã tìm hiểu về bảng điều khiển RAI, một bộ các thành phần được xây dựng dựa trên các công cụ "mã nguồn mở" để giúp các nhà khoa học dữ liệu thực hiện phân tích lỗi, khám phá dữ liệu, đánh giá tính công bằng, giải thích mô hình, đánh giá phản biện/giả định "nếu như" và phân tích nguyên nhân trên các hệ thống AI. Đối với bài tập này, hãy khám phá một số [notebook](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) mẫu của bảng điều khiển RAI và báo cáo kết quả của bạn trong một bài viết hoặc bài thuyết trình. + +## Tiêu chí đánh giá + +| Tiêu chí | Xuất sắc | Đạt yêu cầu | Cần cải thiện | +| -------- | --------- | ----------- | ------------- | +| | Một bài viết hoặc bài thuyết trình PowerPoint được trình bày, thảo luận về các thành phần của bảng điều khiển RAI, notebook đã chạy, và các kết luận rút ra từ việc chạy nó | Một bài viết được trình bày nhưng không có kết luận | Không có bài viết nào được trình bày | + +--- + +**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 diff --git a/translations/vi/9-Real-World/README.md b/translations/vi/9-Real-World/README.md new file mode 100644 index 00000000..7961061d --- /dev/null +++ b/translations/vi/9-Real-World/README.md @@ -0,0 +1,32 @@ + +# Phụ lục: Ứng dụng thực tế của học máy cổ điển + +Trong phần này của chương trình học, bạn sẽ được giới thiệu về một số ứng dụng thực tế của học máy cổ điển. Chúng tôi đã tìm kiếm trên internet để thu thập các bài báo và tài liệu về những ứng dụng đã sử dụng các chiến lược này, tránh sử dụng mạng nơ-ron, học sâu và trí tuệ nhân tạo càng nhiều càng tốt. Tìm hiểu cách học máy được sử dụng trong hệ thống kinh doanh, ứng dụng sinh thái, tài chính, nghệ thuật và văn hóa, và nhiều lĩnh vực khác. + +![chess](../../../9-Real-World/images/chess.jpg) + +> Ảnh của Alexis Fauvet trên Unsplash + +## Bài học + +1. [Ứng dụng thực tế của học máy](1-Applications/README.md) +2. [Gỡ lỗi mô hình trong học máy bằng các thành phần bảng điều khiển AI có trách nhiệm](2-Debugging-ML-Models/README.md) + +## Tín dụng + +"Ứng dụng thực tế" được viết bởi một nhóm tác giả, bao gồm [Jen Looper](https://twitter.com/jenlooper) và [Ornella Altunyan](https://twitter.com/ornelladotcom). + +"Gỡ lỗi mô hình trong học máy bằng các thành phần bảng điều khiển AI có trách nhiệm" được viết bởi [Ruth Yakubu](https://twitter.com/ruthieyakubu) + +--- + +**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, nên 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 về 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 diff --git a/translations/vi/CODE_OF_CONDUCT.md b/translations/vi/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..1c210f79 --- /dev/null +++ b/translations/vi/CODE_OF_CONDUCT.md @@ -0,0 +1,23 @@ + +# Quy tắc ứng xử mã nguồn mở của Microsoft + +Dự án này đã áp dụng [Quy tắc ứng xử mã nguồn mở của Microsoft](https://opensource.microsoft.com/codeofconduct/). + +Tài nguyên: + +- [Quy tắc ứng xử mã nguồn mở của Microsoft](https://opensource.microsoft.com/codeofconduct/) +- [Câu hỏi thường gặp về Quy tắc ứng xử của Microsoft](https://opensource.microsoft.com/codeofconduct/faq/) +- Liên hệ [opencode@microsoft.com](mailto:opencode@microsoft.com) nếu có câu hỏi hoặc mối quan tâm + +--- + +**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 diff --git a/translations/vi/CONTRIBUTING.md b/translations/vi/CONTRIBUTING.md new file mode 100644 index 00000000..ce8adaae --- /dev/null +++ b/translations/vi/CONTRIBUTING.md @@ -0,0 +1,25 @@ + +# Đóng góp + +Dự án này hoan nghênh các đóng góp và gợi ý. Hầu hết các đóng góp yêu cầu bạn đồng ý với Thỏa thuận Giấy phép Người đóng góp (CLA), xác nhận rằng bạn có quyền và thực sự cấp cho chúng tôi quyền sử dụng đóng góp của bạn. Để biết thêm chi tiết, hãy truy cập https://cla.microsoft.com. + +> Quan trọng: khi dịch nội dung trong kho lưu trữ này, vui lòng đảm bảo rằng bạn không sử dụng dịch máy. Chúng tôi sẽ xác minh các bản dịch thông qua cộng đồng, vì vậy chỉ tham gia dịch ngôn ngữ mà bạn thông thạo. + +Khi bạn gửi một yêu cầu kéo (pull request), CLA-bot sẽ tự động xác định liệu bạn có cần cung cấp CLA hay không và gắn nhãn PR một cách phù hợp (ví dụ: nhãn, bình luận). Chỉ cần làm theo hướng dẫn được cung cấp bởi bot. Bạn chỉ cần thực hiện điều này một lần trên tất cả các kho lưu trữ sử dụng CLA của chúng tôi. + +Dự án này đã áp dụng [Bộ Quy tắc Ứng xử Mã Nguồn Mở của Microsoft](https://opensource.microsoft.com/codeofconduct/). +Để biết thêm thông tin, hãy xem [Câu hỏi thường gặp về Quy tắc Ứng xử](https://opensource.microsoft.com/codeofconduct/faq/) +hoặc liên hệ [opencode@microsoft.com](mailto:opencode@microsoft.com) nếu bạn có bất kỳ câu hỏi hoặc ý kiến bổ sung nào. + +--- + +**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 diff --git a/translations/vi/README.md b/translations/vi/README.md new file mode 100644 index 00000000..cf84295b --- /dev/null +++ b/translations/vi/README.md @@ -0,0 +1,178 @@ + +[![GitHub license](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) +[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) +[![GitHub issues](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) +[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) + +[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) +[![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) +[![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) + +### 🌐 Hỗ trợ đa ngôn ngữ + +#### Được hỗ trợ qua GitHub Action (Tự động & Luôn cập nhật) + +[French](../fr/README.md) | [Spanish](../es/README.md) | [German](../de/README.md) | [Russian](../ru/README.md) | [Arabic](../ar/README.md) | [Persian (Farsi)](../fa/README.md) | [Urdu](../ur/README.md) | [Chinese (Simplified)](../zh/README.md) | [Chinese (Traditional, Macau)](../mo/README.md) | [Chinese (Traditional, Hong Kong)](../hk/README.md) | [Chinese (Traditional, Taiwan)](../tw/README.md) | [Japanese](../ja/README.md) | [Korean](../ko/README.md) | [Hindi](../hi/README.md) | [Bengali](../bn/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Portuguese (Portugal)](../pt/README.md) | [Portuguese (Brazil)](../br/README.md) | [Italian](../it/README.md) | [Polish](../pl/README.md) | [Turkish](../tr/README.md) | [Greek](../el/README.md) | [Thai](../th/README.md) | [Swedish](../sv/README.md) | [Danish](../da/README.md) | [Norwegian](../no/README.md) | [Finnish](../fi/README.md) | [Dutch](../nl/README.md) | [Hebrew](../he/README.md) | [Vietnamese](./README.md) | [Indonesian](../id/README.md) | [Malay](../ms/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Swahili](../sw/README.md) | [Hungarian](../hu/README.md) | [Czech](../cs/README.md) | [Slovak](../sk/README.md) | [Romanian](../ro/README.md) | [Bulgarian](../bg/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Croatian](../hr/README.md) | [Slovenian](../sl/README.md) | [Ukrainian](../uk/README.md) | [Burmese (Myanmar)](../my/README.md) + +#### Tham gia cộng đồng + +[![Azure AI Discord](https://dcbadge.limes.pink/api/server/kzRShWzttr)](https://discord.gg/kzRShWzttr) + +# Học máy cho người mới bắt đầu - Một chương trình học + +> 🌍 Du hành khắp thế giới khi chúng ta khám phá Học máy thông qua các nền văn hóa 🌍 + +Các chuyên gia đám mây tại Microsoft rất vui mừng giới thiệu chương trình học kéo dài 12 tuần, gồm 26 bài học về **Học máy**. Trong chương trình này, bạn sẽ tìm hiểu về những gì đôi khi được gọi là **học máy cổ điển**, chủ yếu sử dụng thư viện Scikit-learn và tránh học sâu, nội dung được đề cập trong [chương trình học AI cho người mới bắt đầu](https://aka.ms/ai4beginners). Kết hợp các bài học này với chương trình học ['Khoa học dữ liệu cho người mới bắt đầu'](https://aka.ms/ds4beginners) của chúng tôi! + +Hãy cùng chúng tôi du hành khắp thế giới khi áp dụng các kỹ thuật cổ điển này vào dữ liệu từ nhiều khu vực trên thế giới. Mỗi bài học bao gồm các bài kiểm tra trước và sau bài học, hướng dẫn viết để hoàn thành bài học, giải pháp, bài tập và nhiều nội dung khác. Phương pháp học dựa trên dự án của chúng tôi cho phép bạn học thông qua việc xây dựng, một cách đã được chứng minh để kỹ năng mới được ghi nhớ lâu hơn. + +**✍️ Cảm ơn chân thành đến các tác giả** Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Anirban Mukherjee, Ornella Altunyan, Ruth Yakubu và Amy Boyd + +**🎨 Cảm ơn các họa sĩ minh họa** Tomomi Imura, Dasani Madipalli, và Jen Looper + +**🙏 Đặc biệt cảm ơn 🙏 các Đại sứ Sinh viên Microsoft, những người đã đóng góp nội dung, đánh giá và viết bài**, đặc biệt là Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila, và Snigdha Agarwal + +**🤩 Cảm ơn thêm các Đại sứ Sinh viên Microsoft Eric Wanjau, Jasleen Sondhi, và Vidushi Gupta vì các bài học về R của chúng tôi!** + +# Bắt đầu + +Thực hiện các bước sau: +1. **Fork kho lưu trữ**: Nhấn vào nút "Fork" ở góc trên bên phải của trang này. +2. **Clone kho lưu trữ**: `git clone https://github.com/microsoft/ML-For-Beginners.git` + +> [tìm tất cả tài nguyên bổ sung cho khóa học này trong bộ sưu tập Microsoft Learn của chúng tôi](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) + +**[Sinh viên](https://aka.ms/student-page)**, để sử dụng chương trình học này, hãy fork toàn bộ repo vào tài khoản GitHub của bạn và hoàn thành các bài tập một mình hoặc cùng nhóm: + +- Bắt đầu với bài kiểm tra trước bài học. +- Đọc bài học và hoàn thành các hoạt động, dừng lại và suy ngẫm tại mỗi phần kiểm tra kiến thức. +- Cố gắng tạo các dự án bằng cách hiểu bài học thay vì chạy mã giải pháp; tuy nhiên mã đó có sẵn trong các thư mục `/solution` trong mỗi bài học dựa trên dự án. +- Làm bài kiểm tra sau bài học. +- Hoàn thành thử thách. +- Hoàn thành bài tập. +- Sau khi hoàn thành một nhóm bài học, hãy truy cập [Diễn đàn thảo luận](https://github.com/microsoft/ML-For-Beginners/discussions) và "học to" bằng cách điền vào rubric PAT phù hợp. PAT là Công cụ Đánh giá Tiến độ, một rubric bạn điền để nâng cao việc học của mình. Bạn cũng có thể phản hồi các PAT khác để chúng ta cùng học hỏi. + +> Để học thêm, chúng tôi khuyến nghị theo dõi các [module và lộ trình học Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott). + +**Giáo viên**, chúng tôi đã [bao gồm một số gợi ý](for-teachers.md) về cách sử dụng chương trình học này. + +--- + +## Video hướng dẫn + +Một số bài học có sẵn dưới dạng video ngắn. Bạn có thể tìm thấy tất cả các video này trong bài học hoặc trên [danh sách phát ML cho người mới bắt đầu trên kênh YouTube Microsoft Developer](https://aka.ms/ml-beginners-videos) bằng cách nhấp vào hình ảnh dưới đây. + +[![ML for beginners banner](../../images/ml-for-beginners-video-banner.png)](https://aka.ms/ml-beginners-videos) + +--- + +## Gặp gỡ đội ngũ + +[![Promo video](../../images/ml.gif)](https://youtu.be/Tj1XWrDSYJU) + +**Gif bởi** [Mohit Jaisal](https://linkedin.com/in/mohitjaisal) + +> 🎥 Nhấp vào hình ảnh trên để xem video về dự án và những người đã tạo ra nó! + +--- + +## Phương pháp giảng dạy + +Chúng tôi đã chọn hai nguyên tắc giảng dạy khi xây dựng chương trình học này: đảm bảo rằng nó dựa trên **dự án thực hành** và bao gồm **các bài kiểm tra thường xuyên**. Ngoài ra, chương trình học này có một **chủ đề chung** để tạo sự gắn kết. + +Bằng cách đảm bảo nội dung phù hợp với các dự án, quá trình học trở nên hấp dẫn hơn đối với học viên và khả năng ghi nhớ các khái niệm sẽ được tăng cường. Ngoài ra, một bài kiểm tra không áp lực trước lớp giúp học viên tập trung vào việc học một chủ đề, trong khi bài kiểm tra thứ hai sau lớp đảm bảo khả năng ghi nhớ lâu hơn. Chương trình học này được thiết kế linh hoạt và thú vị, có thể học toàn bộ hoặc từng phần. Các dự án bắt đầu nhỏ và trở nên phức tạp hơn vào cuối chu kỳ 12 tuần. Chương trình học này cũng bao gồm một phần phụ về các ứng dụng thực tế của ML, có thể được sử dụng như điểm cộng thêm hoặc làm cơ sở cho thảo luận. + +> Tìm [Quy tắc ứng xử](CODE_OF_CONDUCT.md), [Hướng dẫn đóng góp](CONTRIBUTING.md), và [Hướng dẫn dịch thuật](TRANSLATIONS.md) của chúng tôi. Chúng tôi hoan nghênh phản hồi mang tính xây dựng của bạn! + +## Mỗi bài học bao gồm + +- sketchnote tùy chọn +- video bổ sung tùy chọn +- video hướng dẫn (chỉ một số bài học) +- [bài kiểm tra khởi động trước bài học](https://ff-quizzes.netlify.app/en/ml/) +- bài học viết +- đối với các bài học dựa trên dự án, hướng dẫn từng bước về cách xây dựng dự án +- kiểm tra kiến thức +- một thử thách +- tài liệu đọc bổ sung +- bài tập +- [bài kiểm tra sau bài học](https://ff-quizzes.netlify.app/en/ml/) + +> **Lưu ý về ngôn ngữ**: Các bài học này chủ yếu được viết bằng Python, nhưng nhiều bài cũng có sẵn bằng R. Để hoàn thành bài học R, hãy vào thư mục `/solution` và tìm các bài học R. Chúng bao gồm phần mở rộng .rmd, đại diện cho một tệp **R Markdown**, có thể được định nghĩa đơn giản là sự kết hợp của `code chunks` (của R hoặc các ngôn ngữ khác) và `YAML header` (hướng dẫn cách định dạng đầu ra như PDF) trong một tài liệu `Markdown`. Do đó, nó là một khung tác giả mẫu mực cho khoa học dữ liệu vì nó cho phép bạn kết hợp mã của mình, đầu ra của nó và suy nghĩ của bạn bằng cách viết chúng xuống trong Markdown. Hơn nữa, các tài liệu R Markdown có thể được xuất ra các định dạng như PDF, HTML hoặc Word. + +> **Lưu ý về bài kiểm tra**: Tất cả các bài kiểm tra được chứa trong [thư mục Quiz App](../../quiz-app), với tổng cộng 52 bài kiểm tra, mỗi bài gồm ba câu hỏi. Chúng được liên kết từ trong các bài học nhưng ứng dụng kiểm tra có thể được chạy cục bộ; làm theo hướng dẫn trong thư mục `quiz-app` để lưu trữ cục bộ hoặc triển khai lên Azure. + +| Số bài học | Chủ đề | Nhóm bài học | Mục tiêu học tập | Liên kết bài học | Tác giả | +| :-----------: | :------------------------------------------------------------: | :-------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------: | +| 01 | Giới thiệu về học máy | [Giới thiệu](1-Introduction/README.md) | Tìm hiểu các khái niệm cơ bản về học máy | [Bài học](1-Introduction/1-intro-to-ML/README.md) | Muhammad | +| 02 | Lịch sử của học máy | [Giới thiệu](1-Introduction/README.md) | Tìm hiểu lịch sử đằng sau lĩnh vực này | [Bài học](1-Introduction/2-history-of-ML/README.md) | Jen và Amy | +| 03 | Công bằng trong học máy | [Giới thiệu](1-Introduction/README.md) | Những vấn đề triết học quan trọng nào về công bằng mà học viên nên cân nhắc khi xây dựng và áp dụng các mô hình ML? | [Bài học](1-Introduction/3-fairness/README.md) | Tomomi | +| 04 | Các kỹ thuật học máy | [Introduction](1-Introduction/README.md) | Các nhà nghiên cứu học máy sử dụng những kỹ thuật nào để xây dựng mô hình học máy? | [Lesson](1-Introduction/4-techniques-of-ML/README.md) | Chris và Jen | +| 05 | Giới thiệu về hồi quy | [Regression](2-Regression/README.md) | Bắt đầu với Python và Scikit-learn để xây dựng mô hình hồi quy | +
                                          • [Python](2-Regression/1-Tools/README.md)
                                          • [R](../../2-Regression/1-Tools/solution/R/lesson_1.html)
                                          |
                                          • Jen
                                          • Eric Wanjau
                                          | +| 06 | Giá bí ngô Bắc Mỹ 🎃 | [Regression](2-Regression/README.md) | Trực quan hóa và làm sạch dữ liệu để chuẩn bị cho học máy |
                                          • [Python](2-Regression/2-Data/README.md)
                                          • [R](../../2-Regression/2-Data/solution/R/lesson_2.html)
                                          |
                                          • Jen
                                          • Eric Wanjau
                                          | +| 07 | Giá bí ngô Bắc Mỹ 🎃 | [Regression](2-Regression/README.md) | Xây dựng mô hình hồi quy tuyến tính và hồi quy đa thức |
                                          • [Python](2-Regression/3-Linear/README.md)
                                          • [R](../../2-Regression/3-Linear/solution/R/lesson_3.html)
                                          |
                                          • Jen và Dmitry
                                          • Eric Wanjau
                                          | +| 08 | Giá bí ngô Bắc Mỹ 🎃 | [Regression](2-Regression/README.md) | Xây dựng mô hình hồi quy logistic |
                                          • [Python](2-Regression/4-Logistic/README.md)
                                          • [R](../../2-Regression/4-Logistic/solution/R/lesson_4.html)
                                          |
                                          • Jen
                                          • Eric Wanjau
                                          | +| 09 | Một ứng dụng web 🔌 | [Web App](3-Web-App/README.md) | Xây dựng một ứng dụng web để sử dụng mô hình đã được huấn luyện | [Python](3-Web-App/1-Web-App/README.md) | Jen | +| 10 | Giới thiệu về phân loại | [Classification](4-Classification/README.md) | Làm sạch, chuẩn bị và trực quan hóa dữ liệu; giới thiệu về phân loại |
                                          • [Python](4-Classification/1-Introduction/README.md)
                                          • [R](../../4-Classification/1-Introduction/solution/R/lesson_10.html) |
                                            • Jen và Cassie
                                            • Eric Wanjau
                                            | +| 11 | Các món ăn ngon của châu Á và Ấn Độ 🍜 | [Classification](4-Classification/README.md) | Giới thiệu về các bộ phân loại |
                                            • [Python](4-Classification/2-Classifiers-1/README.md)
                                            • [R](../../4-Classification/2-Classifiers-1/solution/R/lesson_11.html) |
                                              • Jen và Cassie
                                              • Eric Wanjau
                                              | +| 12 | Các món ăn ngon của châu Á và Ấn Độ 🍜 | [Classification](4-Classification/README.md) | Nhiều bộ phân loại hơn |
                                              • [Python](4-Classification/3-Classifiers-2/README.md)
                                              • [R](../../4-Classification/3-Classifiers-2/solution/R/lesson_12.html) |
                                                • Jen và Cassie
                                                • Eric Wanjau
                                                | +| 13 | Các món ăn ngon của châu Á và Ấn Độ 🍜 | [Classification](4-Classification/README.md) | Xây dựng ứng dụng web gợi ý sử dụng mô hình của bạn | [Python](4-Classification/4-Applied/README.md) | Jen | +| 14 | Giới thiệu về phân cụm | [Clustering](5-Clustering/README.md) | Làm sạch, chuẩn bị và trực quan hóa dữ liệu; Giới thiệu về phân cụm |
                                                • [Python](5-Clustering/1-Visualize/README.md)
                                                • [R](../../5-Clustering/1-Visualize/solution/R/lesson_14.html) |
                                                  • Jen
                                                  • Eric Wanjau
                                                  | +| 15 | Khám phá sở thích âm nhạc Nigeria 🎧 | [Clustering](5-Clustering/README.md) | Khám phá phương pháp phân cụm K-Means |
                                                  • [Python](5-Clustering/2-K-Means/README.md)
                                                  • [R](../../5-Clustering/2-K-Means/solution/R/lesson_15.html) |
                                                    • Jen
                                                    • Eric Wanjau
                                                    | +| 16 | Giới thiệu về xử lý ngôn ngữ tự nhiên ☕️ | [Natural language processing](6-NLP/README.md) | Tìm hiểu những điều cơ bản về NLP bằng cách xây dựng một bot đơn giản | [Python](6-NLP/1-Introduction-to-NLP/README.md) | Stephen | +| 17 | Các nhiệm vụ NLP phổ biến ☕️ | [Natural language processing](6-NLP/README.md) | Nâng cao kiến thức về NLP bằng cách hiểu các nhiệm vụ phổ biến khi xử lý cấu trúc ngôn ngữ | [Python](6-NLP/2-Tasks/README.md) | Stephen | +| 18 | Dịch thuật và phân tích cảm xúc ♥️ | [Natural language processing](6-NLP/README.md) | Dịch thuật và phân tích cảm xúc với Jane Austen | [Python](6-NLP/3-Translation-Sentiment/README.md) | Stephen | +| 19 | Các khách sạn lãng mạn ở châu Âu ♥️ | [Natural language processing](6-NLP/README.md) | Phân tích cảm xúc với đánh giá khách sạn 1 | [Python](6-NLP/4-Hotel-Reviews-1/README.md) | Stephen | +| 20 | Các khách sạn lãng mạn ở châu Âu ♥️ | [Natural language processing](6-NLP/README.md) | Phân tích cảm xúc với đánh giá khách sạn 2 | [Python](6-NLP/5-Hotel-Reviews-2/README.md) | Stephen | +| 21 | Giới thiệu về dự báo chuỗi thời gian | [Time series](7-TimeSeries/README.md) | Giới thiệu về dự báo chuỗi thời gian | [Python](7-TimeSeries/1-Introduction/README.md) | Francesca | +| 22 | ⚡️ Sử dụng năng lượng thế giới ⚡️ - dự báo chuỗi thời gian với ARIMA | [Time series](7-TimeSeries/README.md) | Dự báo chuỗi thời gian với ARIMA | [Python](7-TimeSeries/2-ARIMA/README.md) | Francesca | +| 23 | ⚡️ Sử dụng năng lượng thế giới ⚡️ - dự báo chuỗi thời gian với SVR | [Time series](7-TimeSeries/README.md) | Dự báo chuỗi thời gian với Support Vector Regressor | [Python](7-TimeSeries/3-SVR/README.md) | Anirban | +| 24 | Giới thiệu về học tăng cường | [Reinforcement learning](8-Reinforcement/README.md) | Giới thiệu về học tăng cường với Q-Learning | [Python](8-Reinforcement/1-QLearning/README.md) | Dmitry | +| 25 | Giúp Peter tránh xa con sói! 🐺 | [Reinforcement learning](8-Reinforcement/README.md) | Học tăng cường với Gym | [Python](8-Reinforcement/2-Gym/README.md) | Dmitry | +| Postscript | Các tình huống và ứng dụng ML thực tế | [ML in the Wild](9-Real-World/README.md) | Các ứng dụng thực tế thú vị và tiết lộ của học máy cổ điển | [Lesson](9-Real-World/1-Applications/README.md) | Team | +| Postscript | Gỡ lỗi mô hình trong ML bằng bảng điều khiển RAI | [ML in the Wild](9-Real-World/README.md) | Gỡ lỗi mô hình trong học máy bằng các thành phần bảng điều khiển AI có trách nhiệm | [Lesson](9-Real-World/2-Debugging-ML-Models/README.md) | Ruth Yakubu | + +> [tìm tất cả các tài nguyên bổ sung cho khóa học này trong bộ sưu tập Microsoft Learn của chúng tôi](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) + +## Truy cập ngoại tuyến + +Bạn có thể chạy tài liệu này ngoại tuyến bằng cách sử dụng [Docsify](https://docsify.js.org/#/). Fork repo này, [cài đặt Docsify](https://docsify.js.org/#/quickstart) trên máy của bạn, và sau đó trong thư mục gốc của repo này, gõ `docsify serve`. Trang web sẽ được phục vụ trên cổng 3000 trên localhost của bạn: `localhost:3000`. + +## PDFs + +Tìm tệp pdf của giáo trình với các liên kết [tại đây](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf). + + +## 🎒 Các khóa học khác + +Nhóm của chúng tôi sản xuất các khóa học khác! Hãy xem: + +- [Generative AI for Beginners](https://aka.ms/genai-beginners) +- [Generative AI for Beginners .NET](https://github.com/microsoft/Generative-AI-for-beginners-dotnet) +- [Generative AI with JavaScript](https://github.com/microsoft/generative-ai-with-javascript) +- [Generative AI with Java](https://github.com/microsoft/Generative-AI-for-beginners-java) +- [AI for Beginners](https://aka.ms/ai-beginners) +- [Data Science for Beginners](https://aka.ms/datascience-beginners) +- [ML for Beginners](https://aka.ms/ml-beginners) +- [Cybersecurity for Beginners](https://github.com/microsoft/Security-101) +- [Web Dev for Beginners](https://aka.ms/webdev-beginners) +- [IoT for Beginners](https://aka.ms/iot-beginners) +- [XR Development for Beginners](https://github.com/microsoft/xr-development-for-beginners) +- [Mastering GitHub Copilot for Paired Programming](https://github.com/microsoft/Mastering-GitHub-Copilot-for-Paired-Programming) +- [Mastering GitHub Copilot for C#/.NET Developers](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers) +- [Choose Your Own Copilot Adventure](https://github.com/microsoft/CopilotAdventures) + +--- + +**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 diff --git a/translations/vi/SECURITY.md b/translations/vi/SECURITY.md new file mode 100644 index 00000000..40aaf0ce --- /dev/null +++ b/translations/vi/SECURITY.md @@ -0,0 +1,51 @@ + +## Bảo mật + +Microsoft coi trọng vấn đề bảo mật của các sản phẩm và dịch vụ phần mềm của mình, bao gồm tất cả các kho mã nguồn được quản lý thông qua các tổ chức GitHub của chúng tôi, bao gồm [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), và [các tổ chức GitHub của chúng tôi](https://opensource.microsoft.com/). + +Nếu bạn tin rằng mình đã phát hiện ra một lỗ hổng bảo mật trong bất kỳ kho lưu trữ nào thuộc sở hữu của Microsoft đáp ứng [định nghĩa về lỗ hổng bảo mật của Microsoft](https://docs.microsoft.com/previous-versions/tn-archive/cc751383(v=technet.10)?WT.mc_id=academic-77952-leestott), vui lòng báo cáo cho chúng tôi theo hướng dẫn dưới đây. + +## Báo cáo Vấn đề Bảo mật + +**Vui lòng không báo cáo lỗ hổng bảo mật thông qua các vấn đề công khai trên GitHub.** + +Thay vào đó, hãy báo cáo chúng đến Trung tâm Phản hồi Bảo mật Microsoft (MSRC) tại [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). + +Nếu bạn muốn gửi báo cáo mà không cần đăng nhập, hãy gửi email đến [secure@microsoft.com](mailto:secure@microsoft.com). Nếu có thể, hãy mã hóa tin nhắn của bạn bằng khóa PGP của chúng tôi; vui lòng tải xuống từ [trang Khóa PGP của Trung tâm Phản hồi Bảo mật Microsoft](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). + +Bạn sẽ nhận được phản hồi trong vòng 24 giờ. Nếu vì lý do nào đó bạn không nhận được, vui lòng gửi email theo dõi để đảm bảo chúng tôi đã nhận được tin nhắn ban đầu của bạn. Thông tin bổ sung có thể được tìm thấy tại [microsoft.com/msrc](https://www.microsoft.com/msrc). + +Vui lòng bao gồm các thông tin được yêu cầu dưới đây (càng nhiều càng tốt) để giúp chúng tôi hiểu rõ hơn về bản chất và phạm vi của vấn đề có thể xảy ra: + + * Loại vấn đề (ví dụ: tràn bộ đệm, SQL injection, cross-site scripting, v.v.) + * Đường dẫn đầy đủ của tệp nguồn liên quan đến sự xuất hiện của vấn đề + * Vị trí của mã nguồn bị ảnh hưởng (tag/branch/commit hoặc URL trực tiếp) + * Bất kỳ cấu hình đặc biệt nào cần thiết để tái tạo vấn đề + * Hướng dẫn từng bước để tái tạo vấn đề + * Mã minh chứng hoặc mã khai thác (nếu có thể) + * Tác động của vấn đề, bao gồm cách kẻ tấn công có thể khai thác vấn đề + +Thông tin này sẽ giúp chúng tôi xử lý báo cáo của bạn nhanh hơn. + +Nếu bạn báo cáo để nhận thưởng lỗi, các báo cáo đầy đủ hơn có thể đóng góp vào mức thưởng cao hơn. Vui lòng truy cập trang [Chương trình Thưởng Lỗi của Microsoft](https://microsoft.com/msrc/bounty) để biết thêm chi tiết về các chương trình đang hoạt động của chúng tôi. + +## Ngôn ngữ Ưu tiên + +Chúng tôi ưu tiên tất cả các giao tiếp bằng tiếng Anh. + +## Chính sách + +Microsoft tuân theo nguyên tắc [Tiết lộ Lỗ hổng Phối hợp](https://www.microsoft.com/en-us/msrc/cvd). + +--- + +**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, nên 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. \ No newline at end of file diff --git a/translations/vi/SUPPORT.md b/translations/vi/SUPPORT.md new file mode 100644 index 00000000..7e33079c --- /dev/null +++ b/translations/vi/SUPPORT.md @@ -0,0 +1,24 @@ + +# Hỗ trợ +## Cách báo cáo vấn đề và nhận trợ giúp + +Dự án này sử dụng GitHub Issues để theo dõi lỗi và yêu cầu tính năng. Vui lòng tìm kiếm các vấn đề đã tồn tại trước khi tạo vấn đề mới để tránh trùng lặp. Đối với các vấn đề mới, hãy báo cáo lỗi hoặc yêu cầu tính năng của bạn dưới dạng một Vấn đề mới. + +Để nhận trợ giúp và giải đáp thắc mắc về việc sử dụng dự án này, hãy tạo một vấn đề. + +## Chính sách hỗ trợ của Microsoft + +Hỗ trợ cho kho lưu trữ này chỉ giới hạn trong các tài nguyên được liệt kê ở trên. + +--- + +**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 diff --git a/translations/vi/docs/_sidebar.md b/translations/vi/docs/_sidebar.md new file mode 100644 index 00000000..4cf984c9 --- /dev/null +++ b/translations/vi/docs/_sidebar.md @@ -0,0 +1,57 @@ + +- Giới thiệu + - [Giới thiệu về Machine Learning](../1-Introduction/1-intro-to-ML/README.md) + - [Lịch sử của Machine Learning](../1-Introduction/2-history-of-ML/README.md) + - [Machine Learning và sự công bằng](../1-Introduction/3-fairness/README.md) + - [Các kỹ thuật của Machine Learning](../1-Introduction/4-techniques-of-ML/README.md) + +- Hồi quy + - [Công cụ cần thiết](../2-Regression/1-Tools/README.md) + - [Dữ liệu](../2-Regression/2-Data/README.md) + - [Hồi quy tuyến tính](../2-Regression/3-Linear/README.md) + - [Hồi quy logistic](../2-Regression/4-Logistic/README.md) + +- Xây dựng ứng dụng web + - [Ứng dụng web](../3-Web-App/1-Web-App/README.md) + +- Phân loại + - [Giới thiệu về phân loại](../4-Classification/1-Introduction/README.md) + - [Bộ phân loại 1](../4-Classification/2-Classifiers-1/README.md) + - [Bộ phân loại 2](../4-Classification/3-Classifiers-2/README.md) + - [Ứng dụng Machine Learning](../4-Classification/4-Applied/README.md) + +- Phân cụm + - [Trực quan hóa dữ liệu của bạn](../5-Clustering/1-Visualize/README.md) + - [K-Means](../5-Clustering/2-K-Means/README.md) + +- Xử lý ngôn ngữ tự nhiên (NLP) + - [Giới thiệu về NLP](../6-NLP/1-Introduction-to-NLP/README.md) + - [Các nhiệm vụ NLP](../6-NLP/2-Tasks/README.md) + - [Dịch thuật và phân tích cảm xúc](../6-NLP/3-Translation-Sentiment/README.md) + - [Đánh giá khách sạn 1](../6-NLP/4-Hotel-Reviews-1/README.md) + - [Đánh giá khách sạn 2](../6-NLP/5-Hotel-Reviews-2/README.md) + +- Dự báo chuỗi thời gian + - [Giới thiệu về dự báo chuỗi thời gian](../7-TimeSeries/1-Introduction/README.md) + - [ARIMA](../7-TimeSeries/2-ARIMA/README.md) + - [SVR](../7-TimeSeries/3-SVR/README.md) + +- Học tăng cường + - [Q-Learning](../8-Reinforcement/1-QLearning/README.md) + - [Gym](../8-Reinforcement/2-Gym/README.md) + +- Machine Learning trong thực tế + - [Ứng dụng](../9-Real-World/1-Applications/README.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 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 diff --git a/translations/vi/for-teachers.md b/translations/vi/for-teachers.md new file mode 100644 index 00000000..e5dddfda --- /dev/null +++ b/translations/vi/for-teachers.md @@ -0,0 +1,37 @@ + +## Dành cho giáo viên + +Bạn có muốn sử dụng chương trình học này trong lớp học của mình không? Hãy thoải mái sử dụng nhé! + +Thực tế, bạn có thể sử dụng nó ngay trên GitHub bằng cách sử dụng GitHub Classroom. + +Để làm điều đó, hãy fork repo này. Bạn sẽ cần tạo một repo cho mỗi bài học, vì vậy bạn sẽ cần tách từng thư mục thành một repo riêng biệt. Bằng cách đó, [GitHub Classroom](https://classroom.github.com/classrooms) có thể nhận từng bài học một cách riêng lẻ. + +Những [hướng dẫn đầy đủ](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/) này sẽ giúp bạn hình dung cách thiết lập lớp học của mình. + +## Sử dụng repo như hiện tại + +Nếu bạn muốn sử dụng repo này như nó đang có, mà không cần sử dụng GitHub Classroom, điều đó cũng hoàn toàn khả thi. Bạn sẽ cần giao tiếp với học sinh để xác định bài học nào sẽ cùng nhau thực hiện. + +Trong môi trường trực tuyến (Zoom, Teams, hoặc các nền tảng khác), bạn có thể tạo các phòng thảo luận nhỏ cho các bài kiểm tra, và hướng dẫn học sinh để giúp họ sẵn sàng học tập. Sau đó, mời học sinh tham gia các bài kiểm tra và nộp câu trả lời dưới dạng 'issues' vào một thời điểm nhất định. Bạn cũng có thể làm tương tự với các bài tập, nếu bạn muốn học sinh làm việc cùng nhau một cách công khai. + +Nếu bạn thích một hình thức riêng tư hơn, hãy yêu cầu học sinh fork chương trình học, từng bài học một, vào các repo GitHub riêng của họ dưới dạng repo riêng tư, và cấp quyền truy cập cho bạn. Sau đó, họ có thể hoàn thành các bài kiểm tra và bài tập một cách riêng tư và gửi cho bạn thông qua issues trên repo lớp học của bạn. + +Có rất nhiều cách để làm cho chương trình này hoạt động trong môi trường lớp học trực tuyến. Hãy cho chúng tôi biết cách nào phù hợp nhất với bạn! + +## Hãy cho chúng tôi ý kiến của bạn! + +Chúng tôi muốn làm cho chương trình học này phù hợp với bạn và học sinh của bạn. Hãy gửi cho chúng tôi [phản hồi](https://forms.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR2humCsRZhxNuI79cm6n0hRUQzRVVU9VVlU5UlFLWTRLWlkyQUxORTg5WS4u). + +--- + +**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 diff --git a/translations/vi/quiz-app/README.md b/translations/vi/quiz-app/README.md new file mode 100644 index 00000000..65d267b9 --- /dev/null +++ b/translations/vi/quiz-app/README.md @@ -0,0 +1,127 @@ + +# Câu hỏi trắc nghiệm + +Các câu hỏi trắc nghiệm này là bài kiểm tra trước và sau bài giảng trong chương trình học ML tại https://aka.ms/ml-beginners + +## Cài đặt dự án + +``` +npm install +``` + +### Biên dịch và tải lại nhanh cho phát triển + +``` +npm run serve +``` + +### Biên dịch và tối ưu hóa cho sản xuất + +``` +npm run build +``` + +### Kiểm tra và sửa lỗi tệp + +``` +npm run lint +``` + +### Tùy chỉnh cấu hình + +Xem [Tham khảo cấu hình](https://cli.vuejs.org/config/). + +Công nhận: Cảm ơn phiên bản gốc của ứng dụng câu hỏi này: https://github.com/arpan45/simple-quiz-vue + +## Triển khai lên Azure + +Dưới đây là hướng dẫn từng bước để giúp bạn bắt đầu: + +1. Fork một kho lưu trữ GitHub +Đảm bảo mã ứng dụng web tĩnh của bạn nằm trong kho lưu trữ GitHub. Fork kho lưu trữ này. + +2. Tạo một Azure Static Web App +- Tạo tài khoản [Azure](http://azure.microsoft.com) +- Truy cập [Azure portal](https://portal.azure.com) +- Nhấp vào “Create a resource” và tìm kiếm “Static Web App”. +- Nhấp vào “Create”. + +3. Cấu hình Static Web App +- Cơ bản: + - Subscription: Chọn gói đăng ký Azure của bạn. + - Resource Group: Tạo một nhóm tài nguyên mới hoặc sử dụng nhóm hiện có. + - Name: Đặt tên cho ứng dụng web tĩnh của bạn. + - Region: Chọn khu vực gần người dùng của bạn nhất. + +- #### Chi tiết triển khai: + - Source: Chọn “GitHub”. + - GitHub Account: Cấp quyền cho Azure truy cập tài khoản GitHub của bạn. + - Organization: Chọn tổ chức GitHub của bạn. + - Repository: Chọn kho lưu trữ chứa ứng dụng web tĩnh của bạn. + - Branch: Chọn nhánh bạn muốn triển khai từ. + +- #### Chi tiết xây dựng: + - Build Presets: Chọn framework mà ứng dụng của bạn được xây dựng (ví dụ: React, Angular, Vue, v.v.). + - App Location: Chỉ định thư mục chứa mã ứng dụng của bạn (ví dụ: / nếu nằm ở thư mục gốc). + - API Location: Nếu bạn có API, chỉ định vị trí của nó (tùy chọn). + - Output Location: Chỉ định thư mục nơi đầu ra xây dựng được tạo (ví dụ: build hoặc dist). + +4. Xem lại và tạo +Xem lại cài đặt của bạn và nhấp vào “Create”. Azure sẽ thiết lập các tài nguyên cần thiết và tạo một workflow GitHub Actions trong kho lưu trữ của bạn. + +5. Workflow GitHub Actions +Azure sẽ tự động tạo một tệp workflow GitHub Actions trong kho lưu trữ của bạn (.github/workflows/azure-static-web-apps-.yml). Workflow này sẽ xử lý quá trình xây dựng và triển khai. + +6. Theo dõi triển khai +Truy cập tab “Actions” trong kho lưu trữ GitHub của bạn. +Bạn sẽ thấy một workflow đang chạy. Workflow này sẽ xây dựng và triển khai ứng dụng web tĩnh của bạn lên Azure. +Khi workflow hoàn tất, ứng dụng của bạn sẽ hoạt động trên URL Azure được cung cấp. + +### Tệp Workflow ví dụ + +Dưới đây là ví dụ về tệp workflow GitHub Actions: +name: Azure Static Web Apps CI/CD +``` +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened, closed] + branches: + - main + +jobs: + build_and_deploy_job: + runs-on: ubuntu-latest + name: Build and Deploy Job + steps: + - uses: actions/checkout@v2 + - name: Build And Deploy + id: builddeploy + uses: Azure/static-web-apps-deploy@v1 + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }} + repo_token: ${{ secrets.GITHUB_TOKEN }} + action: "upload" + app_location: "/quiz-app" # App source code path + api_location: ""API source code path optional + output_location: "dist" #Built app content directory - optional +``` + +### Tài nguyên bổ sung +- [Tài liệu Azure Static Web Apps](https://learn.microsoft.com/azure/static-web-apps/getting-started) +- [Tài liệu GitHub Actions](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) + +--- + +**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 diff --git a/translations/vi/sketchnotes/LICENSE.md b/translations/vi/sketchnotes/LICENSE.md new file mode 100644 index 00000000..b9e4c0e3 --- /dev/null +++ b/translations/vi/sketchnotes/LICENSE.md @@ -0,0 +1,154 @@ + +Quyền Chia Sẻ Tương Tự 4.0 Quốc Tế + +======================================================================= + +Tổ chức Creative Commons ("Creative Commons") không phải là công ty luật và không cung cấp dịch vụ pháp lý hoặc tư vấn pháp lý. Việc phân phối các giấy phép công cộng của Creative Commons không tạo ra mối quan hệ luật sư-khách hàng hoặc bất kỳ mối quan hệ nào khác. Creative Commons cung cấp giấy phép và thông tin liên quan trên cơ sở "nguyên trạng". Creative Commons không đưa ra bất kỳ bảo đảm nào liên quan đến giấy phép của mình, bất kỳ tài liệu nào được cấp phép theo các điều khoản và điều kiện của giấy phép, hoặc bất kỳ thông tin liên quan nào. Creative Commons từ chối mọi trách nhiệm pháp lý đối với thiệt hại phát sinh từ việc sử dụng giấy phép trong phạm vi tối đa có thể. + +Sử Dụng Giấy Phép Công Cộng Creative Commons + +Giấy phép công cộng Creative Commons cung cấp một bộ điều khoản và điều kiện tiêu chuẩn mà các tác giả và những người sở hữu quyền khác có thể sử dụng để chia sẻ các tác phẩm gốc và các tài liệu khác thuộc bản quyền và một số quyền khác được quy định trong giấy phép công cộng dưới đây. Những cân nhắc sau đây chỉ mang tính chất thông tin, không đầy đủ và không phải là một phần của giấy phép. + + Cân nhắc cho người cấp phép: Giấy phép công cộng của chúng tôi được thiết kế để sử dụng bởi những người được phép cấp quyền công cộng sử dụng tài liệu theo cách mà bản quyền và một số quyền khác thường hạn chế. Giấy phép của chúng tôi không thể thu hồi. Người cấp phép nên đọc và hiểu các điều khoản và điều kiện của giấy phép mà họ chọn trước khi áp dụng nó. Người cấp phép cũng nên đảm bảo tất cả các quyền cần thiết trước khi áp dụng giấy phép của chúng tôi để công chúng có thể tái sử dụng tài liệu như mong đợi. Người cấp phép nên đánh dấu rõ ràng bất kỳ tài liệu nào không thuộc phạm vi giấy phép. Điều này bao gồm các tài liệu được cấp phép bởi CC khác, hoặc tài liệu được sử dụng theo ngoại lệ hoặc giới hạn của bản quyền. Thêm cân nhắc cho người cấp phép: wiki.creativecommons.org/Considerations_for_licensors + + Cân nhắc cho công chúng: Bằng cách sử dụng một trong các giấy phép công cộng của chúng tôi, người cấp phép cấp quyền công cộng sử dụng tài liệu được cấp phép theo các điều khoản và điều kiện được quy định. Nếu không cần sự cho phép của người cấp phép vì bất kỳ lý do nào—ví dụ, do ngoại lệ hoặc giới hạn áp dụng cho bản quyền—thì việc sử dụng đó không bị điều chỉnh bởi giấy phép. Giấy phép của chúng tôi chỉ cấp quyền theo bản quyền và một số quyền khác mà người cấp phép có thẩm quyền cấp. Việc sử dụng tài liệu được cấp phép vẫn có thể bị hạn chế vì các lý do khác, bao gồm việc người khác có bản quyền hoặc các quyền khác đối với tài liệu. Người cấp phép có thể đưa ra các yêu cầu đặc biệt, chẳng hạn như yêu cầu tất cả các thay đổi phải được đánh dấu hoặc mô tả. Mặc dù không bắt buộc theo giấy phép của chúng tôi, bạn được khuyến khích tôn trọng các yêu cầu đó nếu hợp lý. Thêm cân nhắc cho công chúng: wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Giấy Phép Công Cộng Creative Commons Attribution-ShareAlike 4.0 Quốc Tế + +Bằng cách thực hiện các Quyền Được Cấp (được định nghĩa dưới đây), Bạn chấp nhận và đồng ý bị ràng buộc bởi các điều khoản và điều kiện của Giấy Phép Công Cộng Creative Commons Attribution-ShareAlike 4.0 Quốc Tế ("Giấy Phép Công Cộng"). Trong phạm vi Giấy Phép Công Cộng này có thể được hiểu là một hợp đồng, Bạn được cấp các Quyền Được Cấp để đổi lấy việc Bạn chấp nhận các điều khoản và điều kiện này, và Người Cấp Phép cấp cho Bạn các quyền đó để đổi lấy lợi ích mà Người Cấp Phép nhận được từ việc cung cấp Tài Liệu Được Cấp theo các điều khoản và điều kiện này. + +Mục 1 -- Định Nghĩa. + + a. Tài Liệu Được Chuyển Đổi có nghĩa là tài liệu thuộc bản quyền và các quyền tương tự được tạo ra từ hoặc dựa trên Tài Liệu Được Cấp và trong đó Tài Liệu Được Cấp được dịch, thay đổi, sắp xếp, chuyển đổi, hoặc sửa đổi theo cách yêu cầu sự cho phép theo bản quyền và các quyền tương tự do Người Cấp Phép nắm giữ. Đối với mục đích của Giấy Phép Công Cộng này, khi Tài Liệu Được Cấp là một tác phẩm âm nhạc, buổi biểu diễn, hoặc bản ghi âm, Tài Liệu Được Chuyển Đổi luôn được tạo ra khi Tài Liệu Được Cấp được đồng bộ hóa với hình ảnh chuyển động. + + b. Giấy Phép của Người Chuyển Đổi có nghĩa là giấy phép Bạn áp dụng cho bản quyền và các quyền tương tự trong đóng góp của Bạn vào Tài Liệu Được Chuyển Đổi theo các điều khoản và điều kiện của Giấy Phép Công Cộng này. + + c. Giấy Phép Tương Thích BY-SA có nghĩa là giấy phép được liệt kê tại creativecommons.org/compatiblelicenses, được Creative Commons phê duyệt là tương đương về cơ bản với Giấy Phép Công Cộng này. + + d. Bản quyền và Các Quyền Tương Tự có nghĩa là bản quyền và/hoặc các quyền tương tự liên quan chặt chẽ đến bản quyền bao gồm, nhưng không giới hạn, quyền biểu diễn, phát sóng, ghi âm, và Quyền Cơ Sở Dữ Liệu Sui Generis, không phân biệt cách các quyền được gắn nhãn hoặc phân loại. Đối với mục đích của Giấy Phép Công Cộng này, các quyền được quy định trong Mục 2(b)(1)-(2) không phải là Bản quyền và Các Quyền Tương Tự. + + e. Biện Pháp Công Nghệ Hiệu Quả có nghĩa là các biện pháp mà, nếu không có sự cho phép thích hợp, không thể bị vượt qua theo luật pháp thực hiện nghĩa vụ theo Điều 11 của Hiệp Ước Bản Quyền WIPO được thông qua ngày 20 tháng 12 năm 1996, và/hoặc các thỏa thuận quốc tế tương tự. + + f. Ngoại Lệ và Giới Hạn có nghĩa là sử dụng hợp lý, giao dịch hợp lý, và/hoặc bất kỳ ngoại lệ hoặc giới hạn nào khác đối với Bản quyền và Các Quyền Tương Tự áp dụng cho việc Bạn sử dụng Tài Liệu Được Cấp. + + g. Các Yếu Tố Giấy Phép có nghĩa là các thuộc tính giấy phép được liệt kê trong tên của Giấy Phép Công Cộng Creative Commons. Các Yếu Tố Giấy Phép của Giấy Phép Công Cộng này là Attribution và ShareAlike. + + h. Tài Liệu Được Cấp có nghĩa là tác phẩm nghệ thuật hoặc văn học, cơ sở dữ liệu, hoặc tài liệu khác mà Người Cấp Phép áp dụng Giấy Phép Công Cộng này. + + i. Các Quyền Được Cấp có nghĩa là các quyền được cấp cho Bạn theo các điều khoản và điều kiện của Giấy Phép Công Cộng này, giới hạn ở tất cả Bản quyền và Các Quyền Tương Tự áp dụng cho việc Bạn sử dụng Tài Liệu Được Cấp và mà Người Cấp Phép có thẩm quyền cấp phép. + + j. Người Cấp Phép có nghĩa là cá nhân hoặc tổ chức cấp quyền theo Giấy Phép Công Cộng này. + + k. Chia Sẻ có nghĩa là cung cấp tài liệu cho công chúng bằng bất kỳ phương tiện hoặc quy trình nào yêu cầu sự cho phép theo Các Quyền Được Cấp, chẳng hạn như sao chép, hiển thị công khai, biểu diễn công khai, phân phối, truyền bá, giao tiếp, hoặc nhập khẩu, và làm cho tài liệu có sẵn cho công chúng bao gồm các cách mà các thành viên của công chúng có thể truy cập tài liệu từ một nơi và vào thời điểm họ tự chọn. + + l. Quyền Cơ Sở Dữ Liệu Sui Generis có nghĩa là các quyền khác ngoài bản quyền phát sinh từ Chỉ Thị 96/9/EC của Nghị Viện Châu Âu và Hội Đồng ngày 11 tháng 3 năm 1996 về bảo vệ pháp lý của cơ sở dữ liệu, như đã được sửa đổi và/hoặc kế thừa, cũng như các quyền tương đương về cơ bản ở bất kỳ nơi nào trên thế giới. + + m. Bạn có nghĩa là cá nhân hoặc tổ chức thực hiện Các Quyền Được Cấp theo Giấy Phép Công Cộng này. "Của Bạn" có nghĩa tương ứng. + +Mục 2 -- Phạm Vi. + + a. Cấp phép. + + 1. Theo các điều khoản và điều kiện của Giấy Phép Công Cộng này, Người Cấp Phép cấp cho Bạn giấy phép toàn cầu, miễn phí bản quyền, không thể cấp phép lại, không độc quyền, không thể thu hồi để thực hiện Các Quyền Được Cấp trong Tài Liệu Được Cấp để: + + a. sao chép và Chia Sẻ Tài Liệu Được Cấp, toàn bộ hoặc một phần; và + + b. tạo, sao chép, và Chia Sẻ Tài Liệu Được Chuyển Đổi. + + 2. Ngoại Lệ và Giới Hạn. Để tránh hiểu nhầm, khi Ngoại Lệ và Giới Hạn áp dụng cho việc Bạn sử dụng, Giấy Phép Công Cộng này không áp dụng, và Bạn không cần tuân thủ các điều khoản và điều kiện của nó. + + 3. Thời hạn. Thời hạn của Giấy Phép Công Cộng này được quy định trong Mục 6(a). + + 4. Phương tiện và định dạng; sửa đổi kỹ thuật được phép. Người Cấp Phép cho phép Bạn thực hiện Các Quyền Được Cấp trong tất cả các phương tiện và định dạng hiện tại hoặc sẽ được tạo ra sau này, và thực hiện các sửa đổi kỹ thuật cần thiết để làm điều đó. Người Cấp Phép từ bỏ và/hoặc đồng ý không khẳng định bất kỳ quyền hoặc thẩm quyền nào để cấm Bạn thực hiện các sửa đổi kỹ thuật cần thiết để thực hiện Các Quyền Được Cấp, bao gồm các sửa đổi kỹ thuật cần thiết để vượt qua Biện Pháp Công Nghệ Hiệu Quả. Đối với mục đích của Giấy Phép Công Cộng này, chỉ thực hiện các sửa đổi được phép bởi Mục 2(a)(4) không bao giờ tạo ra Tài Liệu Được Chuyển Đổi. + + 5. Người nhận tiếp theo. + + a. Đề nghị từ Người Cấp Phép -- Tài Liệu Được Cấp. Mỗi người nhận Tài Liệu Được Cấp tự động nhận được một đề nghị từ Người Cấp Phép để thực hiện Các Quyền Được Cấp theo các điều khoản và điều kiện của Giấy Phép Công Cộng này. + + b. Đề nghị bổ sung từ Người Cấp Phép -- Tài Liệu Được Chuyển Đổi. Mỗi người nhận Tài Liệu Được Chuyển Đổi từ Bạn tự động nhận được một đề nghị từ Người Cấp Phép để thực hiện Các Quyền Được Cấp trong Tài Liệu Được Chuyển Đổi theo các điều kiện của Giấy Phép của Người Chuyển Đổi mà Bạn áp dụng. + + c. Không có hạn chế đối với người nhận tiếp theo. Bạn không được đưa ra hoặc áp đặt bất kỳ điều khoản hoặc điều kiện bổ sung hoặc khác biệt nào, hoặc áp dụng bất kỳ Biện Pháp Công Nghệ Hiệu Quả nào đối với Tài Liệu Được Cấp nếu việc làm đó hạn chế việc thực hiện Các Quyền Được Cấp bởi bất kỳ người nhận nào của Tài Liệu Được Cấp. + + 6. Không xác nhận. Không có điều gì trong Giấy Phép Công Cộng này cấu thành hoặc có thể được hiểu là sự cho phép để khẳng định hoặc ngụ ý rằng Bạn, hoặc việc Bạn sử dụng Tài Liệu Được Cấp, có liên quan đến, được tài trợ, xác nhận, hoặc được cấp trạng thái chính thức bởi Người Cấp Phép hoặc những người khác được chỉ định để nhận sự ghi nhận như được quy định trong Mục 3(a)(1)(A)(i). + + b. Các quyền khác. + + 1. Các quyền đạo đức, chẳng hạn như quyền về tính toàn vẹn, không được cấp phép theo Giấy Phép Công Cộng này, cũng như các quyền về công khai, quyền riêng tư, và/hoặc các quyền cá nhân tương tự khác; tuy nhiên, trong phạm vi có thể, Người Cấp Phép từ bỏ và/hoặc đồng ý không khẳng định bất kỳ quyền nào như vậy do Người Cấp Phép nắm giữ trong phạm vi cần thiết để cho phép Bạn thực hiện Các Quyền Được Cấp, nhưng không phải ngoài phạm vi đó. + + 2. Các quyền về bằng sáng chế và nhãn hiệu không được cấp phép theo Giấy Phép Công Cộng này. + + 3. Trong phạm vi có thể, Người Cấp Phép từ bỏ bất kỳ quyền nào để thu tiền bản quyền từ Bạn cho việc thực hiện Các Quyền Được Cấp, dù trực tiếp hay thông qua một tổ chức thu tiền theo bất kỳ chương trình cấp phép tự nguyện hoặc có thể từ bỏ theo luật định hoặc bắt buộc nào. Trong tất cả các trường hợp khác, Người Cấp Phép rõ ràng bảo lưu bất kỳ quyền nào để thu tiền bản quyền như vậy. +Quyền, sau đó cơ sở dữ liệu mà Bạn có Quyền Cơ Sở Dữ Liệu Sui Generis (nhưng không phải nội dung riêng lẻ của nó) là Tài Liệu Được Chuyển Đổi, + +bao gồm cho các mục đích của Mục 3(b); và +c. Bạn phải tuân thủ các điều kiện trong Mục 3(a) nếu Bạn Chia sẻ toàn bộ hoặc một phần đáng kể nội dung của cơ sở dữ liệu. + +Để tránh hiểu nhầm, Mục 4 này bổ sung và không thay thế các nghĩa vụ của Bạn theo Giấy Phép Công này khi Quyền Được Cấp Phép bao gồm các Quyền Tác Giả và Quyền Tương Tự khác. + +--- + +**Mục 5 -- Tuyên bố từ chối bảo đảm và Giới hạn trách nhiệm.** + +a. TRỪ KHI ĐƯỢC NGƯỜI CẤP PHÉP THỰC HIỆN RIÊNG BIỆT, TRONG PHẠM VI CÓ THỂ, NGƯỜI CẤP PHÉP CUNG CẤP TÀI LIỆU ĐƯỢC CẤP PHÉP NHƯ HIỆN CÓ VÀ NHƯ CÓ SẴN, VÀ KHÔNG ĐƯA RA BẤT KỲ TUYÊN BỐ HOẶC BẢO ĐẢM NÀO VỀ TÀI LIỆU ĐƯỢC CẤP PHÉP, DÙ LÀ RÕ RÀNG, NGỤ Ý, THEO LUẬT ĐỊNH, HAY KHÁC. ĐIỀU NÀY BAO GỒM, NHƯNG KHÔNG GIỚI HẠN, CÁC BẢO ĐẢM VỀ QUYỀN SỞ HỮU, KHẢ NĂNG TIÊU THỤ, PHÙ HỢP VỚI MỤC ĐÍCH CỤ THỂ, KHÔNG VI PHẠM, KHÔNG CÓ KHUYẾT TẬT TIỀM ẨN HOẶC KHÁC, ĐỘ CHÍNH XÁC, HOẶC SỰ CÓ MẶT HOẶC KHÔNG CÓ LỖI, DÙ ĐÃ BIẾT HOẶC CÓ THỂ PHÁT HIỆN. NƠI TUYÊN BỐ TỪ CHỐI BẢO ĐẢM KHÔNG ĐƯỢC PHÉP TOÀN BỘ HOẶC MỘT PHẦN, TUYÊN BỐ TỪ CHỐI NÀY CÓ THỂ KHÔNG ÁP DỤNG CHO BẠN. + +b. TRONG PHẠM VI CÓ THỂ, NGƯỜI CẤP PHÉP SẼ KHÔNG CHỊU TRÁCH NHIỆM VỚI BẠN THEO BẤT KỲ LÝ THUYẾT PHÁP LÝ NÀO (BAO GỒM, NHƯNG KHÔNG GIỚI HẠN, SƠ SUẤT) HOẶC KHÁC VỀ BẤT KỲ TỔN THẤT, CHI PHÍ, CHI TIÊU, HOẶC THIỆT HẠI TRỰC TIẾP, ĐẶC BIỆT, GIÁN TIẾP, NGẪU NHIÊN, HẬU QUẢ, TRỪNG PHẠT, MẪU MỰC, HOẶC KHÁC PHÁT SINH TỪ GIẤY PHÉP CÔNG NÀY HOẶC VIỆC SỬ DỤNG TÀI LIỆU ĐƯỢC CẤP PHÉP, NGAY CẢ KHI NGƯỜI CẤP PHÉP ĐÃ ĐƯỢC THÔNG BÁO VỀ KHẢ NĂNG XẢY RA CÁC TỔN THẤT, CHI PHÍ, CHI TIÊU, HOẶC THIỆT HẠI ĐÓ. NƠI GIỚI HẠN TRÁCH NHIỆM KHÔNG ĐƯỢC PHÉP TOÀN BỘ HOẶC MỘT PHẦN, GIỚI HẠN NÀY CÓ THỂ KHÔNG ÁP DỤNG CHO BẠN. + +c. Tuyên bố từ chối bảo đảm và giới hạn trách nhiệm nêu trên sẽ được diễn giải theo cách mà, trong phạm vi có thể, gần nhất với việc từ chối tuyệt đối và miễn trừ mọi trách nhiệm. + +--- + +**Mục 6 -- Thời hạn và Chấm dứt.** + +a. Giấy Phép Công này áp dụng trong thời hạn của Quyền Tác Giả và Quyền Tương Tự được cấp phép tại đây. Tuy nhiên, nếu Bạn không tuân thủ Giấy Phép Công này, thì các quyền của Bạn theo Giấy Phép Công này sẽ tự động chấm dứt. + +b. Khi quyền của Bạn sử dụng Tài Liệu Được Cấp Phép đã bị chấm dứt theo Mục 6(a), nó sẽ được khôi phục: + +1. tự động kể từ ngày vi phạm được khắc phục, với điều kiện nó được khắc phục trong vòng 30 ngày kể từ khi Bạn phát hiện ra vi phạm; hoặc +2. khi được Người Cấp Phép khôi phục rõ ràng. + +Để tránh hiểu nhầm, Mục 6(b) này không ảnh hưởng đến bất kỳ quyền nào mà Người Cấp Phép có thể có để tìm kiếm biện pháp khắc phục cho các vi phạm của Bạn đối với Giấy Phép Công này. + +c. Để tránh hiểu nhầm, Người Cấp Phép cũng có thể cung cấp Tài Liệu Được Cấp Phép theo các điều khoản hoặc điều kiện riêng biệt hoặc ngừng phân phối Tài Liệu Được Cấp Phép bất kỳ lúc nào; tuy nhiên, việc làm như vậy sẽ không chấm dứt Giấy Phép Công này. + +d. Các mục 1, 5, 6, 7, và 8 vẫn có hiệu lực sau khi Giấy Phép Công này chấm dứt. + +--- + +**Mục 7 -- Các điều khoản và điều kiện khác.** + +a. Người Cấp Phép sẽ không bị ràng buộc bởi bất kỳ điều khoản hoặc điều kiện bổ sung hoặc khác nào do Bạn truyền đạt trừ khi được đồng ý rõ ràng. + +b. Bất kỳ thỏa thuận, hiểu biết, hoặc hợp đồng nào liên quan đến Tài Liệu Được Cấp Phép không được nêu tại đây đều tách biệt và độc lập với các điều khoản và điều kiện của Giấy Phép Công này. + +--- + +**Mục 8 -- Diễn giải.** + +a. Để tránh hiểu nhầm, Giấy Phép Công này không, và sẽ không được diễn giải là, giảm, giới hạn, hạn chế, hoặc áp đặt điều kiện đối với bất kỳ việc sử dụng Tài Liệu Được Cấp Phép nào mà có thể được thực hiện hợp pháp mà không cần sự cho phép theo Giấy Phép Công này. + +b. Trong phạm vi có thể, nếu bất kỳ điều khoản nào của Giấy Phép Công này được coi là không thể thực thi, nó sẽ tự động được sửa đổi ở mức tối thiểu cần thiết để làm cho nó có thể thực thi. Nếu điều khoản không thể sửa đổi, nó sẽ bị loại bỏ khỏi Giấy Phép Công này mà không ảnh hưởng đến tính thực thi của các điều khoản và điều kiện còn lại. + +c. Không điều khoản hoặc điều kiện nào của Giấy Phép Công này sẽ được miễn trừ và không sự không tuân thủ nào được đồng ý trừ khi được Người Cấp Phép đồng ý rõ ràng. + +d. Không có điều gì trong Giấy Phép Công này cấu thành hoặc có thể được diễn giải là giới hạn, hoặc miễn trừ, bất kỳ đặc quyền và miễn trừ nào áp dụng cho Người Cấp Phép hoặc Bạn, bao gồm từ các quy trình pháp lý của bất kỳ khu vực pháp lý hoặc cơ quan nào. + +--- + +Creative Commons không phải là một bên trong các giấy phép công của mình. Tuy nhiên, Creative Commons có thể chọn áp dụng một trong các giấy phép công của mình cho tài liệu mà nó xuất bản và trong những trường hợp đó sẽ được coi là “Người Cấp Phép.” Văn bản của các giấy phép công Creative Commons được dành cho phạm vi công cộng theo CC0 Public Domain Dedication. Ngoại trừ mục đích giới hạn để chỉ ra rằng tài liệu được chia sẻ theo giấy phép công Creative Commons hoặc như được phép khác theo các chính sách của Creative Commons được công bố tại creativecommons.org/policies, Creative Commons không cho phép sử dụng nhãn hiệu "Creative Commons" hoặc bất kỳ nhãn hiệu hoặc logo nào khác của Creative Commons mà không có sự đồng ý bằng văn bản trước, bao gồm, nhưng không giới hạn, liên quan đến bất kỳ sửa đổi trái phép nào đối với bất kỳ giấy phép công nào của mình hoặc bất kỳ thỏa thuận, hiểu biết, hoặc hợp đồng nào khác liên quan đến việc sử dụng tài liệu được cấp phép. Để tránh hiểu nhầm, đoạn này không phải là một phần của các giấy phép công. + +Creative Commons có thể được liên hệ tại creativecommons.org. + +--- + +**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, nên 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 diff --git a/translations/vi/sketchnotes/README.md b/translations/vi/sketchnotes/README.md new file mode 100644 index 00000000..cbbf55c5 --- /dev/null +++ b/translations/vi/sketchnotes/README.md @@ -0,0 +1,21 @@ + +Tất cả các bản vẽ minh họa của chương trình học có thể được tải xuống tại đây. + +🖨 Để in với độ phân giải cao, các phiên bản TIFF có sẵn tại [repo này](https://github.com/girliemac/a-picture-is-worth-a-1000-words/tree/main/ml/tiff). + +🎨 Được tạo bởi: [Tomomi Imura](https://github.com/girliemac) (Twitter: [@girlie_mac](https://twitter.com/girlie_mac)) + +[![CC BY-SA 4.0](https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg)](https://creativecommons.org/licenses/by-sa/4.0/) + +--- + +**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, nên 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. \ No newline at end of file