Spec-Zone.ru › scikit-learn

Примечание

Перейти к концу для скачивания полного примера кода. или для запуска этого примера в вашем браузере через JupyterLite или Binder

Свисающая лента и лента с отверстием: Редукция

Этот ноутбук стремится сравнить два популярных нелинейных метода уменьшения размерности, встраивание стохастических соседей с распределением Т (t-SNE) и встраивание по локально-линейным вложениям (LLE), на классическом наборе данных «Свисающая лента». Затем мы изучим, как оба метода справляются с добавлением отверстия в данные.

# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

Свисающая лента

Мы начинаем с генерации набора данных «Свисающая лента».

import matplotlib.pyplot as plt

from sklearn import datasets, manifold

sr_points, sr_color = datasets.make_swiss_roll(n_samples=1500, random_state=0)

Теперь давайте посмотрим на наши данные:

fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection="3d")
fig.add_axes(ax)
ax.scatter(
    sr_points[:, 0], sr_points[:, 1], sr_points[:, 2], c=sr_color, s=50, alpha=0.8
)
ax.set_title("Swiss Roll in Ambient Space")
ax.view_init(azim=-66, elev=12)
_ = ax.text2D(0.8, 0.05, s="n_samples=1500", transform=ax.transAxes)
Swiss Roll in Ambient Space

Вычислив вложения LLE и t-SNE, мы обнаруживаем, что LLE, кажется, эффективно «разматывает» Свисающую ленту. t-SNE, с другой стороны, способен сохранить общую структуру данных, но плохо представляет непрерывную природу наших исходных данных. Вместо этого он, кажется, ненужно сгруппировывает участки точек.

sr_lle, sr_err = manifold.locally_linear_embedding(
    sr_points, n_neighbors=12, n_components=2
)

sr_tsne = manifold.TSNE(n_components=2, perplexity=40, random_state=0).fit_transform(
    sr_points
)

fig, axs = plt.subplots(figsize=(8, 8), nrows=2)
axs[0].scatter(sr_lle[:, 0], sr_lle[:, 1], c=sr_color)
axs[0].set_title("LLE Embedding of Swiss Roll")
axs[1].scatter(sr_tsne[:, 0], sr_tsne[:, 1], c=sr_color)
_ = axs[1].set_title("t-SNE Embedding of Swiss Roll")
LLE Embedding of Swiss Roll, t-SNE Embedding of Swiss Roll

Примечание

LLE, кажется, растягивает точки от центра (фиолетового) Свисающей ленты. Однако мы наблюдаем, что это просто побочный продукт способа генерации данных. Плотность точек выше около центра ленты, что в конечном итоге влияет на то, как LLE реконструирует данные в меньшем измерении.

Лента с отверстием

Теперь давайте посмотрим, как оба алгоритма справляются с добавлением отверстия в данные. Сначала мы генерируем набор данных «Лента с отверстием» и отображаем его:

sh_points, sh_color = datasets.make_swiss_roll(
    n_samples=1500, hole=True, random_state=0
)

fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection="3d")
fig.add_axes(ax)
ax.scatter(
    sh_points[:, 0], sh_points[:, 1], sh_points[:, 2], c=sh_color, s=50, alpha=0.8
)
ax.set_title("Swiss-Hole in Ambient Space")
ax.view_init(azim=-66, elev=12)
_ = ax.text2D(0.8, 0.05, s="n_samples=1500", transform=ax.transAxes)
Swiss-Hole in Ambient Space

Вычислив вложения LLE и t-SNE, мы получаем результаты, аналогичные результатам для Свисающей ленты. LLE очень умело «разматывает» данные и даже сохраняет отверстие. t-SNE, снова, кажется, сгруппировывает участки точек вместе, но мы отмечаем, что он сохраняет общую топологию исходных данных.

sh_lle, sh_err = manifold.locally_linear_embedding(
    sh_points, n_neighbors=12, n_components=2
)

sh_tsne = manifold.TSNE(
    n_components=2, perplexity=40, init="random", random_state=0
).fit_transform(sh_points)

fig, axs = plt.subplots(figsize=(8, 8), nrows=2)
axs[0].scatter(sh_lle[:, 0], sh_lle[:, 1], c=sh_color)
axs[0].set_title("LLE Embedding of Swiss-Hole")
axs[1].scatter(sh_tsne[:, 0], sh_tsne[:, 1], c=sh_color)
_ = axs[1].set_title("t-SNE Embedding of Swiss-Hole")
LLE Embedding of Swiss-Hole, t-SNE Embedding of Swiss-Hole

Заключительные замечания

Мы отмечаем, что t-SNE выигрывает от тестирования большего количества комбинаций параметров. Лучшие результаты, вероятно, можно было бы получить, лучше настроив эти параметры.

Мы наблюдаем, что, как показано в примере «Обучение многообразию на рукописных цифрах», t-SNE, как правило, работает лучше, чем LLE, на реальных данных.

Общее время выполнения сценария: (0 минут 20,165 секунд)

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_swissroll.ipynb

Download Python source code: plot_swissroll.py

Download zipped: plot_swissroll.zip

Похожие примеры

Обучение многообразию на рукописных цифрах: встраивание по локально-линейным вложениям, изомапа…

Сравнение методов обучения многообразию

Иерархическое кластеризация: структурированная против неструктурированной вард

Методы обучения многообразию на усеченной сфере

© 2007–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/auto_examples/manifold/plot_swissroll.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API