.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/model_selection/plot_tuned_decision_threshold.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_model_selection_plot_tuned_decision_threshold.py: ====================================================== ضبط نقطة القطع لوظيفة القرار بعد التدريب ====================================================== بمجرد تدريب مصنف ثنائي، تقوم طريقة :term:`predict` بإخراج تنبؤات تسمية الفئة المقابلة لعملية عتبية إما لـ :term:`decision_function` أو لـ :term:`predict_proba` الإخراج. ويتم تعريف العتبة الافتراضية على أنها تقدير احتمالي لاحق يبلغ 0.5 أو درجة قرار تبلغ 0.0. ومع ذلك، قد لا تكون هذه الاستراتيجية الافتراضية مثالية للمهمة قيد التنفيذ. يوضح هذا المثال كيفية استخدام :class:`~sklearn.model_selection.TunedThresholdClassifierCV` لضبط عتبة القرار، اعتمادًا على مقياس الاهتمام. .. GENERATED FROM PYTHON SOURCE LINES 12-16 .. code-block:: Python # المؤلفون: مطوري scikit-learn # معرف الترخيص: BSD-3-Clause .. GENERATED FROM PYTHON SOURCE LINES 17-23 مجموعة بيانات مرض السكري -------------------- لتوضيح ضبط عتبة القرار، سنستخدم مجموعة بيانات مرض السكري. هذه المجموعة متاحة على OpenML: https://www.openml.org/d/37. نستخدم :func:`~sklearn.datasets.fetch_openml` الدالة لاسترجاع هذه المجموعة. .. GENERATED FROM PYTHON SOURCE LINES 23-29 .. code-block:: Python from sklearn.datasets import fetch_openml diabetes = fetch_openml(data_id=37, as_frame=True, parser="pandas") data, target = diabetes.data, diabetes.target .. GENERATED FROM PYTHON SOURCE LINES 30-31 نلقي نظرة على الهدف لفهم نوع المشكلة التي نتعامل معها. .. GENERATED FROM PYTHON SOURCE LINES 31-33 .. code-block:: Python target.value_counts() .. rst-class:: sphx-glr-script-out .. code-block:: none class tested_negative 500 tested_positive 268 Name: count, dtype: int64 .. GENERATED FROM PYTHON SOURCE LINES 34-38 يمكننا أن نرى أننا نتعامل مع مشكلة تصنيف ثنائي. نظرًا لأن التصنيفات غير مشفرة على أنها 0 و 1، فإننا نجعلها صريحة بأننا نعتبر الفئة المسماة "tested_negative" كالفئة السلبية (وهي أيضًا الأكثر تكرارًا) والفئة المسماة "tested_positive" كالفئة الإيجابية: .. GENERATED FROM PYTHON SOURCE LINES 38-40 .. code-block:: Python neg_label, pos_label = target.value_counts().index .. GENERATED FROM PYTHON SOURCE LINES 41-50 يمكننا أيضًا ملاحظة أن هذه المشكلة الثنائية غير متوازنة إلى حد ما حيث لدينا حوالي ضعف عدد العينات من الفئة السلبية مقارنة بالفئة الإيجابية. عندما يتعلق الأمر بالتقييم، يجب أن نأخذ هذا الجانب في الاعتبار لتفسير النتائج. مصنفنا الأساسي ---------------------- نحدد نموذجًا تنبؤيًا أساسيًا يتكون من مقياس متبوعًا بمصنف الانحدار اللوجستي. .. GENERATED FROM PYTHON SOURCE LINES 50-57 .. code-block:: Python from sklearn.linear_model import LogisticRegression from sklearn.pipeline import make_pipeline from sklearn.preprocessing import StandardScaler model = make_pipeline(StandardScaler(), LogisticRegression()) model .. raw:: html
Pipeline(steps=[('standardscaler', StandardScaler()),
                    ('logisticregression', LogisticRegression())])
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.


.. GENERATED FROM PYTHON SOURCE LINES 58-68 نقيم نموذجنا باستخدام التحقق المتقاطع. نستخدم الدقة والدقة المتوازنة للإبلاغ عن أداء نموذجنا. الدقة المتوازنة هي مقياس أقل حساسية لاختلال التوازن في الفئة وسيسمح لنا بوضع درجة الدقة في المنظور. يسمح لنا التحقق المتقاطع بدراسة تباين عتبة القرار عبر تقسيمات مختلفة للبيانات. ومع ذلك، فإن مجموعة البيانات صغيرة إلى حد ما وسيكون من الضار استخدام أكثر من 5 طيات لتقييم التشتت. لذلك، نستخدم :class:`~sklearn.model_selection.RepeatedStratifiedKFold` حيث نطبق عدة تكرارات من التحقق المتقاطع 5-fold. .. GENERATED FROM PYTHON SOURCE LINES 68-93 .. code-block:: Python import pandas as pd from sklearn.model_selection import RepeatedStratifiedKFold, cross_validate scoring = ["accuracy", "balanced_accuracy"] cv_scores = [ "train_accuracy", "test_accuracy", "train_balanced_accuracy", "test_balanced_accuracy", ] cv = RepeatedStratifiedKFold(n_splits=5, n_repeats=10, random_state=42) cv_results_vanilla_model = pd.DataFrame( cross_validate( model, data, target, scoring=scoring, cv=cv, return_train_score=True, return_estimator=True, ) ) cv_results_vanilla_model[cv_scores].aggregate(["mean", "std"]).T .. raw:: html
mean std
train_accuracy 0.779751 0.007822
test_accuracy 0.770926 0.030585
train_balanced_accuracy 0.732913 0.009788
test_balanced_accuracy 0.723665 0.035914


.. GENERATED FROM PYTHON SOURCE LINES 94-112 ينجح نموذجنا التنبؤي في فهم العلاقة بين البيانات والهدف. درجات التدريب والاختبار قريبة من بعضها البعض، مما يعني أن نموذجنا التنبؤي لا يعاني من الإفراط في الملاءمة. يمكننا أيضًا ملاحظة أن الدقة المتوازنة هي أقل من الدقة، بسبب اختلال التوازن في الفئة المذكور سابقًا. بالنسبة لهذا المصنف، نترك عتبة القرار، المستخدمة لتحويل احتمال الفئة الإيجابية إلى تنبؤ الفئة، إلى قيمتها الافتراضية: 0.5. ومع ذلك، قد لا تكون هذه العتبة مثالية. إذا كان اهتمامنا هو تعظيم الدقة المتوازنة، يجب أن نختار عتبة أخرى من شأنها أن تعظم هذا المقياس. يسمح المقيّم :class:`~sklearn.model_selection.TunedThresholdClassifierCV` بضبط عتبة القرار لمصنف معين بناءً على مقياس الاهتمام. ضبط عتبة القرار ----------------------------- ننشئ :class:`~sklearn.model_selection.TunedThresholdClassifierCV` ونقوم بتهيئته لتعظيم الدقة المتوازنة. نقيم النموذج باستخدام نفس استراتيجية التحقق المتقاطع كما في السابق. .. GENERATED FROM PYTHON SOURCE LINES 112-128 .. code-block:: Python from sklearn.model_selection import TunedThresholdClassifierCV tuned_model = TunedThresholdClassifierCV(estimator=model, scoring="balanced_accuracy") cv_results_tuned_model = pd.DataFrame( cross_validate( tuned_model, data, target, scoring=scoring, cv=cv, return_train_score=True, return_estimator=True, ) ) cv_results_tuned_model[cv_scores].aggregate(["mean", "std"]).T .. raw:: html
mean std
train_accuracy 0.752470 0.015579
test_accuracy 0.739950 0.036592
train_balanced_accuracy 0.757915 0.009747
test_balanced_accuracy 0.744029 0.035445


.. GENERATED FROM PYTHON SOURCE LINES 129-136 بالمقارنة مع النموذج الأساسي، نلاحظ أن درجة الدقة المتوازنة زادت. بالطبع، يأتي ذلك على حساب انخفاض درجة الدقة. هذا يعني أن نموذجنا أصبح الآن أكثر حساسية للفئة الإيجابية ولكنه يرتكب أخطاء أكثر على الفئة السلبية. ومع ذلك، من المهم ملاحظة أن هذا النموذج التنبؤي المضبوط هو داخليًا نفس النموذج الأساسي: لديهم نفس المعاملات المناسبة. .. GENERATED FROM PYTHON SOURCE LINES 136-155 .. code-block:: Python import matplotlib.pyplot as plt vanilla_model_coef = pd.DataFrame( [est[-1].coef_.ravel() for est in cv_results_vanilla_model["estimator"]], columns=diabetes.feature_names, ) tuned_model_coef = pd.DataFrame( [est.estimator_[-1].coef_.ravel() for est in cv_results_tuned_model["estimator"]], columns=diabetes.feature_names, ) fig, ax = plt.subplots(ncols=2, figsize=(12, 4), sharex=True, sharey=True) vanilla_model_coef.boxplot(ax=ax[0]) ax[0].set_ylabel("قيمة المعامل") ax[0].set_title("النموذج الأساسي") tuned_model_coef.boxplot(ax=ax[1]) ax[1].set_title("النموذج المضبوط") _ = fig.suptitle("معاملات النماذج التنبؤية") .. image-sg:: /auto_examples/model_selection/images/sphx_glr_plot_tuned_decision_threshold_001.png :alt: معاملات النماذج التنبؤية, النموذج الأساسي, النموذج المضبوط :srcset: /auto_examples/model_selection/images/sphx_glr_plot_tuned_decision_threshold_001.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 156-157 تم تغيير عتبة القرار لكل نموذج فقط أثناء التحقق المتقاطع. .. GENERATED FROM PYTHON SOURCE LINES 157-173 .. code-block:: Python decision_threshold = pd.Series( [est.best_threshold_ for est in cv_results_tuned_model["estimator"]], ) ax = decision_threshold.plot.kde() ax.axvline( decision_threshold.mean(), color="k", linestyle="--", label=f"عتبة القرار المتوسطة: {decision_threshold.mean():.2f}", ) ax.set_xlabel("عتبة القرار") ax.legend(loc="upper right") _ = ax.set_title( "توزيع عتبة القرار \nعبر طيات التحقق المتقاطع المختلفة" ) .. image-sg:: /auto_examples/model_selection/images/sphx_glr_plot_tuned_decision_threshold_002.png :alt: توزيع عتبة القرار عبر طيات التحقق المتقاطع المختلفة :srcset: /auto_examples/model_selection/images/sphx_glr_plot_tuned_decision_threshold_002.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 174-182 في المتوسط، تعظم عتبة القرار التي تبلغ حوالي 0.32 الدقة المتوازنة، والتي تختلف عن عتبة القرار الافتراضية البالغة 0.5. وبالتالي، فإن ضبط عتبة القرار مهم بشكل خاص عندما يتم استخدام ناتج النموذج التنبؤي لاتخاذ القرارات. بالإضافة إلى ذلك، يجب اختيار المقياس المستخدم لضبط عتبة القرار بعناية. هنا، استخدمنا الدقة المتوازنة ولكن قد لا يكون المقياس الأنسب للمشكلة قيد التنفيذ. عادةً ما يعتمد اختيار المقياس "الصحيح" على المشكلة وقد يتطلب بعض المعرفة بالمجال. راجع المثال المعنون، :ref:`sphx_glr_auto_examples_model_selection_plot_cost_sensitive_learning.py`، لمزيد من التفاصيل. .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 39.766 seconds) .. _sphx_glr_download_auto_examples_model_selection_plot_tuned_decision_threshold.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/model_selection/plot_tuned_decision_threshold.ipynb :alt: Launch binder :width: 150 px .. container:: lite-badge .. image:: images/jupyterlite_badge_logo.svg :target: ../../lite/lab/index.html?path=auto_examples/model_selection/plot_tuned_decision_threshold.ipynb :alt: Launch JupyterLite :width: 150 px .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_tuned_decision_threshold.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_tuned_decision_threshold.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_tuned_decision_threshold.zip ` .. include:: plot_tuned_decision_threshold.recommendations .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_