K-Means klasterizācija ir Mašīnmācīšanās bez uzraudzības algoritms, kas grupē neiezīmēto datu kopu dažādās kopās. Raksta mērķis ir izpētīt k vidējā klasterizācijas pamatus un darbību, kā arī ieviešanu.
Satura rādītājs
- Kas ir K-nozīmē klasterizācija?
- Kāds ir k-means klasterizācijas mērķis?
- Kā darbojas k-mean klasterizācija?
- K-Means klasterizācijas ieviešana Python
Kas ir K-nozīmē klasterizācija?
Mašīnmācīšanās bez uzraudzības ir process, kurā māca datoru izmantot nemarķētus, neklasificētus datus un ļauj algoritmam darboties ar šiem datiem bez uzraudzības. Bez iepriekšējas datu apmācības mašīnas uzdevums šajā gadījumā ir sakārtot nešķirotus datus atbilstoši paralēlēm, modeļiem un variācijām.
K nozīmē klasterizāciju, piešķir datu punktus vienam no K klasteriem atkarībā no to attāluma no klasteru centra. Tas sākas ar nejaušu klasteru centroīdu piešķiršanu telpā. Pēc tam katrs datu punkts tiek piešķirts vienam no klasteriem, pamatojoties uz tā attālumu no klastera centroīda. Pēc katra punkta piešķiršanas vienam no klasteriem tiek piešķirti jauni klasteru centroīdi. Šis process tiek veikts iteratīvi, līdz tiek atrasts labs klasteris. Analīzē mēs pieņemam, ka klasteru skaits ir dots uzlabotajā un mums ir jāieliek punkti vienā no grupām.
Dažos gadījumos K nav skaidri definēts, un mums ir jādomā par optimālo K skaitu. K Klasterizācijas vislabākie rādītāji ir labi atdalīti. Ja datu punkti pārklājās, šī klasterizācija nav piemērota. K Means ir ātrāks salīdzinājumā ar citām klasterizācijas metodēm. Tas nodrošina spēcīgu savienojumu starp datu punktiem. K līdzekļu klasteris nesniedz skaidru informāciju par klasteru kvalitāti. Atšķirīga sākotnējā klastera centroīda piešķiršana var izraisīt dažādus klasterus. Arī K Means algoritms ir jutīgs pret troksni. Tas var būt iestrēdzis vietējos minimumos.
Kāds ir k-means klasterizācijas mērķis?
Mērķis grupēšana ir sadalīt iedzīvotājus vai komplekts datu punktu skaitu vairākās grupās, lai katrā grupā būtu vairāk datu punktu salīdzināmi savā starpā un atšķiras no datu punktiem citās grupās. Tā būtībā ir lietu grupēšana, pamatojoties uz to, cik līdzīgas un atšķirīgas tās ir viena otrai.
Kā darbojas k-mean klasterizācija?
Mums tiek dota vienumu datu kopa ar noteiktiem līdzekļiem un šo funkciju vērtībām (piemēram, vektoram). Uzdevums ir klasificēt šos vienumus grupās. Lai to panāktu, mēs izmantosim K-means algoritmu, nepārraudzītu mācību algoritmu. “K” algoritma nosaukumā apzīmē grupu/klasteru skaitu, kurās vēlamies klasificēt savus vienumus.
(Tas palīdzēs, ja jūs domājat par vienumus kā punktus n-dimensiju telpā). Algoritms klasificēs vienumus k grupās vai līdzības klasteros. Lai aprēķinātu šo līdzību, kā mērījumu izmantosim Eiklīda attālumu.
Algoritms darbojas šādi:
- Pirmkārt, mēs nejauši inicializējam k punktus, ko sauc par vidējiem vai kopu centroīdiem.
- Mēs klasificējam katru vienumu pēc tā tuvākā vidējā līmeņa un atjauninām vidējās koordinātas, kas ir līdz šim šajā klasterī klasificēto vienumu vidējās vērtības.
- Mēs atkārtojam procesu noteiktam iterāciju skaitam, un beigās mums ir savas kopas.
Iepriekš minētie punkti tiek saukti par vidējiem, jo tie ir tajos klasificēto vienumu vidējās vērtības. Lai inicializētu šos līdzekļus, mums ir daudz iespēju. Intuitīva metode ir līdzekļu inicializācija pēc nejaušiem vienumiem datu kopā. Vēl viena metode ir inicializēt vidējos nejaušās vērtībās starp datu kopas robežām (ja attiecas uz līdzekli x, vienumiem ir vērtības [0,3], mēs inicializējam vidējos ar vērtībām x pie [0,3]).
Iepriekš minētais algoritms pseidokodā ir šāds:
Initialize k means with random values -->Noteiktam atkārtojumu skaitam: --> Iterēt, izmantojot vienumus: --> Atrodiet vienumam tuvāko vidējo vērtību, aprēķinot vienuma eiklīda attālumu ar katru no līdzekļiem --> Piešķirt vienumu nozīmei --> Atjaunināt vidējo pēc novirzot to uz šī klastera vienumu vidējo vērtību>
K-Means klasterizācijas ieviešana Python
1. piemērs
Importējiet nepieciešamās bibliotēkas
Mēs importējam Numpy statistikas aprēķiniem, Matplotlib uzzīmēt grafiks, un make_blobs no sklearn.datasets.
Python3
python programmu piemēri
import> numpy as np> import> matplotlib.pyplot as plt> from> sklearn.datasets>import> make_blobs> |
>
>
Izveidojiet pielāgoto datu kopu ar make_blobs un uzzīmējiet to
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()> |
>
>
Izvade :

Klasterizācijas datu kopa
Inicializējiet nejaušos centroīdus
Kods inicializē trīs klasterus K-means klasterēšanai. Tas iestata nejaušu sēklu un ģenerē nejaušus klasteru centrus noteiktā diapazonā un izveido tukšu sarakstu punktu par katru klasteru.
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> |
>
>
Izvade:
{0: {'center': array([0.06919154, 1.78785042]), 'points': []}, 1: {'center': array([ 1.06183904, -0.87041662]), 'points': []}, 2: {'center': array([-1.11581855, 0.74488834]), 'points': []}}> Atzīmējiet nejaušās inicializācijas centru ar datu punktiem
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()> |
>
>
Izvade :

Datu punkti ar nejaušu centru
Diagrammā tiek parādīts datu punktu izkliedes diagramma (X[:,0], X[:,1]) ar režģa līnijām. Tas arī iezīmē sākotnējos klasteru centrus (sarkanās zvaigznes), kas ģenerēti K-vidējo klasterēšanai.
Definējiet Eiklīda attālumu
Python3
kļūda: nevarēja atrast vai ielādēt galveno klasi
def> distance(p1,p2):> >return> np.sqrt(np.>sum>((p1>->p2)>*>*>2>))> |
>
>
Izveidojiet funkciju, lai piešķirtu un atjauninātu klastera centru
E-solis piešķir datu punktus tuvākajam klastera centram, un M-solis atjaunina klasteru centrus, pamatojoties uz piešķirto punktu vidējo vērtību K-vidējā klasterizācijā.
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>]>>> >new_center>=> points.mean(axis>=>0>)> >clusters[i][>'center'>]>=> new_center> > >clusters[i][>'points'>]>=> []> >return> clusters> |
>
>
7. darbība. Izveidojiet funkciju datu punktu klastera prognozēšanai
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> |
>
>
Piešķiriet, atjauniniet un prognozējiet klastera centru
Python3
clusters>=> assign_clusters(X,clusters)> clusters>=> update_clusters(X,clusters)> pred>=> pred_cluster(X,clusters)> |
>
>
Atzīmējiet datu punktus ar to paredzamo klasteru centru
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()> |
>
>
Izvade :

