A K-Means Clustering egy felügyelt tanulási algoritmus, amelyet a gépi tanulás vagy adattudomány klaszterezési problémáinak megoldására használnak. Ebben a témakörben megtudjuk, mi az a K-közép klaszterezési algoritmus, hogyan működik az algoritmus, valamint a k-közép klaszterezés Python implementációját.
Mi az a K-Means algoritmus?
A K-Means Clustering egy Felügyelet nélküli tanulási algoritmus , amely a címkézetlen adatkészletet különböző klaszterekbe csoportosítja. Itt K definiálja az előre definiált klaszterek számát, amelyeket létre kell hozni a folyamatban, hiszen ha K=2, akkor két klaszter lesz, K=3 esetén pedig három klaszter, és így tovább.
Ez egy iteratív algoritmus, amely a címkézetlen adatkészletet k különböző klaszterre osztja úgy, hogy minden adatkészlet csak egy hasonló tulajdonságokkal rendelkező csoportba tartozik.
Lehetővé teszi számunkra, hogy az adatokat különböző csoportokba csoportosítsuk, és kényelmes módja annak, hogy önállóan fedezzük fel a címkézetlen adatkészletben lévő csoportok kategóriáit anélkül, hogy bármilyen képzésre lenne szükség.
Ez egy centroid alapú algoritmus, ahol minden klaszter egy centroidhoz van társítva. Ennek az algoritmusnak a fő célja az adatpont és a hozzájuk tartozó klaszterek közötti távolságok összegének minimalizálása.
Az algoritmus a címkézetlen adatkészletet veszi bemenetként, felosztja az adatkészletet k számú klaszterre, és addig ismétli a folyamatot, amíg meg nem találja a legjobb klasztereket. A k értékét előre meg kell határozni ebben az algoritmusban.
A k-t jelenti klaszterezés Az algoritmus alapvetően két feladatot lát el:
- Iteratív eljárással meghatározza K középpont vagy súlypont legjobb értékét.
- Minden adatpontot hozzárendel a legközelebbi k-középhez. Azok az adatpontok, amelyek az adott k-központ közelében vannak, egy klasztert hoznak létre.
Ezért minden fürtnek vannak olyan adatpontjai, amelyek bizonyos közös jellemzőkkel rendelkeznek, és távol vannak a többi fürttől.
Az alábbi diagram bemutatja a K-közép klaszterezési algoritmus működését:
Hogyan működik a K-Means algoritmus?
A K-Means algoritmus működését az alábbi lépések magyarázzák:
1. lépés: Válassza ki a K számot a klaszterek számának meghatározásához.
változó globális javascript
2. lépés: Válasszon véletlenszerű K pontot vagy súlypontot. (Más is lehet a bemeneti adatkészletből).
3. lépés: Minden adatpontot hozzárendel a legközelebbi centroidhoz, amely az előre meghatározott K klasztereket fogja alkotni.
4. lépés: Számítsa ki a szórást, és helyezzen el minden klaszterhez egy új súlypontot.
5. lépés: Ismételje meg a harmadik lépést, ami azt jelenti, hogy minden adatpontot hozzárendel minden egyes fürt új legközelebbi súlypontjához.
6. lépés: Ha bármilyen átcsoportosítás történik, folytassa a 4. lépéssel, vagy lépjen a FINISH pontra.
7. lépés : A modell készen áll.
Értsük meg a fenti lépéseket a vizuális cselekmények figyelembevételével:
Tegyük fel, hogy két változónk van: M1 és M2. E két változó x-y tengelyes szórásdiagramja az alábbiakban látható:
- Vegyünk k számú klasztert, azaz K=2, hogy azonosítsuk az adatkészletet, és különböző klaszterekbe helyezzük őket. Ez azt jelenti, hogy megpróbáljuk ezeket az adatkészleteket két különböző klaszterbe csoportosítani.
- A klaszter kialakításához ki kell választanunk néhány véletlenszerű k pontot vagy súlypontot. Ezek a pontok lehetnek az adatkészlet pontjai vagy bármely más pont. Tehát itt az alábbi két pontot k pontként választjuk ki, amelyek nem részei az adatkészletünknek. Vegye figyelembe az alábbi képet:
- Most a szóródiagram minden adatpontját hozzárendeljük a legközelebbi K-ponthoz vagy súlyponthoz. Kiszámítjuk néhány általunk tanulmányozott matematika alkalmazásával a két pont távolságának kiszámításához. Tehát húzunk egy mediánt a két centroid között. Vegye figyelembe az alábbi képet:
A fenti képen jól látható, hogy a vonal bal oldali pontjai a K1 vagy kék centroid közelében vannak, a vonaltól jobbra lévő pontok pedig a sárga súlypont közelében vannak. Színezzük őket kékre és sárgára a tiszta megjelenítés érdekében.
- Mivel meg kell találnunk a legközelebbi klasztert, ezért a folyamatot megismételjük a választással egy új centrum . Az új súlypontok kiválasztásához kiszámoljuk ezeknek a súlypontoknak a súlypontját, és az alábbiak szerint találunk új súlypontokat:
- Ezután minden adatpontot újra hozzárendelünk az új centroidhoz. Ehhez megismételjük ugyanazt a folyamatot, hogy megtaláljuk a medián vonalat. A medián az alábbi képhez hasonló lesz:
A fenti képen láthatjuk, hogy egy sárga pont a vonal bal oldalán, két kék pont pedig jobbra van a vonaltól. Tehát ez a három pont új centroidokhoz lesz hozzárendelve.
Mivel az átcsoportosítás megtörtént, így ismét a 4-es lépésre megyünk, ami új súlypontok vagy K-pontok keresése.
- Megismételjük a folyamatot a centroidok súlypontjának megtalálásával, így az új súlypontok az alábbi képen láthatóak lesznek:
- Ahogy megkaptuk az új súlypontokat, újra megrajzoljuk a medián vonalat, és újra hozzárendeljük az adatpontokat. Tehát a kép a következő lesz:
- A fenti képen láthatjuk; Nincsenek eltérő adatpontok a vonal egyik oldalán sem, ami azt jelenti, hogy modellünk létrejött. Vegye figyelembe az alábbi képet:
Amint a modellünk készen áll, eltávolíthatjuk a feltételezett centroidokat, és a két végső klaszter az alábbi képen látható lesz:
cseréljen ki egy színt a gimpben
Hogyan válasszuk ki a „K klaszterszám” értékét a K-közép klaszterezésben?
A K-means klaszterező algoritmus teljesítménye az általa kialakított rendkívül hatékony klaszterektől függ. De a klaszterek optimális számának kiválasztása nagy feladat. Számos különböző módszer létezik a klaszterek optimális számának meghatározására, de itt a klaszterek számának vagy K értékének meghatározásának legmegfelelőbb módszerét tárgyaljuk. A módszert az alábbiakban mutatjuk be:
Könyök módszer
A könyök módszer az egyik legnépszerűbb módszer a klaszterek optimális számának megtalálására. Ez a módszer a WCSS-érték fogalmát használja. WCSS jelentése A klaszter négyzetösszegén belül , amely a klaszteren belüli összes variációt határozza meg. A WCSS értékének kiszámítására szolgáló képlet (3 klaszterre) az alábbiakban található:
WCSS= ∑Pén az 1. klaszterbentávolság (PénC1)2+∑Pén a 2. klaszterbentávolság (PénC2)2+∑Pén a CLuster3-bantávolság (PénC3)2A WCSS fenti képletében
∑Pén az 1. klaszterbentávolság (PénC1)2: Az egyes adatpontok és súlypontjai közötti távolság négyzetének összege egy klaszteren belül, és ugyanez a másik két tag esetében.
Az adatpontok és a súlypont közötti távolság mérésére bármilyen módszert használhatunk, például az euklideszi távolságot vagy a manhattani távolságot.
A klaszterek optimális értékének meghatározásához a könyök módszer az alábbi lépéseket követi:
- A K-közép klaszterezést hajtja végre egy adott adatkészleten különböző K értékekhez (1-10 tartomány).
- K minden egyes értékéhez kiszámítja a WCSS értéket.
- Görbét rajzol a számított WCSS-értékek és a K klaszterek száma között.
- A kanyarulat éles pontja vagy a diagram egy pontja úgy néz ki, mint egy kar, akkor ezt a pontot tekintjük K legjobb értékének.
Mivel a grafikon az éles hajlítást mutatja, amely úgy néz ki, mint egy könyök, ezért könyökmódszerként ismert. A könyök módszer grafikonja az alábbi képen néz ki:
Megjegyzés: Kiválaszthatjuk a megadott adatpontokkal megegyező számú klasztert. Ha az adatpontokkal megegyező számú klasztert választunk, akkor a WCSS értéke nulla lesz, és ez lesz a diagram végpontja.
A K-közép klaszterezési algoritmus Python megvalósítása
A fenti részben a K-közép algoritmust tárgyaltuk, most nézzük meg, hogyan valósítható meg Piton .
A megvalósítás előtt értsük meg, milyen típusú problémát fogunk itt megoldani. Tehát van egy adatkészletünk Mall_Customers , amely a bevásárlóközpontba látogató és ott költő ügyfelek adatai.
mitől gyors a pc
Az adott adatkészletben van Ügyfélazonosító, nem, életkor, éves bevétel ($) és költési pontszám (ami annak a számított értéke, hogy egy vásárló mennyit költött a plázában, minél többet költött, annál többet költött). Ebből az adathalmazból ki kell számítanunk néhány mintát, mivel ez egy nem felügyelt módszer, így nem tudjuk, hogy pontosan mit számoljunk.
A megvalósításhoz követendő lépések az alábbiak:
1. lépés: Adat-előfeldolgozási lépés
Az első lépés az adatok előfeldolgozása lesz, ahogy azt korábbi Regresszió és osztályozás témaköreinkben is tettük. A klaszterezési probléma azonban különbözik a többi modelltől. Beszéljük meg:
Az előző témakörökhöz hasonlóan először is a modellünkhöz tartozó könyvtárakat fogjuk importálni, ami az adat-előfeldolgozás része. A kód alább található:
# importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
A fenti kódban a zsibbadt importáltunk a matematikai számítások elvégzéséhez, matplotlib a grafikon ábrázolására szolgál, és pandák az adatkészlet kezelésére szolgálnak.
Ezután importáljuk a használandó adatkészletet. Tehát itt a Mall_Customer_data.csv adatkészletet használjuk. Az alábbi kóddal importálható:
# Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv')
A fenti kódsorok végrehajtásával megkapjuk az adatkészletünket a Spyder IDE-ben. Az adatkészlet az alábbi képen látható:
A fenti adathalmazból meg kell találnunk benne néhány mintát.
Itt nincs szükségünk semmilyen függő változóra az adat-előfeldolgozási lépéshez, mivel ez klaszterezési probléma, és fogalmunk sincs, hogy mit kell meghatározni. Tehát csak egy kódsort adunk hozzá a szolgáltatások mátrixához.
x = dataset.iloc[:, [3, 4]].values
Amint látjuk, csak 3-at nyerünk kirdés 4thfunkció. Ez azért van így, mert szükségünk van egy 2D-s rajzra a modell megjelenítéséhez, és néhány szolgáltatásra nincs szükség, például a customer_id.
2. lépés: Az optimális klaszterszám megkeresése könyök módszerrel
A második lépésben megpróbáljuk megtalálni az optimális klaszterszámot a klaszterezési problémánkhoz. Tehát, amint fentebb tárgyaltuk, itt a könyök módszert fogjuk használni erre a célra.
Mint tudjuk, a könyök módszer a WCSS koncepciót használja a diagram megrajzolására úgy, hogy a WCSS értékeket az Y tengelyen, a klaszterek számát pedig az X tengelyen ábrázolja. Tehát ki fogjuk számítani a WCSS értékét különböző k értékekhez, amelyek 1-től 10-ig terjednek. Az alábbiakban található a kódja:
#finding optimal number of clusters using the elbow method from sklearn.cluster import KMeans wcss_list= [] #Initializing the list for the values of WCSS #Using for loop for iterations from 1 to 10. for i in range(1, 11): kmeans = KMeans(n_clusters=i, init='k-means++', random_state= 42) kmeans.fit(x) wcss_list.append(kmeans.inertia_) mtp.plot(range(1, 11), wcss_list) mtp.title('The Elobw Method Graph') mtp.xlabel('Number of clusters(k)') mtp.ylabel('wcss_list') mtp.show()
Amint a fenti kódban láthatjuk, használtuk a KMeans osztályú sklearn. fürt könyvtárat a fürtök létrehozásához.
Ezután létrehoztuk a wcss_list változó egy üres lista inicializálására, amely tartalmazza a wcss értékét, amely 1-től 10-ig terjedő k különböző értékeihez van kiszámítva.
Ezt követően inicializáltuk a for ciklust az iterációhoz egy másik, 1 és 10 közötti k értéken; mivel Pythonban a ciklus esetén kizárja a kimenő korlátot, ezért 11-nek veszi a 10-etthérték.
java if utasítás
A kód többi része hasonló, mint a korábbi témákban, mivel a modellt egy jellemzőmátrixra illesztettük, majd ábrázoltuk a grafikont a klaszterek száma és a WCSS között.
Kimenet: A fenti kód végrehajtása után az alábbi kimenetet kapjuk:
A fenti ábrából láthatjuk, hogy a könyökpont a pontban van 5. Tehát a klaszterek száma itt 5 lesz.
3. lépés: A K-means algoritmus betanítása a betanítási adatkészleten
Mivel megvan a klaszterek száma, így most már betaníthatjuk a modellt az adatkészletre.
A modell betanításához ugyanazt a két kódsort fogjuk használni, mint a fenti részben, de itt az i helyett 5-öt használunk, mivel tudjuk, hogy 5 klasztert kell létrehozni. A kód alább található:
#training the K-means model on a dataset kmeans = KMeans(n_clusters=5, init='k-means++', random_state= 42) y_predict= kmeans.fit_predict(x)
Az első sor megegyezik a fentivel a KMeans osztály objektumának létrehozásához.
A második kódsorban létrehoztuk a függő változót y_predict hogy betanítsa a modellt.
A fenti kódsorok végrehajtásával megkapjuk az y_predict változót. alatt ellenőrizhetjük a változó felfedező opciót a Spyder IDE-ben. Most már összehasonlíthatjuk az y_predict értékeit az eredeti adatkészletünkkel. Vegye figyelembe az alábbi képet:
A fenti kép alapján megállapíthatjuk, hogy a CustomerID 1 egy fürthöz tartozik
linux futtatási parancs
3 (mivel az index 0-tól kezdődik, ezért a 2-t 3-nak kell tekinteni), a 2 pedig a 4-es klaszterhez tartozik, és így tovább.
4. lépés: A klaszterek megjelenítése
Az utolsó lépés a klaszterek megjelenítése. Mivel 5 klaszterünk van a modellünkhöz, ezért minden klasztert egyenként fogunk megjeleníteni.
A klaszterek megjelenítéséhez a scatter plot-t használjuk a matplotlib mtp.scatter() függvényével.
#visulaizing the clusters mtp.scatter(x[y_predict == 0, 0], x[y_predict == 0, 1], s = 100, c = 'blue', label = 'Cluster 1') #for first cluster mtp.scatter(x[y_predict == 1, 0], x[y_predict == 1, 1], s = 100, c = 'green', label = 'Cluster 2') #for second cluster mtp.scatter(x[y_predict== 2, 0], x[y_predict == 2, 1], s = 100, c = 'red', label = 'Cluster 3') #for third cluster mtp.scatter(x[y_predict == 3, 0], x[y_predict == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4') #for fourth cluster mtp.scatter(x[y_predict == 4, 0], x[y_predict == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5') #for fifth cluster mtp.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 300, c = 'yellow', label = 'Centroid') mtp.title('Clusters of customers') mtp.xlabel('Annual Income (k$)') mtp.ylabel('Spending Score (1-100)') mtp.legend() mtp.show()
A fenti kódsorokban minden klaszterhez írtunk egy kódot, 1 és 5 között. Az mtp.scatter első koordinátája, azaz x[y_predict == 0, 0], amely tartalmazza az x értéket a mátrix megjelenítéséhez. jellemzők értékei, az y_predict pedig 0 és 1 között van.
Kimenet:
A kimeneti képen jól látható az öt különböző klaszter különböző színekkel. A klaszterek az adatkészlet két paramétere között jönnek létre; Az ügyfél éves bevétele és kiadásai. A színeket és a címkéket igény vagy választás szerint módosíthatjuk. Megfigyelhetünk néhány pontot a fenti mintákból is, amelyeket az alábbiakban adunk meg:
- A 2. klaszter azt mutatja, hogy az ügyfélnek magas a bevétele, de alacsony a költése, így besorolhatjuk őket óvatos .
- A 3. klaszter az alacsony jövedelmet és az alacsony kiadásokat is mutatja, így ezek ésszerű kategóriába sorolhatók.
- A 4. klaszter az alacsony jövedelmű, nagyon magas költéssel rendelkező ügyfeleket mutatja, így ezek kategóriába sorolhatók gondatlan .
- A Cluster5 a magas jövedelmű és magas költéssel rendelkező ügyfeleket mutatja be, így célpontként is besorolhatóak, és ezek az ügyfelek lehetnek a legjövedelmezőbb vásárlók a bevásárlóközpont tulajdonosának.