ביצוע הנדסת פיצ'רים באמצעות פסוקית ה-TRANSFORM

במדריך הזה נלמד איך להשתמש בסעיף TRANSFORM של הצהרת CREATE MODEL כדי לבצע הנדסת תכונות בו-זמנית עם יצירה ואימון של מודל. באמצעות פסוקית TRANSFORM, אפשר לציין פונקציית עיבוד מקדים אחת או יותר כדי לשנות את נתוני הקלט שמשמשים לאימון המודל. העיבוד המקדים שאתם מבצעים במודל מוחל אוטומטית כשמשתמשים במודל עם הפונקציות ML.EVALUATE ו-ML.PREDICT.

במדריך הזה נעשה שימוש במערך הנתונים bigquery-public-data.ml_datasets.penguin הציבורי.

מטרות

במדריך הזה מוסבר איך לבצע את הפעולות הבאות:

עלויות

במדריך הזה נעשה שימוש ברכיבים של Google Cloud, והשימוש בהם כרוך בתשלום, כולל:

  • BigQuery
  • BigQuery ML

מידע נוסף על העלויות ב-BigQuery זמין בדף תמחור ב-BigQuery.

לפני שמתחילים

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

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

    מפעילים את BigQuery API.

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    להפעלת ה-API

יצירת מערך נתונים

יוצרים מערך נתונים ב-BigQuery לאחסון מודל ה-ML.

המסוף

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    לדף BigQuery

  2. בחלונית Explorer, לוחצים על שם הפרויקט.

  3. לוחצים על הצגת פעולות > יצירת מערך נתונים.

  4. בדף Create dataset, מבצעים את הפעולות הבאות:

    • בשדה Dataset ID (מזהה מערך הנתונים), מזינים bqml_tutorial.

    • בקטע Location type, בוחרים באפשרות Multi-region ואז בוחרים באפשרות US.

    • משאירים את הגדרות ברירת המחדל שנותרו כמו שהן ולוחצים על Create dataset (יצירת מערך נתונים).

BQ

כדי ליצור מערך נתונים חדש, משתמשים בפקודה bq mk --dataset.

  1. יוצרים מערך נתונים בשם bqml_tutorial עם מיקום הנתונים שמוגדר ל-US.

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. בודקים שמערך הנתונים נוצר:

    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 על ידי חלוקה לקבוצות (bucketizing) של culmen_length_mm על סמך חלוקה לעשירונים באמצעות פונקציית הניתוח ML.QUANTILE_BUCKETIZE().
  • culmen_length_mm: הערך המקורי של culmen_length_mm, שהומר לערך STRING ושימש לאימון.
  • species_sex: נוצר מהכפלה של species ו-sex באמצעות הפונקציה ML.FEATURE_CROSS.

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

הפסקה WHEREWHERE body_mass_g IS NOT NULL AND RAND() < 0.2 – מחריגה שורות שבהן המשקל של הפינגווינים הוא NULL, ומשתמשת בפונקציה RAND כדי ליצור מדגם אקראי של הנתונים.

כדי ליצור את המודל:

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    כניסה ל-BigQuery

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

כדי להעריך את המודל, פועלים לפי השלבים הבאים:

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    כניסה ל-BigQuery

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

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

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על 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 בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.

  • אתם יכולים למחוק את הפרויקט שיצרתם.
  • אפשר גם להשאיר את הפרויקט ולמחוק את קבוצת הנתונים.

מחיקת מערך נתונים

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

  1. אם צריך, פותחים את הדף BigQuery במסוףGoogle Cloud .

    לדף BigQuery

  2. בחלונית הניווט, לוחצים על מערך הנתונים bqml_tutorial שיצרתם.

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

  4. בתיבת הדו-שיח מחיקת מערך נתונים, מקלידים את שם מערך הנתונים (bqml_tutorial) כדי לאשר את פקודת המחיקה, ואז לוחצים על מחיקה.

מחיקת פרויקט

כדי למחוק את הפרויקט:

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.

המאמרים הבאים