.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/ensemble/plot_gradient_boosting_regression.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. or to run this example in your browser via JupyterLite or Binder .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_ensemble_plot_gradient_boosting_regression.py: ============================ انحدار التعزيز المتدرج ============================ يوضح هذا المثال التعزيز المتدرج لإنتاج نموذج تنبؤي من مجموعة من النماذج التنبؤية الضعيفة. يمكن استخدام التعزيز المتدرج لمشاكل الانحدار والتصنيف. هنا، سوف نقوم بتدريب نموذج لمعالجة مهمة انحدار مرض السكري. سنحصل على النتائج من :class:`~sklearn.ensemble.GradientBoostingRegressor` مع خسارة المربعات الصغرى و 500 شجرة انحدار بعمق 4. ملاحظة: لمجموعات البيانات الأكبر (n_samples >= 10000)، يرجى الرجوع إلى :class:`~sklearn.ensemble.HistGradientBoostingRegressor`. انظر :ref:`sphx_glr_auto_examples_ensemble_plot_hgbt_regression.py` للحصول على مثال يعرض بعض المزايا الأخرى لـ :class:`~ensemble.HistGradientBoostingRegressor`. .. GENERATED FROM PYTHON SOURCE LINES 15-29 .. code-block:: Python # Authors: The scikit-learn developers # SPDX-License-Identifier: BSD-3-Clause import matplotlib import matplotlib.pyplot as plt import numpy as np from sklearn import datasets, ensemble from sklearn.inspection import permutation_importance from sklearn.metrics import mean_squared_error from sklearn.model_selection import train_test_split from sklearn.utils.fixes import parse_version .. GENERATED FROM PYTHON SOURCE LINES 30-34 تحميل البيانات ------------------------------------- أولاً، نحتاج إلى تحميل البيانات. .. GENERATED FROM PYTHON SOURCE LINES 34-38 .. code-block:: Python diabetes = datasets.load_diabetes() X, y = diabetes.data, diabetes.target .. GENERATED FROM PYTHON SOURCE LINES 39-60 تجهيز البيانات ------------------------------------- بعد ذلك، سنقوم بتقسيم مجموعة البيانات لدينا لاستخدام 90٪ للتدريب وترك الباقي للاختبار. سنقوم أيضًا بتعيين معلمات نموذج الانحدار. يمكنك اللعب بهذه المعلمات لمعرفة كيفية تغير النتائج. `n_estimators` : عدد مراحل التعزيز التي سيتم إجراؤها. لاحقًا، سنقوم برسم الانحراف مقابل تكرارات التعزيز. `max_depth` : يحد من عدد العقد في الشجرة. تعتمد أفضل قيمة على تفاعل متغيرات الإدخال. `min_samples_split` : الحد الأدنى لعدد العينات المطلوبة لتقسيم عقدة داخلية. `learning_rate` : مقدار انكماش مساهمة كل شجرة. `loss` : دالة الخسارة المراد تحسينها. يتم استخدام دالة المربعات الصغرى في هذه الحالة، ومع ذلك، هناك العديد من الخيارات الأخرى (انظر :class:`~sklearn.ensemble.GradientBoostingRegressor` ). .. GENERATED FROM PYTHON SOURCE LINES 60-73 .. code-block:: Python X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.1, random_state=13 ) params = { "n_estimators": 500, "max_depth": 4, "min_samples_split": 5, "learning_rate": 0.01, "loss": "squared_error", } .. GENERATED FROM PYTHON SOURCE LINES 74-78 ملاءمة نموذج الانحدار -------------------- الآن سنبدأ منحنيات انحدار التعزيز المتدرج ونلائمها مع بيانات التدريب الخاصة بنا. دعونا نلقي نظرة أيضًا على متوسط ​​مربع الخطأ في بيانات الاختبار. .. GENERATED FROM PYTHON SOURCE LINES 78-85 .. code-block:: Python reg = ensemble.GradientBoostingRegressor(**params) reg.fit(X_train, y_train) mse = mean_squared_error(y_test, reg.predict(X_test)) print("متوسط ​​مربع الخطأ (MSE) في مجموعة الاختبار: {:.4f}".format(mse)) .. rst-class:: sphx-glr-script-out .. code-block:: none متوسط ​​مربع الخطأ (MSE) في مجموعة الاختبار: 3014.8748 .. GENERATED FROM PYTHON SOURCE LINES 86-91 رسم انحراف التدريب ---------------------- أخيرًا، سنقوم بتصور النتائج. للقيام بذلك، سنقوم أولاً بحساب انحراف مجموعة الاختبار ثم رسمه مقابل تكرارات التعزيز. .. GENERATED FROM PYTHON SOURCE LINES 91-114 .. code-block:: Python test_score = np.zeros((params["n_estimators"],), dtype=np.float64) for i, y_pred in enumerate(reg.staged_predict(X_test)): test_score[i] = mean_squared_error(y_test, y_pred) fig = plt.figure(figsize=(6, 6)) plt.subplot(1, 1, 1) plt.title("الانحراف") plt.plot( np.arange(params["n_estimators"]) + 1, reg.train_score_, "b-", label="انحراف مجموعة التدريب", ) plt.plot( np.arange(params["n_estimators"]) + 1, test_score, "r-", label="انحراف مجموعة الاختبار" ) plt.legend(loc="upper right") plt.xlabel("تكرارات التعزيز") plt.ylabel("الانحراف") fig.tight_layout() plt.show() .. image-sg:: /auto_examples/ensemble/images/sphx_glr_plot_gradient_boosting_regression_001.png :alt: الانحراف :srcset: /auto_examples/ensemble/images/sphx_glr_plot_gradient_boosting_regression_001.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 115-127 رسم أهمية الميزة ----------------------- .. warning:: احذر، يمكن أن تكون أهمية الميزات المستندة إلى الشوائب مضللة للميزات ذات **الأهمية العالية** (العديد من القيم الفريدة). كبديل، يمكن حساب أهمية التبديل لـ ``reg`` في مجموعة اختبار معلقة. انظر :ref:`permutation_importance` لمزيد من التفاصيل. في هذا المثال، تحدد طرق الشوائب والتبديل نفس الميزتين التنبؤيتين القويتين ولكن ليس بنفس الترتيب. الميزة التنبؤية الثالثة، "bp"، هي أيضًا نفسها بالنسبة للطريقتين. الميزات المتبقية أقل تنبؤيةً وتُظهر أشرطة الخطأ في مخطط التبديل أنها تتداخل مع 0. .. GENERATED FROM PYTHON SOURCE LINES 127-159 .. code-block:: Python feature_importance = reg.feature_importances_ sorted_idx = np.argsort(feature_importance) pos = np.arange(sorted_idx.shape[0]) + 0.5 fig = plt.figure(figsize=(12, 6)) plt.subplot(1, 2, 1) plt.barh(pos, feature_importance[sorted_idx], align="center") plt.yticks(pos, np.array(diabetes.feature_names)[sorted_idx]) plt.title("أهمية الميزة (MDI)") result = permutation_importance( reg, X_test, y_test, n_repeats=10, random_state=42, n_jobs=2 ) sorted_idx = result.importances_mean.argsort() plt.subplot(1, 2, 2) # تم إهمال وسيطة `labels` في boxplot في matplotlib 3.9 وتمت # إعادة تسميتها إلى `tick_labels`. يتعامل الكود التالي مع هذا، ولكن بصفتك # مستخدمًا لـ scikit-learn، فمن المحتمل أن تتمكن من كتابة كود أبسط باستخدام `labels=...` # (matplotlib < 3.9) أو `tick_labels=...` (matplotlib >= 3.9). tick_labels_parameter_name = ( "tick_labels" if parse_version(matplotlib.__version__) >= parse_version("3.9") else "labels" ) tick_labels_dict = { tick_labels_parameter_name: np.array(diabetes.feature_names)[sorted_idx] } plt.boxplot(result.importances[sorted_idx].T, vert=False, **tick_labels_dict) plt.title("أهمية التبديل (مجموعة الاختبار)") fig.tight_layout() plt.show() .. image-sg:: /auto_examples/ensemble/images/sphx_glr_plot_gradient_boosting_regression_002.png :alt: أهمية الميزة (MDI), أهمية التبديل (مجموعة الاختبار) :srcset: /auto_examples/ensemble/images/sphx_glr_plot_gradient_boosting_regression_002.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 1.928 seconds) .. _sphx_glr_download_auto_examples_ensemble_plot_gradient_boosting_regression.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: binder-badge .. image:: images/binder_badge_logo.svg :target: https://mybinder.org/v2/gh/scikit-learn/scikit-learn/main?urlpath=lab/tree/notebooks/auto_examples/ensemble/plot_gradient_boosting_regression.ipynb :alt: Launch binder :width: 150 px .. container:: lite-badge .. image:: images/jupyterlite_badge_logo.svg :target: ../../lite/lab/index.html?path=auto_examples/ensemble/plot_gradient_boosting_regression.ipynb :alt: Launch JupyterLite :width: 150 px .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_gradient_boosting_regression.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_gradient_boosting_regression.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_gradient_boosting_regression.zip ` .. include:: plot_gradient_boosting_regression.recommendations .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_