ABOUT
SOCIAL

office@hackend.com

Tel:

054-345-5954

052-575-7077

054-261-3395

  • White LinkedIn Icon
  • White Facebook Icon

© 2018 by Hackend. Proudly created with Wix.com

Search
  • Hackend

Pt2 Understand your Data with pandas and Sklearn | Python

זהו חלק 2 של המשך המאמר הקודם - לינק

אנו עדין נמצאים בעיצומה של מלחמה בינינו לבין המידע שלנו, המטרה היא שבסוף מאמר/מדריך זה המלחמה תסתיים ונוכל להתחיל לסקור את האלגוריתמים השונים שספריית sklearn בפייתון מספקת לנו.

הנקודה בה הקוד שלנו ממשיך, זו היא בדיוק הנקודה בה הפסקנו במאמר הקודם :


האתגר הראשון איתו נתאמת עכשיו הוא עמודת ה-sleep quality :

ראשית נדפיס אותם :


בעיה ראשונה : סוג הערכים הוא מחרוזות

נרצה להמיר את הערכים למספרים עצמם כלומר ש-״76%״ יומר ל-76. הפתרון הוא פשוט למדי בשפת פייתון, ראשית באמצעות strip ״ננקה״ את המחרוזת שלנו מ-״%״ ולאחר מכן נמיר את המחרוזת למספר מסוג int. נעשה את זה באמצעות מתודת apply (אותה פגשנו במדריך קודם) על כל אחת מהשורות בסט המידע .

*בקצרה - apply מאפשרת לנו להפעיל פעולה על כל תא בסט המידע ולייצר ממנו משהו חדש.


בעיה שנייה : טווח הערכים שלנו הוא גדול מידיי : כיום, הוא 100-0 אחוז, השקולים ל-100 ערכים אפשריים וזה המון ערכים אפשריים ללמידת מכונה, נרצה לצמצם את הבעיה.

לשם המדריך אניח ש-75 אחוז ומעלה באיכות השינה זו שינה טובה, ומתחת ל-75 אחוז זו תהיה שינה לא טובה. נשתמש בפונקציה cut של pandas על מנת לצמצם טווח הערכים שלי לפי החוקים הזו .

לשם המחקר, ארצה לראות כיצד השינה, הטובה או הרעה, מתפלגת לי במידע. המוטיבציה : אם יש לי קצת מידע על איכות שינה לא טובה, אז המודל שלי יהיה מוטה ולא מדוייק. הדפסה מהירה של ״כמה יש לי מכל דבר״ באמצעות הפונקציה value_count מראה לי שהמצב דיי טוב במקרה שלנו (כמעט חצי-חצי בהתפלגות הערכים).


כאשר X זו המדידה שלנו ו-Y זו התוצאה של אותה מדידה. במקרה של איכות השינה, אנחנו נרצה שאיכות השינה תהיה התוצאה של המדידה וכל שאר הדברים יהיו המדידה עצמה.

בצורה ראשונית נכתוב כך :


בשלב הזה סיימנו עם ספריית pandas ועתה נצלול לצרכים של למידת מכונה. דבר ראשוני שנצטרך לעשות הוא לטעון את ספריית sklearn לקוד שלנו :



המטרה :

עקרון מהותי באלגוריתמי למידת מכונה הם הפרדה לסט מידע לצורך אימונים וסט מידע לצורך בחינת המודל שאימנו על בסיס סט המידע לצורך האימונים. אם כן, ספריית sklearn מספקת לנו המון דברים בהקשרים של למידת מכונה על גווניה. אחד מהכלים שהיא מספקת לנו, זה היכולת להפריד סט מידע קיים לסט אימונים וסט בחינה. במילים אחרות, להפריד את הצמד חמד של ה-X,Y לשני צמדים חמדים של X_train,Y_train ו- X_test,Y_test


הפונקציה שעושה לנו את כל הכיף הזה נקראת : train_test_split

נייבא אותה לקוד :

הפונקציה מקבלת כמה פרמטרים ומחזירה 4 פרמטרים. דבר ראשון היא מקבלת את הדגימות והתוצאות, הרי אלו הם - X,Y. לאחר מכן היא מקבלת עוד פרמטר בשם test_size, שיגדיר לפונקציה כמה אחוז מסך המידע לשמור לטובת הבדיקות, בחרתי ב-20%. פרמטר נוסף שהיא מקבלת הוא random_state, זהו מספר שמייצג לנו את רמת העירבול של בחירת המידע, המטרה היא שהמידע שלנו ייבחר בצורה רנדומלית, בחרתי ב-42 כי זו משמעות החיים.


הרבה מילים, בסוף הקוד נראה כך :

סיימנו, עתה נותר לנו עוד אתגר אחד :

הבעיה : חלק מהפרמטרים מאוד גדולים ביחס לאחרים.

מה הכוונה ? במקרה שלנו, הערך של העמודה במד הצעדים הוא יהיה מספר מאוד גדול, בדרך כלל מעל 1500. במקביל, כמות שעות השינה שלנו תהיה לרוב מספר יחסית קטן, בין 5 ל-10. אלגוריתמים רבים לא יצליחו להתמודד עם החוסר פרופורציה בגדלים של הערכים וייגרמו לערך מסויים להשפיע יותר מערכים אחרים, אך ורק בגלל העובדה שהוא גדול מאוד. הפתרון : sklearn מספקת לנו ספרייה שבאמצעות נוכל להנמיך/להגדיל ערכים שונים לאותה הפרופורציה של חביריהם לתצפית. ראשית נייבא את הפונקציה לקוד שלנו :

לאחר מכן, נשתמש בה, זה ממש פשוט :

אם נוסיף print-ים של ״לפני״ ו-״אחרי״ נראה את השינוי בערכי המספרים : אבל..... קיבלנו שגיאה :


אנחנו מנסים להמיר סמיילי עצוב למספר מסוג float. מה קורה כאן ? תשובה : באג שלנו, למעשה לא שמנו לב אבל במדריך הקודם שמיפינו את הסמיילי השמח והסמיילי המבואס לא שמנו לב שיש גם סמיילי עצוב. התיקון מאוד פשוט, נוסיף למיפוי את הסמיילי העצוב ונשנה בהתאם.



נריץ שוב ונראה את השינוי בתוצאות, שימו לב שעתה כל המספרים הם בין 0-1 בעוד שמקודים ראינו מספרים טיפה שונים :

בסך הכל, כך נראה הקוד לאחר ״שיפצורים״ :

עד כה חווינו ולמדנו כיצד לנהל את המידע הגולמי שמאנחנו עובדים איתו, נתקלנו בלא מעט אתגרים אמיתיים מהחיים האמיתיים. בסך הכל הקוד שלנו מורכב מ-44 שורות אבל הוא עושה המון דברים.

בפוסטים הבאים נראה כיצד אנחנו מאמנים מודל על בסיס המידע שזיקקנו, נראה כיצד משתמשים במודל. נלמד וניישם עוד מגוון רחב של פעולות ואתגרים מגניבים באמצעות הקוד שלנו.

59 views