ホームページ >バックエンド開発 >Python チュートリアル >BigQuery と XGBoost の統合: バイナリ分類のための Jupyter Notebook チュートリアル

BigQuery と XGBoost の統合: バイナリ分類のための Jupyter Notebook チュートリアル

WBOY
WBOYオリジナル
2024-08-12 18:51:34268ブラウズ

BigQuery and XGBoost Integration: A Jupyter Notebook Tutorial for Binary Classification

導入

表形式データのバイナリ分類モデルを選択する際に、高速な非深層学習モデルである勾配ブースティング デシジョン ツリー (GBDT) をすぐに試してみることにしました。この記事では、データ ソースとして BigQuery を使用し、モデリングに XGBoost アルゴリズムを使用して Jupyter Notebook スクリプトを作成するプロセスについて説明します。

完全なスクリプト

説明なしでスクリプトに直接入りたい人は、ここを参照してください。プロジェクトに合わせて project_name、dataset_name、table_name を調整してください。

import xgboost as xgb
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.metrics import precision_score, recall_score, f1_score, log_loss
from google.cloud import bigquery

# Function to load data from BigQuery
def load_data_from_bigquery(query):
    client = bigquery.Client()
    query_job = client.query(query)
    df = query_job.to_dataframe()
    return df

def compute_metrics(labels, predictions, prediction_probs):
    precision = precision_score(labels, predictions, average='macro')
    recall = recall_score(labels, predictions, average='macro')
    f1 = f1_score(labels, predictions, average='macro')
    loss = log_loss(labels, prediction_probs)
    return {
        'precision': precision,
        'recall': recall,
        'f1': f1,
        'loss': loss
    }

# Query in BigQuery
query = """
SELECT *
FROM `<project_name>.<dataset_name>.<table_name>`
"""

# Loading data
df = load_data_from_bigquery(query)

# Target data
y = df["reaction"]

# Input data
X = df.drop(columns=["reaction"], axis=1)

# Splitting data into training and validation sets
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=1)

# Training the XGBoost model
model = xgb.XGBClassifier(eval_metric='logloss')

# Setting the parameter grid
param_grid = {
    'max_depth': [3, 4, 5],
    'learning_rate': [0.01, 0.1, 0.2],
    'n_estimators': [100, 200, 300],
    'subsample': [0.8, 0.9, 1.0]
}

# Initializing GridSearchCV
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=3, scoring='accuracy', verbose=1, n_jobs=-1)

# Executing the grid search
grid_search.fit(X_train, y_train)

# Displaying the best parameters
print("Best parameters:", grid_search.best_params_)

# Model with the best parameters
best_model = grid_search.best_estimator_

# Predictions on validation data
val_predictions = best_model.predict(X_val)
val_prediction_probs = best_model.predict_proba(X_val)

# Predictions on training data
train_predictions = best_model.predict(X_train)
train_prediction_probs = best_model.predict_proba(X_train)

# Evaluating the model (validation data)
val_metrics = compute_metrics(y_val, val_predictions, val_prediction_probs)
print("Optimized Validation Metrics:", val_metrics)

# Evaluating the model (training data)
train_metrics = compute_metrics(y_train, train_predictions, train_prediction_probs)
print("Optimized Training Metrics:", train_metrics)

説明

BigQuery からのデータの読み込み

以前、データは CSV ファイルとして Cloud Storage に保存されていましたが、データの読み込みが遅いため学習プロセスの効率が低下しており、より高速なデータ処理のために BigQuery への移行を促しました。

BigQuery クライアントのセットアップ

from google.cloud import bigquery
client = bigquery.Client()

このコードは、環境変数または Google Cloud SDK を通じて設定できる Google Cloud 認証情報を使用して BigQuery クライアントを初期化します。

データのクエリとロード

def load_data_from_bigquery(query):
    query_job = client.query(query)
    df = query_job.to_dataframe()
    return df

この関数は SQL クエリを実行し、結果を Pandas の DataFrame として返し、効率的なデータ処理を可能にします。

XGBoost を使用したモデルのトレーニング

XGBoost は、勾配ブースティングを利用した高性能機械学習アルゴリズムで、分類問題や回帰問題に広く使用されています。

https://arxiv.org/pdf/1603.02754

モデルの初期化

import xgboost as xgb
model = xgb.XGBClassifier(eval_metric='logloss')

ここでは、ログ損失を評価メトリックとして使用して、XGBClassifier クラスがインスタンス化されています。

データの分割

from sklearn.model_selection import train_test_split
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=1)

この関数は、データをトレーニング セットと検証セットに分割します。これは、モデルのパフォーマンスをテストし、過剰適合を回避するために重要です。

パラメータの最適化

from sklearn.model_selection import GridSearchCV
param_grid = {
    'max_depth': [3, 4, 5],
    'learning_rate': [0.01, 0.1, 0.2],
    'n_estimators': [100, 200, 300],
    'subsample': [0.8, 0.9, 1.0]
}
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=3, scoring='accuracy', verbose=1, n_jobs=-1)
grid_search.fit(X_train, y_train)

GridSearchCV は相互検証を実行して、モデルに最適なパラメーターの組み合わせを見つけます。

モデルの評価

モデルのパフォーマンスは、検証データセットの精度、再現率、F1 スコア、対数損失を使用して評価されます。

def compute_metrics(labels, predictions, prediction_probs):
    from sklearn.metrics import precision_score, recall_score, f1_score, log_loss
    return {
        'precision': precision_score(labels, predictions, average='macro'),
        'recall': recall_score(labels, predictions, average='macro'),
        'f1': f1_score(labels, predictions, average='macro'),
        'loss': log_loss(labels, prediction_probs)
    }
val_metrics = compute_metrics(y_val, val_predictions, val_prediction_probs)
print("Optimized Validation Metrics:", val_metrics)

出力結果

ノートブックを実行すると、最適なパラメーターとモデル評価メトリクスを示す次の出力が得られます。

Best parameters: {'learning_rate': 0.2, 'max_depth': 5, 'n_estimators': 300, 'subsample': 0.9}
Optimized Validation Metrics: {'precision': 0.8919952583956949, 'recall': 0.753797304483842, 'f1': 0.8078981867164722, 'loss': 0.014006406471894417}
Optimized Training Metrics: {'precision': 0.8969556573175115, 'recall': 0.7681976753444204, 'f1': 0.8199353049298048, 'loss': 0.012475375680566196}

追加情報

Google Cloud Storage をデータソースとして使用する

場合によっては、BigQuery ではなく Google Cloud Storage からデータを読み込む方が適切な場合があります。次の関数は、Cloud Storage から CSV ファイルを読み取り、Pandas の DataFrame として返します。これは、load_data_from_bigquery 関数と同じ意味で使用できます。

from google.cloud import storage

def load_data_from_gcs(bucket_name, file_path):
    client = storage.Client()
    bucket = client.get_bucket(bucket_name)
    blob = bucket.blob(file_path)
    data = blob.download_as_text()
    df = pd.read_csv(io.StringIO(data), encoding='utf-8')
    return df

使用例:

bucket_name = '<bucket-name>'
file_path = '<file-path>'

df = load_data_from_gcs(bucket_name, file_path)

LightGBM を使用したモデルのトレーニング

XGBoost の代わりに LightGBM を使用したい場合は、同じセットアップで XGBClassifier を LGBMClassifier に置き換えるだけです。

import lightgbm as lgb
model = lgb.LGBMClassifier()

結論

今後の記事では、トレーニングでの BigQuery ML (BQML) の使用について説明します。

以上がBigQuery と XGBoost の統合: バイナリ分類のための Jupyter Notebook チュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。