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

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

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

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

מטרות

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

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

עלויות

במדריך הזה נעשה שימוש ברכיבים של Cloud de Confiance by S3NSשחלים עליהם חיובים, כולל:

  • BigQuery
  • BigQuery ML

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

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

  1. In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance 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 Cloud de Confiance project.

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

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

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

    כדי להפעיל ממשקי API, נדרשת ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (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. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-BigQuery

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

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

    אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.

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

  4. בדף Datasets (מערכי נתונים), לוחצים על Create dataset (יצירת מערך נתונים).

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

    • בשדה Dataset ID (מזהה קבוצת נתונים), מזינים bqml_tutorial.

    • בקטע Data location, בוחרים באפשרות US.

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

  6. לוחצים על יצירת מערך נתונים.

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. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-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. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-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. במסוף Cloud de Confiance , עוברים לדף BigQuery.

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

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

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

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

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

    כניסה ל-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. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-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. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-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. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-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 במסוףCloud de Confiance .

    לדף BigQuery

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

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

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

מחיקת פרויקט

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

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

    כניסה לדף Manage resources

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

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