שיפור הביצועים של המודל באמצעות כוונון של היפרפרמטרים

במדריך הזה נסביר איך משתמשים בכוונון היפר-פרמטרים ב-BigQuery ML כדי לכוונן מודל למידת מכונה ולשפר את הביצועים שלו.

כדי לבצע כוונון של היפר-פרמטרים, מציינים את האפשרות NUM_TRIALS של ההצהרה CREATE MODEL, בשילוב עם אפשרויות אחרות שספציפיות למודל. כשמגדירים את האפשרויות האלה, BigQuery ML מאמן כמה גרסאות או ניסויים של המודל, כל אחד עם פרמטרים שונים במקצת, ומחזיר את הניסוי עם הביצועים הטובים ביותר.

במדריך הזה נשתמש בטבלה לדוגמה שזמינה לכולם ב-tlc_yellow_trips_2018, שמכילה מידע על נסיעות במוניות בניו יורק בשנת 2018.

מטרות

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

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

עלויות

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

  • BigQuery
  • BigQuery ML

למידע נוסף על העלויות של BigQuery, קראו את הדף תמחור ב-BigQuery.

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

  1. 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

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

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

    מפעילים את BigQuery API, אם הוא עדיין לא מופעל.

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

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם אתם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, אתם יכולים לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים?

    להפעלת ה-API

ההרשאות הנדרשות

  • כדי ליצור את קבוצת הנתונים, אתם צריכים את ההרשאה bigquery.datasets.create ב-IAM.

  • כדי ליצור את המודל, צריך את ההרשאות הבאות:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • כדי להריץ הסקה, צריך את ההרשאות הבאות:

    • bigquery.models.getData
    • bigquery.jobs.create

במאמר מבוא ל-IAM תוכלו לקרוא מידע נוסף על התפקידים וההרשאות של IAM ב-BigQuery.

יצירת קבוצת נתונים

כדי ליצור מערך נתונים ב-BigQuery, בוחרים אחת מהאפשרויות הבאות:

המסוף

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על Explorer:

    כפתור מודגש לחלונית Explorer.

    אם החלונית הימנית לא מוצגת, לוחצים על Expand left pane כדי לפתוח אותה.

  3. ב-Explorer, מרחיבים את הפרויקט ולוחצים על Datasets.

  4. בדף Datasets, לוחצים על Create dataset.

  5. בחלונית Create dataset:

    • בשדה Dataset ID, מזינים bqml_tutorial.

    • בקטע Data location (מיקום הנתונים), בוחרים באפשרות US (ארה"ב).

    משאירים את שאר הגדרות ברירת המחדל כמו שהן.

  6. לוחצים על 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"
  }
}

יצירת טבלה של נתוני אימון

יוצרים טבלה של נתוני אימון, על סמך קבוצת משנה של נתוני הטבלה tlc_yellow_trips_2018.

כדי ליצור את הטבלה:

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על Run:

    CREATE OR REPLACE TABLE `bqml_tutorial.taxi_tip_input`
    AS
    SELECT * EXCEPT (tip_amount), tip_amount AS label
    FROM
      `bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2018`
    WHERE
      tip_amount IS NOT NULL
    LIMIT 100000;

יצירת מודל בסיסי של רגרסיה ליניארית

יוצרים מודל רגרסיה לינארית בלי כוונון היפר-פרמטרים ומאמנים אותו על נתוני הטבלה taxi_tip_input.

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

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על Run:

    CREATE OR REPLACE MODEL `bqml_tutorial.baseline_taxi_tip_model`
      OPTIONS (
        MODEL_TYPE = 'LINEAR_REG'
      )
    AS
    SELECT
      *
    FROM
      `bqml_tutorial.taxi_tip_input`;

    השלמת השאילתה נמשכת כ-2 דקות.

הערכת המודל הבסיסי

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

כדי להעריך את המודל:

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על Run:

    SELECT *
    FROM
      ML.EVALUATE(MODEL `bqml_tutorial.baseline_taxi_tip_model`);

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

    +---------------------+--------------------+------------------------+-----------------------+---------------------+---------------------+
    | mean_absolute_error | mean_squared_error | mean_squared_log_error | median_absolute_error |      r2_score       | explained_variance  |
    +---------------------+--------------------+------------------------+-----------------------+---------------------+---------------------+
    |  2.5853895559690323 | 23760.416358496139 |   0.017392406523370374 | 0.0044248227819481123 | -1934.5450533482465 | -1934.3513857946277 |
    +---------------------+--------------------+------------------------+-----------------------+---------------------+---------------------+
    

