Spec-Zone.ru › scikit-learn

Примечание

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

Снижение размерности с помощью анализа компонентов окрестностей

Пример использования анализа компонентов окрестностей для снижения размерности.

В этом примере сравниваются различные методы линейного снижения размерности, применённые к набору данных Digits. Набор данных содержит изображения цифр от 0 до 9, примерно по 180 образцов каждого класса. Размер каждого изображения — 8x8 = 64, после преобразования оно представлено точкой в двумерном пространстве.

Анализ главных компонент (PCA), применённый к этим данным, определяет комбинации признаков (главные компоненты, или направления в пространстве признаков), которые объясняют наибольшую дисперсию данных. Здесь мы отображаем различные образцы в пространстве двух первых главных компонент.

Линейный дискриминантный анализ (LDA) пытается определить признаки, объясняющие наибольшую дисперсию между классами. В частности, LDA, в отличие от PCA, — это метод с учителем, использующий известные метки классов.

Анализ компонентов окрестностей (NCA) пытается найти пространство признаков, в котором стохастический алгоритм ближайших соседей обеспечивает наилучшую точность. Как и LDA, это метод с учителем.

Можно заметить, что NCA обеспечивает визуально осмысленную кластеризацию данных, несмотря на значительное снижение размерности.

  • PCA, KNN (k=3) Test accuracy = 0.52
  • LDA, KNN (k=3) Test accuracy = 0.66
  • NCA, KNN (k=3) Test accuracy = 0.70
# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

import matplotlib.pyplot as plt
import numpy as np

from sklearn import datasets
from sklearn.decomposition import PCA
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier, NeighborhoodComponentsAnalysis
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

n_neighbors = 3
random_state = 0

# Load Digits dataset
X, y = datasets.load_digits(return_X_y=True)

# Split into train/test
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.5, stratify=y, random_state=random_state
)

dim = len(X[0])
n_classes = len(np.unique(y))

# Reduce dimension to 2 with PCA
pca = make_pipeline(StandardScaler(), PCA(n_components=2, random_state=random_state))

# Reduce dimension to 2 with LinearDiscriminantAnalysis
lda = make_pipeline(StandardScaler(), LinearDiscriminantAnalysis(n_components=2))

# Reduce dimension to 2 with NeighborhoodComponentAnalysis
nca = make_pipeline(
    StandardScaler(),
    NeighborhoodComponentsAnalysis(n_components=2, random_state=random_state),
)

# Use a nearest neighbor classifier to evaluate the methods
knn = KNeighborsClassifier(n_neighbors=n_neighbors)

# Make a list of the methods to be compared
dim_reduction_methods = [("PCA", pca), ("LDA", lda), ("NCA", nca)]

# plt.figure()
for i, (name, model) in enumerate(dim_reduction_methods):
    plt.figure()
    # plt.subplot(1, 3, i + 1, aspect=1)

    # Fit the method's model
    model.fit(X_train, y_train)

    # Fit a nearest neighbor classifier on the embedded training set
    knn.fit(model.transform(X_train), y_train)

    # Compute the nearest neighbor accuracy on the embedded test set
    acc_knn = knn.score(model.transform(X_test), y_test)

    # Embed the data set in 2 dimensions using the fitted model
    X_embedded = model.transform(X)

    # Plot the projected points and show the evaluation score
    plt.scatter(X_embedded[:, 0], X_embedded[:, 1], c=y, s=30, cmap="Set1")
    plt.title(
        "{}, KNN (k={})\nTest accuracy = {:.2f}".format(name, n_neighbors, acc_knn)
    )
plt.show()

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

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_nca_dim_reduction.ipynb

Download Python source code: plot_nca_dim_reduction.py

Download zipped: plot_nca_dim_reduction.zip

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

Сравнение метода ближайших соседей с анализом компонентов окрестностей и без него

Сравнение двумерных проекций набора данных Iris с помощью LDA и PCA

Линейный дискриминантный анализ с нормальной оценкой, Ledoit-Wolf и OAS для классификации

Иллюстрация анализа компонентов окрестностей

© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/auto_examples/neighbors/plot_nca_dim_reduction.html

Spec-Zone.ru

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