K-Means Clustering är en oövervakad inlärningsalgoritm som används för att lösa klustringsproblemen inom maskininlärning eller datavetenskap. I det här ämnet kommer vi att lära oss vad som är K-means-klustringsalgoritm, hur algoritmen fungerar, tillsammans med Python-implementeringen av k-means-klustring.
Vad är K-Means Algorithm?
K-Means Clustering är en Oövervakad inlärningsalgoritm , som grupperar den omärkta datamängden i olika kluster. Här definierar K antalet fördefinierade kluster som måste skapas i processen, som om K=2 kommer det att finnas två kluster, och för K=3 kommer det att finnas tre kluster, och så vidare.
Det är en iterativ algoritm som delar upp den omärkta datamängden i k olika kluster på ett sådant sätt att varje dataset bara tillhör en grupp som har liknande egenskaper.
Det tillåter oss att gruppera data i olika grupper och ett bekvämt sätt att upptäcka kategorierna av grupper i den omärkta datamängden på egen hand utan att behöva någon utbildning.
Det är en tyngdpunktsbaserad algoritm, där varje kluster är associerat med en tyngdpunkt. Huvudsyftet med denna algoritm är att minimera summan av avstånden mellan datapunkten och deras motsvarande kluster.
Algoritmen tar den omärkta datauppsättningen som indata, delar upp datauppsättningen i k-antal kluster och upprepar processen tills den inte hittar de bästa klustren. Värdet på k bör vara förutbestämt i denna algoritm.
k-betyder klustring Algoritmen utför huvudsakligen två uppgifter:
- Bestämmer det bästa värdet för K mittpunkter eller centroider genom en iterativ process.
- Tilldelar varje datapunkt till dess närmaste k-center. De datapunkter som är nära det specifika k-centret skapar ett kluster.
Därför har varje kluster datapunkter med vissa likheter, och det är borta från andra kluster.
Diagrammet nedan förklarar hur K-means Clustering Algorithm fungerar:
Hur fungerar K-Means-algoritmen?
Hur K-Means-algoritmen fungerar förklaras i stegen nedan:
Steg 1: Välj siffran K för att bestämma antalet kluster.
Steg 2: Välj slumpmässiga K-punkter eller tyngdpunkter. (Det kan vara annat från indatadataset).
Steg 3: Tilldela varje datapunkt till deras närmaste tyngdpunkt, som kommer att bilda de fördefinierade K-klustren.
Steg-4: Beräkna variansen och placera en ny tyngdpunkt för varje kluster.
Steg-5: Upprepa de tredje stegen, vilket innebär att omtilldela varje datapunkt till den nya närmaste tyngdpunkten i varje kluster.
Steg-6: Om någon omtilldelning inträffar, gå till steg-4 annars gå till FINISH.
Steg-7 : Modellen är klar.
Låt oss förstå stegen ovan genom att överväga de visuella plotten:
Antag att vi har två variabler M1 och M2. X-y-axelns spridningsdiagram för dessa två variabler ges nedan:
- Låt oss ta antalet k kluster, dvs K=2, för att identifiera datamängden och för att placera dem i olika kluster. Det betyder att vi här kommer att försöka gruppera dessa datauppsättningar i två olika kluster.
- Vi måste välja några slumpmässiga k-punkter eller tyngdpunkt för att bilda klustret. Dessa punkter kan vara antingen punkterna från datasetet eller vilken annan punkt som helst. Så här väljer vi nedanstående två punkter som k-punkter, som inte är en del av vår datauppsättning. Tänk på bilden nedan:
- Nu kommer vi att tilldela varje datapunkt i spridningsdiagrammet till dess närmaste K-punkt eller tyngdpunkt. Vi kommer att beräkna det genom att använda lite matematik som vi har studerat för att beräkna avståndet mellan två punkter. Så vi kommer att rita en median mellan båda tyngdpunkterna. Tänk på bilden nedan:
Från bilden ovan är det tydligt att punkter på linjens vänstra sida är nära K1 eller blå tyngdpunkt, och punkter till höger om linjen är nära den gula tyngdpunkten. Låt oss färga dem som blå och gula för tydlig visualisering.
- Eftersom vi behöver hitta det närmaste klustret, så kommer vi att upprepa processen genom att välja en ny tyngdpunkt . För att välja de nya tyngdpunkterna kommer vi att beräkna tyngdpunkten för dessa tyngdpunkter och kommer att hitta nya tyngdpunkter enligt nedan:
- Därefter kommer vi att tilldela varje datapunkt till den nya tyngdpunkten. För detta kommer vi att upprepa samma process för att hitta en medianlinje. Medianen blir som bilden nedan:
Från bilden ovan kan vi se, en gul punkt är på vänster sida av linjen, och två blå punkter är rätt till linjen. Så dessa tre punkter kommer att tilldelas nya centroider.
Eftersom omplacering har skett, så kommer vi återigen att gå till steg-4, som är att hitta nya tyngdpunkter eller K-punkter.
- Vi kommer att upprepa processen genom att hitta tyngdpunkten för tyngdpunkter, så de nya tyngdpunkterna kommer att se ut som i bilden nedan:
- När vi fick de nya tyngdpunkterna så kommer återigen att dra medianlinjen och omtilldela datapunkterna. Så bilden blir:
- Vi kan se i bilden ovan; det finns inga olika datapunkter på vardera sidan av linjen, vilket betyder att vår modell är bildad. Tänk på bilden nedan:
Eftersom vår modell är klar, så kan vi nu ta bort de antagna tyngdpunkterna, och de två slutliga klustren kommer att vara som visas i bilden nedan:
Hur väljer man värdet på 'K antal kluster' i K-betyder kluster?
Prestandan hos K-means-klustringsalgoritmen beror på högeffektiva kluster som den bildar. Men att välja det optimala antalet kluster är en stor uppgift. Det finns några olika sätt att hitta det optimala antalet kluster, men här diskuterar vi den mest lämpliga metoden för att hitta antalet kluster eller värdet på K. Metoden ges nedan:
Armbågsmetod
Armbågsmetoden är ett av de mest populära sätten att hitta det optimala antalet kluster. Denna metod använder konceptet WCSS-värde. WCSS står för Inom kluster Summan av kvadrater , som definierar de totala variationerna inom ett kluster. Formeln för att beräkna värdet på WCSS (för 3 kluster) ges nedan:
WCSS= ∑Pjag i kluster 1avstånd (PiC1)2+∑Pjag i kluster 2avstånd (PiC2)2+∑Pjag i Cluster3avstånd (PiC3)2I formeln ovan för WCSS,
∑Pjag i kluster 1avstånd (PiC1)2: Det är summan av kvadraten på avstånden mellan varje datapunkt och dess tyngdpunkt inom ett kluster1 och samma för de andra två termerna.
För att mäta avståndet mellan datapunkter och tyngdpunkt kan vi använda vilken metod som helst som euklidiskt avstånd eller Manhattan-avstånd.
För att hitta det optimala värdet av kluster följer armbågsmetoden nedanstående steg:
- Den exekverar K-means-klustringen på en given datamängd för olika K-värden (från 1-10).
- För varje värde på K, beräknar WCSS-värdet.
- Ritar en kurva mellan beräknade WCSS-värden och antalet kluster K.
- Den skarpa böjningspunkten eller en punkt på tomten ser ut som en arm, då anses den punkten vara det bästa värdet av K.
Eftersom grafen visar den skarpa böjningen, som ser ut som en armbåge, är den därför känd som armbågsmetoden. Grafen för armbågsmetoden ser ut som bilden nedan:
försök fånga i java
Notera: Vi kan välja antalet kluster lika med de givna datapunkterna. Om vi väljer antalet kluster lika med datapunkterna blir värdet på WCSS noll, och det kommer att vara slutpunkten för plotten.
Python Implementering av K-means Clustering Algorithm
I avsnittet ovan har vi diskuterat K-means-algoritmen, låt oss nu se hur den kan implementeras med Pytonorm .
Innan implementering, låt oss förstå vilken typ av problem vi kommer att lösa här. Så vi har en datauppsättning av Mall_Kunder , vilket är data från kunder som besöker köpcentret och spenderar där.
I den givna datamängden har vi Customer_Id, Gender, Age, Year Income ($) och Spending Score (vilket är det beräknade värdet av hur mycket en kund har spenderat i köpcentret, ju mer värde, desto mer har han spenderat). Från denna datauppsättning måste vi beräkna några mönster, eftersom det är en oövervakad metod, så vi vet inte vad vi ska beräkna exakt.
Stegen som ska följas för implementeringen ges nedan:
Steg-1: Dataförbehandling Steg
Det första steget kommer att vara förbearbetningen av data, som vi gjorde i våra tidigare ämnen om regression och klassificering. Men för klustringsproblemet kommer det att skilja sig från andra modeller. Låt oss diskutera det:
Som vi gjorde i tidigare ämnen kommer vi för det första att importera biblioteken för vår modell, som är en del av dataförbehandlingen. Koden ges nedan:
# importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
I ovanstående kod är numpy vi har importerat för att utföra matematiska beräkningar, matplotlib är för att rita grafen, och pandor är för att hantera datamängden.
Därefter kommer vi att importera datamängden som vi behöver använda. Så här använder vi datasetet Mall_Customer_data.csv. Det kan importeras med koden nedan:
# Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv')
Genom att köra ovanstående kodrader får vi vår datauppsättning i Spyder IDE. Datauppsättningen ser ut som bilden nedan:
Från datauppsättningen ovan måste vi hitta några mönster i den.
Här behöver vi ingen beroende variabel för dataförbehandlingssteget eftersom det är ett klustringsproblem och vi har ingen aning om vad vi ska bestämma. Så vi kommer bara att lägga till en kodrad för matrisen av funktioner.
x = dataset.iloc[:, [3, 4]].values
Som vi kan se extraherar vi bara 3rdoch 4thfunktion. Det beror på att vi behöver en 2D-plot för att visualisera modellen, och vissa funktioner krävs inte, som kund_id.
Steg-2: Hitta det optimala antalet kluster med hjälp av armbågsmetoden
I det andra steget kommer vi att försöka hitta det optimala antalet kluster för vårt klusterproblem. Så, som diskuterats ovan, här kommer vi att använda armbågsmetoden för detta ändamål.
Som vi vet använder armbågsmetoden WCSS-konceptet för att rita plotten genom att plotta WCSS-värden på Y-axeln och antalet kluster på X-axeln. Så vi kommer att beräkna värdet för WCSS för olika k-värden som sträcker sig från 1 till 10. Nedan är koden för det:
#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()
Som vi kan se i ovanstående kod har vi använt KMeans klass av sklearn. klusterbibliotek för att bilda klustren.
Därefter har vi skapat wcss_list variabel för att initiera en tom lista, som används för att innehålla värdet på wcss beräknat för olika värden på k från 1 till 10.
Efter det har vi initierat for-slingan för iterationen på ett annat värde på k som sträcker sig från 1 till 10; eftersom för loop i Python, exkludera den utgående gränsen, så det tas som 11 för att inkludera 10thvärde.
Resten av koden är liknande som vi gjorde i tidigare ämnen, eftersom vi har anpassat modellen på en matris av funktioner och sedan plottat grafen mellan antalet kluster och WCSS.
Produktion: Efter att ha kört ovanstående kod får vi följande utdata:
Från ovanstående plot kan vi se att armbågspunkten är vid 5. Så antalet kluster här kommer att vara 5.
Steg-3: Träning av K-means-algoritmen på träningsdatauppsättningen
Eftersom vi har fått antalet kluster, så kan vi nu träna modellen på datamängden.
För att träna modellen kommer vi att använda samma två rader kod som vi har använt i avsnittet ovan, men här istället för att använda i kommer vi att använda 5, eftersom vi vet att det är 5 kluster som behöver bildas. Koden ges nedan:
#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)
Den första raden är densamma som ovan för att skapa objektet i klassen KMeans.
I den andra kodraden har vi skapat den beroende variabeln y_förutsäga att träna modellen.
Genom att köra ovanstående kodrader får vi variabeln y_predict. Vi kan kolla det under variabelutforskaren alternativet i Spyder IDE. Vi kan nu jämföra värdena för y_predict med vår ursprungliga datauppsättning. Tänk på bilden nedan:
Från bilden ovan kan vi nu relatera att kund-ID 1 tillhör ett kluster
3 (eftersom index börjar från 0, kommer därför 2 att betraktas som 3), och 2 tillhör kluster 4, och så vidare.
Steg-4: Visualisera klustren
Det sista steget är att visualisera klustren. Eftersom vi har 5 kluster för vår modell, så kommer vi att visualisera varje kluster en efter en.
För att visualisera klustren kommer man att använda scatterplot med funktionen mtp.scatter() för 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()
I ovanstående kodrader har vi skrivit kod för varje kluster, som sträcker sig från 1 till 5. Den första koordinaten för mtp.scatter, dvs. x[y_predict == 0, 0] som innehåller x-värdet för att visa matrisen för innehåller värden, och y_predict sträcker sig från 0 till 1.
Produktion:
Utdatabilden visar tydligt de fem olika klustren med olika färger. Klustren bildas mellan två parametrar i datamängden; Årlig inkomst av kund och utgifter. Vi kan ändra färger och etiketter enligt krav eller val. Vi kan också observera några punkter från ovanstående mönster, som ges nedan:
- Cluster2 visar att kunden har en hög inkomst men låga utgifter, så vi kan kategorisera dem som försiktig .
- Cluster3 visar den låga inkomsten och även låga utgifter så att de kan kategoriseras som förnuftiga.
- Cluster4 visar kunder med låg inkomst med mycket höga utgifter så att de kan kategoriseras som slarvig .
- Cluster5 visar kunderna med hög inkomst och höga utgifter så att de kan kategoriseras som mål, och dessa kunder kan vara de mest lönsamma kunderna för köpcentrets ägare.