.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/gaussian_process/plot_gpr_noisy.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_gaussian_process_plot_gpr_noisy.py: ========================================================================= قدرة انحدار العمليات الغاوسية (GPR) على تقدير مستوى ضوضاء البيانات ========================================================================= يوضح هذا المثال قدرة :class:`~sklearn.gaussian_process.kernels.WhiteKernel` على تقدير مستوى الضوضاء في البيانات. علاوة على ذلك، سنوضح أهمية تهيئة المعلمات الفائقة للنواة. .. GENERATED FROM PYTHON SOURCE LINES 10-14 .. code-block:: Python # Authors: The scikit-learn developers # SPDX-License-Identifier: BSD-3-Clause .. GENERATED FROM PYTHON SOURCE LINES 15-19 توليد البيانات --------------- سنعمل في بيئة حيث سيحتوي `X` على ميزة واحدة. سننشئ دالة ستولد الهدف المراد التنبؤ به. سنضيف خيارًا لإضافة بعض الضوضاء إلى الهدف الذي تم إنشاؤه. .. GENERATED FROM PYTHON SOURCE LINES 19-30 .. code-block:: Python import numpy as np def target_generator(X, add_noise=False): target = 0.5 + np.sin(3 * X) if add_noise: rng = np.random.RandomState(1) target += rng.normal(0, 0.3, size=target.shape) return target.squeeze() .. GENERATED FROM PYTHON SOURCE LINES 31-32 لنلقِ نظرة على مُولد الأهداف حيث لن نضيف أي ضوضاء لمراقبة الإشارة التي نرغب في التنبؤ بها. .. GENERATED FROM PYTHON SOURCE LINES 32-35 .. code-block:: Python X = np.linspace(0, 5, num=80).reshape(-1, 1) y = target_generator(X, add_noise=False) .. GENERATED FROM PYTHON SOURCE LINES 36-43 .. code-block:: Python import matplotlib.pyplot as plt plt.plot(X, y, label="الإشارة المتوقعة") plt.legend() plt.xlabel("X") _ = plt.ylabel("y") .. image-sg:: /auto_examples/gaussian_process/images/sphx_glr_plot_gpr_noisy_001.png :alt: plot gpr noisy :srcset: /auto_examples/gaussian_process/images/sphx_glr_plot_gpr_noisy_001.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 44-45 يقوم الهدف بتحويل المدخلات `X` باستخدام دالة الجيب. الآن، سنقوم بإنشاء بعض عينات التدريب المزعجة. لتوضيح مستوى الضوضاء، سنرسم الإشارة الحقيقية مع عينات التدريب المزعجة. .. GENERATED FROM PYTHON SOURCE LINES 45-49 .. code-block:: Python rng = np.random.RandomState(0) X_train = rng.uniform(0, 5, size=20).reshape(-1, 1) y_train = target_generator(X_train, add_noise=True) .. GENERATED FROM PYTHON SOURCE LINES 50-62 .. code-block:: Python plt.plot(X, y, label="الإشارة المتوقعة") plt.scatter( x=X_train[:, 0], y=y_train, color="black", alpha=0.4, label="الملاحظات", ) plt.legend() plt.xlabel("X") _ = plt.ylabel("y") .. image-sg:: /auto_examples/gaussian_process/images/sphx_glr_plot_gpr_noisy_002.png :alt: plot gpr noisy :srcset: /auto_examples/gaussian_process/images/sphx_glr_plot_gpr_noisy_002.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 63-77 تحسين المعلمات الفائقة للنواة في GPR --------------------------------------------- الآن، سنقوم بإنشاء :class:`~sklearn.gaussian_process.GaussianProcessRegressor` باستخدام نواة مضافة تجمع بين نواتي :class:`~sklearn.gaussian_process.kernels.RBF` و :class:`~sklearn.gaussian_process.kernels.WhiteKernel`. النواة :class:`~sklearn.gaussian_process.kernels.WhiteKernel` هي نواة ستكون قادرة على تقدير كمية الضوضاء الموجودة في البيانات بينما ستعمل النواة :class:`~sklearn.gaussian_process.kernels.RBF` على ملاءمة اللاخطية بين البيانات والهدف. ومع ذلك، سنوضح أن مساحة المعلمات الفائقة تحتوي على العديد من الحدود الدنيا المحلية. وهذا سيبرز أهمية القيم الأولية للمعلمات الفائقة. سنقوم بإنشاء نموذج باستخدام نواة ذات مستوى ضوضاء عالٍ ومقياس طول كبير، مما سيفسر جميع الاختلافات في البيانات بالضوضاء. .. GENERATED FROM PYTHON SOURCE LINES 77-87 .. code-block:: Python from sklearn.gaussian_process import GaussianProcessRegressor from sklearn.gaussian_process.kernels import RBF, WhiteKernel kernel = 1.0 * RBF(length_scale=1e1, length_scale_bounds=(1e-2, 1e3)) + WhiteKernel( noise_level=1, noise_level_bounds=(1e-10, 1e1) ) gpr = GaussianProcessRegressor(kernel=kernel, alpha=0.0) gpr.fit(X_train, y_train) y_mean, y_std = gpr.predict(X, return_std=True) .. GENERATED FROM PYTHON SOURCE LINES 88-101 .. code-block:: Python plt.plot(X, y, label="الإشارة المتوقعة") plt.scatter(x=X_train[:, 0], y=y_train, color="black", alpha=0.4, label="الملاحظات") plt.errorbar(X, y_mean, y_std, label="المتوسط اللاحق ± الانحراف المعياري") plt.legend() plt.xlabel("X") plt.ylabel("y") _ = plt.title( ( f"القيمة الأولية: {kernel}\nالقيمة المثلى: {gpr.kernel_}\nاحتمالية الهامش اللوغاريتمي: " f"{gpr.log_marginal_likelihood(gpr.kernel_.theta)}" ), fontsize=8, ) .. image-sg:: /auto_examples/gaussian_process/images/sphx_glr_plot_gpr_noisy_003.png :alt: القيمة الأولية: 1**2 * RBF(length_scale=10) + WhiteKernel(noise_level=1) القيمة المثلى: 0.763**2 * RBF(length_scale=1e+03) + WhiteKernel(noise_level=0.525) احتمالية الهامش اللوغاريتمي: -23.499266455424188 :srcset: /auto_examples/gaussian_process/images/sphx_glr_plot_gpr_noisy_003.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 102-107 نرى أن النواة المثلى التي تم العثور عليها لا تزال ذات مستوى ضوضاء عالٍ ومقياس طول أكبر. يصل مقياس الطول إلى الحد الأقصى المسموح به لهذا المعلم وقد تلقينا تحذيرًا نتيجة لذلك. والأهم من ذلك، نلاحظ أن النموذج لا يقدم تنبؤات مفيدة: يبدو أن التنبؤ المتوسط ثابت: فهو لا يتبع الإشارة المتوقعة الخالية من الضوضاء. الآن، سنقوم بتهيئة :class:`~sklearn.gaussian_process.kernels.RBF` بقيمة أولية أكبر لـ `length_scale` و :class:`~sklearn.gaussian_process.kernels.WhiteKernel` بمستوى ضوضاء أولي أصغر مع الحفاظ على حدود المعلمات دون تغيير. .. GENERATED FROM PYTHON SOURCE LINES 107-114 .. code-block:: Python kernel = 1.0 * RBF(length_scale=1e-1, length_scale_bounds=(1e-2, 1e3)) + WhiteKernel( noise_level=1e-2, noise_level_bounds=(1e-10, 1e1) ) gpr = GaussianProcessRegressor(kernel=kernel, alpha=0.0) gpr.fit(X_train, y_train) y_mean, y_std = gpr.predict(X, return_std=True) .. GENERATED FROM PYTHON SOURCE LINES 115-129 .. code-block:: Python plt.plot(X, y, label="الإشارة المتوقعة") plt.scatter(x=X_train[:, 0], y=y_train, color="black", alpha=0.4, label="الملاحظات") plt.errorbar(X, y_mean, y_std, label="المتوسط اللاحق ± الانحراف المعياري") plt.legend() plt.xlabel("X") plt.ylabel("y") _ = plt.title( ( f"القيمة الأولية: {kernel}\nالقيمة المثلى: {gpr.kernel_}\nاحتمالية الهامش اللوغاريتمي: " f"{gpr.log_marginal_likelihood(gpr.kernel_.theta)}" ), fontsize=8, ) .. image-sg:: /auto_examples/gaussian_process/images/sphx_glr_plot_gpr_noisy_004.png :alt: القيمة الأولية: 1**2 * RBF(length_scale=0.1) + WhiteKernel(noise_level=0.01) القيمة المثلى: 1.05**2 * RBF(length_scale=0.569) + WhiteKernel(noise_level=0.134) احتمالية الهامش اللوغاريتمي: -18.42973252898405 :srcset: /auto_examples/gaussian_process/images/sphx_glr_plot_gpr_noisy_004.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 130-135 أولاً، نرى أن تنبؤات النموذج أكثر دقة من تنبؤات النموذج السابق: هذا النموذج الجديد قادر على تقدير العلاقة الدالية الخالية من الضوضاء. بالنظر إلى المعلمات الفائقة للنواة، نرى أن أفضل توليفة تم العثور عليها تتميز بمستوى ضوضاء أقل ومقياس طول أقصر من النموذج الأول. يمكننا فحص احتمالية الهامش اللوغاريتمي (LML) لـ :class:`~sklearn.gaussian_process.GaussianProcessRegressor` لمعلمات فائقة مختلفة للحصول على فكرة عن الحدود الدنيا المحلية. .. GENERATED FROM PYTHON SOURCE LINES 135-147 .. code-block:: Python from matplotlib.colors import LogNorm length_scale = np.logspace(-2, 4, num=80) noise_level = np.logspace(-2, 1, num=80) length_scale_grid, noise_level_grid = np.meshgrid(length_scale, noise_level) log_marginal_likelihood = [ gpr.log_marginal_likelihood(theta=np.log([0.36, scale, noise])) for scale, noise in zip(length_scale_grid.ravel(), noise_level_grid.ravel()) ] log_marginal_likelihood = np.reshape(log_marginal_likelihood, noise_level_grid.shape) .. GENERATED FROM PYTHON SOURCE LINES 148-165 .. code-block:: Python vmin, vmax = (-log_marginal_likelihood).min(), 50 level = np.around(np.logspace(np.log10(vmin), np.log10(vmax), num=20), decimals=1) plt.contour( length_scale_grid, noise_level_grid, -log_marginal_likelihood, levels=level, norm=LogNorm(vmin=vmin, vmax=vmax), ) plt.colorbar() plt.xscale("log") plt.yscale("log") plt.xlabel("مقياس الطول") plt.ylabel("مستوى الضوضاء") plt.title("احتمالية الهامش اللوغاريتمي") plt.show() .. image-sg:: /auto_examples/gaussian_process/images/sphx_glr_plot_gpr_noisy_005.png :alt: احتمالية الهامش اللوغاريتمي :srcset: /auto_examples/gaussian_process/images/sphx_glr_plot_gpr_noisy_005.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 166-169 نرى أن هناك حدين أدنى محليين يتوافقان مع توليفة المعلمات الفائقة التي تم العثور عليها سابقًا. اعتمادًا على القيم الأولية للمعلمات الفائقة، قد يتقارب التحسين القائم على التدرج أو لا يتقارب مع أفضل نموذج. لذلك من المهم تكرار التحسين عدة مرات لتهيئات مختلفة. يمكن القيام بذلك عن طريق تعيين المعلمة `n_restarts_optimizer` للفئة :class:`~sklearn.gaussian_process.GaussianProcessRegressor`. دعونا نحاول مرة أخرى ملاءمة نموذجنا بالقيم الأولية السيئة ولكن هذه المرة مع 10 عمليات إعادة تشغيل عشوائية. .. GENERATED FROM PYTHON SOURCE LINES 170-180 .. code-block:: Python kernel = 1.0 * RBF(length_scale=1e1, length_scale_bounds=(1e-2, 1e3)) + WhiteKernel( noise_level=1, noise_level_bounds=(1e-10, 1e1) ) gpr = GaussianProcessRegressor( kernel=kernel, alpha=0.0, n_restarts_optimizer=10, random_state=0 ) gpr.fit(X_train, y_train) y_mean, y_std = gpr.predict(X, return_std=True) .. GENERATED FROM PYTHON SOURCE LINES 181-195 .. code-block:: Python plt.plot(X, y, label="الإشارة المتوقعة") plt.scatter(x=X_train[:, 0], y=y_train, color="black", alpha=0.4, label="الملاحظات") plt.errorbar(X, y_mean, y_std, label="المتوسط اللاحق ± الانحراف المعياري") plt.legend() plt.xlabel("X") plt.ylabel("y") _ = plt.title( ( f"القيمة الأولية: {kernel}\nالقيمة المثلى: {gpr.kernel_}\nاحتمالية الهامش اللوغاريتمي: " f"{gpr.log_marginal_likelihood(gpr.kernel_.theta)}" ), fontsize=8, ) .. image-sg:: /auto_examples/gaussian_process/images/sphx_glr_plot_gpr_noisy_006.png :alt: القيمة الأولية: 1**2 * RBF(length_scale=10) + WhiteKernel(noise_level=1) القيمة المثلى: 1.05**2 * RBF(length_scale=0.569) + WhiteKernel(noise_level=0.134) احتمالية الهامش اللوغاريتمي: -18.429732528970852 :srcset: /auto_examples/gaussian_process/images/sphx_glr_plot_gpr_noisy_006.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 196-197 كما كنا نأمل، تسمح عمليات إعادة التشغيل العشوائية للتحسين بالعثور على أفضل مجموعة من المعلمات الفائقة على الرغم من القيم الأولية السيئة. .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 6.884 seconds) .. _sphx_glr_download_auto_examples_gaussian_process_plot_gpr_noisy.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/gaussian_process/plot_gpr_noisy.ipynb :alt: Launch binder :width: 150 px .. container:: lite-badge .. image:: images/jupyterlite_badge_logo.svg :target: ../../lite/lab/index.html?path=auto_examples/gaussian_process/plot_gpr_noisy.ipynb :alt: Launch JupyterLite :width: 150 px .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_gpr_noisy.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_gpr_noisy.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_gpr_noisy.zip ` .. include:: plot_gpr_noisy.recommendations .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_