Silhouettescore: zo beoordeel je de kwaliteit van clustering
Een praktische gids voor de silhouettescore, met de formule, interpretatieranges, een scikit-learn-voorbeeld, hoe je hem gebruikt om het juiste aantal clusters te kiezen, en hoe hij zich verhoudt tot andere clusteringmetrics.
Hoe weet je na het trainen van een clusteringmodel of de clusters deugen?
Daar is geen universeel antwoord op. In traditionele supervised learning kun je voorspellingen vergelijken met echte labels en een accuraatheidsscore krijgen. Dat kan niet met clustering. Je koos k=5, maar is een andere k misschien beter? Zonder labels kun je niet zien of het algoritme de structuur vond of de data gewoon in willekeurige stukken heeft verdeeld.
De silhouettescore is de maatstaf die je zoekt. Hij laat zien hoe goed elk punt past bij zijn toegewezen cluster ten opzichte van het dichtstbijzijnde andere cluster, en het is een van de meest gebruikte metrics. Hij werkt zonder labels en is makkelijk te interpreteren.
In dit artikel neem ik je mee door de formule en hoe je die leest, laat ik een Python-voorbeeld met scikit-learn zien en bespreek ik wanneer het wel en niet de ideale oplossing is.
De silhouettescore is een getal tussen -1 en 1 dat aangeeft hoe goed elk punt bij zijn cluster past.
Het getal laat je twee dingen zien:
Hoe dicht een punt bij de andere punten in zijn eigen cluster ligt
Hoe ver het is van het dichtstbijzijnde cluster waar het niet toe behoort
Als het punt goed binnen zijn eigen groep ligt en ver van andere, is de score hoog. Als het aan de rand ligt, dichter bij een naburig cluster dan bij zijn eigen cluster, is de score laag.
Kort gezegd, dat is de balans die de silhouettescore laat zien. Hij omvat zowel hoe dicht punten binnen elk cluster gegroepeerd zijn als hoe goed clusters van elkaar gescheiden zijn. Beide zijn even belangrijk. Een clustering die punten goed groepeert maar clusters bovenop elkaar plaatst, is niet nuttig, en clustering die clusters goed scheidt maar punten losjes binnen die clusters laat zweven, evenmin.
Goed gescheiden clusters vergeleken met overlappende clusters
Hogere scores betekenen beter gedefinieerde clusters. Een score dicht bij 1 betekent dat punten strak binnen hun cluster liggen en ver van andere. Een score dicht bij 0 betekent dat clusters overlappen of dat de grenzen vaag zijn. Een negatieve score betekent dat het punt dichter bij een ander cluster ligt dan bij het cluster waaraan het is toegewezen.
Hoe werkt de silhouettescore?
Elk punt krijgt zijn eigen silhouettescore, en die score komt uit twee afstanden.
De eerste is hoe ver het punt gemiddeld van de andere punten in zijn toegewezen cluster ligt. Als die klein is, ligt het punt dicht bij de anderen in het cluster. Als die groot is, is het punt los aan zijn cluster verbonden.
De tweede is hoe ver het punt gemiddeld van de punten in het dichtstbijzijnde naburige cluster ligt. Als die groot is, is het punt duidelijk gescheiden van andere clusters. Als die klein is, ligt het punt dicht bij de grens.
Afstand van een punt tot de clusters
De silhouettewaarde vergelijkt deze twee getallen. Een punt dat goed binnen zijn cluster ligt en ver van andere krijgt een hoge score. Een punt aan de rand (dicht bij een ander cluster) krijgt een lage score. Een punt dat dichter bij een ander cluster ligt dan bij zijn eigen cluster krijgt een negatieve score.
Onthoud hierbij dat geen van beide afstanden op zichzelf genoeg is.
Een strak cluster kan pal naast een ander liggen. Een goed gescheiden cluster kan intern verspreid zijn. Je hebt beide afstanden nodig om de toewijzing te vertrouwen.
Formule voor de silhouettescore
Hier is de formule voor een enkel punt:
Formule voor de silhouettescore
Waarbij:
a de gemiddelde afstand is van het punt tot alle andere punten in hetzelfde cluster
b de gemiddelde afstand is van het punt tot alle punten in het dichtstbijzijnde naburige cluster
De formule deelt het verschil tussen b en a door de grootste van de twee.
In het algemeen kun je deze richtlijnen gebruiken om de score te interpreteren:
Als b veel groter is dan a: Het punt ligt ver van andere clusters en dicht bij zijn eigen cluster. De teller is dicht bij b, de noemer is ook b, en de score ligt dicht bij 1
Als a veel groter is dan b: Het punt ligt dichter bij een ander cluster dan bij zijn eigen cluster. De teller is een groot negatief getal dicht bij -a, de noemer is a, en de score ligt dicht bij -1
Als a en b ongeveer gelijk zijn: Het punt ligt op de grens tussen twee clusters. De teller ligt dicht bij 0, en de score ook
Meer over de details volgt zo.
Hoe de silhouettescore te interpreteren
Hier is een ruwe leidraad voor het lezen van de silhouettescore:
Dicht bij 1: Punten liggen goed binnen hun clusters en ver van andere
Rond 0,7: Goede clustering, groepen zijn onderscheidend en punten liggen dicht bij de andere punten in hun cluster
Rond 0,5: Redelijke clustering, er is wat overlap tussen clusters, maar ze zijn nog te onderscheiden
Dicht bij 0: Clusters overlappen of de grenzen zijn onduidelijk. De structuur is mogelijk niet echt
Onder 0: Punten liggen dichter bij het verkeerde cluster. Dit kan gebeuren als je het verkeerde aantal clusters kiest of als de data zich überhaupt niet goed laat clusteren.
De drempels hierboven zijn slechts ruwe richtlijnen. Wat een goede silhouettescore is, hangt af van de dataset.
Schaars en hoog-dimensionale data levert vaak lagere scores op, zelfs als de clusters goed zijn. Dicht opeengepakte, goed gescheiden data kan scores boven 0,7 opleveren. Vergelijk scores tussen modellen op dezelfde dataset, niet met een universele drempel.
Hoe de silhouettescore te berekenen
Je berekent de silhouettescore punt voor punt. Zo werkt het voor één punt.
Stap 1: Bereken a, de gemiddelde afstand van het punt tot elk ander punt in zijn eigen cluster. Als het punt in een cluster met 4 andere punten zit en de afstanden naar die punten 1,2, 1,5, 1,0 en 1,3 zijn:
Berekening van de silhouettescore (1)
Stap 2: Vind het dichtstbijzijnde naburige cluster (dat wil zeggen het cluster, anders dan het eigen cluster van het punt, met de laagste gemiddelde afstand vanaf het punt). Bereken vervolgens b, de gemiddelde afstand van het punt tot elk punt in dat cluster. Als het dichtstbijzijnde cluster 5 punten heeft op afstanden 2,4, 2,8, 3,0, 2,6 en 2,7:
Berekening van de silhouettescore (2)
Stap 3: Vul a en b in de formule in:
Berekening van de silhouettescore (3)
Stap 4: Herhaal dit voor elk punt in de dataset. De totale silhouettescore voor de clustering is het gemiddelde van alle puntscores.
Voorbeeld van silhouettescore in Python
Scikit-learn geeft je twee functies om de silhouettescore te berekenen, beide in sklearn.metrics:
silhouette_score() geeft de gemiddelde score voor de hele clustering terug
silhouette_samples() geeft de score terug voor elk individueel punt
Zo gebruik je ze met KMeans op een synthetische dataset:
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.metrics import silhouette_score, silhouette_samples
# Synthetic data with 4 clusters
X, _ = make_blobs(n_samples=500, centers=4, cluster_std=1.0, random_state=42)# Clustering model
kmeans = KMeans(n_clusters=4, random_state=42, n_init=10)
labels = kmeans.fit_predict(X)# Overall silhouette score
score = silhouette_score(X, labels)print(f"Overall silhouette score: {score:.3f}")# Per-point silhouette values
sample_scores = silhouette_samples(X, labels)print(f"First 5 point scores: {sample_scores[:5]}")Mogelijk gemaakt door
Dit is de output die je krijgt als je de bovenstaande code uitvoert:
Voorbeeldoutput in Python
De totale score van 0,791 betekent dat de vier clusters goed gedefinieerd en gescheiden zijn.
De puntscores laten je elk datapunt analyseren.
Punten met hoge individuele scores liggen goed binnen hun cluster. Punten met lage of negatieve scores liggen op de grens of zijn verkeerd toegewezen, wat handig is om uitschieters op te sporen of grensgevallen te bekijken.
Het optimale aantal clusters kiezen
Een van de meest voorkomende toepassingen van de silhouettescore is het kiezen van de juiste k voor KMeans.
Dat doe je in drie stappen:
Fit KMeans voor een reeks k-waarden
Bereken de silhouettescore voor elke fit
Kies de k met de hoogste score
Hier is de code daarvoor:
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.metrics import silhouette_score
X, _ = make_blobs(n_samples=500, centers=4, cluster_std=1.0, random_state=42)# Fit KMeans for k=2 to k=10 and keep track of the silhouette score for each
k_values =range(2,11)
scores =[]for k in k_values:
kmeans = KMeans(n_clusters=k, random_state=42, n_init=10)
labels = kmeans.fit_predict(X)
scores.append(silhouette_score(X, labels))print(f"k={k}: silhouette = {scores[-1]:.3f}")Mogelijk gemaakt door
Dit is de score die je per k ziet:
Silhouettescore bij verschillende waarden van k
De hoogste score ligt bij k=4. Dat is de waarde die je wilt kiezen.
Onthoud dat de silhouettescore domeinkennis niet vervangt. Als je businessprobleem om 5 klantsegmenten vraagt en de silhouette het hoogst is bij 4, kies dan niet automatisch 4. De metric laat zien waar de data de schoonste structuur heeft, maar soms is het juiste aantal clusters het aantal dat overeenkomt met iets dat in jouw probleem betekenisvol is.
Silhouettescore vs. andere clusteringmetrics
De silhouettescore is waarschijnlijk de meest gebruikte maatstaf om clustering te beoordelen, maar niet de enige. Zo verhoudt hij zich tot alternatieven.
Silhouettescore vs. elbow-methode
De elbow-methode is een visuele techniek om k in KMeans te kiezen. Je fit modellen voor een reeks k-waarden, je zet de inerta (som van kwadraten binnen clusters) uit tegen k, en je kiest de waarde waar de curve een scherpe knik vertoont.
De elbow-methode heeft hier het voordeel omdat hij snel en eenvoudig is. Maar de "knik" is niet altijd duidelijk. Bij rommelige data kan de curve soms vloeiend lijken en zie je niet waar hij buigt.
De silhouettescore geeft je een echt getal voor elke k, zodat je zinvoller kunt vergelijken. Het is trager om te berekenen, maar laat de beslissing niet over aan visuele interpretatie.
Gebruik de elbow-methode voor een snelle sanity check. Gebruik de silhouettescore als je een onderbouwd antwoord nodig hebt.
Silhouettescore vs. Davies-Bouldin-index
De Davies-Bouldin-index (DBI) meet de gemiddelde gelijkenis tussen elk cluster en het meest gelijkende. Lager is beter, en een perfecte score is 0.
DBI gebruikt clustercentroïden om gelijkenis te berekenen, wat hem sneller maakt dan de silhouettescore op grote datasets. Het hanteert ook een vergelijkbare intuïtie door strakke en goed gescheiden clusters te belonen.
Het nadeel is dat DBI je alleen iets vertelt over de clustering als geheel. De silhouettescore geeft ook een puntscore, zodat je grensgevallen en uitschieters kunt vinden.
Gebruik DBI als je met grote datasets werkt en snelheid belangrijk is. Gebruik de silhouettescore als je individuele punten wilt bekijken.
Silhouettescore vs. Calinski-Harabasz-index
De Calinski-Harabasz-index (CH), ook wel de variatie-ratio-criterium genoemd, is de verhouding tussen spreiding tussen clusters en spreiding binnen clusters. Hogere scores betekenen betere clustering, en de score is onbegrensd (geen bovengrens).
CH is snel en werkt goed op grote datasets omdat het alleen clusterstatistieken gebruikt. Net als silhouette en DBI werkt het het best op convexe, goed gescheiden clusters.
CH heeft ook geen natuurlijke schaal, dus je kunt CH-scores alleen vergelijken tussen modellen op dezelfde dataset, niet tussen verschillende datasets.
Gebruik CH wanneer je dataset groot is en je snel resultaten nodig hebt. Gebruik de silhouettescore als je interpretatie en inzichten per datapunt wilt.
Interne vs. externe clusteringmetrics
De bovenstaande metrics (silhouette, DBI, CH, elbow) zijn allemaal interne metrics. Ze beoordelen clustering alleen met de data zelf, zonder grondwaarheidslabels. Dat maakt ze de standaardkeuze voor clustering in de praktijk, waar labels niet bestaan.
Externe metrics vergelijken cluster-toewijzingen met bekende labels. De Adjusted Rand Index (ARI), Normalized Mutual Information (NMI) en homogeniteit zijn veelvoorkomende voorbeelden. Ze worden gebruikt wanneer je labels hebt en wilt testen hoe goed een clusteringalgoritme die terugvindt.
Gebruik interne metrics wanneer je geen labels hebt, wat meestal het geval is. Gebruik externe metrics wanneer je clusteringalgoritmen benchmarkt op gelabelde data.
Hier is een overzicht van de metrics naast elkaar:
Methode
Bereik
Beste waarde
Snelheid
Gebruik voor
Silhouettescore
-1 tot 1
Dicht bij 1
Traag op grote datasets
Interpretatie en inzichten per punt
Elbow-methode
0 tot oneindig
Zoek de knik
Snel
Snelle controles
Davies-Bouldin-index
0 tot oneindig
Dicht bij 0
Snel
Grote datasets
Calinski-Harabasz-index
0 tot oneindig
Hoger is beter
Snel
Grote, ongelabelde datasets
Silhouettescore vergeleken met alternatieven
Beperkingen van de silhouettescore
De silhouettescore heeft een paar beperkingen die het waard zijn om te kennen:
Gaat uit van afstandsgebaseerde clustering: De silhouettescore is standaard gebaseerd op Euclidische afstand. Hij werkt goed voor KMeans en andere centroid-gebaseerde algoritmen, maar past minder bij dichtheidsgebaseerde methoden zoals DBSCAN, waar clusters willekeurige vormen hebben en geen duidelijke centroid
Werkt het best met kleinere, goed gescheiden clusters: De metric beloont strakke, sferische clusters die ver uit elkaar liggen. Als je data clusters heeft die dicht bij elkaar liggen of overlappen, zal de score laag zijn, zelfs als de clustering correct is
Niet ideaal bij onregelmatige clustervormen: Clusters in de echte wereld zijn niet altijd convex. Als dat voor jouw data niet zo is, krijgen clusters lage silhouettescores, zelfs wanneer de toewijzingen kloppen
Rekenlast op grote datasets: Het berekenen van de silhouettescore vereist paarsgewijze afstanden tussen punten, wat schaalt als O(n^2). Op datasets met miljoenen punten wordt dit kostbaar
Gevoeligheid voor de gekozen afstandsmaat: De score verandert afhankelijk van of je Euclidische, Manhattan-, cosinus- of een andere afstand gebruikt. Als je data niet bij Euclidische aannames past, kan de silhouettescore misleidend zijn
Best practices voor het gebruik van de silhouettescore
De silhouettescore werkt het best als je een paar basispraktijken volgt:
Vergelijk meerdere clusteroplossingen: Bereken niet slechts één silhouettescore. Je zou clusteringmodellen moeten fitten met verschillende waarden van k (of verschillende algoritmen) en hun scores naast elkaar vergelijken
Visualiseer clusters naast de score: Een getal alleen vertelt niet het hele verhaal. Plot je clusters en kijk of de vormen logisch zijn
Optimaliseer niet alleen voor de hoogste score: Een clustering met k=2 heeft vaak een hogere score dan k=5, zelfs wanneer 5 clusters in jouw probleem betekenisvol zijn
Combineer met domeinkennis: De score vertelt je waar de data de schoonste structuur heeft. Domeinkennis vertelt je welke structuur daadwerkelijk nuttig is. Gebruik beide
Evalueer meerdere clusteringmetrics: Silhouette, DBI, CH en andere metrics meten de kwaliteit van clustering op verschillende manieren. Als ze het eens zijn, zit je goed; als dat niet zo is, kijk dan naar de data
Conclusie
De silhouettescore is een van de meest intuïtieve manieren om clustering te beoordelen omdat hij zowel laat zien hoe strak punten gegroepeerd zijn als hoe goed clusters gescheiden zijn.
Je berekent hem punt voor punt, neemt het gemiddelde en krijgt een enkel getal tussen -1 en 1. Scores dichter bij 1 betekenen beter gedefinieerde clusters, en scores rond of onder 0 betekenen dat de structuur niet echt een structuur is
Maar de silhouettescore is slechts een begin. Je moet hem combineren met clustervisualisaties en, het belangrijkst, je eigen domeinkennis van het probleem. Pas als al deze in dezelfde richting wijzen, kun je het resultaat vertrouwen.
De silhouettescore maakt deel uit van het grotere geheel van Unsupervised Learning in Python. Schrijf je vandaag in en leer hoe je ongelabelde data clustert, transformeert, visualiseert en er inzichten uithaalt.
Senior Data Scientist, gevestigd in Kroatië. Top Tech-schrijver met meer dan 700 gepubliceerde artikelen en meer dan 10 miljoen weergaven. Auteur van het boek Machine Learning Automation with TPOT.
Hoe weet je na het trainen van een clusteringmodel of de clusters deugen?
Daar is geen universeel antwoord op. In traditionele supervised learning kun je voorspellingen vergelijken met echte labels en een accuraatheidsscore krijgen. Dat kan niet met clustering. Je koos k=5, maar is een andere k misschien beter? Zonder labels kun je niet zien of het algoritme de structuur vond of de data gewoon in willekeurige stukken heeft verdeeld.
De silhouettescore is de maatstaf die je zoekt. Hij laat zien hoe goed elk punt past bij zijn toegewezen cluster ten opzichte van het dichtstbijzijnde andere cluster, en het is een van de meest gebruikte metrics. Hij werkt zonder labels en is makkelijk te interpreteren.
In dit artikel neem ik je mee door de formule en hoe je die leest, laat ik een Python-voorbeeld met scikit-learn zien en bespreek ik wanneer het wel en niet de ideale oplossing is.
Nieuw met clustering? Lees onze tutorial Introductie tot k-Means Clustering met scikit-learn om te leren hoe het algoritme werkt en hoe je het gebruikt in Python.
Wat is de silhouettescore?
De silhouettescore is een getal tussen -1 en 1 dat aangeeft hoe goed elk punt bij zijn cluster past.
Het getal laat je twee dingen zien:
Als het punt goed binnen zijn eigen groep ligt en ver van andere, is de score hoog. Als het aan de rand ligt, dichter bij een naburig cluster dan bij zijn eigen cluster, is de score laag.
Kort gezegd, dat is de balans die de silhouettescore laat zien. Hij omvat zowel hoe dicht punten binnen elk cluster gegroepeerd zijn als hoe goed clusters van elkaar gescheiden zijn. Beide zijn even belangrijk. Een clustering die punten goed groepeert maar clusters bovenop elkaar plaatst, is niet nuttig, en clustering die clusters goed scheidt maar punten losjes binnen die clusters laat zweven, evenmin.
Goed gescheiden clusters vergeleken met overlappende clusters
Hogere scores betekenen beter gedefinieerde clusters. Een score dicht bij 1 betekent dat punten strak binnen hun cluster liggen en ver van andere. Een score dicht bij 0 betekent dat clusters overlappen of dat de grenzen vaag zijn. Een negatieve score betekent dat het punt dichter bij een ander cluster ligt dan bij het cluster waaraan het is toegewezen.
Hoe werkt de silhouettescore?
Elk punt krijgt zijn eigen silhouettescore, en die score komt uit twee afstanden.
De eerste is hoe ver het punt gemiddeld van de andere punten in zijn toegewezen cluster ligt. Als die klein is, ligt het punt dicht bij de anderen in het cluster. Als die groot is, is het punt los aan zijn cluster verbonden.
De tweede is hoe ver het punt gemiddeld van de punten in het dichtstbijzijnde naburige cluster ligt. Als die groot is, is het punt duidelijk gescheiden van andere clusters. Als die klein is, ligt het punt dicht bij de grens.
Afstand van een punt tot de clusters
De silhouettewaarde vergelijkt deze twee getallen. Een punt dat goed binnen zijn cluster ligt en ver van andere krijgt een hoge score. Een punt aan de rand (dicht bij een ander cluster) krijgt een lage score. Een punt dat dichter bij een ander cluster ligt dan bij zijn eigen cluster krijgt een negatieve score.
Onthoud hierbij dat geen van beide afstanden op zichzelf genoeg is.
Een strak cluster kan pal naast een ander liggen. Een goed gescheiden cluster kan intern verspreid zijn. Je hebt beide afstanden nodig om de toewijzing te vertrouwen.
Formule voor de silhouettescore
Hier is de formule voor een enkel punt:
Formule voor de silhouettescore
Waarbij:
ade gemiddelde afstand is van het punt tot alle andere punten in hetzelfde clusterbde gemiddelde afstand is van het punt tot alle punten in het dichtstbijzijnde naburige clusterDe formule deelt het verschil tussen
benadoor de grootste van de twee.In het algemeen kun je deze richtlijnen gebruiken om de score te interpreteren:
Als
bveel groter is dana: Het punt ligt ver van andere clusters en dicht bij zijn eigen cluster. De teller is dicht bijb, de noemer is ookb, en de score ligt dicht bij 1Als
aveel groter is danb: Het punt ligt dichter bij een ander cluster dan bij zijn eigen cluster. De teller is een groot negatief getal dicht bij-a, de noemer isa, en de score ligt dicht bij -1Als
aenbongeveer gelijk zijn: Het punt ligt op de grens tussen twee clusters. De teller ligt dicht bij 0, en de score ookMeer over de details volgt zo.
Hoe de silhouettescore te interpreteren
Hier is een ruwe leidraad voor het lezen van de silhouettescore:
De drempels hierboven zijn slechts ruwe richtlijnen. Wat een goede silhouettescore is, hangt af van de dataset.
Schaars en hoog-dimensionale data levert vaak lagere scores op, zelfs als de clusters goed zijn. Dicht opeengepakte, goed gescheiden data kan scores boven 0,7 opleveren. Vergelijk scores tussen modellen op dezelfde dataset, niet met een universele drempel.
Hoe de silhouettescore te berekenen
Je berekent de silhouettescore punt voor punt. Zo werkt het voor één punt.
Stap 1: Bereken
a, de gemiddelde afstand van het punt tot elk ander punt in zijn eigen cluster. Als het punt in een cluster met 4 andere punten zit en de afstanden naar die punten 1,2, 1,5, 1,0 en 1,3 zijn:Berekening van de silhouettescore (1)
Stap 2: Vind het dichtstbijzijnde naburige cluster (dat wil zeggen het cluster, anders dan het eigen cluster van het punt, met de laagste gemiddelde afstand vanaf het punt). Bereken vervolgens
b, de gemiddelde afstand van het punt tot elk punt in dat cluster. Als het dichtstbijzijnde cluster 5 punten heeft op afstanden 2,4, 2,8, 3,0, 2,6 en 2,7:Berekening van de silhouettescore (2)
Stap 3: Vul
aenbin de formule in:Berekening van de silhouettescore (3)
Stap 4: Herhaal dit voor elk punt in de dataset. De totale silhouettescore voor de clustering is het gemiddelde van alle puntscores.
Voorbeeld van silhouettescore in Python
Scikit-learn geeft je twee functies om de silhouettescore te berekenen, beide in
sklearn.metrics:silhouette_score()geeft de gemiddelde score voor de hele clustering terugsilhouette_samples()geeft de score terug voor elk individueel puntZo gebruik je ze met KMeans op een synthetische dataset:
Dit is de output die je krijgt als je de bovenstaande code uitvoert:
Voorbeeldoutput in Python
De totale score van 0,791 betekent dat de vier clusters goed gedefinieerd en gescheiden zijn.
De puntscores laten je elk datapunt analyseren.
Punten met hoge individuele scores liggen goed binnen hun cluster. Punten met lage of negatieve scores liggen op de grens of zijn verkeerd toegewezen, wat handig is om uitschieters op te sporen of grensgevallen te bekijken.
Het optimale aantal clusters kiezen
Een van de meest voorkomende toepassingen van de silhouettescore is het kiezen van de juiste
kvoor KMeans.Dat doe je in drie stappen:
kmet de hoogste scoreHier is de code daarvoor:
Dit is de score die je per
kziet:Silhouettescore bij verschillende waarden van k
De hoogste score ligt bij
k=4. Dat is de waarde die je wilt kiezen.Onthoud dat de silhouettescore domeinkennis niet vervangt. Als je businessprobleem om 5 klantsegmenten vraagt en de silhouette het hoogst is bij 4, kies dan niet automatisch 4. De metric laat zien waar de data de schoonste structuur heeft, maar soms is het juiste aantal clusters het aantal dat overeenkomt met iets dat in jouw probleem betekenisvol is.
Silhouettescore vs. andere clusteringmetrics
De silhouettescore is waarschijnlijk de meest gebruikte maatstaf om clustering te beoordelen, maar niet de enige. Zo verhoudt hij zich tot alternatieven.
Silhouettescore vs. elbow-methode
De elbow-methode is een visuele techniek om
kin KMeans te kiezen. Je fit modellen voor een reeks k-waarden, je zet de inerta (som van kwadraten binnen clusters) uit tegen k, en je kiest de waarde waar de curve een scherpe knik vertoont.De elbow-methode heeft hier het voordeel omdat hij snel en eenvoudig is. Maar de "knik" is niet altijd duidelijk. Bij rommelige data kan de curve soms vloeiend lijken en zie je niet waar hij buigt.
De silhouettescore geeft je een echt getal voor elke k, zodat je zinvoller kunt vergelijken. Het is trager om te berekenen, maar laat de beslissing niet over aan visuele interpretatie.
Gebruik de elbow-methode voor een snelle sanity check. Gebruik de silhouettescore als je een onderbouwd antwoord nodig hebt.
Silhouettescore vs. Davies-Bouldin-index
De Davies-Bouldin-index (DBI) meet de gemiddelde gelijkenis tussen elk cluster en het meest gelijkende. Lager is beter, en een perfecte score is 0.
DBI gebruikt clustercentroïden om gelijkenis te berekenen, wat hem sneller maakt dan de silhouettescore op grote datasets. Het hanteert ook een vergelijkbare intuïtie door strakke en goed gescheiden clusters te belonen.
Het nadeel is dat DBI je alleen iets vertelt over de clustering als geheel. De silhouettescore geeft ook een puntscore, zodat je grensgevallen en uitschieters kunt vinden.
Gebruik DBI als je met grote datasets werkt en snelheid belangrijk is. Gebruik de silhouettescore als je individuele punten wilt bekijken.
Silhouettescore vs. Calinski-Harabasz-index
De Calinski-Harabasz-index (CH), ook wel de variatie-ratio-criterium genoemd, is de verhouding tussen spreiding tussen clusters en spreiding binnen clusters. Hogere scores betekenen betere clustering, en de score is onbegrensd (geen bovengrens).
CH is snel en werkt goed op grote datasets omdat het alleen clusterstatistieken gebruikt. Net als silhouette en DBI werkt het het best op convexe, goed gescheiden clusters.
CH heeft ook geen natuurlijke schaal, dus je kunt CH-scores alleen vergelijken tussen modellen op dezelfde dataset, niet tussen verschillende datasets.
Gebruik CH wanneer je dataset groot is en je snel resultaten nodig hebt. Gebruik de silhouettescore als je interpretatie en inzichten per datapunt wilt.
Interne vs. externe clusteringmetrics
De bovenstaande metrics (silhouette, DBI, CH, elbow) zijn allemaal interne metrics. Ze beoordelen clustering alleen met de data zelf, zonder grondwaarheidslabels. Dat maakt ze de standaardkeuze voor clustering in de praktijk, waar labels niet bestaan.
Externe metrics vergelijken cluster-toewijzingen met bekende labels. De Adjusted Rand Index (ARI), Normalized Mutual Information (NMI) en homogeniteit zijn veelvoorkomende voorbeelden. Ze worden gebruikt wanneer je labels hebt en wilt testen hoe goed een clusteringalgoritme die terugvindt.
Gebruik interne metrics wanneer je geen labels hebt, wat meestal het geval is. Gebruik externe metrics wanneer je clusteringalgoritmen benchmarkt op gelabelde data.
Hier is een overzicht van de metrics naast elkaar:
Silhouettescore vergeleken met alternatieven
Beperkingen van de silhouettescore
De silhouettescore heeft een paar beperkingen die het waard zijn om te kennen:
O(n^2). Op datasets met miljoenen punten wordt dit kostbaarBest practices voor het gebruik van de silhouettescore
De silhouettescore werkt het best als je een paar basispraktijken volgt:
k(of verschillende algoritmen) en hun scores naast elkaar vergelijkenk=5, zelfs wanneer 5 clusters in jouw probleem betekenisvol zijnConclusie
De silhouettescore is een van de meest intuïtieve manieren om clustering te beoordelen omdat hij zowel laat zien hoe strak punten gegroepeerd zijn als hoe goed clusters gescheiden zijn.
Je berekent hem punt voor punt, neemt het gemiddelde en krijgt een enkel getal tussen -1 en 1. Scores dichter bij 1 betekenen beter gedefinieerde clusters, en scores rond of onder 0 betekenen dat de structuur niet echt een structuur is
Maar de silhouettescore is slechts een begin. Je moet hem combineren met clustervisualisaties en, het belangrijkst, je eigen domeinkennis van het probleem. Pas als al deze in dezelfde richting wijzen, kun je het resultaat vertrouwen.
De silhouettescore maakt deel uit van het grotere geheel van Unsupervised Learning in Python. Schrijf je vandaag in en leer hoe je ongelabelde data clustert, transformeert, visualiseert en er inzichten uithaalt.