XGBoost وصف: التعلم تحت إشراف التنبؤ العمر المتوقع

الكاتب: لوتشيانو Strika

ترجمة: وو تشن دونغ

تصحيح التجارب المطبعية: لسان الحمل

هذه المقالة حول 4000 وأوصى كلمة القراءة 14 دقيقة.

توضح هذه المقالة تعريف XGBoost، واستخدام هذا النموذج لالأسي التنبؤ الانحدار مجموعات البيانات الرسمية الإنسان.

غابة جميلة، هو عشوائي جدا! المصدر: Pixabay

اليوم، وسوف نستخدم XGBoost تعزيز شجرة على مؤشر التنمية البشرية، ومجموعات البيانات الرسمية للتنبؤات الانحدار. XGBoost شجرة يمكن أن تستخدم لتعزيز تدريب إطار مواز متعددة النوى. اليوم سوف نستخدم XGBoost تعزيز شجرة على مؤشر التنمية البشرية، ومجموعات بيانات رسمية عن تنبؤات الانحدار. الذي أشرف التعلم لجميع مشاكل التصنيف؟

XGBoost: ما هو؟

XGBoost هو إطار بيثون التي تسمح لنا باستخدام شجرة لتعزيز التدريب بالتوازي متعددة النوى. كما يمكنك استخدام XGBoost باللغة R، ولكن هنا نقوم به ليس كثيرا المقدمة.

المهمة: عودة

تعزيز شجرة هو نموذج التعلم الآلي للالانحدار. وهذا يعني أن المدخل إلى نموذج وقيمة العلامة مجموعة، والنموذج يمكن تقدير بوصفها وظيفة من المدخلات والمخرجات التسمية المباراة. وتصنيف مختلف، واصفة لنا هنا نشعر بالقلق مع القيم مستمرة، وليس مجموعة من فئة منفصلة.

على سبيل المثال، ونحن نعلم وزن الشخص والعمر، وتريد أن توقع ارتفاع له، بدلا من وتنقسم إلى فئات تا الذكور، الإناث، أو غيرها.

لكل منهما شجرة القرارات، ونحن جميعا بدءا من جذورها، ومن ثم تعيينه إلى اليسار أو اليمين من عقدة تابعة استنادا إلى تقرير. في النهاية، نحن يمكن أن تصل إلى عقدة ورقة وإرجاع قيمة عقدة ورقة.

XGBoost نموذج: ما هو التدرج تعزيز الشجرة؟

تعزيز الشجرة والغابة العشوائية هي مشابهة جدا: فهي قرار الأشجار التكامل. في أي حال، فإن كل عقدة ورقة بإرجاع قيمة (أو الموجه) على التنبؤ لدينا من الفضاء.

لكل عقدة الطفل من العقد غير طرفية، وزيادة الحاجة شجرة في أن تقرر: المقارنة العددية بين قيمة مميزة وقيمة حرجة معينة.

تعرف في الوقت الراهن سوى شجرة الانحدار. تعزيز الشجرة والغابة العشوائية في النهاية ما الفرق أنها لا تجعل؟

تعزيز الشجرة والغابة عشوائية: الفرق

تعزيز تدريب شجرة مختلفة والغابات العشوائية، ونحن بحاجة إلى تغيير تسمية كل مرة تقوم فيها زيادة شجرة جديدة.

لكل شجرة جديدة واحدة، نحن بحاجة إلى طرح المنتج معدل التعلم والقيمة المتوقعة من جميع الأشجار أمام التسمية مع القيمة الأصلية، لتحديث التسمية.

ونتيجة لذلك، يمكن لكل شجرة تصحيح الأخطاء أمام جميع الأشجار للتعلم الفعال.

لذلك، في فترة التوقعات، ونحن بحاجة فقط للعودة مباشرة إلى القيمة المتوقعة من جميع الأشجار ومن ثم مضروبا في معدل تعلمها.

وهذا يعني أيضا أن الغابات العشوائية وشجرة حزمة مختلفة، وإذا زدنا بشكل تعسفي عدد من الأشجار، ثم هذا النموذج سوف يكون لائقا جدا. ونحن الآن نتعلم كيفية تفسير هذا.

تريد أن تعرف المزيد عن تعزيز شجرة، أقترح بشدة أن يذهب قراءة الوثيقة XGBoost مسؤول. تعلمت الكثير من الأشياء، المستند يحتوي على بعض الصور غرامة يمكن أن يفسر أساسيات منه.

وثيقة رسمية XGBoost: https://xgboost.readthedocs.io/en/latest/tutorials/model.html

إذا كنت ترغب في حفر عميقة هذا النموذج، وأنا أوصي "مقدمة إلى التعلم الإحصائي"، وهو مفهوم في هذا الصدد اسمحوا لي المستنير الكتب.

"مقدمة في التعلم الإحصائية": https://www.bookdepository.com/book/9781461471370/؟a_aid=strikingloo&chan=ws

استخدام XGBoost على بيثون

XGBoost وAPI اضحة إلى حد ما، ولكن ما زال علينا أن نتعلم قليلا عن المعلمات الفائقة. أولا وقبل كل شيء أود أن تظهر مهمة اليوم.

اليوم، مهمة جمع البيانات: HDI (مؤشر التنمية البشرية HDI) البيانات المنشورة

مجموعة البيانات من المبادرة يحتوي على الكثير من المعلومات حول مستوى التنمية في معظم البلدان، التي تنطوي على مجموعة واسعة من المجالات والمقاييس عبر البعد الزمني على مدى عقود. لمقال اليوم، قررت أن حدد فقط أحدث متاح البيانات - 2017 لتكون قريبة من الوضع الحالي.

ثم أنا أيضا بحاجة إلى تنظيم وتنظيف البيانات، ومجموعات البيانات الخام أسهل لإدارة واستخدام.

للحصول على هذه المادة جيثب مستودع يمكن الوصول إلى هذا الرابط (https://github.com/StrikingLoo/XGboost_HDI_analysis)، أقترح عليك استخدام Jupyter الدفتري للقراءة. سأنضم أحدث الفصول ذات الصلة.

1 مع البيانات وتجهيزها الباندا

أولا، نحن نريد أن نجعل هذه المجموعة من البيانات التي تم تحميلها في الذاكرة، لأن كل عمود يحتوي على بيانات عن كل سنة، كل صف وكل المؤشرات الوطنية، من الصعب جدا التعامل معها.

يمكننا تحويل هذه مجموعة البيانات عن طريق السطرين التاليين من التعليمات البرمجية:

{البلد: {metric1: VALUE1، metric2: و value2، الخ} لالقطري في البلدان}

الآن يمكننا أن نجعل البيانات المتاحة إلى نموذج XGBoost. مع الأخذ بعين الاعتبار البيانات بالفعل في المؤشر هي رقمية، لذلك لا تحتاج المزيد من التدريب قبل المعالجة.

الباندا الواردات والمشتريات استيراد xgboost كما xgb مدافع = pd.read_csv ( "2018_all_indicators.csv") مدافع = مدافع > df.shape # (25636، 5) مدافع = df.dropna () # التخلص من NaNs ل df.shape # (12728، 5) df.iso3.unique (). الشكل رقم 195 بلدا

هذا الدور هو خط قصير من التعليمات البرمجية لبيانات حذف فارغة القيم والبيانات وتبلغنا من مجموع 195 دولة مختلفة.

أي من العمليات المذكورة أعلاه إذا كان غير مألوف لك، أو أنك لا يمكن أن نفهم أين تكمن المشكلة، وإدخال الباندا لكم يرجى نظرة على لي من قبل.

عرض مجموعة البيانات التي المؤشرات (ميزات) لديها، ونحن نستخدم أساليب فريدة من نوعها.

مدافع . فريدة من نوعها ()

هنا تحميل 97 البيانات، وأنا لن قائمة بهم. بعض البيانات عن الصحة، وبعضها عن التعليم، وبعضها عن الاقتصاد، وهناك جزء صغير حوالي حقوق المرأة.

أعتقد أن الأكثر إثارة للاهتمام هو أن التسمية لدينا هي العمر المتوقع عند الولادة، ويتحدثون البيانات عن بعض المؤشرات من البلاد.

بالطبع، يمكنك أيضا محاولة لتحليل تسميات مختلفة مع نفس الرمز، عندما تكون نتائج يمكن الاتصال بي!

بعد أن تحصل على الكثير من المؤشرات، أنا فقط يدويا اختيار بعض منها وأعتقد أن هناك مؤشرات المرتبطة التسمية لدينا (وربما لا)، في الواقع، يمكن أيضا اختيار المؤشرات الأخرى.

وتستخدم الرموز التالية لتشكيل مجموعات البيانات غريبة لنا لتنظيم شكل أسهل للاستخدام.

مواطنه add_indicator_to (القاموس، مبين): indicator_data = مدافع zipped_values = الرمز (قائمة (indicator_data )، وقائمة (indicator_data )) لك، والخامس في zipped_values: محاولة: قاموس  = V باستثناء ما يلي: طباعة ( "فشلت مع مفتاح:" + ك + "على" + المؤشر) = الهندية {} مؤشرات = لمؤشر المؤشرات: add_indicator_to (الهندية، المؤشر)

البيانات النهائية من شكل القاموس لدينا تحولت إلى DataFrame، أدركت أن هذا هو في الواقع نقلها - الخط الأصلي في العمود الحالي، يصبح العمود على التوالي.

ثم تعاملت بهذه الطريقة.

final_df = pd.DataFrame (الهندية) .transpose ()

2. تحليل الارتباط مميزة

لنفترض أنني اختيار الميزات لتحليل الانحدار، ولكن هذا الافتراض يستند فقط على حدسي الشخصي.

لذلك قررت أن تحقق هذا الافتراض لم يتم تأسيس إحصائيا، وهنا هو كيف يمكنني إنشاء مصفوفة الارتباط.

سيبورن استيراد كما SNS matplotlib.pyplot استيراد كما معاهدة قانون البراءات Matplotlib مضمنة التين = sns.heatmap (final_df.corr ()) plt.title ( "الارتباط مخطط النشاط") plt.tight_layout () plt.savefig ( "correlation_heatmap"، figsize = (96،72))

هذه هي النتيجة:

كما كان متوقعا، "متوسط العمر المتوقع عند الولادة" و "تطعيم (لقاح ضد المنظمة، يرجى تذكر هذا!)" "العمالة الضعيفة"، "التعليم في" ذات أهمية كبيرة على العديد من المؤشرات.

وآمل أن هذه الميزات (مجموعات سمة من سمات إشارة قوية مصفوفة الارتباط) التنبؤ وعلى غرار التسمية.

لحسن الحظ، كما يوفر XGBoost طريقة لفحص ملامح أهمية بالنسبة لنا، والتي تقوم على نموذج الكشف للتنبؤ الخصائص.

هذا بالمقارنة مع زيادة شجرة هو ميزة كبيرة، على سبيل المثال، لشرح نموذج الشبكة العصبية صنع القرار صعب جدا، وحتى منطقتنا من الصعب أن نصدق أن هذا النموذج هو معقول. وسيتم وصف المواد لاحقا بالتفصيل.

نموذج 3. التدريب XGBoost

وأخيرا الوقت لتدريب نموذج! بعد تجربة كل مرحلة تجهيزها، لم تكن في هذه المرحلة سيكون من الصعب جدا تخمين؟ لا حقا، وهنا تحتاج فقط استدعاء أسلوب بسيطة.

يجب علينا أولا تحديد مجموعة التدريب البيانات واختبار ليست القسم تكرار.

# الميزات التي نستخدمها لتدريب نموذج من الواضح أنه لا يمكن أن تحتوي التسمية. train_features = train_df = final_df.iloc train_label = final_df.iloc test_df = final_df.iloc test_label = final_df.iloc

والخطوة التالية هي جزء الخاص بك أكثر من المتوقع لهذا الرمز يستخدم لتدريب نموذج XGBoost.

استيراد xgboost كما xgb dtrain = xgb.DMatrix (train_df، والتسمية = train_label) dtest = xgb.DMatrix (test_df، والتسمية = test_label) # تعيين المعلمات عبر خريطة المعلمة = { 'max_depth': 6 'إيتا': 1، #this هو على أي حال القيمة الافتراضية "Colsample_bytree ': 1 #this هو على أي حال القيمة الافتراضية } num_round = 15 initial_trees = xgb.train (المعلمة، dtrain، num_round)

ستلاحظ أن نموذج التدريب والتنبؤ تشكيل رمز بسيط جدا. ولكن قبل هذا، وهناك فخ صغيرة. هذه القيم التي تراها هنا هي نموذج فائقة المعلمة، والتي سوف تؤثر على نتائج النموذج مدربين أو التنبؤ بها.

XGBoost دخول فائقة المعلمة

يشير max_depth إلى الحد الأقصى المسموح به عمق توصل اليه كل شجرة في المجموعة. إذا كانت هذه الحجة العظيمة، ثم الأشجار تميل إلى أن تكون أكثر تعقيدا، وأشياء أخرى يجري ظروف متساوية، ويحدث عادة أكثر بسرعة على تركيب ().

ايتا هو معدل التعلم. كما قلت من قبل، وسوف تتضاعف هذه واحدة من قيمة الانتاج من كل شجرة قبل تركيب شجرة، وعند التنبؤ تتلخص هذه المنتجات. إذا وضعت ايتا إلى القيمة الافتراضية 1، يكون له أي تأثير. إذا كان يتم تعيينه لعدد قليل، ووقت تلاقي هذا النموذج يكون أبطأ، ولكن الوضع تناسب سوف تكون البيانات عموما أفضل (هناك خطر من خلال تركيب). دورها هو مماثل لمعدل التعلم والشبكات العصبية.

وسائل colsample_bytree التي تفرعت عن كل شجرة، وعدد من الأعمدة المتاحة. القيمة الافتراضية هي 1، تمثل "وكلها متوفرة." وقد نعمد إلى تحديد قيمة أصغر، حتى يتسنى لجميع الأشجار لن تتكرر فقط باستخدام تلك مع ميزات أفضل. وهكذا، فإن متانة نموذج لبيانات مختلفة موزعة بشكل أفضل، وأقل الحالات overfitting.

وأخيرا، num_rounds يشير إلى جولة من التدريب: على سبيل المثال هو المكان الذي نحن بحاجة إلى التحقق ما إذا كان مضيفا أشجار جديدة. إذا لم ذهابا وظيفة الهدف المقابل تحسن، فإن التدريب تتوقف.

تقييم نتائجنا

دعونا نلقي نظرة على هذا النموذج لمعرفة كيفية تأثير!

الرياضيات استيراد مواطنه msesqrt (الأمراض المنقولة جنسيا، test_label، preds): squared_errors = math.sqrt عودة (مبلغ (squared_errors) / ليون (preds)) msesqrt (الأمراض المنقولة جنسيا، test_label، first_preds) # 4.02

2017 متوسط العمر المتوقع أكبر قليلا من الانحراف المعياري 7 (راجعت مع الباندا)، لذلك لا تضحك على الجذر خطأ بلدي مربع متوسط هو 4! بسرعة فائقة في عملية التدريب برمتها، على الرغم من أن مثل هذه مجموعة بيانات صغير ولم الاستفادة الكاملة من قدرات متعددة النواة XGBoost.

ولكن أشعر بأن هذا النموذج هو underfitting: هذا يعني أن النموذج قد لم تلعب بها كامل إمكاناتها.

معلمات التوليف سوبر: أعاد دعونا

منذ نشعر أقل تناسب الموديل، دعونا استخدام شجرة أكثر تعقيدا (max_depth = 6)، والحد من معدل التعلم (ايتا = 0.1)، وجولات تدريبية الزيادة إلى 40.

المعلمة = { 'max_depth': 5، "إيتا" :. 1، "Colsample_bytree ':. 75 } num_round = 40 new_tree = xgb.train (المعلمة، dtrain، num_round) # التنبؤ الصنع new_preds = new_tree.predict (dtest)

هذه المرة استخدمنا نفس المؤشرات، ونتائج الناس سعداء للغاية! وانخفض مجموعات البيانات اختبار معدل الخطأ إلى 3.15! هذا الشوط، بل هو أقل من معاييرنا وضع العلامات الفقيرة، ولكن أيضا دقة الإحصائية.

تخيل، وأنت مجرد جزء من البيانات الإحصائية على أساس بلد على التنبؤ العمر المتوقع لشخص ما، يمكنك أن تفعل الخطأ التنبؤ 3 سنوات فقط. (وبطبيعة الحال، قد يكون هذا التفسير خاطئ، لأن متوسط العمر المتوقع من الانحراف المطلق في بلد واحد هو غير صفرية).

XGBoost فهم عملية صنع القرار: أهمية من الميزات

هذا النموذج يبدو دقيقا جدا. حسنا، فمن لاتخاذ قرار بناء على ما يتميز ذلك؟ أن يقدم لنا بعض المساعدة، يوفر XGBoost plot_importance. هذا الأسلوب يمكن أن قائمة الترتيب على أهمية جميع الميزات (إذا كان لنا أن تحديد قيمة N، وسوف تظهر أعلى N الميزة الأكثر أهمية).

ولكن أهمية هو كيفية قياس ذلك؟

سوف الخوارزمية الافتراضية قياس نسبة (سمة من العدد الإجمالي للعقد والعقدة) كل ميزة لدينا شجرة الاستفادة منها، وهناك أيضا خيارات أخرى، كل خوارزمية مختلفة.

المادة على متوسط توفر تفسيرا واضحا لهذا، نرى هذه المقالة قبل أنا لا أفهم ولا سيما هذه الأساليب، لا يمكن إلا أن تكون مرتبطة ميكانيكيا، في الواقع، انها مجرد طرق مختلفة لشرح نفس الشيء فقط .

المادة على المتوسطة: https://towardsdatascience.com/be-careful-when-interpreting-your-features-importance-in-xgboost-6e16132588e7

لحالتنا، النموذج الأول يعطي هذا الرسم البياني:

وهذا يمثل دينا فرضية صحيحة، وتلك العلامات الإيجابية والسلبية خصائص نموذج علاقة قوية هي أيضا الأكثر أهمية.

هذا هو الرسم البياني أهمية ميزة لهذا النموذج الثاني هو أداء أفضل من:

الخصائص الثلاثة الأولى هي الأكثر أهمية في نموذجين لدينا، على الرغم من أن يبدو النموذج الأولى تعتمد أيضا "سنوات دراسية (العدد المتوقع للسنوات من التعليم) المتوقع." قد يكون من الصعب أن تفعل مثل هذا التحليل بسيط استنادا إلى نماذج أخرى.

ملخص

يوفر XGBoost لنا نموذجا جيدا الانحدار، فإنه يمكن أن يساعد حتى نفهم ماذا ومن المتوقع الميزات.

يتميز تحليل الارتباط لمساعدتنا على الخروج من شأن ما وربما كان معظم ميزة مهمة، فإن الوضع الفعلي يتماشى مع توقعاتنا.

وأخيرا، أعتقد أننا يجب أن نؤكد على سرعة هذا النموذج من التدريب في النهاية مدى سرعة، حتى لو كان ذلك سبيل المثال نحن فقط لم تثبت جيدة تظهر هذه الميزة.

ثم سأحاول لتدريب نموذج XGBoost أكبر حجم البيانات. إذا كنت تستطيع التفكير في ما مجموعات البيانات، من فضلك قل لي! وبالإضافة إلى ذلك، إذا يمكن تطبيق مجموعة البيانات لتحليل السلاسل الزمنية، بل هو أكثر إثارة للاهتمام، ولكن لدي خبرة ليس كثيرا في هذه المجالات. ما هي الكتب والمقالات، أو المصادر الأخرى ذات الصلة التي يمكن أن يوصي لي أن أرى حيال ذلك؟ يرجى ترك التعليق أدناه!

نبذة عن الكاتب:

لوتشيانو Strika وهو طالب علوم الكمبيوتر في جامعة بوينس آيرس، ولكن أيضا MercadoLibre عالم البيانات. وقال انه نشر مقالات على تعلم الآلة على www.datastuff.tech.

العنوان الأصلي:

مقدمة إلى XGBoost: توقع متوسط العمر المتوقع مع التعلم أشرف

الرابط الأصلي:

https://www.kdnuggets.com/2019/05/intro-xgboost-predicting-life-expectancy-supervised-learning.html

مقدمة المترجم

وو تشن دونغ ماستر فرنسا لورين الكمبيوتر الجامعات المهنية وصنع القرار. تشارك الآن في العمل المتعلق الذكاء الاصطناعي والبيانات الكبيرة والعلماء بيانات لتصبح هدف مدى الحياة. من جينان، فإن حفارة يست مفتوحة، ولكن مكتوب بلغة جافا، بيثون وPPT.

- انتهى -

تسينغهوا الانتباه - بيانات أكاديمية تشينغداو للعلوم قناة الصغرى الرسمية منصة الجمهور " بيانات الإرسال THU "أيتها الأخوات ولا". إرسال البيانات THU "لرعاية المزيد من المحاضرات ونوعية المحتوى.