Menu
CoddyTech

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

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

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

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

שני עותקים של עמודה ובה 8 עומקי צלילה, כששתי השורות האחרונות מסומנות כשורות בדיקה ותא אחד חסר. משמאל, ממלאים ואז מפצלים: החסר מקבל 21.3, הממוצע של כל 7 העומקים הידועים, כולל שורות הבדיקה — דליפה. מימין, מפצלים ואז משתמשים בצינור עיבוד: החסר מקבל 18.0, הממוצע של שורות האימון בלבד

בצינור, fit לומדת את ערכי המילוי משורות האימון בלבד:

from sklearn.impute import SimpleImputer

pipe = make_pipeline(SimpleImputer(strategy="median"), StandardScaler(), model)
pipe.fit(X_train, y_train)
print(pipe[0].statistics_)  # ערכי ההשלמה של השלב הראשון

עבור יומן צלילה (עומק, דקות, טמפרטורת המים), הפקודה מדפיסה:

[19. 44. 21.]

גם עבור מילים, שלבי העיבוד של המספרים הופכים למסלול אחד של ColumnTransformer:

lane = make_pipeline(SimpleImputer(strategy="median"), StandardScaler())
("numbers", lane, ["depth_m", "minutes"])
challenge icon

אתגר

בינוני

שירות היערות חוזה אילו פגיעות ברק מציתות שריפות, אך חלק מהמדידות חסרות. קוד הפתיחה מחלק את wildfire.csv וקורא אסטרטגיה, mean או median.

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

יער אחר, עם median:

Test accuracy: 0.840
humidity_pct: fill 46.0, all rows would give 46.0
wind_kmh: fill 29.0, all rows would give 32.0
temp_c: fill 25.0, all rows would give 26.0
days_without_rain: fill 23.0, all rows would give 23.0

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

נסו בעצמכם

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline

# פגיעות ברק ביער יבש: האם פגיעת הברק גרמה לשריפה (1) או לא (0)?
# חסרות כמה מדידות מזג אוויר.
strikes = pd.read_csv("wildfire.csv")
columns = ["humidity_pct", "wind_kmh", "temp_c", "days_without_rain"]
X = strikes[columns]
y = strikes["fire"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
strategy = input()

# כתבו את הקוד שלכם למטה
quiz iconבחנו את עצמכם

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

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

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