K-pomeni združevanje v gruče je Nenadzorovano strojno učenje algoritem, ki združuje neoznačen nabor podatkov v različne gruče. Namen članka je raziskati osnove in delovanje k srednjega združevanja v gruče skupaj z izvedbo.
Kazalo
- Kaj je K-means Clustering?
- Kaj je cilj združevanja k-means v gruče?
- Kako deluje k-means združevanje v gruče?
- Izvedba združevanja v gruče K-Means v Pythonu
Kaj je K-means Clustering?
Nenadzorovano strojno učenje je proces učenja računalnika, da uporablja neoznačene, neklasificirane podatke in omogoči algoritmu, da deluje s temi podatki brez nadzora. Brez predhodnega podatkovnega usposabljanja je naloga stroja v tem primeru organiziranje nerazvrščenih podatkov glede na vzporednice, vzorce in različice.
K pomeni združevanje v gruče, dodeli podatkovne točke enemu od gruč K glede na njihovo oddaljenost od središča gruč. Začne se z naključnim dodeljevanjem središča grozdov v prostoru. Nato se vsaka podatkovna točka dodeli eni od gruče glede na njeno oddaljenost od središča gruče. Po dodelitvi vsake točke enemu od grozdov se dodelijo novi centroidi gruče. Ta postopek teče iterativno, dokler ne najde dobre gruče. Pri analizi predpostavimo, da je število grozdov podano vnaprej in moramo točke uvrstiti v eno od skupin.
V nekaterih primerih K ni jasno definiran in razmišljati moramo o optimalnem številu K. K Pomeni, da je združevanje v gruče najboljše, če so podatki dobro ločeni. Če se podatkovne točke prekrivajo, to združevanje v gruče ni primerno. K Means je hitrejši v primerjavi z drugimi tehnikami združevanja v gruče. Zagotavlja močno povezavo med podatkovnimi točkami. K Pomeni, da grozd ne zagotavlja jasnih informacij o kakovosti grozdov. Različna začetna dodelitev središča gruče lahko povzroči različne gruče. Poleg tega je algoritem K Means občutljiv na hrup. Morda se je zataknilo v lokalnih minimumih.
Kaj je cilj združevanja k-means v gruče?
Cilj od grozdenje je razdeliti prebivalstvo oz set podatkovnih točk v več skupin, tako da je podatkovnih točk znotraj vsake skupine več primerljivi med seboj in se razlikujejo od podatkovnih točk v drugih skupinah. V bistvu gre za združevanje stvari glede na to, kako podobne in različne so si med seboj.
Kako deluje k-means združevanje v gruče?
Podan nam je nabor podatkov elementov z določenimi značilnostmi in vrednostmi za te značilnosti (kot vektor). Naloga je razvrstiti te predmete v skupine. Da bi to dosegli, bomo uporabili algoritem K-means, algoritem nenadzorovanega učenja. 'K' v imenu algoritma predstavlja število skupin/gruč, v katere želimo razvrstiti svoje elemente.
(Pomagalo vam bo, če si o predmetih predstavljate točke v n-dimenzionalnem prostoru). Algoritem bo elemente kategoriziral v k skupin ali grozdov podobnosti. Za izračun te podobnosti bomo kot merilo uporabili evklidsko razdaljo.
Algoritem deluje na naslednji način:
- Najprej naključno inicializiramo k točk, imenovanih srednja sredstva ali centroidi gruče.
- Vsak element kategoriziramo na najbližje povprečje in posodobimo koordinate povprečja, ki so povprečja elementov, ki so bili doslej kategorizirani v tej skupini.
- Postopek ponovimo za določeno število iteracij in na koncu imamo svoje gruče.
Zgoraj omenjene točke se imenujejo povprečja, ker so srednje vrednosti postavk, ki so v njih kategorizirane. Za inicializacijo teh sredstev imamo veliko možnosti. Intuitivna metoda je inicializacija sredstev pri naključnih postavkah v nizu podatkov. Druga metoda je inicializacija srednjih vrednosti pri naključnih vrednostih med mejami nabora podatkov (če je za funkcijo x, postavke imajo vrednosti v [0,3], bomo povprečje inicializirali z vrednostmi za x pri [0,3]).
Zgornji algoritem v psevdokodi je naslednji:
Initialize k means with random values -->Za dano število ponovitev: --> Ponavljaj po elementih: --> Poiščite povprečje, ki je najbližje predmetu, tako da izračunate evklidsko razdaljo predmeta z vsakim povprečjem --> Dodelite elementu povprečju --> Posodobite povprečje z prestavi na povprečje elementov v tej skupini>
Izvedba združevanja v gruče K-Means v Pythonu
Primer 1
Uvozite potrebne knjižnice
Uvažamo Numpy za statistične izračune, Matplotlib za načrtovanje graf, in make_blobs iz sklearn.datasets.
Python3
kaj je 10 od 60
import> numpy as np> import> matplotlib.pyplot as plt> from> sklearn.datasets>import> make_blobs> |
>
>
Ustvarite nabor podatkov po meri z make_blobs in ga narišite
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()> |
>
>
Izhod :

