K означає Clustering – Introduction

K означає Clustering – Introduction

Кластеризація K-Means є Машинне навчання без нагляду алгоритм, який групує непозначений набір даних у різні кластери. Метою статті є вивчення основ і роботи кластеризації k середніх разом із реалізацією.

Зміст

Що таке K-means Clustering?

Машинне навчання без нагляду це процес навчання комп’ютера використанню немаркованих, несекретних даних і надання можливості алгоритму працювати з цими даними без нагляду. Без будь-якого попереднього навчання роботі з даними робота машини в цьому випадку полягає в тому, щоб організувати несортовані дані відповідно до паралелей, шаблонів і варіацій.

K означає кластеризацію, призначає точки даних одному з K кластерів залежно від їх відстані від центру кластерів. Він починається з випадкового призначення центроїда кластерів у просторі. Потім кожна точка даних призначається одному з кластерів на основі її відстані від центроїда кластера. Після призначення кожної точки одному з кластерів призначаються нові центроїди кластера. Цей процес виконується ітеративно, доки не буде знайдено хороший кластер. Під час аналізу ми припускаємо, що номер кластера задано заздалегідь, і ми повинні поставити точки в одну з груп.

У деяких випадках K не визначено чітко, і ми повинні думати про оптимальну кількість K. K означає, що кластеризація дає найкращі дані, добре розділені. Якщо точки даних перекриваються, ця кластеризація не підходить. K Means є швидшим порівняно з іншими методами кластеризації. Це забезпечує міцний зв’язок між точками даних. K означає, що кластер не надає чіткої інформації щодо якості кластерів. Різне початкове призначення центроїда кластера може призвести до різних кластерів. Крім того, алгоритм K Means чутливий до шуму. Можливо, він застряг у місцевих мінімумах.

Яка мета кластеризації k-середніх?

Мета кластеризація полягає в тому, щоб розділити населення або встановити точок даних у декілька груп, щоб точок даних у кожній групі було більше порівнянний один до одного та відрізняються від точок даних в інших групах. По суті, це групування речей на основі того, наскільки вони схожі та відмінні один від одного.

Як працює кластеризація k-середніх?

Нам надається набір даних елементів із певними ознаками та значеннями для цих ознак (як вектор). Завдання полягає в тому, щоб розділити ці предмети на групи. Щоб досягти цього, ми будемо використовувати алгоритм K-means, алгоритм неконтрольованого навчання. «K» у назві алгоритму представляє кількість груп/кластерів, у які ми хочемо класифікувати наші елементи.

(Допоможе, якщо ви розглядаєте елементи як точки в n-вимірному просторі). Алгоритм класифікує елементи в k груп або кластерів подібності. Щоб обчислити цю подібність, ми будемо використовувати евклідову відстань як вимірювання.

Алгоритм роботи наступний:

  1. Спочатку ми випадковим чином ініціалізуємо k точок, які називаються середніми або кластерними центроїдами.
  2. Ми класифікуємо кожен елемент відповідно до його найближчого середнього значення та оновлюємо координати середнього значення, які є середніми значеннями елементів, класифікованих у цьому кластері на даний момент.
  3. Ми повторюємо процес протягом заданої кількості ітерацій, і в кінці ми маємо наші кластери.

Точки, згадані вище, називаються середніми, оскільки вони є середніми значеннями елементів, класифікованих у них. Для ініціалізації цих засобів у нас є багато варіантів. Інтуїтивно зрозумілим методом є ініціалізація засобів у випадкових елементах у наборі даних. Інший метод полягає в ініціалізації середніх випадковими значеннями між межами набору даних (якщо для функції х, елементи мають значення в [0,3], ми ініціалізуємо середні значеннями для х при [0,3]).

Наведений вище алгоритм у псевдокоді виглядає наступним чином:

Initialize k means with random values -->Для заданої кількості ітерацій: --> Перейти до елементів: --> Знайти середнє значення, найближче до елемента, обчисливши евклідову відстань елемента за допомогою кожного із середніх --> Призначити елемент середньому --> Оновити середнє за зсуваючи його до середнього значення елементів у цьому кластері 

Реалізація K-Means кластеризації в Python

Приклад 1

Імпортуйте необхідні бібліотеки

Ми імпортуємо Numpy для статистичних обчислень, Matplotlib побудувати сюжет графік, і make_blobs із sklearn.datasets.

Python3




import> numpy as np> import> matplotlib.pyplot as plt> from> sklearn.datasets> import> make_blobs>

Створіть спеціальний набір даних за допомогою make_blobs і побудуйте його

Python3




X,y> => make_blobs(n_samples> => 500> ,n_features> => 2> ,centers> => 3> ,random_state> => 23> )> fig> => plt.figure(> 0> )> plt.grid(> True> )> plt.scatter(X[:,> 0> ],X[:,> 1> ])> plt.show()>

Вихід :

Набір даних кластеризації - Geeksforgeeks

Набір даних кластеризації

Ініціалізуйте випадкові центроїди

Код ініціалізує три кластери для кластеризації K-середніх. Він встановлює випадкове початкове число та генерує випадкові центри кластерів у визначеному діапазоні та створює порожній список балів для кожного кластера.

Python3




k> => 3> clusters> => {}> np.random.seed(> 23> )> for> idx> in> range> (k):> > center> => 2> *> (> 2> *> np.random.random((X.shape[> 1> ],))> -> 1> )> > points> => []> > cluster> => {> > 'center'> : center,> > 'points'> : []> > }> > > clusters[idx]> => cluster> > clusters>

Вихід:

{0: {'center': array([0.06919154, 1.78785042]), 'points': []},  1: {'center': array([ 1.06183904, -0.87041662]), 'points': []},  2: {'center': array([-1.11581855, 0.74488834]), 'points': []}} 

Побудуйте випадковий центр ініціалізації з точками даних

Python3




plt.scatter(X[:,> 0> ],X[:,> 1> ])> plt.grid(> True> )> for> i> in> clusters:> > center> => clusters[i][> 'center'> ]> > plt.scatter(center[> 0> ],center[> 1> ],marker> => '*'> ,c> => 'red'> )> plt.show()>

Вихід :

Точки даних із випадковим центром - Geeksforgeeks

Точки даних із випадковим центром

Діаграма відображає точкову діаграму точок даних (X[:,0], X[:,1]) із лініями сітки. Він також позначає початкові центри кластерів (червоні зірки), згенеровані для кластеризації K-середніх.

Дайте визначення евклідової відстані

Python3




def> distance(p1,p2):> > return> np.sqrt(np.> sum> ((p1> -> p2)> *> *> 2> ))>

Створіть функцію для призначення та оновлення центру кластера

E-крок призначає точки даних найближчому центру кластера, а M-крок оновлює центри кластера на основі середнього значення призначених точок у кластеризації K-means.

Python3




#Implementing E step> def> assign_clusters(X, clusters):> > for> idx> in> range> (X.shape[> 0> ]):> > dist> => []> > > curr_x> => X[idx]> > > for> i> in> range> (k):> > dis> => distance(curr_x,clusters[i][> 'center'> ])> > dist.append(dis)> > curr_cluster> => np.argmin(dist)> > clusters[curr_cluster][> 'points'> ].append(curr_x)> > return> clusters> > #Implementing the M-Step> def> update_clusters(X, clusters):> > for> i> in> range> (k):> > points> => np.array(clusters[i][> 'points'> ])> > if> points.shape[> 0> ]>> 0> :> > new_center> => points.mean(axis> => 0> )> > clusters[i][> 'center'> ]> => new_center> > > clusters[i][> 'points'> ]> => []> > return> clusters>

Крок 7: Створіть функцію для прогнозування кластера для точок даних

Python3




def> pred_cluster(X, clusters):> > pred> => []> > for> i> in> range> (X.shape[> 0> ]):> > dist> => []> > for> j> in> range> (k):> > dist.append(distance(X[i],clusters[j][> 'center'> ]))> > pred.append(np.argmin(dist))> > return> pred>

Призначення, оновлення та прогнозування центру кластера

Python3




clusters> => assign_clusters(X,clusters)> clusters> => update_clusters(X,clusters)> pred> => pred_cluster(X,clusters)>

Побудуйте точки даних із прогнозованим центром кластера

Python3




plt.scatter(X[:,> 0> ],X[:,> 1> ],c> => pred)> for> i> in> clusters:> > center> => clusters[i][> 'center'> ]> > plt.scatter(center[> 0> ],center[> 1> ],marker> => '^'> ,c> => 'red'> )> plt.show()>

Вихід :

K-означає кластеризацію - Geeksforgeeks

K-означає кластеризацію

На графіку показано точки даних, забарвлені їх прогнозованими кластерами. Червоні маркери представляють оновлені центри кластерів після кроків E-M в алгоритмі кластеризації K-середніх.

Приклад 2

Імпортуйте необхідні бібліотеки

Python3




import> pandas as pd> import> numpy as np> import> seaborn as sns> import> matplotlib.pyplot as plt> import> matplotlib.cm as cm> from> sklearn.datasets> import> load_iris> from> sklearn.cluster> import> KMeans>

Завантажте набір даних

Python3




X, y> => load_iris(return_X_y> => True> )>

Ліктьовий метод

Знаходження ідеальної кількості груп для поділу даних є основним етапом будь-якого неконтрольованого алгоритму. Одним із найпоширеніших методів визначення цього ідеального значення k є підхід ліктя.

Python3




#Find optimum number of cluster> sse> => []> #SUM OF SQUARED ERROR> for> k> in> range> (> 1> ,> 11> ):> > km> => KMeans(n_clusters> => k, random_state> => 2> )> > km.fit(X)> > sse.append(km.inertia_)>

Побудуйте графік Elbow, щоб знайти оптимальну кількість кластерів

Python3




sns.set_style(> 'whitegrid'> )> g> => sns.lineplot(x> => range> (> 1> ,> 11> ), y> => sse)> g.> set> (xlabel> => 'Number of cluster (k)'> ,> > ylabel> => 'Sum Squared Error'> ,> > title> => 'Elbow Method'> )> plt.show()>

Вихід:

Ліктьовий метод

З наведеного вище графіка ми можемо спостерігати, що при k=2 і k=3 ситуація подібна до ліктя. Отже, ми розглядаємо K=3

Побудуйте модель кластеризації Kmeans

Python3




kmeans> => KMeans(n_clusters> => 3> , random_state> => 2> )> kmeans.fit(X)>

Вихід:

KMeans KMeans(n_clusters=3, random_state=2) 

Знайдіть центр кластера

Python3




kmeans.cluster_centers_>

Вихід:

array([[5.006 , 3.428 , 1.462 , 0.246 ],  [5.9016129 , 2.7483871 , 4.39354839, 1.43387097],  [6.85 , 3.07368421, 5.74210526, 2.07105263]]) 

Передбачте кластерну групу:

Python3




pred> => kmeans.fit_predict(X)> pred>

Вихід:

array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2,  2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 2, 2, 2,  2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 1], dtype=int32) 

Побудуйте центр кластера з точками даних

Python3




plt.figure(figsize> => (> 12> ,> 5> ))> plt.subplot(> 1> ,> 2> ,> 1> )> plt.scatter(X[:,> 0> ],X[:,> 1> ],c> => pred, cmap> => cm.Accent)> plt.grid(> True> )> for> center> in> kmeans.cluster_centers_:> > center> => center[:> 2> ]> > plt.scatter(center[> 0> ],center[> 1> ],marker> => '^'> ,c> => 'red'> )> plt.xlabel(> 'petal length (cm)'> )> plt.ylabel(> 'petal width (cm)'> )> > plt.subplot(> 1> ,> 2> ,> 2> )> plt.scatter(X[:,> 2> ],X[:,> 3> ],c> => pred, cmap> => cm.Accent)> plt.grid(> True> )> for> center> in> kmeans.cluster_centers_:> > center> => center[> 2> :> 4> ]> > plt.scatter(center[> 0> ],center[> 1> ],marker> => '^'> ,c> => 'red'> )> plt.xlabel(> 'sepal length (cm)'> )> plt.ylabel(> 'sepal width (cm)'> )> plt.show()>

Вихід:

K-означає кластеризацію - Geeksforgeeks

K-означає кластеризацію

На підсхемі ліворуч відображається залежність довжини пелюстки від ширини пелюстки з точками даних, пофарбованими кластерами, а червоні маркери вказують на центри кластерів K-означає. Підграфіка справа показує довжину чашолистка проти ширини чашолистка так само.

Висновок

Підсумовуючи, кластеризація K-means — це потужний неконтрольований алгоритм машинного навчання для групування немаркованих наборів даних. Його мета — розділити дані на кластери, зробивши схожі точки даних частиною однієї групи. Алгоритм ініціалізує центроїди кластера та ітеративно призначає точки даних найближчому центроїду, оновлюючи центроїди на основі середнього значення точок у кожному кластері.

Часті запитання (FAQ)

1. Що таке кластеризація k-середніх для аналізу даних?

K-means — це метод поділу, який поділяє набір даних на «k» окремих підмножин (кластерів), що не перекриваються, на основі подібності з метою мінімізації дисперсії в кожному кластері.

2. Який приклад k-середніх у реальному житті?

Сегментація клієнтів у маркетингу, де k-means групує клієнтів на основі купівельної поведінки, що дозволяє компаніям адаптувати маркетингові стратегії для різних сегментів.

3. Який тип даних є моделлю кластеризації k-середніх?

K-means добре працює з числовими даними, де концепція відстані між точками даних має значення. Його зазвичай застосовують до безперервних змінних.

4. Чи використовуються K-середні для прогнозування?

K-середнє в основному використовується для кластеризації та групування подібних точок даних. Він не передбачає міток для нових даних; він призначає їх до існуючих кластерів на основі подібності.

5. Яка мета кластеризації k-середніх?

Мета полягає в тому, щоб розділити дані на «k» кластерів, мінімізуючи внутрішньокластерну дисперсію. Він прагне сформувати групи, де точки даних у кожному кластері більше схожі одна на одну, ніж на точки в інших кластерах.