Рубрики
Без рубрики

Как построить k-означает кластеры с Python?

В этой статье мы увидим, как мы можем построить K-означает кластеры.

Автор оригинала: Pankaj Kumar.

В этой статье мы увидим, как мы можем построить K-означает кластеры.

K-означает кластеризация кластеризации является метод итеративным кластеризом, который сегменты данных в к Кластеры, в которых каждое наблюдение принадлежит кластеру с ближайшим средним значением (кластерный центр).

Шаги для построения K-означает кластеры

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

1. Подготовка данных для построения

Сначала давайте будем готовы наши данные.

#Importing required modules

from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
import numpy as np

#Load Data
data = load_digits().data
pca = PCA(2)

#Transform the data
df = pca.fit_transform(data)

df.shape

Выход:

(1797, 2)

DiCits DataSet содержит изображения размера 8 × 8 пикселей, которые сплющены для создания функций вектора длины 64. Мы использовали PCA для уменьшения количества измерений, чтобы мы могли визуализировать результаты с использованием графика разброса 2D.

2. Примените k-средства для данных

Теперь давайте применим k – значит для наших данных для создания кластеров.

Здесь в цифрах набор данных мы уже знаем, что этикетки варьируются от 0 до 9, поэтому у нас есть 10 классов (или кластеров).

Но в реальных проблемах при выполнении k-означает наиболее сложную задачу – определить количество кластеров.

Существуют различные способы определения оптимального количества кластеров, то есть метод локтя, средний метод силуэта. Но определение количества кластеров будет предметом другого разговора.

#Import required module
from sklearn.cluster import KMeans

#Initialize the class object
kmeans = KMeans(n_clusters= 10)

#predict the labels of clusters.
label = kmeans.fit_predict(df)

print(label)

Выход:

out: [0 3 7 ... 7 4 9]

kmeans.fit_predict Метод Возвращает массив кластерных меток, к каждой точке данных принадлежит.

3. Построение этикетки 0 K-означает кластеры

Теперь пришло время понять и посмотреть, как мы можем записать отдельные кластеры.

Массив этикеток сохраняет индекс или последовательность точек данных, поэтому мы можем использовать эту характеристику для фильтрации точек данных с использованием булевой индексации с Numpy.

Давайте визуализируем кластер с этикеткой 0 с помощью библиотеки MATPLOTLIB.

import matplotlib.pyplot as plt

#filter rows of original data
filtered_label0 = df[label == 0]

#plotting the results
plt.scatter(filtered_label0[:,0] , filtered_label0[:,1])
plt.show()
Построение этикетки 0.

Код выше первых фильтров и сохраняет точки данных, которые принадлежат к кластеру метке 0, а затем создает график разброса.

Посмотрите, как мы прошли логические серии для фильтрации [Label]. Проиндексировали фильтрованные данные и передавались plt.scatter как (x, y) на сюжет. [:, 0], [:, 1].

4. Построение дополнительных K-означает кластеры

Теперь, что у нас есть идея, давайте поговорка кластеров с этикеткой 2 и 8.

#filter rows of original data
filtered_label2 = df[label == 2]

filtered_label8 = df[label == 8]

#Plotting the results
plt.scatter(filtered_label2[:,0] , filtered_label2[:,1] , color = 'red')
plt.scatter(filtered_label8[:,0] , filtered_label8[:,1] , color = 'black')
plt.show()
Построение этикеток 2 и 8

Замечательный !

5. Сюжет все k-означает кластеры

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

#Getting unique labels

u_labels = np.unique(label)

#plotting the results:

for i in u_labels:
    plt.scatter(df[label == i , 0] , df[label == i , 1] , label = i)
plt.legend()
plt.show()
Окончательные кластеры

Приведенный выше код итерации фильтрации данных в соответствии с каждым уникальным классом одной итерацией одной итерацией. В результате мы получаем окончательную визуализацию всех кластеров.

6. Построение кластерных центров

#Getting the Centroids
centroids = kmeans.cluster_centers_
u_labels = np.unique(label)

#plotting the results:

for i in u_labels:
    plt.scatter(df[label == i , 0] , df[label == i , 1] , label = i)
plt.scatter(centroids[:,0] , centroids[:,1] , s = 80, color = 'k)
plt.legend()
plt.show()
Кластеры с их соответствующими центрами

kmeans.cluster_centers_ Верните массив мест центроидов.

Вот полный код того, что мы только что видели выше.

#Importing required modules

from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
import numpy as np

#Load Data
data = load_digits().data
pca = PCA(2)

#Transform the data
df = pca.fit_transform(data)

#Import KMeans module
from sklearn.cluster import KMeans

#Initialize the class object
kmeans = KMeans(n_clusters= 10)

#predict the labels of clusters.
label = kmeans.fit_predict(df)

#Getting unique labels
u_labels = np.unique(label)

#plotting the results:
for i in u_labels:
    plt.scatter(df[label == i , 0] , df[label == i , 1] , label = i)
plt.legend()
plt.show()

Заключение

В этой статье мы видели, как мы можем визуализировать кластеры, образованные алгоритмом K-означает. Пока мы не встретимся в следующий раз, счастливого изучения!