במדריך הזה נלמד איך להשתמש במשפט TRANSFORM של ההצהרה CREATE MODEL כדי לבצע הנדסת פיצ'רים (feature engineering) בזמן שיוצרים ומאמנים מודל. בעזרת המשפט TRANSFORM, אתם יכולים לציין פונקציה אחת או יותר של עיבוד מקדים כדי לשנות את נתוני הקלט שמשמשים לאימון המודל. העיבוד המקדים שאתם מחילים על המודל מוחל באופן אוטומטי כשאתם משתמשים במודל עם הפונקציות ML.EVALUATE ו-ML.PREDICT.
במדריך הזה משתמשים במערך הנתונים הציבורי bigquery-public-data.ml_datasets.penguin.
מטרות
במדריך הזה מוסבר איך לבצע את הפעולות הבאות:
- יצירת מודל רגרסיה לינארית כדי לחזות את סוג קריאת השירות באמצעות ההצהרה
CREATE MODEL. בתוך ההצהרהCREATE MODEL, משתמשים בפונקציותML.QUANTILE_BUCKETIZEו-ML.FEATURE_CROSSכדי לעבד מראש את הנתונים. - הערכת המודל באמצעות הפונקציה
ML.EVALUATE. - קבלת חיזויים מהמודל באמצעות הפונקציה
ML.PREDICT.
עלויות
במדריך הזה משתמשים ברכיבים של Google Cloud, והשימוש בהם כרוך בתשלום, כולל:
- BigQuery
- BigQuery ML
למידע נוסף על העלויות של BigQuery, קראו את הדף תמחור ב-BigQuery.
לפני שמתחילים
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- BigQuery מופעל באופן אוטומטי בפרויקטים חדשים.
כדי להפעיל את BigQuery בפרויקט קיים, עוברים אל
מפעילים את BigQuery API, אם הוא עדיין לא מופעל.
התפקידים שנדרשים כדי להפעיל ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם אתם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, אתם יכולים לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים?
יצירת קבוצת נתונים
כדי ליצור מערך נתונים ב-BigQuery, בוחרים אחת מהאפשרויות הבאות:
המסוף
נכנסים לדף BigQuery במסוף Google Cloud .
בחלונית הימנית, לוחצים על Explorer:

