Spec-Zone.ru › scikit-learn

Примечание

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

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

Применение различных методов обучения на многообразиях к набору данных сферической формы. Здесь можно увидеть применение понижения размерности для получения интуитивного понимания методов обучения на многообразиях. Что касается набора данных, полярные области сферы, а также узкая полоса вдоль её боковой поверхности были удалены. Это позволяет методам обучения на многообразиях «раскрыть» её, а затем спроецировать на двухмерное пространство.

Для аналогичного примера, в котором эти методы применяются к набору данных S-образной кривой, см. Сравнение методов обучения на многообразиях

Обратите внимание, что цель МДС состоит в том, чтобы найти низкоразмерное представление данных (здесь 2D), в котором расстояния хорошо соответствуют расстояниям в исходном пространстве высокой размерности, в отличие от других алгоритмов обучения на многообразиях, оно не стремится к изотропному представлению данных в низкоразмерном пространстве. Здесь проблема многообразия довольно точно соответствует задаче создания плоской карты Земли, как и с проекцией карты

Manifold Learning with 1000 points, 10 neighbors, LLE (0.063 sec), LTSA (1 sec), Hessian LLE (0.79 sec), Modified LLE (1.5 sec), Isomap (0.25 sec), MDS (0.81 sec), Spectral Embedding (0.061 sec), t-SNE (3.9 sec)
standard: 0.063 sec
ltsa: 1 sec
hessian: 0.79 sec
modified: 1.5 sec
ISO: 0.25 sec
MDS: 0.81 sec
Spectral Embedding: 0.061 sec
t-SNE: 3.9 sec
# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

from time import time

import matplotlib.pyplot as plt

# Unused but required import for doing 3d projections with matplotlib < 3.2
import mpl_toolkits.mplot3d  # noqa: F401
import numpy as np
from matplotlib.ticker import NullFormatter

from sklearn import manifold
from sklearn.utils import check_random_state

# Variables for manifold learning.
n_neighbors = 10
n_samples = 1000

# Create our sphere.
random_state = check_random_state(0)
p = random_state.rand(n_samples) * (2 * np.pi - 0.55)
t = random_state.rand(n_samples) * np.pi

# Sever the poles from the sphere.
indices = (t < (np.pi - (np.pi / 8))) & (t > ((np.pi / 8)))
colors = p[indices]
x, y, z = (
    np.sin(t[indices]) * np.cos(p[indices]),
    np.sin(t[indices]) * np.sin(p[indices]),
    np.cos(t[indices]),
)

# Plot our dataset.
fig = plt.figure(figsize=(15, 8))
plt.suptitle(
    "Manifold Learning with %i points, %i neighbors" % (1000, n_neighbors), fontsize=14
)

ax = fig.add_subplot(251, projection="3d")
ax.scatter(x, y, z, c=p[indices], cmap=plt.cm.rainbow)
ax.view_init(40, -10)

sphere_data = np.array([x, y, z]).T

# Perform Locally Linear Embedding Manifold learning
methods = ["standard", "ltsa", "hessian", "modified"]
labels = ["LLE", "LTSA", "Hessian LLE", "Modified LLE"]

for i, method in enumerate(methods):
    t0 = time()
    trans_data = (
        manifold.LocallyLinearEmbedding(
            n_neighbors=n_neighbors, n_components=2, method=method, random_state=42
        )
        .fit_transform(sphere_data)
        .T
    )
    t1 = time()
    print("%s: %.2g sec" % (methods[i], t1 - t0))

    ax = fig.add_subplot(252 + i)
    plt.scatter(trans_data[0], trans_data[1], c=colors, cmap=plt.cm.rainbow)
    plt.title("%s (%.2g sec)" % (labels[i], t1 - t0))
    ax.xaxis.set_major_formatter(NullFormatter())
    ax.yaxis.set_major_formatter(NullFormatter())
    plt.axis("tight")

# Perform Isomap Manifold learning.
t0 = time()
trans_data = (
    manifold.Isomap(n_neighbors=n_neighbors, n_components=2)
    .fit_transform(sphere_data)
    .T
)
t1 = time()
print("%s: %.2g sec" % ("ISO", t1 - t0))

ax = fig.add_subplot(257)
plt.scatter(trans_data[0], trans_data[1], c=colors, cmap=plt.cm.rainbow)
plt.title("%s (%.2g sec)" % ("Isomap", t1 - t0))
ax.xaxis.set_major_formatter(NullFormatter())
ax.yaxis.set_major_formatter(NullFormatter())
plt.axis("tight")

# Perform Multi-dimensional scaling.
t0 = time()
mds = manifold.MDS(2, max_iter=100, n_init=1, random_state=42)
trans_data = mds.fit_transform(sphere_data).T
t1 = time()
print("MDS: %.2g sec" % (t1 - t0))

ax = fig.add_subplot(258)
plt.scatter(trans_data[0], trans_data[1], c=colors, cmap=plt.cm.rainbow)
plt.title("MDS (%.2g sec)" % (t1 - t0))
ax.xaxis.set_major_formatter(NullFormatter())
ax.yaxis.set_major_formatter(NullFormatter())
plt.axis("tight")

# Perform Spectral Embedding.
t0 = time()
se = manifold.SpectralEmbedding(
    n_components=2, n_neighbors=n_neighbors, random_state=42
)
trans_data = se.fit_transform(sphere_data).T
t1 = time()
print("Spectral Embedding: %.2g sec" % (t1 - t0))

ax = fig.add_subplot(259)
plt.scatter(trans_data[0], trans_data[1], c=colors, cmap=plt.cm.rainbow)
plt.title("Spectral Embedding (%.2g sec)" % (t1 - t0))
ax.xaxis.set_major_formatter(NullFormatter())
ax.yaxis.set_major_formatter(NullFormatter())
plt.axis("tight")

# Perform t-distributed stochastic neighbor embedding.
t0 = time()
tsne = manifold.TSNE(n_components=2, random_state=0)
trans_data = tsne.fit_transform(sphere_data).T
t1 = time()
print("t-SNE: %.2g sec" % (t1 - t0))

ax = fig.add_subplot(2, 5, 10)
plt.scatter(trans_data[0], trans_data[1], c=colors, cmap=plt.cm.rainbow)
plt.title("t-SNE (%.2g sec)" % (t1 - t0))
ax.xaxis.set_major_formatter(NullFormatter())
ax.yaxis.set_major_formatter(NullFormatter())
plt.axis("tight")

plt.show()

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

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_manifold_sphere.ipynb

Download Python source code: plot_manifold_sphere.py

Download zipped: plot_manifold_sphere.zip

Связанные примеры

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

t-SNE: Влияние различных значений параметра perplexity на форму

Приближённые ближайшие соседи в TSNE

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

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

Spec-Zone.ru

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