Bevezetés
A K-Means az egyik legnépszerűbb klaszterező algoritmus. Azáltal, hogy egy klaszter központi pontjai vannak, a többi pontot csoportosítja a központi ponttól való távolságuk alapján.
A K-Means hátránya, hogy meg kell választani a klaszterek számát, K, mielőtt futtatná a pontokat csoportosító algoritmust.
Ha el szeretne olvasni egy részletes útmutatót a K-Means Clusteringről, tekintse meg „K-Means Clustering with Scikit-Learn”.
Könyök módszer és sziluett elemzés
A leggyakrabban használt technikák a K számának megválasztására a Könyök módszer és a Sziluett elemzés.
A Ks kiválasztásának megkönnyítésére a Sárga tégla könyvtár a kódot for ciklusokkal és egy plottal zárja be, amelyet általában 4 kódsorra írunk.
A Yellowbrick közvetlenül Jupyter notebookról történő telepítéséhez futtassa a következőt:
! pip install yellowbrick
Nézzük meg, hogyan működik egy ismerős adatkészletnél, amely már része a Scikit-learnnek, a Írisz adatkészlet.
Az első lépés az adatkészlet importálása, KMeans
és a yellowbrick
könyvtárakat, és töltse be az adatokat:
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from yellowbrick.cluster import KElbowVisualizer, SilhouetteVisualizer
iris = load_iris()
Figyeljük meg, mi importáljuk a KElbowVisualizer
és a SilhouetteVisualizer
ból ből yellowbrick.cluster
, ezeket a modulokat fogjuk használni a Könyök és Sziluett eredmények megjelenítéséhez!
Az adatkészlet betöltése után a data
a csomó kulcsa (egy szótár kiterjesztése az adattípus) azok a pontok értékei, amelyeket klaszterezni szeretnénk. Ha tudni szeretné, mit jelentenek a számok, nézze meg iris['feature_names']
.
Ismeretes, hogy az Iris adatkészlet háromféle íriszből áll: „versicolor”, „virginica” és „setosa”. Megtekintheti az osztályokat is iris['target_names']
hitelesíteni.
Tehát 4 szolgáltatásunk van a klaszterbe, és ezeket 3 különböző klaszterbe kell szétválasztani a már ismert tudásunk szerint. Lássuk, a könyök módszerrel és a sziluettanalízissel elért eredményeink megerősítik-e ezt.
Először kiválasztjuk a jellemző értékeit:
print(iris['feature_names'])
print(iris['target_names'])
X = iris['data']
Ezután létrehozhatunk a KMeans
modell, a KElbowVisualizer()
példány, amely megkapja azt a modellt a ks számmal együtt, amelyhez a metrika számít, ebben az esetben 2 a 11 Ks.
Ezt követően illesztjük a megjelenítőt a felhasznált adatokkal fit()
és jelenítse meg a cselekményt a show()
. Ha egy metrika nincs megadva, a megjelenítő a elferdítés metrika, amely kiszámítja az egyes pontok és a hozzárendelt középpontok közötti távolság négyzetének összegét:
model = KMeans(random_state=42)
elb_visualizer = KElbowVisualizer(model, k=(2,11))
elb_visualizer.fit(X)
elb_visualizer.show()
Most már van egy Torzítási pontszám könyök a KMeans klaszterezéshez olyan függőleges vonallal jelölje meg a telket, amely ebben az esetben a legjobb számú ks lenne, 4
.
Úgy tűnik, a torzítási mérőszámmal rendelkező könyökmódszer nem volt a legjobb választás, ha nem ismerjük a klaszterek tényleges számát. A Silhouette azt is jelzi, hogy 4 klaszter van? Ennek megválaszolásához csak meg kell ismételnünk az utolsó kódot egy 4 klaszteres modellel és egy másik megjelenítő objektummal:
model_4clust = KMeans(n_clusters = 4, random_state=42)
sil_visualizer = SilhouetteVisualizer(model_4clust)
sil_visualizer.fit(X)
sil_visualizer.show()
A kód megjeleníti a A KMeans klaszterezés sziluettje 150 mintához 4 központban. A klaszterek elemzéséhez meg kell néznünk a sziluett együttható (vagy pontszám) értékét, amelynek legjobb értéke közelebb van az 1-hez. 0.5
, amelyet a függőleges vonal jelöl, és nem olyan jó.
Meg kell vizsgálnunk a klaszterek közötti eloszlást is – egy jó telken hasonló méretű klaszteresített területek vagy jól elosztott pontok vannak. Ezen a grafikonon 3 kisebb klaszter (3-as, 2-es, 1-es) és egy nagyobb (0-s) klaszter található, ami nem az az eredmény, amit vártunk.
Tekintse meg gyakorlatias, gyakorlati útmutatónkat a Git tanulásához, amely tartalmazza a bevált gyakorlatokat, az iparág által elfogadott szabványokat és a mellékelt csalólapot. Hagyd abba a guglizást a Git parancsokkal, és valójában tanulni meg!
Ismételjük meg ugyanazt a diagramot 3 klaszterre, hogy lássuk, mi történik:
model_3clust = KMeans(n_clusters = 3, random_state=42)
sil_visualizer = SilhouetteVisualizer(model_3clust)
sil_visualizer.fit(X)
sil_visualizer.show()
A klaszterek számának változtatásával a sziluett pontszámot kaptuk 0.05
magasabb és a klaszterek kiegyensúlyozottabbak. Ha nem ismernénk a klaszterek tényleges számát, mindkét technikát kísérletezve és kombinálva választottuk volna 3
helyett 2
mint a Ks száma.
Ez egy példa arra, hogy a különböző mérőszámok kombinálása és összehasonlítása, az adatok vizualizálása és a klaszterek különböző értékeivel való kísérletezés milyen fontos ahhoz, hogy az eredményt a megfelelő irányba tereljük. És azt is, hogyan segíthet ebben a folyamatban egy könyvtár, amely megkönnyíti az elemzést!