Implementering av K-betyder kluster på brottsdataset



Implementering av Kmeans-kluster i den amerikanska brottsdatan

I den här bloggen kommer du att förstå vad som är K-betyder kluster och hur det kan implementeras på brottsliga uppgifter som samlats in i olika amerikanska stater. Uppgifterna innehåller brott begått som: överfall, mord och våldtäkt vid arresteringar per 100 000 invånare i vart och ett av de 50 amerikanska staterna 1973. Tillsammans med analysen av uppgifterna kommer du också att lära dig mer om:

    • Hitta det optimala antalet kluster.
    • Minimerar snedvridning
    • Skapa och analysera armbågskurvan.
  • Förstå mekanismen för k-betyder algoritm.

Låt oss börja med analysen. Uppgifterna ser ut som:





dataset

Klicka på bilden för att ladda ner denna dataset

Behöver du denna dataset? Klicka på bilden ovan för att ladda ner den.



Låt oss först förbereda data för analysen. För att göra det bör vi ta bort alla NA-värden som kan finnas i data och konvertera data till en matris.

> brott0 brott str (brott) num [1:50, 1: 4] 13.2 10 8.1 8.8 9 7.9 3.3 5.9 15.4 17.4 ... - attr (*, 'dimnames') = Lista över 2 .. $: chr [1 : 50] 'Alabama' 'Alaska' 'Arizona' 'Arkansas' ... .. $: chr [1: 4] 'Mord' 'Assault' 'UrbanPop' 'Rape'

Låt oss ta antalet kluster att vara 5. Kmeans () -funktionen tar ingångsdata och antalet kluster där data ska grupperas. Syntaxen är: kmeans (data, k) där k är antalet klustercentra.

> cl-klass (cl) [1] 'kmeans'

Analysera klustringen:



kock vs marionett vs jenkins
> str (cl) Lista över 9 $ kluster: Namngivet int [1:50] 5 3 3 5 3 5 4 5 3 5 ... ..- attr (*, 'names') = chr [1:50] ' Alabama '' Alaska '' Arizona '' Arkansas '... $ centra: num [1: 5, 1: 4] 2,95 6,11 12,14 5,59 11,3 ... ..- attr (*,' dimnames ') = Lista över 2 .. .. $: chr [1: 5] '1' '2' '3' '4' ... .. .. $: chr [1: 4] 'Mord' 'Assault' 'UrbanPop' 'Våldtäkt '$ totss: num 355808 $ withinss: num [1: 5] 4548 2286 16272 1480 3653 $ tot.withinss: num 28240 $ betweenss: num 327568 $ storlek: int [1: 5] 10 9 14 10 7 $ iter: int 3 $ ifault: int 0 - attr (*, 'class') = chr 'kmeans'

Str () -funktionen ger strukturen för kmeanerna som innehåller olika parametrar som withinss, betweenss, etc, analyserar vilka du kan ta reda på kmeans prestanda.

betweenss: Mellan summan av kvadrater, dvs Intracluster-likhet

withinss: Inom summan av kvadraten dvs Intercluster-likhet

totwithinss: Summan av alla withinss av alla kluster, dvs. total likhet inom klustret

Ett bra klustring kommer att ha ett lägre värde på withinss och ett högre värde på betweenss vilket beror på antalet kluster 'k' som valdes ursprungligen. Låt oss se hur vi kan hitta det optimala värdet av ”k”.

Hitta det optimala värdet av “k”

Ett optimalt värde på 'k' är det värde som ger oss en konvergerad uppsättning kluster med minimal distorsion. Ju större snedvridning, värre blir de kluster som bildas.

Förvrängning:

Förvrängningen kan beräknas i termer av 'withinss' från var och en av klusterna. Ju mindre värdet av 'withinss' för ett visst kluster, desto tätare kommer det att vara, alltså minimal distorsion.

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

Denna funktion tar upp data och värdet på k och returnerar 'km $ totwithinss' för det. 'Km $ totwithinss' är den totala summan av kvadraterna inom klustret, vilket inkluderar inklusive insatser av alla de 5 skapade klusterna, dvs.summa (withinss). Ju högre värde på ”km $ totwithinss” desto större blir snedvridningen.

För k = 5 är withinss 24417.02

> kmeans.wss.k (brott, 5) [1] 24417.02

Låt oss öka värdet på k från 5 till 10 och observera skillnaden.

> kmeans.wss.k (brott, 10) [1] 11083.04

Det kan ses att när värdet på K ökar minskar snedvridningen.

Vi kan ta ut de olika värdena på 'km $ totwithinss' och plotta dem i en graf för att hitta sambandet mellan distorsion och värdet på k. Följande funktion gör det för oss:

> kmeans.dis maxk = 10> dis = kmeans.dis (crime, maxk)> plot (1: maxk, dis, type = 'b', xlab = 'Number of Clusters', + ylab = 'Distortion', + col = 'blå')

Ta Da !!! Således har vi den berömda armbågskurvan med oss.

Armbågskurva:

Detta är plot mellan 'k', antalet kluster och 'totwithinss' (eller distorsion) för varje värde av k. Du kan se när antalet kluster är mindre, det blir en gradvis minskning av distorsionen, men när vi fortsätter att öka värdet på k blir reduktionshastigheten för distorsionsvärden konstant.

Detta värde av k som distorsionshastigheten blir konstant för är det optimala värdet. Här är k = 4.

Låt oss använda lite animering för att förstå hur R gav oss de grupperade resultaten.

> bibliotek (animering)> kl<- kmeans.ani(crime, 4)

Kmeans klusteralgoritm:

Låt oss förstå algoritmen som k-betyder kluster fungerar:

Steg 1. Om k = 4 väljer vi fyra slumpmässiga punkter och antar att de är klustercentra för kluster som ska skapas.

Steg 2. Vi tar upp en slumpmässig datapunkt från utrymmet och tar reda på dess avstånd från alla de 4 klustren. Om datapunkten är närmast det gröna klustercentret färgas det grönt och på samma sätt kategoriseras alla punkter bland de fyra klustren.

Steg 3. Nu beräknar vi centroid för alla gröna punkter och tilldelar den punkten som klustercentrum för det klustret.

Fibonacci-serie i c ++

På samma sätt beräknar vi centroider för alla de 4 färgade (grupperade) punkterna och tilldelar de nya centroiderna som klustercentra.

Steg 4. Steg 2 och steg 3 körs iterativt, såvida inte klustercentren konvergerar vid en punkt och inte längre rör sig.

logistisk regression python exempelkod


Således når vi de konvergerade klustercentren.

Det kan ses att uppgifterna är indelade i fyra kluster. Klustercentren är:

> cl $ centres Murder Assault UrbanPop Rape Texas 4.740741 104.8519 62.96296 16.10 Louisiana 10.907143 219.9286 71.71429 25.95 South Carolina 13.375000 284.5000 46.25000 25.05 New Mexico 11.040000 298.0000 77.60000 32.68

Cluster-4 med ”New Mexico” som klustercentrum har en enorm brottslighet med den högsta befolkningen också.

Cluster-3 och Cluster-2 följer upp.

Varje stat tilldelas ett kluster, beroende på vilket vi nu kan förutsäga dess brottsrankning. Resultatet ser ut som:

Har du en fråga till oss? Vänligen nämna det i kommentarfältet så återkommer vi till dig.

Relaterade inlägg: