Сравнение методов Manifold Learning

Machine LearningMachine LearningBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии мы сравним различные алгоритмы Manifold Learning для выполнения нелинейного снижения размерности. Цель этого - уменьшить размерность датасета, сохраняя при этом важные признаки исходных данных.

Мы будем использовать датасет S-curve, который является часто используемым датасетом для снижения размерности. Мы будем использовать такие алгоритмы, как Locally Linear Embeddings, Isomap Embedding, Multidimensional Scaling, Spectral Embedding и T-distributed Stochastic Neighbor Embedding.

Советы по работе с ВМ

После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills ml/sklearn -.-> lab-49091{{"Сравнение методов Manifold Learning"}} end

Подготовка датасета

Начнем с генерации датасета S-curve.

import matplotlib.pyplot as plt
from matplotlib import ticker

## unused but required import for doing 3d projections with matplotlib < 3.2
import mpl_toolkits.mplot3d  ## noqa: F401

from sklearn import manifold, datasets

n_samples = 1500
S_points, S_color = datasets.make_s_curve(n_samples, random_state=0)

Locally Linear Embeddings

Locally linear embedding (LLE) - это серия локальных анализов главных компонент, которые сравниваются глобально, чтобы найти наилучшую нелинейную встраивание. Мы будем использовать четыре различных метода LLE, то есть Standard, Local tangent space alignment, Hessian eigenmap и Modified locally linear embedding.

params = {
    "n_neighbors": n_neighbors,
    "n_components": n_components,
    "eigen_solver": "auto",
    "random_state": 0,
}

lle_standard = manifold.LocallyLinearEmbedding(method="standard", **params)
S_standard = lle_standard.fit_transform(S_points)

lle_ltsa = manifold.LocallyLinearEmbedding(method="ltsa", **params)
S_ltsa = lle_ltsa.fit_transform(S_points)

lle_hessian = manifold.LocallyLinearEmbedding(method="hessian", **params)
S_hessian = lle_hessian.fit_transform(S_points)

lle_mod = manifold.LocallyLinearEmbedding(method="modified", **params)
S_mod = lle_mod.fit_transform(S_points)

Isomap Embedding

Isomap ищет встраивание в более низкой размерности, которое сохраняет геодезические расстояния между всеми точками.

isomap = manifold.Isomap(n_neighbors=n_neighbors, n_components=n_components, p=1)
S_isomap = isomap.fit_transform(S_points)

Multidimensional Scaling

Multidimensional scaling (MDS) ищет низкоразмерное представление данных, в котором расстояния хорошо соответствуют расстояниям в исходном высокомерном пространстве.

md_scaling = manifold.MDS(
    n_components=n_components,
    max_iter=50,
    n_init=4,
    random_state=0,
    normalized_stress=False,
)
S_scaling = md_scaling.fit_transform(S_points)

Spectral Embedding for Non-linear Dimensionality Reduction

Данная реализация использует Laplacian Eigenmaps, которая находит низкоразмерное представление данных с использованием спектрального разложения графа Лапласиана.

spectral = manifold.SpectralEmbedding(
    n_components=n_components, n_neighbors=n_neighbors
)
S_spectral = spectral.fit_transform(S_points)

T-distributed Stochastic Neighbor Embedding

Оно преобразует сходства между точками данных в совместные вероятности и пытается минимизировать дивергенцию Куллбека-Лейблера между совместными вероятностями низкоразмерного встраивания и высокомерных данных.

t_sne = manifold.TSNE(
    n_components=n_components,
    perplexity=30,
    init="random",
    n_iter=250,
    random_state=0,
)
S_t_sne = t_sne.fit_transform(S_points)

Summary

Manifold Learning - это подход к нелинейному понижению размерности. В этом лабораторном задании мы сравнили различные алгоритмы Manifold Learning, такие как Locally Linear Embeddings, Isomap Embedding, Multidimensional Scaling, Spectral Embedding и T-distributed Stochastic Neighbor Embedding, для выполнения нелинейного понижения размерности на наборе данных S-образ.