K-betekent clustering in r: stapsgewijs voorbeeld


Clustering is een machine learning-techniek die probeert groepen observaties binnen een dataset te vinden.

Het doel is om clusters zo te vinden dat waarnemingen binnen elke cluster behoorlijk op elkaar lijken, terwijl waarnemingen in verschillende clusters behoorlijk van elkaar verschillen.

Clustering is een vorm van leren zonder toezicht , omdat we eenvoudigweg structuur proberen te vinden binnen een dataset in plaats van de waarde van een responsvariabele te voorspellen.

Clustering wordt vaak gebruikt in marketing wanneer bedrijven toegang hebben tot informatie zoals:

  • Huishoudelijk inkomen
  • Grootte van het huishouden
  • Beroep hoofd huishouden
  • Afstand tot het dichtstbijzijnde stedelijke gebied

Wanneer deze informatie beschikbaar is, kan clustering worden gebruikt om huishoudens te identificeren die vergelijkbaar zijn en waarbij de kans groter is dat ze bepaalde producten kopen of beter reageren op een bepaald soort reclame.

Een van de meest voorkomende vormen van clustering staat bekend als k-means clustering .

Wat is K-Means-clustering?

K-means clustering is een techniek waarbij we elke waarneming uit een dataset in een van de K- clusters plaatsen.

Het einddoel is om K- clusters te hebben waarin waarnemingen binnen elke cluster behoorlijk op elkaar lijken, terwijl waarnemingen in verschillende clusters behoorlijk van elkaar verschillen.

In de praktijk gebruiken we de volgende stappen om K-means clustering uit te voeren:

1. Kies een waarde voor K.

  • Eerst moeten we beslissen hoeveel clusters we in de gegevens willen identificeren. Vaak hoeven we eenvoudigweg verschillende waarden voor K te testen en de resultaten te analyseren om te zien welk aantal clusters het meest logisch lijkt voor een bepaald probleem.

2. Wijs elke waarneming willekeurig toe aan een eerste cluster, van 1 tot K.

3. Voer de volgende procedure uit totdat de clustertoewijzingen niet meer veranderen.

  • Bereken voor elk van de K- clusters het zwaartepunt van het cluster. Dit is eenvoudigweg de vector van p- gemiddelde kenmerken voor de waarnemingen van de k- de cluster.
  • Wijs elke waarneming toe aan het cluster met het dichtstbijzijnde zwaartepunt. Hier wordt de dichtstbijzijnde gedefinieerd met behulp van de Euclidische afstand .

K-betekent clustering in R

De volgende zelfstudie biedt een stapsgewijs voorbeeld van het uitvoeren van k-means-clustering in R.

Stap 1: Laad de benodigde pakketten

Eerst zullen we twee pakketten laden die verschillende nuttige functies bevatten voor k-means clustering in R.

 library (factoextra)
library (cluster)

Stap 2: Gegevens laden en voorbereiden

Voor dit voorbeeld gebruiken we de USArrests- gegevensset die is ingebouwd in R, die het aantal arrestaties per 100.000 mensen in elke Amerikaanse staat in 1973 bevat voor moord , aanranding en verkrachting , evenals het percentage van de bevolking van elke staat dat in stedelijke gebieden woont. gebieden. , UrbanPop .

De volgende code laat zien hoe u het volgende kunt doen:

  • Laad USArrests- gegevensset
  • Verwijder alle rijen met ontbrekende waarden
  • Schaal elke variabele in de dataset zodat deze een gemiddelde van 0 en een standaarddeviatie van 1 heeft
 #load data
df <-USArrests

#remove rows with missing values
df <- na. omitted (df)

#scale each variable to have a mean of 0 and sd of 1
df <- scale(df)

#view first six rows of dataset
head(df)

               Murder Assault UrbanPop Rape
Alabama 1.24256408 0.7828393 -0.5209066 -0.003416473
Alaska 0.50786248 1.1068225 -1.2117642 2.484202941
Arizona 0.07163341 1.4788032 0.9989801 1.042878388
Arkansas 0.23234938 0.2308680 -1.0735927 -0.184916602
California 0.27826823 1.2628144 1.7589234 2.067820292
Colorado 0.02571456 0.3988593 0.8608085 1.864967207

Stap 3: Vind het optimale aantal clusters

Om k-means-clustering in R uit te voeren, kunnen we de ingebouwde kmeans()- functie gebruiken, die de volgende syntaxis gebruikt:

kmeans (data, centra, nstart)

Goud:

  • gegevens: naam van de gegevensset.
  • centra: Het aantal clusters, aangeduid met k .
  • nstart: het aantal initiële configuraties. Omdat het mogelijk is dat verschillende initiële startclusters tot verschillende resultaten leiden, wordt aanbevolen om meerdere verschillende initiële configuraties te gebruiken. Het k-means-algoritme zal de initiële configuraties vinden die tot de kleinste variatie binnen het cluster leiden.

Omdat we van tevoren niet weten hoeveel clusters optimaal zijn, maken we twee verschillende grafieken die ons kunnen helpen beslissen:

1. Aantal clusters ten opzichte van totaal in som van kwadraten

Eerst gebruiken we de functie fviz_nblust() om een grafiek te maken van het aantal clusters versus het totaal in de som van de kwadraten:

 fviz_nbclust(df, kmeans, method = “ wss ”) 

Optimaal aantal clusters in k-betekent clustering

Wanneer we dit type plot maken, zoeken we doorgaans naar een ‘knie’ waar de som van de vierkanten begint te ‘buigen’ of af te vlakken. Dit is doorgaans het optimale aantal clusters.

Voor deze grafiek lijkt het erop dat er een kleine knik of „buiging“ is bij k = 4 clusters.

2. Aantal clusters versus gap-statistieken