הערך של r2_score במודל הבסיסי הוא שלילי, מה שמצביע על התאמה נמוכה לנתונים. ככל ש הציון של R2 קרוב יותר ל-1, כך ההתאמה של המודל טובה יותר.

יצירת מודל רגרסיה ליניארית עם כוונון היפר-פרמטרים

יוצרים מודל רגרסיה לינארית עם כוונון היפר-פרמטרים ומאמנים אותו על נתוני הטבלה taxi_tip_input.

בהצהרה CREATE MODEL משתמשים באפשרויות הבאות לכוונון היפר-פרמטרים:

  • האפשרות NUM_TRIALS כדי להגדיר את מספר הניסיונות ל-20.
  • האפשרות MAX_PARALLEL_TRIALS כדי להריץ שני ניסויים בכל משימת אימון, כך שיהיו בסך הכול עשר משימות ו-20 ניסויים. כך אפשר לקצר את זמן האימון הנדרש. עם זאת, שני הניסויים שפועלים במקביל לא נהנים מתוצאות האימון אחד של השני.
  • האפשרות L1_REG כדי לנסות ערכי רגולריזציה שונים של L1 בניסויים השונים. רגולריזציה מסוג L1 מסירה מהמודל תכונות לא רלוונטיות, וכך עוזרת למנוע התאמת יתר (overfitting).

האפשרויות האחרות לכוונון היפר-פרמטרים שנתמכות במודל משתמשות בערכי ברירת המחדל שלהן, באופן הבא:

  • L1_REG: 0
  • HPARAM_TUNING_ALGORITHM: ‏'VIZIER_DEFAULT'
  • HPARAM_TUNING_OBJECTIVES: ['R2_SCORE']

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

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על Run:

    CREATE OR REPLACE MODEL `bqml_tutorial.hp_taxi_tip_model`
      OPTIONS (
        MODEL_TYPE = 'LINEAR_REG',
        NUM_TRIALS = 20,
        MAX_PARALLEL_TRIALS = 2,
        L1_REG = HPARAM_RANGE(0, 5))
    AS
    SELECT
      *
    FROM
      `bqml_tutorial.taxi_tip_input`;

    השלמת השאילתה נמשכת כ-20 דקות.

מידע על תקופות הניסיון של ההדרכה

כדי לקבל מידע על כל הניסויים, כולל ערכי ההיפר-פרמטרים, היעדים והסטטוס שלהם, משתמשים בפונקציה ML.TRIAL_INFO. הפונקציה הזו גם מחזירה מידע על הניסוי עם הביצועים הכי טובים, על סמך המידע הזה.

כדי לקבל מידע על תקופת הניסיון:

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על Run:

    SELECT *
    FROM
      ML.TRIAL_INFO(MODEL `bqml_tutorial.hp_taxi_tip_model`)
    ORDER BY is_optimal DESC;

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

    +----------+-------------------------------------+-----------------------------------+--------------------+--------------------+-----------+---------------+------------+
    | trial_id |           hyperparameters           | hparam_tuning_evaluation_metrics  |   training_loss    |     eval_loss      |  status   | error_message | is_optimal |
    +----------+-------------------------------------+-----------------------------------+--------------------+--------------------+-----------+---------------+------------+
    |        7 |      {"l1_reg":"4.999999999999985"} |  {"r2_score":"0.653653627638174"} | 4.4677841296238165 |  4.478469742512195 | SUCCEEDED | NULL          |       true |
    |        2 |  {"l1_reg":"2.402163664510254E-11"} | {"r2_score":"0.6532493667964732"} |  4.457692508421795 |  4.483697081650438 | SUCCEEDED | NULL          |      false |
    |        3 |  {"l1_reg":"1.2929452948742316E-7"} |  {"r2_score":"0.653249366811995"} |   4.45769250849513 |  4.483697081449748 | SUCCEEDED | NULL          |      false |
    |        4 |  {"l1_reg":"2.5787102060628228E-5"} | {"r2_score":"0.6532493698925899"} |  4.457692523040582 |  4.483697041615808 | SUCCEEDED | NULL          |      false |
    |      ... |                             ...     |                           ...     |              ...   |             ...    |       ... |          ...  |        ... |
    +----------+-------------------------------------+-----------------------------------+--------------------+--------------------+-----------+---------------+------------+
    

    הערך בעמודה is_optimal מציין שניסיון 7 הוא המודל האופטימלי שהוחזר על ידי הכוונון.

