K-Means Clustering on Valvomaton koneoppiminen algoritmi, joka ryhmittelee merkitsemättömän tietojoukon eri klustereihin. Artikkelin tarkoituksena on tutkia k mean -klusteroinnin perusteita ja toimintaa toteutuksen ohella.
Sisällysluettelo
- Mitä on K-keinoklusterointi?
- Mikä on k-means-klusteroinnin tavoite?
- Miten k-keskiarvoklusterointi toimii?
- K-Means-klusteroinnin käyttöönotto Pythonissa
Mitä on K-keinoklusterointi?
Valvomaton koneoppiminen on prosessi, jossa tietokone opetetaan käyttämään merkitsemätöntä, luokittelematonta dataa ja sallitaan algoritmin toimia kyseisellä tiedolla ilman valvontaa. Ilman aiempaa datakoulutusta koneen tehtävänä on tässä tapauksessa järjestää lajittelematonta dataa rinnakkaisuuksien, kuvioiden ja muunnelmien mukaan.
K tarkoittaa klusterointia, määrittää datapisteitä yhdelle K-klusterista riippuen niiden etäisyydestä klusterien keskustasta. Se alkaa kohdistamalla satunnaisesti klusterien sentroidi avaruuteen. Sitten kukin datapiste määritetään yhdelle klusterista sen etäisyyden perusteella klusterin painopisteestä. Kun jokainen piste on osoitettu yhdelle klusterista, uudet klusterin sentroidit määritetään. Tämä prosessi suoritetaan iteratiivisesti, kunnes se löytää hyvän klusterin. Analyysissa oletetaan, että klusterin lukumäärä on annettu edistyneessä ja joudumme laittamaan pisteitä johonkin ryhmään.
Joissakin tapauksissa K ei ole selkeästi määritelty, ja meidän on pohdittava optimaalista K-määrää. K-keskiarvoklusterointi toimii parhaiten data on hyvin erotettu. Kun datapisteet ovat päällekkäin, tämä klusterointi ei sovellu. K Means on nopeampi verrattuna muihin klusterointitekniikoihin. Se tarjoaa vahvan yhteyden datapisteiden välillä. K Means -klusteri ei anna selkeää tietoa klusterien laadusta. Erilainen klusterin keskipisteen alkuperäinen määritys voi johtaa erilaisiin klustereihin. Lisäksi K Means -algoritmi on herkkä kohinalle. Se on ehkä juuttunut paikallisiin minimiin.
Mikä on k-means-klusteroinnin tavoite?
Tavoitteena klusterointi on jakaa väestö tai aseta tietopisteitä useisiin ryhmiin niin, että kunkin ryhmän tietopisteitä on enemmän vertailukelpoinen toisiinsa ja eroavat muiden ryhmien tietopisteistä. Se on pohjimmiltaan asioiden ryhmittely sen mukaan, kuinka samanlaisia ja erilaisia ne ovat keskenään.
Miten k-keskiarvoklusterointi toimii?
Saamme tietojoukon kohteita, joissa on tiettyjä ominaisuuksia, ja näiden ominaisuuksien arvot (kuten vektori). Tehtävänä on luokitella nämä kohteet ryhmiin. Tämän saavuttamiseksi käytämme K-means-algoritmia, valvomatonta oppimisalgoritmia. 'K' algoritmin nimessä edustaa ryhmien/klustereiden määrää, joihin haluamme luokitella kohteemme.
(Se auttaa, jos ajattelet kohteita pisteinä n-ulotteisessa avaruudessa). Algoritmi luokittelee kohteet k samankaltaisuusryhmään tai -klusteriin. Tämän samankaltaisuuden laskemiseksi käytämme mittana euklidista etäisyyttä.
Algoritmi toimii seuraavasti:
- Ensin alustamme satunnaisesti k pistettä, joita kutsutaan keskiarvoiksi tai klusterikeskeiksi.
- Luokittelemme jokaisen kohteen lähimmän keskiarvon mukaan ja päivitämme keskiarvon koordinaatit, jotka ovat tähän klusteriin tähän mennessä luokiteltujen kohteiden keskiarvoja.
- Toistamme prosessin tietyn määrän iteraatioita ja lopussa meillä on klusterimme.
Edellä mainittuja pisteitä kutsutaan keskiarvoiksi, koska ne ovat niihin luokiteltujen kohteiden keskiarvoja. Näiden keinojen alustamiseksi meillä on monia vaihtoehtoja. Intuitiivinen menetelmä on alustaa välineet tietojoukon satunnaisten kohteiden mukaan. Toinen tapa on alustaa keskiarvot satunnaisilla arvoilla tietojoukon rajojen välillä (jos kyseessä on ominaisuus x, kohteiden arvot ovat [0,3], alustamme keskiarvot arvoilla for x klo [0,3]).
Yllä oleva algoritmi pseudokoodissa on seuraava:
Initialize k means with random values -->Tietylle iteraatioiden määrälle: --> Iteroi alkioiden kautta: --> Etsi kohdetta lähinnä oleva keskiarvo laskemalla kohteen euklidinen etäisyys kullakin keinolla --> Määritä alkio merkitykseen --> Päivitä keskiarvo siirtämällä sitä kyseisen klusterin kohteiden keskiarvoon>
K-Means-klusteroinnin käyttöönotto Pythonissa
Esimerkki 1
Tuo tarvittavat kirjastot
Me tuomme maahan Nuhjuinen tilastollisia laskelmia varten, Matplotlib piirtää kaavio, ja make_blobs sklearn.datasetsista.
Python 3
sql-lausekkeet
import> numpy as np> import> matplotlib.pyplot as plt> from> sklearn.datasets>import> make_blobs> |
>
>
Luo mukautettu tietojoukko make_blobsilla ja piirrä se
Python 3
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()> |
>
>
Lähtö :