Nabor podatkov o gručenju
Inicializirajte naključne centroide
Koda inicializira tri gruče za združevanje v gruče K-means. Nastavi naključno seme in ustvari naključne centre gruč v določenem obsegu ter ustvari prazno seznam točk za vsako skupino.
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> |
>
>
Izhod:
{0: {'center': array([0.06919154, 1.78785042]), 'points': []}, 1: {'center': array([ 1.06183904, -0.87041662]), 'points': []}, 2: {'center': array([-1.11581855, 0.74488834]), 'points': []}}> Narišite središče naključne inicializacije s podatkovnimi točkami
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()> |
>
>
Izhod :
operatorji v programiranju python

Podatkovne točke z naključnim središčem
Na grafu je prikazan razpršeni graf podatkovnih točk (X[:,0], X[:,1]) z mrežnimi črtami. Označuje tudi začetne centre gruč (rdeče zvezde), ustvarjene za združevanje v gruče K-means.
Določite evklidsko razdaljo
Python3
def> distance(p1,p2):> >return> np.sqrt(np.>sum>((p1>->p2)>*>*>2>))> |
>
>
Ustvarite funkcijo za dodelitev in posodobitev centra gruče
E-korak dodeli podatkovne točke najbližjemu centru gruče, M-korak pa posodobi centre gruče na podlagi povprečja dodeljenih točk v gručenju K-sredstev.
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. korak: Ustvarite funkcijo za napovedovanje gruče za podatkovne točke
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> |
>
>
Dodelite, posodobite in predvidejte središče gruče
Python3
clusters>=> assign_clusters(X,clusters)> clusters>=> update_clusters(X,clusters)> pred>=> pred_cluster(X,clusters)> |
>
>
Narišite podatkovne točke z njihovim predvidenim središčem gruče
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()> |
>
>
Izhod :

K-pomeni grozdenje
Graf prikazuje podatkovne točke, obarvane z njihovimi predvidenimi skupinami. Rdeči označevalci predstavljajo posodobljene centre gruč po korakih E-M v algoritmu za združevanje v gruče K-means.
Primer 2
Uvozite potrebne knjižnice
Python3
string.compareto c#
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> |
>
>
Naložite nabor podatkov
Python3
X, y>=> load_iris(return_X_y>=>True>)> |
ustvarjanje niza nizov v Javi
>
>
Metoda komolca
Iskanje idealnega števila skupin za razdelitev podatkov je osnovna stopnja v katerem koli nenadzorovanem algoritmu. Ena najpogostejših tehnik za ugotavljanje te idealne vrednosti k je pristop s komolcem.
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_)> |
>
>
Narišite Elbow graf, da poiščete optimalno število grozdov
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()> |
>
>
Izhod:

Metoda komolca
Iz zgornjega grafa lahko opazimo, da je pri k=2 in k=3 situacija podobna komolcu. Torej, razmišljamo o K=3
Zgradite model združevanja v gruče Kmeans
Python3
kmeans>=> KMeans(n_clusters>=> 3>, random_state>=> 2>)> kmeans.fit(X)> |
>
>
Izhod:
KMeans KMeans(n_clusters=3, random_state=2)>
Poiščite središče gruče
Python3
javascript spanje
kmeans.cluster_centers_> |
>
>
Izhod:
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]])>
Predvidi skupino grozdov:
Python3
pred>=> kmeans.fit_predict(X)> pred> |
>
>
Izhod:
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)>
Narišite središče gruče s podatkovnimi točkami
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()> |
>
>
Izhod:

K-pomeni grozdenje
Podgraf na levi prikazuje dolžino cvetnega lista v primerjavi s širino cvetnega lista s podatkovnimi točkami, obarvanimi z grozdi, rdeči označevalci pa označujejo središča grozdov s sredstvi K. Podgraf na desni podobno prikazuje dolžino čašnice v primerjavi s širino čašnice.
Zaključek
Skratka, združevanje v skupine K-means je močan nenadzorovan algoritem strojnega učenja za združevanje neoznačenih naborov podatkov. Njegov cilj je razdeliti podatke v skupine, tako da so podobne podatkovne točke del iste skupine. Algoritem inicializira centroide gruče in iterativno dodeljuje podatkovne točke najbližjemu centroidu, pri čemer posodablja centroide na podlagi povprečja točk v vsaki gruči.
Pogosto zastavljena vprašanja (FAQ)
1. Kaj je združevanje k-means v gruče za analizo podatkov?
K-means je metoda particioniranja, ki nabor podatkov razdeli na 'k' različnih, neprekrivajočih se podmnožic (gruč) na podlagi podobnosti, s ciljem zmanjšati varianco znotraj vsake gruče.
2.Kaj je primer k-povprečij v resničnem življenju?
Segmentacija strank v trženju, kjer k-means združuje stranke na podlagi nakupnega vedenja, kar podjetjem omogoča prilagajanje tržnih strategij za različne segmente.
3. Katere vrste podatkov je model združevanja k-sredstev?
K-means dobro deluje z numeričnimi podatki, kjer je koncept razdalje med podatkovnimi točkami smiseln. Običajno se uporablja za zvezne spremenljivke.
4. Ali se za napovedovanje uporablja K-sredstvo?
K-means se uporablja predvsem za združevanje v gruče in skupine podobnih podatkovnih točk. Ne predvideva oznak za nove podatke; na podlagi podobnosti jih dodeli obstoječim grozdom.
5. Kaj je cilj združevanja k-povprečij?
Cilj je razdeliti podatke v skupine 'k', kar zmanjša varianco znotraj skupine. Prizadeva si oblikovati skupine, pri katerih so podatkovne točke v vsaki gruči bolj podobne druga drugi kot tistim v drugih gručih.