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

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

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

.

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

 

יבוא ותלויות

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

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

 

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

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

קודם כל, נייצר את סט הנתונים באמצעות numpy:

data = np.random.randint(0, 42, (5, 3))
data
array([[33,  7,  0],
       [ 4, 30,  6],
       [11, 40, 20],
       [37,  0, 22],
       [ 3, 16, 11]])
  • הפונקציה בוחרת באקראי מספרים בין 0 ל-42 ולכן בכל פעם שתריצו אותה תקבלו תוצאה שונה.
  • המערך הוא רב-ממדי עם 5 שורות ו-3 פריטים בכל שורה.

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

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

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

scaler_model = MinMaxScaler()

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

scaler_model.fit(data)

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

scaler_model.transform(data)
array([[ 0.88235294,  0.175     ,  0.        ],
       [ 0.02941176,  0.75      ,  0.27272727],
       [ 0.23529412,  1.        ,  0.90909091],
       [ 1.        ,  0.        ,  1.        ],
       [ 0.        ,  0.4       ,  0.5       ]])

* בגלל האופי הרנדומלי שבו יצרנו את הנתונים התוצאה שלכם תהיה שונה בהכרח משלי.

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

scaler_model.fit_transform(data)

 

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

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

קודם כל, נייצר את סט הנתונים באמצעות numpy ו- pandas:

df = pd.DataFrame(data=np.random.randint(0, 42, (100, 3)),columns=['feature1', 'feature2', 'label'])

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

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 שאותו המודל צריך לחזות.

נשתמש בזה כדי לחלק את סט הנתונים ל-X ו-y:

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

החלוקה של סט הנתונים לקבוצת אימון וביקורת נעשית באמצעות המתודה 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,)

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

 

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

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

 

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

 

= 8 + 4