logo

K reiškia klasterizavimą – įvadą

K-Means klasterizavimas yra Neprižiūrimas mašininis mokymasis algoritmas, kuris sugrupuoja nepažymėtą duomenų rinkinį į skirtingas grupes. Straipsnyje siekiama ištirti k vidurkio klasterizacijos pagrindus ir veikimą kartu su įgyvendinimu.

Turinys

Kas yra K reiškia grupavimas?

Neprižiūrimas mašininis mokymasis yra procesas, kurio metu kompiuteris mokomas naudoti nepažymėtus, neklasifikuotus duomenis ir įgalinamas algoritmas veikti su tais duomenimis be priežiūros. Be jokio ankstesnio duomenų mokymo, mašinos užduotis šiuo atveju yra sutvarkyti nesurūšiuotus duomenis pagal paraleles, modelius ir variantus.



K reiškia klasterizavimą, priskiria duomenų taškus vienam iš K grupių, priklausomai nuo jų atstumo nuo klasterių centro. Jis pradedamas atsitiktinai priskiriant klasterių centroidą erdvėje. Tada kiekvienas duomenų taškas priskiriamas vienam iš klasterio, atsižvelgiant į jo atstumą nuo klasterio centroido. Priskyrus kiekvieną tašką vienam iš klasterių, priskiriami nauji klasterio centroidai. Šis procesas kartojamas, kol randamas geras klasteris. Analizėje darome prielaidą, kad klasterio skaičius yra nurodytas išplėstinėje ir turime sudėti taškus vienoje iš grupių.

Kai kuriais atvejais K nėra aiškiai apibrėžtas, todėl turime galvoti apie optimalų K skaičių. Kai duomenų taškai sutampa, ši grupuotė netinka. „K Means“ yra greitesnis, palyginti su kita klasterizavimo technika. Tai užtikrina tvirtą ryšį tarp duomenų taškų. K priemonių klasteris nepateikia aiškios informacijos apie klasterių kokybę. Skirtingas pradinis klasterio centroido priskyrimas gali sukelti skirtingus klasterius. Be to, K Means algoritmas yra jautrus triukšmui. Gali būti, kad jis įstrigo vietiniuose minimumuose.

Koks yra k-means klasterizacijos tikslas?

Tikslas iš grupavimas yra padalyti gyventojų skaičių arba rinkinys duomenų taškų į keletą grupių, kad kiekvienoje grupėje būtų daugiau duomenų taškų palyginamas vienas su kitu ir skiriasi nuo kitų grupių duomenų taškų. Iš esmės tai yra dalykų grupavimas pagal tai, kaip jie yra panašūs ir skiriasi vienas nuo kito.

Kaip veikia k-means klasterizavimas?

Mums pateikiamas elementų duomenų rinkinys su tam tikromis ypatybėmis ir šių funkcijų reikšmėmis (pvz., vektoriumi). Užduotis yra suskirstyti tuos elementus į grupes. Norėdami tai pasiekti, naudosime K-means algoritmą, neprižiūrimą mokymosi algoritmą. „K“ algoritmo pavadinime reiškia grupių / grupių, į kurias norime klasifikuoti savo elementus, skaičių.

(Tai padės, jei daiktus laikysite n-matės erdvės taškais). Algoritmas suskirstys elementus į k panašumo grupes arba grupes. Norėdami apskaičiuoti tą panašumą, kaip matavimą naudosime Euklido atstumą.

Algoritmas veikia taip:

  1. Pirmiausia atsitiktinai inicijuojame k taškų, vadinamų vidurkiais arba klasterių centroidais.
  2. Kiekvieną elementą suskirstome į kategorijas pagal artimiausią vidurkį ir atnaujiname vidurkio koordinates, kurios yra iki šiol toje klasteryje suskirstytų elementų vidurkiai.
  3. Pakartojame procesą tam tikram iteracijų skaičiui ir pabaigoje turime savo grupes.

