תחי ישראל - אין לנו ארץ אחרת

תחי ישראל -אין לנו ארץ אחרת

הכנת הנתונים ללמידת מכונה באמצעות SciKit-Learn

מחבר:
בתאריך:

SciKit-Learn היא ספרייה פופולרית של Python המשמשת ללמידת מכונה. בסדרת המדריכים על למידת מכונה אני משתמש בספרייה בעיקר כדי לעבד את הנתונים הגולמיים לפני למידת מכונה שנעשה בפועל באמצעות TensorFlow. במדריך זה נלמד לפצל את הנתונים בין קבוצת אימון ומבחן וגם כיצד לנרמל.

ספריית SciKit-Learn ללמידת מכונה באמצעות python

 

יבוא ותלויות

נייבא את הספריות הבסיסיות שישמשו אותנו במדריך:

import pandas as pd
import numpy as np
  • את numpy אנחנו צריכים בשביל לעבוד עם מערכים רב-מימדיים (לקריאת המדריך).
  • ואת pandas בשביל לסדר את המידע כמו בטבלה עם ערכים ושמות עמודות (לקריאת המדריך).

 

מסד נתונים

נייצר את סט הנתונים באמצעות numpy ו- pandas:

df = pd.DataFrame(data=np.random.randint(0, 42, (100, 3)),columns=['feature1', 'feature2', 'label'])
  • סה"כ 100 דוגמאות (שורות בטבלה). לכל דוגמה ישנים שני פיצ'רים ותגית אחת אותה צריך לחזות על פי הפיצ'רים.

נציץ בנתונים (הערכים שלכם יהיו שונים משלי):

df.head()
   

 feature1 

 feature2 

 label 

 0 

9

16

26

 1 

3

19

34

 2 

23

33

23

 3 

19

8

6

 4 

13

32

22

המבנה הוא של סט נתונים מוכן לתהליך למידה. בכל שורה נמצא features שמהם לומד המודל, ו- label שאותו המודל צריך לחזות.

חלוקה של הנתונים לקבוצת אימון ומבחן

אחרי שהמודל לומד את הנתונים צריך לבחון את התחזיות שלו על נתונים שלא שימשו בתהליך האימון. לשם כך נפריד את הנתונים לשניים, סט אימון ומבחן באמצעות המתודה train_test_split():

נשתמש בזה כדי לחלק את סט הנתונים ל-X (פיצ'רים) ו-y (תגיות):

X = df[['feature1', 'feature2']]
y = df['label']

החלוקה של סט הנתונים לקבוצת אימון ומבחן נעשית באמצעות המתודה train_test_split

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, 
    test_size=0.25, 
    random_state=42)
  • התוצאה של התרגיל היא חלוקה של סט הנתונים לקבוצת אימון שמכילה 75% מהשורות בסט הנתונים, ולקבוצת אימון של 25%.
  • לא חייבים יחס של 75:25 אפשר גם יחס אחר. תלוי במודל.
  • random_state מכיוון שהחלוקה לקבוצות נעשית באקראי משתמשים בערך זה כדי לקבל תוצאה שניתן לשחזר.

נבדוק שקיבלנו את החלוקה שלה אנחנו מצפים:

X_train.shape
(75, 2)
X_test.shape
(25, 2)
y_train.shape
(75,)
y_test.shape
(25,)

 

נורמליזציה של הנתונים הגולמיים

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

את הנתונים ננרמל בשיטת MinMax המביאה את כל הערכים להימצא בטווח שבין 0 ל-1.

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

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

כדי לבצע את הנורמליזציה נייבא את המודל מSciKit:

from sklearn.preprocessing import MinMaxScaler

ניצור אובייקט של MinMaxScaler

scaler_model = MinMaxScaler()

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

scaler_model.fit(X_train)

אחרי ש-fit מצא את הפרמטרים הנרמול בפועל נעשה על ידי מתודה נוספת transform

scaler_model.transform(X_train)

ניתן לאחד את שתי הפעולות, fit ו-transform, למתודה אחת fit_transform():

scaler_model.fit_transform(X_train)

על סט נתוני המבחן נפעיל את המתודה transform בלבד כדי למנוע דליפת מידע מסט המבחן לאימון:

scaler_model.transform(X_test)

 

שימוש ב- inverse_transform כדי לחזור לנתונים המקוריים

המתודה transform() גורמת לשינוי הנתונים, כדי לקבל את הנתונים המקוריים נשתמש ב-inverse_transform():

# transform
X_test_transformed = scaler_model.transform(X_test)

# inverse transform
X_test = scaler_model.inverse_transform(X_test_transformed)

 

סטנדרטיזציה של הנתונים באמצעות StandardScaler

הפונקציה MinMaxScaler היא הראשונה בה נשתמש בה כדי לנרמל נתונים אבל לפעמים נקבל תוצאות טובות יותר אם נשתמש בפונקציה אחרת דוגמת StandardScaler.

הפונקציה StandardScaler הופכת את הנתונים לסטנדרטיים עם ממוצע 0 כש-68% מהדוגמאות נמצאות בין +1 ל- -1. כלומר, הפונקציה מקנה לערכים התפלגות נורמלית.

נדגים:

# 1. import
from sklearn.preprocessing import StandardScaler

# 2. instantiate
scaler = StandardScaler()

# 3. fit and transform on the train set
scaler.fit_transform(X_train)

# 4. only transform the test set
scaler.transform(X_test)

 

לסיכום

SciKit היא ספרייה גדולה ועשירה המשמשת ללמידת מכונה. במדריכים אילה נשתמש במתודות של הספרייה לצורך עיבוד הנתונים כשאת תהליך הלמידה עצמו נעשה באמצעות ספריית TensorFlow.

לכל המדריכים בנושא של למידת מכונה

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

 

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

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

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

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

השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.

הוסף תגובה חדשה

 

 

ענה על השאלה הפשוטה הבאה כתנאי להוספת תגובה:

איך קוראים בעברית לצ`ופצ`יק של הקומקום?

 

תמונת המגיב

מנטה בתאריך: 04.11.2021

רק חסר לי הלמה... למה עושים את ההכנה ב SciKit ואת הלימוד עצמו ב TensorFlow

תמונת המגיב

יוסי בן הרוש בתאריך: 04.11.2021

כי זה הכי פרקטי.