Gegevenswetenschap

K-betekent clustering

K-betekent clustering

De code voor deze blog, samen met de dataset, is beschikbaar via de volgende link https://github.com/shekharpandey89/k-means

K-Means clustering is een niet-gecontroleerd machine learning-algoritme. Als we het K-Means unsupervised clustering-algoritme vergelijken met het gesuperviseerde algoritme, is het niet nodig om het model te trainen met de gelabelde gegevens. K-Means-algoritme wordt gebruikt om verschillende objecten te classificeren of groeperen op basis van hun attributen of kenmerken in een K-aantal groepen. Hier is K een geheel getal. De K-Means berekent de afstand (met behulp van de afstandsformule) en vindt vervolgens de minimale afstand tussen de gegevenspunten en het zwaartepuntcluster om de gegevens te classificeren.

Laten we de K-Means begrijpen aan de hand van het kleine voorbeeld met de 4 objecten, en elk object heeft 2 attributen.

Objectnaam Attribuut_X Attribuut_Y
M1 1 1
M2 2 1
M3 4 3
M4 5 4

K-middelen om numeriek voorbeeld op te lossen:

Om het bovenstaande numerieke probleem via K-Means op te lossen, moeten we de volgende stappen volgen:

Het K-Means-algoritme is heel eenvoudig. Eerst moeten we een willekeurig aantal K kiezen en vervolgens de zwaartepunten of het midden van de clusters kiezen. Om de zwaartepunten te kiezen, kunnen we een willekeurig aantal objecten kiezen voor de initialisatie (afhankelijk van de waarde van K).

De basisstappen van het K-Means-algoritme zijn als volgt:

  1. Blijft rennen totdat er geen objecten van hun zwaartepunten bewegen (stabiel).
  2. We kiezen eerst willekeurig enkele zwaartepunten.
  3. Vervolgens bepalen we de afstand tussen elk object en zwaartepunten.
  4. De objecten groeperen op basis van de minimale afstand.

Dus elk object heeft twee punten als X en Y, en ze vertegenwoordigen op de grafiekruimte als volgt:

Dus we kiezen in eerste instantie de waarde van K=2 als willekeurig om ons bovenstaande probleem op te lossen.

Stap 1: Aanvankelijk kiezen we de eerste twee objecten (1, 1) en (2, 1) als onze zwaartepunten. De onderstaande grafiek laat hetzelfde zien. We noemen deze zwaartepunten C1 (1, 1) en C2 (2,1). Hier kunnen we zeggen dat C1 group_1 is en C2 group_2.

Stap 2: Nu zullen we elk objectgegevenspunt naar zwaartepunten berekenen met behulp van de Euclidische afstandsformule.

Om de afstand te berekenen, gebruiken we de volgende formule:.

We berekenen de afstand van objecten tot zwaartepunten, zoals weergegeven in de onderstaande afbeelding:.

Dus we hebben de afstand van elke objectgegevenspunt berekend via de bovenstaande afstandsmethode, en kregen uiteindelijk de afstandsmatrix zoals hieronder weergegeven:

DM_0 =

0 1 3.61 5 C1 = (1,1)

cluster1

groep 1
1 0 2.83 4.24 C2 = (2,1)

cluster2

group_2
EEN B C D
1 2 4 5   X
1 1 3 4   Y

Nu hebben we de afstandswaarde van elk object berekend voor elk zwaartepunt. De objectpunten (1,1) hebben bijvoorbeeld een afstandswaarde tot c1 is 0 en c2 is 1.

Omdat we uit de bovenstaande afstandsmatrix ontdekken dat het object (1, 1) een afstand heeft tot cluster1 (c1) is 0 en tot cluster2 (c2) is 1. Dus het object één ligt dicht bij cluster1 zelf.

Evenzo, als we het object (4, 3) controleren, is de afstand tot cluster1 3.61 en naar cluster2 is 2.83. Het object (4, 3) zal dus verschuiven naar cluster2.

Evenzo, als u controleert op het object (2, 1), is de afstand tot cluster1 1 en tot cluster2 is 0. Dit object zal dus verschuiven naar cluster2.

Nu, op basis van hun afstandswaarde, groeperen we de punten (objectclustering).

G_0 =

EEN B C D
1 0 0 0   groep 1
0 1 1 1   group_2

Nu, op basis van hun afstandswaarde, groeperen we de punten (objectclustering).

En ten slotte ziet de grafiek er als volgt uit na het clusteren (G_0).

iteratie_1: Nu zullen we nieuwe zwaartepunten berekenen omdat de initiële groepen zijn gewijzigd vanwege de afstandsformule zoals weergegeven in de G_0. Dus de group_1 heeft maar één object, dus de waarde is nog steeds c1 (1,1), maar de group_2 heeft 3 objecten, dus de nieuwe zwaartepuntwaarde is

Dus nieuwe c1 (1,1) en c2 (3.66, 2.66)

Nu moeten we opnieuw alle afstanden tot nieuwe zwaartepunten berekenen zoals we eerder hebben berekend.

DM_1 =

0 1 3.61 5 C1 = (1,1)

cluster1

groep 1
3.14 2.36 0.47 1.89 C2 = (3.66,2.66)

cluster2

group_2
EEN B C D
1 2 4 5   X
1 1 3 4   Y

