K-Means Clustering ir nepārraudzīts mācību algoritms, ko izmanto, lai atrisinātu klasterizācijas problēmas mašīnmācībā vai datu zinātnē. Šajā tēmā mēs uzzināsim, kas ir K-means klasterizācijas algoritms, kā algoritms darbojas, kā arī Python k-means klasterizācijas ieviešanu.
Kas ir K-Means algoritms?
K-Means klasterēšana ir Nepārraudzīts mācību algoritms , kas grupē nemarķēto datu kopu dažādās kopās. Šeit K definē iepriekš definētu klasteru skaitu, kas ir jāizveido procesā, it kā K=2 būs divi klasteri, un K=3 būs trīs klasteri utt.
Tas ir iteratīvs algoritms, kas neiezīmēto datu kopu sadala k dažādās klasteros tā, lai katra datu kopa piederētu tikai vienai grupai, kurai ir līdzīgas īpašības.
Tas ļauj mums grupēt datus dažādās grupās un ērts veids, kā atsevišķi atklāt grupu kategorijas nemarķētajā datu kopā bez jebkādas apmācības.
Tas ir uz centroīdiem balstīts algoritms, kur katrs klasteris ir saistīts ar centroīdu. Šī algoritma galvenais mērķis ir samazināt attālumu summu starp datu punktu un to atbilstošajām kopām.
Algoritms izmanto neiezīmēto datu kopu kā ievadi, sadala datu kopu k-skaitlī klasteros un atkārto procesu, līdz neatrod labākos klasterus. Šajā algoritmā k vērtībai jābūt iepriekš noteiktai.
K-nozīmē grupēšana Algoritms galvenokārt veic divus uzdevumus:
- Iteratīvā procesā nosaka K centra punktu vai centroīdu labāko vērtību.
- Piešķir katru datu punktu tā tuvākajam k centram. Tie datu punkti, kas atrodas tuvu konkrētajam k centram, veido kopu.
Tādējādi katrā klasterī ir datu punkti ar dažām kopīgām iezīmēm, un tas atrodas prom no citām kopām.
Zemāk redzamā diagramma izskaidro K-means klasterizācijas algoritma darbību:
Kā darbojas K-Means algoritms?
K-Means algoritma darbība ir izskaidrota tālāk norādītajās darbībās.
1. darbība: Atlasiet skaitli K, lai noteiktu klasteru skaitu.
2. darbība: Atlasiet nejaušus K punktus vai centroīdus. (Tas var būt cits no ievades datu kopas).
sql datu tipi
3. darbība: Piešķiriet katru datu punktu tam tuvākajam centraīdam, kas veidos iepriekš definētas K kopas.
4. darbība: Aprēķiniet dispersiju un novietojiet katras kopas jaunu centroīdu.
5. darbība: Atkārtojiet trešās darbības, kas nozīmē, ka katru datu punktu atkārtoti piešķiriet katra klastera jaunajam tuvākajam centraīdam.
6. darbība: Ja notiek atkārtota piešķiršana, pārejiet uz 4. darbību, bet pārejiet uz FINISH.
7. darbība : Modelis ir gatavs.
Izpratīsim iepriekš minētās darbības, ņemot vērā vizuālos sižetus:
Pieņemsim, ka mums ir divi mainīgie M1 un M2. Šo divu mainīgo lielumu x-y ass izkliedes diagramma ir parādīta zemāk:
- Ņemsim klasteru skaitu k, t.i., K=2, lai identificētu datu kopu un ievietotu tos dažādos klasteros. Tas nozīmē, ka mēs mēģināsim sagrupēt šīs datu kopas divās dažādās kopās.
- Mums ir jāizvēlas daži nejauši k punkti vai centroīds, lai izveidotu kopu. Šie punkti var būt punkti no datu kopas vai jebkurš cits punkts. Tātad šeit mēs atlasām divus zemāk esošos punktus kā k punktus, kas nav mūsu datu kopas daļa. Apsveriet tālāk redzamo attēlu:
- Tagad mēs piešķirsim katru izkliedes diagrammas datu punktu tā tuvākajam K punktam vai centraīdam. Mēs to aprēķināsim, izmantojot kādu matemātiku, ko esam pētījuši, lai aprēķinātu attālumu starp diviem punktiem. Tātad, mēs izveidosim mediānu starp abiem centroīdiem. Apsveriet tālāk redzamo attēlu:
No iepriekš redzamā attēla ir skaidrs, ka līnijas kreisās puses punkti atrodas netālu no K1 jeb zilā centroīda, un punkti pa labi no līnijas ir tuvu dzeltenajam centraīdam. Krāsosim tos zilā un dzeltenā krāsā skaidrai vizualizācijai.
- Tā kā mums ir jāatrod tuvākais klasteris, mēs atkārtosim procesu, izvēloties jauns centroīds . Lai izvēlētos jaunos centroīdus, mēs aprēķināsim šo centroīdu smaguma centrus un atradīsim jaunus centroīdus, kā norādīts tālāk:
- Tālāk mēs katru datu punktu piešķirsim jaunajam centroīdam. Šim nolūkam mēs atkārtosim to pašu vidējās līnijas atrašanas procesu. Mediāna būs tāda pati kā attēlā zemāk:
No iepriekš redzamā attēla redzams, ka viens dzeltens punkts atrodas līnijas kreisajā pusē, un divi zili punkti atrodas pa labi no līnijas. Tātad šie trīs punkti tiks piešķirti jauniem centroīdiem.
Tā kā ir notikusi pārvietošana, mēs atkal pāriesim uz 4. darbību, kas ir jaunu centroīdu vai K punktu atrašana.
- Mēs atkārtosim procesu, atrodot centroīdu smaguma centru, tāpēc jaunie centroīdi būs tādi, kā parādīts zemāk esošajā attēlā:
- Tiklīdz mēs ieguvām jaunos centroīdus, atkal tiks novilkta vidējā līnija un atkārtoti piešķirti datu punkti. Tātad attēls būs šāds:
- Mēs redzam iepriekš redzamajā attēlā; abās līnijas pusēs nav atšķirīgu datu punktu, kas nozīmē, ka ir izveidots mūsu modelis. Apsveriet tālāk redzamo attēlu:
Tā kā mūsu modelis ir gatavs, tagad varam noņemt pieņemtos centroīdus, un divi galīgie klasteri būs tādi, kā parādīts zemāk esošajā attēlā:
Kā K-means klasterizācijā izvēlēties vērtību “K klasteru skaits”?
K-vidējo klasterizācijas algoritma veiktspēja ir atkarīga no ļoti efektīvām klasteriem, ko tas veido. Bet optimālā klasteru skaita izvēle ir liels uzdevums. Ir daži dažādi veidi, kā atrast optimālo klasteru skaitu, taču šeit mēs runājam par vispiemērotāko metodi klasteru skaita vai K vērtības noteikšanai. Metode ir norādīta tālāk:
Elkoņa metode
Elkoņa metode ir viens no populārākajiem veidiem, kā atrast optimālo klasteru skaitu. Šī metode izmanto WCSS vērtības jēdzienu. WCSS apzīmē Klastera kvadrātu summas ietvaros , kas nosaka kopējās variācijas klasterī. Formula WCSS vērtības aprēķināšanai (3 klasteriem) ir dota zemāk:
WCSS= ∑Pes klasterī1attālums (PiC1)2+∑Pes 2. klasterīattālums (PiC2)2+∑Pes CLuster3attālums (PiC3)2Iepriekš minētajā WCSS formulā
∑Pes klasterī1attālums (PiC1)2: tā ir attāluma kvadrātu summa starp katru datu punktu un tā centroīdu klasterī1, un tā ir arī pārējiem diviem terminiem.
Lai izmērītu attālumu starp datu punktiem un centroīdu, mēs varam izmantot jebkuru metodi, piemēram, Eiklīda attālumu vai Manhetenas attālumu.
Lai atrastu klasteru optimālo vērtību, elkoņa metode veic šādas darbības:
- Tas izpilda K-vidējo klasterizāciju noteiktā datu kopā dažādām K vērtībām (diapazonā no 1 līdz 10).
- Katrai K vērtībai tiek aprēķināta WCSS vērtība.
- Uzzīmē līkni starp aprēķinātajām WCSS vērtībām un klasteru skaitu K.
- Asais līkuma punkts vai sižeta punkts izskatās kā roka, tad šis punkts tiek uzskatīts par labāko K vērtību.
Tā kā diagramma parāda asu līkumu, kas izskatās kā elkonis, tāpēc to sauc par elkoņa metodi. Elkoņa metodes grafiks izskatās šādi:
Piezīme: Mēs varam izvēlēties klasteru skaitu, kas vienāds ar dotajiem datu punktiem. Ja mēs izvēlamies klasteru skaitu, kas vienāds ar datu punktiem, tad WCSS vērtība kļūst par nulli, un tas būs diagrammas beigu punkts.
Python K-means klasterizācijas algoritma ieviešana
Iepriekšējā sadaļā mēs esam apsprieduši K-means algoritmu, tagad redzēsim, kā to var ieviest, izmantojot Python .
Pirms ieviešanas sapratīsim, kāda veida problēmu mēs šeit atrisināsim. Tātad, mums ir datu kopa Mall_Customers , kas ir to klientu dati, kuri apmeklē tirdzniecības centru un tur tērē.
Dotajā datu kopā mums ir Customer_ID, dzimums, vecums, gada ienākumi ($) un tēriņu rādītājs (kas ir aprēķinātā vērtība, cik klients ir iztērējis tirdzniecības centrā, jo lielāka vērtība, jo vairāk viņš ir iztērējis). No šīs datu kopas mums ir jāaprēķina daži modeļi, jo tā ir neuzraudzīta metode, tāpēc mēs nezinām, ko precīzi aprēķināt.
Tālāk ir norādītas darbības, kas jāveic ieviešanai.
1. darbība: datu pirmapstrādes darbība
Pirmais solis būs datu pirmapstrāde, kā mēs to darījām mūsu iepriekšējos tematos par regresiju un klasifikāciju. Bet klasterizācijas problēmai tā atšķirsies no citiem modeļiem. Apspriedīsim to:
Tāpat kā iepriekšējās tēmās, pirmkārt, mēs importēsim bibliotēkas savam modelim, kas ir daļa no datu pirmapstrādes. Kods ir norādīts zemāk:
# importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
Iepriekš minētajā kodā nejutīgs esam importējuši matemātikas aprēķinu veikšanai, matplotlib ir paredzēts grafika zīmēšanai un pandas ir paredzēti datu kopas pārvaldībai.
Pēc tam mēs importēsim datu kopu, kas mums ir jāizmanto. Tātad šeit mēs izmantojam Mall_Customer_data.csv datu kopu. To var importēt, izmantojot tālāk norādīto kodu:
# Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv')
Izpildot iepriekš minētās koda rindas, mēs iegūsim savu datu kopu Spyder IDE. Datu kopa izskatās šādi:
No iepriekš minētās datu kopas mums tajā jāatrod daži modeļi.
Šeit mums nav nepieciešams nekāds atkarīgs mainīgais datu pirmapstrādes solim, jo tā ir klasterizācijas problēma, un mums nav ne jausmas, ko noteikt. Tāpēc mēs vienkārši pievienosim funkciju matricas koda rindiņu.
x = dataset.iloc[:, [3, 4]].values
Kā redzam, mēs iegūstam tikai 3rdun 4thfunkciju. Tas ir tāpēc, ka modeļa vizualizēšanai ir nepieciešams 2D grafiks, un dažas funkcijas, piemēram, customer_id, nav nepieciešamas.
2. darbība: optimālā klasteru skaita atrašana, izmantojot elkoņa metodi
Otrajā solī mēs mēģināsim atrast optimālo klasteru skaitu mūsu klasterizācijas problēmai. Tātad, kā minēts iepriekš, šim nolūkam mēs izmantosim elkoņa metodi.
Kā zināms, elkoņa metode izmanto WCSS koncepciju, lai uzzīmētu diagrammu, attēlojot WCSS vērtības uz Y ass un klasteru skaitu uz X ass. Tāpēc mēs aprēķināsim WCSS vērtību dažādām k vērtībām no 1 līdz 10. Tālāk ir norādīts tās kods:
#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()
Kā redzams iepriekš minētajā kodā, mēs esam izmantojuši KMeans sklearn klase. klasteru bibliotēka, lai izveidotu klasterus.
Tālāk mēs esam izveidojuši wcss_list mainīgais, lai inicializētu tukšu sarakstu, kas tiek izmantots, lai ietvertu wcss vērtību, kas aprēķināta dažādām k vērtībām diapazonā no 1 līdz 10.
Pēc tam esam inicializējuši for cilpu iterācijai ar citu k vērtību diapazonā no 1 līdz 10; jo Python cilpai izslēdziet izejošo ierobežojumu, tāpēc tas tiek pieņemts kā 11, lai iekļautu 10thvērtību.
Pārējā koda daļa ir līdzīga, kā mēs to darījām iepriekšējās tēmās, jo mēs esam aprīkojuši modeli ar funkciju matricu un pēc tam izveidojuši diagrammu starp klasteru skaitu un WCSS.
Izvade: Pēc iepriekš minētā koda izpildīšanas mēs saņemsim šādu izvadi:
No iepriekš redzamā gabala mēs varam redzēt, ka elkoņa punkts atrodas 5. Tātad klasteru skaits šeit būs 5.
3. darbība. K-means algoritma apmācība apmācības datu kopā
Tā kā esam ieguvuši klasteru skaitu, mēs tagad varam apmācīt modeli datu kopā.
Lai apmācītu modeli, mēs izmantosim tās pašas divas koda rindiņas, ko izmantojām iepriekšējā sadaļā, bet šeit tā vietā, lai izmantotu i, mēs izmantosim 5, jo mēs zinām, ka ir jāveido 5 klasteri. Kods ir norādīts zemāk:
#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)
Pirmā rinda ir tāda pati kā iepriekš, lai izveidotu KMeans klases objektu.
Otrajā koda rindā esam izveidojuši atkarīgo mainīgo y_predict lai apmācītu modeli.
panda kūst
Izpildot iepriekš minētās koda rindas, mēs iegūsim mainīgo y_predict. Mēs to varam pārbaudīt zem mainīgo pētnieks opcija Spyder IDE. Tagad mēs varam salīdzināt y_predict vērtības ar mūsu sākotnējo datu kopu. Apsveriet tālāk redzamo attēlu:
No iepriekš redzamā attēla tagad varam norādīt, ka CustomerID 1 pieder klasterim
3 (jo indekss sākas no 0, tāpēc 2 tiks uzskatīts par 3), un 2 pieder 4. klasterim utt.
4. darbība: klasteru vizualizācija
Pēdējais solis ir kopu vizualizācija. Tā kā mūsu modelim ir 5 klasteri, mēs vizualizēsim katru klasteru pa vienam.
Lai vizualizētu klasterus, tiks izmantots izkliedes diagramma, izmantojot matplotlib funkciju mtp.scatter().
#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()
Iepriekšējās koda rindās mēs esam uzrakstījuši kodu katrai klasterim, sākot no 1 līdz 5. Pirmā mtp.scatter koordināta, t.i., x[y_predict == 0, 0], kas satur x vērtību, lai parādītu matricu funkciju vērtības, un y_predict ir diapazonā no 0 līdz 1.
Izvade:
Izvades attēlā ir skaidri redzamas piecas dažādas kopas ar dažādām krāsām. Klasterus veido starp diviem datu kopas parametriem; Klienta gada ienākumi un izdevumi. Mēs varam mainīt krāsas un etiķetes atbilstoši prasībām vai izvēlei. Mēs varam arī novērot dažus punktus no iepriekš minētajiem modeļiem, kas ir norādīti zemāk:
- Cluster2 parāda, ka klientam ir lieli ienākumi, bet zemi tēriņi, tāpēc mēs varam tos klasificēt kā uzmanīgi .
- Cluster3 parāda zemos ienākumus un arī zemos izdevumus, lai tos varētu klasificēt kā saprātīgus.
- Cluster4 parāda klientus ar zemiem ienākumiem ar ļoti lieliem tēriņiem, lai tos varētu klasificēt kā neuzmanīgs .
- Cluster5 parāda klientus ar augstiem ienākumiem un lieliem tēriņiem, lai tos varētu klasificēt kā mērķa kategorijas, un šie klienti var būt ienesīgākie tirdzniecības centra īpašnieka klienti.