Всего за 690 руб. Купить полную версию
Пример: применение 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 компонент. Это позволяет нам визуализировать данные в двумерном пространстве.
4. Визуализация: Рисуем график, где каждая точка представляет один ирис, и цвет указывает на класс (вид ириса).
5. Доля объясненной дисперсии: Мы выводим долю дисперсии, которую объясняют главные компоненты. Чем выше эта доля, тем больше информации сохраняется при уменьшении размерности.
Результат:
После выполнения этого кода мы получим график, на котором ирисы будут разделены по двум главным компонентам. Эти компоненты объясняют основную вариативность данных, и благодаря снижению размерности мы можем легко визуализировать данные. Также, мы увидим, как хорошо первые две компоненты объясняют дисперсию данных (обычно они объясняют большую часть информации).
Преимущества и ограничения PCA
Преимущества:
Ускорение обработки: Уменьшение размерности позволяет быстрее обучать модели.
Снижение переобучения: Уменьшение количества признаков помогает избежать переобучения, так как модель фокусируется на более значимых признаках.
Визуализация: Снижение размерности позволяет визуализировать многомерные данные, что важно для анализа и принятия решений.
Ограничения:
Потеря информации: Хотя PCA сохраняет максимально возможную информацию, всегда существует некоторая потеря информации при уменьшении размерности.
Линейность: PCA линейный метод, и если данные имеют сложные, нелинейные зависимости, то PCA может не дать хороших результатов.
PCA это инструмент для уменьшения размерности данных, который позволяет упростить модели, улучшить визуализацию и снизить коллинеарность признаков. Этот метод широко используется в различных областях, от анализа данных до машинного обучения, и помогает справляться с большими и высокоразмерными наборами данных.
Мы будем использовать сконструированный набор данных, который включает два признака:
Сумма покупок: сколько клиент тратит за месяц.
Частота покупок: как часто клиент делает покупки в месяц.
Цель сегментировать клиентов на основе этих признаков.
Шаг 1: Генерация данных
Для начала создадим искусственные данные с использованием библиотеки `numpy`. Мы сгенерируем данные с 2 признаками для 300 клиентов и будем использовать PCA для уменьшения размерности, а затем применим K-means для сегментации.
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import make_blobs
# Генерация искусственного набора данных
np.random.seed(42)
# Создадим два кластера с различной суммой покупок и частотой покупок
X, _ = make_blobs(n_samples=300, centers=[[10, 5], [60, 15]], cluster_std=[15, 15], random_state=42)
# Масштабируем данные
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# Визуализируем исходные данные
plt.scatter(X_scaled[:, 0], X_scaled[:, 1], alpha=0.5)
plt.title("Изначальные данные о покупках")
plt.xlabel("Сумма покупок")
plt.ylabel("Частота покупок")
plt.show()
```
Шаг 2: Применение PCA для снижения размерности
Хотя наши данные уже имеют всего два признака, на реальных данных размерность может быть гораздо выше. В этом случае PCA поможет нам снизить размерность, например, до двух компонент для визуализации и дальнейшего анализа.