Съдържание
Клъстерна интуиция на 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-стойност
Метод
- Започнете с произволна k стойност.
- Изчисляване на SSE (сума на квадратните грешки)
- SSE – SSE се определя като сумата от квадратите на евклидовите разстояния на всяка точка до нейния най-близък центроид. Тъй като това е мярка за грешка, целта на k-средните е да се опита да минимизира тази стойност.
- Компютърна 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.