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



plt.xlabel("Сумма покупок")

plt.ylabel("Частота покупок")

plt.show()

```

Шаг 2: Применение PCA для снижения размерности

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

```python

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

pca = PCA(n_components=2)

X_pca = pca.fit_transform(X_scaled)

# Визуализируем данные после PCA

plt.scatter(X_pca[:, 0], X_pca[:, 1], alpha=0.5)

plt.title("Данные после PCA")

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

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

plt.show()

```

Шаг 3: Применение K-means для кластеризации

Теперь, когда мы применили PCA для снижения размерности, можно использовать алгоритм K-means для сегментации данных. Для этого мы заранее определим количество кластеров, например, 2, так как мы знаем, что данные состоят из двух групп клиентов.

```python

# Применяем K-means для кластеризации

kmeans = KMeans(n_clusters=2, random_state=42)

y_kmeans = kmeans.fit_predict(X_pca)

# Визуализируем результаты кластеризации

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

plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=200, c='red', marker='X', label='Центроиды')

plt.title("Результаты кластеризации K-means")

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

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

plt.legend()

plt.show()

```

Шаг 4: Анализ результатов

После выполнения этих шагов мы получим два кластера, которые будут представлены на графике с различными цветами. Красные крестики на графике показывают центроиды кластеров. Эти центроиды представляют собой средние значения для каждого из кластеров.

Шаг 5: Проверка объяснённой дисперсии с помощью PCA

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

```python

# Выводим долю объясненной дисперсии для каждой главной компоненты

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

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

```

Результат:

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

2. Кластеризация с K-means: После применения K-means мы получаем два кластера клиентов. Это позволяет сегментировать клиентов на группы с схожими покупательскими привычками, что может быть полезно для таргетированной маркетинговой кампании.

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

В этом примере мы использовали PCA для снижения размерности данных о покупках клиентов и применили алгоритм K-means для сегментации этих клиентов. Этот подход можно использовать для более сложных задач, когда данные имеют много признаков, и важно выявить скрытые группы в данных. PCA позволяет уменьшить размерность без значительных потерь информации, а K-means помогает легко и быстро сегментировать клиентов на основе основных признаков.