Spec-Zone.ru › scikit-learn

Примечание

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

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

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

В этом примере сравниваются различные методы (линейного) снижения размерности, применяемые к набору данных «Цифры». Набор данных содержит изображения цифр от 0 до 9 с приблизительно 180 образцами каждого класса. Каждое изображение имеет размер 8x8 = 64 и сводится к двумерной точке данных.

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

Линейный дискриминантный анализ (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,252 секунды)

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

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

Сравнение LDA и PCA 2D-проекция набора данных Iris

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

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

Анализ компонентов окрестностей (NCA) — иллюстрация

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

Spec-Zone.ru

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