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

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

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

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

 

יבוא ותלויות

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

import pandas as pd
import numpy as np
  • את 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.

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

from sklearn.preprocessing import MinMaxScaler

לאחר שייבאנו את המודל 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, למתודה אחת fit_transform():

scaler_model.fit_transform(data)

 

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

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

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

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,)

 

לסיכום

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

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

 

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

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

 

 

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

 

= 4 + 3