Skip to content

PicturePrediction is based on machine-learning concepts, aiming to create automated predictions in relation with the nature of certain cats or non-containing cats pictures. Using a data set of given images, it may independently distinguish characteristics of a new picture with an accuracy up to 75%.

Notifications You must be signed in to change notification settings

sorinabuf/PicturePrediction

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

***************************************************************************

BUF SORINA-ANAMARIA 311CA
README - TEMA1 MN

***************************************************************************

PARTEA 1

	Primul task a constat in rezolvarea unui sistem liniar de forma Ax=b prin
implementarea metodei iterative Jacobi, particularizata pentru matrici rare
aduse in forma comprimata.
	Au trebuit implementate urmatoarele functii:

		•function [A, b] = generate_probabilities_system(rows)
			-in aceasta functie am avut de creat matricea A in forma sa densa
			pe baza probabilitatilor de castig ale soricelului din diagrama 
			labirintului; probabilitatile le-am obtinut pe baza unor cazuri
			particulare prin mai multe relatii de recurenta evidentiate la
			nivelul indicilor matricei A, separand relatiile pentru prima si
			ultima linie, elementele de pe lateralele labirintului, colturile
			si intersectiile interioare; matricea A este patratica de marime
			rows(rows+1)/2; vectorul b e de aceeasi lungime si l-am construit
			observand ca are numai elemente nule, in afara de ultimele rows 
			elemente care sunt 1;

		•function [values, colind, rowptr] = matrix_to_csr(A)
			-in aceasta functie am avut de adus matricea A din forma sa densa
			in comprimata, creeand 3 vectori: values, de lungime nz(nr valori
			nenule), care contine toate valorile nenule din matrice; colind,
			de lungime nz, care contine indicii coloanelor asociate elementelor
			nenule; rowptr, de lungime nr linii matrice A + 1, care contine
			pointeri la primul element nenul de pe fiecare linie, iar pe ultima
			pozitie am adaugat numarul nz+1;

		•function [GJ, cJ] = Jacobi_factorization(A, b)
			-in aceasta functie am calculat matricea si vectorul de iteratie 
			reprezentative metodei Jacobi cu ajutorul notiunilor prezentate
			in cadrul laboratorului si cursului aferent;

		•function [x] = Jacobi_sparse(Gvalues, Gcolind, Growptr, c, tol)
			-in aceasta functie am calculat valoarea vectorului solutie x cu 
			ajutorul metodei iterative Jacobi; singura diferenta a facut-o
			prezenta matricei G sub forma CSR, care a necesitat folosirea
			functiei csr_multiplication deja implementatapentru inmultirea 
			matricei G cu solutia x de la o anumita iteratie.

	Feedback: probabil a fost atat cel mai usor task din punct de vedere al
intelegerii textului si al implementarii cat si cel care mi-a iesit cel mai 
repede, desi stiu ca l-as fi putut face mult mai optimizat; insa, am descoperit 
vectorizarile abia la taskul 3 si nu m-am mai intors la aceasta parte.

PARTEA 2
	
	Al doilea task a constat in proiectarea unui algoritm de clustering, cat si
calcularea costului unui astfel de algoritm.
	Au trebuit implementate urmatoarele functii:

		•function [centroids] = clustering_pc(points, NC)
			-in aceasta functie am segmentat punctele n-dimensionale primite ca
			parametru in NC clustere, la inceput, pe baza relatiilor initiale,
			apoi le reorganizam in functie de distanta euclidiana minima catre
			centroizi, recalculand centrele de masa la fiecare iteratie pana cand
			acestia nu s-au mai modificat; m-am folosit de o matrice auxiliara
			in care pastrez suma coordonatelor punctelor pe fiecare dimensiune
			si nr nou de puncte corespunzator fiecarui nou cluster;

		•function [cost] = compute_cost_pc(points, centroids)
			-in aceasta functie am avut de calculat costul clusteringului ca fiind
			suma distantelor euclidiene minime dintre puncte si cel mai apropiat
			centroid.

	Feedback: a fost o problema care a necesitat putin mai mult timp de gandire
