Съдържание

Клъстерна интуиция на K-означава
Реални ситуации на клъстериране
Избиране на стойността на K
Метод Elbow
Код за алгоритъм за клъстериране на K-означава и точка Elbow.

Алгоритмите за машинно обучение са категоризирани в три основни категории.

Контролирано обучение
Неконтролирано обучение
Подсилващо обучение

В контролираното обучение, в даден набор от данни, имаме присъстващ етикет на клас или целева променлива.

В обучението без надзор всичко, което знаете, е набор от функции и не знаете нищо за вашата целева променлива или етикет на клас.

Но ние се опитваме да идентифицираме основната структура в данните или понякога се опитваме да намерим клъстерите в данните, за да направим полезни прогнози от тях.

В тази статия ще ви преведа през K Means Clustering.

K Means е много популярен алгоритъм за клъстериране.

Чакай, какво имаш предвид под групиране?

Методът за идентифициране на подобни групи от данни в набор от данни се нарича клъстериране. Клъстерният анализе техника, използвана в Машинното обучение, която се опитва да намери клъстери на наблюдения в рамките на набор от данни.

Основната цел на клъстерния анализ е да се намерят групи (клъстери), в които наблюденията във всеки клъстер са много сходни, но наблюденията в различните клъстери са много различни.

Някои реални ситуации на групиране са:

Биология:Може да се използва за класифициране между различни видове растения и животни.
Библиотеки: Използва се за групиране на различни книги въз основа на теми и информация .
Застраховка: Използва се за потвърждаване на клиентите и техните политики и за идентифициране на измамите.
Маркетинг: Може да се използва за характеризиране & открийте клиентски сегменти за маркетингови цели.
Езици за групиране
Сегментиране на изображения
... И Т.Н.

Можем да идентифицираме някаква структура в него и един от начините да разгледаме това са три клъстера само чрез визуално изследване.

Горната графика има три групи. K-средствата ви помагат да идентифицирате тези клъстери. K в K-Means е безплатен параметър, където преди да стартирате алгоритъма, трябва да кажете на алгоритъма каква е стойността на k.

K-Means Clustering Intuition

Клъстерирането на K-Means се използва за идентифициране и извеждане на присъщи групи в рамките на немаркиран набор от данни. Базира се на групиране, базирано на центроид.

Centroid:
-Centroid е точка от данни в центъра на клъстер. Клъстерите са представени от центроид при групиране, базирано на центроид.
- Това е итеративен алгоритъм, който определя сходството въз основа на това колко близо е точка от данни до центроида на клъстера.
-
Алгоритъмът за клъстериране на K-Means използва итеративна процедура за предоставяне на краен резултат.
- Алгоритъмът изисква брой клъстери K и набор от данни като въвеждане

Нека графиката бъде

Стъпка 1: Започнете с L центроиди, като ги поставите на произволно място, тук K=2

Стъпка 2:Идентифицирайте разстоянията и ги разделете съответно. Изчислете разстоянието на всяка точка от центроида и ги групирайте съответно.

Горните клъстери може да не са оптимални. Трябва да ги правим все по-добри за всяка стъпка, като коригираме центроида за тези два клъстера.

Стъпка 3: Регулирайте центроидите, така че да станат център на тежестта за даден клъстер.

Повторете същия процес.

  • Преизчислете разстоянието между точките и центроидите и направете нови клъстери.

Стъпка 4: Групирайте повторно всяка точка въз основа на техните разстояния с центроида.

Повторете процеса, докато клъстерът престане да променя позицията си.

Стъпка 5: Коригирайте центроидите

Стъпка 6: Преизчислете клъстерите и повторете това, докато точките от данни спрат да променят клъстерите.

След това сме готови, центроидите не се променят повече и получаваме тези два клъстера.

Изборът на стойността на K

Как да определите правилния брой клъстери (k)?

  • Алгоритъмът K-Means зависи от намирането на броя на клъстерите и етикетите на данни за предварително дефинирана стойност на K.
  • За да определим броя на клъстерите в данните, трябва да изпълним алгоритъма за клъстериране на K-Means за различни стойности на K и да сравним резултатите.
  • Ефективността на алгоритъма K-Means зависи от стойността на K. Така че изборът на оптималната стойност на K, която дава най-добра производителност, е важен.
  • Методът на лакътя е най-разпространената техника.

В горните примери взехме два клъстера (k=2). Но може да има и различен брой клъстери.

IF K==6.

Но нашата работа е да намерим най-добрата K-стойност