Klusterin tietojoukko
Alusta satunnaiset sentroidit
Koodi alustaa kolme klusteria K-keskiarvoklusterointia varten. Se asettaa satunnaisen siemenen ja luo satunnaisia klusterikeskuksia tietyllä alueella ja luo tyhjän lista pisteitä jokaisesta klusterista.
Python 3
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> |
>
>
Lähtö:
{0: {'center': array([0.06919154, 1.78785042]), 'points': []}, 1: {'center': array([ 1.06183904, -0.87041662]), 'points': []}, 2: {'center': array([-1.11581855, 0.74488834]), 'points': []}}> Piirrä satunnainen alustuskeskus datapisteillä
Python 3
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()> |
>
>
Lähtö :

Datapisteet, joissa on satunnainen keskus
Kaavio näyttää datapisteiden (X[:,0], X[:,1]) sirontakuvaajan ruudukkoviivoineen. Se merkitsee myös alkuperäiset klusterikeskukset (punaiset tähdet), jotka on luotu K-keskiarvoklusterointia varten.
Määrittele euklidinen etäisyys
Python 3
def> distance(p1,p2):> >return> np.sqrt(np.>sum>((p1>->p2)>*>*>2>))> |
>
>
Luo funktio klusterikeskuksen määrittämiseksi ja päivittämiseksi
E-vaihe määrittää datapisteet lähimpään klusterikeskukseen ja M-vaihe päivittää klusterikeskukset K-keskiarvojen klusteroinnin osoitettujen pisteiden keskiarvon perusteella.
Python 3
aakkosesta numeroon
#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> |
>
>
Vaihe 7: Luo funktio ennustaaksesi klusterin datapisteille
Python 3
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> |
>
str.replace javassa
>
Määritä, päivitä ja ennusta klusterikeskus
Python 3
clusters>=> assign_clusters(X,clusters)> clusters>=> update_clusters(X,clusters)> pred>=> pred_cluster(X,clusters)> |
>
>
Piirrä datapisteet niiden ennustetun klusterikeskuksen kanssa
Python 3
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()> |
>
>
Lähtö :

K- tarkoittaa klusterointia
Kaavio näyttää datapisteet värjättyinä niiden ennustetuilla klustereilla. Punaiset merkit edustavat päivitettyjä klusterikeskuksia E-M-vaiheiden jälkeen K-means-klusterointialgoritmissa.
Esimerkki 2
Tuo tarvittavat kirjastot
Python 3
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> |
>
>
Lataa tietojoukko
Python 3
X, y>=> load_iris(return_X_y>=>True>)> |
kokoinen lateksifontti
>
>
Kyynärpää menetelmä
Ihanteellisen ryhmien lukumäärän löytäminen tietojen jakamiseen on perusvaihe kaikissa valvomattomissa algoritmeissa. Yksi yleisimmistä tekniikoista tämän k:n ihanteellisen arvon selvittämiseksi on kyynärpäämenetelmä.
Python 3
#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_)> |
>
>
Piirrä kyynärpääkaavio löytääksesi optimaalisen klusterin lukumäärän
Python 3
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()> |
>
>
Lähtö:

Kyynärpää menetelmä
Yllä olevasta kaaviosta voidaan havaita, että k=2 ja k=3 kyynärpäämäisessä tilanteessa. Joten harkitsemme K = 3
Rakenna Kmeans-klusterointimalli
Python 3
kmeans>=> KMeans(n_clusters>=> 3>, random_state>=> 2>)> kmeans.fit(X)> |
>
>
Lähtö:
KMeans KMeans(n_clusters=3, random_state=2)>
Etsi klusterin keskus
Python 3
kuinka monta kaupunkia yhdysvalloissa
kmeans.cluster_centers_> |
>
>
Lähtö:
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]])>
Ennusta klusteriryhmä:
Python 3
pred>=> kmeans.fit_predict(X)> pred> |
>
>
Lähtö:
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)>
Piirrä klusterin keskus tietopisteineen
Python 3
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()> |
>
>
Lähtö:

K- tarkoittaa klusterointia
Vasemmalla oleva alikaavio näyttää terälehden pituuden vs. terälehden leveyden datapisteillä, jotka on värjätty klustereilla, ja punaiset merkit osoittavat K-keskiarvojen klusterikeskuksia. Oikeanpuoleinen alakuva näyttää verholehden pituuden vs. verholeveyden samalla tavalla.
Johtopäätös
Yhteenvetona voidaan todeta, että K-means-klusterointi on tehokas valvomaton koneoppimisalgoritmi merkitsemättömien tietojoukkojen ryhmittelyyn. Sen tavoitteena on jakaa tiedot klustereihin, jolloin samanlaiset datapisteet kuuluvat samaan ryhmään. Algoritmi alustaa klusterin sentroidit ja määrittää iteratiivisesti datapisteet lähimpään sentroidiin päivittäen sentroidit kunkin klusterin pisteiden keskiarvon perusteella.
Usein kysytyt kysymykset (FAQ)
1. Mitä on k-means-klusterointi data-analyysissä?
K-means on osiointimenetelmä, joka jakaa tietojoukon 'k' erilliseen, ei-päällekkäiseen osajoukkoon (klusteriin) samankaltaisuuden perusteella pyrkien minimoimaan varianssia kunkin klusterin sisällä.
2. Mikä on esimerkki k-keskiarvosta tosielämässä?
Markkinoinnin asiakassegmentointi, jossa k-keino ryhmittelee asiakkaat ostokäyttäytymisen perusteella, jolloin yritykset voivat räätälöidä markkinointistrategioita eri segmenteille.
3. Minkä tyyppistä dataa k-means-klusterointimalli on?
K-means toimii hyvin numeerisen datan kanssa, jossa datapisteiden välisen etäisyyden käsite on merkityksellinen. Sitä käytetään yleisesti jatkuviin muuttujiin.
4. Käytetäänkö K-keskiarvoa ennustamiseen?
K-keskiarvoa käytetään ensisijaisesti samanlaisten datapisteiden klusterointiin ja ryhmittelyyn. Se ei ennusta uusien tietojen tarroja; se määrittää ne olemassa oleviin klustereihin samankaltaisuuden perusteella.
5.Mikä on k-means-klusteroinnin tavoite?
Tavoitteena on osioida tiedot 'k'-klusteriin, minimoiden klusterin sisäinen varianssi. Se pyrkii muodostamaan ryhmiä, joissa datapisteet kussakin klusterissa ovat samankaltaisempia keskenään kuin muiden klustereiden kanssa.