1. Genel Bakış
Bu laboratuvarda, GCP'deki eksiksiz bir makine öğrenimi iş akışını inceleyeceksiniz. Cloud AI Platform Notebooks ortamında, BigQuery ortak veri kümesinden veri alacak, XGBoost modeli oluşturup eğitecek ve modeli tahmin için AI Platform'a dağıtacaksınız.
Öğrenecekleriniz
Öğrenecekleriniz:
- AI Platform Notebooks'ta BigQuery veri kümesi alma ve analiz etme
- XGBoost modeli oluşturma
- XGBoost modelini AI Platform'a dağıtma ve tahminler alma
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 vardır. Proje oluşturmak için buradaki talimatları uygulayın.
1. adım: Cloud AI Platform Models API'yi etkinleştirin
Cloud Console'unuzun AI Platform Modelleri bölümüne gidin ve henüz etkinleştirilmemişse Etkinleştir'i tıklayın.

2. adım: Compute Engine API'yi etkinleştirin
Compute Engine'e gidin ve henüz etkinleştirilmemişse Etkinleştir'i seçin. Not defteri örneğinizi oluşturmak için bu bilgiye ihtiyacınız vardır.
3. adım: AI Platform Notebooks örneği oluşturun
Cloud Console'unuzun AI Platform Notebooks bölümüne gidin ve New Instance'ı (Yeni Örnek) tıklayın. Ardından en yeni Python örnek türünü seçin:

Varsayılan seçenekleri kullanıp Oluştur'u tıklayın. Örnek oluşturulduktan sonra Open JupyterLab'i (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, AI Platform tarafından desteklenen XGBoost'un en son sürümünü yüklemek için aşağıdakileri çalıştırın:
pip3 install xgboost==0.82
Bu işlem tamamlandıktan sonra başlatıcıdan bir Python 3 not defteri örneği açın. Not defterinizi kullanmaya başlayabilirsiniz.
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. Bu işlemi, üst menüdeki sağ ok düğmesine veya command-enter tuşlarına 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, keşfetmeniz için birçok veri kümesini herkese açık hâle getirdi. Bu laboratuvarda natality veri kümesini kullanacağız. Bu veri kümesi, ABD'de 40 yıllık bir süre zarfında gerçekleşen neredeyse tüm doğumlarla ilgili verileri (çocuğun doğum ağırlığı ve bebeğin ebeveynleriyle ilgili demografik bilgiler dahil) içerir. 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 indirme
Verileri 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 basit tutmak için veri kümesinden yalnızca 10.000 satır kullanacağız.
Aşağıdaki kodu kullanarak sorguyu oluşturun ve sonuçta elde edilen DataFrame'i önizleyin. Burada, modelimizin tahmin edeceği bebek ağırlığının yanı sıra orijinal veri kümesinden 4 özellik alıyoruz. Veri kümesi çok eski yıllara dayanıyor ancak bu model için yalnızca 2000'den sonraki verileri kullanacağı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 özetini almak için şu kodu çalıştırın:
df.describe()
Bu, sayısal sütunlarımız için ortalamayı, standart sapmayı, minimum değeri ve diğer metrikleri gösterir. Son olarak, bebeğin cinsiyetini belirten boolean sütunumuzla ilgili bazı veriler alalım. Bunu Pandas'ın value_counts yöntemiyle yapabiliriz:
df['is_male'].value_counts()
Veri kümesi, cinsiyet açısından neredeyse eşit olarak dağılmış durumda.
4. Eğitim için verileri hazırlama
Bu bölümde, verileri modelimizi eğitmek için hazırlamak üzere eğitim ve test kümelerine ayıracağız.
1. adım: Etiket sütununu ayıklayın
Önce veri kümesinden boş değer içeren satırları kaldırın ve verileri karıştırın:
df = df.dropna()
df = shuffle(df, random_state=2)
Ardından, etiket sütununu ayrı bir değişkene çıkarın ve yalnızca özelliklerimizi içeren bir DataFrame oluşturun:
labels = df['weight_pounds']
data = df.drop(columns=['weight_pounds'])
Şimdi data.head() komutunu çalıştırarak veri kümemizi önizlerseniz eğitim için kullanacağımız dört özelliği görmeniz gerekir.
2. adım: Kategorik özellikleri tam sayılara dönüştürün
XGBoost, tüm verilerin sayısal olmasını gerektirdiğinden, şu anda Doğru / Yanlış dizeleri olan is_male sütunundaki verileri temsil etme şeklimizi değiştirmemiz gerekiyor. Bunu, ilgili sütunun türünü değiştirerek kolayca 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'ün 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 hakkında kısa bilgiler
XGBoost, tahmin modelleri oluşturmak için karar ağaçları ve gradyan artırma kullanan bir makine öğrenimi çerçevesidir. Bir ağaçtaki farklı yaprak düğümleriyle ilişkili puana göre birden fazla karar ağacını bir araya getirerek çalışır.
Aşağıdaki şema, bir kişinin belirli bir bilgisayar oyununu beğenip beğenmeyeceğini değerlendiren bir model için topluluk ağacı ağının basitleştirilmiş bir görselleştirmesidir (XGBoost belgelerinden alınmıştır):

Bu modelde neden XGBoost kullanıyoruz? Geleneksel sinir ağlarının, resim ve metin gibi yapılandırılmamış verilerde en iyi performansı gösterdiği kanıtlanmış olsa da karar ağaçları, bu kod laboratuvarında kullanacağımız ipotek veri kümesi gibi yapılandırılmış verilerde genellikle son derece iyi performans gösterir.
6. XGBoost modeli oluşturma, eğitme ve değerlendirme
1. adım: XGBoost modelini tanımlayın ve eğitin
XGBoost'ta model oluşturmak kolaydır. Modeli oluşturmak için XGBRegressor sınıfını kullanacağız ve görevimiz için doğru objective parametresini iletmemiz yeterli olacak. Burada sayısal bir değeri (bebeğin ağırlığı) tahmin ettiğimiz için regresyon modeli kullanıyoruz. Bunun yerine, bir bebeğin ağırlığının 2,7 kg'dan fazla veya az olup olmadığını belirlemek için verilerimizi gruplandırıyorsak sınıflandırma modeli kullanırız.
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
Artık eğitilmiş modelimizi kullanarak predict() işleviyle test verilerimiz üzerinde tahminler oluşturabiliriz:
y_pred = model.predict(x_test)
Modelin, test setimizdeki ilk 20 değerde nasıl performans gösterdiğine bakalım. Aşağıda, her test örneği için tahmini bebek ağırlığı ile 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 yerel bir dosyaya kaydedin:
model.save_model('model.bst')
7. Modeli Cloud AI Platform'a dağıtma
Modelimiz yerel olarak çalışıyor ancak bu not defteriyle sınırlı kalmadan her yerden tahminler yapabilmek güzel olurdu. Bu adımda, modeli buluta dağıtacağız.
1. adım: Modelimiz için 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ğerleri Google Cloud projenizin adı, oluşturmak istediğiniz Cloud Storage paketinin adı (global olarak benzersiz olmalıdır) ve modelinizin ilk sürümünün sürüm adıyla doldurun:
# 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'
Artık XGBoost model dosyamızı depolayacak bir depolama paketi oluşturmaya hazırız. Dağıtım sırasında Cloud AI Platform'u bu dosyaya yönlendireceğiz.
Paket oluşturmak için not defterinizden şu gsutil komutunu çalıştırın:
!gsutil mb $MODEL_BUCKET
2. adım: Model dosyasını Cloud Storage'a kopyalayın
Ardından, XGBoost kaydedilmiş 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ı doğrulamak için Cloud Console'unuzdaki 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ı verelim:
!gcloud ai-platform models create $MODEL_NAME
Şimdi modeli dağıtma zamanı. Bu işlemi aşağıdaki 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 işlem çalışırken AI Platform Console'un modeller bölümünü kontrol edin. Yeni sürümünüzün dağıtıldığını görürsünüz:

Dağıtım başarıyla tamamlandığında yükleme döner simgesinin yerinde yeşil bir onay işareti görürsünüz. Dağıtım 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 tahmin oluşturarak modeli test edin. Öncelikle test setimizden 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)
Çıkışta modelinizin tahminini görmeniz gerekir. Bu iki örnekte bebeklerin gerçek ağırlığı sırasıyla 1,9 ve 8,1 pound'dur.
8. Temizleme
Bu not defterini kullanmaya devam etmek istiyorsanız kullanmadığınız zamanlarda kapatmanız önerilir. Cloud Console'unuzdaki Notebooks kullanıcı arayüzünde 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 silmeniz yeterlidir.
Cloud Console'daki gezinme menüsünü kullanarak Storage'a gidin ve model varlıklarınızı depolamak için oluşturduğunuz her iki paketi de silin.