A Beginner’s Guide to Hierarchical Clustering and how to Perform it in Python

Introduction

Az ügyfelek viselkedésének megértése minden iparágban kulcsfontosságú. Erre tavaly jöttem rá, amikor a marketingvezetőm megkérdezte tőlem – “Meg tudná mondani, hogy mely meglévő ügyfeleket célozzuk meg az új termékünkkel?”

Ez eléggé tanulságos volt számomra. Adattudósként gyorsan rájöttem, hogy mennyire fontos az ügyfelek szegmentálása, hogy a szervezetem testre szabhassa és célzott stratégiákat építhessen. Itt jött jól a klaszterezés fogalma!

A vevők szegmentálásához hasonló problémák gyakran megtévesztően trükkösek, mert nem egy célváltozóval a fejünkben dolgozunk. Hivatalosan is a felügyelet nélküli tanulás földjén vagyunk, ahol mintákat és struktúrákat kell kitalálnunk anélkül, hogy meghatározott eredményt tartanánk szem előtt. Ez adatkutatóként egyszerre kihívás és izgalmas.

Most, a klaszterezésnek többféle módja is van (amint azt alább látni fogja). Ebben a cikkben egy ilyen típust fogok bemutatni – a hierarchikus klaszterezést.

Megtanuljuk, mi a hierarchikus klaszterezés, mi az előnye a többi klaszterező algoritmussal szemben, a hierarchikus klaszterezés különböző típusait és a végrehajtás lépéseit. Végül felveszünk egy ügyfélszegmentációs adathalmazt, majd implementáljuk a hierarchikus klaszterezést Pythonban. Imádom ezt a technikát, és biztos vagyok benne, hogy te is imádni fogod ezt a cikk után!

Megjegyzés: Mint említettük, a klaszterezésnek többféle módja van. Javaslom, hogy nézze meg a klaszterezés különböző típusairól szóló fantasztikus útmutatónkat:

  • Egy bevezetés a klaszterezésbe és a klaszterezés különböző módszerei

Ha többet szeretne megtudni a klaszterezésről és más gépi tanulási algoritmusokról (felügyelt és nem felügyelt), nézze meg a következő átfogó programot.

  • Certified AI & ML Blackbelt+ Program

Tartalomjegyzék

  1. Supervised vs Unsupervised Learning
  2. Miért hierarchikus klaszterezés?
  3. Mi a hierarchikus klaszterezés?
  4. A hierarchikus klaszterezés típusai
    1. Agglomeratív hierarchikus klaszterezés
    2. Divizatív hierarchikus klaszterezés
  5. A hierarchikus klaszterezés végrehajtásának lépései
  6. Hogyan válasszuk meg a klaszterek számát a hierarchikus klaszterezésben?
  7. Egy nagykereskedelmi ügyfélszegmentációs probléma megoldása hierarchikus klaszterezéssel

Supervised vs Unsupervised Learning

Nagyon fontos, hogy megértsük a különbséget a felügyelt és a felügyelet nélküli tanulássupervised learning között, mielőtt belemerülnénk a hierarchikus klaszterezésbe. Hadd magyarázzam el ezt a különbséget egy egyszerű példán keresztül.

Tegyük fel, hogy meg akarjuk becsülni, hány kerékpárt bérelnek ki naponta egy városban:

Vagy tegyük fel, hogy meg akarjuk jósolni, hogy egy személy a Titanic fedélzetén túlélte-e vagy sem:

Egy rögzített célt kell elérnünk mindkét példában:

  • Az első példában a kerékpárok számát kell megjósolnunk olyan jellemzők alapján, mint az évszak, ünnepnap, munkanap, időjárás, hőmérséklet stb.
  • A második példában azt jósoljuk meg, hogy egy utas túlélte-e vagy sem. A “Survived” változóban a 0 azt jelenti, hogy az illető nem élte túl, az 1 pedig azt, hogy az illető élve megúszta. A független változók itt a következők: Pclass, Sex, Age, Fare, stb.

Amikor tehát kapunk egy célváltozót (count és Survival a fenti két esetben), amelyet egy adott prediktor- vagy független változóhalmaz alapján kell megjósolnunk (season, holiday, Sex, Age, stb.), az ilyen problémákat felügyelt tanulási problémáknak nevezzük.

