logo

K nozīmē klasterizāciju — ievads

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?

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:

  1. Pirmkārt, mēs nejauši inicializējam k punktus, ko sauc par vidējiem vai kopu centroīdiem.
  2. 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.
  3. 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 — Geeksforgeeks

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 - Geeksforgeeks

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 — Geeksforgeeks

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 — Geeksforgeeks

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.