K-nozīmē klasterizāciju
Diagrammā tiek parādīti datu punkti, kas iekrāsoti ar prognozētajām kopām. Sarkanie marķieri apzīmē atjauninātos klasteru centrus pēc E-M soļiem K-means klasterizācijas algoritmā.
2. piemērs
Importējiet nepieciešamās bibliotēkas
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> |
>
galvenie java intervijas jautājumi
>
Ielādējiet datu kopu
Python3
X, y>=> load_iris(return_X_y>=>True>)> |
kā atlasīt kolonnas no dažādām tabulām SQL
>
>
Elkoņa metode
Ideālā grupu skaita atrašana, lai sadalītu datus, ir jebkura nepārraudzīta algoritma pamatposms. Viens no visizplatītākajiem paņēmieniem šīs k ideālās vērtības noteikšanai ir elkoņa pieeja.
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_)> |
>
>
Uzzīmējiet elkoņa grafiku, lai atrastu optimālo klasteru skaitu
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()> |
>
>
Izvade:

Elkoņa metode
No iepriekš redzamā grafika var novērot, ka pie k = 2 un k = 3 elkonim līdzīga situācija. Tātad, mēs apsveram K = 3
Izveidojiet Kmeans klasterizācijas modeli
Python3
kmeans>=> KMeans(n_clusters>=> 3>, random_state>=> 2>)> kmeans.fit(X)> |
>
>
Izvade:
KMeans KMeans(n_clusters=3, random_state=2)>
Atrodiet klastera centru
Python3
kas ir klasterizācija
kmeans.cluster_centers_> |
>
>
Izvade:
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]])>
Paredzēt klasteru grupu:
Python3
pred>=> kmeans.fit_predict(X)> pred> |
>
>
Izvade:
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)>
Atzīmējiet klastera centru ar datu punktiem
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()> |
>
>
Izvade:

K-nozīmē klasterizāciju
Kreisajā pusē esošajā apakšgrafikā tiek parādīts ziedlapas garums pret ziedlapas platumu ar datu punktiem, kas iekrāsoti ar kopām, un sarkanie marķieri norāda K-vidējo klasteru centrus. Apakšzīmējums labajā pusē parāda seplapas garumu un sepal platumu līdzīgi.
Secinājums
Visbeidzot, K-means klasterizācija ir spēcīgs nepārraudzīts mašīnmācīšanās algoritms nemarķētu datu kopu grupēšanai. Tās mērķis ir sadalīt datus klasteros, padarot līdzīgus datu punktus par daļu no vienas grupas. Algoritms inicializē klasteru centroīdus un iteratīvi piešķir datu punktus tuvākajam centroīdam, atjauninot centroīdus, pamatojoties uz vidējo punktu skaitu katrā klasterī.
Bieži uzdotie jautājumi (FAQ)
1. Kas ir k-means klasterizācija datu analīzei?
K-means ir sadalīšanas metode, kas sadala datu kopu “k” atšķirīgās, nepārklājošās apakškopās (kopās), pamatojoties uz līdzību, lai līdz minimumam samazinātu atšķirības katrā klasterī.
2.Kāds ir k-means piemērs reālajā dzīvē?
Klientu segmentācija mārketingā, kur k-mean grupē klientus, pamatojoties uz pirkšanas paradumiem, ļaujot uzņēmumiem pielāgot mārketinga stratēģijas dažādiem segmentiem.
3. Kāda veida dati ir k-means klasterizācijas modelis?
K-means labi darbojas ar skaitliskiem datiem, kur attāluma starp datu punktiem jēdzienam ir nozīme. To parasti izmanto nepārtrauktiem mainīgajiem.
4.Vai prognozēšanai izmanto K-vidējos?
K-means galvenokārt tiek izmantots līdzīgu datu punktu klasterēšanai un grupēšanai. Tas neparedz etiķetes jauniem datiem; tas piešķir tos esošajiem klasteriem, pamatojoties uz līdzību.
5. Kāds ir k-means klasterizācijas mērķis?
Mērķis ir sadalīt datus “k” klasteros, samazinot klasteru iekšējo dispersiju. Tas cenšas veidot grupas, kurās datu punkti katrā klasterī ir vairāk līdzīgi viens otram nekā tiem, kas atrodas citās kopās.