Nézzük meg az alábbi ábrát, hogy ezt vizuálisan is megértsük:

Itt y a függő vagy célváltozónk, X pedig a független változókat jelenti. A célváltozó X-től függ, ezért függő változónak is nevezzük. A modellünket a független változók segítségével képezzük a célváltozó felügyelete mellett, innen a felügyelt tanulás elnevezés.

A modell képzése során az a célunk, hogy olyan függvényt hozzunk létre, amely a független változókat a kívánt célváltozóra képezi le. Miután a modellt betanítottuk, átadhatunk új megfigyelési halmazokat, és a modell megjósolja a célváltozót ezekhez. Dióhéjban ez a felügyelt tanulás.

Létezhetnek olyan helyzetek, amikor nincs olyan célváltozó, amelyet megjósolhatnánk. Az ilyen, explicit célváltozó nélküli problémákat nevezzük felügyelet nélküli tanulási problémáknak. Ezekben a problémákban csak a független változókkal rendelkezünk, és nincs cél/függő változó.

Ezekben az esetekben megpróbáljuk a teljes adatot csoportokra osztani. Ezeket a csoportokat klasztereknek nevezzük, és a klaszterek létrehozásának folyamatát klaszterezésnek nevezzük.

Ezt a technikát általában egy populáció különböző csoportokra történő klaszterezésére használják. Néhány gyakori példa erre az ügyfelek szegmentálása, hasonló dokumentumok klaszterezése, hasonló dalok vagy filmek ajánlása stb.

A felügyelet nélküli tanulásnak még sok más alkalmazása is van. Ha bármilyen érdekes alkalmazással találkozik, ossza meg velünk az alábbi megjegyzések között!

Most, vannak különböző algoritmusok, amelyek segítenek nekünk a klaszterek létrehozásában. A leggyakrabban használt klaszterező algoritmusok a K-means és a hierarchikus klaszterezés.

Miért hierarchikus klaszterezés?

Először is tudnunk kell, hogyan működik a K-means, mielőtt belemerülnénk a hierarchikus klaszterezésbe. Higgye el, ez még könnyebbé teszi a hierarchikus klaszterezés fogalmát.

Itt egy rövid áttekintés arról, hogyan működik a K-means:

  1. Döntsük el a klaszterek számát (k)
  2. Válasszunk ki k véletlenszerű pontot az adatokból centroidként
  3. Az összes pontot rendeljük hozzá a klaszterekhez. legközelebbi klasztercentroidhoz
  4. Kalkulálja ki az újonnan kialakított klaszterek centroidját
  5. Ismételje meg a 3. és 4. lépést

Ez egy iteratív folyamat. Addig fut, amíg az újonnan kialakított klaszterek centroidjai nem változnak, vagy amíg az iterációk maximális számát el nem érjük.

A K-means módszerrel kapcsolatban azonban vannak bizonyos kihívások. Mindig azonos méretű klasztereket próbál létrehozni. Emellett az algoritmus elején el kell döntenünk a klaszterek számát. Ideális esetben nem tudnánk, hogy hány klaszterünk legyen, az algoritmus elején, és ezért ez egy kihívás a K-means-nél.

Ez egy hiányosság, amit a hierarchikus klaszterezés nagyszerűen áthidal. Megszünteti azt a problémát, hogy előre meg kell határozni a klaszterek számát. Úgy hangzik, mint egy álom! Lássuk tehát, mi is az a hierarchikus klaszterezés, és hogyan javítja a K-means-t.

Mi az a hierarchikus klaszterezés?

Tegyük fel, hogy vannak az alábbi pontok, és csoportosítani szeretnénk őket:

Mindegyik pontot külön klaszterbe sorolhatjuk:

Most e klaszterek hasonlósága alapján a leghasonlóbb klasztereket egyesíthetjük, és ezt a folyamatot addig ismételjük, amíg csak egyetlen klaszter marad:

Lényegében egy klaszterhierarchiát építünk. Ezért nevezik ezt az algoritmust hierarchikus klaszterezésnek. A klaszterek számának eldöntését egy későbbi fejezetben fogom tárgyalni. Egyelőre nézzük meg a hierarchikus klaszterezés különböző típusait.