Метод

  1. Започнете с произволна k стойност.
  2. Изчисляване на SSE (сума на квадратните грешки)
  3. SSE – SSE се определя като сумата от квадратите на евклидовите разстояния на всяка точка до нейния най-близък центроид. Тъй като това е мярка за грешка, целта на k-средните е да се опита да минимизира тази стойност.
  4. Компютърна SSE за всички формирани клъстери. След това намерете сумата от SSE, които сте получили.

Повторете процеса на изчисляване на SSE за различни K-стойности.

Начертайте графиката на SSE спрямо K-стойности

Наблюдение от графика

Можем да наблюдаваме, че за увеличаване на стойността на K, SSE намалява.

Основното наблюдение от горния график е да се наблюдава Elbow Point.

Точката Elbow е добра K-стойност. (K==4)

Така че оптималният брой клъстери може да бъде 4.

Нека да работим върху набор от данни, за да намерим клъстери, а също и Elbow point. (K-стойност)

Импортиране на библиотеки

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.preprocessing import MinMaxScaler
from sklearn.datasets import load_iris
%matplotlib inline
sns.set(style=’whitegrid’)

Заредете данните

df= pd.read_csv(“/content/income.csv”)
df.head()

График между колоната за възраст и доход

plt.scatter(df.Age,df['Income($)'])
plt.xlabel('Age')
plt.ylabel('Income($)')

Използвайте алгоритъма за групиране на KMeans и го разделете съответно на клъстери

km = KMeans(n_clusters=3)
y_predicted = km.fit_predict(df[['Age','Income($)']])
y_predicted

Изход:

array([2, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0])

Добавете y_predicted стойностите към набора от данни

df['cluster']=y_predicted
df.head()

Вземете координатите на центроида, които са формирани от алгоритъма.

km.cluster_centers_

Изход:

array([[  3.29090909e+01,   5.61363636e+04],
       [  3.82857143e+01,   1.50000000e+05],
       [  3.40000000e+01,   8.05000000e+04]])

Начертайте центроидите според клъстерите.

df1 = df[df.cluster==0]
df2 = df[df.cluster==1]
df3 = df[df.cluster==2]
plt.scatter(df1.Age,df1['Income($)'],color='green')
plt.scatter(df2.Age,df2['Income($)'],color='red')
plt.scatter(df3.Age,df3['Income($)'],color='black')
plt.scatter(km.cluster_centers_[:,0],km.cluster_centers_[:,1],color='purple',marker='*',label='centroid')
plt.xlabel('Age')
plt.ylabel('Income ($)')
plt.legend()
plt.show()

Центроидите не са оптимални, а също и клъстери.

Мащабирайте данните

scaler = MinMaxScaler()
scaler.fit(df[[‘Income($)’]])
df[‘Income($)’] = scaler.transform(df[[‘Income($)’]])
scaler.fit(df[[‘Age’]])
df[‘Age’] = scaler.transform(df[[‘Age’]])
df.head()

Повторете горния процес. Тъй като сме мащабирали данните.

km = KMeans(n_clusters=3)
y_predicted = km.fit_predict(df[[‘Age’,’Income($)’]])
df['cluster']=y_predicted
print(km.cluster_centers_)
df1 = df[df.cluster==0]
df2 = df[df.cluster==1]
df3 = df[df.cluster==2]
plt.scatter(df1.Age,df1['Income($)'],color='green')
plt.scatter(df2.Age,df2['Income($)'],color='red')
plt.scatter(df3.Age,df3['Income($)'],color='black')
plt.scatter(km.cluster_centers_[:,0],km.cluster_centers_[:,1],color='purple',marker='*',label='centroid')
plt.legend()

Ето последните клъстери, които получихме.

ЧАКАЙТЕ, НИЕ ДИРЕКТНО ПРИЕХМЕ K-СТОЙНОСТТА ЗА 3.

ЗАЩО?

Нека го разгледаме.

Запомнете метода на лакътя.

Код:

sse = []
k_rng = range(1,10)
for k in k_rng:
    km = KMeans(n_clusters=k)
    km.fit(df[[‘Age’,’Income($)’]])
    sse.append(km.inertia_)

Графика K срещу SSE

plt.xlabel(‘K’)
plt.ylabel(‘Sum of squared error’)
plt.plot(k_rng,sse)

Можем да видим, че точката на лакътя е 3.

Така че взехме K-стойността за 3.

Да... Най-накрая приключихме.

Ако намирате тази статия за полезна, ръкопляскайте. 😀 и ако откриете грешки, не се колебайте да ги споменете в коментарите.

Разгледайте другите ми блогове





Благодарим ви, че прочетохте статията.

Свържете се с мен в Twitter.