Алгоритмы машинного обучения: базовый курс - страница 26



3. Визуализация данных: для многомерных данных снижение размерности позволяет визуализировать данные, что помогает понять их структуру.

4. Уменьшение коллинеарности: если признаки в данных сильно коррелируют друг с другом, это может приводить к проблемам в работе моделей. PCA помогает уменьшить коллинеарность, заменяя связанные признаки на независимые компоненты.

Как работает PCA?

1. Центрирование данных: перед применением PCA данные нужно центрировать, т.е. вычесть среднее значение каждого признака из всех его значений. Это делается для того, чтобы компоненты были вычислены относительно нулевой средней.

2. Ковариационная матрица: затем вычисляется ковариационная матрица для центрированных данных. Ковариация показывает, как два признака изменяются относительно друг друга. Чем выше ковариация, тем сильнее взаимосвязь между признаками.

3. Сингулярное разложение или собственные значения и собственные векторы: используя сингулярное разложение матрицы или вычисление собственных значений и собственных векторов ковариационной матрицы, мы находим главные компоненты. Эти компоненты соответствуют векторам, которые указывают направления максимальной дисперсии данных.

4. Проекция данных: теперь можно проецировать исходные данные на найденные компоненты. Это преобразует данные в новое пространство меньшей размерности.

Пример использования PCA

Допустим, у нас есть набор данных с множеством признаков, и мы хотим уменьшить их количество, чтобы улучшить производительность модели. Рассмотрим следующий пример с использованием библиотеки scikit-learn на Python.

Пример: применение PCA на данных о цветах ирисов

В этом примере мы будем работать с известным набором данных Iris. Данные содержат информацию о 4 признаках для каждого из 150 цветов ирисов (длина и ширина чашелистика и лепестка). Мы будем использовать PCA, чтобы уменьшить размерность до 2-х компонентов для визуализации.

```python

# Импортируем необходимые библиотеки

import numpy as np

import matplotlib.pyplot as plt

from sklearn.decomposition import PCA

from sklearn.datasets import load_iris

from sklearn.preprocessing import StandardScaler

# Загружаем набор данных Iris

iris = load_iris()

X = iris.data # Признаки

y = iris.target # Метки классов

# Масштабируем данные

scaler = StandardScaler()

X_scaled = scaler.fit_transform(X)

# Применяем PCA для уменьшения размерности до 2

pca = PCA(n_components=2)

X_pca = pca.fit_transform(X_scaled)

# Визуализируем данные

plt.figure(figsize=(8, 6))

plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis')

plt.title("PCA на данных о цветах ирисов")

plt.xlabel("Первая главная компонента")

plt.ylabel("Вторая главная компонента")

plt.colorbar(label='Метка класса')

plt.show()

# Смотрим долю объясненной дисперсии

print("Доля объясненной дисперсии для каждой компоненты:", pca.explained_variance_ratio_)

print("Общая объясненная дисперсия (для 2 компонент):", np.sum(pca.explained_variance_ratio_))

```

Объяснение кода:

1. Загрузка данных: Мы загружаем стандартный набор данных Iris, который содержит 4 признака (длина и ширина чашелистика и лепестка) для 150 цветов ирисов.

2. Масштабирование данных: Признаки масштабируются, чтобы все признаки имели одинаковый масштаб (среднее значение 0 и стандартное отклонение 1). Это важно для PCA, так как этот метод чувствителен к масштабу данных.

3. Применение PCA: Мы используем PCA для уменьшения размерности с 4 до 2 компонент. Это позволяет нам визуализировать данные в двумерном пространстве.