A hierarchikus klaszterezés típusai

A hierarchikus klaszterezésnek főként két típusa van:

  1. Agglomeratív hierarchikus klaszterezés
  2. Divizatív hierarchikus klaszterezés

Magyarázzuk el részletesen az egyes típusokat.

Agglomeratív hierarchikus klaszterezés

Ebben a technikában minden egyes pontot egy-egy klaszterhez rendelünk. Tegyük fel, hogy 4 adatpont van. Mindegyik pontot hozzárendeljük egy-egy klaszterhez, és így kezdetben 4 klaszterünk lesz:

Majd minden iterációnál összevonjuk a legközelebbi klaszterpárt, és ezt a lépést addig ismételjük, amíg csak egyetlen klaszter marad:

Minden lépésnél összevonjuk (vagy hozzáadjuk) a klasztereket, igaz? Ezért ezt a fajta klaszterezést additív hierarchikus klaszterezésnek is nevezik.

Divizív hierarchikus klaszterezés

A divizív hierarchikus klaszterezés ezzel ellentétesen működik. Ahelyett, hogy n klaszterrel kezdenénk (n megfigyelés esetén), egyetlen klaszterrel kezdünk, és az összes pontot ehhez a klaszterhez rendeljük.

Ezért nem számít, hogy 10 vagy 1000 adatpontunk van. Ezek a pontok mind ugyanabba a klaszterbe fognak tartozni az elején:

Most minden iterációnál felosztjuk a klaszter legtávolabbi pontját, és ezt a folyamatot addig ismételjük, amíg minden klaszter csak egyetlen pontot tartalmaz:

Minden lépésnél felosztjuk (vagy felosztjuk) a klasztereket, innen a felosztó hierarchikus klaszterezés elnevezés.

Az iparágban széles körben használják az agglomeratív klaszterezést, és ebben a cikkben ez lesz a középpontban. Az osztó hierarchikus klaszterezés gyerekjáték lesz, ha már ismerjük az agglomeratív típust.

A hierarchikus klaszterezés végrehajtásának lépései

A hierarchikus klaszterezés során a leghasonlóbb pontokat vagy klasztereket egyesítjük – ezt tudjuk. Most az a kérdés – hogyan döntjük el, hogy mely pontok hasonlóak és melyek nem? Ez az egyik legfontosabb kérdés a klaszterezésben!

Itt az egyik módja a hasonlóság kiszámításának – Vegyük a klaszterek középpontjai közötti távolságot. A legkisebb távolsággal rendelkező pontokat nevezzük hasonló pontoknak, és összevonhatjuk őket. Ezt nevezhetjük távolságalapú algoritmusnak is (mivel a klaszterek közötti távolságokat számoljuk).

A hierarchikus klaszterezésben van egy fogalom, amit közelségmátrixnak nevezünk. Ez tárolja az egyes pontok közötti távolságokat. Vegyünk egy példát, hogy megértsük ezt a mátrixot, valamint a hierarchikus klaszterezés végrehajtásának lépéseit.

A példa felállítása

Tegyük fel, hogy egy tanár különböző csoportokba akarja osztani a diákjait. Rendelkezik az egyes tanulók által egy feladatban elért pontszámokkal, és ezek alapján szeretné csoportokra osztani őket. Itt nincs fix cél, hogy hány csoportot kell létrehozni. Mivel a tanár nem tudja, hogy milyen típusú diákokat melyik csoportba kell beosztani, ez nem oldható meg felügyelt tanulási problémaként. Ezért itt megpróbáljuk alkalmazni a hierarchikus klaszterezést, és különböző csoportokba szegmentálni a diákokat.

Vegyünk egy 5 diákból álló mintát:

Közelségmátrix létrehozása

Először is létrehozunk egy közelségmátrixot, amely megadja az egyes pontok közötti távolságot. Mivel minden egyes pontnak a többi ponttól való távolságát számítjuk ki, egy n X n alakú négyzetmátrixot kapunk (ahol n a megfigyelések száma).

Készítsük el példánkhoz az 5 x 5 közelségmátrixot:

A mátrix átlós elemei mindig 0 lesznek, mivel egy pont önmagától való távolsága mindig 0 lesz. A többi távolság kiszámításához az euklideszi távolság képletét fogjuk használni. Tegyük fel tehát, hogy az 1 és 2 pont közötti távolságot akarjuk kiszámítani:

√(10-7)^2 = √9 = 3

Hasonlóképpen kiszámíthatjuk az összes távolságot és kitölthetjük a közelségmátrixot.

Lépések a hierarchikus klaszterezés elvégzéséhez

1. lépés: Először minden pontot egy-egy klaszterhez rendelünk:

A különböző színek itt különböző klasztereket jelölnek. Láthatjuk, hogy adataink 5 pontjához 5 különböző klaszter tartozik.

2. lépés: Ezután megnézzük a legkisebb távolságot a közelségmátrixban, és a legkisebb távolsággal rendelkező pontokat egyesítjük. Ezután frissítjük a közelségmátrixot:

Itt a legkisebb távolság 3, ezért az 1. és 2. pontot egyesítjük:

Nézzük meg a frissített klasztereket, és ennek megfelelően frissítjük a közelségmátrixot:

Itt a két jel (7, 10) maximumát vettük a klaszterhez tartozó jelek helyett. A maximum helyett vehetjük a minimumértéket vagy az átlagértékeket is. Most ismét kiszámítjuk ezeknek a klasztereknek a közelségmátrixát:

3. lépés: Addig ismételjük a 2. lépést, amíg csak egyetlen klaszter nem marad.

Ezért először a minimális távolságot nézzük meg a közelségmátrixban, majd a legközelebbi klaszterpárt egyesítjük. A lépések megismétlése után az alábbiakban látható módon kapjuk meg az egyesített klasztereket:

Öt klaszterrel kezdtük, és végül egyetlen klaszterünk maradt. Így működik az agglomeratív hierarchikus klaszterezés. De az égető kérdés még mindig fennáll – hogyan döntjük el a klaszterek számát? Értsük meg ezt a következő részben.

Hogyan válasszuk ki a klaszterek számát a hierarchikus klaszterezésben?

Készen állunk arra, hogy végre megválaszoljuk ezt a kérdést, amely a tanulás kezdete óta lóg a fejünkben? A klaszterek számának meghatározásához a hierarchikus klaszterezéshez egy fantasztikus fogalmat használunk, amelyet dendrogramnak nevezünk.

A dendrogram egy fa-szerű diagram, amely az egyesülések vagy szétválások sorrendjét rögzíti.

Visszatérjünk vissza a tanár-diák példánkhoz. Amikor két klasztert egyesítünk, egy dendrogram rögzíti a klaszterek közötti távolságot, és grafikon formájában ábrázolja azt. Lássuk, hogyan néz ki egy dendrogram:

Az x tengelyen az adathalmaz mintái, az y tengelyen pedig a távolság látható. Amikor két klasztert összevonunk, ebben a dendrogramban összekötjük őket, és az összekötés magassága a pontok közötti távolság lesz. Készítsük el a dendrogramot a példánkhoz:

Várjunk egy pillanatot a fenti kép feldolgozásával. Az 1. és 2. minta összevonásával kezdtük, és a két minta közötti távolság 3 volt (lásd az első közelségmátrixot az előző szakaszban). Ábrázoljuk ezt a dendrogramban:

Itt láthatjuk, hogy az 1-es és a 2-es mintát összevontuk. A függőleges vonal e minták közötti távolságot jelöli. Hasonlóképpen ábrázoljuk az összes lépést, ahol egyesítettük a klasztereket, és végül egy ilyen dendrogramot kapunk:

A hierarchikus klaszterezés lépéseit jól láthatóvá tehetjük. Minél nagyobb a függőleges vonalak távolsága a dendrogramban, annál nagyobb a távolság e klaszterek között.

Most beállíthatunk egy küszöbtávolságot, és rajzolhatunk egy vízszintes vonalat (általában úgy próbáljuk beállítani a küszöböt, hogy a legmagasabb függőleges vonalat vágja el). Állítsuk be ezt a küszöbértéket 12-nek, és rajzoljunk egy vízszintes vonalat:

