.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/linear_model/plot_sgd_early_stopping.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_sgd_early_stopping.py: ============================================= إيقاف مبكر لنزول التدرج العشوائي ============================================= نزول التدرج العشوائي هي تقنية تحسين تقلل من دالة الخسارة بطريقة عشوائية، حيث تقوم بخطوة نزول التدرج للعينة تلو الأخرى. وهي طريقة فعالة للغاية لملاءمة النماذج الخطية. باعتبارها طريقة عشوائية، فإن دالة الخسارة لا تنخفض بالضرورة في كل تكرار، والتقارب مضمون فقط في المتوسط. لهذا السبب، قد يكون من الصعب مراقبة التقارب على دالة الخسارة. هناك نهج آخر وهو مراقبة التقارب على درجة التحقق. في هذه الحالة، يتم تقسيم بيانات الإدخال إلى مجموعة تدريب ومجموعة تحقق. ثم يتم ملاءمة النموذج على مجموعة التدريب ومعيار التوقف يعتمد على درجة التنبؤ المحسوبة على مجموعة التحقق. هذا يمكننا من إيجاد أقل عدد من التكرارات الكافية لبناء نموذج يعمم جيداً على البيانات غير المرئية ويقلل من فرصة الإفراط في ملاءمة بيانات التدريب. يتم تنشيط استراتيجية الإيقاف المبكر هذه إذا كان ``early_stopping=True``؛ وإلا فإن معيار التوقف يستخدم فقط خسارة التدريب على كامل بيانات الإدخال. وللسيطرة بشكل أفضل على استراتيجية الإيقاف المبكر، يمكننا تحديد معامل ``validation_fraction`` الذي يحدد نسبة مجموعة البيانات التي نضعها جانباً لحساب درجة التحقق. سيستمر التحسين حتى لا تتحسن درجة التحقق على الأقل ``tol`` خلال آخر ``n_iter_no_change`` تكرارات. العدد الفعلي للتكرارات متاح في الخاصية ``n_iter_``. يوضح هذا المثال كيف يمكن استخدام الإيقاف المبكر في نموذج :class:`~sklearn.linear_model.SGDClassifier` لتحقيق دقة تقريباً نفس النموذج المبني بدون إيقاف مبكر. هذا يمكن أن يقلل بشكل كبير من وقت التدريب. لاحظ أن الدرجات تختلف بين معايير التوقف حتى من التكرارات المبكرة لأن بعض بيانات التدريب يتم استبعادها مع معيار التوقف على درجة التحقق. .. GENERATED FROM PYTHON SOURCE LINES 17-132 .. rst-class:: sphx-glr-horizontal * .. image-sg:: /auto_examples/linear_model/images/sphx_glr_plot_sgd_early_stopping_001.png :alt: Train score, Test score :srcset: /auto_examples/linear_model/images/sphx_glr_plot_sgd_early_stopping_001.png :class: sphx-glr-multi-img * .. image-sg:: /auto_examples/linear_model/images/sphx_glr_plot_sgd_early_stopping_002.png :alt: n_iter_, Fit time (sec) :srcset: /auto_examples/linear_model/images/sphx_glr_plot_sgd_early_stopping_002.png :class: sphx-glr-multi-img .. rst-class:: sphx-glr-script-out .. code-block:: none No stopping criterion: ................................................. Training loss: ................................................. Validation score: ................................................. | .. code-block:: Python # المؤلفون: مطوري scikit-learn # معرف الترخيص: BSD-3-Clause import sys import time import matplotlib.pyplot as plt import numpy as np import pandas as pd from sklearn import linear_model from sklearn.datasets import fetch_openml from sklearn.exceptions import ConvergenceWarning from sklearn.model_selection import train_test_split from sklearn.utils import shuffle from sklearn.utils._testing import ignore_warnings def load_mnist(n_samples=None, class_0="0", class_1="8"): """تحميل MNIST، اختيار فئتين، الخلط وإرجاع n_samples فقط.""" # تحميل البيانات من http://openml.org/d/554 mnist = fetch_openml("mnist_784", version=1, as_frame=False) # أخذ فئتين فقط للتصنيف الثنائي mask = np.logical_or(mnist.target == class_0, mnist.target == class_1) X, y = shuffle(mnist.data[mask], mnist.target[mask], random_state=42) if n_samples is not None: X, y = X[:n_samples], y[:n_samples] return X, y @ignore_warnings(category=ConvergenceWarning) def fit_and_score(estimator, max_iter, X_train, X_test, y_train, y_test): """ملاءمة المحلل على مجموعة التدريب وتقييمه على المجموعتين""" estimator.set_params(max_iter=max_iter) estimator.set_params(random_state=0) start = time.time() estimator.fit(X_train, y_train) fit_time = time.time() - start n_iter = estimator.n_iter_ train_score = estimator.score(X_train, y_train) test_score = estimator.score(X_test, y_test) return fit_time, n_iter, train_score, test_score # تحديد المحللين للمقارنة estimator_dict = { "No stopping criterion": linear_model.SGDClassifier(n_iter_no_change=3), "Training loss": linear_model.SGDClassifier( early_stopping=False, n_iter_no_change=3, tol=0.1 ), "Validation score": linear_model.SGDClassifier( early_stopping=True, n_iter_no_change=3, tol=0.0001, validation_fraction=0.2 ), } # تحميل مجموعة البيانات X, y = load_mnist(n_samples=10000) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=0) results = [] for estimator_name, estimator in estimator_dict.items(): print(estimator_name + ": ", end="") for max_iter in range(1, 50): print(".", end="") sys.stdout.flush() fit_time, n_iter, train_score, test_score = fit_and_score( estimator, max_iter, X_train, X_test, y_train, y_test ) results.append( (estimator_name, max_iter, fit_time, n_iter, train_score, test_score) ) print("") # تحويل النتائج إلى جدول بيانات للرسم بسهولة columns = [ "Stopping criterion", "max_iter", "Fit time (sec)", "n_iter_", "Train score", "Test score", ] results_df = pd.DataFrame(results, columns=columns) # تحديد ما سيتم رسمه lines = "Stopping criterion" x_axis = "max_iter" styles = ["-.", "--", "-"] # الرسم الأول: درجات التدريب والاختبار fig, axes = plt.subplots(nrows=1, ncols=2, sharey=True, figsize=(12, 4)) for ax, y_axis in zip(axes, ["Train score", "Test score"]): for style, (criterion, group_df) in zip(styles, results_df.groupby(lines)): group_df.plot(x=x_axis, y=y_axis, label=criterion, ax=ax, style=style) ax.set_title(y_axis) ax.legend(title=lines) fig.tight_layout() # الرسم الثاني: n_iter و fit time fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(12, 4)) for ax, y_axis in zip(axes, ["n_iter_", "Fit time (sec)"]): for style, (criterion, group_df) in zip(styles, results_df.groupby(lines)): group_df.plot(x=x_axis, y=y_axis, label=criterion, ax=ax, style=style) ax.set_title(y_axis) ax.legend(title=lines) fig.tight_layout() plt.show() .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 27.930 seconds) .. _sphx_glr_download_auto_examples_linear_model_plot_sgd_early_stopping.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_sgd_early_stopping.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_sgd_early_stopping.ipynb :alt: Launch JupyterLite :width: 150 px .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_sgd_early_stopping.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_sgd_early_stopping.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_sgd_early_stopping.zip ` .. include:: plot_sgd_early_stopping.recommendations .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_