"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > BigQuery और XGBoost एकीकरण: बाइनरी वर्गीकरण के लिए एक ज्यूपिटर नोटबुक ट्यूटोरियल

BigQuery और XGBoost एकीकरण: बाइनरी वर्गीकरण के लिए एक ज्यूपिटर नोटबुक ट्यूटोरियल

2024-11-01 को प्रकाशित
ब्राउज़ करें:987

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

परिचय

सारणीबद्ध डेटा के लिए एक बाइनरी वर्गीकरण मॉडल का चयन करते समय, मैंने एक तेज़, गैर-गहन शिक्षण मॉडल को आज़माने का निर्णय लिया: ग्रेडिएंट बूस्टिंग डिसीजन ट्रीज़ (जीबीडीटी)। यह आलेख डेटा स्रोत के रूप में BigQuery और मॉडलिंग के लिए XGBoost एल्गोरिदम का उपयोग करके ज्यूपिटर नोटबुक स्क्रिप्ट बनाने की प्रक्रिया का वर्णन करता है।

पूरी स्क्रिप्ट

उन लोगों के लिए जो स्पष्टीकरण के बिना सीधे स्क्रिप्ट में कूदना पसंद करते हैं, यह यहां है। कृपया अपने प्रोजेक्ट में फिट होने के लिए प्रोजेक्ट_नाम, डेटासेट_नाम और टेबल_नाम को समायोजित करें।

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 `..`
"""

# 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 फ़ाइलों के रूप में संग्रहीत किया जाता था, लेकिन धीमी डेटा लोडिंग हमारी सीखने की प्रक्रियाओं की दक्षता को कम कर रही थी, जिससे तेज़ डेटा प्रबंधन के लिए BigQuery में बदलाव आया।

BigQuery क्लाइंट सेट करना

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

यह कोड Google क्लाउड क्रेडेंशियल्स का उपयोग करके एक BigQuery क्लाइंट को प्रारंभ करता है, जिसे पर्यावरण चर या Google क्लाउड SDK के माध्यम से सेट किया जा सकता है।

डेटा को क्वेरी करना और लोड करना

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

यह फ़ंक्शन एक SQL क्वेरी निष्पादित करता है और परिणामों को पांडा में डेटाफ़्रेम के रूप में लौटाता है, जिससे कुशल डेटा प्रोसेसिंग की अनुमति मिलती है।

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)

ग्रिडसर्चसीवी मॉडल के लिए मापदंडों का सर्वोत्तम संयोजन खोजने के लिए क्रॉस-सत्यापन करता है।

मॉडल मूल्यांकन

मॉडल के प्रदर्शन का मूल्यांकन सत्यापन डेटासेट पर सटीकता, रिकॉल, एफ1 स्कोर और लॉग लॉस का उपयोग करके किया जाता है।

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 क्लाउड स्टोरेज का उपयोग करना

कुछ मामलों में, BigQuery के बजाय Google क्लाउड स्टोरेज से डेटा लोड करना अधिक उपयुक्त हो सकता है। निम्नलिखित फ़ंक्शन क्लाउड स्टोरेज से एक CSV फ़ाइल को पढ़ता है और इसे पांडा में डेटाफ़्रेम के रूप में लौटाता है, और इसे लोड_डेटा_फ्रॉम_बिगक्वेरी फ़ंक्शन के साथ परस्पर उपयोग किया जा सकता है।

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 = ''
file_path = ''

df = load_data_from_gcs(bucket_name, file_path)

लाइटजीबीएम के साथ एक मॉडल का प्रशिक्षण

यदि आप XGBoost के बजाय LightGBM का उपयोग करना चाहते हैं, तो आप बस उसी सेटअप में XGBClassifier को LGBMClassifier से बदल सकते हैं।

import lightgbm as lgb
model = lgb.LGBMClassifier()

निष्कर्ष

भविष्य के लेख प्रशिक्षण के लिए BigQuery ML (BQML) के उपयोग को कवर करेंगे।

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/suzuki0430/bigquery-and-xgboost-integration-a-jupyter-notebook-tutorial-for-binary-classification-1ocb?1 यदि कोई उल्लंघन है, तो कृपया स्टडी_गोलंग से संपर्क करें @163.com हटाएं
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3