logo

K-betekent clusteralgoritme

K-Means Clustering is een leeralgoritme zonder toezicht dat wordt gebruikt om de clusteringsproblemen in machine learning of data science op te lossen. In dit onderwerp zullen we leren wat het K-means clusteringalgoritme is, hoe het algoritme werkt, samen met de Python-implementatie van k-means clustering.

Wat is het K-Means-algoritme?

K-Means Clustering is een Ongecontroleerd leeralgoritme , die de ongelabelde dataset in verschillende clusters groepeert. Hier definieert K het aantal vooraf gedefinieerde clusters dat tijdens het proces moet worden gemaakt, alsof K=2 er twee clusters zullen zijn, en voor K=3 er drie clusters zullen zijn, enzovoort.

Het is een iteratief algoritme dat de ongelabelde dataset in k verschillende clusters verdeelt, op zo'n manier dat elke dataset slechts tot één groep behoort die vergelijkbare eigenschappen heeft.

Het stelt ons in staat de gegevens in verschillende groepen te clusteren en is een handige manier om de groepengroepen in de ongelabelde dataset zelfstandig te ontdekken, zonder dat daarvoor enige training nodig is.

Het is een op zwaartepunten gebaseerd algoritme, waarbij elk cluster wordt geassocieerd met een zwaartepunt. Het belangrijkste doel van dit algoritme is om de som van de afstanden tussen het datapunt en de bijbehorende clusters te minimaliseren.

Het algoritme neemt de ongelabelde dataset als invoer, verdeelt de dataset in k-aantal clusters en herhaalt het proces totdat het niet de beste clusters vindt. In dit algoritme moet de waarde van k vooraf worden bepaald.

De k-betekent clustering algoritme voert hoofdzakelijk twee taken uit:

  • Bepaalt de beste waarde voor K-middelpunten of zwaartepunten door een iteratief proces.
  • Wijst elk gegevenspunt toe aan het dichtstbijzijnde k-centrum. De datapunten die zich dichtbij het specifieke k-centrum bevinden, creëren een cluster.

Daarom heeft elk cluster datapunten met enkele overeenkomsten, en staat het los van andere clusters.

Het onderstaande diagram legt de werking van het K-means Clustering Algorithm uit:

K-betekent clusteralgoritme

Hoe werkt het K-Means-algoritme?

De werking van het K-Means-algoritme wordt in de onderstaande stappen uitgelegd:

java-arraylijst gesorteerd

Stap 1: Selecteer het getal K om het aantal clusters te bepalen.

Stap 2: Selecteer willekeurige K-punten of zwaartepunten. (Het kan een andere zijn dan de invoergegevensset).

Stap 3: Wijs elk datapunt toe aan het dichtstbijzijnde zwaartepunt, dat de vooraf gedefinieerde K-clusters zal vormen.

Stap 4: Bereken de variantie en plaats een nieuw zwaartepunt van elk cluster.

Stap 5: Herhaal de derde stappen, wat betekent dat elk datapunt opnieuw moet worden toegewezen aan het nieuwe dichtstbijzijnde zwaartepunt van elk cluster.

Stap 6: Als er een nieuwe toewijzing plaatsvindt, ga dan naar stap 4, anders ga naar VOLTOOIEN.

Stap-7 : Het model is klaar.

Laten we de bovenstaande stappen begrijpen door de visuele plots te bekijken:

Stel dat we twee variabelen M1 en M2 hebben. Het spreidingsdiagram op de x-y-as van deze twee variabelen wordt hieronder weergegeven:

K-betekent clusteralgoritme
  • Laten we het aantal k clusters nemen, d.w.z. K=2, om de dataset te identificeren en deze in verschillende clusters te plaatsen. Het betekent dat we hier zullen proberen deze datasets in twee verschillende clusters te groeperen.
  • We moeten een aantal willekeurige k-punten of zwaartepunt kiezen om het cluster te vormen. Deze punten kunnen de punten uit de gegevensset zijn of een ander punt. Hier selecteren we dus de onderstaande twee punten als k-punten, die niet deel uitmaken van onze dataset. Beschouw de onderstaande afbeelding:
    K-betekent clusteralgoritme
  • Nu zullen we elk gegevenspunt van de spreidingsdiagram toewijzen aan het dichtstbijzijnde K-punt of zwaartepunt. We zullen het berekenen door wat wiskunde toe te passen die we hebben bestudeerd om de afstand tussen twee punten te berekenen. We zullen dus een mediaan trekken tussen beide zwaartepunten. Beschouw de onderstaande afbeelding:
    K-betekent clusteralgoritme

Uit de bovenstaande afbeelding is het duidelijk dat de punten aan de linkerkant van de lijn dichtbij het K1 of blauwe zwaartepunt liggen, en dat de punten aan de rechterkant van de lijn dicht bij het gele zwaartepunt liggen. Laten we ze blauw en geel kleuren voor een duidelijke visualisatie.