Een andere manier om het optimale aantal clusters te bepalen is door een metriek te gebruiken die de afwijkingsstatistiek wordt genoemd, die de totale intra-clustervariatie voor verschillende waarden van k vergelijkt met hun verwachte waarden voor een verdeling zonder clustering.

We kunnen de gap-statistiek voor elk aantal clusters berekenen met behulp van de clusGap()- functie uit het clusterpakket , en de clusters uitzetten tegen de gap-statistieken met behulp van de fviz_gap_stat()- functie:

 #calculate gap statistic based on number of clusters
gap_stat <- clusGap(df,
                    FUN = kmeans,
                    nstart = 25,
                    K.max = 10,
                    B = 50)

#plot number of clusters vs. gap statistic
fviz_gap_stat(gap_stat) 

Afwijkingsstatistiek voor optimaal aantal clusters

Uit de grafiek kunnen we zien dat de gap-statistiek het hoogst is bij k = 4 clusters, wat overeenkomt met de elleboogmethode die we eerder hebben gebruikt.

Stap 4: Voer K-Means Clustering uit met Optimal K

Ten slotte kunnen we k-means clustering uitvoeren op de dataset met behulp van de optimale waarde voor k van 4:

 #make this example reproducible
set.seed(1)

#perform k-means clustering with k = 4 clusters
km <- kmeans(df, centers = 4, nstart = 25)

#view results
km

K-means clustering with 4 clusters of sizes 16, 13, 13, 8

Cluster means:
      Murder Assault UrbanPop Rape
1 -0.4894375 -0.3826001 0.5758298 -0.26165379
2 -0.9615407 -1.1066010 -0.9301069 -0.96676331
3 0.6950701 1.0394414 0.7226370 1.27693964
4 1.4118898 0.8743346 -0.8145211 0.01927104

Vector clustering:
       Alabama Alaska Arizona Arkansas California Colorado 
             4 3 3 4 3 3 
   Connecticut Delaware Florida Georgia Hawaii Idaho 
             1 1 3 4 1 2 
      Illinois Indiana Iowa Kansas Kentucky Louisiana 
             3 1 2 1 2 4 
         Maine Maryland Massachusetts Michigan Minnesota Mississippi 
             2 3 1 3 2 4 
      Missouri Montana Nebraska Nevada New Hampshire New Jersey 
             3 2 2 3 2 1 
    New Mexico New York North Carolina North Dakota Ohio Oklahoma 
             3 3 4 2 1 1 
        Oregon Pennsylvania Rhode Island South Carolina South Dakota Tennessee 
             1 1 1 4 2 4 
         Texas Utah Vermont Virginia Washington West Virginia 
             3 1 2 1 1 2 
     Wisconsin Wyoming 
             2 1 

Within cluster sum of squares by cluster:
[1] 16.212213 11.952463 19.922437 8.316061
 (between_SS / total_SS = 71.2%)

Available components:

[1] "cluster" "centers" "totss" "withinss" "tot.withinss" "betweenss"   
[7] "size" "iter" "ifault"         

Uit de resultaten kunnen we zien dat:

  • Aan het eerste cluster werden 16 staten toegewezen
  • Er zijn 13 staten toegewezen aan het tweede cluster
  • Er zijn 13 staten toegewezen aan het derde cluster
  • Er zijn 8 staten toegewezen aan het vierde cluster

We kunnen de clusters visualiseren op een spreidingsdiagram dat de eerste twee hoofdcomponenten op de assen weergeeft met behulp van de fivz_cluster() functie:

 #plot results of final k-means model
fviz_cluster(km, data = df)

K betekent clusterplot in R

We kunnen ook de functie Aggregate() gebruiken om het gemiddelde van de variabelen in elk cluster te vinden:

 #find means of each cluster
aggregate(USArrests, by= list (cluster=km$cluster), mean)

cluster Murder Assault UrbanPop Rape
				
1 3.60000 78.53846 52.07692 12.17692
2 10.81538 257.38462 76.00000 33.19231
3 5.65625 138.87500 73.87500 18.78125
4 13.93750 243.62500 53.75000 21.41250

Deze output interpreteren wij als volgt:

  • Het gemiddelde aantal moorden per 100.000 burgers in de staten van Groep 1 bedraagt 3,6 .
  • Het gemiddelde aantal aanvallen per 100.000 burgers in de landen van Groep 1 bedraagt 78,5 .
  • Het gemiddelde percentage inwoners dat in een stedelijk gebied woont in de staten van Groep 1 is 52,1% .
  • Het gemiddelde aantal verkrachtingen per 100.000 burgers in de landen van Groep 1 bedraagt 12,2 .

Enzovoort.

We kunnen ook de clustertoewijzingen van elke staat toevoegen aan de originele dataset:

 #add cluster assignment to original data
final_data <- cbind(USArrests, cluster = km$cluster)

#view final data
head(final_data)

	Murder Assault UrbanPop Rape cluster
				
Alabama 13.2 236 58 21.2 4
Alaska 10.0 263 48 44.5 2
Arizona 8.1 294 80 31.0 2
Arkansas 8.8 190 50 19.5 4
California 9.0 276 91 40.6 2
Colorado 7.9 204 78 38.7 2

Voor- en nadelen van K-Means-clustering

K-means clustering biedt de volgende voordelen:

  • Het is een snel algoritme.
  • Het kan grote datasets goed verwerken.

Het heeft echter de volgende potentiële nadelen:

  • Dit vereist dat we het aantal clusters specificeren voordat het algoritme wordt uitgevoerd.
  • Het is gevoelig voor uitschieters.

Twee alternatieven voor k-means-clustering zijn k-means-clustering en hiërarchische clustering.


De volledige R-code die in dit voorbeeld wordt gebruikt, vindt u hier .

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert