logo

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


json у прикладі json



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()>

>

char у рядок java

>

Вихід :

Точки даних із випадковим центром - 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>)>

завантажити медіаплеєр youtube vlc

>

>

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

Знаходження ідеальної кількості груп для поділу даних є основним етапом будь-якого неконтрольованого алгоритму. Одним із найпоширеніших методів визначення цього ідеального значення 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» кластерів, мінімізуючи внутрішньокластерну дисперсію. Він прагне сформувати групи, де точки даних у кожному кластері більше схожі одна на одну, ніж на точки в інших кластерах.