Кластеризация — это метод обучения без учителя, который позволяет нам группировать набор объектов на основе схожих характеристик. В общем, это может помочь вам найти значимую структуру среди ваших данных, сгруппировать похожие данные вместе и обнаружить лежащие в их основе закономерности.
Одним из наиболее распространенных методов кластеризации является алгоритм K-средних. Цель этого алгоритма состоит в том, чтобы разбить данные на множество так, чтобы общая сумма квадратов расстояний от каждой точки до средней точки кластера была минимизирована.
K означает, что работает через следующий итеративный процесс:
- Выберите значение для k (количество создаваемых кластеров)
- Инициализируйте k «центроидов» (начальных точек) в ваших данных
- Создайте свои кластеры. Назначьте каждую точку ближайшему центроиду.
- Сделайте свои кластеры лучше. Переместите каждый центроид в центр своего кластера.
- Повторяйте шаги 3–4, пока ваши центроиды не сойдутся.
Как его применить?
В следующем примере я собираюсь использовать набор данных Iris scikit Learn. Эти данные состоят из 50 образцов каждого из трех видов ириса (Iris setosa, Iris virginica и Iris versicolor). Он имеет четыре признака из каждого образца: длину и ширину чашелистиков и лепестков.
- Для начала давайте импортируем следующие библиотеки.
from sklearn import datasets import matplotlib.pyplot as plt import pandas as pd from sklearn.cluster import KMeans
2. Загрузите данные.
iris = datasets.load_iris()
3. Определите свою цель и предикторы.
X = iris.data[:, :2] y = iris.target
4. Давайте посмотрим на наши данные через точечную диаграмму.
plt.scatter(X[:,0], X[:,1], c=y, cmap='gist_rainbow') plt.xlabel('Spea1 Length', fontsize=18) plt.ylabel('Sepal Width', fontsize=18)
5. Теперь давайте создадим и подгоним нашу модель кластера K-средних. Мы собираемся использовать три кластера и случайное состояние 21.
km = KMeans(n_clusters = 3, n_jobs = 4, random_state=21) km.fit(X)
6. С помощью следующего кода вы можете определить центральные точки данных.
centers = km.cluster_centers_ print(centers) Output [[5.77358491 2.69245283] [5.006 3.418 ] [6.81276596 3.07446809]]
7. Теперь давайте сравним наши исходные данные с нашими кластеризованными результатами, используя следующий код.
#this will tell us to which cluster does the data observations belong. new_labels = km.labels_ # Plot the identified clusters and compare with the answers fig, axes = plt.subplots(1, 2, figsize=(16,8)) axes[0].scatter(X[:, 0], X[:, 1], c=y, cmap='gist_rainbow', edgecolor='k', s=150) axes[1].scatter(X[:, 0], X[:, 1], c=new_labels, cmap='jet', edgecolor='k', s=150) axes[0].set_xlabel('Sepal length', fontsize=18) axes[0].set_ylabel('Sepal width', fontsize=18) axes[1].set_xlabel('Sepal length', fontsize=18) axes[1].set_ylabel('Sepal width', fontsize=18) axes[0].tick_params(direction='in', length=10, width=5, colors='k', labelsize=20) axes[1].tick_params(direction='in', length=10, width=5, colors='k', labelsize=20) axes[0].set_title('Actual', fontsize=18) axes[1].set_title('Predicted', fontsize=18)
Вот список основных преимуществ и недостатков этого алгоритма.
Преимущества:
- K-Means прост и эффективен в вычислительном отношении.
- Это очень интуитивно понятно, и их результаты легко визуализировать.
Недостатки:
- K-Means сильно зависит от масштаба и не подходит для данных различной формы и плотности.
- Оценка результатов более субъективна. Это требует гораздо большей человеческой оценки, чем надежные показатели.