.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/manifold/plot_lle_digits.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_manifold_plot_lle_digits.py: ============================================================================= تعلم متعدد الشعب على الأرقام المكتوبة بخط اليد: التضمين الخطي المحلي، Isomap... ============================================================================= نوضح تقنيات التضمين المختلفة على مجموعة بيانات الأرقام. .. GENERATED FROM PYTHON SOURCE LINES 9-14 .. code-block:: Python # Authors: The scikit-learn developers # SPDX-License-Identifier: BSD-3-Clause .. GENERATED FROM PYTHON SOURCE LINES 15-18 تحميل مجموعة بيانات الأرقام ------------------- سنقوم بتحميل مجموعة بيانات الأرقام ونستخدم فقط أول ستة من الفئات العشرة المتاحة. .. GENERATED FROM PYTHON SOURCE LINES 18-25 .. code-block:: Python from sklearn.datasets import load_digits digits = load_digits(n_class=6) X, y = digits.data, digits.target n_samples, n_features = X.shape n_neighbors = 30 .. GENERATED FROM PYTHON SOURCE LINES 26-27 يمكننا رسم أول مائة رقم من مجموعة البيانات هذه. .. GENERATED FROM PYTHON SOURCE LINES 27-35 .. code-block:: Python import matplotlib.pyplot as plt fig, axs = plt.subplots(nrows=10, ncols=10, figsize=(6, 6)) for idx, ax in enumerate(axs.ravel()): ax.imshow(X[idx].reshape((8, 8)), cmap=plt.cm.binary) ax.axis("off") _ = fig.suptitle("مجموعة مختارة من مجموعة بيانات الأرقام ذات 64 بُعدًا", fontsize=16) .. image-sg:: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_001.png :alt: مجموعة مختارة من مجموعة بيانات الأرقام ذات 64 بُعدًا :srcset: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_001.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 36-42 دالة مساعدة لرسم التضمين --------------------------------- أدناه، سنستخدم تقنيات مختلفة لتضمين مجموعة بيانات الأرقام. سنرسم إسقاط البيانات الأصلية على كل تضمين. سيسمح لنا ذلك بالتحقق مما إذا كانت الأرقام مجمعة معًا في فضاء التضمين، أو منتشرة عبره. .. GENERATED FROM PYTHON SOURCE LINES 42-80 .. code-block:: Python import numpy as np from matplotlib import offsetbox from sklearn.preprocessing import MinMaxScaler def plot_embedding(X, title): _, ax = plt.subplots() X = MinMaxScaler().fit_transform(X) for digit in digits.target_names: ax.scatter( *X[y == digit].T, marker=f"${digit}$", s=60, color=plt.cm.Dark2(digit), alpha=0.425, zorder=2, ) shown_images = np.array([[1.0, 1.0]]) # just something big for i in range(X.shape[0]): # plot every digit on the embedding # show an annotation box for a group of digits dist = np.sum((X[i] - shown_images) ** 2, 1) if np.min(dist) < 4e-3: # don't show points that are too close continue shown_images = np.concatenate([shown_images, [X[i]]], axis=0) imagebox = offsetbox.AnnotationBbox( offsetbox.OffsetImage(digits.images[i], cmap=plt.cm.gray_r), X[i] ) imagebox.set(zorder=1) ax.add_artist(imagebox) ax.set_title(title) ax.axis("off") .. GENERATED FROM PYTHON SOURCE LINES 81-99 مقارنة تقنيات التضمين ------------------------------- أدناه، نقارن بين التقنيات المختلفة. ومع ذلك، هناك بعض الأشياء التي يجب ملاحظتها: * :class:`~sklearn.ensemble.RandomTreesEmbedding` ليست من الناحية الفنية طريقة تضمين متعدد الشعب، حيث إنها تتعلم تمثيلًا عالي الأبعاد والذي نطبق عليه طريقة لخفض الأبعاد. ومع ذلك، غالبًا ما يكون من المفيد تحويل مجموعة البيانات إلى تمثيل يكون فيه من الممكن فصل الفئات خطيًا. * :class:`~sklearn.discriminant_analysis.LinearDiscriminantAnalysis` و :class:`~sklearn.neighbors.NeighborhoodComponentsAnalysis`، هما طريقتان لخفض الأبعاد خاضعتان للإشراف، أي أنهما تستخدمان الملصقات المقدمة، على عكس الطرق الأخرى. * :class:`~sklearn.manifold.TSNE` يتم تهيئتها بالتضمين الذي تم إنشاؤه بواسطة PCA في هذا المثال. وهذا يضمن الاستقرار الشامل للتضمين، أي أن التضمين لا يعتمد على التهيئة العشوائية. .. GENERATED FROM PYTHON SOURCE LINES 99-154 .. code-block:: Python from sklearn.decomposition import TruncatedSVD from sklearn.discriminant_analysis import LinearDiscriminantAnalysis from sklearn.ensemble import RandomTreesEmbedding from sklearn.manifold import ( MDS, TSNE, Isomap, LocallyLinearEmbedding, SpectralEmbedding, ) from sklearn.neighbors import NeighborhoodComponentsAnalysis from sklearn.pipeline import make_pipeline from sklearn.random_projection import SparseRandomProjection embeddings = { "تضمين الإسقاط العشوائي": SparseRandomProjection( n_components=2, random_state=42 ), "تضمين SVD المبتور": TruncatedSVD(n_components=2), "تضمين تحليل التمايز الخطي": LinearDiscriminantAnalysis( n_components=2 ), "تضمين Isomap": Isomap(n_neighbors=n_neighbors, n_components=2), "تضمين LLE القياسي": LocallyLinearEmbedding( n_neighbors=n_neighbors, n_components=2, method="standard" ), "تضمين LLE المعدل": LocallyLinearEmbedding( n_neighbors=n_neighbors, n_components=2, method="modified" ), "تضمين Hessian LLE": LocallyLinearEmbedding( n_neighbors=n_neighbors, n_components=2, method="hessian" ), "تضمين LTSA LLE": LocallyLinearEmbedding( n_neighbors=n_neighbors, n_components=2, method="ltsa" ), "تضمين MDS": MDS(n_components=2, n_init=1, max_iter=120, n_jobs=2), "تضمين الأشجار العشوائية": make_pipeline( RandomTreesEmbedding(n_estimators=200, max_depth=5, random_state=0), TruncatedSVD(n_components=2), ), "تضمين الطيف": SpectralEmbedding( n_components=2, random_state=0, eigen_solver="arpack" ), "تضمين t-SNE": TSNE( n_components=2, max_iter=500, n_iter_without_progress=150, n_jobs=2, random_state=0, ), "تضمين NCA": NeighborhoodComponentsAnalysis( n_components=2, init="pca", random_state=0 ), } .. GENERATED FROM PYTHON SOURCE LINES 155-158 بمجرد أن نعلن عن جميع الطرق ذات الأهمية، يمكننا تشغيل وإجراء إسقاط البيانات الأصلية. سنخزن البيانات المسقطة بالإضافة إلى الوقت الحسابي اللازم لإجراء كل إسقاط. .. GENERATED FROM PYTHON SOURCE LINES 158-173 .. code-block:: Python from time import time projections, timing = {}, {} for name, transformer in embeddings.items(): if name.startswith("تحليل التمايز الخطي"): data = X.copy() data.flat[:: X.shape[1] + 1] += 0.01 # Make X invertible else: data = X print(f"حساب {name}...") start_time = time() projections[name] = transformer.fit_transform(data, y) timing[name] = time() - start_time .. rst-class:: sphx-glr-script-out .. code-block:: none حساب تضمين الإسقاط العشوائي... حساب تضمين SVD المبتور... حساب تضمين تحليل التمايز الخطي... حساب تضمين Isomap... حساب تضمين LLE القياسي... حساب تضمين LLE المعدل... حساب تضمين Hessian LLE... حساب تضمين LTSA LLE... حساب تضمين MDS... حساب تضمين الأشجار العشوائية... حساب تضمين الطيف... حساب تضمين t-SNE... حساب تضمين NCA... .. GENERATED FROM PYTHON SOURCE LINES 174-175 أخيرًا، يمكننا رسم الإسقاط الناتج المعطى بواسطة كل طريقة. .. GENERATED FROM PYTHON SOURCE LINES 175-181 .. code-block:: Python for name in timing: title = f"{name} (الوقت {timing[name]:.3f}s)" plot_embedding(projections[name], title) plt.show() .. rst-class:: sphx-glr-horizontal * .. image-sg:: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_002.png :alt: تضمين الإسقاط العشوائي (الوقت 0.003s) :srcset: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_002.png :class: sphx-glr-multi-img * .. image-sg:: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_003.png :alt: تضمين SVD المبتور (الوقت 0.374s) :srcset: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_003.png :class: sphx-glr-multi-img * .. image-sg:: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_004.png :alt: تضمين تحليل التمايز الخطي (الوقت 0.103s) :srcset: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_004.png :class: sphx-glr-multi-img * .. image-sg:: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_005.png :alt: تضمين Isomap (الوقت 0.896s) :srcset: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_005.png :class: sphx-glr-multi-img * .. image-sg:: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_006.png :alt: تضمين LLE القياسي (الوقت 0.318s) :srcset: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_006.png :class: sphx-glr-multi-img * .. image-sg:: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_007.png :alt: تضمين LLE المعدل (الوقت 2.991s) :srcset: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_007.png :class: sphx-glr-multi-img * .. image-sg:: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_008.png :alt: تضمين Hessian LLE (الوقت 1.889s) :srcset: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_008.png :class: sphx-glr-multi-img * .. image-sg:: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_009.png :alt: تضمين LTSA LLE (الوقت 2.609s) :srcset: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_009.png :class: sphx-glr-multi-img * .. image-sg:: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_010.png :alt: تضمين MDS (الوقت 3.651s) :srcset: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_010.png :class: sphx-glr-multi-img * .. image-sg:: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_011.png :alt: تضمين الأشجار العشوائية (الوقت 0.264s) :srcset: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_011.png :class: sphx-glr-multi-img * .. image-sg:: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_012.png :alt: تضمين الطيف (الوقت 0.263s) :srcset: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_012.png :class: sphx-glr-multi-img * .. image-sg:: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_013.png :alt: تضمين t-SNE (الوقت 2.000s) :srcset: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_013.png :class: sphx-glr-multi-img * .. image-sg:: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_014.png :alt: تضمين NCA (الوقت 2.656s) :srcset: /auto_examples/manifold/images/sphx_glr_plot_lle_digits_014.png :class: sphx-glr-multi-img .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 24.242 seconds) .. _sphx_glr_download_auto_examples_manifold_plot_lle_digits.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/manifold/plot_lle_digits.ipynb :alt: Launch binder :width: 150 px .. container:: lite-badge .. image:: images/jupyterlite_badge_logo.svg :target: ../../lite/lab/index.html?path=auto_examples/manifold/plot_lle_digits.ipynb :alt: Launch JupyterLite :width: 150 px .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_lle_digits.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_lle_digits.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_lle_digits.zip ` .. include:: plot_lle_digits.recommendations .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_