A klaszterek száma azoknak a függőleges vonalaknak a száma lesz, amelyeket a küszöbértékkel rajzolt vonal metsz. A fenti példában, mivel a piros vonal 2 függőleges vonalat metsz, 2 klaszterünk lesz. Az egyik klaszter mintája (1,2,4), a másiké pedig (3,5) lesz. Elég egyszerű, nem?

Így dönthetjük el a klaszterek számát a hierarchikus klaszterezés dendrogramjának segítségével. A következő részben megvalósítjuk a hierarchikus klaszterezést, ami segít megérteni az összes fogalmat, amit ebben a cikkben tanultunk.

A nagykereskedelmi ügyfelek szegmentálási problémájának megoldása hierarchikus klaszterezéssel

Ideje, hogy bepiszkítsuk a kezünket Pythonban!

Egy nagykereskedelmi ügyfelek szegmentálási problémán fogunk dolgozni. Az adatkészletet letöltheti ezen a linken. Az adatokat az UCI Machine Learning repositoryban tároljuk. A probléma célja, hogy szegmentáljuk egy nagykereskedelmi forgalmazó ügyfeleit az alapján, hogy évente mennyit költenek különböző termékkategóriákra, például tejre, élelmiszerre, régióra stb.

Először vizsgáljuk meg az adatokat, majd alkalmazzuk a hierarchikus klaszterezést az ügyfelek szegmentálására.

Először importáljuk a szükséges könyvtárakat:

Töltsük be az adatokat, és nézzük meg az első néhány sort:

Több termékkategória van – friss, tej, élelmiszerbolt stb. Az értékek az egyes termékek esetében az egyes ügyfelek által vásárolt egységek számát jelentik. Célunk, hogy ezekből az adatokból olyan klasztereket hozzunk létre, amelyekkel a hasonló ügyfelek együttesen szegmentálhatók. Ehhez a feladathoz természetesen hierarchikus klaszterezést fogunk használni.

A hierarchikus klaszterezés alkalmazása előtt azonban normalizálnunk kell az adatokat, hogy az egyes változók skálája azonos legyen. Miért fontos ez? Nos, ha a változók skálája nem azonos, a modell torzíthat a nagyobb nagyságrendű változók, például a Fresh vagy a Milk (lásd a fenti táblázatot) felé.

Ezért először normalizáljuk az adatokat, és hozzuk az összes változót azonos skálára:

Itt láthatjuk, hogy az összes változó skálája majdnem hasonló. Most már készen állunk. Először rajzoljuk meg a dendrogramot, amely segít eldönteni a klaszterek számát az adott problémához:


Az x tengely a mintákat tartalmazza, az y tengely pedig a minták közötti távolságot. A maximális távolságot tartalmazó függőleges vonal a kék vonal, és így dönthetünk egy 6-os küszöbértékről, és vághatjuk a dendrogramot:

Két klaszterünk van, mivel ez a vonal két ponton vágja a dendrogramot. Alkalmazzuk most a hierarchikus klaszterezést 2 klaszterre:

A kimeneten láthatjuk a 0s és 1s értékeket, mivel 2 klasztert definiáltunk. A 0 az első klaszterbe tartozó pontokat, az 1 pedig a második klaszterbe tartozó pontokat jelöli. Most vizualizáljuk a két klasztert:

Félelmetes! Itt jól láthatóan vizualizálhatjuk a két klasztert. Így valósíthatjuk meg a hierarchikus klaszterezést Pythonban.

Végjegyzetek

A hierarchikus klaszterezés egy szuper hasznos módja a megfigyelések szegmentálásának. Az az előnye, hogy nem kell előre meghatározni a klaszterek számát, elég nagy előnyt jelent a k-Means-hez képest.

Ha még viszonylag új vagy az adattudományban, nagyon ajánlom az Alkalmazott gépi tanulás kurzus elvégzését. Ez az egyik legátfogóbb végponttól végpontig tartó gépi tanfolyam, amit bárhol találsz. A hierarchikus klaszterezés csak egy a sokféle téma közül, amelyet a kurzuson tárgyalunk.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.