В этой статье мы разберемся с основами кластеризации K Mean и реализуем ее на Python, используя знаменитую библиотеку машинного обучения Scikit-learn.

Что такое кластеризация K-средств?

Кластеризация K-средств - это алгоритм машинного обучения без учителя. Он принимает смешанные данные и делит данные на небольшие группы / кластеры на основе шаблонов в данные.

Цель алгоритма K средних

AudreyBu однажды сказал:

Цель K-средних проста: сгруппировать похожие точки данных вместе и выявить лежащие в основе закономерности. Для достижения этой цели K-means ищет фиксированное количество кластеров (k) в наборе данных.

Работа кластеризации K-средств

Чтобы объяснить работу алгоритма K средних, предположим, что у нас есть некоторые данные, нанесенные с помощью диаграммы рассеяния.

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

Объяснение алгоритма кластеризации K-средств

Прежде всего, мы выберем количество кластеров (k) (в данном случае k = 2). Это означает, что теперь мы предположим, что 2 точки случайным образом будут действовать как наши центроиды кластера. (Центроид кластера - это центральная точка кластера).

Кластеризация K-средств состоит из двух основных этапов:

  • Этап назначения кластера. На этом этапе точки данных, близкие к центроидам, будут соответственно попадать в эти кластеры центроидов.
  • Шаг перемещения центроида: на этом этапе мы вычислим среднее значение всех точек данных в кластере и переместим центроид этого кластера в это среднее положение.

Мы повторим эти два шага, как только одно из следующих условий будет верно:

  1. Наши центроиды перестают менять свое положение.
  2. Достигнуто максимальное количество итераций.

Наши данные теперь организованы в кластеры.

Выбор значения K

Чтобы выбрать количество кластеров, которое хорошо подходит для наших данных, мы можем использовать знаменитый метод локтя. Основная идея этого метода локтя заключается в том, что он отображает различные значения стоимости (ошибки) с изменяющимся числом кластеров (k). По мере увеличения количества кластеров (k) , количество точек данных на кластер уменьшается. Следовательно, среднее искажение уменьшается. Чем меньше количество точек данных в кластере, тем ближе эти точки данных относятся к их центроидам. Таким образом, значение k, при котором искажение уменьшается, называется Точка локтя.

Иногда наклон нашего графика довольно плавный, поэтому сложно выбрать значение k, поскольку существует нет четкой точки изгиба. В этом случае мы используем наш отраслевой опыт и непрерывные эксперименты, чтобы определить значение k.

Реализация на Python

Теперь у нас есть очень хорошее представление о том, как работает алгоритм кластеризации K-средств. Итак, теперь мы реализуем K-среднее в наборе данных, чтобы получить более четкое интуитивное представление об этом. Для этого мы будем использовать знаменитую библиотеку машинного обучения Scikit-learn.

Что такое Scikit-learn?

Scikit-learn (также известный как sklearn) - это библиотека машинного обучения для Python. Он включает в себя различные алгоритмы классификации, регрессии и кластеризации, а также опорные векторные машины (SVM), случайные леса, усиление градиента, k -means и DBSCAN и предназначен для работы с библиотеки Python, такие как NumPy, Pandas и SciPy.

Кластеризация средств с использованием Scikit-learn

Кластеризация средств - это очень простой и простой в использовании алгоритм. В частности, с помощью этой библиотеки Scikit learn ее реализация и использование стали довольно простыми. Теперь приступим к использованию Sklearn.

Импорт важных библиотек в Python

import seaborn as sns
import matplotlib.pyplot as plt

Создание искусственных данных

from sklearn.datasets import make_blobs
data = make_blobs(n_samples=200, n_features=2,centers=4, cluster_std=1.8,random_state=101)

Визуализация наших данных

plt.scatter(data[0][:,0],data[0][:,1],c=data[1],cmap='rainbow')

Создание кластеров

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=4)
kmeans.fit(data[0])

Теперь, после импорта KMeans из sklearn.cluster, мы создаем объект kmeans нашего KMeans класса. Здесь вы можете найти странное то, что мы указали n_clusters=4. Это связано с тем, что при создании данных мы указали centers=4, поэтому мы знаем, что эти данные должны иметь 4 кластера. Итак, мы указали это вручную. Но если бы мы не знали о центрах, то нам пришлось бы использовать метод локтя, чтобы определить правильное количество кластеров.

Итак, перейдем к следующему: этот kmeans.fit(data[0]) фрагмент нашего кода анализирует данные, создает кластеры и даже соответствует центроидам каждого cluster в их соответствующее положение.

Теперь, чтобы проверить положение наших центроидов, мы можем использовать следующий код.

print(kmeans.cluster_centers_)

Он распечатает (4, 2) массив, показывающий позиции центроидов каждого кластера соответственно. .

Сравнение исходного набора данных и после применения K-средних

f, (ax1, ax2) = plt.subplots(1, 2, sharey=True,figsize=(10,6))
ax1.set_title('K Means')
ax1.scatter(data[0][:,0],data[0][:,1],c=kmeans.labels_,cmap='rainbow')
ax2.set_title("Original")
ax2.scatter(data[0][:,0],data[0][:,1])

ПОЗДРАВЛЯЕМ! Мы успешно внедрили Кластеризацию К-средних в нашем наборе данных.

Результат обучения

До сих пор мы узнали, что такое алгоритм кластеризации K-средних, он работает и как выбрать значение k. Кроме того, мы реализовали K-среднее в наборе данных с использованием знаменитой библиотеки машинного обучения Python, т. Е. Scikit -Узнай.