1. Tổng quan
Trong phòng thí nghiệm này, bạn sẽ được hướng dẫn một quy trình công nghệ học máy hoàn chỉnh trên GCP. Trong môi trường Sổ tay trên Cloud AI Platform, bạn sẽ nhập dữ liệu từ một tập dữ liệu công khai của BigQuery, xây dựng và huấn luyện một mô hình XGboost, đồng thời triển khai mô hình đó cho Nền tảng AI để dự đoán.
Kiến thức bạn sẽ học được
Bạn sẽ tìm hiểu cách:
- Nhập và phân tích tập dữ liệu BigQuery trong Sổ tay nền tảng AI
- Tạo mô hình XGTăng
- Triển khai mô hình XGboost cho Nền tảng AI và nhận thông tin dự đoán
Tổng chi phí để chạy phòng thí nghiệm này trên Google Cloud là khoảng 1 đô la.
2. Thiết lập môi trường
Bạn cần một dự án Google Cloud Platform đã bật tính năng thanh toán để chạy lớp học lập trình này. Để tạo một dự án, hãy làm theo hướng dẫn tại đây.
Bước 1: Bật API mô hình Cloud AI Platform
Chuyển đến phần Mô hình nền tảng AI trên Cloud Console rồi nhấp vào Bật nếu bạn chưa bật.
Bước 2: Bật Compute Engine API
Chuyển đến Compute Engine rồi chọn Enable (Bật) nếu bạn chưa bật tính năng này. Bạn sẽ cần có gói này để tạo thực thể sổ tay.
Bước 3: Tạo một thực thể Sổ tay trên nền tảng AI
Chuyển đến mục Sổ tay trên nền tảng AI trên Cloud Console rồi nhấp vào Phiên bản mới. Sau đó, hãy chọn loại thực thể Python mới nhất:
Sử dụng các tuỳ chọn mặc định rồi nhấp vào Tạo. Sau khi tạo phiên bản, hãy chọn Open JupyterLab:
Bước 4: Cài đặt XGTăng
Sau khi phiên bản JupyterLab của bạn mở ra, bạn cần thêm gói XGTăng.
Để thực hiện việc này, hãy chọn Cửa sổ dòng lệnh từ trình chạy:
Sau đó, hãy chạy lệnh sau để cài đặt phiên bản XG Boost mới nhất được Nền tảng AI hỗ trợ:
pip3 install xgboost==0.82
Sau khi hoàn tất, hãy mở một phiên bản Sổ tay Python 3 từ trình chạy. Bạn đã sẵn sàng bắt đầu sử dụng sổ tay!
Bước 5: Nhập các gói Python
Trong ô đầu tiên của sổ tay, hãy thêm các lệnh nhập sau đây và chạy ô. Bạn có thể chạy trình đơn này bằng cách nhấn nút mũi tên phải trong trình đơn trên cùng hoặc nhấn 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. Khám phá tập dữ liệu BigQuery
BigQuery đã cung cấp công khai nhiều tập dữ liệu để bạn khám phá. Đối với phòng thí nghiệm này, chúng tôi sẽ sử dụng tập dữ liệu về sinh vật tự nhiên. Tệp này chứa dữ liệu về hầu hết mọi trường hợp sinh ở Hoa Kỳ trong khoảng thời gian 40 năm, bao gồm cả cân nặng khi sinh của trẻ và thông tin nhân khẩu học về cha mẹ của em bé. Chúng tôi sẽ sử dụng một số tính năng để dự đoán cân nặng khi sinh của em bé.
Bước 1: Tải dữ liệu BigQuery xuống sổ tay của chúng tôi
Chúng tôi sẽ sử dụng thư viện ứng dụng Python cho BigQuery để tải dữ liệu xuống Pandas DataFrame. Tập dữ liệu ban đầu là 21GB và chứa 123 triệu hàng. Để đơn giản hoá,chúng tôi sẽ chỉ sử dụng 10.000 hàng trong tập dữ liệu.
Tạo truy vấn và xem trước DataFrame kết quả bằng đoạn mã sau. Ở đây, chúng ta sẽ nhận được 4 đối tượng trong tập dữ liệu ban đầu, cùng với cân nặng của em bé (dữ liệu mà mô hình của chúng ta sẽ dự đoán). Tập dữ liệu đã tồn tại từ nhiều năm trước nhưng đối với mô hình này, chúng tôi sẽ chỉ sử dụng dữ liệu từ sau năm 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()
Để nhận bản tóm tắt các đối tượng số trong tập dữ liệu của chúng tôi, hãy chạy:
df.describe()
Điều này cho biết giá trị trung bình, độ lệch chuẩn, giá trị tối thiểu và các chỉ số khác cho các cột số của chúng tôi. Cuối cùng, hãy lấy một số dữ liệu trên cột boolean cho biết giới tính của em bé. Chúng tôi có thể làm điều này
nhờ Gấu trúc Phương thức value_counts
:
df['is_male'].value_counts()
Có vẻ như tập dữ liệu có tỷ lệ cân bằng gần như 50/50 theo giới tính.
4. Chuẩn bị dữ liệu để huấn luyện
Trong phần này, chúng ta sẽ chia dữ liệu thành các nhóm huấn luyện và kiểm thử để chuẩn bị cho việc huấn luyện mô hình.
Bước 1: Trích xuất cột nhãn
Thả các hàng đầu tiên có giá trị rỗng từ tập dữ liệu và xáo trộn dữ liệu:
df = df.dropna()
df = shuffle(df, random_state=2)
Tiếp theo, hãy trích xuất cột nhãn vào một biến riêng biệt và tạo một DataFrame chỉ bằng các tính năng của chúng ta:
labels = df['weight_pounds']
data = df.drop(columns=['weight_pounds'])
Bây giờ, nếu xem trước tập dữ liệu của chúng tôi bằng cách chạy data.head()
, bạn sẽ thấy 4 tính năng mà chúng tôi sẽ dùng để huấn luyện.
Bước 2: Chuyển đổi các tính năng phân loại thành số nguyên
Vì XGTăng yêu cầu tất cả dữ liệu đều ở dạng số, nên chúng ta sẽ cần thay đổi cách trình bày dữ liệu trong cột is_male
, hiện là chuỗi True / false. Chúng ta có thể thực hiện điều đó chỉ bằng cách thay đổi loại cột đó:
data['is_male'] = data['is_male'].astype(int)
Bước 3: Chia dữ liệu thành các nhóm thử nghiệm và thử nghiệm
Chúng ta sẽ sử dụng tiện ích train_test_split
của Scikit Learn mà chúng ta đã nhập ở phần đầu của sổ tay để chia dữ liệu thành các nhóm huấn luyện và kiểm thử:
x,y = data,labels
x_train,x_test,y_train,y_test = train_test_split(x,y)
Bây giờ, chúng ta đã sẵn sàng xây dựng và huấn luyện mô hình của mình!
5. Giới thiệu nhanh về XGTăng
XGBoost là một khung máy học sử dụng cây quyết định và tính năng tăng độ dốc để tạo các mô hình dự đoán. Công cụ này hoạt động bằng cách tập hợp nhiều cây quyết định với nhau dựa trên điểm số liên quan đến các nút lá trong một cây.
Sơ đồ dưới đây là hình ảnh trực quan được đơn giản hoá về mạng cây tổng hợp cho một mô hình đánh giá xem một người có thích một trò chơi máy tính cụ thể hay không (nội dung này lấy trong tài liệu về XGTăng):
Tại sao chúng tôi sử dụng XGboost cho mô hình này? Mặc dù mạng nơron truyền thống đã được chứng minh là hoạt động hiệu quả nhất đối với dữ liệu phi cấu trúc như hình ảnh và văn bản, nhưng cây quyết định thường hoạt động cực kỳ hiệu quả đối với dữ liệu có cấu trúc như tập dữ liệu về thế chấp mà chúng ta sẽ sử dụng trong lớp học lập trình này.
6. Tạo, huấn luyện và đánh giá mô hình XGTăng
Bước 1: Xác định và huấn luyện mô hình XGTăng
Việc tạo mô hình trong XGTăng rất đơn giản. Chúng ta sẽ sử dụng lớp XGBRegressor
để tạo mô hình và chỉ cần truyền tham số objective
phù hợp cho tác vụ cụ thể của mình. Ở đây, chúng ta sử dụng mô hình hồi quy vì chúng ta dự đoán một giá trị số (cân nặng của em bé). Nếu chúng ta phân giỏ dữ liệu để xác định xem một em bé nặng hơn hay dưới 6 pound, chúng ta sẽ sử dụng mô hình phân loại.
Trong trường hợp này, chúng ta sẽ sử dụng reg:squarederror
làm mục tiêu của mô hình.
Đoạn mã sau đây sẽ tạo một mô hình XGTăng:
model = xgb.XGBRegressor(
objective='reg:linear'
)
Bạn có thể huấn luyện mô hình này bằng một dòng mã, gọi phương thức fit()
rồi truyền vào đó dữ liệu và nhãn huấn luyện.
model.fit(x_train, y_train)
Bước 2: Đánh giá mô hình dựa trên dữ liệu thử nghiệm
Giờ đây, chúng ta có thể sử dụng mô hình đã huấn luyện để tạo thông tin dự đoán về dữ liệu kiểm thử bằng hàm predict()
:
y_pred = model.predict(x_test)
Hãy xem mô hình hoạt động như thế nào trên 20 giá trị đầu tiên từ tập hợp kiểm thử của chúng ta. Dưới đây, chúng tôi sẽ in cân nặng dự đoán của em bé cùng với cân nặng thực tế của em bé cho từng ví dụ kiểm tra:
for i in range(20):
print('Predicted weight: ', y_pred[i])
print('Actual weight: ', y_test.iloc[i])
print()
Bước 3: Lưu mô hình
Để triển khai mô hình, hãy chạy mã sau để lưu vào tệp cục bộ:
model.save_model('model.bst')
7. Triển khai mô hình cho Cloud AI Platform
Chúng ta đã có mô hình hoạt động trên máy tính, nhưng sẽ thật tuyệt nếu chúng ta có thể đưa ra dự đoán về mô hình đó từ bất cứ đâu (không chỉ sổ tay này!). Ở bước này, chúng tôi sẽ triển khai ứng dụng lên đám mây.
Bước 1: Tạo một bộ chứa trên Cloud Storage cho mô hình của chúng tôi
Trước tiên, hãy xác định một số biến môi trường mà chúng ta sẽ sử dụng trong suốt phần còn lại của lớp học lập trình này. Điền tên dự án Google Cloud của bạn vào các giá trị bên dưới, tên bộ chứa bộ nhớ trên đám mây mà bạn muốn tạo (phải là duy nhất trên toàn hệ thống) và tên phiên bản của phiên bản đầu tiên của mô hình:
# 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'
Bây giờ, chúng ta đã sẵn sàng tạo một bộ chứa lưu trữ để lưu trữ tệp mô hình XGTăng. Chúng tôi sẽ trỏ Cloud AI Platform vào tệp này khi triển khai.
Chạy lệnh gsutil
này từ trong sổ tay của bạn để tạo một bộ chứa:
!gsutil mb $MODEL_BUCKET
Bước 2: Sao chép tệp mô hình vào Cloud Storage
Tiếp theo, chúng ta sẽ sao chép tệp mô hình đã lưu XGboost vào Cloud Storage. Chạy lệnh PolicyBytes sau đây:
!gsutil cp ./model.bst $MODEL_BUCKET
Chuyển đến trình duyệt lưu trữ trong Cloud Console để xác nhận tệp đã được sao chép:
Bước 3: Tạo và triển khai mô hình
Lệnh ai-platform
gcloud sau đây sẽ tạo một mô hình mới trong dự án của bạn. Chúng tôi sẽ đặt tên sự kiện này là xgb_mortgage
:
!gcloud ai-platform models create $MODEL_NAME
Giờ là lúc triển khai mô hình. Chúng ta có thể thực hiện việc đó bằng lệnh gcloud này:
!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
Trong khi tính năng này đang chạy, hãy xem mục mô hình trên bảng điều khiển Nền tảng AI. Bạn sẽ thấy phiên bản mới của mình đang được triển khai ở đó:
Khi quá trình triển khai hoàn tất thành công, bạn sẽ thấy dấu kiểm màu xanh lục ở vị trí của vòng quay đang tải. Quá trình triển khai sẽ mất 2-3 phút.
Bước 4: Kiểm thử mô hình đã triển khai
Để đảm bảo mô hình bạn đã triển khai đang hoạt động, hãy thử nghiệm bằng gcloud để đưa ra thông tin dự đoán. Trước tiên, hãy lưu tệp JSON với hai ví dụ từ tập hợp kiểm thử của chúng ta:
%%writefile predictions.json
[0.0, 33.0, 1.0, 27.0]
[1.0, 26.0, 1.0, 40.0]
Kiểm thử mô hình của bạn bằng cách lưu kết quả của lệnh gcloud sau đây vào một biến và in kết quả đó:
prediction = !gcloud ai-platform predict --model=$MODEL_NAME --json-instances=predictions.json --version=$VERSION_NAME
print(prediction.s)
Bạn sẽ thấy thông tin dự đoán cho mô hình trong dữ liệu đầu ra. Cân nặng thực tế của em bé cho hai ví dụ này lần lượt là 1,9 và 8,1 pound.
8. Dọn dẹp
Nếu muốn tiếp tục sử dụng sổ tay này, bạn nên tắt sổ tay khi không sử dụng. Trên giao diện người dùng của Sổ tay trong Cloud Console, hãy chọn sổ tay đó rồi chọn Dừng:
Nếu muốn xoá tất cả tài nguyên bạn đã tạo trong phòng thí nghiệm này, bạn chỉ cần xoá phiên bản của sổ tay thay vì dừng phiên bản đó.
Bằng cách sử dụng trình đơn Điều hướng trong Cloud Console, hãy duyệt đến Bộ nhớ và xoá cả hai bộ chứa bạn đã tạo để lưu trữ các thành phần mô hình.