Skip to content

andreea110/Numerical-Methods-for-Matrices

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Dumitrache Andreea Ștefania, grupa 311 CA

Tema 1

Markov is coming...

parse_labyrinth

  • citesc din fisierul de intrare dimensiunile matricei Labyrinth, apoi, cu doua bucle for citesc elemetele matricei

get_adjacency_matrix

  • initializez matricea de adiacenta Adj cu zerouri
  • parcurg labirintul folosind doua bucle for si pentru fiecare element al matricei calculez indexul cnt ce reprezinta numarul celulei curente
  • calculez b3, b2, b1 si b0, aceste variabile marcheaza existenta zidurilor in jurul celulei curente
  • in variabilele north, south, west si east calculez indexii celulelor vecine
  • daca nu exista un perete in nord (b3 == 0) iar celula se afla pe prima linie, adaug o muchie intre celula curenta si nodul WIN, punand 1 in matricea de adiacenta pe pozitia (cnt, m*n+1), daca celula nu se afla pe prima linie a labirintului, adaug o muchie intre celula curenta si celula vecina din nord
  • similar adaug muchii pentru celelalte directii, sud, est si vest, tinand cont de marginile labirintului si de nodurile WIN si LOSE
  • la final adaug muchii intre nodul WIN si el insusi si intre nodul LOSE si el insusi

get_link_matrix

  • obtin matricea de adiacenta Adj folosind functia get_adjacency_matrix_and_number_of_links, o functie asemanatoare cu get_adjacency_matrix, doar ca, in plus, pe masura ce parcurg labirintul, calculez si vectorul f in care retin numarul de muchii ce ies din fiecare nod
  • contruiesc matricea Link impartind fiecare linie din matricea de adiacenta la elemetul corespunzator din vectorul f

get_Jacobi_parameters

  • obtin in n dimensiunea matricei Link
  • obtin matricea de iteratie, G, din matricea Link fara ultimele doua linii si coloane
  • obtin vectorul de iteratie, c, selectand penultima coloana cu liniile de la 1 la n - 2

perform_iterative

  • aplic metoda Jacobi

heuristic_greedy

  • implementez algoritmul din pseudocodul din enunt

decode_path

  • parcurg vectorul path ce contine drumul
  • calculez indexii de linie si coloana ai celulei curente si ii adaug in matricea decoded_path

Linear Regression

parse_data_set_file

  • deschid fisierul de intrare din care citesc dimensiunile matricei, o initializez apoi ii citesc datele
  • citesc elementele matricei InitialMatrix ca siruri de caractere si incerc sa le convertesc la numere in variabila num
  • daca conversia reuseste, stochez numarul, altfel stochez sirul de caractere

prepare_for_regression

  • parcurg matricea initiala si, pentru fiecare linie, construiesc vectorul l, in care memorez elementele numerice ale liniei curente, iar in locul sirurilor de caractere memorez valorile numerice corespunzatoare
  • dupa ce termin de parcurs o lnie, adaug vectorul l in matricea FeatureMatrix

linear_regression_cost_function

  • calculez costul folosind formula din enunt

parse_csv_file

  • citesc intreg continutul fisierului folosind textscan si stochez rezultatul in matricea mat
  • fiecare linie a matricei mat o sparg in elemente delimitate de virgula, pe care le stochez in matricea new_m
  • primul element din linie il convertesc in numar folosind str2double si il stochez in Y
  • restul elementelor incerc sa le convertesc in numere folosind aceeasi functie, str2double, iar daca reusesc, stochez numarul, altfel, stochez sirul de caractere

gradient_descent

  • calculez Theta folosind gradientul descendent, asa cum este descris in enunt
  • la final, adaug bias-ul la Theta

normal_equation

  • verific daca matricea A este pozitiv definita, verificand daca toate valorile proprii ale sale sunt pozitive -calculez valorile proprii ale matricei folosind functia eig
  • in cazul in care exista o valoarea proprie negativa, opresc functia
  • implementez metoda gradientului conjugat din pseudocodul din enunt
  • adaug bias-ul la Theta

lasso_regression_cost_function

  • elimin bias-ul din Theta
  • implemetez functia de cost asa cum a fost descrisa in enunt

ridge_regression_cost_function

  • elimin bias-ul din Theta
  • implemetez functia de cost aplicand formula data in enunt

MINIST-101

load_dataset

  • folosesc functia load pentru a citi datele

split_dataset

  • generez o permutare aleatoare a datelor folosind functia randperm
  • permut liniile lui X si y
  • impart datele pentru antrenare si testare conform cerintei

initialize_weights

  • calculeaz e conform formulei din enunt
  • initializez matricea cu valori aleatoare din intervalul (-e, e)

cost_function

  • apelez functia get_thetas pentru a obtine Theta1 si Theta2 din vectorul de ponderi params
  • implementez algoritmul de forward propagation folosind formulele din enunt
  • transform vectorul y de labels in matricea y_m si implemntez functia de cost folosind formula din enunt
  • implementez algoritmul de backpropagation asa cum este descris in cerinta
  • apelez functia get_gradients care calculeaza gradientii grad1 si grad2 pe baza valorilor delta1 si delta2 incluzand regularizarea si excluzand biasul

predict_classes

  • folosesc functia get_thetas pentru a construi Theta1 si Theta2
  • implementez algoritmul de forward propagation conform enuntului
  • construiesc vectorul classes selectand, pentru fiecare exemplu, indicele coloanei cu probabilitatea maxima din layer-ul de output

About

Markov Chains, Linear Regression, and MNIST Classification

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages