Implementace K-means Clustering na Crime Dataset

Implementace shlukování Kmeans na americkém datovém souboru kriminality

V tomto blogu pochopíte, co je shlukování K-means a jak ho lze implementovat na kriminální údaje shromážděné v různých státech USA. Data obsahují trestné činy spáchané jako: útok, vražda a znásilnění při zatčení na 100 000 obyvatel v každém z 50 států USA v roce 1973. Spolu s analýzou údajů se dozvíte také o:

    • Nalezení optimálního počtu klastrů.
    • Minimalizace zkreslení
    • Vytváření a analýza loketní křivky.
  • Pochopení mechanismu algoritmu k-means.

Začněme s analýzou. Data vypadají jako:





dataset

Kliknutím na obrázek stáhnete tuto datovou sadu

Potřebujete tuto datovou sadu? Kliknutím na obrázek výše jej stáhnete.



Nejprve si připravíme data pro analýzu. Abychom to mohli udělat, měli bychom odstranit všechny NA hodnoty, které by mohly být přítomny v datech, a převést data 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') = Seznam 2 .. $: chr [1 : 50] 'Alabama' 'Aljaška' 'Arizona' 'Arkansas' ... .. $: chr [1: 4] 'Vražda' 'Assault' 'UrbanPop' 'Znásilnění' '

Vezměme si počet klastrů na 5. Funkce Kmeans () vezme vstupní data a počet klastrů, ve kterých mají být data seskupena. Syntaxe je: kmeans (data, k), kde k je počet center klastru.

> třída cl (cl) [1] „kmeans“

Analýza shlukování:



> str (cl) Seznam 9 $ clusteru: Named int [1:50] 5 3 3 5 3 5 4 5 3 5 ... ..- attr (*, 'names') = chr [1:50] ' Alabama '' Aljaška '' Arizona '' Arkansas '... $ center: num [1: 5, 1: 4] 2,95 6,11 12,14 5,59 11,3 ... ..- attr (*,' dimnames ') = Seznam 2 .. .. $: chr [1: 5] '1' '2' '3' '4' ... .. .. $: chr [1: 4] 'Vražda' 'Útok' 'UrbanPop' 'Znásilnění '$ totss: num 355808 $ withinss: num [1: 5] 4548 2286 16272 1480 3653 $ tot.withinss: num 28240 $ betweenss: num 327568 $ size: int [1: 5] 10 9 14 10 7 $ iter: int 3 $ ifault: int 0 - attr (*, 'class') = chr 'kmeans'

Funkce str () dává strukturu kmeanů, která zahrnuje různé parametry, jako jsou insidess, betweenss atd., Analyzuje, kde můžete zjistit výkon kmeans.

betweenss: Mezi součtem čtverců, tj. podobnost uvnitř seskupení

insidess: Uvnitř součtu čtverců, tj. podobnosti klastru

totwithinss: Součet všech vnitřností všech klastrů, tj. celková podoba uvnitř klastru

Dobré seskupení bude mít nižší hodnotu uvnitř a vyšší hodnotu mezi dvěma, což závisí na počtu seskupení „k“ vybraných původně. Podívejme se, jak můžeme najít optimální hodnotu „k“.

Nalezení optimální hodnoty „k“

Optimální hodnota „k“ je hodnota, která nám dává konvergovanou sadu shluků s minimálním zkreslením. Čím větší je zkreslení, tím horší budou vytvořené shluky.

Zkreslení:

Zkreslení lze vypočítat z hlediska „uvnitř“ každého z klastrů. Čím menší bude hodnota „uvnitř“ konkrétního klastru, tím hustěji bude osídlena, tedy minimální zkreslení.

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

Tato funkce převezme data a hodnotu k a vrátí pro ni ‚km $ totwithinss '. ‚Km $ totwithinss 'je celkový součet čtverců uvnitř klastru, tedy včetně všech 5 vytvořených klastrů, tj.součet (uvnitř). Čím vyšší je hodnota „km $ totwithinss“, tím větší bude zkreslení.

Pro k = 5 je uvnitř hodnota 24417,02

> kmeans.wss.k (zločin, 5) [1] 24417.02

Zvýšíme hodnotu k z 5 na 10 a pozorujme rozdíl.

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

Je vidět, že s rostoucí hodnotou K klesá zkreslení.

Můžeme vyjmout různé hodnoty ‚km $ totwithinss 'a vykreslit je do grafu, abychom našli vztah mezi zkreslením a hodnotou k. To za nás dělá následující funkce:

jak kompilovat java programy
> kmeans.dis maxk = 10> dis = kmeans.dis (zločin, maxk)> spiknutí (1: maxk, dis, type = 'b', xlab = 'počet klastrů', + ylab = 'zkreslení', + col = 'modrá')

Ta Da !!! Máme tedy tu slavnou loketní křivku.

Křivka lokte:

Toto je graf mezi „k“, počtem klastrů a „totwithinss“ (nebo zkreslením) pro každou hodnotu k. Uvidíte, že když je počet shluků menší, dochází k postupnému snižování zkreslení, ale jak neustále zvyšujeme hodnotu k, rychlost snižování hodnot zkreslení se stává konstantní.

Tato hodnota k, nad kterou se rychlost zkreslení stává konstantní, je optimální hodnotou. Zde k = 4.

Pojďme použít nějakou animaci, abychom pochopili, jak nám R dal seskupené výsledky.

> knihovna (animace)> cl<- kmeans.ani(crime, 4)

Algoritmus shlukování Kmeans:

Rozumíme algoritmu, na kterém funguje shlukování k-means:

Krok 1. Pokud k = 4, vybereme 4 náhodné body a předpokládáme, že jsou středy klastrů pro vytvářené klastry.

Krok 2. Vezmeme náhodný datový bod z vesmíru a zjistíme jeho vzdálenost od všech 4 center klastru. Pokud je datový bod nejblíže středu zeleného klastru, je zbarven zeleně a podobně jsou všechny body kategorizovány mezi 4 klastry.

Krok # 3. Nyní vypočítáme těžiště všech zelených bodů a přiřadíme tento bod jako střed klastru pro tento klastr.

Podobně vypočítáme centroidy pro všechny 4 barevné (seskupené) body a přiřadíme nové centroidy jako centra clusteru.

Krok č. 4. Krok 2 a krok 3 se spouští iterativně, pokud se centra klastru nesbíhají v bodě a již se nepohybují.

získat velikost pole javascript


Tak se dostáváme do center konvergovaných klastrů.

Je vidět, že data jsou rozdělena do 4 klastrů. Klastrová centra jsou:

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

Klastr 4 s „Novým Mexikem“ jako centrem klastrů má obrovskou kriminalitu i s nejvyšší populací.

Cluster-3 a Cluster-2 navazují.

Každému státu je přiřazen klastr, podle kterého nyní můžeme předpovědět jeho hodnocení kriminality. Výstup vypadá jako:

Máte na nás dotaz? Uveďte to prosím v sekci komentáře a my se vám ozveme.

Související příspěvky: