1. Ringkasan
Di lab ini, Anda akan mempelajari alur kerja ML lengkap di GCP. Dari lingkungan Cloud AI Platform Notebooks, Anda akan menyerap data dari set data publik BigQuery, membuat dan melatih model XGBoost, serta men-deploy model tersebut ke AI Platform untuk prediksi.
Yang Anda pelajari
Anda akan mempelajari cara:
- Menyerap dan menganalisis set data BigQuery di AI Platform Notebooks
- Membangun model XGBoost
- Men-deploy model XGBoost ke AI Platform dan mendapatkan prediksi
Total biaya untuk menjalankan lab ini di Google Cloud adalah sekitar $1.
2. Menyiapkan lingkungan Anda
Anda memerlukan project Google Cloud Platform dengan penagihan yang diaktifkan untuk menjalankan codelab ini. Untuk membuat project, ikuti petunjuk di sini.
Langkah 1: Aktifkan Cloud AI Platform Models API
Buka bagian AI Platform Models di Cloud Console Anda, lalu klik Enable jika belum diaktifkan.
Langkah 2: Aktifkan Compute Engine API
Buka Compute Engine dan pilih Aktifkan jika belum diaktifkan. Anda akan memerlukan ini untuk membuat instance notebook.
Langkah 3: Membuat instance AI Platform Notebooks
Buka bagian AI Platform Notebooks di Konsol Cloud Anda, lalu klik New Instance. Kemudian pilih jenis instance Python terbaru:
Gunakan opsi default, lalu klik Create. Setelah instance dibuat, pilih Open JupyterLab:
Langkah 4: Instal XGBoost
Setelah instance JupyterLab terbuka, Anda harus menambahkan paket XGBoost.
Untuk melakukannya, pilih Terminal dari peluncur:
Lalu, jalankan perintah berikut untuk menginstal XGBoost versi terbaru yang didukung oleh AI Platform:
pip3 install xgboost==0.82
Setelah selesai, buka instance Notebook Python 3 dari peluncur. Anda sudah siap untuk mulai membuat notebook.
Langkah 5: Impor paket Python
Di sel pertama notebook Anda, tambahkan impor berikut dan jalankan sel. Anda dapat menjalankannya dengan menekan tombol panah kanan di menu atas atau menekan command-enter:
import pandas as pd
import xgboost as xgb
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.utils import shuffle
from google.cloud import bigquery
3. Menjelajahi set data BigQuery
BigQuery telah menyediakan banyak set data secara publik untuk eksplorasi Anda. Untuk lab ini, kita akan menggunakan set data kelahiran. Ini berisi data tentang hampir setiap kelahiran di AS selama jangka waktu 40 tahun, termasuk berat lahir anak, dan informasi demografis tentang orang tua bayi tersebut. Kami akan menggunakan sebagian fitur untuk memprediksi berat lahir bayi.
Langkah 1: Download data BigQuery ke notebook kami
Kita akan menggunakan library klien Python untuk BigQuery guna mendownload data ke dalam DataFrame Pandas. {i>Dataset<i} asli adalah 21 GB dan berisi 123 juta baris. Untuk menyederhanakannya,kita hanya akan menggunakan 10.000 baris dari {i>dataset<i}.
Buat kueri dan lihat pratinjau DataFrame yang dihasilkan dengan kode berikut. Di sini kita mendapatkan 4 fitur dari {i>dataset<i} asli, beserta berat bayi (hal yang akan diprediksi oleh model kita). Set data sudah ada beberapa tahun ke belakang tetapi untuk model ini kita hanya akan menggunakan data setelah tahun 2000:
query="""
SELECT
weight_pounds,
is_male,
mother_age,
plurality,
gestation_weeks
FROM
publicdata.samples.natality
WHERE year > 2000
LIMIT 10000
"""
df = bigquery.Client().query(query).to_dataframe()
df.head()
Untuk mendapatkan ringkasan fitur numerik dalam {i>dataset<i} kita, jalankan:
df.describe()
Ini menunjukkan rata-rata, simpangan baku, minimum, dan metrik lainnya untuk kolom numerik kita. Terakhir, mari kita dapatkan beberapa data di kolom boolean yang menunjukkan jenis kelamin bayi. Kita bisa melakukannya dengan Pandas Metode value_counts
:
df['is_male'].value_counts()
Sepertinya {i>dataset<i} itu hampir seimbang 50/50 berdasarkan gender.
4. Menyiapkan data untuk pelatihan
Di bagian ini, kita akan membagi data menjadi set pelatihan dan pengujian guna mempersiapkannya untuk melatih model kita.
Langkah 1: Ekstrak kolom label
Pertama, letakkan baris dengan nilai {i>null <i}dari {i>dataset<i} dan acak data tersebut:
df = df.dropna()
df = shuffle(df, random_state=2)
Selanjutnya, ekstrak kolom label menjadi variabel terpisah dan buat DataFrame hanya dengan fitur kita:
labels = df['weight_pounds']
data = df.drop(columns=['weight_pounds'])
Sekarang, jika Anda melihat pratinjau set data dengan menjalankan data.head()
, Anda akan melihat empat fitur yang akan kita gunakan untuk pelatihan.
Langkah 2: Konversi fitur kategorikal menjadi bilangan bulat
Karena XGBoost mengharuskan semua data berupa numerik, kita perlu mengubah cara merepresentasikan data di kolom is_male
, yang saat ini merupakan string Benar / Salah. Kita dapat melakukannya hanya dengan mengubah jenis kolom tersebut:
data['is_male'] = data['is_male'].astype(int)
Langkah 3: Bagi data ke dalam set pelatihan dan pengujian
Kita akan menggunakan utilitas train_test_split
Scikit Learn yang telah diimpor di awal notebook untuk membagi data menjadi set pelatihan dan pengujian:
x,y = data,labels
x_train,x_test,y_train,y_test = train_test_split(x,y)
Sekarang kita siap untuk membangun dan melatih model!
5. Penjelasan singkat XGBoost
XGBoost adalah framework machine learning yang menggunakan hierarki keputusan dan peningkatan gradien untuk membangun model prediktif. Cara kerjanya adalah dengan menggabungkan beberapa pohon keputusan berdasarkan skor yang terkait dengan node daun yang berbeda dalam sebuah pohon.
Diagram di bawah ini adalah visualisasi sederhana dari jaringan pohon ensemble untuk model yang mengevaluasi apakah seseorang akan menyukai game komputer tertentu atau tidak (ini dari dokumen XGBoost):
Mengapa kita menggunakan XGBoost untuk model ini? Meskipun jaringan neural tradisional telah terbukti berperforma terbaik pada data tidak terstruktur seperti gambar dan teks, pohon keputusan sering kali berperforma sangat baik pada data terstruktur seperti set data hipotek yang akan kita gunakan dalam codelab ini.
6. Membangun, melatih, dan mengevaluasi model XGBoost
Langkah 1: Tentukan dan latih model XGBoost
Membuat model di XGBoost itu mudah. Kita akan menggunakan class XGBRegressor
untuk membuat model, dan hanya perlu meneruskan parameter objective
yang tepat untuk tugas spesifik kita. Di sini kita menggunakan model regresi karena kita memprediksi nilai numerik (berat bayi). Jika kita mengelompokkan data kita untuk menentukan apakah berat bayi lebih atau kurang dari 6 pon, kita akan menggunakan model klasifikasi.
Dalam hal ini, kita akan menggunakan reg:squarederror
sebagai tujuan model.
Kode berikut akan membuat model XGBoost:
model = xgb.XGBRegressor(
objective='reg:linear'
)
Anda dapat melatih model dengan satu baris kode, memanggil metode fit()
serta meneruskan data dan label pelatihan.
model.fit(x_train, y_train)
Langkah 2: Evaluasi model Anda pada data pengujian
Sekarang kita dapat menggunakan model yang telah dilatih untuk menghasilkan prediksi pada data uji dengan fungsi predict()
:
y_pred = model.predict(x_test)
Mari kita lihat performa model pada 20 nilai pertama dari set pengujian. Di bawah ini kami akan mencetak prediksi berat bayi bersama dengan berat bayi sebenarnya untuk setiap contoh tes:
for i in range(20):
print('Predicted weight: ', y_pred[i])
print('Actual weight: ', y_test.iloc[i])
print()
Langkah 3: Simpan model Anda
Untuk men-deploy model, jalankan kode berikut untuk menyimpannya ke file lokal:
model.save_model('model.bst')
7. Men-deploy model ke Cloud AI Platform
Model kita sudah berfungsi secara lokal, tetapi akan lebih baik jika kita dapat membuat prediksi dari mana saja (bukan hanya notebook ini). Pada langkah ini, kita akan men-deploy-nya ke cloud.
Langkah 1: Buat bucket Cloud Storage untuk model kita
Pertama-tama, mari kita tentukan beberapa variabel lingkungan yang akan kita gunakan pada seluruh codelab ini. Isi nilai di bawah ini dengan nama project Google Cloud Anda, nama bucket Cloud Storage yang ingin Anda buat (harus unik secara global), dan nama versi untuk versi pertama model Anda:
# Update these to your own GCP project, model, and version names
GCP_PROJECT = 'your-gcp-project'
MODEL_BUCKET = 'gs://storage_bucket_name'
VERSION_NAME = 'v1'
MODEL_NAME = 'baby_weight'
Sekarang kita siap membuat bucket penyimpanan untuk menyimpan file model XGBoost. Kita akan mengarahkan Cloud AI Platform ke file ini saat kita melakukan deployment.
Jalankan perintah gsutil
ini dari dalam notebook Anda untuk membuat bucket:
!gsutil mb $MODEL_BUCKET
Langkah 2: Salin file model ke Cloud Storage
Selanjutnya, kita akan menyalin file model tersimpan XGBoost ke Cloud Storage. Jalankan perintah gsutil berikut:
!gsutil cp ./model.bst $MODEL_BUCKET
Buka browser penyimpanan di Konsol Cloud Anda untuk mengonfirmasi bahwa file telah disalin:
Langkah 3: Membuat dan men-deploy model
Perintah gcloud ai-platform
berikut akan membuat model baru dalam project Anda. Kita akan menyebutnya xgb_mortgage
:
!gcloud ai-platform models create $MODEL_NAME
Sekarang saatnya men-deploy model. Kita dapat melakukannya dengan perintah gcloud ini:
!gcloud ai-platform versions create $VERSION_NAME \
--model=$MODEL_NAME \
--framework='XGBOOST' \
--runtime-version=1.15 \
--origin=$MODEL_BUCKET \
--python-version=3.7 \
--project=$GCP_PROJECT
Selama proses ini berjalan, periksa bagian model di konsol AI Platform Anda. Anda akan melihat versi baru di-deploy di sana:
Setelah deployment berhasil diselesaikan, Anda akan melihat tanda centang hijau di tempat indikator lingkaran berputar pemuatan. Proses deploy akan memerlukan waktu 2-3 menit.
Langkah 4: Uji model yang di-deploy
Untuk memastikan model yang di-deploy berfungsi, uji menggunakan gcloud untuk membuat prediksi. Pertama, simpan file JSON dengan dua contoh dari set pengujian kami:
%%writefile predictions.json
[0.0, 33.0, 1.0, 27.0]
[1.0, 26.0, 1.0, 40.0]
Uji model Anda dengan menyimpan output perintah gcloud berikut ke variabel dan mencetaknya:
prediction = !gcloud ai-platform predict --model=$MODEL_NAME --json-instances=predictions.json --version=$VERSION_NAME
print(prediction.s)
Anda akan melihat prediksi model di output. Berat bayi sebenarnya untuk kedua contoh ini masing-masing adalah 1,9 dan 8,1 pound.
8. Pembersihan
Jika ingin terus menggunakan notebook ini, sebaiknya nonaktifkan saat tidak digunakan. Dari UI Notebooks di Konsol Cloud, pilih notebook, lalu pilih Stop:
Jika ingin menghapus semua resource yang telah dibuat di lab ini, cukup hapus instance notebook, bukan menghentikannya.
Dengan menggunakan menu Navigasi di Konsol Cloud, jelajahi Penyimpanan dan hapus kedua bucket yang Anda buat untuk menyimpan aset model.