Menu
CoddyTech

צינורות עיבוד

חלק מהיחידה למידה מונחית במסלול ה-Machine Learning של Coddy. שיעור 45 מתוך 58.

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

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

התחילו בקטן: make_pipeline משרשר מדרג ומודל:

from sklearn.pipeline import make_pipeline

pipe = make_pipeline(StandardScaler(), KNeighborsClassifier())
pipe.fit(X_train, y_train)
print(pipe.score(X_test, y_test))

עבור 200 ריתוכי בדיקה, חזקים או חלשים, יודפס 0.86, לעומת 0.74 ללא שינוי קנה מידה.

fit לומדת את קנה המידה משורות האימון, ואז מאמנת. כל שורה מאוחרת יותר מותאמת לאותו קנה מידה באופן אוטומטי.

challenge icon

אתגר

בינוני

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

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

בחברה אחרת, יום 20, 32, 7000, 9:

Test accuracy: 0.880
Flying day: no

נסו בעצמכם

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.pipeline import make_pipeline

# ימים קודמים בחברת כדורים פורחים: יום שבו אפשר לטוס (1) או לא (0)
days = pd.read_csv("balloons.csv")
X = days[["wind_kmh", "gusts_kmh", "visibility_m", "passengers"]].to_numpy()
y = days["flying_day"].to_numpy()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)

# התחזית למחר: רוח, משבי רוח, ראות, נוסעים שהזמינו מקום
day = np.array([[float(input()), float(input()), float(input()), float(input())]])

# שינוי קנה מידה ידני: הציון נראה תקין, אבל נתוני התחזית לעולם אינם עוברים שינוי קנה מידה
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
model = KNeighborsClassifier()
model.fit(X_train_scaled, y_train)
print(f"Test accuracy: {model.score(X_test_scaled, y_test):.3f}")
if model.predict(day)[0] == 1:
    print("Flying day: yes")
else:
    print("Flying day: no")
quiz iconבחנו את עצמכם

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

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

תרגלו בעצמכם: קומפיילר Python אונליין