Aukščiau paminėti taškai vadinami priemonėmis, nes tai yra juose suskirstytų elementų vidutinės reikšmės. Norėdami inicijuoti šias priemones, turime daug galimybių. Intuityvus metodas yra inicijuoti priemones atsitiktiniais duomenų rinkinio elementais. Kitas būdas yra inicijuoti vidutines atsitiktines reikšmes tarp duomenų rinkinio ribų (jei tai yra funkcija x, elementų reikšmės yra [0,3], vidurkius inicijuosime reikšmėmis for x [0,3]).

Aukščiau pateiktas algoritmas pseudokode yra toks:

Initialize k means with random values -->Tam tikram iteracijų skaičiui: --> Iteruoti per elementus: --> Raskite vidurkį, esantį arčiausiai elemento, apskaičiuodami elemento euklidinį atstumą su kiekviena priemone --> Priskirkite elementą prie reikšmės --> Atnaujinkite vidurkį pagal perkeliant jį į tos klasterio elementų vidurkį>

K-Means klasterizacijos įdiegimas Python

1 pavyzdys

Importuokite reikiamas bibliotekas

Mes importuojame Numigęs statistiniams skaičiavimams, Matplotlib brėžti grafikas, ir make_blobs iš sklearn.datasets.

Python3


json json pavyzdyje



import> numpy as np> import> matplotlib.pyplot as plt> from> sklearn.datasets>import> make_blobs>

>

>

Sukurkite tinkintą duomenų rinkinį naudodami make_blobs ir nubraižykite jį

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()>

>

>

Išvestis :

Klasterizacijos duomenų rinkinys – Geeksforgeeks

Klasterizacijos duomenų rinkinys

Inicijuokite atsitiktinius centroidus

Kodas inicijuoja tris grupes K-means klasterizavimui. Ji nustato atsitiktinę pradinę dalį ir sugeneruoja atsitiktinius klasterių centrus nurodytame diapazone ir sukuria tuščią sąrašą taškų už kiekvieną klasterį.

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>

>

>

Išvestis:

{0: {'center': array([0.06919154, 1.78785042]), 'points': []},  1: {'center': array([ 1.06183904, -0.87041662]), 'points': []},  2: {'center': array([-1.11581855, 0.74488834]), 'points': []}}>

Nubraižykite atsitiktinio inicijavimo centrą su duomenų taškais

Python3

grąžinimo tipas java




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()>

>

>

Išvestis :

Duomenų taškai su atsitiktiniu centru - Geeksforgeeks

Duomenų taškai su atsitiktiniu centru

Diagrama rodo duomenų taškų (X[:,0], X[:,1]) sklaidos diagramą su tinklelio linijomis. Jis taip pat žymi pradinius klasterių centrus (raudonos žvaigždės), sukurtus K-means klasterizavimui.

Apibrėžkite Euklido atstumą

Python3




def> distance(p1,p2):> >return> np.sqrt(np.>sum>((p1>->p2)>*>*>2>))>

>

>

Sukurkite funkciją priskirti ir atnaujinti klasterio centrą

E-step priskiria duomenų taškus artimiausiam klasterio centrui, o M-step atnaujina klasterių centrus pagal priskirtų taškų vidurkį K-means klasterizacijoje.

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 veiksmas: sukurkite funkciją, skirtą duomenų taškų klasteriui numatyti

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>

>

>

Priskirkite, atnaujinkite ir numatykite klasterio centrą

Python3




clusters>=> assign_clusters(X,clusters)> clusters>=> update_clusters(X,clusters)> pred>=> pred_cluster(X,clusters)>

>

>

Nubrėžkite duomenų taškus su numatomu klasterio 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()>

perjungti java

>

>

Išvestis :

K reiškia grupavimą – Geeksforgeeks

K reiškia klasterizavimą

Diagramoje rodomi duomenų taškai, nuspalvinti pagal numatomas grupes. Raudoni žymekliai žymi atnaujintus klasterių centrus po E-M žingsnių K-means klasterizacijos algoritme.

2 pavyzdys

