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/