Implementatie van K-means Clustering op de Crime Dataset



Implementatie van Kmeans-clustering op de Amerikaanse misdaaddataset

In deze blog begrijpt u wat K-betekent clustering is en hoe het kan worden geïmplementeerd op de criminele gegevens die in verschillende Amerikaanse staten zijn verzameld. De gegevens bevatten misdaden die zijn gepleegd als: aanranding, moord en verkrachting bij arrestaties per 100.000 inwoners in elk van de 50 Amerikaanse staten in 1973. Naast het analyseren van de gegevens leert u ook over:

    • Het optimale aantal clusters vinden.
    • Vervorming minimaliseren
    • Creëren en analyseren van de elleboogcurve.
  • Inzicht in het mechanisme van het k-mean-algoritme.

Laten we beginnen met de analyse. De gegevens zien er als volgt uit:





dataset

Klik op de afbeelding om deze dataset te downloaden

Deze dataset nodig? Klik op de bovenstaande afbeelding om deze te downloaden.



Laten we eerst de gegevens voorbereiden voor de analyse. Om dit te doen, moeten we alle NA-waarden die mogelijk in de gegevens aanwezig zijn, verwijderen en de gegevens in een matrix converteren.

> crime0 crime str (crime) 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') = Lijst van 2 .. $: chr [1 : 50] 'Alabama' 'Alaska' 'Arizona' 'Arkansas' ... .. $: chr [1: 4] 'Murder' 'Assault' 'UrbanPop' 'Rape'

Laten we het aantal clusters op 5 nemen. De functie Kmeans () neemt de invoergegevens en het aantal clusters waarin de gegevens moeten worden geclusterd. De syntaxis is: kmeans (data, k) waarbij k het aantal clustercentra is.

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

Analyse van de clustering:



> str (cl) Lijst met 9 $ cluster: Named int [1:50] 5 3 3 5 3 5 4 5 3 5 ... ..- attr (*, 'names') = chr [1:50] ' Alabama '' Alaska '' Arizona '' Arkansas '... $ centers: num [1: 5, 1: 4] 2,95 6,11 12,14 5,59 11,3 ... ..- attr (*,' dimnames ') = Lijst van 2 .. .. $: chr [1: 5] '1' '2' '3' '4' ... .. .. $: chr [1: 4] 'Murder' 'Assault' 'UrbanPop' 'Rape '$ totss: num 355808 $ insidess: 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'

De functie str () geeft de structuur van de kmeans die verschillende parameters bevat zoals insidess, betweenss, etc, en analyseert waarmee je de prestaties van kmeans kunt achterhalen.

betweenss: tussen som van kwadraten, d.w.z. intracluster-overeenkomst

insidess: binnen som van kwadraat, d.w.z. overeenkomst tussen clusters

totwithinss: Som van alle binnenste van alle clusters, d.w.z. totale intra-cluster overeenkomst

Een goede clustering heeft een lagere waarde van insidess en een hogere waarde van betweenss die afhangt van het aantal clusters ‘k’ dat in eerste instantie is gekozen. Laten we eens kijken hoe we de optimale waarde van ‘k’ kunnen vinden.

De optimale waarde van ‘k’ vinden

Een optimale waarde van ‘k’ is de waarde die ons een geconvergeerde reeks clusters geeft met minimale vervorming. Hoe groter de vervorming, des te erger zullen de gevormde clusters zijn.

Vervorming:

De vervorming kan worden berekend in termen van ‘insidess’ van elk van de clusters. Minder de waarde van ‘insidess’ van een bepaald cluster, des te dichter bevolkt het zal zijn, dus minimale vervorming.

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

Deze functie neemt de gegevens en de waarde van k op en retourneert de ‘km $ totwithinss’ ervoor. ‘Km $ totwithinss’ is de totale som van de kwadraten binnen een cluster, dus inclusief de binnenste van alle 5 gecreëerde clusters, d.w.z.som (binnenss). Hoe hoger de waarde van ‘km $ totwithinss’, hoe groter de vervorming.

Voor k = 5 is binnenss 24417,02

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

Laten we de waarde van k verhogen van 5 naar 10, en kijken naar het verschil.

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

Het is te zien dat naarmate de waarde van K toeneemt, de vervorming afneemt.

We kunnen de verschillende waarden van ‘km $ totwithinss’ eruit halen en ze in een grafiek uitzetten om de relatie tussen vervorming en de waarde van k te vinden. De volgende functie doet dat voor ons:

> kmeans.dis maxk = 10> dis = kmeans.dis (crime, maxk)> plot (1: maxk, dis, type = 'b', xlab = 'Aantal clusters', + ylab = 'Distortion', + col = 'blauw')

Ta Da !!! Zo hebben we de bekende elleboogcurve bij ons.

Elleboogcurve:

Dit is de plot tussen ‘k’, het aantal clusters en de ‘totwithinss’ (of vervorming) voor elke waarde van k. Je kunt zien wanneer het aantal clusters kleiner is, er een geleidelijke afname van de vervorming is, maar naarmate we de waarde van k blijven verhogen, wordt de snelheid waarmee de vervormingswaarden worden verminderd constant.

Deze waarde van k waarboven de vervormingssnelheid constant wordt, is de optimale waarde. Hier k = 4.

Laten we wat animatie toepassen om te begrijpen hoe R ons de geclusterde resultaten gaf.

> bibliotheek (animatie)> cl<- kmeans.ani(crime, 4)

Kmeans clustering algoritme:

Laten we het algoritme begrijpen waarop k-betekent clustering werkt:

Stap 1. Als k = 4, selecteren we 4 willekeurige punten en gaan we ervan uit dat ze clustercentra zijn voor de te maken clusters.

Stap 2. We nemen een willekeurig datapunt uit de ruimte en zoeken de afstand tot alle 4 clusterscentra. Als het datapunt zich het dichtst bij het groene clustercentrum bevindt, is het groen gekleurd en worden alle punten op dezelfde manier gecategoriseerd over de 4 clusters.

Stap 3. Nu berekenen we het zwaartepunt van alle groene punten en wijzen dat punt toe als het clustercentrum voor dat cluster.

Evenzo berekenen we centroïden voor alle 4 gekleurde (geclusterde) punten en wijzen we de nieuwe centroïden toe als de clustercentra.

eendimensionale array in java

Stap 4. Stap-2 en stap-3 worden iteratief uitgevoerd, tenzij de clustercentra op een punt samenkomen en niet meer bewegen.


Zo bereiken we de geconvergeerde clusterscentra.

Het is te zien dat de gegevens zijn verdeeld in 4 clusters. De clustercentra zijn:

> cl $ centra 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 met ‘New Mexico’ als clustercentrum heeft ook een enorme criminaliteit met de hoogste populatie.

Cluster-3 en Cluster-2 volgen op.

Elke staat krijgt een cluster toegewezen, afhankelijk waarvan we nu zijn misdaadrangschikking kunnen voorspellen. De output ziet er als volgt uit:

Heeft u een vraag voor ons? Vermeld het in het opmerkingengedeelte en we nemen contact met u op.

Gerelateerde berichten: