Sunteți pe pagina 1din 6

Modelarea și simularea algoritmului K-means Clustering în

Python și Matlab utilizând Raspberry PI 4


Silvia-Stefania CIUREA
Universitatea Politehnica din București
Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei
Program de Masterat Ingineria Informației și a Sistemelor de Calcul
Tehnici Avansate de Programare în Modelare și Simulare

Rezumat – Algoritmul Mean-Shift Mean Shift reprezintă un instrument


reprezintă un algoritm de clustering independent de aplicație în analiza datelor
nesupraveghet utilizat în domeniul reale, în care nu este necesara specificare în
procesării imaginilor și în viziunii avans a numărului de clustere, deorece
computerizata. Acesta este o procedura de numărul de clustere este definit de algoritm
analiza a spațiului caracteristic în care se în raport cu datele experimentale.
dorește localizarea maximelor unei funcții Diferite variante ale acestui algoritm
de densitate oferind date discrete pot fi găsite în pachetele ce realizează
eșantionate din acea funcție. În acest procesarea de imagini sau învățarea
proiect, se vă realiza examinarea din punct automata. Dintre acestea putem enumera
de vedere al performantei implementărilor implementarea Scikit-learn în care Numpy/
acestui algoritm în Matlab si în Python, Python folosește arborele cu bile pentru
utilizând diferite librarii specific, dorind să căutarea eficienta a punctelor învecinate sau
se analizeze timpul necesare pentru rulare ImageJ prin care se realizează filtrarea
pe o platforma Rasberry PI 4, pentru fiecare imaginilor folosind filtru de deplasare de
soluție implementata. medie [2].
Cuvinte Cheie – K-means, cluster II. Definirea algoritmului
analysis, Matlab, Python, Raspberry PI
Pentru a putea realiza implementarea
I. Introducere propriu-zisa, este nevoie să se precizeze
Algoritmul Mean Shift a fost prezentate mecanismul matematic al acestui algoritm.
inițial că o metoda de analiza cluster în anul Vom consideram un set finit de date
1975 de către Fukunaga și Hostetler, S incorporat în spațiul Euclidian n-
ajungând să fie utilizat pe scara larga în dimensional X și a defini nucleu K, vor
multe aplicații, în principal în probleme de defini norma de x că fiind:
viziune computerizata [1].
2
‖x‖ =xT , x ≥0 ascensiunea în gradient sau prin alta tehnica
Astfel, putem spune că o funcție K : X → R de optimizare [4].
este un nucleu dacă există un profil, Deci, plecând de la un set de puncte
k : [ 0 , ∞ ) → R astfel încât de date, acest algoritm vă atribui iterativ
2 fiecare punct de date către cel mai apropiat
K ( x )=k (‖ x‖ )
centru de cluster, iar direcția către cel mai
Unde k este non-negativ, nu este în creștere
apropiat centru de cluster vă fi determinata
k ( a ) ≥ k ( b ) , daca a< bsi este continuu pe
de locul în care se vor afla majoritatea
bucati [3].
punctelor din apropiere. Fiecare iterație a
Pentru acest algoritm vom defini un nucleu
fiecărui punct de date se vă apropia de locul
plat, K, care reprezintă funcția caracteristica
în care se afla cele mai multe puncte, care
pentru λ-interatii ale lui X, având
este sau care vă duce la centru clusterului.
următoarea expresie:
Atunci când algoritmul se vă opri, fiecare
K ( x )= 1 ,‖x‖≤ λ
{
0 ,||x||> λ
punct de date vă fi atribuit unui cluster [2].
Acest algoritm poate fi utilizat
Iar media ponderata a densității pentru deoarece deplasarea medie este destul de
eșantionului x ∈ X determinata de K este buna la grupare, datorita faptului că nu este
∑ K ( s− x ) s nevoie să se specifice numărul de clustere K,
m ( x ) = s ∈s singura intrare a algoritmului fiind latimaea
∑ K ( s−x )
sϵs de banda, h. Deoarece mean shift
Diferență dintre m(x)-x a fost efectureaza o mulțime de pasi, poate fi
definita că media deplasata, iar mișcarea considerat și costisitor în ceea ce privește
repetata a punctelor de date către mijloacele calculul, având o complexitate temporala de
de eșantionare se numese algoritmul mean- O(n^2 ), unde n este numărul de date. De
shift. În cazul fiecare iterație a algoritmului, asemenea, este importanta selecția lățimii de
se vă realiza simultat s→m(s) pentru toți banda, deoarece în cazul în care se alege
s∈S. Pentru a putea estima funcția densității, prea mica, poate să nu se ajungă niciodată la
se vor netezi datele prin convoluirea convergenta pentru că vor lipsi suficiente
acestora cu un nucleu fix de lățime h, puncte de date, iar daca se vă alege prea
2
‖ x−x i‖ mare, poate fi omise complet câteva clustere
f ( x )=∑ K ( x −xi ) =∑ k
i i
( h2 ) [5].
Unde xi sunt probele de intrare și k(x) este III. Limbajele de programare
funcția kernel, iar parametru h se numește utilizate
lățime de banda. După ce a fost calculate
Python – Python este un limbaj de
f(x) cu ajutorul ecuației prezentare, se pot
programare interpretat, de nivel înalt, care a
găsi maximele sale locale folosind
fost inventat la sfârșitul anilor 1980, dar a
fost lansat pentru prima data că succesor al
limbajului de programare ABC, în 1991 de IV. Descrierea platformei
către Guido van Rossum [6]. hardware utilizata
Datorita structurilor sale de date incorporate Pentru experimentul descrie în aceasta
la nivel înalt, combinate cu tastarea lucrare se vă utiliza platforma hardware
dinamica și legătură dinamica, Python este Rasberry PI 4. Aceasta fiind cea mai recenta
util în dezvoltarea rapida a aplicațiilor, dar platfoma dezvoltate de Rasberry PI, având o
poate fi considerat și că limbaj de scriptare putere de procesare superioară față de
pentru a conecta componentele existente modelele anterioare, prezentând și o
împreună. Acest limbaj accepta mai multe mulțime de noi caracteristici. Iar
paradigme de programare, precum caracteristicile de interes pentru realizarea
programarea structurata, orietanta pe obiect acestor teste au fost memoria și sistemul de
și cea funcțională. operare, dar și informațiile referitoare la
Acesta este utilizat de către organizații procesor [10].
majore precum Google, Pinterest, DropBox,
 Sistem de operare: Raspbian
Nasa pentru programarea aplicațiilor web,
 Memorie RAM: 2 GB LPDDR4-2400
dar este prezent și în aplicații științifice [7].
SDRAM
Matlab – Matlab este de asemenea  Procesor: Broadcom BCM2711, quad-
un limbaj de programare mulți-paradigma, core Cortex-A72 (ARM v8) pe 64 de biți
dar și un mediu de calcul numeric dezvoltat SoC @ 1.5GHz
de MathWorks. Acesta permite manipularea Oferă o creștere a vitezei procesorului, a
matricelor, graficarea funcțiilor și a datelor, performanței multimedia, a memoriei și a
dar poate fi utilizat și pentru implementarea conectivității, comparativ cu generația
de algoritmi, sau pentru crearea de interfețe anterioară Raspberry Pi 3 Model B +,
pentru utilizator, dar și interfețe cu programe păstrând în același timp compatibilitatea și
scrise în alte limbaje de programare, precum consumul similar de energie [10].
C, C++, Java, Python [8].
V. Implementarea si rezultatele
Acest limbaj a fost dezvoltat de către Cleve experimentale
Molder la sfârșitul anilor 1970. De atunci,
Prima implementare a acestui algoritm
Matlab a continuat să evolueze pentru a
a fost realizata cu limbajul de programare
satisface nevoile în schimbare ale inginerilor
Python. Am dorit să urmăresc experiemental
și oamenilor de știință, ajungând să fie
implementare atât prin utilizarea bibliotecii
utilizat în multe domenii precum cel medical
prezente în Python, scikit-learn, dar și
sau automative [9].
realizarea unei implementări directe, fară puncte, implementarea algoritmului fară a
biblioteci [11], pentru a putea realiza o utiliza biblioteci specifice rulează într-un
examinare mai amănunțită a perfomatelor de timp destul de scurt, nu foarte mare fata de
implementare si simulare ale algoritmului timpul de rulare în cazul utilizării bibliotecii
Mean Shift. scikit-learn. Însă, atunci când avem un set de
date cu N = 30 000 de puncte, timpul de
Scikit-learn este cea mai utiliza
rulare este destul de mare ajungând până la
biblioteca din Python care ajuta la învățarea
aproximativ 31s, dar acest lucru se poate
automata. Aceasta conține o mulțime de
datora faptului că în implementarea directa
instrumente eficiente pentru mașini de
au fost utilizate bucle. Pentru a avea o
învățare și de modelare statistica, inclusiv
implementare de înalta în Python trebuie să
clasificare, regresie, dar și în clustering, ceea
evita utilizarea buclelor pentru că acestea
este folosit în aceasta lucrare.
încetinesc parcurgerea codului scris.
Pentru a putea face o comparație a
timpului de rulare se vor considera un set de
date cu N = 300, respectiv N = 30 000 de
puncte, iar în tabelul de mai jos se vă trece
timpul mediu dintre mai multe rulări
succesive.
N = 300 N = 30 000
Python 1.076s 30.154s
Python 0.423s 1.226s
(scikit-learn)
Tabel 1 Timpul de rulare pentru implementarile Figura 1. Rezultatul după rularea
algoritmului in Python algoritmului în Python utilizând scikit-learn (N
= 30 000)

Putem observa că cel mai mic timp


de rulare îl avem pentru codul realizat în
Python utilizând biblioteca scikit-learn,
chiar și pentru un set mare de puncte. Acest
timp scăzut de rulare se datorează faptului
că biblioteca scikit-learn profita de faptul că
fiecre proces al algoritmului poate fi calculat
Figura 1. Rezultatul după rularea independent.
algoritmului în Python utilizând scikit-learn (N În următoarea parte, se vă realiza o
= 300)
comparație a implementării algoritmului în
Făcând o analiza asupra rezultatelor, putem
Matlab [12], pentru ambele valori ale setului
oberva că pentru un set cu N = 300 de
de date, ținând cont de cele doua tipuri de accepta numeroși algoritmi de analiza a
implementări prezentate mai sus. algorimilor de tip cluster.
În tabelul 2 sunt prezentate VI. Concluzii
rezultatele timpului de execuție pentru
fiecare metoda. În acest articol s-a dorit implementarea
unui algoritmul mean-shift clustering în
N = 300 N = 30 000
Python 1.076s 30.154s doua limbaje de programare diferite, Matlab
Python 0.423s 1.226s și Python, pentru a putea face o comparație a
(scikit-learn) timpului de execuție pentru fiecare caz.
Matlab 8.85s 63.086s După cum s-a mai menționat, în aceasta
lucrare nu s-a urmărit complexitatea
algoritmului, ci s-a pus accentul pe a găsi
cea mai optima metoda de implementare a
acestui algoritm. Iar pentru a avea o imagine
clara asupra timpului de exectie, s-au
considerat doua seturi de date, pentru a
vedea și cum lucrează la un număr extrem
de mare de puncte acel limbaj.
După interpretarea rezultatelor, am
Tabel 2 Timpul de rulare pentru putut vedea că cele mai bune rezultate le-am
fiecare implementare obținut pentru implementare în Python
Figura 1. Rezultatul după rularea utilizând bibilioteca scikit-learn, deoarece
algoritmului în Matlab (N = 30 000) aceasta este o biblioteca open source care
În urma rezultatelor obținute, putem conține o mulțime de instrumente eficiente
vedea un timp foarte mare de rulare în cazul pentru mașini de învățare și modelare
implementării algoritmului în Matlab, chiar clustering.
și pentru un set de date N = 100 puncte. Pe de alta parte, Matlab este limbajul ce
Acestul lucru a fost obținut datorita faptului a avut performanta cea mai scăzută pentru
că în aceasta implementare nu s-au folosit ambele seturi de date, deoarece codul ce a
metode predefinit din Matlab ce țin de fost implementat nu a avut cea mai eficienta
clustering, ci s-a creat un algoritm direct scriere, utilizandu-se bucle, în defavoarea
utilizând atât blucle while, cât și for care la utilizării unor biblioteci sau metode
fiecare iterație vor încetini parcurgera predefinite în Matlab.
codului. O abordare mai buna ar fi fost Astfel putem concluziona că dintre cele
utilizarea diferitelor modalități puse la trei metode de implementare realizate, cea
dispoziție de către Matlab, deoarece acesta mai optima că timp de execuție a fost cea
creata în Python utilizând biblioteca scikit- computer-programming-languages/#python
learn. - accesat la data de 07/01/2021
[8] –
https://cimss.ssec.wisc.edu/wxwise/class/aos
Bibliografie
340/spr00/whatismatlab.htm#:~:text=The
[1] – Miquel A. Carreira-Perpinan, „A %20name%20MATLAB%20stands
review of mean-shift algorithms for %20for,in%20software%20for%20matrix
clustering” Electrical Engineering and %20computation. - accesat la data de
Computer Science, University of California, 07/01/2021
Merced, March 2, 2015 [9]– https://enlyft.com/tech/products/matlab-
[2] – https://iq.opengenus.org/mean-shift- accesat la data de 08/01/2021
clustering-algorithm/ - accesat la data de [10] – https://cleste.ro/raspberry-pi-4-model-
07/01/2021 b-2gb.html - accesat la data de 08/01/2021
[3] – Yizong Cheng, „Mean Shift, Mode [11] –
Seeking and Clustering”, IEEE transactions https://pythonprogramming.net/mean-shift-
on pattern analysis and machine intelligence, from-scratch-python-machine-learning-
vol. 17, no. 8, August 1995 tutorial/ - accesat la data de 08/01/2021
[4] – Dorin Comaniciu si Peter Meer, „Mean [12] – Dimitris Varsamis, Christos
Shift analysis and applications”, Department Talagkizis, „ A implementation of Mean
of Electrical and Computer Engineering Shift in MATLAB”, World Academy of
Rutgers University, Piscataway, USA Science, Engineering and Technology
[5] – https://towardsdatascience.com/the-5- International Journal of Computer and
clustering-algorithms-data-scientists-need- Information Engineering, vol:11, no:10,
to-know-a36d136ef68 - accesat la data de 2017
07/01/2021
[6] –
https://www.python.org/doc/essays/blurb/#:
~:text=Python%20is%20an%20interpreted
%2C%20object,programming%20language
%20with%20dynamic
%20semantics.&text=Python's%20simple
%2C%20easy%20to%20learn,program
%20modularity%20and%20code%20reuse. -
accesat la data de 07/01/2021
[7] –
https://www.computerscience.org/resources/

S-ar putea să vă placă și