Importuokite reikiamas bibliotekas

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>

>

>

Įkelkite duomenų rinkinį

Python3




X, y>=> load_iris(return_X_y>=>True>)>

java konvertuoti char į int

>

>

Alkūnės metodas

Pagrindinis bet kurio neprižiūrimo algoritmo etapas yra rasti idealų skaičių grupių, į kurias būtų galima padalyti duomenis. Vienas iš labiausiai paplitusių metodų, kaip nustatyti šią idealią k reikšmę, yra alkūnės metodas.

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_)>

>

>

Nubraižykite alkūnės grafiką, kad surastumėte optimalų klasterio skaičių

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()>

>

>

Išvestis:

Alkūnės metodas

Iš aukščiau pateikto grafiko galime pastebėti, kad esant k = 2 ir k = 3 į alkūnę panaši situacija. Taigi, mes svarstome K = 3

Sukurkite Kmeans klasterizacijos modelį

Python3




kmeans>=> KMeans(n_clusters>=> 3>, random_state>=> 2>)> kmeans.fit(X)>

>

>

Išvestis:

KMeans KMeans(n_clusters=3, random_state=2)>

Raskite klasterio centrą

Python3

kas yra jquery




kmeans.cluster_centers_>

>

>

Išvestis:

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]])>

Numatykite klasterio grupę:

Python3




pred>=> kmeans.fit_predict(X)> pred>

>

>

Išvestis:

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

Nubraižykite klasterio centrą su duomenų taškais

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()>

>

>

Išvestis:

K reiškia grupavimą – Geeksforgeeks

K reiškia klasterizavimą

Kairėje esančiame poschemoje rodomas žiedlapio ilgis ir žiedlapio plotis, o duomenų taškai nuspalvinti klasteriais, o raudoni žymekliai nurodo K vidurkių grupių centrus. Dešinėje pusėje esančiame brėžinyje panašiai rodomas taurėlapio ilgis ir taurėlapio plotis.

Išvada

Apibendrinant galima pasakyti, kad K-means grupavimas yra galingas neprižiūrimas mašininio mokymosi algoritmas, skirtas nepažymėtiems duomenų rinkiniams grupuoti. Jo tikslas yra suskirstyti duomenis į grupes, kad panašūs duomenų taškai būtų tos pačios grupės dalis. Algoritmas inicijuoja klasterio centroidus ir iteratyviai priskiria duomenų taškus artimiausiam centroidui, atnaujindamas centroidus pagal kiekvieno klasterio taškų vidurkį.

Dažnai užduodami klausimai (DUK)

1. Kas yra k-means klasterizavimas duomenų analizei?

K-means yra skaidymo metodas, kuris pagal panašumą padalija duomenų rinkinį į „k“ skirtingus, nesutampančius poaibius (grupes), siekiant sumažinti kiekvieno klasterio dispersiją.

2. Koks yra k-means pavyzdys realiame gyvenime?

Klientų segmentavimas rinkodaroje, kai k-mean sugrupuoja klientus pagal pirkimo elgseną, leidžiančią įmonėms pritaikyti rinkodaros strategijas skirtingiems segmentams.

3. Kokio tipo duomenų yra k-means klasterizacijos modelis?

K-means gerai veikia su skaitiniais duomenimis, kur atstumo tarp duomenų taškų sąvoka yra prasminga. Jis dažniausiai taikomas nuolatiniams kintamiesiems.

4. Ar K vidurkis naudojamas prognozavimui?

K-means pirmiausia naudojamas panašiems duomenų taškams grupuoti ir grupuoti. Jis nenumato naujų duomenų etikečių; ji priskiria juos esamoms klasteriams pagal panašumą.

5. Koks yra k-means klasterizacijos tikslas?

Tikslas yra padalinti duomenis į „k“ grupes, sumažinant klasterio dispersiją. Juo siekiama sudaryti grupes, kuriose duomenų taškai kiekviename klasteryje būtų panašesni vienas į kitą nei į esančius kituose klasteriuose.