Iteratie_1 (objectclustering): Nu, namens de nieuwe berekening van de afstandsmatrix (DM_1), clusteren we het volgens dat. Dus we verschuiven het M2-object van group_2 naar group_1 als de regel van minimale afstand tot zwaartepunten, en de rest van het object zal hetzelfde zijn. Dus nieuwe clustering zal zijn zoals hieronder:.

G_1 =

EEN B C D
1 1 0 0   groep 1
0 0 1 1   group_2

Nu moeten we de nieuwe zwaartepunten opnieuw berekenen, aangezien beide objecten twee waarden hebben.

Dus nieuwe zwaartepunten zullen zijn

Dus nadat we de nieuwe zwaartepunten hebben ontvangen, ziet de clustering er als volgt uit:

c1 = (1.5, 1)

c2 = (4.5, 3.5)

Iteratie_2: We herhalen de stap waarbij we de nieuwe afstand van elk object tot nieuwe berekende zwaartepunten berekenen. Dus na de berekening krijgen we de volgende afstandsmatrix voor iteratie_2.

DM_2 =

0.5 0.5 3.20 4.61 C1 = (1.5, 1)

cluster1

groep 1
4.30 3.54 0.71 0.71 C2 = (4.5, 3.5)

cluster2

group_2

A          B               C            D

EEN B C D
1 2 4 5   X
1 1 3 4   Y

Nogmaals, we doen de clusteropdrachten op basis van de minimale afstand zoals we eerder deden did. Dus nadat we dat hadden gedaan, kregen we de clustermatrix die hetzelfde is als G_1.

G_2 =

EEN B C D
1 1 0 0   groep 1
0 0 1 1   group_2

zoals hier, G_2 == G_1, dus er is geen verdere iteratie nodig, en we kunnen hier stoppen.

K-Means-implementatie met Python:

Nu gaan we het K-means-algoritme implementeren in python. Om de K-means te implementeren, gaan we de beroemde Iris-dataset gebruiken, die open-source is. Deze dataset heeft drie verschillende klassen. Deze dataset heeft in principe vier kenmerken: Kelklengte, kelkbladbreedte, bloembladlengte en bloembladbreedte. De laatste kolom zal de naam van de klasse van die rij vertellen, zoals setosa.

De dataset ziet er als volgt uit:

Voor de implementatie van python k-means moeten we de vereiste bibliotheken importeren. Dus we importeren Panda's, Numpy, Matplotlib en ook KMeans van sklearn.cluster zoals hieronder weergegeven:

We lezen de Iris.csv-gegevensset met behulp van de read_csv panda-methode en geeft de top 10 resultaten weer met behulp van de head-methode.

Nu lezen we alleen die kenmerken van de dataset die we nodig hadden om het model te trainen. We lezen dus alle vier de kenmerken van de datasets (kelkbladlengte, kelkbladbreedte, bloembladlengte, bloembladbreedte). Daarvoor hebben we de vier indexwaarden [0, 1, 2, 3] doorgegeven aan de iloc-functie van het dataframe (df) van de panda, zoals hieronder weergegeven:

Nu kiezen we willekeurig het aantal clusters (K=5). We maken het object van de K-means-klasse en passen vervolgens onze x-gegevensset daarin voor training en voorspelling, zoals hieronder wordt weergegeven:

Nu gaan we ons model visualiseren met de willekeurige K=5 waarde. We kunnen duidelijk vijf clusters zien, maar het lijkt erop dat het niet nauwkeurig is, zoals hieronder wordt weergegeven.

Onze volgende stap is dus om erachter te komen of het aantal clusters juist was of niet. En daarvoor gebruiken we de Elbow-methode. De Elbow-methode wordt gebruikt om het optimale nummer van het cluster voor een bepaalde dataset te achterhalen. Deze methode zal worden gebruikt om erachter te komen of de waarde van k=5 correct was of niet, aangezien we geen duidelijke clustering krijgen. Dus daarna gaan we naar de volgende grafiek, die laat zien dat de waarde van K=5 niet correct is omdat de optimale waarde tussen 3 of 4 ligt.

Nu gaan we de bovenstaande code opnieuw uitvoeren met het aantal clusters K = 4 zoals hieronder weergegeven:

Nu gaan we de bovenstaande K=4 nieuwbouwclustering visualiseren. Het onderstaande scherm laat zien dat de clustering nu gebeurt via de k-means.

Conclusie

Dus bestudeerden we het K-means-algoritme in zowel numerieke als python-code. We hebben ook gezien hoe we het aantal clusters voor een bepaalde dataset kunnen achterhalen. Soms kan de Elbow-methode niet het juiste aantal clusters geven, dus in dat geval zijn er verschillende methoden die we kunnen kiezen.

Beste gameconsole-emulators voor Linux
Dit artikel bevat een lijst van populaire emulatiesoftware voor gameconsoles die beschikbaar is voor Linux. Emulatie is een softwarecompatibiliteitsla...
Beste Linux-distributies voor gaming in 2021
Het Linux-besturingssysteem heeft een lange weg afgelegd van zijn oorspronkelijke, eenvoudige, servergebaseerde uiterlijk. Dit besturingssysteem is de...
Hoe u uw gamesessie op Linux kunt vastleggen en streamen
In het verleden werd het spelen van games alleen als een hobby beschouwd, maar met de tijd zag de game-industrie een enorme groei in termen van techno...