אם החלונית הימנית לא מוצגת, לוחצים על Expand left pane כדי לפתוח אותה.
ב-Explorer, מרחיבים את הפרויקט ולוחצים על Datasets.
בדף Datasets, לוחצים על Create dataset.
בחלונית Create dataset:
בשדה Dataset ID, מזינים
bqml_tutorial.בקטע Data location (מיקום הנתונים), בוחרים באפשרות US (ארה"ב).
משאירים את שאר הגדרות ברירת המחדל כמו שהן.
לוחצים על Create dataset.
BQ
כדי ליצור קבוצת נתונים חדשה, משתמשים בפקודה bq mk --dataset.
יוצרים מערך נתונים בשם
bqml_tutorialומגדירים את מיקום הנתונים ל-US:bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
מוודאים שמערך הנתונים נוצר:
bq ls
API
מפעילים את השיטה datasets.insert עם משאב של מערך נתונים מוגדר:
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
יצירת המודל
יוצרים מודל רגרסיה לינארית כדי לחזות את משקל הפינגווינים, ומאמנים אותו באמצעות טבלת הדוגמה penguins.
הסעיף OPTIONS(model_type='linear_reg', input_label_cols=['body_mass_g']) מציין שאתם יוצרים מודל רגרסיה ליניארית. מודל רגרסיה לינארית יוצר ערך רציף משילוב לינארי של מאפייני קלט. העמודה body_mass_g היא עמודת תווית הקלט. במודלים של רגרסיה לינארית, עמודת התווית חייבת להיות בעלת ערך ממשי (כלומר, ערכי העמודה חייבים להיות מספרים ממשיים).
הסעיף TRANSFORM בשאילתה הזו משתמש בעמודות הבאות מההצהרה SELECT:
-
body_mass_g: משמש לאימון ללא שינוי. -
culmen_depth_mm: משמש לאימון ללא שינוי. -
flipper_length_mm: משמש לאימון ללא שינוי. -
bucketized_culmen_length: נוצר מ-culmen_length_mmעל ידי חלוקה שלculmen_length_mmלקטגוריות על סמך אחוזונים באמצעות הפונקציה האנליטיתML.QUANTILE_BUCKETIZE(). -
culmen_length_mm: הערך המקורי שלculmen_length_mm, שהומר לערךSTRINGושימש באימון. -
species_sex: נוצר מהצלבה שלspeciesו-sexבאמצעות הפונקציהML.FEATURE_CROSS.
לא צריך להשתמש בכל העמודות מטבלת האימון בסעיף TRANSFORM.
הסעיף WHERE – WHERE body_mass_g IS NOT NULL AND RAND() < 0.2 – מחריג שורות שבהן משקל הפינגווינים הוא NULL, ומשתמש בפונקציה RAND כדי ליצור מדגם אקראי של הנתונים.
כדי ליצור את המודל:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על Run:
CREATE OR REPLACE MODEL `bqml_tutorial.penguin_transform` TRANSFORM( body_mass_g, culmen_depth_mm, flipper_length_mm, ML.QUANTILE_BUCKETIZE(culmen_length_mm, 10) OVER () AS bucketized_culmen_length, CAST(culmen_length_mm AS string) AS culmen_length_mm, ML.FEATURE_CROSS(STRUCT(species, sex)) AS species_sex) OPTIONS ( model_type = 'linear_reg', input_label_cols = ['body_mass_g']) AS SELECT * FROM `bigquery-public-data.ml_datasets.penguins` WHERE body_mass_g IS NOT NULL AND RAND() < 0.2;
השאילתה מסתיימת תוך כ-15 דקות, ואז המודל
penguin_transformמופיע בחלונית Explorer. מכיוון שהשאילתה משתמשת בהצהרתCREATE MODELכדי ליצור מודל, לא מוצגות תוצאות שאילתה.
הערכת המודל
מעריכים את ביצועי המודל באמצעות הפונקציה ML.EVALUATE.
הפונקציה ML.EVALUATE מעריכה את משקלי הפינגווינים החזויים שהמודל מחזיר, בהשוואה למשקלי הפינגווינים בפועל מנתוני האימון.
ההצהרה SELECT והסעיף FROM שמוטמעים בשאילתה הזו זהים לאלה שבשאילתה CREATE MODEL. מכיוון שהשתמשתם בסעיף TRANSFORM כשאתם יוצרים את המודל, אתם לא צריכים לציין שוב את העמודות והטרנספורמציות בפונקציה ML.EVALUATE. הפונקציה מאחזרת אותם באופן אוטומטי מהמודל.
כדי להעריך את המודל:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על Run:
SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.penguin_transform`, ( SELECT * FROM `bigquery-public-data.ml_datasets.penguins` WHERE body_mass_g IS NOT NULL ));
התוצאות אמורות להיראות כך:
+---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+ | mean_absolute_error | mean_squared_error | mean_squared_log_error | median_absolute_error | r2_score | explained_variance | +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+ | 64.21134350607677 | 13016.433317859564 | 7.140935762696211E-4 | 15.31788461553515 | 0.9813042531507734 | 0.9813186268757634 | +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
מדד חשוב בתוצאות ההערכה הוא הציון R2. הציון R2 הוא מדד סטטיסטי שקובע אם התחזיות של הרגרסיה הלינארית קרובות לנתונים בפועל. ערך של
0מציין שהמודל לא מסביר את השונות של נתוני התגובה סביב הממוצע. הערך1מציין שהמודל מסביר את כל השונות של נתוני התגובה סביב הממוצע.למידע נוסף על הפלט של הפונקציה
ML.EVALUATE, קראו את המאמר פלט.אפשר גם להפעיל את
ML.EVALUATEבלי לספק את נתוני הקלט. הוא ישתמש במדדי ההערכה שחושבו במהלך האימון.
שימוש במודל כדי לחזות את משקל הפינגווין
משתמשים במודל עם הפונקציה ML.PREDICT כדי לחזות את המשקל של פינגווינים זכרים.
הפונקציה ML.PREDICT מפיקה את הערך החזוי בעמודה predicted_label_column_name, במקרה הזה predicted_body_mass_g.
כשמשתמשים בפונקציה ML.PREDICT, לא צריך להעביר את כל העמודות ששימשו לאימון המודל. צריך רק את העמודות שבהן השתמשתם בסעיף TRANSFORM. בדומה ל-ML.EVALUATE, הפונקציה ML.PREDICT מאחזרת באופן אוטומטי את הטרנספורמציות והעמודות של TRANSFORM מהמודל.
כדי לקבל חיזויים מהמודל, פועלים לפי השלבים הבאים:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על Run:
SELECT predicted_body_mass_g FROM ML.PREDICT( MODEL `bqml_tutorial.penguin_transform`, ( SELECT * FROM `bigquery-public-data.ml_datasets.penguins` WHERE sex = 'MALE' ));
התוצאות אמורות להיראות כך:
+-----------------------+ | predicted_body_mass_g | +-----------------------+ | 2810.2868541725757 | +-----------------------+ | 3813.6574220842676 | +-----------------------+ | 4098.844698262214 | +-----------------------+ | 4256.587135004173 | +-----------------------+ | 3008.393497302691 | +-----------------------+ | ... | +-----------------------+
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים הנפרדים.
- אתם יכולים למחוק את הפרויקט שיצרתם.
- אפשר גם להשאיר את הפרויקט ולמחוק את מערך הנתונים.
מחיקת מערך הנתונים
מחיקת הפרויקט תסיר את כל מערכי הנתונים ואת כל הטבלאות בפרויקט. אם אתם מעדיפים להשתמש שוב בפרויקט, אתם יכולים למחוק את קבוצת הנתונים שיצרתם במדריך הזה:
אם צריך, פותחים את הדף של BigQuery במסוףGoogle Cloud .
בחלונית הניווט, לוחצים על מערך הנתונים bqml_tutorial שיצרתם.
בצד שמאל של החלון, לוחצים על מחיקת מערך הנתונים. הפעולה הזו מוחקת את מערך הנתונים, את הטבלה ואת כל הנתונים.
בתיבת הדו-שיח Delete dataset, מאשרים את פקודת המחיקה על ידי הקלדת שם מערך הנתונים (
bqml_tutorial) ולוחצים על Delete.
מחיקת הפרויקט
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
- מידע נוסף על למידת מכונה זמין בקורס המקוצר על למידת מכונה.
- לסקירה כללית על BigQuery ML, קראו את המאמר מבוא ל-BigQuery ML.
- מידע נוסף על מסוף Google Cloud זמין במאמר שימוש במסוף Google Cloud .