18+
реклама
18+
Бургер менюБургер меню

Холл Майкл Л. – Алгоритмы машинного обучения: базовый курс (страница 13)

18

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

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

plt.show()

```

Шаг 2: Применение K-means

Для начала применим алгоритм K-means, указав, что хотим разделить данные на 2 кластера. Мы заранее предполагаем, что в данных есть два типа клиентов – те, кто делает покупки часто, но с меньшими суммами, и те, кто совершает большие покупки реже.

```python

# Применяем алгоритм K-means

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

y_kmeans = kmeans.fit_predict(X_scaled)

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

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

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()

```

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

Шаг 3: Применение DBSCAN

Теперь применим алгоритм DBSCAN. В отличие от K-means, DBSCAN не требует указания количества кластеров и может находить кластеры произвольной формы. Мы также используем параметры для настройки алгоритма:

– eps – максимальное расстояние между объектами, которые могут быть отнесены к одному кластеру.

– min_samples – минимальное количество объектов для формирования кластера.

```python

# Применяем алгоритм DBSCAN

dbscan = DBSCAN(eps=0.5, min_samples=5)

y_dbscan = dbscan.fit_predict(X_scaled)

# Визуализируем результаты DBSCAN

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

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

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

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

plt.show()

```

В результате работы DBSCAN мы видим, что алгоритм выделил два основных кластера, а некоторые объекты (которые в модели считаются выбросами) не были отнесены ни к одному кластеру и обозначены как -1. Эти объекты можно рассматривать как редкие или аномальные пользователи.

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

Теперь давайте сравним результаты кластеризации с помощью K-means и DBSCAN.

– K-means создаёт два чётких, заранее заданных кластера. Это полезно, когда вы точно знаете, что данные могут быть разделены на несколько групп с определённым количеством кластеров.

– DBSCAN позволяет обнаружить кластеры произвольной формы и игнорировать выбросы, что полезно, когда данные содержат аномальные точки или неравномерно распределены.

Итог

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

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

Оба алгоритма имеют свои сильные стороны, и выбор между ними зависит от структуры ваших данных. Если вы знаете, сколько кластеров вам нужно, и уверены, что они будут симметричными и не содержат выбросов, то K-means – это хорошее решение. Если же данные имеют более сложную структуру и выбросы, лучше использовать DBSCAN.

Снижение размерности – это важная техника в области машинного обучения и анализа данных, которая позволяет уменьшить количество признаков (или переменных) в наборе данных, сохраняя при этом как можно больше информации. Это особенно полезно в случае, когда данные имеют большое количество признаков, что может привести к проблемам с вычислительными ресурсами, а также ухудшению производительности моделей из-за так называемого проклятия размерности. Одним из самых популярных методов снижения размерности является PCA (Principal Component Analysis), или анализ главных компонент.

Основные идеи PCA

Метод PCA помогает уменьшить размерность данных, преобразуя исходные признаки в новые переменные, которые называются главными компонентами. Эти компоненты являются линейными комбинациями исходных признаков и упорядочены так, что первая главная компонента захватывает максимальную дисперсию данных, вторая – наибольшую дисперсию, оставшуюся после первой, и так далее. Таким образом, первые несколько главных компонент обычно содержат большинство информации о данных, что позволяет отказаться от менее значимых компонент.

PCA – это линейный метод, который ищет новые оси координат, вдоль которых данные максимально разнесены. Эти оси называются основными компонентами. Процесс можно представить следующим образом:

1. Нахождение главных компонент: с помощью математических методов (например, сингулярного разложения матрицы) PCA находит новые оси, которые наиболее информативны для данных.

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

3. Выбор количества компонент: можно выбрать количество компонент, которые сохраняют наибольшее количество информации, и отбросить менее значимые компоненты.

Зачем нужно снижать размерность?

1. Ускорение обучения: с уменьшением числа признаков модели обучаются быстрее, так как уменьшается количество вычислений.

2. Предотвращение переобучения: уменьшая количество признаков, можно снизить риск переобучения модели, так как она не будет "подгоняться" под шум в данных.

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

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

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

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

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

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

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

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

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

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

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