K-betekent clusteralgoritme
  • Omdat we de dichtstbijzijnde cluster moeten vinden, herhalen we het proces door te kiezen een nieuw zwaartepunt . Om de nieuwe zwaartepunten te kiezen, zullen we het zwaartepunt van deze zwaartepunten berekenen en nieuwe zwaartepunten vinden, zoals hieronder:
    K-betekent clusteralgoritme
  • Vervolgens zullen we elk datapunt opnieuw toewijzen aan het nieuwe zwaartepunt. Hiervoor herhalen we hetzelfde proces van het vinden van een middenlijn. De mediaan zal er uitzien als onderstaande afbeelding:
    K-betekent clusteralgoritme

Uit de bovenstaande afbeelding kunnen we zien dat één geel punt zich aan de linkerkant van de lijn bevindt en twee blauwe punten precies op de lijn. Deze drie punten worden dus toegewezen aan nieuwe zwaartepunten.

K-betekent clusteralgoritme

Omdat de hertoewijzing heeft plaatsgevonden, gaan we opnieuw naar stap 4, namelijk het vinden van nieuwe zwaartepunten of K-punten.

  • We zullen het proces herhalen door het zwaartepunt van zwaartepunten te vinden, dus de nieuwe zwaartepunten zullen zijn zoals weergegeven in de onderstaande afbeelding:
    K-betekent clusteralgoritme
  • Nu we de nieuwe zwaartepunten hebben, zullen we opnieuw de mediaanlijn tekenen en de gegevenspunten opnieuw toewijzen. Het beeld zal dus zijn:
    K-betekent clusteralgoritme
  • We kunnen in de bovenstaande afbeelding zien; er zijn geen ongelijke gegevenspunten aan weerszijden van de lijn, wat betekent dat ons model is gevormd. Beschouw de onderstaande afbeelding:
    K-betekent clusteralgoritme

Omdat ons model klaar is, kunnen we nu de veronderstelde zwaartepunten verwijderen, en de twee laatste clusters zullen zijn zoals weergegeven in de onderstaande afbeelding:

K-betekent clusteralgoritme

Hoe kies je de waarde van 'K aantal clusters' in K-means Clustering?

De prestaties van het K-means clusteringalgoritme zijn afhankelijk van de zeer efficiënte clusters die het vormt. Maar het kiezen van het optimale aantal clusters is een grote opgave. Er zijn een aantal verschillende manieren om het optimale aantal clusters te vinden, maar hier bespreken we de meest geschikte methode om het aantal clusters of de waarde van K te vinden. De methode wordt hieronder gegeven:

Elleboog Methode

De Elbow-methode is een van de meest populaire manieren om het optimale aantal clusters te vinden. Deze methode maakt gebruik van het concept van WCSS-waarde. WCSS betekent Binnen clustersom van kwadraten , die de totale variaties binnen een cluster definieert. De formule om de waarde van WCSS (voor 3 clusters) te berekenen wordt hieronder gegeven:

WCSS= ∑Pik in Cluster1afstand(PiC1)2+∑Pik in Cluster2afstand(PiC2)2+∑Pik in CLuster3afstand(PiC3)2

In de bovenstaande formule van WCSS,

Pik in Cluster1afstand(PiC1)2: Het is de som van het kwadraat van de afstanden tussen elk datapunt en zijn zwaartepunt binnen een cluster1 en hetzelfde voor de andere twee termen.

Om de afstand tussen datapunten en het zwaartepunt te meten, kunnen we elke methode gebruiken, zoals de Euclidische afstand of de Manhattan-afstand.

Om de optimale waarde van clusters te vinden, volgt de elleboogmethode de onderstaande stappen:

  • Het voert de K-means-clustering uit op een gegeven dataset voor verschillende K-waarden (bereik van 1-10).
  • Berekent voor elke waarde van K de WCSS-waarde.
  • Tekent een curve tussen berekende WCSS-waarden en het aantal clusters K.
  • Het scherpe buigpunt of een punt van de plot lijkt op een arm, en dat punt wordt beschouwd als de beste waarde van K.

Omdat de grafiek de scherpe bocht toont, die op een elleboog lijkt, staat deze bekend als de elleboogmethode. De grafiek voor de elleboogmethode ziet eruit als de onderstaande afbeelding:

K-betekent clusteralgoritme

Opmerking: we kunnen het aantal clusters kiezen dat gelijk is aan de gegeven gegevenspunten. Als we het aantal clusters kiezen dat gelijk is aan de datapunten, wordt de waarde van WCSS nul, en dat zal het eindpunt van de plot zijn.

Python-implementatie van K-means clusteringalgoritme