decat prima, dar care mi-a iesit destul de repede in final si pe care din nou as fi 
putut sa o fac mult mai optimizata daca imi dadeam seama de asta de la inceput.

PARTEA 3

	Al treila task a constat in rezolvarea unui sistem liniar de forma Ax=b prin
implementarea metodei ortogonale Householder, cat si reprezentarea unor histograme
si familiarizarea cu primele concepte ale invatarii automate nesupervizate.
	Au trebuit implementate urmatoarele functii:

		•function [sol] = rgbHistogram(pathtoimage, countbins)
			-functia returneaza histograma rgb aferenta imaginii date drept parametru
			realizata cu ajutorul functiei histc;

		•function [sol] = hsvHistogram(pathtoimage, countbins)
			-functia returneaza histograma hsv aferenta imaginii date drept parametru
			realizata cu ajutorul functiei histc, deosebindu-se de rgb prin algoritmul
			de convertire a valoriilor rgb in hsv;

		•function [Q, R] = Householder(A)
			-functia returneaza o matrice ortogonala Q si una superior triunghiulara R
			cu ajutorul factorizarii Householder studiate la laborator si curs;

		•function [x] = SST(A, b)
			-functia calculeaza solutia x a sistemului superior triunghiukar Ax=b;

		•function [X, y] = preprocess(pathtodataset, histogram, countbins)
			-functia returneaza o matrice de caracteristici X formata din histogramele
			corespunzatoare setului de date, la care se adauga o coloana de 1, si un 
			vector de etichete y care cuprinde tipul fiecarei poze din set;

		•function [w] = learn(X, y)
			-functia returneaza vectorul de componente w prin factorizarea lui X in Q 
			si R folosind functia Householder implementata anterior si rezolvarea unui
			sistem superior triunghiular cu ajutorul functiei SSt, deja implementata;

		•function [percentage] = evaluate(pathtotestset, w, histogram, countbins)
			-functia returneaza procentul de poze corect identificate dintr-un nou set
			de date folosind vectorul de componente w creat anterior.

Feedback: este problema care mi-a dat cele mai mari batai de cap, incepand de la intele-
gerea conceptului de histograma, pe care l-am deslusit eventual, pana la afla cum sa 
gestionezi fisiere in octave pentru ca aici prezenta n-a observat existenta functiei getImg
de prima oara (o specificare in enunt ar fi ajutat); de asemenea, aici am descoperit 
importanta vectorizarilor pe care am voi nevoita sa o fac si sa rescriu integral aproape 
toate functiileintrucat rularea totala a programului imi depasea cu mult 20 de minute 
(pentru ca atat am avut rabdare sa-l lasa maximsa ruleze) si am fost nevoita sa ma 
obisnuiesc cu vectorizarile, lucru din care am invatat cel mai mult in aceasta tema si 
pe care l-am folosit si in taskul 4; probabil m-as fi multumit cu o abordare ineficienta 
daca nu eram constransa de timeout.

PARTEA 4

	Al patrulea task a constat in utilizarea unei metode iterative noi (Gradient Descent) 
pentru rezolvarea unui sistem liniar Ax=b si continuarea conceptului de invatare automata.
	Am preluat o parte din functiile de la taskul 3 (mai multe detalii in comentariile din cod).
	Au trebuit implementate urmatoarele functii:

		•function [w] = learn(X, y, lr, epochs)
			-functia intoarce vectorul de parametri w cu ajutorul algoritmului Gradient Descent;

		•function [percentage] = evaluate(pathtotestset, w, histogram, countbins)
			-functia returneaza procentul de poze corect identificate dintr-un nou set
			de date folosind vectorul de componente w creat anterior.

Feedback: a fost o problema clar mai usoara decat partea a 3-a, reutilzand o mare parte
din functii, a carei dificultate a constat in intelegerea efectiva a algoritmului
Gradient Descent.

SORRY FOR LONG README... a fost cea mai stufoasa tema de pana acum si cea mai interesanta. 
	

About

PicturePrediction is based on machine-learning concepts, aiming to create automated predictions in relation with the nature of certain cats or non-containing cats pictures. Using a data set of given images, it may independently distinguish characteristics of a new picture with an accuracy up to 75%.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages