Кластеризація K-Means є Машинне навчання без нагляду алгоритм, який групує непозначений набір даних у різні кластери. Метою статті є вивчення основ і роботи кластеризації k середніх разом із реалізацією.
Зміст
- Що таке K-means Clustering?
- Яка мета кластеризації k-середніх?
- Як працює кластеризація k-середніх?
- Реалізація K-Means кластеризації в Python
Що таке K-means Clustering?
Машинне навчання без нагляду це процес навчання комп’ютера використанню немаркованих, несекретних даних і надання можливості алгоритму працювати з цими даними без нагляду. Без будь-якого попереднього навчання роботі з даними робота машини в цьому випадку полягає в тому, щоб організувати несортовані дані відповідно до паралелей, шаблонів і варіацій.
K означає кластеризацію, призначає точки даних одному з K кластерів залежно від їх відстані від центру кластерів. Він починається з випадкового призначення центроїда кластерів у просторі. Потім кожна точка даних призначається одному з кластерів на основі її відстані від центроїда кластера. Після призначення кожної точки одному з кластерів призначаються нові центроїди кластера. Цей процес виконується ітеративно, доки не буде знайдено хороший кластер. Під час аналізу ми припускаємо, що номер кластера задано заздалегідь, і ми повинні поставити точки в одну з груп.
У деяких випадках K не визначено чітко, і ми повинні думати про оптимальну кількість K. K означає, що кластеризація дає найкращі дані, добре розділені. Якщо точки даних перекриваються, ця кластеризація не підходить. K Means є швидшим порівняно з іншими методами кластеризації. Це забезпечує міцний зв’язок між точками даних. K означає, що кластер не надає чіткої інформації щодо якості кластерів. Різне початкове призначення центроїда кластера може призвести до різних кластерів. Крім того, алгоритм K Means чутливий до шуму. Можливо, він застряг у місцевих мінімумах.
Яка мета кластеризації k-середніх?
Мета кластеризація полягає в тому, щоб розділити населення або встановити точок даних у декілька груп, щоб точок даних у кожній групі було більше порівнянний один до одного та відрізняються від точок даних в інших групах. По суті, це групування речей на основі того, наскільки вони схожі та відмінні один від одного.
Як працює кластеризація k-середніх?
Нам надається набір даних елементів із певними ознаками та значеннями для цих ознак (як вектор). Завдання полягає в тому, щоб розділити ці предмети на групи. Щоб досягти цього, ми будемо використовувати алгоритм K-means, алгоритм неконтрольованого навчання. «K» у назві алгоритму представляє кількість груп/кластерів, у які ми хочемо класифікувати наші елементи.
(Допоможе, якщо ви розглядаєте елементи як точки в n-вимірному просторі). Алгоритм класифікує елементи в k груп або кластерів подібності. Щоб обчислити цю подібність, ми будемо використовувати евклідову відстань як вимірювання.
Алгоритм роботи наступний:
- Спочатку ми випадковим чином ініціалізуємо k точок, які називаються середніми або кластерними центроїдами.
- Ми класифікуємо кожен елемент відповідно до його найближчого середнього значення та оновлюємо координати середнього значення, які є середніми значеннями елементів, класифікованих у цьому кластері на даний момент.
- Ми повторюємо процес протягом заданої кількості ітерацій, і в кінці ми маємо наші кластери.
Точки, згадані вище, називаються середніми, оскільки вони є середніми значеннями елементів, класифікованих у них. Для ініціалізації цих засобів у нас є багато варіантів. Інтуїтивно зрозумілим методом є ініціалізація засобів у випадкових елементах у наборі даних. Інший метод полягає в ініціалізації середніх випадковими значеннями між межами набору даних (якщо для функції х, елементи мають значення в [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()> |
>
>
Вихід :

Набір даних кластеризації
Ініціалізуйте випадкові центроїди
Код ініціалізує три кластери для кластеризації 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
>
Вихід :

Точки даних із випадковим центром
Діаграма відображає точкову діаграму точок даних (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-означає кластеризацію
На графіку показано точки даних, забарвлені їх прогнозованими кластерами. Червоні маркери представляють оновлені центри кластерів після кроків 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-означає кластеризацію
На підсхемі ліворуч відображається залежність довжини пелюстки від ширини пелюстки з точками даних, пофарбованими кластерами, а червоні маркери вказують на центри кластерів K-означає. Підграфіка справа показує довжину чашолистка проти ширини чашолистка так само.
Висновок
Підсумовуючи, кластеризація K-means — це потужний неконтрольований алгоритм машинного навчання для групування немаркованих наборів даних. Його мета — розділити дані на кластери, зробивши схожі точки даних частиною однієї групи. Алгоритм ініціалізує центроїди кластера та ітеративно призначає точки даних найближчому центроїду, оновлюючи центроїди на основі середнього значення точок у кожному кластері.
Часті запитання (FAQ)
1. Що таке кластеризація k-середніх для аналізу даних?
K-means — це метод поділу, який поділяє набір даних на «k» окремих підмножин (кластерів), що не перекриваються, на основі подібності з метою мінімізації дисперсії в кожному кластері.
2. Який приклад k-середніх у реальному житті?
Сегментація клієнтів у маркетингу, де k-means групує клієнтів на основі купівельної поведінки, що дозволяє компаніям адаптувати маркетингові стратегії для різних сегментів.
3. Який тип даних є моделлю кластеризації k-середніх?
K-means добре працює з числовими даними, де концепція відстані між точками даних має значення. Його зазвичай застосовують до безперервних змінних.
4. Чи використовуються K-середні для прогнозування?
K-середнє в основному використовується для кластеризації та групування подібних точок даних. Він не передбачає міток для нових даних; він призначає їх до існуючих кластерів на основі подібності.
5. Яка мета кластеризації k-середніх?
Мета полягає в тому, щоб розділити дані на «k» кластерів, мінімізуючи внутрішньокластерну дисперсію. Він прагне сформувати групи, де точки даних у кожному кластері більше схожі одна на одну, ніж на точки в інших кластерах.