הערכת הניסויים של המודל המכוונן

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

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

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על Run:

    SELECT *
    FROM
      ML.EVALUATE(MODEL `bqml_tutorial.hp_taxi_tip_model`)
    ORDER BY r2_score DESC;

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

    +----------+---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    | trial_id | mean_absolute_error | mean_squared_error | mean_squared_log_error | median_absolute_error |      r2_score      | explained_variance |
    +----------+---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    |        7 |   1.151814398002232 |  4.109811493266523 |     0.4918733252641176 |    0.5736103414025084 | 0.6652110305659145 | 0.6652144696114834 |
    |       19 |  1.1518143358927102 |  4.109811921460791 |     0.4918672150119582 |    0.5736106106914161 | 0.6652109956848206 | 0.6652144346901685 |
    |        8 |   1.152747850702547 |  4.123625876152422 |     0.4897808307399327 |    0.5731702310239184 | 0.6640856984144734 |  0.664088410199906 |
    |        5 |   1.152895108945439 |  4.125775524878872 |    0.48939088205957937 |    0.5723300569616766 | 0.6639105860807425 | 0.6639132416838652 |
    |      ... |                ...  |                ... |                    ... |                   ... |                ... |                ... |
    +----------+---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    

    ערך ה-r2_score של המודל האופטימלי, שהוא ניסוי 7, הוא 0.66521103056591446, מה שמראה שיפור משמעותי לעומת מודל הבסיס.

כדי להעריך ניסוי ספציפי, מציינים את הארגומנט TRIAL_ID בפונקציה ML.EVALUATE.

מידע נוסף על ההבדל בין יעדי ML.TRIAL_INFO לבין מדדי הערכה של ML.EVALUATE זמין במאמר פונקציות של פרסום המודל.

שימוש במודל המכוונן כדי לחזות טיפים למוניות

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

כדי לקבל תחזיות, פועלים לפי השלבים הבאים:

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על Run:

    SELECT *
    FROM
      ML.PREDICT(
        MODEL `bqml_tutorial.hp_taxi_tip_model`,
        (
          SELECT
            *
          FROM
            `bqml_tutorial.taxi_tip_input`
          LIMIT 5
        ));

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

    +----------+--------------------+-----------+---------------------+---------------------+-----------------+---------------+-----------+--------------------+--------------+-------------+-------+---------+--------------+---------------+--------------+--------------------+---------------------+----------------+-----------------+-------+
    | trial_id |  predicted_label   | vendor_id |   pickup_datetime   |  dropoff_datetime   | passenger_count | trip_distance | rate_code | store_and_fwd_flag | payment_type | fare_amount | extra | mta_tax | tolls_amount | imp_surcharge | total_amount | pickup_location_id | dropoff_location_id | data_file_year | data_file_month | label |
    +----------+--------------------+-----------+---------------------+---------------------+-----------------+---------------+-----------+--------------------+--------------+-------------+-------+---------+--------------+---------------+--------------+--------------------+---------------------+----------------+-----------------+-------+
    |        7 |  1.343367839584448 | 2         | 2018-01-15 18:55:15 | 2018-01-15 18:56:18 |               1 |             0 | 1         | N                  | 1            |           0 |     0 |       0 |            0 |             0 |            0 | 193                | 193                 |           2018 |               1 |     0 |
    |        7 | -1.176072791783461 | 1         | 2018-01-08 10:26:24 | 2018-01-08 10:26:37 |               1 |             0 | 5         | N                  | 3            |        0.01 |     0 |       0 |            0 |           0.3 |         0.31 | 158                | 158                 |           2018 |               1 |     0 |
    |        7 |  3.839580104168765 | 1         | 2018-01-22 10:58:02 | 2018-01-22 12:01:11 |               1 |          16.1 | 1         | N                  | 1            |        54.5 |     0 |     0.5 |            0 |           0.3 |         55.3 | 140                | 91                  |           2018 |               1 |     0 |
    |        7 |  4.677393985230036 | 1         | 2018-01-16 10:14:35 | 2018-01-16 11:07:28 |               1 |            18 | 1         | N                  | 2            |        54.5 |     0 |     0.5 |            0 |           0.3 |         55.3 | 138                | 67                  |           2018 |               1 |     0 |
    |        7 |  7.938988937253062 | 2         | 2018-01-16 07:05:15 | 2018-01-16 08:06:31 |               1 |          17.8 | 1         | N                  | 1            |        54.5 |     0 |     0.5 |            0 |           0.3 |        66.36 | 132                | 255                 |           2018 |               1 | 11.06 |
    +----------+--------------------+-----------+---------------------+---------------------+-----------------+---------------+-----------+--------------------+--------------+-------------+-------+---------+--------------+---------------+--------------+--------------------+---------------------+----------------+-----------------+-------+
    

הסרת המשאבים

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

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

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

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

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

    כניסה לדף BigQuery

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

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

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

מחיקת הפרויקט

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

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

    כניסה לדף Manage resources

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

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