Автор оригинала: Pankaj Kumar.
K-средства – очень популярная техника кластеризации. K-означает кластеризацию кластеризации k – еще один класс неожиданных алгоритмов обучения, используемые для выяснения кластеров данных в данном наборе данных.
В этой статье мы реализуем K-означает алгоритм кластеризации с нуля с помощью модуля Numpy.
5 шагов в K-означает алгоритм кластеризации
Шаг 1. Случайно выбрать K точек данных как наши исходные центры.
Шаг 2. Найдите расстояние (евклидовое расстояние для нашей цели) между каждыми точками данных в нашем обучении, установленном с центром K.
Шаг 3. Теперь назначьте каждую точку данных на ближайший центр Centroc в соответствии с обнаруженным расстоянием.
Шаг 4. Обновите местоположение центроида, принимая в среднем точки в каждой группе кластера.
Шаг 5. Повторите шаги от 2 до 4, пока наши центроиды не меняются.
Мы можем выбрать оптимальное значение k (количество кластеров), используя такие методы, как метод локтя.
Реализация k-означает алгоритм кластеризации
Давайте реализуем вышеупомянутые шаги в код сейчас. Импортируйте Numpy Module, а затем пройдите через остальную часть кода, чтобы получить понимание того, как K-означает кластеризация K-означает в коде.
#Importing required modules import numpy as np from scipy.spatial.distance import cdist #Function to implement steps given in previous section def kmeans(x,k, no_of_iterations): idx = np.random.choice(len(x), k, replace=False) #Randomly choosing Centroids centroids = x[idx, :] #Step 1 #finding the distance between centroids and all the data points distances = cdist(x, centroids ,'euclidean') #Step 2 #Centroid with the minimum Distance points = np.array([np.argmin(i) for i in distances]) #Step 3 #Repeating the above steps for a defined number of iterations #Step 4 for _ in range(no_of_iterations): centroids = [] for idx in range(k): #Updating Centroids by taking mean of Cluster it belongs to temp_cent = x[points==idx].mean(axis=0) centroids.append(temp_cent) centroids = np.vstack(centroids) #Updated Centroids distances = cdist(x, centroids ,'euclidean') points = np.array([np.argmin(i) for i in distances]) return points
Вышеуказанная функция возвращает массив кластерных меток для каждой точки данных в нашем учебном наборе.
Тестирование кластеров K-означает
Мы будем использовать цифры набора данных (встроенные в модуле Sklearn) для тестирования нашей функции. Вы можете обратиться к этой статье, чтобы узнать больше о построении K-означает кластеры.
#Loading the required modules import numpy as np from scipy.spatial.distance import cdist from sklearn.datasets import load_digits from sklearn.decomposition import PCA from sklearn.cluster import KMeans import matplotlib.pyplot as plt #Defining our function def kmeans(x,k, no_of_iterations): idx = np.random.choice(len(x), k, replace=False) #Randomly choosing Centroids centroids = x[idx, :] #Step 1 #finding the distance between centroids and all the data points distances = cdist(x, centroids ,'euclidean') #Step 2 #Centroid with the minimum Distance points = np.array([np.argmin(i) for i in distances]) #Step 3 #Repeating the above steps for a defined number of iterations #Step 4 for _ in range(no_of_iterations): centroids = [] for idx in range(k): #Updating Centroids by taking mean of Cluster it belongs to temp_cent = x[points==idx].mean(axis=0) centroids.append(temp_cent) centroids = np.vstack(centroids) #Updated Centroids distances = cdist(x, centroids ,'euclidean') points = np.array([np.argmin(i) for i in distances]) return points #Load Data data = load_digits().data pca = PCA(2) #Transform the data df = pca.fit_transform(data) #Applying our function label = kmeans(df,10,1000) #Visualize the results u_labels = np.unique(label) for i in u_labels: plt.scatter(df[label == i , 0] , df[label == i , 1] , label = i) plt.legend() plt.show()
Выходные результаты выглядят перспективными. Наша реализация работает.
Заключение
В этой статье мы создали алгоритм кластеризации K-означает с нуля с помощью Python. Мы также охватываем шаги, чтобы сделать алгоритм K-означает и, наконец, проверил нашу реализацию на набор данных цифр. Вы можете прочитать аспекты теории k-означает алгоритм кластеризации на Страница Википедии здесь
Счастливое обучение