В этой статье мы разберемся с основами кластеризации K Mean и реализуем ее на Python, используя знаменитую библиотеку машинного обучения Scikit-learn.
Что такое кластеризация K-средств?
Кластеризация K-средств - это алгоритм машинного обучения без учителя. Он принимает смешанные данные и делит данные на небольшие группы / кластеры на основе шаблонов в данные.
Цель алгоритма K средних
AudreyBu однажды сказал:
Цель K-средних проста: сгруппировать похожие точки данных вместе и выявить лежащие в основе закономерности. Для достижения этой цели K-means ищет фиксированное количество кластеров (k) в наборе данных.
Работа кластеризации K-средств
Чтобы объяснить работу алгоритма K средних, предположим, что у нас есть некоторые данные, нанесенные с помощью диаграммы рассеяния.
Теперь, после небольшого анализа данных, мы видим, что наши данные можно разделить на две отдельные группы / кластеры. Теперь K-среднее будет также разделить данные на два кластера и отметить некоторые граница для каждого кластера. Таким образом, всякий раз, когда в модель загружаются новые данные, она проверяет, на какой границе находится эта точка данных. и в конце сообщите нам это название кластера или номер.
Объяснение алгоритма кластеризации K-средств
Прежде всего, мы выберем количество кластеров (k) (в данном случае k = 2). Это означает, что теперь мы предположим, что 2 точки случайным образом будут действовать как наши центроиды кластера. (Центроид кластера - это центральная точка кластера).
Кластеризация K-средств состоит из двух основных этапов:
- Этап назначения кластера. На этом этапе точки данных, близкие к центроидам, будут соответственно попадать в эти кластеры центроидов.
- Шаг перемещения центроида: на этом этапе мы вычислим среднее значение всех точек данных в кластере и переместим центроид этого кластера в это среднее положение.
Мы повторим эти два шага, как только одно из следующих условий будет верно:
- Наши центроиды перестают менять свое положение.
- Достигнуто максимальное количество итераций.
Наши данные теперь организованы в кластеры.
Выбор значения 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 -Узнай.