Введение
В этом лабораторном занятии мы сравним различные алгоритмы 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. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Подготовка датасета
Начнем с генерации датасета 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-образ.