Implementácia K-means klastrovania na datovom súbore kriminality



Implementácia zoskupenia Kmeans do súboru údajov o trestnej činnosti v USA

V tomto blogu pochopíte, čo je zhlukovanie K-means a ako ho možno implementovať do trestných údajov zhromaždených v rôznych štátoch USA. Údaje obsahujú spáchané trestné činy ako: útok, vražda a zatknutie na 100 000 obyvateľov v každom z 50 štátov USA v roku 1973. Spolu s analýzou údajov sa dozviete tiež:

    • Nájdenie optimálneho počtu klastrov.
    • Minimalizácia skreslenia
    • Vytvorenie a analýza krivky lakťa.
  • Pochopenie mechanizmu algoritmu k-means.

Začnime analýzou. Údaje vyzerajú ako:





dataset

Kliknutím na obrázok si stiahnete túto množinu údajov

Potrebujete tento súbor údajov? Kliknutím na obrázok vyššie si ho stiahnete.



Najprv si pripravíme údaje na analýzu. Aby sme to mohli urobiť, mali by sme odstrániť všetky NA hodnoty, ktoré by sa mohli v údajoch nachádzať, a údaje previesť do matice.

> zločin0 zločin str (zločin) počet [1:50, 1: 4] 13,2 10 8,1 8,8 9 7,9 3,3 5,9 15,4 17,4 ... - attr (*, 'dimnames') = Zoznam 2 .. $: chr [1 : 50] 'Alabama' 'Aljaška' 'Arizona' 'Arkansas' ... .. $: chr [1: 4] 'Vražda' 'Assault' 'UrbanPop' 'Znásilnenie' '

Vezmime si počet klastrov na 5. Funkcia Kmeans () vezme vstupné údaje a počet klastrov, v ktorých sa majú údaje zoskupiť. Syntax je: kmeans (data, k), kde k je počet centier klastra.

> trieda cl (cl) [1] „kmeans“

Analýza klastrovania:



> str (cl) Zoznam 9 $ klastrov: Named int [1:50] 5 3 3 5 3 5 4 5 3 5 ... ..- attr (*, 'names') = chr [1:50] ' Alabama '' Aljaška '' Arizona '' Arkansas '... $ centrá: počet [1: 5, 1: 4] 2,95 6,11 12,14 5,59 11,3 ... ..- attr (*,' dimnames ') = Zoznam 2 .. .. $: chr [1: 5] '1' '2' '3' '4' ... .. .. $: chr [1: 4] 'Vražda' Assault 'UrbanPop' Znásilnenie „$ totss: num 355808 $ v rámci: num [1: 5] 4548 2286 16272 1480 3653 $ tot. do: num 28240 $ betweenss: num 327568 $ veľkosť: int [1: 5] 10 9 14 10 7 $ iter: int 3 $ ifault: int 0 - attr (*, 'class') = chr 'kmeans'

Funkcia str () poskytuje štruktúru kmeans, ktorá obsahuje rôzne parametre, ako napríklad insidess, betweenss, atď. A analyzuje, kde môžete zistiť výkon kmeans.

betweenss: Medzi súčtom štvorcov, t.j.

v rámci: V rámci súčtu štvorca, tj. podobnosť klastra

totwithinss: Súčet všetkých vnútrajškov všetkých klastrov, tj. Celková intra-klastrová podobnosť

Dobré zoskupenie bude mať nižšiu hodnotu vnútri a vyššiu hodnotu medzi dvoma, čo závisí od počtu klastrov „k“ vybratých na začiatku. Pozrime sa, ako nájdeme optimálnu hodnotu „k“.

Nájdenie optimálnej hodnoty „k“

Optimálna hodnota „k“ je hodnota, ktorá nám dáva konvergovanú množinu zhlukov s minimálnym skreslením. Čím väčšie bude skreslenie, tým horšie budú vytvorené zhluky.

Skreslenie:

Skreslenie je možné vypočítať pomocou výrazu „vnútri“ každého z klastrov. Čím menšia bude hodnota „vnútri“ konkrétneho klastra, tým bude hustejšie osídlená, a teda minimálne skreslenie.

kmeans.wss.k<- function(crime, k){ km = kmeans(crime, k) return (km$tot.withinss) }

Táto funkcia prevezme údaje a hodnotu k a vráti pre ne „km $ totwithinss“. „Km $ totwithinss“ je celkový súčet štvorcov v rámci klastra, teda vrátane všetkých 5 vytvorených klastrov, t.j.suma (v rámci). Čím vyššia je hodnota „km $ totwithinss“, tým väčšie bude skreslenie.

Pre k = 5 je v rámci 24417,02

> kmeans.wss.k (trestný čin, 5) [1] 24417,02

Zvyšme hodnotu k z 5 na 10 a pozorujme rozdiel.

> kmeans.wss.k (trestný čin, 10) [1] 11083.04

Je vidieť, že s rastúcou hodnotou K klesá skreslenie.

Môžeme vylúčiť rôzne hodnoty ‘km $ totwithinss’ a vykresliť ich do grafu, aby sme našli vzťah medzi skreslením a hodnotou k. Nasledujúca funkcia to robí za nás:

metóda system.exit ukončí aplikáciu.
> kmeans.dis maxk = 10> dis = kmeans.dis (zločin, maxk)> zápletka (1: maxk, dis, type = 'b', xlab = 'počet klastrov', + ylab = 'skreslenie', + kol. = 'modrá')

Ta Da !!! Takto máme so sebou slávnu lakťovú krivku.

Krivka lakťa:

Toto je graf medzi „k“, počtom klastrov a „totwithinss“ (alebo skreslením) pre každú hodnotu k. Môžete vidieť, že keď je počet zhlukov menší, dochádza k postupnému znižovaniu skreslenia, ale keďže neustále zvyšujeme hodnotu k, rýchlosť znižovania hodnôt skreslenia sa stáva konštantnou.

Táto hodnota k, po prekročení ktorej sa rýchlosť skreslenia stáva konštantnou, je optimálnou hodnotou. Tu k = 4.

Použijeme animáciu, aby sme pochopili, ako nám R poskytlo zoskupené výsledky.

> knižnica (animácia)> kl<- kmeans.ani(crime, 4)

Kmeansový klastrový algoritmus:

Poďme pochopiť algoritmus, na ktorom funguje k-means klastrovanie:

Krok 1. Ak k = 4, vyberieme 4 náhodné body a predpokladáme, že sú centrami zhlukov pre vytvárané zhluky.

Krok 2. Vezmeme náhodný dátový bod z vesmíru a zistíme jeho vzdialenosť od všetkých 4 centier klastrov. Ak je údajový bod najbližšie k stredu zeleného klastra, má zelenú farbu a podobne sú všetky body kategorizované medzi 4 klastrami.

Krok č. Teraz vypočítame ťažisko všetkých zelených bodov a priradíme tento bod ako stred klastra pre túto zhluk.

Podobne vypočítame centroidy pre všetky 4 farebné (zoskupené) body a priradíme nové centroidy ako centrá klastra.

Krok č. Krok 2 a krok 3 prebiehajú iteratívne, pokiaľ sa stredy zhluku nezblížia v bode a už sa nepohybujú.

čo znamená tostring v jave


Takto sa dostávame do centier konvergovaných klastrov.

Je vidieť, že dáta sú rozdelené do 4 klastrov. Centrami klastrov sú:

> cl $ centier Murder Assault UrbanPop Rape Texas 4,740741 104,8519 62,96296 16,10 Louisiana 10,907143 219,9286 71,71429 25,95 Južná Karolína 13,375000 284,5000 46,25000 25,05 Nové Mexiko 11,04 400,00 298,0000 77 600 000 32,68

Klaster 4 s „Novým Mexikom“ ako centrom klastra má obrovskú kriminalitu aj s najvyššou populáciou.

Klaster-3 a Klaster-2 nadväzujú.

Každému štátu je priradený klaster, podľa ktorého môžeme teraz predpovedať poradie jeho kriminality. Výstup vyzerá ako:

Máte na nás otázku? Uveďte to prosím v sekcii komentárov a my sa vám ozveme.

Súvisiace príspevky: