.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/linear_model/plot_ard.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_linear_model_plot_ard.py: # مقارنة المنحنيات الخطية للانحدار البايزي ============================================= يقارن هذا المثال بين طريقتين مختلفتين للانحدار البايزي: - :ref:`automatic_relevance_determination` - :ref:`bayesian_ridge_regression` في الجزء الأول، نستخدم نموذج :ref:`ordinary_least_squares` (OLS) كخط أساس لمقارنة معاملات النماذج فيما يتعلق بالمعاملات الحقيقية. بعد ذلك، نوضح أن تقدير مثل هذه النماذج يتم عن طريق زيادة تسجيل الاحتمال الهامشي للملاحظات بشكل تكراري. في القسم الأخير، نرسم التنبؤات وعدم اليقين لكل من الانحدار البايزي والانحدار الخطي باستخدام توسيع الميزات متعددة الحدود لتناسب العلاقة غير الخطية بين `X` و `y`. .. GENERATED FROM PYTHON SOURCE LINES 14-17 .. code-block:: Python # المؤلفون: مطوري سكايلرن # معرف الترخيص: BSD-3-Clause .. GENERATED FROM PYTHON SOURCE LINES 18-29 متانة النماذج لاستعادة الأوزان الحقيقية ===================================================== توليد مجموعة بيانات صناعية -------------------------- نقوم بتوليد مجموعة بيانات حيث `X` و `y` مرتبطان خطيًا: 10 من ميزات `X` سيتم استخدامها لتوليد `y`. الميزات الأخرى ليست مفيدة في التنبؤ بـ `y`. بالإضافة إلى ذلك، نقوم بتوليد مجموعة بيانات حيث `n_samples == n_features`. مثل هذا الإعداد يمثل تحديًا لنموذج OLS وقد يؤدي إلى أوزان كبيرة بشكل تعسفي. وجود تقدير مسبق للأوزان وعقوبة يخفف من المشكلة. وأخيرًا، تتم إضافة ضجيج غاوسي. .. GENERATED FROM PYTHON SOURCE LINES 29-41 .. code-block:: Python from sklearn.datasets import make_regression X, y, true_weights = make_regression( n_samples=100, n_features=100, n_informative=10, noise=8, coef=True, random_state=42, ) .. GENERATED FROM PYTHON SOURCE LINES 42-47 ملاءمة المنحنيات ------------------ نقوم الآن بملاءمة كلا النموذجين البايزيين ونموذج OLS لمقارنة معاملات النماذج لاحقًا. .. GENERATED FROM PYTHON SOURCE LINES 47-64 .. code-block:: Python import pandas as pd from sklearn.linear_model import ARDRegression, BayesianRidge, LinearRegression olr = LinearRegression().fit(X, y) brr = BayesianRidge(compute_score=True, max_iter=30).fit(X, y) ard = ARDRegression(compute_score=True, max_iter=30).fit(X, y) df = pd.DataFrame( { "Weights of true generative process": true_weights, "ARDRegression": ard.coef_, "BayesianRidge": brr.coef_, "LinearRegression": olr.coef_, } ) .. GENERATED FROM PYTHON SOURCE LINES 65-70 رسم المعاملات الحقيقية والمقدرة ---------------------------------------- نقارن الآن معاملات كل نموذج بأوزان النموذج التوليدي الحقيقي. .. GENERATED FROM PYTHON SOURCE LINES 70-86 .. code-block:: Python import matplotlib.pyplot as plt import seaborn as sns from matplotlib.colors import SymLogNorm plt.figure(figsize=(10, 6)) ax = sns.heatmap( df.T, norm=SymLogNorm(linthresh=10e-4, vmin=-80, vmax=80), cbar_kws={"label": "coefficients' values"}, cmap="seismic_r", ) plt.ylabel("linear model") plt.xlabel("coefficients") plt.tight_layout(rect=(0, 0, 1, 0.95)) _ = plt.title("Models' coefficients") .. image-sg:: /auto_examples/linear_model/images/sphx_glr_plot_ard_001.png :alt: Models' coefficients :srcset: /auto_examples/linear_model/images/sphx_glr_plot_ard_001.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 87-92 بسبب الضجيج المُضاف، لا يستعيد أي من النماذج الأوزان الحقيقية. في الواقع، جميع النماذج لديها دائمًا أكثر من 10 معاملات غير صفرية. مقارنة بمقدر OLS ، فإن المعاملات باستخدام الانحدار البايزي متعدد الحدود تتحول قليلاً نحو الصفر، مما يجعلها أكثر استقرارًا. يوفر الانحدار البايزي متعدد الحدود حلاً أكثر ندرة: يتم تعيين بعض المعاملات غير المعلوماتية بدقة إلى الصفر، في حين أن البعض الآخر أقرب إلى الصفر. لا تزال بعض المعاملات غير المعلوماتية موجودة وتحتفظ بقيم كبيرة. .. GENERATED FROM PYTHON SOURCE LINES 94-96 رسم تسجيل الاحتمال الهامشي -------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 96-108 .. code-block:: Python import numpy as np ard_scores = -np.array(ard.scores_) brr_scores = -np.array(brr.scores_) plt.plot(ard_scores, color="navy", label="ARD") plt.plot(brr_scores, color="red", label="BayesianRidge") plt.ylabel("Log-likelihood") plt.xlabel("Iterations") plt.xlim(1, 30) plt.legend() _ = plt.title("Models log-likelihood") .. image-sg:: /auto_examples/linear_model/images/sphx_glr_plot_ard_002.png :alt: Models log-likelihood :srcset: /auto_examples/linear_model/images/sphx_glr_plot_ard_002.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 109-118 في الواقع، يقلل كلا النموذجين من تسجيل الاحتمال حتى حد تعسفي محدد بواسطة معلمة `max_iter`. الانحدارات البايزية مع توسيع الميزات متعددة الحدود ====================================================== توليد مجموعة بيانات صناعية -------------------------- نقوم بإنشاء هدف يكون دالة غير خطية للميزة المدخلة. يتم إضافة ضجيج يتبع توزيع موحد قياسي. .. GENERATED FROM PYTHON SOURCE LINES 118-138 .. code-block:: Python from sklearn.pipeline import make_pipeline from sklearn.preprocessing import PolynomialFeatures, StandardScaler rng = np.random.RandomState(0) n_samples = 110 # فرز البيانات لتسهيل الرسم لاحقًا X = np.sort(-10 * rng.rand(n_samples) + 10) noise = rng.normal(0, 1, n_samples) * 1.35 y = np.sqrt(X) * np.sin(X) + noise full_data = pd.DataFrame({"input_feature": X, "target": y}) X = X.reshape((-1, 1)) # الاستقراء X_plot = np.linspace(10, 10.4, 10) y_plot = np.sqrt(X_plot) * np.sin(X_plot) X_plot = np.concatenate((X, X_plot.reshape((-1, 1)))) y_plot = np.concatenate((y - noise, y_plot)) .. GENERATED FROM PYTHON SOURCE LINES 139-148 ملاءمة المنحنيات ------------------ هنا نحاول استخدام متعددة حدود من الدرجة 10 لإحداث زيادة في التكيف، على الرغم من أن النماذج الخطية البايزية تنظم حجم معاملات متعددة الحدود. بما أن `fit_intercept=True` بشكل افتراضي لـ :class:`~sklearn.linear_model.ARDRegression` و :class:`~sklearn.linear_model.BayesianRidge`، فإن :class:`~sklearn.preprocessing.PolynomialFeatures` لا يجب أن يقدم ميزة انحياز إضافية. من خلال تعيين `return_std=True`، فإن المنحنيات الانحدارية البايزية تعيد الانحراف المعياري لتوزيع الاحتمال اللاحق لمعاملات النموذج. .. GENERATED FROM PYTHON SOURCE LINES 148-163 .. code-block:: Python ard_poly = make_pipeline( PolynomialFeatures(degree=10, include_bias=False), StandardScaler(), ARDRegression(), ).fit(X, y) brr_poly = make_pipeline( PolynomialFeatures(degree=10, include_bias=False), StandardScaler(), BayesianRidge(), ).fit(X, y) y_ard, y_ard_std = ard_poly.predict(X_plot, return_std=True) y_brr, y_brr_std = brr_poly.predict(X_plot, return_std=True) .. GENERATED FROM PYTHON SOURCE LINES 164-166 رسم الانحدارات متعددة الحدود مع أخطاء معايير الدرجات ------------------------------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 166-190 .. code-block:: Python ax = sns.scatterplot( data=full_data, x="input_feature", y="target", color="black", alpha=0.75 ) ax.plot(X_plot, y_plot, color="black", label="Ground Truth") ax.plot(X_plot, y_brr, color="red", label="BayesianRidge with polynomial features") ax.plot(X_plot, y_ard, color="navy", label="ARD with polynomial features") ax.fill_between( X_plot.ravel(), y_ard - y_ard_std, y_ard + y_ard_std, color="navy", alpha=0.3, ) ax.fill_between( X_plot.ravel(), y_brr - y_brr_std, y_brr + y_brr_std, color="red", alpha=0.3, ) ax.legend() _ = ax.set_title("Polynomial fit of a non-linear feature") .. image-sg:: /auto_examples/linear_model/images/sphx_glr_plot_ard_003.png :alt: Polynomial fit of a non-linear feature :srcset: /auto_examples/linear_model/images/sphx_glr_plot_ard_003.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 191-198 تمثل أشرطة الخطأ انحرافًا معياريًا واحدًا للتوزيع الغاوسي نقاط الاستعلام. لاحظ أن الانحدار البايزي متعدد الحدود يلتقط الحقيقة الأرضية على أفضل وجه عند استخدام المعلمات الافتراضية في كلا النموذجين، ولكن تقليل معلمة `lambda_init` للانحدار البايزي متعدد الحدود يمكن أن يقلل من تحيزه (انظر المثال :ref:`sphx_glr_auto_examples_linear_model_plot_bayesian_ridge_curvefit.py`). وأخيرًا، بسبب القيود الداخلية للانحدار متعدد الحدود، يفشل كلا النموذجان عند الاستقراء. .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 1.224 seconds) .. _sphx_glr_download_auto_examples_linear_model_plot_ard.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/linear_model/plot_ard.ipynb :alt: Launch binder :width: 150 px .. container:: lite-badge .. image:: images/jupyterlite_badge_logo.svg :target: ../../lite/lab/index.html?path=auto_examples/linear_model/plot_ard.ipynb :alt: Launch JupyterLite :width: 150 px .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_ard.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_ard.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_ard.zip ` .. include:: plot_ard.recommendations .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_