In het bovenstaande gedeelte hebben we het K-means-algoritme besproken. Laten we nu eens kijken hoe het kan worden geïmplementeerd met behulp van Python .

Laten we vóór de implementatie begrijpen welk type probleem we hier zullen oplossen. We hebben dus een dataset van Winkelcentrum_Klanten , dit zijn de gegevens van klanten die het winkelcentrum bezoeken en daar geld uitgeven.

In de gegeven dataset hebben we Klant_ID, geslacht, leeftijd, jaarinkomen ($) en bestedingsscore (Dit is de berekende waarde van hoeveel een klant in het winkelcentrum heeft uitgegeven; hoe meer waarde, hoe meer hij heeft uitgegeven). Uit deze dataset moeten we enkele patronen berekenen, omdat het een methode zonder toezicht is en we dus niet weten wat we precies moeten berekenen.

Hieronder vindt u de te volgen stappen voor de implementatie:

    Voorverwerking van gegevens Het vinden van het optimale aantal clusters met behulp van de elleboogmethode Het K-means-algoritme trainen op de trainingsgegevensset Het visualiseren van de clusters

Stap 1: Voorverwerking van gegevens Stap

De eerste stap zal de voorverwerking van de gegevens zijn, zoals we deden in onze eerdere onderwerpen Regressie en Classificatie. Maar wat het clusterprobleem betreft, zal het anders zijn dan bij andere modellen. Laten we het bespreken:

    Bibliotheken importeren
    Zoals we in eerdere onderwerpen hebben gedaan, zullen we eerst de bibliotheken voor ons model importeren, wat onderdeel is van de voorverwerking van gegevens. De code staat hieronder:
 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 

In de bovenstaande code wordt de numpig we hebben geïmporteerd voor het uitvoeren van wiskundige berekeningen, matplotlib is voor het plotten van de grafiek, en panda's zijn voor het beheren van de dataset.

    De gegevensset importeren:
    Vervolgens importeren we de dataset die we moeten gebruiken. Hier gebruiken we dus de dataset Mall_Customer_data.csv. Het kan worden geïmporteerd met behulp van de onderstaande code:
 # Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv') 

Door de bovenstaande coderegels uit te voeren, krijgen we onze dataset in de Spyder IDE. De dataset ziet eruit als de onderstaande afbeelding:

K-betekent clusteralgoritme

Uit de bovenstaande dataset moeten we er enkele patronen in vinden.

    Onafhankelijke variabelen extraheren

Hier hebben we geen afhankelijke variabele nodig voor de voorverwerkingsstap van gegevens, omdat het een clusterprobleem is en we geen idee hebben wat we moeten bepalen. We voegen dus gewoon een regel code toe voor de matrix met functies.

 x = dataset.iloc[:, [3, 4]].values 

Zoals we kunnen zien, extraheren we er slechts 3rden 4efunctie. Dit komt omdat we een 2D-plot nodig hebben om het model te visualiseren, en sommige functies zijn niet vereist, zoals customer_id.

Stap 2: Het vinden van het optimale aantal clusters met behulp van de elleboogmethode

In de tweede stap zullen we proberen het optimale aantal clusters voor ons clusterprobleem te vinden. Dus, zoals hierboven besproken, gaan we hier de elleboogmethode voor dit doel gebruiken.

Zoals we weten, gebruikt de elleboogmethode het WCSS-concept om de plot te tekenen door WCSS-waarden op de Y-as en het aantal clusters op de X-as uit te zetten. We gaan dus de waarde voor WCSS berekenen voor verschillende k-waarden variërend van 1 tot 10. Hieronder staat de code ervoor:

 #finding optimal number of clusters using the elbow method from sklearn.cluster import KMeans wcss_list= [] #Initializing the list for the values of WCSS #Using for loop for iterations from 1 to 10. for i in range(1, 11): kmeans = KMeans(n_clusters=i, init='k-means++', random_state= 42) kmeans.fit(x) wcss_list.append(kmeans.inertia_) mtp.plot(range(1, 11), wcss_list) mtp.title('The Elobw Method Graph') mtp.xlabel('Number of clusters(k)') mtp.ylabel('wcss_list') mtp.show() 

Zoals we in de bovenstaande code kunnen zien, hebben we gebruikt de KMeans klasse van sklearn. clusterbibliotheek om de clusters te vormen.

Vervolgens hebben we de wcss_lijst variabele om een ​​lege lijst te initialiseren, die wordt gebruikt om de waarde van wcss te bevatten, berekend voor verschillende waarden van k, variërend van 1 tot 10.

Daarna hebben we de for-lus geïnitialiseerd voor de iteratie op een andere waarde van k, variërend van 1 tot 10; aangezien voor een lus in Python de uitgaande limiet wordt uitgesloten, dus wordt aangenomen dat het 11 is, inclusief 10ewaarde.

De rest van de code is vergelijkbaar met die in eerdere onderwerpen, omdat we het model op een matrix met functies hebben gepast en vervolgens de grafiek hebben uitgezet tussen het aantal clusters en WCSS.

Uitgang: Na het uitvoeren van de bovenstaande code krijgen we de onderstaande uitvoer:

K-betekent clusteralgoritme

Uit de bovenstaande grafiek kunnen we zien dat het elleboogpunt zich bevindt 5. Het aantal clusters hier zal dus 5 zijn.

K-betekent clusteralgoritme

Stap 3: Het K-means-algoritme trainen op de trainingsgegevensset

Omdat we het aantal clusters hebben, kunnen we nu het model op de dataset trainen.

Om het model te trainen, zullen we dezelfde twee regels code gebruiken als in de bovenstaande sectie, maar in plaats van i te gebruiken, zullen we hier 5 gebruiken, omdat we weten dat er vijf clusters moeten worden gevormd. De code staat hieronder:

 #training the K-means model on a dataset kmeans = KMeans(n_clusters=5, init='k-means++', random_state= 42) y_predict= kmeans.fit_predict(x) 

De eerste regel is hetzelfde als hierboven voor het maken van het object van de klasse KMeans.

In de tweede regel code hebben we de afhankelijke variabele gemaakt y_predict om het model te trainen.

Door de bovenstaande coderegels uit te voeren, krijgen we de variabele y_predict. We kunnen het hieronder controleren de variabelenverkenner optie in de Spyder IDE. We kunnen nu de waarden van y_predict vergelijken met onze oorspronkelijke dataset. Beschouw de onderstaande afbeelding:

K-betekent clusteralgoritme

Uit de bovenstaande afbeelding kunnen we nu afleiden dat KlantID 1 tot een cluster behoort

3 (aangezien de index begint bij 0, wordt 2 dus als 3 beschouwd), en 2 behoort tot cluster 4, enzovoort.

Stap 4: Het visualiseren van de clusters

De laatste stap is het visualiseren van de clusters. Omdat we voor ons model 5 clusters hebben, zullen we elke cluster één voor één visualiseren.

Om de clusters te visualiseren, wordt een spreidingsdiagram gebruikt met de functie mtp.scatter() van matplotlib.

 #visulaizing the clusters mtp.scatter(x[y_predict == 0, 0], x[y_predict == 0, 1], s = 100, c = 'blue', label = 'Cluster 1') #for first cluster mtp.scatter(x[y_predict == 1, 0], x[y_predict == 1, 1], s = 100, c = 'green', label = 'Cluster 2') #for second cluster mtp.scatter(x[y_predict== 2, 0], x[y_predict == 2, 1], s = 100, c = 'red', label = 'Cluster 3') #for third cluster mtp.scatter(x[y_predict == 3, 0], x[y_predict == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4') #for fourth cluster mtp.scatter(x[y_predict == 4, 0], x[y_predict == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5') #for fifth cluster mtp.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 300, c = 'yellow', label = 'Centroid') mtp.title('Clusters of customers') mtp.xlabel('Annual Income (k$)') mtp.ylabel('Spending Score (1-100)') mtp.legend() mtp.show() 

In de bovenstaande coderegels hebben we code geschreven voor elke cluster, variërend van 1 tot 5. De eerste coördinaat van de mtp.scatter, d.w.z. x[y_predict == 0, 0] met de x-waarde voor het tonen van de matrix van bevat waarden en de y_predict varieert van 0 tot 1.

Uitgang:

K-betekent clusteralgoritme

Op de uitvoerafbeelding zijn duidelijk de vijf verschillende clusters met verschillende kleuren te zien. De clusters worden gevormd tussen twee parameters van de dataset; Jaarlijks inkomen van klant en bestedingen. We kunnen de kleuren en labels wijzigen volgens de vereisten of keuze. We kunnen ook enkele punten uit de bovenstaande patronen waarnemen, die hieronder worden gegeven:

    Cluster1toont de klanten met een gemiddeld salaris en gemiddelde uitgaven, zodat we deze klanten kunnen categoriseren als
  • Cluster2 laat zien dat de klant een hoog inkomen heeft maar weinig uitgaven, dus we kunnen ze categoriseren als voorzichtig .
  • Cluster3 laat de lage inkomens en ook de lage uitgaven zien, zodat deze als verstandig kunnen worden aangemerkt.
  • Cluster4 toont de klanten met een laag inkomen met zeer hoge uitgaven, zodat ze kunnen worden gecategoriseerd als onzorgvuldig .
  • Cluster5 toont de klanten met een hoog inkomen en hoge uitgaven, zodat ze kunnen worden gecategoriseerd als doelgroep, en deze klanten kunnen de meest winstgevende klanten zijn voor de eigenaar van het winkelcentrum.