.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/decomposition/plot_kernel_pca.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end <sphx_glr_download_auto_examples_decomposition_plot_kernel_pca.py>` to download the full example code. or to run this example in your browser via Binder .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_decomposition_plot_kernel_pca.py: =========== æ ¸ä¸»æˆåˆ†åˆ†æž =========== 本示例展示了主æˆåˆ†åˆ†æžï¼ˆ:class:`~sklearn.decomposition.PCA` )åŠå…¶æ ¸ç‰ˆæœ¬ï¼ˆ:class:`~sklearn.decomposition.KernelPCA` )之间的区别。 一方é¢ï¼Œæˆ‘们展示了 :class:`~sklearn.decomposition.KernelPCA` 能够找到一个线性分离数æ®çš„æŠ•影,而 :class:`~sklearn.decomposition.PCA` 则ä¸èƒ½ã€‚ 最åŽï¼Œæˆ‘们展示了使用 :class:`~sklearn.decomposition.KernelPCA` åè½¬æ¤æŠ•å½±æ˜¯ä¸€ä¸ªè¿‘ä¼¼å€¼ï¼Œè€Œä½¿ç”¨ :class:`~sklearn.decomposition.PCA` 则是精确的。 .. GENERATED FROM PYTHON SOURCE LINES 12-16 .. code-block:: Python # 作者:scikit-learn å¼€å‘者 # SPDX-License-Identifier: BSD-3-Clause .. GENERATED FROM PYTHON SOURCE LINES 17-21 投影数æ®ï¼š `PCA` vs. `KernelPCA` -------------------------------------- 在本节ä¸ï¼Œæˆ‘们展示了在使用主æˆåˆ†åˆ†æžï¼ˆPCAï¼‰æŠ•å½±æ•°æ®æ—¶ä½¿ç”¨æ ¸çš„优势。我们创建了一个由两个嵌套圆组æˆçš„æ•°æ®é›†ã€‚ .. GENERATED FROM PYTHON SOURCE LINES 21-27 .. code-block:: Python from sklearn.datasets import make_circles from sklearn.model_selection import train_test_split X, y = make_circles(n_samples=1_000, factor=0.3, noise=0.05, random_state=0) X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0) .. GENERATED FROM PYTHON SOURCE LINES 28-29 让我们快速æµè§ˆä¸€ä¸‹ç”Ÿæˆçš„æ•°æ®é›†ã€‚ .. GENERATED FROM PYTHON SOURCE LINES 29-43 .. code-block:: Python import matplotlib.pyplot as plt _, (train_ax, test_ax) = plt.subplots(ncols=2, sharex=True, sharey=True, figsize=(8, 4)) train_ax.scatter(X_train[:, 0], X_train[:, 1], c=y_train) train_ax.set_ylabel("Feature #1") train_ax.set_xlabel("Feature #0") train_ax.set_title("Training data") test_ax.scatter(X_test[:, 0], X_test[:, 1], c=y_test) test_ax.set_xlabel("Feature #0") _ = test_ax.set_title("Testing data") .. image-sg:: /auto_examples/decomposition/images/sphx_glr_plot_kernel_pca_001.png :alt: Training data, Testing data :srcset: /auto_examples/decomposition/images/sphx_glr_plot_kernel_pca_001.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 44-47 æ¯ä¸ªç±»åˆ«çš„æ ·æœ¬ä¸èƒ½çº¿æ€§åˆ†ç¦»ï¼šæ²¡æœ‰ä¸€æ¡ç›´çº¿å¯ä»¥å°†å†…集åˆçš„æ ·æœ¬ä¸Žå¤–集åˆçš„æ ·æœ¬åˆ†å¼€ã€‚ çŽ°åœ¨ï¼Œæˆ‘ä»¬å°†ä½¿ç”¨å¸¦æ ¸å’Œä¸å¸¦æ ¸çš„PCAæ¥è§‚å¯Ÿä½¿ç”¨è¿™ç§æ ¸çš„æ•ˆæžœã€‚è¿™é‡Œä½¿ç”¨çš„æ ¸æ˜¯å¾„å‘基函数(RBFï¼‰æ ¸ã€‚ .. GENERATED FROM PYTHON SOURCE LINES 47-57 .. code-block:: Python from sklearn.decomposition import PCA, KernelPCA pca = PCA(n_components=2) kernel_pca = KernelPCA( n_components=None, kernel="rbf", gamma=10, fit_inverse_transform=True, alpha=0.1 ) X_test_pca = pca.fit(X_train).transform(X_test) X_test_kernel_pca = kernel_pca.fit(X_train).transform(X_test) .. GENERATED FROM PYTHON SOURCE LINES 58-77 .. code-block:: Python fig, (orig_data_ax, pca_proj_ax, kernel_pca_proj_ax) = plt.subplots( ncols=3, figsize=(14, 4) ) orig_data_ax.scatter(X_test[:, 0], X_test[:, 1], c=y_test) orig_data_ax.set_ylabel("Feature #1") orig_data_ax.set_xlabel("Feature #0") orig_data_ax.set_title("Testing data") pca_proj_ax.scatter(X_test_pca[:, 0], X_test_pca[:, 1], c=y_test) pca_proj_ax.set_ylabel("Principal component #1") pca_proj_ax.set_xlabel("Principal component #0") pca_proj_ax.set_title("Projection of testing data\n using PCA") kernel_pca_proj_ax.scatter(X_test_kernel_pca[:, 0], X_test_kernel_pca[:, 1], c=y_test) kernel_pca_proj_ax.set_ylabel("Principal component #1") kernel_pca_proj_ax.set_xlabel("Principal component #0") _ = kernel_pca_proj_ax.set_title("Projection of testing data\n using KernelPCA") .. image-sg:: /auto_examples/decomposition/images/sphx_glr_plot_kernel_pca_002.png :alt: Testing data, Projection of testing data using PCA, Projection of testing data using KernelPCA :srcset: /auto_examples/decomposition/images/sphx_glr_plot_kernel_pca_002.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 78-92 我们回顾一下,PCA对数æ®è¿›è¡Œçº¿æ€§å˜æ¢ã€‚直观上,这æ„味ç€åæ ‡ç³»å°†ä»¥å„分é‡çš„æ–¹å·®ä¸ºåŸºå‡†è¿›è¡Œä¸å¿ƒåŒ–ã€é‡æ–°ç¼©æ”¾ï¼Œæœ€åŽè¿›è¡Œæ—‹è½¬ã€‚通过这ç§å˜æ¢å¾—åˆ°çš„æ•°æ®æ˜¯å„å‘åŒæ€§çš„,现在å¯ä»¥æŠ•影到其*主æˆåˆ†*上。 å› æ¤ï¼Œé€šè¿‡è§‚察使用PCA进行的投影(å³ä¸é—´å›¾ï¼‰ï¼Œæˆ‘ä»¬çœ‹åˆ°åœ¨ç¼©æ”¾æ–¹é¢æ²¡æœ‰å˜åŒ–ï¼›å®žé™…ä¸Šï¼Œæ•°æ®æ˜¯ä»¥é›¶ä¸ºä¸å¿ƒçš„两个åŒå¿ƒåœ†ï¼ŒåŽŸå§‹æ•°æ®å·²ç»æ˜¯å„å‘åŒæ€§çš„。然而,我们å¯ä»¥çœ‹åˆ°æ•°æ®å·²ç»è¢«æ—‹è½¬ã€‚总之,我们看到如果è¦å®šä¹‰ä¸€ä¸ªçº¿æ€§åˆ†ç±»å™¨æ¥åŒºåˆ†ä¸¤ä¸ªç±»åˆ«çš„æ ·æœ¬ï¼Œè¿™æ ·çš„æŠ•å½±ä¸ä¼šæœ‰å¸®åŠ©ã€‚ ä½¿ç”¨æ ¸å‡½æ•°å¯ä»¥è¿›è¡Œéžçº¿æ€§æŠ•影。在这里,通过使用RBFæ ¸å‡½æ•°ï¼Œæˆ‘ä»¬æœŸæœ›æŠ•å½±èƒ½å¤Ÿå±•å¼€æ•°æ®é›†ï¼ŒåŒæ—¶å¤§è‡´ä¿æŒåŽŸå§‹ç©ºé—´ä¸å½¼æ¤æŽ¥è¿‘的数æ®ç‚¹å¯¹çš„相对è·ç¦»ã€‚ 我们在å³å›¾ä¸è§‚察到这ç§è¡Œä¸ºï¼šç»™å®šç±»åˆ«çš„æ ·æœ¬æ¯”æ¥è‡ªç›¸åç±»åˆ«çš„æ ·æœ¬æ›´æŽ¥è¿‘å½¼æ¤ï¼Œä»Žè€Œè§£å¼€äº†ä¸¤ä¸ªæ ·æœ¬é›†ã€‚现在,我们å¯ä»¥ä½¿ç”¨çº¿æ€§åˆ†ç±»å™¨æ¥åŒºåˆ†è¿™ä¸¤ä¸ªç±»åˆ«çš„æ ·æœ¬ã€‚ 投影到原始特å¾ç©ºé—´ ------------------------------------------ 在使用 :class:`~sklearn.decomposition.KernelPCA` æ—¶éœ€è¦æ³¨æ„çš„ä¸€ä¸ªç‰¹ç‚¹ä¸Žé‡æž„(å³åœ¨åŽŸå§‹ç‰¹å¾ç©ºé—´ä¸çš„åå‘æŠ•å½±ï¼‰æœ‰å…³ã€‚å¯¹äºŽ :class:`~sklearn.decomposition.PCA` ,如果 `n_components` 与原始特å¾çš„æ•°é‡ç›¸åŒï¼Œåˆ™é‡æž„将是精确的。在这个例åä¸å°±æ˜¯è¿™ç§æƒ…况。 我们å¯ä»¥é€šè¿‡ä½¿ç”¨ :class:`~sklearn.decomposition.KernelPCA` 进行å呿Е影æ¥è°ƒæŸ¥æ˜¯å¦èƒ½å¾—到原始数æ®é›†ã€‚ .. GENERATED FROM PYTHON SOURCE LINES 92-95 .. code-block:: Python X_reconstructed_pca = pca.inverse_transform(pca.transform(X_test)) X_reconstructed_kernel_pca = kernel_pca.inverse_transform(kernel_pca.transform(X_test)) .. GENERATED FROM PYTHON SOURCE LINES 96-115 .. code-block:: Python fig, (orig_data_ax, pca_back_proj_ax, kernel_pca_back_proj_ax) = plt.subplots( ncols=3, sharex=True, sharey=True, figsize=(13, 4) ) orig_data_ax.scatter(X_test[:, 0], X_test[:, 1], c=y_test) orig_data_ax.set_ylabel("Feature #1") orig_data_ax.set_xlabel("Feature #0") orig_data_ax.set_title("Original test data") pca_back_proj_ax.scatter(X_reconstructed_pca[:, 0], X_reconstructed_pca[:, 1], c=y_test) pca_back_proj_ax.set_xlabel("Feature #0") pca_back_proj_ax.set_title("Reconstruction via PCA") kernel_pca_back_proj_ax.scatter( X_reconstructed_kernel_pca[:, 0], X_reconstructed_kernel_pca[:, 1], c=y_test ) kernel_pca_back_proj_ax.set_xlabel("Feature #0") _ = kernel_pca_back_proj_ax.set_title("Reconstruction via KernelPCA") .. image-sg:: /auto_examples/decomposition/images/sphx_glr_plot_kernel_pca_003.png :alt: Original test data, Reconstruction via PCA, Reconstruction via KernelPCA :srcset: /auto_examples/decomposition/images/sphx_glr_plot_kernel_pca_003.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 116-121 虽然我们看到使用 :class:`~sklearn.decomposition.PCA` å¯ä»¥å®Œç¾Žé‡å»ºï¼Œä½†å¯¹äºŽ :class:`~sklearn.decomposition.KernelPCA` 我们观察到ä¸åŒçš„结果。 实际上,:meth:`~sklearn.decomposition.KernelPCA.inverse_transform` ä¸èƒ½ä¾èµ–于解æžçš„åå‘æŠ•å½±ï¼Œå› æ¤æ— æ³•è¿›è¡Œç²¾ç¡®çš„é‡æž„。相å,内部会è®ç»ƒä¸€ä¸ª :class:`~sklearn.kernel_ridge.KernelRidge` æ¥å¦ä¹ ä»Žæ ¸PCA基到原始特å¾ç©ºé—´çš„æ˜ å°„ã€‚å› æ¤ï¼Œè¿™ç§æ–¹æ³•在åå‘æŠ•å½±åˆ°åŽŸå§‹ç‰¹å¾ç©ºé—´æ—¶ä¼šå¼•å…¥å°çš„差异,从而带æ¥è¿‘似。 为了改进使用 :meth:`~sklearn.decomposition.KernelPCA.inverse_transform` çš„é‡å»ºæ•ˆæžœï¼Œå¯ä»¥è°ƒæ•´ :class:`~sklearn.decomposition.KernelPCA` ä¸çš„ `alpha` 傿•°ï¼Œè¯¥å‚数是æ£åˆ™åŒ–é¡¹ï¼Œç”¨äºŽæŽ§åˆ¶åœ¨æ˜ å°„è®ç»ƒè¿‡ç¨‹ä¸å¯¹è®ç»ƒæ•°æ®çš„ä¾èµ–程度。 .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.569 seconds) .. _sphx_glr_download_auto_examples_decomposition_plot_kernel_pca.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/decomposition/plot_kernel_pca.ipynb :alt: Launch binder :width: 150 px .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_kernel_pca.ipynb <plot_kernel_pca.ipynb>` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_kernel_pca.py <plot_kernel_pca.py>` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_kernel_pca.zip <plot_kernel_pca.zip>` .. include:: plot_kernel_pca.recommendations .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_