K înseamnă Clustering în R: Tutorial pas cu pas cu exemplu

Publicat: 2020-02-17

În calitate de cercetător de date, veți face o mulțime de grupări. Există multe tipuri de algoritmi de grupare disponibile și ar trebui să fii bine versat în folosirea lor pe toți. În acest articol, vom discuta despre un algoritm de grupare popular, K-means, și vom vedea cum este utilizat în R.

Veți afla teoria de bază din spatele grupării K-means în R și cum este utilizată. Am discutat, de asemenea, un exemplu practic mai târziu în articol. Asigurați-vă că marcați acest articol pentru referințe viitoare. Citiți mai multe despre analiza clustering în Data Mining.

Înainte de a începe să discutăm despre K înseamnă gruparea în R, ar trebui să aruncăm o privire la tipurile de algoritmi de grupare care sunt prezenți, astfel încât să puteți înțelege mai bine cum le tratează acest algoritm.

Citiți: Top R Libraries in Data Science

Cuprins

Tipuri de clustering

Când grupați mai multe obiecte în așa fel încât obiectele care sunt cel mai asemănătoare între ele să fie într-un grup apropiat, se numește grupare. Distanța dintre obiecte ar putea fi relevantă pentru asemănarea lor. Asemănarea arată puterea relației dintre două obiecte distincte în știința datelor. Clusteringul este o tehnică populară de data mining. Clustering-ul își găsește aplicațiile în numeroase industrii și domenii, inclusiv analiza imaginilor, învățarea automată, compresia datelor, recunoașterea modelelor și multe altele.

Clusteringul este de două tipuri - Hard și Soft. Să le discutăm pe scurt pe fiecare dintre ele.

  • Într-un cluster dur, un punct de date ar aparține unui cluster în totalitate, sau nu i-ar aparține deloc. Nu există niciun mijloc.
  • Într-un cluster soft, un obiect de date poate fi legat de mai mult de un cluster simultan, din cauza unei anumite probabilități sau probabilități.

Învață curs de știință a datelor online de la cele mai bune universități din lume. Câștigă programe Executive PG, programe avansate de certificat sau programe de master pentru a-ți accelera cariera.

Tipuri de algoritmi de grupare

Așa cum există diferite tipuri de clustere, există și diferite tipuri de algoritmi de clustering. Puteți diferenția algoritmii în funcție de modelul lor de cluster. Aceasta înseamnă că le puteți distinge în funcție de modul în care formează grupuri. Dacă am începe să vorbim despre tot felul de algoritmi de clustering, acest ghid va deveni prea lung și departe de punctul principal. Deci, vom discuta doar câteva tipuri proeminente de algoritmi de grupare. Există algoritmi de grupare bazați pe conectivitate, bazați pe centroid, pe densitate și pe distribuție.

Conceptul de bază al K-Means

Conceptul de bază al K-means este destul de simplu. K-means este legată de definirea clusterelor, astfel încât variația totală în interiorul clusterului să fie cât mai minimă posibil. Există o varietate de algoritmi k-means. Cel mai comun algoritm k-means este algoritmul Hartigan-Wong, care afirmă că variația totală intra-cluster este egală cu suma distanțelor pătrate, distanțe euclidiene dintre centroizi și elementele lor:

W( C k )= x i C k ( x i k ) 2

Aici x i se referă la un punct de date care aparține clusterului Ck și k se referă la valoarea medie a punctelor de date prezente în clusterul Ck.

Valoarea lui x i ar trebui să fie astfel încât suma pătratului distanței dintre x i și k să fie minimă.

Ce este algoritmul K-means?

Pentru a folosi algoritmul, va trebui mai întâi să precizăm numărul de clustere, K, care vor fi prezente în rezultatul nostru. Algoritmul selectează mai întâi K obiecte în mod aleatoriu pentru a acționa ca centre inițiale ale clusterului. Aceste obiecte le numim centroizi sau mijloace. Apoi atribuim obiectele rămase celor mai apropiați centroizi. Distanța euclidiană dintre centroizii clusterului și obiecte determină cât de aproape sunt acestea.

După ce am atribuit obiectele centrului lor respectiv, algoritmul calculează valoarea medie a clusterelor. După această recalculare, verificăm din nou observațiile pentru a vedea dacă ar putea fi mai aproape de un alt cluster. Apoi, reatribuim obiectele centrului în consecință. Continuăm să repetăm ​​acești pași până când se oprește atribuirea clusterelor. Aceasta înseamnă că încetăm să mai repetăm ​​iterațiile atunci când clusterele formate într-o iterație sunt aceleași cu cele din iterația lor anterioară.

Utilizarea grupării K-Means (Exemplu)

Acum că știți ce este algoritmul K-means în R și cum funcționează, să discutăm un exemplu pentru o mai bună clarificare. În acest exemplu, vom grupa clienții unei organizații utilizând baza de date a clienților angro. Datele pentru această problemă sunt disponibile la depozitul de învățare automată al Berkley UCI. Îl poți verifica aici .

Mai întâi, vom citi datele. Și apoi obțineți un rezumat al acestuia. După ce citiți datele și vedeți rezumatul acestora, veți vedea că există unele diferențe majore între consumatorii de top din diferite categorii. Veți găsi niște valori aberante, pe care nu le puteți elimina cu ușurință prin normalizare (sau scalare). Cu aceste date, o companie ar dori să vadă ce cumpără de cele mai multe ori clienții lor medii. Asta pentru că o companie ar avea o idee decentă despre ceea ce cumpără clienții lor de top.

Pentru a crea un grup de clienți de nivel mediu, ar trebui mai întâi să scăpăm de stratul superior de clienți din fiecare categorie. Așa că le vom elimina pe primele 5 și vom crea un nou set. Iată cum vom face acest lucru:

top.n.custs <- function (data,cols,n=5) { #Necesită niște cadru de date și N de sus pentru a elimina

idx.to.remove <-integer(0) #Inițializați un vector pentru a păstra clienții în curs de eliminare

for (c în cols){ # Pentru fiecare coloană din datele pe care am trecut-o acestei funcții

col.order <-order(data[,c],decreasing=T) #Sort coloana „c” în ordine descrescătoare (mai mare în partea de sus)

#Order returnează indexul sortat (de exemplu, rândul 15, 3, 7, 1, …) mai degrabă decât valorile reale sortate.

idx <-head(col.order, n) #Luați primul n din coloana C sortată la

idx.to.remove <-union(idx.to.remove,idx) #Combinați și deduplicați ID-urile rândurilor care trebuie eliminate

}

return(idx.to.remove) #Return indexurile clienților care urmează să fie eliminate

}

top.custs <-top.n.custs(data,cols=3:8,n=5)

length(top.custs) #Câți clienți sunt necesari pentru a fi eliminați?

date[top.custs,] #Examinați clienții disponibili

data.rm.top<-data[-c(top.custs),] #Eliminați clienții necesari

Cu acest nou fișier, putem începe să lucrăm la analiza clusterului. Pentru a efectua analiza clusterului, vom folosi următorul cod:

set.seed(76964057) #Setați sămânța pentru reproductibilitate

k <-kmeans(data.rm.top[,-c(1,2)], centers=5) #Creați 5 grupuri, eliminați coloanele 1 și 2

k$centre #Afișează&nbsp;centre de cluster

table(k$cluster) #Dați numărul de puncte de date din fiecare cluster

După ce ați rulat acest cod pe baza de date dată, veți obține următoarele rezultate:

  • Primul grup ar avea detergenți de înaltă calitate, dar cantitatea redusă de produse alimentare proaspete
  • Al treilea grup ar avea mai mult produs proaspăt

Va trebui să utilizați insides și betweenss pentru o interpretare detaliată a rezultatelor. k$withinss este egal cu suma pătratului distanței dintre fiecare obiect de date din centrul clusterului. Cu cât intervalul este mai mic, cu atât rezultatul ar fi mai bun. Dacă măsurarea în interior este mare în datele dvs., înseamnă că există multe valori aberante prezente și trebuie să efectuați curățarea datelor. k$betweenss este suma pătratului distanței dintre diferite centre ale clusterelor. Distanța dintre centrii cluster trebuie să fie cât mai mare posibil.

Citiți: 6 structuri de date mai frecvent utilizate în R

Ar trebui să luați ajutorul încercărilor și erorilor pentru a obține cele mai precise rezultate. Pentru a face acest lucru, va trebui să încercați diferite valori pentru K. Când graficul rezultatelor dvs. nu arată o creștere în interiorul clusterelor dvs., acel punct ar fi cea mai potrivită valoare pentru K. Puteți găsi valoarea de K prin următorul cod:

rng<-2:20 #K de la 2 la 20

încearcă <-100 # Rulați algoritmul K Means de 100 de ori

avg.totw.ss <-integer(length(rng)) #Configurați un vector gol pentru a păstra toate punctele

for(v in rng){ # Pentru fiecare valoare a variabilei interval

v.totw.ss <-integer(tries) #Configurați un vector gol pentru a păstra cele 100 de încercări

pentru(i în 1:încearcă){

k.temp <-kmeans(data.rm.top,centers=v) #Run kmeans

v.totw.ss[i] <-k.temp$tot.withinss# Stocați totalul interior

}

avg.totw.ss[v-1] <-mean(v.totw.ss) #Media celor 100 în total

}

plot(rng,avg.totw.ss,type=”b”, main=”Total în SS de către diverse K”,

ylab=”Total mediu în sumă de pătrate”,

xlab=”Valoarea lui K”)

Asta e. Acum puteți folosi graficul pe care îl obțineți din acest cod pentru a obține cea mai bună valoare pentru K și îl puteți utiliza pentru a obține rezultatele necesare. Utilizați acest exemplu pentru a vă testa cunoștințele despre gruparea K-means în R. Iată tot codul pe care l-am folosit în exemplu:

date <-read.csv(„datele clienților cu ridicata.csv”, header=T)

rezumat(date)

top.n.custs <- function (data,cols,n=5) { #Necesită niște cadru de date și N de sus pentru a elimina

idx.to.remove <-integer(0) #Inițializați un vector pentru a păstra clienții în curs de eliminare

for (c în cols){ # Pentru fiecare coloană din datele pe care am trecut-o acestei funcții

col.order <-order(data[,c],decreasing=T) #Sort coloana „c” în ordine descrescătoare (mai mare în partea de sus)

#Order returnează indexul sortat (de exemplu, rândul 15, 3, 7, 1, …) mai degrabă decât valorile reale sortate.

idx <-head(col.order, n) #Luați primul n din coloana C sortată la

idx.to.remove <-union(idx.to.remove,idx) #Combinați și deduplicați ID-urile rândurilor care trebuie eliminate

}

return(idx.to.remove) #Return indexurile clienților care urmează să fie eliminate

}

top.custs <-top.n.custs(data,cols=3:8,n=5)

lungime(top.clienți) #Câți clienți trebuie eliminați?

date[top.custs,] #Examinați clienții

data.rm.top <-data[-c(top.custs),] #Eliminați clienții

set.seed(76964057) #Setați sămânța pentru reproductibilitate

k <-kmeans(data.rm.top[,-c(1,2)], centers=5) #Creați 5 grupuri, eliminați coloanele 1 și 2

k$centre #Afișează centrele cluster

table(k$cluster) #Dați un număr de puncte de date din fiecare cluster

rng<-2:20 #K de la 2 la 20

tries<-100 #Run the K Means algoritm de 100 de ori

avg.totw.ss<-integer(length(rng)) #Configurați un vector gol pentru a păstra toate punctele

for(v in rng){ # Pentru fiecare valoare a variabilei interval

v.totw.ss<-integer(tries) #Configurați un vector gol pentru a păstra cele 100 de încercări

pentru(i în 1:încearcă){

k.temp<-kmeans(data.rm.top,centers=v) #Run kmeans

v.totw.ss[i]<-k.temp$tot.withinss# Stocați totalul interior

}

avg.totw.ss[v-1]<-mean(v.totw.ss) #Media celor 100 în total

}

plot(rng,avg.totw.ss,type=”b”, main=”Total în SS de către diverse K”,

ylab=”Total mediu în sumă de pătrate”,

xlab=”Valoarea lui K”)

Concluzie

Sperăm că v-a plăcut acest ghid. Am încercat să-l menținem concis și cuprinzător. Dacă aveți întrebări despre algoritmul K-means, nu ezitați să ne întrebați. Ne-ar plăcea să vă răspundem la întrebări.

Dacă sunteți curios să aflați despre știința datelor, consultați programul Executive PG în știința datelor de la IIIT-B și upGrad, care este creat pentru profesioniști care lucrează și oferă peste 10 studii de caz și proiecte, ateliere practice practice, mentorat cu experți din industrie, 1 -on-1 cu mentori din industrie, peste 400 de ore de învățare și asistență profesională cu firme de top.

Care sunt unele dintre dezavantajele utilizării K-means?

Valorile abere pot trage centroizi, sau valorile aberante pot primi propriul lor cluster, mai degrabă decât să fie ignorate. Deoarece K-means este stocastică, nu poate asigura că va fi găsită soluția globală optimă de clustering. În realitate, valorile aberante și datele zgomotoase ar putea face algoritmul extrem de sensibil. Înainte de grupare, luați în considerare eliminarea sau tăierea valorii aberante. La gruparea datelor cu dimensiuni și densități variabile, K-means are dificultăți. Trebuie să generalizați K-means pentru a grupa astfel de date. Chiar dacă aparțin în mod clar aceluiași cluster, algoritmul k-means nu permite punctelor de date aflate la distanță unul de celălalt să împartă același cluster.

Care este metoda cotului în K-means?

Metoda k-means se bazează în mare măsură pe găsirea numărului adecvat de clustere. Abordarea cotului este o metodă utilizată pe scară largă pentru determinarea celei mai bune valori K. Tehnica cotului realizează gruparea K-means pe setul de date pentru un interval de valori K pe grafic și apoi calculează un scor mediu pentru toate clusterele pentru fiecare valoare a lui K. Scorul de distorsiune, care este suma distanțelor pătrate de la fiecare punct centrului alocat, este calculată implicit. Alte modele bazate pe date, cum ar fi numărul de componente principale pentru a caracteriza un set de date, pot utiliza aceeași tehnică pentru a determina numărul de parametri.

Cum putem găsi valori aberante în K-means?

Valorile aberante în gruparea K-Means pot fi descoperite folosind atât o tehnică bazată pe distanță, cât și o tehnică bazată pe cluster. Valorile aberante sunt descoperite folosind dendrograme în cazul grupării ierarhice. Obiectivul proiectului este de a descoperi și elimina valorile aberante pentru a face gruparea mai precisă. Datele sunt împărțite în K grupuri prin alocarea acestora la cele mai apropiate centre de cluster în abordarea de identificare a valorii anormale bazată pe K-means. Apoi putem calcula distanța sau diferența dintre fiecare element și centrul său de grup și alegem valorile aberante cu cele mai mari distanțe. Deoarece valorile extreme pot afecta rapid o medie, metoda de grupare a K-means este sensibilă la valori aberante.