अपने मॉडल को बेहतर बनाने के लिए XGBoost प्रशिक्षण रिपोर्ट का उपयोग करना

स्रोत नोड: 747278

2019 में, AWS का अनावरण किया गया अमेज़न SageMaker डिबगर, एक सेजमेकर क्षमता जो आपको किसी मॉडल के प्रशिक्षित होने के दौरान उत्पन्न होने वाली विभिन्न समस्याओं का स्वचालित रूप से पता लगाने में सक्षम बनाती है। सेजमेकर डिबगर एक प्रशिक्षण कार्य के दौरान निर्दिष्ट अंतराल पर मॉडल स्थिति डेटा कैप्चर करता है। इस डेटा के साथ, सेजमेकर डिबगर अंतर्निहित या उपयोगकर्ता-परिभाषित नियमों का लाभ उठाकर प्रशिक्षण समस्याओं या विसंगतियों का पता लगा सकता है। प्रशिक्षण कार्य के दौरान समस्याओं का पता लगाने के अलावा, आप मॉडल के प्रदर्शन का मूल्यांकन करने और सुधार के लिए क्षेत्रों की पहचान करने के लिए बाद में कैप्चर किए गए राज्य डेटा का विश्लेषण कर सकते हैं। नए लॉन्च किए गए XGBoost प्रशिक्षण रिपोर्ट फीचर से यह कार्य आसान हो गया है। न्यूनतम मात्रा में कोड परिवर्तनों के साथ, सेजमेकर डिबगर महत्वपूर्ण जानकारी को रेखांकित करते हुए एक व्यापक रिपोर्ट तैयार करता है जिसका उपयोग आप मॉडल का मूल्यांकन और सुधार करने के लिए कर सकते हैं।

यह पोस्ट आपको सेजमेकर पर एक XGBoost मॉडल के प्रशिक्षण का एक संपूर्ण उदाहरण दिखाता है और मॉडल के प्रदर्शन का त्वरित और आसानी से मूल्यांकन करने और आपके मॉडल के लिए सुधार के क्षेत्रों की पहचान करने के लिए सेजमेकर डीबगर में स्वचालित XGBoost रिपोर्ट कार्यक्षमता को कैसे सक्षम किया जाए। भले ही आपके पास डेटा विज्ञान का बहुत अधिक अनुभव न हो, फिर भी आप यह अनुमान लगा सकते हैं कि मॉडल कितना अच्छा प्रदर्शन करता है और रिपोर्ट द्वारा प्रदान की गई जानकारी के आधार पर सुधार के क्षेत्रों की पहचान कर सकते हैं। इस पोस्ट का कोड इसमें उपलब्ध है गीथहब रेपो.

डेटासेट

