Provedba K-znači klasteriranja na skupu podataka o kriminalu



Provedba Kmeansove klasterizacije na američkom skupu podataka o kriminalu

Na ovom blogu shvatit ćete što je K-znači grupiranje i kako se to može primijeniti na kriminalne podatke prikupljene u raznim američkim državama. Podaci sadrže zločine počinjene poput napada, ubojstva i silovanja u uhićenjima na 100 000 stanovnika u svakoj od 50 američkih država 1973. godine. Uz analizu podataka saznat ćete i o:

    • Pronalaženje optimalnog broja klastera.
    • Minimiziranje izobličenja
    • Stvaranje i analiza krivulje lakta.
  • Razumijevanje mehanizma algoritma k-znači.

Krenimo od analize. Podaci izgledaju kao:





dataset

Kliknite sliku da biste preuzeli ovaj skup podataka

Trebate ovaj skup podataka? Kliknite gornju sliku da biste je preuzeli.



Prvo pripremimo podatke za analizu. Da bismo to učinili, trebali bismo ukloniti sve vrijednosti NA koje bi mogle biti prisutne u podacima i podatke pretvoriti u matricu.

> zločin0 zločin str (zločin) broj [1:50, 1: 4] 13,2 10 8,1 8,8 9 7,9 3,3 5,9 15,4 17,4 ... - attr (*, 'dimnames') = Popis 2 .. $: chr [1 : 50] 'Alabama' 'Aljaska' 'Arizona' 'Arkansas' ... .. $: chr [1: 4] 'Ubojstvo' 'Napad' 'UrbanPop' 'Silovanje'

Uzmimo broj klastera kao 5. Funkcija Kmeans () uzima ulazne podatke i broj klastera u kojima podaci trebaju biti klasterirani. Sintaksa je: k znači (podaci, k) gdje je k broj centara klastera.

> klasa cl (cl) [1] 'kmeans'

Analiza klastera:



> str (cl) Popis 9 $ klastera: Nazvan int [1:50] 5 3 3 5 3 5 4 5 3 5 ... ..- attr (*, 'imena') = chr [1:50] ' Alabama '' Alaska '' Arizona '' Arkansas '... $ centri: num [1: 5, 1: 4] 2,95 6,11 12,14 5,59 11,3 ... ..- attr (*,' dimnames ') = Popis 2 .. .. $: chr [1: 5] '1' '2' '3' '4' ... .. .. $: chr [1: 4] 'Ubojstvo' 'Napad' 'UrbanPop' 'Silovanje '$ 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 (*, 'klasa') = chr 'kmeans'

Funkcija str () daje strukturu kmeans-a koja uključuje razne parametre poput Withinss, Betweenss itd., Analizirajući koje možete saznati izvedbu kmeans-a.

betweenss: Između zbroja kvadrata, tj. sličnosti unutarklastera

unutar kruga: Unutar zbroja kvadrata, tj. sličnost interklastera

totwithinss: Zbir svih unutrašnjosti svih klastera, tj. Ukupna sličnost unutar klastera

Dobro grupiranje imat će nižu vrijednost unutar i veću vrijednost između, što ovisi o broju klastera 'k' koji je odabran u početku. Pogledajmo kako možemo pronaći optimalnu vrijednost ‘k’.

što je ograničenje primarnog ključa

Pronalaženje optimalne vrijednosti 'k'

Optimalna vrijednost 'k' je vrijednost koja nam daje konvergirani skup klastera s minimalnim izobličenjima. Što je veće izobličenje, gore će biti formirane nakupine.

Iskrivljenje:

Iskrivljenje se može izračunati u smislu 'unutar' iz svake od nakupina. Što je manja vrijednost 'unutar' određenog klastera, to će biti gušće naseljen, a time i minimalna izobličenja.

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

Ova funkcija uzima podatke i vrijednost k i za njih vraća 'km $ totwithinss'. 'Km $ totwithinss' ukupni je zbroj kvadrata unutar klastera, što uključuje i unutar svih 5 stvorenih klastera, tj.zbroj (unutar vrijednosti). Što je veća vrijednost 'km $ totwithinss', veće će biti izobličenje.

Za k = 5, unutarnja vrijednost je 24417,02

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

Povećajmo vrijednost k s 5 na 10 i promatrajmo razliku.

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

Vidi se da se povećanjem vrijednosti K smanjuje izobličenje.

Možemo izvaditi različite vrijednosti 'km $ totwithinss' i ucrtati ih u grafikon kako bismo pronašli vezu između izobličenja i vrijednosti k. Sljedeća funkcija to čini za nas:

> kmeans.dis maxk = 10> dis = kmeans.dis (zločin, maxk)> zaplet (1: maxk, dis, type = 'b', xlab = 'Broj klastera', + ylab = 'Izobličenje', + col = 'plavo')

Ta Da !!! Tako imamo sa sobom poznatu krivulju lakta.

Krivulja lakta:

Ovo je grafikon između 'k', broja klastera i 'totwithinss' (ili izobličenja) za svaku vrijednost k. Možete vidjeti kada je broj klastera manji, postupno se smanjuje izobličenje, ali kako nastavljamo povećavati vrijednost k, brzina smanjenja vrijednosti izobličenja postaje konstantna.

Ova vrijednost k iznad koje stopa izobličenja postaje konstantna optimalna je vrijednost. Ovdje je k = 4.

Primijenimo malo animacije da bismo razumjeli kako nam je R dao klasterirane rezultate.

dobiti duljinu niza u javascriptu
> knjižnica (animacija)> cl<- kmeans.ani(crime, 4)

Kmeans algoritam klasteriranja:

Razumijemo algoritam na kojem k-znači klasteriranje funkcionira:

Korak 1. Ako je k = 4, odabiremo 4 slučajne točke i pretpostavljamo da su središta klastera za stvaranje klastera.

Korak 2. Uzimamo slučajnu podatkovnu točku iz svemira i saznajemo njezinu udaljenost od sva 4 centra klastera. Ako je podatkovna točka najbliža zelenom središtu klastera, obojena je u zeleno i slično su sve točke kategorizirane među 4 klastera.

Korak # 3. Sada izračunavamo težište svih zelenih točaka i dodijeljujemo joj točku kao središte klastera za tu nakupinu.

Slično tome, izračunavamo centroide za sve 4 obojene (nakupljene) točke i nove centroide dodjeljujemo kao središta klastera.

Korak # 4. Korak-2 i korak-3 izvode se iterativno, osim ako se centri klastera ne konvergiraju u točki i ako se više ne pomiču.

sučelje markera u primjeru Java


Tako dolazimo do konvergiranih centara klastera.

Vidi se da su podaci podijeljeni u 4 klastera. Centri klastera su:

> cl $ centri Ubistvo Napad UrbanPop Silovanje Texas 4.740741 104.8519 62.96296 16.10 Louisiana 10.907143 219.9286 71.71429 25.95 Južna Karolina 13.375000 284.5000 46.25000 25.05 Novi Meksiko 11.040000 298.0000 77.60000 32.68

Klaster-4 s 'Novim Meksikom' kao klaster centrom ima ogromnu stopu kriminala s najviše stanovništva.

Klaster-3 i Klaster-2 se nadovezuju.

Svakoj državi dodijeljena je skupina, ovisno o tome sada možemo predvidjeti rangiranje kriminala. Izlaz izgleda kao:

Imate pitanje za nas? Molimo spomenite to u odjeljku za komentare i javit ćemo vam se.

Vezane objave: