esittely
K-Means on yksi suosituimmista klusterointialgoritmeista. Kun klusterin keskipisteitä on, se ryhmittelee muut pisteet niiden etäisyyden mukaan kyseiseen keskipisteeseen.
K-Meansin haittapuoli on valita klusterien lukumäärä, K, ennen kuin suoritat pisteet ryhmittelevän algoritmin.
Jos haluat lukea perusteellisen oppaan K-Means Clusteringista, katso "K-Means Clustering with Scikit-Learn".
Kyynärpäämenetelmä ja siluettianalyysi
Yleisimmin käytetyt tekniikat Ks:n määrän valitsemiseen ovat Kyynärpää menetelmä ja Siluetti-analyysi.
Ks:n valinnan helpottamiseksi Keltainen tiili kirjasto päättelee koodin for-silmukoilla ja kaaviolla, jonka yleensä kirjoitamme 4 koodiriville.
Asenna Yellowbrick suoraan Jupyter-muistikirjasta suorittamalla:
! pip install yellowbrick
Katsotaanpa, kuinka se toimii tutussa tietojoukossa, joka on jo osa Scikit-learniä Iiris aineisto.
Ensimmäinen vaihe on tuoda tietojoukko, KMeans
ja yellowbrick
kirjastot ja lataa tiedot:
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from yellowbrick.cluster import KElbowVisualizer, SilhouetteVisualizer
iris = load_iris()
Huomaa tässä, tuomme maahan KElbowVisualizer
ja SilhouetteVisualizer
alkaen yellowbrick.cluster
, käytämme näitä moduuleja kyynärpään ja siluetin tulosten visualisointiin!
Tietojoukon lataamisen jälkeen data
joukon avain (tietotyyppi, joka on sanakirjan laajennus) ovat klusteroitavien pisteiden arvot. Jos haluat tietää, mitä numerot edustavat, katso iris['feature_names']
.
Tiedetään, että Iris-tietojoukossa on kolmen tyyppisiä iiriksiä: "versicolor", "virginica" ja "setosa". Voit myös tutustua luokkiin iris['target_names']
varmistaa.
Meillä on siis 4 klusteroitavaa ominaisuutta, ja ne tulisi jakaa kolmeen eri klusteriin sen mukaan, mitä jo tiedämme. Katsotaanpa, vahvistavatko tulokset kyynärpäämenetelmällä ja siluettianalyysillä sen.
Ensin valitsemme ominaisuuden arvot:
print(iris['feature_names'])
print(iris['target_names'])
X = iris['data']
Sitten voimme luoda a KMeans
malli, a KElbowVisualizer()
esimerkki, joka vastaanottaa kyseisen mallin sekä ks:n määrän, jolle mittari lasketaan, tässä tapauksessa alkaen 2 ja 11 Ks.
Sen jälkeen sovitamme visualisaattorin datan avulla fit()
ja näytä juoni kanssa show()
. Jos mittaria ei ole määritetty, visualisoija käyttää vääristymä metriikka, joka laskee etäisyyksien neliösumman kustakin pisteestä sille määrättyyn keskustaan:
model = KMeans(random_state=42)
elb_visualizer = KElbowVisualizer(model, k=(2,11))
elb_visualizer.fit(X)
elb_visualizer.show()
Nyt meillä on jo a Vääristymispisteen kyynärpää KMeans-klusterointiin piirtää pystyviivamerkinnän, joka olisi tässä tapauksessa paras ks-luku, 4
.
Vaikuttaa siltä, että vääristymämittarilla varustettu kyynärpäämenetelmä ei ollut paras valinta, jos emme tienneet klusterien todellista määrää. Ilmoittaako Silhouette myös, että klustereita on 4? Vastataksemme tähän, meidän on vain toistettava viimeinen koodi mallilla, jossa on 4 klusteria ja erilainen visualisointiobjekti:
model_4clust = KMeans(n_clusters = 4, random_state=42)
sil_visualizer = SilhouetteVisualizer(model_4clust)
sil_visualizer.fit(X)
sil_visualizer.show()
Koodi näyttää a KMeans-klusteroinnin siluettikaavio 150 näytteelle 4 keskuksessa. Näiden klustereiden analysoimiseksi meidän on tarkasteltava siluettikertoimen (tai pistemäärän) arvoa, sen paras arvo on lähempänä yhtä. Keskimääräinen arvomme on 0.5
, merkitty pystyviivalla, eikä niin hyvä.
Meidän on myös tarkasteltava klustereiden välistä jakautumista – hyvällä tontilla on samankokoisia klusteroituja alueita tai hyvin jakautuneita pisteitä. Tässä kaaviossa on 3 pienempää klusteria (numerot 3, 2, 1) ja yksi suurempi klusteri (numero 0), mikä ei ole odotettu tulos.
Tutustu käytännönläheiseen, käytännölliseen Gitin oppimisoppaaseemme, jossa on parhaat käytännöt, alan hyväksymät standardit ja mukana tuleva huijauslehti. Lopeta Git-komentojen googlailu ja oikeastaan oppia se!
Toistetaan sama kaavio 3 klusterille nähdäksesi mitä tapahtuu:
model_3clust = KMeans(n_clusters = 3, random_state=42)
sil_visualizer = SilhouetteVisualizer(model_3clust)
sil_visualizer.fit(X)
sil_visualizer.show()
Klusterien lukumäärää muuttamalla saatiin siluettipisteet 0.05
korkeampi ja klusterit ovat tasapainoisempia. Jos emme olisi tienneet klustereiden todellista määrää, olisimme valinneet kokeilemalla ja yhdistämällä molempia tekniikoita 3
sijasta 2
Ks-lukuna.
Tämä on esimerkki siitä, kuinka eri mittareiden yhdistäminen ja vertailu, datan visualisointi ja erilaisten klusteriarvojen kokeileminen ovat tärkeitä tulosten ohjaamiseksi oikeaan suuntaan. Ja myös, kuinka kirjasto, joka helpottaa tätä analysointia, voi auttaa tässä prosessissa!