1. Genel Bakış
Bu laboratuvarda, GCP'deki tüm makine öğrenimi iş akışını adım adım öğreneceksiniz. Cloud AI Platform Notebooks ortamından BigQuery herkese açık veri kümesinden veri alacak, bir XGBoost modeli oluşturup eğitecek ve tahmin için modeli AI Platform'a dağıtacaksınız.
Öğrendikleriniz
Öğrenecekleriniz:
- AI Platform Notebooks'ta bir BigQuery veri kümesini alma ve analiz etme
- XGBoost modeli oluşturma
- XGBoost modelini AI Platform'a dağıtıp tahminler alın
Bu laboratuvarı Google Cloud'da çalıştırmanın toplam maliyeti yaklaşık 1 ABD dolarıdır.
2. Ortamınızı ayarlama
Bu codelab'i çalıştırmak için faturalandırmanın etkin olduğu bir Google Cloud Platform projesine ihtiyacınız var. Proje oluşturmak için buradaki talimatları uygulayın.
1. Adım: Cloud AI Platform Models API'yi etkinleştirin
Cloud Console'un AI Platform Modelleri bölümüne gidin ve etkinleştirilmemişse Etkinleştir'i tıklayın.
2. Adım: Compute Engine API'yi etkinleştirin
Compute Engine'e gidin ve zaten etkinleştirilmemişse Etkinleştir'i seçin. Not defteri örneğinizi oluşturmak için buna ihtiyacınız olacaktır.
3. Adım: AI Platform Notebooks örneği oluşturun
Cloud Console'un AI Platform Notebooks bölümüne gidin ve New Instance'ı (Yeni Örnek) tıklayın. Ardından, en son Python örnek türünü seçin:
Varsayılan seçenekleri kullanın ve ardından Oluştur'u tıklayın. Örnek oluşturulduktan sonra JupyterLab'i aç'ı seçin:
4. Adım: XGBoost'u yükleyin
JupyterLab örneğiniz açıldıktan sonra XGBoost paketini eklemeniz gerekir.
Bunu yapmak için başlatıcıdan Terminal'i seçin:
Ardından aşağıdaki komutu çalıştırarak AI Platform tarafından desteklenen en son XGBoost sürümünü yükleyin:
pip3 install xgboost==0.82
Bu işlem tamamlandıktan sonra başlatıcıdan bir Python 3 Notebook örneği açın. Not defterinizi kullanmaya başlamaya hazırsınız.
5. Adım: Python paketlerini içe aktarın
Not defterinizin ilk hücresine aşağıdaki içe aktarma işlemlerini ekleyin ve hücreyi çalıştırın. Üst menüde sağ ok tuşuna veya Command-Enter tuşuna basarak çalıştırabilirsiniz:
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. BigQuery veri kümesini keşfetme
BigQuery, birçok veri kümesini keşfiniz için herkese açık olarak kullanıma sunmuştur. Bu laboratuvarda doğum veri kümesini kullanacağız. Bu veriler, ABD'de 40 yıllık dönemdeki neredeyse her doğumla ilgili verileri içerir. Bu veriler arasında çocuğun doğum ağırlığı ve bebeğin ebeveynleriyle ilgili demografik bilgiler yer alır. Bir bebeğin doğum ağırlığını tahmin etmek için özelliklerin bir alt kümesini kullanacağız.
1. Adım: BigQuery verilerini not defterimize indirin
Verileri bir Pandas DataFrame'e indirmek için BigQuery'nin Python istemci kitaplığını kullanacağız. Orijinal veri kümesi 21 GB'tır ve 123 milyon satır içerir. İşleri basitleştirmek için veri kümesinden yalnızca 10.000 satırı kullanacağız.
Sorguyu oluşturun ve aşağıdaki kodu kullanarak elde edilen DataFrame'i önizleyin. Burada, bebek ağırlığıyla (modelimizin tahmin edeceği) orijinal veri kümesinden 4 özellik alıyoruz. Veri kümesi yıllara dayanır ancak bu model için yalnızca 2000 sonrasına ait verileri kullanırız:
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()
Veri kümemizdeki sayısal özelliklerin bir özetini almak için şu komutu çalıştırın:
df.describe()
Sayısal sütunlarımıza ait ortalama, standart sapma, minimum ve diğer metrikleri gösterir. Son olarak, boole sütunumuzla ilgili bebeğin cinsiyetini gösteren bazı veriler elde edelim. Bunu Pandas'ın value_counts
yöntem:
df['is_male'].value_counts()
Veri kümesinin cinsiyete göre neredeyse 50/50 dengeli olduğu görülüyor.
4. Verileri eğitim için hazırlama
Bu bölümde, modelimizi eğitmek için hazırlamak amacıyla verileri eğitim ve test kümelerine ayıracağız.
1. Adım: Etiket sütununu çıkarın
İlk olarak veri kümesinden boş değerlere sahip satırları bırakın ve verileri karıştırın:
df = df.dropna()
df = shuffle(df, random_state=2)
Daha sonra, etiket sütununu ayrı bir değişkene çıkarın ve yalnızca bizim özelliklerimizi kullanarak bir DataFrame oluşturun:
labels = df['weight_pounds']
data = df.drop(columns=['weight_pounds'])
Şimdi data.head()
çalıştırarak veri kümemizi önizlerseniz eğitimde kullanacağımız dört özelliği göreceksiniz.
2. Adım: Kategorik özellikleri tam sayılara dönüştürün
XGBoost tüm verilerin sayısal olmasını gerektirdiğinden, is_male
sütununda verileri temsil etme şeklimizi değiştirmemiz gerekir. Sütun şu anda Doğru / Yanlış dizeleridir. Bunu, söz konusu sütunun türünü değiştirerek yapabiliriz:
data['is_male'] = data['is_male'].astype(int)
3. adım: Verileri eğitim ve test kümelerine ayırın
Verilerimizi eğitim ve test kümelerine ayırmak için not defterinin başında içe aktardığımız Scikit Learn'in train_test_split
yardımcı programını kullanacağız:
x,y = data,labels
x_train,x_test,y_train,y_test = train_test_split(x,y)
Artık modelimizi oluşturup eğitmeye hazırız.
5. XGBoost ile ilgili hızlı bilgiler
XGBoost, tahmine dayalı modeller oluşturmak için karar ağaçlarını ve gradyan artırmayı kullanan bir makine öğrenimi çerçevesidir. Bir ağaçtaki farklı yaprak düğümleriyle ilişkili puana dayanarak birden fazla karar ağacını bir araya getirir.
Aşağıdaki şemada, kullanıcının belirli bir bilgisayar oyununu sevip sevmeyeceğini değerlendiren bir model için toplu ağaç ağının basitleştirilmiş bir görselleştirmesi sunulmuştur (XGBoost belgelerinden alınmıştır):
Bu model için neden XGBoost kullanıyoruz? Geleneksel nöral ağların en iyi performansı resimler ve metin gibi yapılandırılmamış verilerde gösterdiği görse de karar ağaçları, bu codelab'de kullanacağımız ipotek veri kümesi gibi yapılandırılmış verilerde genellikle çok iyi performans gösterir.
6. XGBoost modelini oluşturun, eğitin ve değerlendirin
1. Adım: XGBoost modelini tanımlayın ve eğitin
XGBoost'ta model oluşturmak basittir. Modeli oluşturmak için XGBRegressor
sınıfını kullanacağız ve yalnızca özel görevimiz için doğru objective
parametresini iletmemiz gerekecek. Sayısal bir değeri (bebek ağırlığı) tahmin ettiğimiz için regresyon modeli kullanıyoruz. Bir bebeğin ağırlığının 1, 5 kg'dan az olup olmadığını belirlemek için verilerimizi gruplar olsaydık sınıflandırma modeli kullanırdık.
Bu durumda, modelimizin hedefi olarak reg:squarederror
kullanacağız.
Aşağıdaki kod bir XGBoost modeli oluşturur:
model = xgb.XGBRegressor(
objective='reg:linear'
)
fit()
yöntemini çağırıp eğitim verilerini ve etiketlerini ileterek modeli tek bir kod satırıyla eğitebilirsiniz.
model.fit(x_train, y_train)
2. Adım: Modelinizi test verileri üzerinde değerlendirin
Eğitilen modelimizi artık predict()
işleviyle test verilerimizle ilgili tahminler oluşturmak için kullanabiliriz:
y_pred = model.predict(x_test)
Modelin test grubumuzdaki ilk 20 değerde nasıl performans gösterdiğini inceleyelim. Aşağıda, her test örneği için tahmini bebek ağırlığıyla birlikte gerçek bebek ağırlığını yazdıracağız:
for i in range(20):
print('Predicted weight: ', y_pred[i])
print('Actual weight: ', y_test.iloc[i])
print()
3. adım: Modelinizi kaydedin
Modeli dağıtmak için aşağıdaki kodu çalıştırarak modeli bir yerel dosyaya kaydedin:
model.save_model('model.bst')
7. Modeli Cloud AI Platform'a dağıtma
Modelimiz yerel olarak çalışıyor, ancak sadece bu not defterinde değil, her yerden tahmin yapabilseydik güzel olurdu. Bu adımda modeli buluta dağıtacağız.
1. Adım: Modelimiz için bir Cloud Storage paketi oluşturun
Öncelikle codelab'in geri kalanında kullanacağımız bazı ortam değişkenlerini tanımlayalım. Aşağıdaki değerlere Google Cloud projenizin adını, oluşturmak istediğiniz bulut depolama paketinin adını (genel olarak benzersiz olmalıdır) ve modelinizin ilk sürümünün sürüm adını girin:
# 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'
Şimdi XGBoost model dosyamızı depolamak için bir depolama paketi oluşturmaya hazırız. Dağıtım yaparken Cloud AI Platform'u bu dosyaya yönlendireceğiz.
Paket oluşturmak için not defterinizde şu gsutil
komutunu çalıştırın:
!gsutil mb $MODEL_BUCKET
2. Adım: Model dosyasını Cloud Storage'a kopyalayın
Şimdi, XGBoost kayıtlı model dosyamızı Cloud Storage'a kopyalayacağız. Aşağıdaki gsutil komutunu çalıştırın:
!gsutil cp ./model.bst $MODEL_BUCKET
Dosyanın kopyalandığını onaylamak için Cloud Console'daki depolama tarayıcısına gidin:
3. Adım: Modeli oluşturun ve dağıtın
Aşağıdaki ai-platform
gcloud komutu, projenizde yeni bir model oluşturur. Buna xgb_mortgage
adını vereceğiz:
!gcloud ai-platform models create $MODEL_NAME
Şimdi sıra modeli dağıtmaya geldi. Bu işlemi şu gcloud komutuyla yapabiliriz:
!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
Bu çalışırken AI Platform konsolunuzun modeller bölümünü kontrol edin. Yeni sürümünüzün oradan dağıtıldığını göreceksiniz:
Dağıtım başarıyla tamamlandığında yükleme döner simgesinin bulunduğu yerde yeşil bir onay işareti görürsünüz. Dağıtım işlemi 2-3 dakika sürer.
4. Adım: Dağıtılan modeli test edin
Dağıtılan modelinizin çalıştığından emin olmak için gcloud'u kullanarak tahminde bulunun. Öncelikle test grubumuzdan iki örnek içeren bir JSON dosyası kaydedin:
%%writefile predictions.json
[0.0, 33.0, 1.0, 27.0]
[1.0, 26.0, 1.0, 40.0]
Aşağıdaki gcloud komutunun çıkışını bir değişkene kaydedip yazdırarak modelinizi test edin:
prediction = !gcloud ai-platform predict --model=$MODEL_NAME --json-instances=predictions.json --version=$VERSION_NAME
print(prediction.s)
Modelinizin tahminini çıkışta göreceksiniz. Bu iki örnek için gerçek bebek ağırlığı sırasıyla 1,9 ve 8,1 kg'dır.
8. Temizleme
Bu not defterini kullanmaya devam etmek istiyorsanız, kullanılmadığında devre dışı bırakmanız önerilir. Cloud Console'daki Not Defteri kullanıcı arayüzünden not defterini ve ardından Durdur'u seçin:
Bu laboratuvarda oluşturduğunuz tüm kaynakları silmek istiyorsanız not defteri örneğini durdurmak yerine silin.
Cloud Console'daki gezinme menüsünü kullanarak Storage'a gidin ve model öğelerinizi depolamak için oluşturduğunuz her iki paketi de silin.