इस उदाहरण के लिए, हम से डेटासेट का उपयोग करते हैं कागल एटलस हिग्स बोसोन मशीन लर्निंग चैलेंज 2014. इस डेटासेट के साथ, हम सीईआरएन के लार्ज हैड्रॉन कोलाइडर में सिम्युलेटेड प्रोटॉन-प्रोटॉन टकराव से उत्पन्न अन्य (जैसे पृष्ठभूमि शोर) से हिग्स बोसोन घटनाओं को स्वचालित रूप से वर्गीकृत करने के लिए एक मशीन लर्निंग (एमएल) मॉडल को प्रशिक्षित करते हैं। डेटा सीधे प्राप्त किया जा सकता है सर्न. आइए डेटा प्राप्त करने और प्रशिक्षण कार्य को कॉन्फ़िगर करने के चरणों से गुजरें। आप ज्यूपिटर नोटबुक के साथ अनुसरण कर सकते हैं।

  1. हम प्रासंगिक आयात से शुरू करते हैं:
    import requests from io import BytesIO import pandas as pd import boto3 import s3fs from datetime import datetime import time import sagemaker from sagemaker.estimator import Estimator from sagemaker import image_uris from sagemaker.inputs import TrainingInput from sagemaker.debugger import Rule, rule_configs from IPython.display import FileLink, FileLinks 

  1. फिर हम वेरिएबल सेट करते हैं जिनकी हमें बाद में सेजमेकर प्रशिक्षण कार्य को कॉन्फ़िगर करने के लिए आवश्यकता होती है:
    # setup sagemaker variables role = sagemaker.get_execution_role() sess = sagemaker.session.Session() bucket = sess.default_bucket() key_prefix = "higgs-boson" region = sess._region_name s3 = s3fs.S3FileSystem(anon=False) xgboost_container = image_uris.retrieve("xgboost", region, "1.2-1") 

  1. हम डेटा प्राप्त करते हैं और उसे प्रशिक्षण के लिए तैयार करते हैं:
    # obtain data from CERN and load it into a DataFrame data_url = "http://opendata.cern.ch/record/328/files/atlas-higgs-challenge-2014-v2.csv.gz" gz_file = BytesIO(requests.get(data_url).content) gz_file.flush() df = pd.read_csv(gz_file, compression="gzip") # identify feature, label, and unused columns non_feature_cols = ["EventId", "Weight", "KaggleSet", "KaggleWeight", "Label"] feature_cols = [col for col in df.columns if col not in non_feature_cols] label_col = "Label" df["Label"] = df["Label"].apply(lambda x: 1 if x=="s" else 0) # take subsets of data per the original Kaggle competition train_data = df.loc[df["KaggleSet"] == "t", [label_col, *feature_cols]] test_data = df.loc[df["KaggleSet"] == "b", [label_col, *feature_cols]] # upload data to S3 for name, dataset in zip(["train", "test"], [train_data, test_data]): sess.upload_string_as_file_body(body=dataset.to_csv(index=False, header=False), bucket=bucket, key=f"{key_prefix}/input/{name}.csv" ) # configure data inputs for SageMaker training train_input = TrainingInput(f"s3://{bucket}/{key_prefix}/input/train.csv", content_type="text/csv") validation_input = TrainingInput(f"s3://{bucket}/{key_prefix}/input/test.csv", content_type="text/csv") 

XGBoost प्रशिक्षण रिपोर्ट के साथ एक प्रशिक्षण कार्य स्थापित करना

हमें प्रशिक्षण कार्य शुरू करने की विशिष्ट प्रक्रिया में केवल एक कोड परिवर्तन करने की आवश्यकता है: जोड़ना create_xgboost_report अनुमानक के लिए नियम. सेजमेकर बाकी का ख्याल रखता है। एक सहयोगी सेजमेकर प्रसंस्करण कार्य XGBoost मॉडल का विश्लेषण करने और रिपोर्ट तैयार करने के लिए शुरू होता है। यह विश्लेषण बिना किसी अतिरिक्त लागत के किया जाता है. निम्नलिखित अतिरिक्त कोड देखें:

# add a rule to generate the XGBoost Report rules=[ Rule.sagemaker(rule_configs.create_xgboost_report()) ] hyperparameters={ "max_depth": "6", "eta": "0.1", "objective": "binary:logistic", "num_round": "100", } estimator=Estimator( role=role, image_uri=xgboost_container, base_job_name="higgs-boson-model", instance_count=1, instance_type="ml.m5.2xlarge", hyperparameters=hyperparameters, rules=rules, ) training_job_time = datetime.now() estimator.fit({'train': train_input, 'validation': validation_input}, wait=True) 

XGBoost प्रशिक्षण रिपोर्ट के साथ मॉडलों का विश्लेषण

जब प्रशिक्षण कार्य पूरा हो जाता है, तो सेजमेकर XGBoost रिपोर्ट तैयार करने के लिए स्वचालित रूप से प्रसंस्करण कार्य शुरू कर देता है। हम प्रसंस्करण कार्य की स्थिति की जांच करने के लिए कोड की कुछ पंक्तियाँ लिखते हैं। जब यह पूरा हो जाता है, तो हम इसे आगे की समीक्षा के लिए अपने स्थानीय ड्राइव पर डाउनलोड करते हैं। निम्नलिखित कोड इसके पूरा होने पर रिपोर्ट डाउनलोड करता है, और आसानी से देखने के लिए सीधे नोटबुक के भीतर एक हाइपरलिंक प्रदान करता है:

import os #get name of profiler report profiler_report_name = [rule["RuleConfigurationName"] for rule in estimator.latest_training_job.rule_job_summary() if "Profiler" in rule["RuleConfigurationName"]][0] xgb_profile_job_name = [rule["RuleEvaluationJobArn"].split("/")[-1] for rule in estimator.latest_training_job.rule_job_summary() if "CreateXgboostReport" in rule["RuleConfigurationName"]][0] base_output_path = os.path.dirname(estimator.latest_job_debugger_artifacts_path()) rule_output_path = os.path.join(base_output_path, "rule-output/") xgb_report_path = os.path.join(rule_output_path, "CreateXgboostReport") profile_report_path = os.path.join(rule_output_path, profiler_report_name) while True: xgb_job_info = sess.sagemaker_client.describe_processing_job(ProcessingJobName=xgb_profile_job_name) if xgb_job_info["ProcessingJobStatus"] == "Completed": break else: print(f"Job Status: {xgb_job_info['ProcessingJobStatus']}") time.sleep(30) s3.download(xgb_report_path, "reports/xgb/", recursive=True) s3.download(profile_report_path, "reports/profiler/", recursive=True) display("Click link below to view the profiler report", FileLink("reports/profiler/profiler-output/profiler-report.html")) display("Click link below to view the XGBoost Training report", FileLink("reports/xgb/xgboost_report.html")) 

इससे पहले कि हम प्रशिक्षण रिपोर्ट में उतरें, आइए सेजमेकर डिबगर रिपोर्ट पर एक नज़र डालें, जो डिफ़ॉल्ट रूप से प्रत्येक प्रशिक्षण कार्य के बाद उत्पन्न होती है। यह रिपोर्ट नेटवर्क, I/O और CPU जैसे संसाधन उपयोग के बारे में प्रमुख मेट्रिक्स प्रदान करती है। निम्नलिखित उदाहरण में, हम देख सकते हैं कि औसत सीपीयू उपयोग लगभग 55% था जबकि मेमोरी उपयोग लगातार 5% से कम था। यह हमें बताता है कि हम छोटे प्रशिक्षण उदाहरण का उपयोग करके लागत कम कर सकते हैं।

यह रिपोर्ट नेटवर्क, I/O और CPU जैसे संसाधन उपयोग के बारे में प्रमुख मेट्रिक्स प्रदान करती है।

आइए अब प्रशिक्षण रिपोर्ट पर गौर करें। सेजमेकर डिबगर स्वचालित रूप से हमारे मॉडल पर निम्नलिखित प्रमुख अंतर्दृष्टि उत्पन्न करता है:

  • लेबल का वितरण - असंतुलित डेटासेट का पता लगाता है
  • हानि का ग्राफ - ओवर-फिटिंग या ओवर ट्रेनिंग का पता लगाता है
  • फ़ीचर महत्व मेट्रिक्स - निरर्थक या गैर-जानकारीपूर्ण विशेषताओं की पहचान करता है
  • कन्फ्यूजन मैट्रिक्स और मूल्यांकन मेट्रिक्स - व्यक्तिगत कक्षा स्तर पर प्रदर्शन का मूल्यांकन करता है और त्रुटियों की सांद्रता की पहचान करता है
  • प्रति पुनरावृत्ति सटीकता दर - दिखाता है कि बूस्टिंग के प्रत्येक दौर में प्रत्येक वर्ग के लिए सटीकता में कैसे सुधार हुआ
  • रिसीवर ऑपरेटिंग विशेषता वक्र - दिखाता है कि मॉडल विभिन्न संभाव्यता सीमाओं के तहत कैसा प्रदर्शन करता है
  • अवशेषों का वितरण - यह निर्धारित करने में मदद करता है कि क्या अवशेष यादृच्छिक त्रुटि या गुम जानकारी का परिणाम हैं

हम प्रदर्शन उद्देश्यों के लिए रिपोर्ट से कुछ आइटम चुनते हैं।

डेटासेट के वास्तविक लेबल का वितरण

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

यह विज़ुअलाइज़ेशन आपके मूल डेटासेट में लेबल किए गए वर्गों (वर्गीकरण के लिए) या मान (प्रतिगमन के लिए) का वितरण दिखाता है।हानि बनाम चरण ग्राफ़

यह विज़ुअलाइज़ेशन सत्यापन डेटासेट के विरुद्ध प्रशिक्षण डेटासेट से होने वाले नुकसान की तुलना करता है। इस विशेष मॉडल के लिए, ऐसा लगता है कि यह मॉडल प्रशिक्षण सेट पर ओवर-फिटिंग है क्योंकि लगभग 30 बूस्टिंग राउंड के बाद सत्यापन त्रुटि अपेक्षाकृत सपाट रहती है, भले ही प्रशिक्षण हानि पर त्रुटि में सुधार जारी है।

यह विज़ुअलाइज़ेशन सत्यापन डेटासेट के विरुद्ध प्रशिक्षण डेटासेट से होने वाले नुकसान की तुलना करता है

फ़ीचर महत्व

यह विज़ुअलाइज़ेशन आपको वजन, लाभ और कवरेज के आधार पर फीचर का महत्व दिखाता है। लाभ, जो प्रत्येक सुविधा के सापेक्ष योगदान को मापता है, आमतौर पर अधिकांश उपयोग के मामलों के लिए सबसे अधिक प्रासंगिक है। इस विशेष मॉडल के लिए, हम देखते हैं कि मुट्ठी भर सुविधाएँ योगदान का बड़ा हिस्सा प्रदान करती हैं, जबकि बड़ी संख्या मॉडल के पूर्वानुमानित प्रदर्शन में बहुत कम योगदान देती है या कोई लाभ नहीं देती है। आमतौर पर मॉडल से गैर-सूचनात्मक सुविधाओं को हटा देना एक अच्छा अभ्यास है क्योंकि वे शोर जोड़ते हैं और परिणामस्वरूप ओवर-फिटिंग हो सकती है।

यह विज़ुअलाइज़ेशन आपको वजन, लाभ और कवरेज के आधार पर फीचर का महत्व दिखाता है।

कन्फ्यूजन मैट्रिक्स और आरओसी वक्र

ऐसे कई अतिरिक्त विज़ुअलाइज़ेशन हैं जो आपको सामान्य चीजें दिखाते हैं जिन्हें डेटा वैज्ञानिक अक्सर देखते हैं, जैसे कि भ्रम मैट्रिक्स, आरओसी वक्र और एफ 1 स्कोर। अधिक जानकारी के लिए देखें डिबगर XGBoost प्रशिक्षण रिपोर्ट वॉकथ्रू.

निम्नलिखित भ्रम मैट्रिक्स से, हम देख सकते हैं कि मॉडल कक्षा 0 की तुलना में कक्षा 1 के लिए भविष्यवाणी करने में बेहतर काम करता है। और इसे शुरुआत में दिखाए गए असंतुलित लेबल वितरण द्वारा समझाया जा सकता है (कक्षा की तुलना में कक्षा 0 के लिए अधिक उदाहरण हैं) 1). एक प्रभाव डेटा पुनः नमूनाकरण तकनीकों के माध्यम से लेबल वितरण को अधिक संतुलित बनाना है।

निम्नलिखित भ्रम मैट्रिक्स से, हम देख सकते हैं कि मॉडल कक्षा 0 की तुलना में कक्षा 1 के लिए भविष्यवाणी करने में बेहतर काम करता है।

सेजमेकर डिबगर स्वचालित रूप से एफ1 स्कोर और सटीकता जैसे प्रदर्शन मेट्रिक्स उत्पन्न और रिपोर्ट करता है। आप वर्गीकरण रिपोर्ट भी देख सकते हैं, जैसे कि निम्नलिखित।

आप वर्गीकरण रिपोर्ट भी देख सकते हैं, जैसे कि निम्नलिखित।

बढ़िया ट्यूनिंग प्रदर्शन

प्रशिक्षण रिपोर्ट के आउटपुट से, हम कई क्षेत्रों को देख सकते हैं जहां प्रदर्शन को बेहतर बनाने के लिए मॉडल को ठीक किया जा सकता है, विशेष रूप से निम्नलिखित:

  • हानि बनाम चरण ग्राफ़ इंगित करता है कि लगभग 30 राउंड के बाद सत्यापन त्रुटि में सुधार होना बंद हो गया है, इसलिए हम ओवर-ट्रेनिंग को कम करने के लिए बूस्टिंग राउंड की संख्या को कम कर सकते हैं या जल्दी रोकने को सक्षम कर सकते हैं।
  • फीचर महत्व ग्राफ बड़ी संख्या में गैर-सूचनात्मक सुविधाओं को दिखाता है जिन्हें ओवर-फिटिंग को कम करने और अनदेखी डेटासेट पर पूर्वानुमानित प्रदर्शन में सुधार करने के लिए संभावित रूप से हटाया जा सकता है।
  • भ्रम मैट्रिक्स और वर्गीकरण रिपोर्ट के आधार पर, रिकॉल स्कोर कुछ हद तक कम है, जिसका अर्थ है कि हमने बड़ी संख्या में सिग्नल घटनाओं को गलत वर्गीकृत किया है। ट्यूनिंग scale_pos_weight डेटासेट में असंतुलन को समायोजित करने के लिए पैरामीटर इसे सुधारने में मदद कर सकता है।

निष्कर्ष

इस पोस्ट में, हमने सेजमेकर डिबगर का उपयोग करके एक XGBoost प्रशिक्षण रिपोर्ट और प्रोफाइलर रिपोर्ट तैयार की। इनसे, हमें प्रशिक्षण के दौरान मॉडल प्रदर्शन और संसाधन उपयोग दोनों की रिपोर्ट स्वचालित रूप से मिल गई। फिर हमने XGBoost प्रशिक्षण रिपोर्ट देखी और कई मुद्दों की पहचान की जिन्हें हम कुछ हाइपरपैरामीटर ट्यूनिंग के साथ कम कर सकते हैं।

सेजमेकर डिबगर के बारे में अधिक जानकारी के लिए देखें सेजमेकर डिबगर XGBoost प्रशिक्षण रिपोर्ट और सेजमेकर डिबगर प्रोफाइलिंग रिपोर्ट.


लेखक के बारे में

साइमन ज़मरीनसाइमन ज़मरीन एक एआई / एमएल सॉल्यूशन आर्किटेक्ट है जिसका मुख्य फोकस ग्राहकों को उनकी डेटा परिसंपत्तियों से मूल्य निकालने में मदद कर रहा है। अपने खाली समय में, साइमन परिवार के साथ समय बिताना, विज्ञान-फाई पढ़ना और विभिन्न DIY घर परियोजनाओं पर काम करना पसंद करता है।

लू हुआंगलू हुआंग वह AWS डीप इंजन टीम में एक वरिष्ठ उत्पाद प्रबंधक हैं, जो सेजमेकर डिबगर का प्रबंधन करते हैं।

सतादल भट्टाचार्जी AWS AI में प्रधान उत्पाद प्रबंधक हैं। वह सेजमेकर जैसी परियोजनाओं पर मशीन लर्निंग इंजन पीएम टीम का नेतृत्व करते हैं और टेन्सरफ्लो, पायटोरच और एमएक्सनेट जैसे मशीन लर्निंग फ्रेमवर्क का अनुकूलन करते हैं।

किंगवेई ली अमेज़न वेब सर्विसेज में मशीन लर्निंग स्पेशलिस्ट है। उन्होंने अपनी पीएच.डी. ऑपरेशन रिसर्च में जब उन्होंने अपने सलाहकार के अनुसंधान अनुदान खाते को तोड़ा और नोबेल पुरस्कार देने में असफल रहे, तो उन्होंने वादा किया था। वर्तमान में वह वित्तीय सेवा और बीमा उद्योग में ग्राहकों को AWS पर मशीन लर्निंग समाधान बनाने में मदद करता है। अपने खाली समय में, वह पढ़ना और पढ़ाना पसंद करते हैं।

निहाल हरीशनिहाल हरीश AWS AI में इंजीनियर हैं। उन्हें वितरित सिस्टम और मशीन लर्निंग के इंटरसेक्शन पर काम करना पसंद है। काम के अलावा, वह लंबी दूरी की दौड़ और टेनिस खेलना पसंद करते हैं।

स्रोत: https://aws.amazon.com/blogs/machine-learning/utilize-xgboost-training-reports-to-improve-your-models/

समय टिकट:

से अधिक एडब्ल्यूएस मशीन लर्निंग ब्लॉग