MENTENANȚA PREDICTIVĂ A SENZORILOR MOLDOVAN SORIN-CLAUDIU Formatul paginii :  Format pagină : A4 (297 x 210), pe o singură față;  Margini : top 2.5… [309405]

DETECȚIA ANOMALIILOR

MENTENANȚA PREDICTIVĂ A [anonimizat] :

 Format pagină : A4 (297 x 210), pe o singură față;

 Margini : top 2.5 cm, bottom 2.5 cm, left 3.0 cm, right 2,5 cm, gutter 0 pt, header 1.27 cm, footer 1.27 cm

 Font : [anonimizat] 12 pt., line space: 1,5, justified

Introducere în tematica lucrării ;

• Motivația, [anonimizat], precum și contribuțiile proprii;

• Elemente privind structura lucrării sau succesiunea capitolelor și subcapitolelor;

• Concluziile;

• Bibliografia consultată în vederea documentării și elaborării lucrării.

CUPRINS total 40-80 pagini

Introducere (2-5 pag.)

Motivația, [anonimizat].1 Titlul primului capitol

1.1. Secțiunea 1

1.2. Secțiunea 2

Cap.2 [anonimizat]

2.1. Secțiunea 1

2.2. Secțiunea 2

Introducere

Inteligența artificială reprezintă un domeniu foarte vast și foarte uzitat în unele domenii având tendințe de implementare în viitorul apropiat în tot spectrul vieții umane, a [anonimizat], [anonimizat].

[anonimizat]/dezvoltarea/creșterea nivelului de producție și a performanței, reducerea riscurilor de investiție a [anonimizat], [anonimizat].

Predictivitatea este o ramură importantă de exploatare a [anonimizat]/calcularea autonomiei de viață a diferitelor dispozitive/mașinării cu posibilități de preîntâmpinare/evitare a [anonimizat], ieșite din contextul unei dorite funcționări de control și siguranță.

Dacă vechile protocoale de identificare/remediere a defecțiunilor/[anonimizat], [anonimizat], experiențe acumulate de diferiți specialiști/[anonimizat], [anonimizat], monitorizării datelor: [anonimizat].

Detecția erorilor și predicția de mentenață a dispozitivelor/ [anonimizat], neîndeplinirea baremelor/limitelor de funcționare sau defectarea totală a acestora duce la imposibilitatea realizării țintelor dorite pentru siguranța procesului de mentenanță predictivă în sine.

Existența unor senzori funcționali este o [anonimizat]/ specialistul destinat pentru informare și intervenție ce se află la finalul acestui laborios lanț.

Motivația, importanța și metodologia cercetării

Mentenanța senzorilor a devenit un subiect foarte important în domeniul aeronautic și cel medical. Spe exemplu anumiți senzorii sunt folosiți pentru asistența diferitele manevre pe care le execută pilotul. Traductorul inductiv al unghiului de atac (AOA-angle of attack) atenționează manevrele efectuate în afara limitelor unghiulare de întrebuințare pentru care a fost proiectată aeronava, introduce diferite semnale de reacție în lanțul de control al pilotul automat pe ampenajul vertical. Senzorul greutății pe roți (WOW-weight on wheels) dezactivează anumite sisteme ce pot fi declanșate inoportun la nivelul solului, etc.

Mentenanța aeronautică este un produs costisitor iar dacă nu este efectuată la timp generează un potențial risc al pierderilor de vieți omenești. Un caz concludent este prăbușirea în anul 2018 a unui Boeing 737 Max aparținând companiei aeriene Lion ce a decolat din aeroportul Jakarta moment în care senzorul AOA a transmis date incorecte, activând un sistem de protecție unghiular ce a direcționat în mod repetat avionul în picaj înainte de prăbușirea sa în Marea Java, ucigând 189 de persoane.

Fig. https://www.theverge.com/

Mentenanța predictivă a senzorilor este probabil un concept nou, abordează o latură diferită, propune un model particular de realizare al mentenanței și are în centru studiul personal al limitărilor de funcționare a senzorilor de subiect utilizați.

Mentenanța predictivă presupune în general preluarea datelor de la senzori, prelucarea, curățarea, interpretarea lor, realizarea unui model pentru etichetarea valorilor caracteristice erorilor/anomaliilor, stabilirea algoritmilor de gravitate, construirea unui model de predicție a timpului de autonomie rămas până la defectarea totală al lor.

În lucrarea de față am realizat o mentenanță predictivă a mai multor tipuri de senzori: giroscoape-accelerometre (IMU-innertial measurement unit), senzor vibrații, de asemenea un model de mentenanța predictivă a circuitelor electronice cu ajutorul unor senzori de temperatură și umiditate.

Partea practică cuprinde realizarea unui cablaj imprimat, captarea datelor de la senzori cu ajutorul placii de dezvoltare Arduino UNO, salvarea într-o bază de date mysql, interpretarea – detecția anomaliilor, interpretare personală a gravității erorilor, crearea unor modele pentru clasificarea erorilor și a necesarului de mentenanță în procente.

Lucrarea de față este structurată pe mai multe capitole fiecare având mai multe subcapitole.

În primul și al doilea capitol este prezentată o descriere generală a componentelor electronice utilizate, procesul tehnologic pentru realizarea cablajului imprimat, schema electrică pusă în practică.

În capitolele unu și doi ale lucrării sunt prezentați algoritmi specifici pentru identificarea anomaliilor, principiile învățării supervizate, principiile învățării nesupervizate

În cel de-al treilea capitol, sunt descrise elementele de circuit utilizate, principalele caracteristici, schema electrică și cablajul imprimat realizat.

Ultimul capitol cuprinde prezentarea părții practice de cercetare, uneltele folosite pentru construirea aplicației și funcționalitățile aplicației

Abrevieri

UAV- mijloace aeriene fără pilot (unmanned aerial vehicle);

API – application programming interface.

Lista tabelelor, graficelor și casetelor

Cap.1 Descrierea generală a senzorilor utilizați

1.1. Giroscopul – accelerometru MPU6050 (IMU)

Este întrebuințat în funcții de monitorizare a mișcării și a fost adoptat în domeniul robotică, mijloace aeriene fără pilot UAV, telefoane inteligente și tablete. Dispozitivul combină un giroscop cu 3 axe, un accelerometru cu 3 axe și un procesor de mișcare digital (DMP).

Senzorul dispune de trei convertoare analog-digital pe 16 biți (ADC) dedicate pentru conversia ieșirilor giroscopului și trei convertoare analog-digital pe 16 biți dedicate pentru conversia ieșirile accelerometrelor. Pentru urmărirea cu precizie a mișcărilor rapide și lente, dispune de o gamă largă a plajei de programare: -250, 500, 1 000 și 2 000 °/ sec și un accelerometru programabil în valorile 2g, 4g, 8g și 16g, o memorie buffer  FIFO cu memorie programabilă de până la 1024 biți. Comunicarea cu registrele dispozitivului se realizează utilizând magistrală serială I2C.

1.2. Senzorul temperatură-umiditate DHT11

Este întrebuințat în monitorizarea temperaturii și umidității mediului ambiant în scopul protecției mărfurilor perisabile, industria agricolă, sisteme de ventilație și sisteme de aer condiționat.

Senzorul are în compunere un condensator pentru măsurarea umidității și un termistor pentru măsurarea temperaturii, un integrat ce realizează conversia analog-digitală. Gama de acuratețe pentru măsurarea temperaturii este între 0 și 500 C iar cea a umidității este între 20 și 80%.

DHT11 este un senzor grosier cu valori ale frecvenței de lucru de 1Hz, putând genera o singură ieșire/ secundă.

1.3. Senzor vibrații SW-420.

Este întrebuințat în sistemele antiefracție, sistemele de monitorizare a mișcării- sisteme antifurt, mașini inteligente, detecția cutremurelor de pământ.

Senzorul are la bază un traductor inductiv ce își modifică parametrii la vibrație, mișcare și declanșează un semnal puls la ieșire cu ajutorul unui integrat comparator.

Cap.2 Caracteristicile montajului și elementelor de circuit utilizate

Materiale utilizate:

cablaj imprimat simplu, material Cu, unistrat, grosime 35µm, suport izolant rigid;

cablu multifilar cupru;

mașină electrică, 220V;

burghiu diametru 1 mm;

soluție de clorură ferică lichidă, FeCl3, concentrație 40% ;

pastă decapantă, cositor, pistol de lipit;

alcool izopropilic;

cariocă permanentă culoare neagră.

2.1. Fazele tehnologice de realizare a circuitului imprimat:

executarea desenului cablajului imprimat: pentru implementarea schemei și realizarea traseelor de circuit am folosit hârtie milimetrică la scara 1:1;

degresarea feței cuprate: s-a realizat cu alcool izopropilic;

transpunerea desenului pe cablajul imprimat: s-a realizat cu ajutorul unui indigo avand fața activa spre folia de cupru;

punctarea centrelor găurilor de plantare: s-a realizat cu un ac de trasat;

traseele viitoarelor conductoare imprimate: s-a realizat cu ajutorul unei carioci permanente;

corodarea suprafeței placate cu cupru: s-a realizat prin îmbăiere și agitarea acestuia în soluție de clorură ferică lichidă până la reacția chimică completă;

inlăturarea traseelor protectoare (cariocă permanentă culoare neagră) s-a realizat cu ajutorul alcoolului izopropilic;

acoperirea și protecția părții placate cu cupru: s-a realizat cu soluție de colofoniu dizolvat in alcool izopropilic;

executarea găurilor pentru terminale: s-a realizat cu burghiu de 1 mm ;

plantarea pieselor: s-a realizat prin îmbinare la cald a terminalelor elementelor pasive și active de circuit cu cea a plăcii de cupru cu ajutorul cositorului și pistolului de lipit.

2.2. Elemente de circuit utilizate

Elemente active de circuit:

accelerometre și giroscoape MPU 6050 (IMU-innertial measurement unit);

senzori temperatură-umiditate DHT11;

senzor vibrații SW-420.

Elemente pasive de circuit:

rezistoare valoare: 5 kΩ.

Caracteristicile elementelor de circuit utilizate

Configurația pinilor plăcii de dezvoltare Arduino uno

Fig. Diagrama pinilor Arduino UNO

https://components101.com/microcontrollers/arduino-uno

Tab. Descrierea pinilor Arduino UNO

Configurația pinilor de ieșire a senzorului de temperatură și umiditate DHT11, schema bloc internă

Fig. Diagrama pinilor DHT11

ESP32 DHT11 and DHT22 Web Server using Arduino IDE

Tab. Descrierea pinilor senzorului de temperatură și umiditate DHT11

Configurația pinilor de ieșire MPU 6050 (IMU), schema bloc internă

Fig. Diagrama pinilor MPU 6050

https://www.elecparts101.com/mpu6050-datasheet-and-pinout-the-first-integrated-6-axis-motiontracking-device/

Tab. Descrierea pinilor MPU 6050

Fig. Shema bloc internă giroscop-accelerometru MPU 6050 (IMU)

Configurația pinilor de ieșire a senzorului vibrații SW-420, schema electrică

Fig. Diagrama pinilor SW-420

www.rajguruelectronics.com

Tab. Descrierea pinilor senzorului de vibrații SW-420

Fig. Shema electrică a senzorului vibrații SW-420

https://www.openhacks.com

2.3. Schema electrică a montajului realizat

R- Rezistoare (pull up) necesare comunicării seriale cu placa de dezvoltare arduino, valoare: 5 kΩ.

Imaginea de ansamblu a cablajului imprimat

Fig. Imagine de ansamblu a terminalelor pe cablajul imprimat

Fig. Imagine ansamblu de dispunere a componentelor pe cablajul imprimat

Fig. Imagine izolare IMU pentru experimentul temperatură-umiditate

Cap.3. Detecția Anomaliilor – teorie și practică

(teoria și practica domeniului, 20-25 pagini Proiectarea si dezvoltarea unei aplicatii de inteligenta artificiala/optimizare)

Detectarea anomaliilor constă în procesul identificării valorilor, evenimentelor sau observațiilor care ridică suspiciuni prin diferențe semnificative față de majoritatea setului de date (outliers). Anomaliile surprind evenimente cu incidență rară precum ar fi cele corespunzătoare domeniul economic-bancar, probleme medicale, defecte structurale, echipamente care funcționează defectuos.

Vizualizarea datelor joacă un rol foarte important și poate oferi informații concludente:

Fig.0 Vizualizarea valorilor outliers.

Tehnici folosite pentru detectarea anomaliilor

Tehnici nesupervizate de detectare a anomaliilor:

detectează anomaliile fără a avea eticheta sau clasificarea valorii aparținând anomaliilor sau valorilor normale, această metodă pleacă de la presupunerea că majoritatea instanțelor din setul de date sunt valori normale iar celelalate care seamănă foarte puțin de restul setului de date sunt valori anormale.

Tehnici supervizate de detectare a anomaliilor:

această tehnică necesită un set de date care a fost etichetat drept „normal” și „anormal” și implică crearea unui model clasificator pentru identificarea anomaliilor.

Tehnici semi-supervizate de detectare a anomaliilor:

această tehnică construiește un model bazat pe valori considerate normale ale setului de date ce apoi este întrebuințat a testa probabilitatea ca o valoare să fie anormală.

3.1. Dispersia datelor

Deviația standard

Presupunând un set de date X având în compunere n elemente, media aritmetică a întregului set de date poate fi exprimată cu formula:

unde: reprezintă media setului de date;

n reprezintă numărul total al elementelor existente în setul de date;

xi reprezintă poziția de instanță a elementului în setul de date;

i reprezintă suma tuturor elementelor din setul de date,

Media aritmetică a elementelor nu furnizează prea multe informații despre setul de date, dar stabilește prin calcul un așa zis punct de centru al datelor. Pentru măsurarea gradului de dispersie al datelor mai este nevoie de o altă mărime ce poate definii distanța față de acest punct de centru definit anterior, o mărime ce calculează distanța medie a punctelor față de media/ punctul de centru al datelor. Aceasta se calculează prin ridicarea la pătrat a tuturor distanțelor punctelor față de medie, adunarea lor matematică, împărțirea la numărul total de elemente și calculul rădăcinii pătrate:

unde: S reprezintă deviația standard

Variația

Variația reprezintă o altă modalitate de calcul al dispersiei datelor, este o mărime asemănătoare deviației standard și se calculează cu următoarea formulă:

unde: S2 reprezintă variația, deviația standard ridicată la pătrat.

Covariația

Covariația este o mărime ce poate fi utilizată doar în spațiul bidimensional. În timp ce o singură valoare poate captura variația unei singure dimensiuni sau variabile, pentru capturarea covariației dintre două variabile este necesară o matrice de dimensiune 2 x 2, pentru a capturarea covariației între trei variabile este necesar o matrice de dimensiune 3 x 3 și așa mai departe.

La calcularea covariației raportată la o singură dimensiune, la setul de date însuși, rezultatul acesteia este chiar variația. În cazul unui set de date tridimensional (x, y, z) se poate calcula covariația lui x față de z, x, față de z etc.

Covariația este asemănătoare variației și poate redusă la formula:

Formula covariației este următoarea:

Covariația este o mărime ce poate lua valori pozitive și negative și reflectă relația de dependență a dimensiunilor luate în calcul. Mărimea zero a covariației reflectă realția de independență a valorilor analizate.

Matricea de covariație:

Covariația este o mărime ce analizează dependența mărimilor într-un spațiu de date bidimensional. Pentru realizarea unei covariații într-un spațiu multidimensional sau mai mult de 2, spre exemplu pentru n dimensiuni este nevoie a calcula valori ale covariației.

Calea cea mai ușoară pentru abordarea calculelor de covariație pentru n dimensiuni este cuprinderea lor într-o matrice:

unde: C n x n reprezintă o matrice cu n coloane și n rânduri;

Dim reprezintă dimensiunea matricei.

Matricea de covariație a unui set de date cu dimensiunea 3 (x, y, z) are trei rânduri și trei coloane cu următoaele valori astfel:

3.2. Identificare valorilor – outliers

Un proces important în identificarea anomaliilor prezente în setul de date este detecția valorilor outliers. Atunci când avem de-a face cu una sau două variabile, vizualizarea datelor poate fi adesea un punct bun de plecare. Cu toate acestea, în cazul datelor de dimensiune foarte mare, această abordare devine din ce în ce mai dificilă. Pentru abordarea acestor cazuri este folosită tehnica statisticilor multivariate care are în vedere probabilitatea distribuției datelor.

Dacă avem în vedere analiza unei colecții de date, acesteia îi va fi asociată o anumită distribuție. Pentru a detecta anomaliile într-un mod cantitativ, mai întâi este necesar a calcula distribuția probabilităților p(x) a punctele de date (spre ex. distribuția Gaussiană). Atunci când avem o nouă valoare X, se compară probabilitatea  p(x) cu un prag de referință r. Dacă se indeplinește condiția: p(X) < r, respectiva valoare poate fi considerată o anomalie. Acest lucru se datorează faptului că valorile normale tind să aibă un număr mare al probabilității p(x) în timp ce exemplele anormale tind să aibă o valoare mică a p(X).

În contextul monitorizării stării de funcționare, anomaliile joacă un rol foarte important, deoarece pot reflecta „starea de sănătate” a echipamentelor. Datele furnizate atunci când echipamentul se apropie de avarie/funcționare sub parametrii optimi, au de obicei o distribuție diferită față de cele „sănătoase”.

3.2.1. Setul de date univariat

Având un set de date cu n observații ale unei variabile x, iar reprezentând media setului de date, respectiv s abaterea standard a distribuției datelor. O observație este considerată outliers dacă se află în afara intervalului:

unde: k reprezintă o valoare considerată 2 sau 3.

Justificarea acestor valori se bazează pe asumarea unei distribuții normale până la un procent de 95% (respectiv 99%) a datelor în jurul valorii mean cu o lungime egală cu două (respectiv, trei) deviații standard față de acesta.

De asemenea, se așteaptă ca toate datele să fie concentrate într-un interval concentric față de medie la cel mult trei abateri standard ca semi-lungime față de aceasta.

O observație x este considerată outlier dacă se îndeplinește condiția:

Asumpția acestei condiții are în vedere distribuția normalizată a datelor. Valorile de medie și abatere standard fiind sensibile la valorile outliers.

Una dintre uneltele de grafică folosite pentru vizualizarea outliers este boxplot:

Fig. 00 Structura Boxplot

Observațiile aflate în afara intervalelor (Q1-3×IQR, Q3+3×IQR) fiind considerate valori extreme: extreme outliers.

Observațiile aflate în afara intervalelor (Q1-1.5×IQR, Q3+1.5×IQR) fiind considerate valori ușoare: mild outliers.

Centrul intervalului este calculat astfel: (Q1+Q3)/2 , raza 3.5×IQR unde spațiul de interval interquartile range este IQR=Q3-Q1 .

Valoarea IQR este considerată un estimator robust al variației și poate înlocui valoarea S în ecuația (2) iar valoarea centrului (Q1+Q3)/2 este un estimator al mediei/centrului și poate înlocui valoarea în ecuația (1).

3.2.2. Setul de date multivariat

Considerând un set de date B cu mai multe coloane fi și având mai multe instanțe ni. Etichetarea/clasificarea instanțelor ni aparținând unui grup sau altul rămâne o provocare. Se poate aprecia faptul că tehnica multivariată poate fi redusă la tehnica univariată de detectare a valorilor outliers. Aceasta implică ca valorile caracteristice de instanță f considerate outliers să dicteze valoarea generalizată de outlier a întregului set de valori la etichetarea acestuia. În funcție de studiul de caz sau importanța/exigența interpretărilor pe fiecare coloană, se poate considera faptul că o valoare de instanță multivariată outlier nu este același lucru cu o instanță univariată clasificată outlier. Pe de altă parte la interpretarea multivariată, o valoare de instanță poate avea mai multe valori outlier pe diferite coloane și totuși întregul set de valori nu poate fi clasificat în întregime ca outlier sau chiar dacă este clasificată outlier ea nu are valori de outlier în tot setul coloanelor.

a. Distanța Mahalanobis

Fie x o observație a unui set de date multivariat având mai multe observații n și un număr p coloane/caracteristici. Dacă se consideră valoarea centrul/media acestui set de date, un vector ce are dimensiunea p pentru fiecare coloană/caracteristică. Matricea X conținând valorile de medie ale coloanelor, S reprezentând matricea de covariație a coloanelor p atunci ecuația univariată (2) în cazul multivariat devine:

unde: D2 reprezintă distanța Mahalanobis al punctului x față de centrul/media setului de date;

k reprezintă pragul stabilit pentru separarea valorilor.

Valoarea pragului k poate fi asociată valorii pătratice de distribuție a datelor Chi-Square, în acest caz valoarea de prag poate fi calculată cu expresia:

unde: reprezintă distribuția pătratică a datelor Chi-Square;

α reprezintă o valoare semnificativă exprimată ca valoare de 0.5.

O metodă generală pentru identificarea cazurilor outliers în setul de date multivariat este observarea în grafica boxplot distribuția datelor luând în considerare distanța Mahalanobis:

Fig. 00 Grafica boxplot – distanța Mahalanobis

Această alternativă de apreciere a valorilor outliers este foarte eficientă în cazul datelor cu dispersie considerabilă, totuși această metodă nu se comportă bine în cazul datelor concentrate în clusteri.

b. Tehnica Clustering

Tehnica clustering poate fi folosită de asemenea pentru identificarea outliers. Această metodă grupează și partiționează datele funcție de anumite criterii bazate pe similaritate. Valorile outliers cu dispersie considerabilă vor forma clusteri de mărimea 1 iar cele cu dispersie mai mică vor forma clusteri de valoare mai mică.

c. Metoda PAM (Partitioning around Medoids)

Această metodă lucrează foarte bine cu seturi de date mai mici dar se mișcă foarte greu cu seturi de date largi. Acest dezavantaj a dus la dezvoltarea algoritmului CLARA (clustering large application) care împarte setul de date în mai multe unități și aplică pentru fiecare în parte metoda PAM.

Clustering-ul se bazează pe cunoașterea anterioară a partițiilor k ce doresc a fi create.

Metoda PAM creează o partiționare inițială și apoi realizează o relocare iterativă încercând să îmbunătățească partiționarea mișcând valorile de la un grup la altul. Algoritmul are la bază partiționarea datelor astfel încât instanțele unui cluster sunt valori apropiate, asemănătoare în timp ce instanțele celorlalte clusteri sunt depărtate sau foarte diferite.

Algoritmul PAM constă în:

selectarea K, căutarea unei instanțe reprezentative pentru fiecare cluster numit medoid m, care este de altfel punctul de centru al grupului;

asocierea valorilor n față de medoid-ul cel mai apropiat;

verifică ietrativ costul/ erorile cautării unui nou centru medoid m, dacă costul este mai mic atunci:;

1. pentru fiecare medoid m și pentru fiecare non medoid o:

a. se înlocuiește valoarea lui m cu o, se calculează costul schimbării;

b. dacă costul curent este imbunățățit, se memorează combinația curentă de m și o;

2. se înlocuiește permanent valoarea lui mbest cu valoarea lui obest.

Complexitatea algoritmului PAM se reduce la calculul schimbării costului (pasul 3):

Calculul întregului cost:

După realizarea alocării fiecarei valori n către clusterul k se realizează separarea limită între grupuri definită ca cea mai mică diferență între două obiecte. Dacă separarea une instanțe este definită de o mărime foarte mare atunci toate instanțele clusterului atribuite sunt considerate outliers. Pentru determinarea unui cluster outlier este necesară varierea parametrului k pînă la obținerea grupurilor de dimensiune mică cu valori de separare mare față de ceilalți clusteri.

d. Identificarea bazată pe distanță – algoritmul Bay

Dacă o instanță x a unui set de date D este caracterizată de parametrii p și λ. În cazul în care cel puțin o fracțiune din p este mai mare decât distanța λ față de cel puțin trei instanțe ale lui x atunci acestă instanță poate fi considerată outlier. Această asumpție pare a fi destul ideală dar prezintă anumite dificultăți precum ar fi valoarea distanței λ sau a stabilirii numărului de vecini. Astfel, o instanță cu foarte puțini vecini la distanță λ poate fi privită ca fiind mai puternică în comparație cu o instanță cu mai mulți vecini la aceeși distanță. Complexitatea modelului constă în definiția O(kn2), unde k este numărul de caracteristici/ coloane și n este numărul de instanțe. Prin urmare, aceasta nu poate fi adoptată pentru seturi de date având număr mare de instanțe.

Având în vedere numerele întregi k și n (k <n). Valorile outliers ar putea fi stabilite ca fiind cele cu distanța cea mai mare față de vecinii cei mai apropiați kn. O deficiență a acestei asumpții este luarea în considerare doar a distanței față de anumiți vecinii kn ignorând distanțele față de punctele apropiate.

O altă alternativă ar putea fi utilizarea distanței medii față de cei mai apropiați kn vecini, variantă ce prezintă un dezavantaj al timpului de calcul.

Algoritmul Bay, depășeșete neajunsurilor menționate anterior și are ca idee principală memorarea vecinilor apropiați prin parcurgerea unui proces iterativ de căutare iar când vecinii cei mai apropiați ai unei instanțe obțin un scor mai mic decât valoarea prag, atunci instanța este eliminată, deoarece nu mai poate fi considerată outlier.

Valoarea prag sau valoarea de scor poate fi stabilită ca fiind suma distanței față de anumiți vecini kn, respectiv ca o distanța medie față de vecini kn.

Dacă n este numărul valorilor identificate outliers, BS, mărimea seturilor de date reieșite în urma impărțirii setului de date D și NB, numărul de instanțe reieșite în urma împărțirii setului de date D, algoritmul Bay constă în:

calculul distanței (x,y) dintre două instanțe (distanța euclidiană/ manhatan): dist(x,y);

calcularea distanței maxime dintre x și un set de instanțe Y : maxdist(x,Y);

calculul vecinilor apropiați K din setul Y față de x: Closest(x,Y,k);

stabilirea scorului/ pragului față de vecinii apropiați K, ea poate fi o valoare medie a distanței față de vecinii K, score(x);

instanțierea și setarea pragului c de separare la valoarea 0;

inițializarea setului pentru memorarea outliers, un set fără valori, O ;

definirea numărului de instanțe NB;

calculul iterativ astfel:

pentru fiecare înstanță/ segment nb din NB se instanțiază numărul vecinilor la 0, Neighbors(b)=0, pentru fiecare element b din B(nb);

pentru fiecare instanță d a setului de date D, pentru fiecare element b din B, cu condiția ca b≠d, se verifică îndeplinirea condiției de prag |Neigbors(b)|<k și dacă distanța dintre cele două puncte este mai mică decât distanța maximă dintre b și vecinii lui : distance(b,d)<maxdist(b,Neighbors(b);

la îndeplinirea condiției mai sus menționate asociază cel mai apropiat vecin al lui b fiind Neighbors(b)∪ d, dacă condiția nu îndeplinește condiția de prag score(Neighbors(b),b)<c atunci b este șters din lista B(nb);

variabila O actualizează lista outliers menținând un număr definit n, Top(B(nb) ∪ O, n);

variabila c actualizează valorile de prag cu valorile cele mai mici min(score(o);

variabila O conține setul valorilor considerate outliers.

e. Autoencoder

Autoencoderul este o rețea neuronală în trei straturi ale cărei unități de ieșire sunt conectate direct la unitățile de intrare. Obiectivul autoencoderului este de a codifica intrarea dimensională i într-o reprezentare dimensională h, unde h < i, înainte de a reconstrui (decodifica) intrarea în stratul de ieșire.

Procesul de antrenare constă în mai multe iterații până la reducerea erorii de reconstrucție – reprezentare a datelor de intrare.

La fel ca și PCA (principal component analyzer), autoencoderul este o tehnică puternică de reducere a dimensionalități și are ca scop găsirea celei mai eficiente reprezentări cu dimensiuni reduse a datelor de intrare.

Autoencoder-ul poate realiza la fel ca și structurile neuronale SOM (self organizing map) reduceri neliniare a dimensionalității având capabilități de procesare a datele de intrare de mare dimensiune mai eficient decât PCA.

Autoencoder-ul este o tehnică mult mai dezvoltată și mai sofisticată, utilizează tehnici de eliminare a zgomotului și stivuire care permit reducerea datelor de înaltă dimensiune, poate fi antrenat cu o relativă ușurință având rezultate cu o precizie foarte mare.

Arhitectura rețelei

Autoencoder-ul are o structură relativ simplă. Este o rețea neuronală cu trei straturi: un strat de intrare, un strat ascuns și un strat de ieșire. O caracteristică topologică demnă de menționat este că stratul ascuns are mai puțini neuroni decât straturile de intrare și ieșire.

Numărul necesar de neuroni în stratul ascuns este strict dependent de complexitatea datelor de intrare, scopul stratului ascuns este de a încapsula conținutul de informații de intrare și de a forța rețeaua neuronală să identifice importante proprietăți statistice.

O bună reprezentare în cazul datelor complexe de intrare se realizează folosind un număr corespunzător de neuroni în stratul ascuns de neuroni.

Performanță unei rețele autoencoder este reflectată de capacitate de reconstruire a intrării după codificarea acesteia în stratul ascuns.

Arhitectura autoencoder ete următoarea:

Fig. 00 Arhitectura autoencoder

Codarea datelor între stratul de intrare și cel ascuns se realizează prin funcția de reprezentare/ transformare a datelor de intrare (x) într-o altă formă (y). Spre exemplu o funcție non-liniară de transformare sigmoid:

unde: W reprezintă valoarea ponderilor asociați lui x;

b reprezintă o variabilă (bias) adjustabilă folosită pentru minimizarea erorilor în procesul de reconstrucție;

S reprezintă o funcție de activare.

Stratul ascuns de neuroni realizează compresia datelor, decide părțile relevante de informație ce urmează a fi memorate și le elimină pe celelalte punând în balanță următoarele criterii:

compactitatea reprezentării, măsurată ca compresibilitate;

păstrarea unor variabile relevante de intrare din punct de vedere comportamental.

Pasul final al autoencoder-ului este decodarea, un pas ce presupune reconstrucția datelor cu aceeași dimensiune a lui x folosind o funcție de transformare asemănătoare:

unde: W’ și b’ reprezintă variabile utilizate pentru optimizarea rețelei neuronale;

Antrenarea rețelei

Antrenarea rețelei neuronale are ca scop reducerea erorilor la reconstrucția datelor de intrare. Una dintre mijloacele de calcul al erorilor ar putea fi funcția de eroare pătratică:

unde: ≠ w, s, b.

Pași pentru identificarea anomaliilor:

crearea rețelei neuronale – autoencoder;

antrenarea rețelei neuronale;

identificarea pragurilor pentru semnalizarea anomaliilor prin calculul errorilor modelului antrenat;

predicția datelor de testare;

identificarea valorilor de predicție care depășesc pragurile stabilite;

asocierea/etichetarea anomaliilor din setul de date.

f. Isolation Forest

Această metodă constă în crearea arborilor iTrees iar identificarea anomaliilor se realizează prin identificarea acelor arbori a căror lungime medie este considerabil de mică în structura iTree . Metoda isolation forest are tendința izolării anomaliilor aproape de rădăcina arborilor în timp ce punctele normale sunt izolate la o adâncime terminală.

Isolation forest se bazează pe câteva variabile:

numărul de arbori care se doresc a fi construiți;

identificarea/alegerea unei lungimi rădăcină-nod terminal pentru asocierea anomaliilor;

folosirea unei mici părți a setului de date.

Performanța acestui model se bazează pe construirea unui număr mic de arbori și utilizarea unei singure părți a setului de date pentru o eficiență ridicată a identificării anomaliilor.

Avantajele acestei metode față de cele bazate pe distanță și densitate sunt următoarele:

posibilitatea de a creea modele parțiale și a exploata lungimea arborilor fără restrângeri;

fenomenul etichetării valorilor normale ca anomalii (swamping) și etichetării anomaliilor ca valori normale (masking) sunt reduse;

nu folosește criterii de distanță și densitate pentru identificarea anomaliilor;

necesită un proces scurt de calcul/ computație și resurse mici de memorie;

are capacitatea de a aborda seturi foarte mari de date cu n dimensiuni.

Algoritmul iForest

Algoritmul are la bază tendința izolării instanțelor anormale dintr-un set de date. Pentru a izola un punct de date, algoritmul generează recursiv partiții prin selectarea aleatorie a unui atribut și apoi selectarea unei valori între valorile minime și maxime permise pentru separarea acelui atribut.

Dacă se consideră un spațiu de date cu dimensiunea n=2 algoritmul realizează un anumit număr de partiții pentru separarea unei valori normale:

Fig. Separarea valorilor normale – algoritmul IForest.

Separarea unei valori anormale în aceeași dimensiune de referință:

Fig. Separarea anomaliilor – algoritmul IForest.

Se observă foarte bine bine efortul algoritmului de a izola instanțele creând partiții mult mai lungi pentru valorile normale (Xi) și partiții mult mai scurte pentru valorile anormale (Xj).

Din punct de vedere matematic, partiționarea recursivă poate fi reprezentată cu ajutorul structurii arborelui isolation tree, unde numărul necesar al partițiilor pentru a izola o instanță poate fi interpretat ca o lungime necesară pentru a ajunge de la un nod terminal la rădăcină. În acest caz putem considera lungimea căii punctului X i  mai mare decât lungimea punctului X j.

Dacă se consideră un nod T, un nod extern fără descendenți sau un nod intern cu doi descendenți (Tl,Tr) și o funcție test cu atributul q și o valoare de separare p astfel încât dacă se îndeplinește condiția q<p are loc traversarea/ parcurgerea punctelor către Tl sau Tr.

Dacă se consideră un set de date X = { x1, …, xn } și , un subset al lui X, pentru a realiza o izolare iTree, algoritmul împarte în mod recursiv pe folosind valori aleatorii ale lui q și p până se îndeplinește una din condițiile:

arborele atinge o lungime limită;

valorile de nod ale lui ating aceeași valoare.

Un arbore Itree este asemănător unui arbore binar unde fiecare nod are zero sau două noduri descendente. Dacă valorile lui sunt diferite atunci fiecare instanță este izolată pe noduri externe cu o valoare numerică n iar numărul valorilor interne fiind de n-1 numărul total al nodurior atingând valoarea de 2n-1.

Identificarea anomaliilor

Detectarea anomaliilor constă în cuantificarea gradului de izolare a instanțelor prin:

selectarea valorilor care au o anumită lungime;

asocierea unui anumit scor pentru fiecare anomalie.

Lungimea h(x) până la un punct oarecare x reprezintă numărul total al laturilor parcurse de la rădăcină până la atingerea nodului extern.

Scoring-ul derivă din lungimea h(x) și estimarea valorii medii a acesteia prin calculele căutării corespunzătoare arborelui binar BST (binary searh tree):

unde:

– este o valoare logaritmică: ln(i) + 0.5772156649 (constanta lui Euler);

– n reprezintă numărul de instanțe a setului de date;

– C(n) reprezintă valoarea medie a lungimii arborelui h(x).

Scoring-ul S asociat unei instanțe x este calculat astfel:

unde:

– E(h(x)) reprezintă media h(x) a mai multor colecții de arbori Itrees;

valori pe care le poate avea E:

Interpretarea valorilor lui S:

– dacă valoarea de instanță întoarce o valoare S aproape de 1, atunci aceasta poate fi asociată anomaliilor;

– dacă valoarea de instanță întoarce o valoare S mult mai mică de 0,5 atunci aceasta este asociată valorilor normale;

– dacă toate instanțele întorc o valoare S ≈0.5 atunci întregul set de date este asociat valorilor normale.

Fig. Relația dintre lungimea E și scoring-ul S.

Pași pentru identificarea anomaliilor folosind iForest:

definirea numărului și construirea arborilor;

antrenarea în vederea izolării instanțelor, lungimea limită a arborilor fiind stabilită funcție de valoarea setului de intrare X: l= ceiling(log2 X);

evaluarea valorilor de intrare X1..n folosind funcția de evaluare a lungimii de parcurgere a arborelui de la rădăcină la un nod terminal extern S(x,n) ;

etichetarea anomaliilor.

Cap 4. Vizualizarea grafică a datelor multivariate – reducerea dimensionalității

4.1. Analiza componentelor principale

Componenta principală sau reducerea componentelor/caracteristicilor unui set de date multivariat într-un set de date mult mai redus este o soluție de reprezentare a datelor multivariate într-un spațiu de reprezentare bidimensional 2D reprezentativ pentru toate datele ca întreg.

Componenta principală rezumă în procesul identificării axelor cu cea mai mare variație a setului de date astfel:

identificarea punctului de centru al setului de date;

calclularea matricei de covariație a setului de date;

calcularea vectorului eigen a matricei de covariație;

normalizarea ortogonală a vectorilor eigen;

calcularea variației reprezentate de fiecare vector eigen.

Un pas important în reducere dimensionalității utilizând PCA este calcularea matricei de covariație.

Vectorul eigen este un vector asociat unui set de date și a unei transformări liniare, un vector care nu se schimbă în direcție după efectuarea transformării.

Ortogonalizarea este procesul de a găsi doi vectori care formează un unghi drept unul față de celălalt. Într-un spațiu multidimensional, procesul de ortogonalizare ia un set de vectori și produce un set de vectori ortogonali.

Ortonormalizarea este un proces de ortogonalizare.

Valoarea vectorului eigen (ce corespunde aproximativ lungimii vectorului eigen) este utilizată pentru a calcula proporția de variație reprezentată de fiecare vector eigen.

Aceasta se calculează prin împărțirea valorii proprii a fiecărui vector eigen la suma tuturor valorilor eigen corespunzătoare tuturor vectorilor eigen.

În concluzie, matricea de covariație este utilizată pentru a calcula vectorii eigen. Apoi este realizat un proces de ortonormalizare care produce vectori ortogonali, normalizați din vectorii eigen. Vectorul eigen cu cea mai mare valoare a valorii eigen este prima componentă principală având componente succesive cu valori proprii mai mici:

În acest fel, algoritmul PCA are ca efect preluarea unui set de date și transformarea acestuia într-un nou sistem de coordonate cu dimensiuni mai mici.

4.2. Caracteristici PCA

Păstrarea variației

Algoritmul PCA identifică axele cu cea mai mare variație (cu valoarea vectorului eigen cea mai mare) a setului de antrenare. De asemenea se bazează pe o a doua axă, perpendiculară pe cea găsită anterior având o cantitate remanentă a procentului de variație și continuă același proces de căutare dacă avem în vedere cazul unui set de antrenare multidimensional.

Fig. Variația vectorilor în PCA.

În figura din dreapta se observă foarte bine proiecția valorilor pe cele trei axe (1,2 și 3), axa nr. 1 având un grad mai mare de proiecție, axa nr. 2 o valoare intermediară a gradului de proiecție, respectiv axa nr. 3 cu o valoare mai mică a gradului de proiecție. În acest caz particular PCA definește valori diferite ale componentelor funcție de procentul de reprezentare a variației: ith unde prima componentă este 1st PC – C1, a doua componentă fiind 2nd PC – C2 respectiv a treia componentă 3th PC – C3.

Reducerea dimensiunii

Având cele trei componente identificate se poate reduce dimensionalitatea setului de date la un spațiu limitat de dimensiunea d cu ajutorul planului definit de primele două componente:

Fig. Transpunerea în spațiu 2D cu ajutorul PCA.

Ecuația transpunerii într-un spațiu de dimensiunea d este următoarea:

unde:

– x reprezintă matricea setului de intrare;

– Wd reprezintă matricea componentelor principale utilizate.

Pentru alegerea gradului de reprezentare a setului de date multidimensional se poate realiza un grafic al funcției de variație:

Fig. Raport variație – număr dimensiuni PCA.

În graficul de mai sus se poate observa gradul de reprezentare al datelor funcție de numărul componentelor identificate 400. Valoarea de proiecție a funcției elbow pe ordonată reprezintă procentul de reprezentare a datelor raportate la 100%. Se observă că alegând o valoare a PCA de 150 nu afectează gradul de reprezentare a setului de date. Dacă se dorește o valoare mai mică componentelor spre ex. 15 PCA, atunci valoarea de reprezentare a datelor scade la 60%.

Cap 5. Protocoale de comunicare serială

Protocolul I2C (Inter Integrated Circuit)

Protocolul I2C permite mai multor dispozitive “slave” să comunice cu unul sau mai mute dispozitive “master”.

Fig. Protocolul de comunicație serială I2C.

5.1. Conceptul I2C la nivel hardware

Acesta este compus din două fire: SCL (signal clock) și SDA (signal data). SCL este utilizat pentru a sincroniza toate transferurile de date cu magistrala I2C. SDA este linia de date. Cele 2 fire sunt conectate la toate dispozitivele din magistrala I2C. Trebuie să existe de asemenea un al treilea fir care să fie masa sau 0 volți. Poate exista și un fir de 5 volți ce poate constitui sursa către dispozitive. Ambele linii SCL și SDA sunt drivere de tip „open drain”, ceea ce inseamna ca poate trage o anumita linie de semnal in 0 logic, dar nu o pot conduce spre 1 logic. Fiecare linie de semnal are un rezistor pull-up pe ea, pentru a putea readuce semnalul pe "high” cand nici un alt dispozitiv nu cere „low”. Dispozitivele din magistrala I2C sunt fie master, fie slave. Masterul este întotdeauna dispozitivul care conduce SCL. Slave sunt dispozitivele care răspund masterului. Un slave nu poate iniția un transfer prin magistrala I2C, doar un master poate face acest lucru. În bus-ul I2C pot exista mai multe dispozitive slave, cu toate acestea, în mod normal, există un singur master.  Atât dispozitivele master, cât și slave pot transfera date prin magistrala I2C, dar acest transfer este întotdeauna controlat de master. Dacă masterul dorește să vorbească cu un sclave, începe prin emiterea unei secvențe de pornire pe magistrala I2C. O secvență de pornire este una dintre cele două secvențe speciale definite pentru magistrala I2C, cealaltă fiind secvența de oprire. Cele două secvențe sunt speciale, deoarece acestea sunt singurele poziții în care SDA (semnalul de date) se poate modifica în timp ce SCL (semnalul clock) este ridicat. Când datele sunt transferate, SDA trebuie să rămână stabil și să nu se schimbe în timp ce SCL este ridicat. Secvențele de pornire și oprire marchează începutul și sfârșitul unei tranzacții cu dispozitivul slave

Datele sunt transferate în secvențe de 8 biți. Biții sunt așezați pe linia SDA începând cu MSB (bitul cel mai semnificativ). Linia SCL este high, apoi low. Pentru fiecare 8 biți transferați, dispozitivul care primește datele trimite înapoi un bit de confirmare, deci există de fapt 9 impulsuri de ceas SCL pentru a transfera fiecare octet de 8 biți de date. Dacă dispozitivul receptor trimite înapoi un bit ACK (acknowledge) scăzut, atunci a primit datele și este gata să accepte un alt octet. Dacă trimite înapoi un nivel high, atunci indică faptul că nu poate accepta alte date și masterul ar trebui să încheie transferul trimițând o secvență de oprire.

Fig. Mesaje de comunicare I2C pe 8 biți.

Adresele pe I2C

Toate adresele I2C sunt pe 7 biți sau 10 biți. La trimiterea adresei de 7 biți se trimite întotdeauna 8 biți. Bitul suplimentar este folosit pentru a informa dispozitivul slave dacă masterul îi scrie sau citește din el. Dacă bitul este zero, masterul scrie sclave-ului. Dacă bitul este 1, masterul citește de la slave. Adresa de 7 biți este plasată în cei 7 biți superiori ai octeților, iar bitul de citire / scriere (R / W) este în LSB (cel mai puțin bit semnificativ).

Dupa ce primii 8 biți ai cadrului sunt transmisi, dispozitivului receptor îi este dat controlul asupra SDA-ului. Daca acest dispozitiv nu schimba in 0 logic linia SDA inainte de al nouălea puls SCL, se poate deduce ca acesta nu a primit datele, ori nu a știut să interpreteze mesajul recepționat. In acest caz, schimbul de date se oprește și rămâne la latitudinea dispozitivului "master" cum va proceda mai departe.

5.2. Conceptul I2C la nivel software

Primul lucru care se va întâmpla este că masterul va trimite o secvență de pornire. Acest lucru va avertiza toate dispozitivele slave legate la magistrala bus că începe o tranzacție și ar trebui să asculte în caz că este pentru ei. În continuare, masterul va trimite adresa dispozitivului. Slave-ul care se potrivește cu această adresă va continua cu tranzacția, alții vor ignora restul acestei tranzacții și vor aștepta următoarea. După ce s-a adresat dispozitivului slave, masterul trebuie să trimită acum locația internă sau numărul de înregistrare din interiorul slave-ului pe care dorește să-l scrie sau să-l citească. Acest număr depinde în mod evident de ceea ce este de fapt slave-ul și de câte registre interne are. După ce a trimis adresa I2C și adresa de registru intern, masterul poate acum trimite octetul de date (sau bytes, nu trebuie să fie doar unul). Masterul poate continua să trimită octeți de date către sclave și acestea vor fi în mod normal plasate în registrele următoare, deoarece slave-ul va crește automat adresa de registru intern după fiecare octet. Când masterul a terminat de scris toate datele slaveu-lui, acesta trimite o secvență de stop care finalizează tranzacția. Deci, pentru a scrie pe un dispozitiv slave:

se trimite o secvență de pornire

se trimite adresa I2C a slave-ului cu bitul R / W scăzut (adresa uniformă)

se trimite numărul de registru intern pe care se dorește al scrie

se trimite setul de date în biți

opțional, se trimite octeți de date suplimentare

se trimite secvența de oprire.

Cap. 6. Întreruperi hardware

Întreruperea reprezintă un semnal electronic transmis procesorului ce indică necesitatea unei imediate atenții. Aceasta are ca rezultat oprirea codului intern de execuție, salvarea stării interne și execuția funcției de întrerupere ISR (interrupt service routine).

Întreruperea este temporarră iar după executarea codului ISR, procesorul revine la continuarea execuției codului de rutină la momentul întreruperii.

Fig. Algoritm întrerupere hardware.

Intreruperea hardware are loc când pinul extern de întrerupere își schimbă starea de la LOW la HIGH, respectiv de la HIGH la LOW. Întreruperea software are loc în conformitate cu instrucțiunile implementate în programul software (ex. întreruperile de timp).

Particularități Arduino Uno

Metoda cea mai des folosită utilizând arduino uno este intreruperea hardware, aceasta poate fi declanșată pe nivelurile RISING, FALLING sau LOW.

RISING reprezintă timpul de tranziție pentru declanșarea unei întreruperi atunci când pinul trece de la LOW la HIGH.

FALLING reprezintă timpul de tranziție pentru declanșarea unei întreruperi atunci când pinul trece de la HIGH la LOW.

CHANGE reprezintă timpul de tranziție pentru declanșarea unei întreruperi atunci când pinul trece de la LOW la HIGH sau HIGH la LOW.

Serviciul de întrerupere a rutinei (ISR) reprezintă un eveniment care are un set de instrucțiuni pentru procesare. La momentul executării întreruperii, procesorul execută cu prioritate codul existent în serviciul ISR și apoi revine la starea de normalitate.

Întreruperea se realizează folosind metodele digitalPinToInterrupt (pin) și attachInterrupt (digitalPinToInterrupt (pin), ISR, mod) unde:

ISR reprezintă funcția care se numește atunci când se face o întrerupere externă.

Mod reprezintă tipul de tranziție pentru declanșarea rutinei ISR: RISING, FALLING.

Cap.7 Rețele neuronale

7.1. Neuronul artificial – Perceptronul

Perceptronul reprezintă unitatea fundamentală a rețelei neuronale având rolulu de a procesa o serie de intrări pentru a produce un rezultat de ieșire utilizănd o funcție internă de activare.

Fig. Perceptronul (neuronul artificial)

Ecuația valorii de intrare a perceptronului este următoarea:

n

Z = ∑ wixi + b

i=0

unde:

n = reprezintă numărul intrărilor, wi = numarul ponderilor; xi = valoarea intrărilor,

b = reprezintă bias-ul (folosit pentru evitarea valorii 0 de ieșire a perceptronului).

Funcții de activare

a. Funcția treaptă: întoarce valori de ieșire 0 sau 1.

Fig. Caracteristica funcției de ieșire treaptă

b. Funcția sigmoidală: întoarce valori de ieșire între 0 și 1

Fig. Caracteristica funcției de ieșire sigmoidală

c. Funcția tangentă-hiperbolică: întoarce valori de ieșire între -1 și 1

Fig. Caracteristica funcției de ieșire – tangentă-hiperbolică

d. Funcția liniară – întoarce valori de ieșire între 0 și Z

.

Fig. Caracteristica funcției de ieșire liniară

7.2. Rețeaua neuronală cu mai multe straturi de neuroni (multy layer perceptron)

Rețelele neuronale compuse din mai multe straturi de neuroni artificiali depășesc dezavantajele unui singur neuron crescând capacitatea/complexitatea problemelor pe care o poate aborda și învăța.

Fig. Structura rețelei multy layer perceptron

În acest caz setul de antrenare are direcția de propagare înainte (feedforward) iar erorile sunt întoarse (back propagation) și minimizate cu ajutorul metodei gradient descent ce va calcula erorile și va adjusta fiecare pondere a rețelei.

Funcția de activare a unui singur strat ascuns de neuroni al rețelei neuronale este următoarea:

unde:

Xi reprezintă intrarea în rețeaua neuronală;

Wji (1) reprezintă ponderii asociați primului strat de neuroni;

Wkj(2) reprezintă ponderii asociați stratului ascuns de neuroni.

La nivelul rețelelor neuronale există următoarele conexiuni:

conexiuni intra-nivel stabilite între neuronii unor straturi diferite;

conexiuni inter-nivel stabilite între neuronii aceluiași strat.

Rețeaua neuronală este compusă din cel puțin două straturi de neuroni, care au rolul de comunicare cu mediul exterior:

stratul de intrare are rolul de preluare a datelor de intrare și propagare a acestora în întreaga rețea;

straturile ascunse;

stratul de ieșire, unde sunt captate ieșirile rețelei neuronale.

7.3. Algoritmul de reducere a erorilor, metode de parcurgere a rețelei

Calcul erorilor (Costul)

Expresia erorilor definește diferența rezultatelor obținute față de performațele scontate:

C =∑(y-a)2 /n

unde:

C reprezintă eroarea medie pătratică (costul); y reprezintă valoarea adevărată;

a reprezintă predicția neuronului.

C = (-1/n)∑(y ln(a) + (1-y) ln(1-a)

unde:

C reprezintă entropia (crossentropy);

y, a reprezintă valoarea adevărată, respectiv predicția;

Gradientul stochastic SGD

Pentru reducerea erorilor gradientul stochastic caută în mod iterativ valorile de minim ale funcției cost și realizează adjustări ale ponderilor w (weights).

Fig. Căutarea punctului de minim – funcția gradient

Metoda parcurgerii înainte (forwardpropagation)

Reprezintă modul de realizare a predicției prin preluarea informațiilor de intrare, parcurgerea primului strat, parcurgerea straturilor ascunse până la ultimul strat care asigură ieșirea rețelei.

Dacă se consideră o rețea neuronală cu un singur strat ascuns atunci această parcurgere poate fi exprimată matematic prin formula:

unde:

PRED reprezintă predicția;

actv reprezintă funcția de activare;

X reprezintă intrarea în stratul ascuns de neuroni;

Wh reprezintă ponderii w de intrare în stratul ascuns;

W0 reprezintă ponderii w de intrare în ultimul strat.

Algoritm de parcurgere:

se calculează intrarea în stratul ascuns de neuroni X Wh ;

se aplică funcția de activare la nivelul stratului ascuns și se transmite valoarea de ieșire H=act(XWh) la intrarea ultimului strat de neuroni;

se repetă cei doi pași menționați anterior luând ca variabilă pe H și ponderii de intratre în stratul de ieșire W0.

Metoda parcurgerii înapoi (backpropagation)

Scopul metodei backpropagation este adjustarea ponderilor rețelei funcție de eroarea individuală care o propagă în eroarea de cost.

Expresia matematică a costului raportat la un singur neuron este următoarea:

unde:

reprezintă valoarea de intrare în rețeaua neuronală;

R reprezintă funcția de activare a neuronlui R=max(0,Z);

C reprezintă funcția de cost raportată la un singur neuron, .

Derivatele funcțiilor Z, R și C sunt următoarele:

; ; .

Pentru calcularea erorilor la nivelul ponderilor se derivează expresia costului funcție de W:

=

Algoritmul de parcurgere:

se calculează eroarea de ieșire a stratului de neuroni și se introduc rezultatele la intrarea stratului anterior ascuns de neuroni, după calcularea erorii la nivelul stratului ascuns de neuroni se introduc rezultatele în stratul ascuns anterior de neuroni și așa mai departe;

la fiecare pas al parcurgerii înapoi al rețelei neuronale se calculează derivata costului raportată la ponderii fiecărui strat de neuroni;

se actualizează ponderii folosind derivatele costului raportat la fiecare unitate W.

Valoarea erorii corespunzătoare stratului de ieșire avînd ca referința valoarea de intrare corespunzătoare Z0 este:

Valoarea erorii corespunzătoare stratului ascuns de neuroni avînd ca referința valoarea de intrare corespunzătoare Zh este:

Expresia matematică generalizată pentru eroarea tuturor ponderilor:

C’(w) = Eroarea stratului curent de neuroni · Valoarea de intrare a stratului current de neuroni

Valoarea de intrare a stratului de neuroni desemnează valoarea de ieșire a funcției de activare a stratului de neuroni anterior.

7.4. Învățarea în rețelele neuronale

Învățarea supervizată

Are la bază cunoașterea istoricului evenimentelor, se bazează pe învățarea și predicția unei etichete cunoscute. Dacă se are în vedere predicția unei etichete aparținând unei categorii specifice atunci avem de-a face cu o problemă de clasificare iar dacă avem de-a face cu predicția unor valori continue (valorile singulare) atunci avem de-a face cu o regesie;

Învățarea nesupervizată

În cazul învățării nesupervizate nu se cunoaște istoricul etichetelor și are la bază impărțirea/ gruparea datelor într-un cluster de apartenență funcție de anumite criterii de selecție stabilite prin interpretarea particulară și personalizată a cercetătorului/ omului de știință.

Învățarea competitivă (reinforcement)

Învățarea competitivă se deosebește de celelalte două prin domeniul învățării automate preocupată de modul în care agenții software trebuie să întreprindă acțiuni într-un anumit mediu pentru a maximiza noțiunea de recompensă.

Această învățare se bazează pe transpunerea situațiilor în acțiune, merge pe rezultatul încercărilor și erorilor care generează cea mai valoroasă recompensă/premiu. Spre exemplu – calculatorul care rulează un joc, calculatorul care conduce o mașină. În acest context agentul (calculatorul) este cel care ia deciziile, mediul dinamic de interacțiune este de obicei un proces de decizie Markov, acțiunea reprezintă acțiunile pe care le poate întreprinde agentul.

Pași esențiali în procesul de învățare supervizată:

ACHIZIȚIA DATELOR CURĂȚAREA DATELOR SET TESTARE (30%)

SET ANTRENARE (70%)

ANTRENARE MODEL

Adjustarea

Parametrilor EVALUAREA MODELULUI

UTILIZARE MODEL

Fig. Pași esențiali în procesul de învățare supervizată

Pași esențiali în procesul de învățare nesupervizată:

ACHIZIȚIA DATELOR CURĂȚAREA DATELOR

SET PENTRU ANTRENARE

ANTRENARE MODEL

Adjustare

Parametrii EVALUARE MOD EL

UTILIZARE MODEL

Fig. Pași esențiali în procesul de învățare nesupervizată

Pași esențiali în procesul de învățare nesupervizată:

ACHIZIȚIA DATELOR CURĂȚAREA DATELOR

SET EVALUARE

SET PENTRU

TESTARE (30%)

SET PENTRU

ANTRENARE (70%)

ANTRENARE

Adjustare

parametrii TESTARE

EVALUARE MODEL

UTILIZARE MODEL

Fig. Pași esențiali în procesul de învățare nesupervizată

Cap.8 . Tehnologii și unelte software

(se prezinta limbajele, tehnologiile și uneltele software folosite pentru dezvoltarea aplicației (C, Java, MySQL, PHP etc.), cu accent pe componentele/funcțiile din ele care au fost folosite în aplicatie și pe justificarea alegerii acestora)

Arduino Uno și arduino C

Arduino uno este o placă electronică de dezvoltare cu capabilități de citire a semnalelor de intrare și funcție de instrucțiunile software poate acționa diferite elemente de execuție. Avantajul utilizării arduino este ușurința proiectării, accesul la o bază largă de date, punerea la dispoziție un set gratuit de unelte software, unelte care pot fi particularizate/ adaptate la necesitățile și oportunitățile dezvoltatorilor.

Pentru realizarea comunicației seriale cu placa de dezvoltare arduino uno am instalat suportul driver pentru OS pe 64biți: USB-SERIAL CH341SER.

Pentru interfațarea cu arduino a senzorilor de umiditate și vibrații am particularizat schemele puse la dispoziție de adafruit. Interfațarea senzorilor giroscop – accelerometru MPU 6050 s-a realizat folosind librăriile oferite de producătorul InvenSense, I2Cdev și MPU6050.

Senzorul MPU6050 este un senzor versatil ce oferă multe variante de configurare funcție de domeniul de utilizare. Datele de ieșire pot fi captate în stadiu raw fără prea multe adjustări ale valorilor de zgomot sau pot fi tranzitate prin DMP unde pot fi introduse limitări sau adjustări ale factorului de zgomot.

Deoarece nu am utilizat alți senzori de extensie slave, în special un magnet de corecție a momentului de girație, respectivii senzori prezintă dezavantajul fenomenului de alunecare a valorilor în unitatea de timp (în special girație). Pentru depășirea acestui dezavantaj am folosit alternativa introducerii corecțiilor și rutina ISR pin interrupt. Valorile de adjustare au fost introduse fiecărui mărimi din șirul quaternar de reprezentare a poziției în spațiu (w,x,y,z) precum și valorilor de accelerație adiacente celor trei axe de referință (x, y și z) după cum urmează:

definirea pinilor arduino pentru rutina ISR:

#define INTERRUPT_PINH 2

#define INTERRUPT_PINL 3

rutina ISR cu setul de instrucțiuni:

attachInterrupt(digitalPinToInterrupt(INTERRUPT_PINH), dmpDataReadyH, RISING);

attachInterrupt(digitalPinToInterrupt(INTERRUPT_PINL), dmpDataReadyL, RISING);

introducerea corecțiilor pentru fiecare senzor MPU6050 în parte:

//mpu H

mpuH.setXGyroOffset(-21);

mpuH.setYGyroOffset(46);

mpuH.setZGyroOffset(8);

mpuH.setZAccelOffset(360);

mpuH.setYAccelOffset(2397);

mpuH.setXAccelOffset(-1903);

//mpu L

mpuL.setXGyroOffset(165);

mpuL.setYGyroOffset(23);

mpuL.setZGyroOffset(19);

mpuL.setZAccelOffset(-322);

mpuL.setYAccelOffset(-3425);

mpuL.setXAccelOffset(-3996);

Fișierele arduino sketch au în compunere două funcții vitale void și loop:

void setup(){}, funcție ce este chemată o singură dată și are rolul declarării, inițierii variabilelor, librăriilor, desemnarea pinilor;

void loop(){}, funcție ce realizează iterații infinite, execută codurile/instrucțiunile subsecvente.

Xampp, MySQL

Pentru salvarea valorilor de ieșire ale senzorilor utilizați am folosit mediul de dezvoltare XAMPP versiunea: 1.8.3 și baza de date MySQL.

Xampp este un mediu de dezvoltare local destinat pentru testarea proiectelor bazate pe HTML, CSS, PHP si MySQL. Este o alternativă foarte rapidă pentru a avea într-un singur pachet, ușor de configurat, toate elementele necesare dezvoltării aplicațiilor web.

Am creat și structurat baza de date “SENZORI” creând tabelul “DATE SENZORI INTEGRATE” prin următoarea comandă de consolă MySQL:

CREATE DATABASE IF NOT EXISTS `SENZORI`

DEFAULT CHARACTER SET = utf8mb4

DEFAULT COLLATE = utf8mb4_general_ci;

USE `SENZORI`;

CREATE TABLE IF NOT EXISTS `DATE SENZORI INTEGRATE` (

`id` int(11) AUTO_INCREMENT NOT NULL,

PRIMARY KEY (`id`),

`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

`MPU69W` varchar(255) NOT NULL,

`MPU69X` varchar(255) NOT NULL,

`MPU69Y` varchar(255) NOT NULL,

––––––––––––––––––-

) ENGINE = InnoDB

DEFAULT CHARSET = utf8mb4

DEFAULT COLLATE = utf8mb4_general_ci.

Serverul node javascript

Serverul node este un mediu de dezvoltare ce poate fi instalat pe o mașina locală. Acesta furnizează toate librăriile necesare lansării fișierelor javascript.

Am utilizat javascript deoarece oferă posibilitatea cu ajutorul librăriei serialport mysql interfațarea cu placa de dezvoltare arduino uno. Fișierul javascript realizează și inițiază conexiunea cu baza de date, caută portul serial de comunicație disponibil USB3 – placa de dezvoltare arduino uno prin const SerialPort = require('serialport') și SerialPort.list, stabilește rata de transfer/sincronizare a datelor prin const baudRate = 38400, gestionează fluxul de date prin callback port.on('data', receiveSerial). Citește pe linii datele întregului set de valori prin class TextParser, realizează o impărțire (parsing) al setului de date. Pentru evitarea erorilor și eforturilor ulterioare de curățire a datelor verifică prin var adunare atributele setului de date, lungimea acestuia și realizează operațiunile INSERT numai dacă îndeplinește condiția logică (TRUE) spli.length=19.

Anaconda este o platformă de dezvoltare a aplicațiilor python, dând posibilitatea creării spațiilor virtuale, instalării și izolării diferitelor versiuni de librărie.

Jupyter Notebook este un mediu de dezvoltare ce permite crearea fișierelor, aplicațiilor manipularea, curățirea, vizualizarea și modelarea statistică a datelor. Jupyter notebook are o structură tabulară ce permite lansarea selectivă a codurilor cu posibilitatea vizualizării inline a rezultatelor.

Tensor flow – este o librărie python utilizată în domeniul machine learning ce este caracterizată prin capacitatea calculelor complexe numerice.

Librării python

librăria panda:

citirea, crearea, manipularea setului de date în format dataframe df, pd.read_csv();

calcularea și afișarea informațiilor statistice, spre ex. df.describe();

crearea efectelor de mască, manipularea cu ajutorul funcțiilor boolene;

realizarea filtrelor ce vizează valorile, spre ex. df[df['Salary']>60000];

citirea și manipularea matricilor, citirea datelor histogram prin pd.cut;

vizualizarea boxplot a datelor, df.boxplot().

librăria numpy

crearea șirurilor, efectuarea calculelor matematice între șiruri, indexarea, accesarea/ crearea subseturilor șir;

manipularea, transpunerea șirurilor, spre ex. np.transpose();

redimensionarea, concatenarea, impărțirea șirurilor, spre ex. np.concatenate();

vizualizarea datelor în histogram, spre ex. np.histogram;

librăria scikit – learn

furnizează foarte mulți algoritmi specifici machine learning numiți estimatori, ce pot fi utilizați prin funcția fit(), spre ex. RandomForestClassifier, PCA;

modele destinate evaluării modelelor, spre ex. cross_validate;

modele pentru adjustarea parametrilor/hiperparametrilor, spre ex. RandomizedSearchCV;

transformarea datelor, scalarea datelor, spre ex. scaler_model=MinMaxScaler(), scaler_model.transform(df);

partiționarea datelor în set de antrenare și set de testare, train_test_split(x, y);

librăria seaborn

vizualizarea statistică a datelor.

librăria matplotlib

vizualizarea grafică a datelor, plt.plot(x,y);

vizualizarea histogram a datelor, plt.hist();

Keras

Keras este o aplicație API de înalt nivel strucurată în limbajul python ce poate folosi tensor flow sau Theano ca putere de calcul în backend.

Keras reduce numărul comenzilor de scripting, se bazează pe modularitate, scalabiliate.

Cel mai des folosit model în Keras este modelul Sequential, un model bazat pe stiva de straturi neuronale.

Pentru crearea rețelei neuronale se apelează metoda Dense, se compilează modelul utilizând metoda model.compile și se antrenează cu model fit:

model = Sequential()

# adăugare strat cu n neuroni, dimensiunea vectorului de intrare m cu funcția de activare relu

model.add(Dense(n, input_shape=(m,), activation="relu"))

# adăugare n nuroni pe ultimul strat

model.add(Dense(n))

# compilare model folosind un optimizator adam și o funcție loss mse

model.compile(optimizer='adam', loss='mse')

# antrenarea rețelei neuronale pentru un număr de epoci 30, set antrenare X ,Y

model.fit ( X, Y, epochs = 30 )

# evaluarea performaței modelului

model.evaluate(X, Y)

PARTE PRACTICĂ

Cap.9. Achiziția datelor

Achiziția datelor s-a realizat cu ajutorul placii de dezvoltare arduino uno utilizând schema electrică prezentată în capitolul 2, subcapitolul 2.3. Datele de ieșire ale acelerometrelor giroscop MPU 6050 au fost preluate prin magistrală I2C, iar cea a celorlați senzori prin pinii PWM.

Am calibrat accelerometrele cu ajutorul librăriei i2cdevlib puse la dispoziție de Jeff Rowberg (https://github.com/jrowberg/). Scriptul citește valorile într-un număr de iterații loop definit și realizează o medie a factorului de zgomot pentru fiecare semnal în parte.

Astfel, am imobilizat și poziționat accelerometrele în poziția unghiulară „0” și am calculat valoarea medie a abaterilor. De asemenea, scriptul dă posibilitatea stabilirii anumitor limite prag acceptate ca eroare pentru fiecare set de valori – setul cuaternar și setul accelerațiilor (int acel_deadzone=6, int giro_deadzone=1).

Rezultatele reieșite pentru corecția zgomotolului sunt următoarele:

Fig. Valori offset MPU6050, adresa 0X69.

Fig. Valori offset MPU6050, adresa 0X68.

Am compilat fișierele sketch puse la dispoziție de adafruit într-un singur script arduino, particularizând variabilele pentru fiecare senzor în parte.

Pentru sincronizarea datelor de ieșire am redus timpul de răspuns al senzorului de vibrații prin constanta PULSEIN_TIMEOUT = 70000UL, am redus viteza de scriere a memoriei FIFO – MPU6050_DMP_FIFO_RATE_DIVISOR la valoarea 0x04 (200Hz / (1 + 4) = 40Hz./ librăria MPU6050_6Axis_MotionApps20.h).

Am introdus valorile de offset DMP în funcția declarativă void setup().

Funcția void loop() citește valorile celor trei senzori prin următoarele instrucțiuni/comenzi:

citirea semnalului puls al senzorului vibrații la tranziția HIGH:

long value = pulseIn(pinPulse, HIGH, PULSEIN_TIMEOUT)

citirea ieșirilor giroscoapelor prin lansarea instrucțiunilor ISR (îndeplinirea condiției de lungime FIFO):

// captarea setului cuaternar

mpuH.dmpGetQuaternion(&h, fifoBufferH);

mpuL.dmpGetQuaternion(&l, fifoBufferL).

// captarea setului accelerațiilor

mpu.dmpGetQuaternion(&h, fifoBufferH);

mpu.dmpGetAccel(&aa, fifoBufferH);

mpu.dmpGetGravity(&gravity, &h);

mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity);

mpu.dmpGetLinearAccelInWorld(&aaWorld, &aaReal, &h)

citirea ieșirilor senzorilor umiditate:

int chk1 = DHT111.read(DHT111PIN);

int chk2 = DHT112.read(DHT112PIN)

Secvența fluxului de ieșire a datelor compilate în terminalul arduino este următoarea:

Fig. Flux de ieșire a datelor în terminalul arduino.

Fișierul javascript citește printr-o funcție callback port.on('data', receiveSerial) datele seriale, verifică veridicitatea/componența numerică și le introduce în baza de date mysql.

function receiveSerial(dataBuf) {

let str = dataBuf.toString();

for (let i = 0; i < str.length; i++) {

if (parser.parse(str[i])) {

var value = parser.message.trim();

var spli=value.split(" ");

adunare=spli[0]*1+spli[1]*1+spli[2]*1+spli[3]*1+spli[4]*1+spli[5]*1+spli[6]*1+spli[7]*1+spli[8]*1+spli[9]*1+spli[10]*1+spli[11]*1+spli[12]*1+spli[13]*1+spli[14]*1+spli[15]*1+spli[16]*1+spli[17]*1+spli[18]*1;

if (isNaN(adunare)){

console.log("do nothing");//

} else if (spli.length=19) {

insertValueIntoDatabase([spli[0],spli[1],spli[2],spli[3],spli[4],spli[5],spli[6],spli[7],spli[8],spli[9],spli[10],spli[11],spli[12],spli[13],spli[14],spli[15],spli[16],spli[17],spli[18],Caz_WW,Caz_XX,Caz_YY,Caz_ZZ,Caz_ACC_XX,Caz_ACC_YY,Caz_ACC_ZZ]);

}

}

}

}

DETECȚIA ANOMALIILOR

10. Învățarea nesupervizată

10.1. Inspectarea și vizualizarea setului de date

Întrucât nu se cunoaște procentul erorilor în setul de date și nu avem clasificarea etichetă a acestoră, am efectuat un calcul estimativ de raportare în procent % prin multiple mijloace de reprezentare grafică și calcul în mediul virtual anaconda, jupyter notebook.

Am importat librăriile necesare pentru reprezentarea grafică, manipularea datelor:

Am citit și instatanțiat setul de date în format panda DataFrame:

Am previzualizat caracteristicile datelor (stdv,mean), distribuția datelor pe quartile prin funcția statistică describe():

Tab.1. Descrierea setului de date pentru antrenarea modelului autoencoder

Observăm o anumită corelație pe rânduri a parametrilor cuaternari: MPU69W, MPU69X, MPU69Y, MPU69Z deoarece se află în aceeași plajă de lucru, precum și a accelerațiilor MPU69ACC_X, MPU69ACCY, MPU69ACCZ care de asemenea vizează o plajă comună de lungime a valorilor dar total diferită față de cea a setului quaternar. Setul de date nu prezintă erori NaN, are o dispersie diferită a datelor particularizată pe fiecare coloană atât în spectrul valorilor pozitive cât și a celor negative (spre ex: parametrul MPU69W concentrează valori între -0,41÷0,41 deși min și max sunt -1.98 și 1.99; parametrul MPU69ACC_X, concentrează valori între -1888÷1934 deși min este -32726, respectiv valorile max este 32066). Pentru o analizare mai amănunțită și situarea într-o plajă comună de dispersare am realizat o transformare a valorilor cu ajutorul sklearn.preprocessing, funcția MaxAbsScaler după cum urmează:

Am vizualizat dispersia datelor transformate folosind grafica boxplot():

Fig.0 Reprezentarea datelor transformate prin grafica BoxPlot

În fig.0 se observă foarte bine statutul valorior din setul cuaternar ce diferă semnificativ (outliers) față de cele prevalente (inliers) situate în spațiul quartilelor de 25% și 75%, valori aflate în afara laturile superioare (maxim) și inferioare (mimim) cu limitele celor 2 segmente de dreaptă.

Valorile cu reprezentare izolată pot fi considerate valori ce au influențat autonomia de viață a respectivului senzor, valori ce pot trece foarte ușor de la categorizarea outliers la cea a valorilor anormale-anomalii.

Spre deosebire de setul quaternar, valorile accelerațiilor pe cele trei axe prezintă o dispersie diferită a datelor având lungimi diferite ale quartilelor și cu o lungime evidentă de verticală a valorilor outliers. Având în vedere aceste aspecte, aprecierea în procente și separarea valorilor normale de cele anormale devine destul de grea și necesită vizualizări suplimentare, aprecieri cu interpretare și descriminare subiectiv personală.

Aceleași date reprezentate prin funcția hist()

Fig1. Reprezentarea datelor transformate prin graficul histogram

Figura 1 reprezintă datele particularizate în diferite culori cu lungimea coloanelor/barelor strict dependente de frecvența de apariție a valorilor într-o lățime bine definită. Prin aceasta se pot observa parametrii cu valori mai mici de frecvență, valori ce pot face obiectul interpretării de la statutul de outlier la cea a posibilelor anomalii.

10.2. Calcularea și aprecierea manuală în procente a anomaliilor raportate la setul de date

Estimarea anomaliilor prin histogram poate fi redusă la identificarea parametrilor situați în diferite coșuri (bins) cu frecvențe mai mici de apariție a datelor (bare cu lungimi mai mici), identificarea acestora prin poziționare index și atribuirea clasificării acestora ca anomalii.

Vizualizarea boxplot poate constitui de asemenea o unealtă de identificare a anomaliilor prin stabilirea unor limite de dispersare a datelor, identificarea indexului acestora și atribuirea clasificării în domeniul apartenenței unui grup sau altul, alternativă pe care am utilizat-o pentru estimarea anomaliilor în setul de date quaternar.

Estimarea anomaliilor în setul quaternar de date W, X, Y și Z:

Am apreciat pragurile de referință funcție de valorile maxime și minime atinse de segmentele de dreaptă din setul quaternar (fig.0 boxplot) după cum urmează:

prag valori pozitive = max (0.812, 0.814, 0.875, 0.781) == > prag valori pozitive = 0.875

prag valori negative = – prag valori pozitive = – 0.875

Estimarea anomaliilor în grupul accelerațiilor ACC_X, ACCY și ACCZ:

Am stabilit pragurile de referință prin vizualizarea histogram funcție de tendința izolării valorilor (tendința de izolare crescută ==> probabilitate crescută de etichetare în sfera anomaliilor) (Fig1.) după cum urmează:

prag valori pozitive = 0.75

prag valori negative = – prag valori pozitive = – 0.75

9.2.1. Calculul anomaliilor în setul quaternar:

Concatenarea valorilor în sfera valorilor pozitive și sfera valorilor negative:

10.2.2. Calculul anomaliilor în setul accelerațiilor:

Concatenarea valorilor în sfera valorilor pozitive respectiv sfera valorilor negative:

10.2.3. Estimarea anomaliilor în procente:

Pentru excluderea luării în calcul a duplicatelor aflate pe același index am realizat concatenarea și eliminarea valorilor identice din sfera pozitivă, respectiv cea negativă astfel:

anomalii set quaternar (axă pozitivă) + anomalii set accelerații (axă pozitivă)

anomalii set quaternar (axă negativă) + anomalii set accelerații (axă negativă)

excluderea valorilor de index duplicate pe cele două axe

Am calculat procentul anomaliilor:

Anomalii: 3034; (1)

Procent anomalii: 1.3131356849166846 %. (2)

10.3. Detecția anomaliilor cu ajutorul AUTOENCODER

Am utilizat librăriile:

10.3.1. Impărțirea setului de date

Am configurat cu ajutorul librăriei panda setul considerat bun, fără anomalii, pentru antrenarea modelului autoencoder, de asemenea setul de date destinat pentru interpretare, identificare a valorilor de eroare.

Setul pentru testare (contaminat cu erori/anomalii) :

Structura setului de date pentru testare: (231050, 7);

Setul destinat pentru antrenarea modelului autoencoder:

Structura setului de date pentru antrenare: (19019, 7);

Descrierea/caracteristicile setului pentru antrenare:

Tab.2. Descrierea setului de date pentru antrenarea modelului autoencoder

10.3.2. Preprocesarea datelor

Variația setului de antrenare:

date.var()

MPU69W 2.635312e-01

MPU69X 2.372092e-01

MPU69Y 2.352433e-01

MPU69Z 2.604842e-01

MPU69ACC_X 5.574420e+07

MPU69ACCY 5.478207e+07

MPU69ACCZ 7.179896e+07

dtype: float64

Setul de antrenat prezintă o variație apropiată a setului cuaternar, setul accelerațiilor prezintă o diferență mică a plajei valorilor.

Modelele construite pentru predicție/ clasificare presupun ca datele de intrare a fi preprocesate, normalizate într-o plajă apropiată de concentrare a valorilor. Aceasta presupune aducerea lor într-un interval definit ce favorizează și influențează în mod progresiv pozitiv procesul de adjustare al parametrilor în procesl de învățare al rețelei neuronale.

Descrierea setului în grafica boxplot și histogram a datelor destinate pentru antrenare fără normalizarea/ standardizare este următoarea:

Fig3. Descrierea boxplot a setului pentru antrenare- model autoencoder.

Fig4. Descrierea histogram a setului pentru antrenare- model autoencoder

Standardizarea datelor

Pentru scalarea datelor într-un singur interval de referință am utilizat funcția MaxAbsScaler al librăriei sklearn ce realizează o transformare a parametrilor astfel încât valori maxime atinse vor fi cel mult 1.

Descrierea datelor transformate în grafica boxplot și histogram este următoarea:

Fig5. Descrierea boxplot a datelor transformate- model autoencoder

Fig6. Descrierea boxplot a datelor transformate- model autoencoder

Variația parametrilor din setul de date după transformare:

transformed.var()

MPU69W 0.070021

MPU69X 0.237209

MPU69Y 0.187535

MPU69Z 0.081297

MPU69ACC_X 0.076269

MPU69ACCY 0.058486

MPU69ACCZ 0.068527

dtype: float64

10.3.3. Crearea modelului autoencoder în KERAS

Am împărțit datele transformate în două seturi cu ajutorul funcției train_test_split: am considerat un necesar de 40% pentru antrenare iar diferența de 60% pentru testarea modelului.

Am predefinit dimensiunea vectorului de intrare în rețeaua neuronală – 7 variabile și funcția de activare relu a neuronului artificial:

Am construit o rețea neuronală ce realizează codarea vectorilor de intrare cu 90 neuroni, un strat de 30 neuroni ce realizează compresia, reducerea dimensionalității vectorului de intrare, un strat de 90 neuroni ce realizează decodarea. Am folosit funcția de activare relu corespunzătoare abordării cazurilor de neliniaritate.

În scopul antrenării rețelei și interpretării grafice a acestui proces am configurat modelul utilizând funcția cost mse, optimizatorul adam și evaluatorul de performanță accuracy.

Pentru inițierea procesului de antrenare am folosit funcția fit ce dă posibilitatea antrenării rețelei pentru un anumit număr de epoci și particularizează numărul de elemente utilizate pentru o iterație: batch_size.

Secvență a procesului de antrenare:

Train on 19019 samples, validate on 11412 samples

Epoch 1/20

19019/19019 [==============================] – 7s 374us/step – loss: 0.0058 – accuracy: 0.9053 – val_loss: 3.2097e-04 – val_accuracy: 0.9613

Epoch 2/20

19019/19019 [==============================] – 6s 339us/step – loss: 2.1853e-04 – accuracy: 0.9696 – val_loss: 1.5034e-04 – val_accuracy: 0.9725

Epoch 3/20

19019/19019 [==============================] – 6s 335us/step – loss: 7.7035e-05 – accuracy: 0.9798 – val_loss: 4.2669e-05 – val_accuracy: 0.9856

Epoch 4/20

19019/19019 [==============================] – 6s 329us/step – loss: 2.7200e-05 – accuracy: 0.9884 – val_loss: 4.5

Am implementat un proces progresiv și repetitiv de optimizare, vizualizare până la atingerea valorilor țintă ale acurateței modelului, o valoare mică a variației și bias-ului, minimizarea pierderilor și creșterea acurateței modelului.

Am salvat parametrii weights după fiecare ciclu al procesului de optimizare și i-am încărcat la inceputul următorului proces de antrenare:

Am început antrenarea cu un anumit număr de epocă, am accesat parametrii metrics după fiecare cilclu am continuat antrenarea prin creșterea epocilor până la atingerea valorile optime ale parametrilor de referință train/test loss respectiv train/ test accuracy:

În figurile de mai jos se observă grafic rezultatele finale ale antrenării atât în sfera pierderilor cât și cea a acurateței modelului.

La creșterea numărului de epocă pierderile se reduc substanțial și ating o valoare aproape de zero iar cele ale preciziei au o creștere semnificativă de la valoarea zero pînă aproape de 99%.

Secvență a procesului de antrenare:

Epoch 20/20

19019/19019 [==============================] – 6s 328us/step – loss: 1.4280e-05 – accuracy: 0.9908 – val_loss: 7.4687e-06 – val_accuracy: 0.9944

Fig7. Grafic pierderi la optimizarea modelului autoencoder

Fig8. Grafic acuratețe predicție la optimizarea modelului autoencoder

Descrierea și structura modelului creat:

Model: "sequential_20"

_________________________________________________________________

Layer (type) Output Shape Param #

=================================================================

dense_83 (Dense) (None, 90) 720

_________________________________________________________________

dense_84 (Dense) (None, 30) 2730

_________________________________________________________________

dense_85 (Dense) (None, 90) 2790

_________________________________________________________________

dense_86 (Dense) (None, 7) 637

=================================================================

Total params: 6,877

Trainable params: 6,877

Non-trainable params: 0

_________________________________________________________________

accuracy: 98.96%

10.3.4. Vizualizarea valorilor reale și a celor de predicție a modelului creat

Am instanțiat valorile de predicție

Am creat în structura panda două coloane, prima coloană corespunzătoare valorilor de predicție iar a doua corespunzătoare a valorilor reale. Am realizat aceeași structură tabelară pentru fiecare parametru din setul de date și am vizualizat gradul de acoperire/ coincidență a valorilor

de predicție și a celor reale cu autorul librăriei matplotlib.

Fig9. Grafic raport valori predicție/valori reale a parametrului W.

Pentru parametrul X din setul cuaternar:

Fig10. Grafic raport valori predicție/valori reale a parametrului X.

Pentru parametrul Y din setul cuaternar:

Fig11. Grafic raport valori predicție/valori reale a parametrului Y.

Pentru parametrul Z din setul cuaternar:

Fig12. Grafic raport valori predicție/valori reale a parametrului Z.

Pentru parametrii X, Y, Z din setul accelerațiilor:

Fig13. Grafic raport valori predicție/valori reale a parametrului Acc_X.

Fig14. Grafic raport valori predicție/valori reale a parametrului Acc_Y.

Fig15. Grafic raport valori predicție/valori reale a parametrului Acc_Z.

10.3.5. Stabilirea pragurilor în setul de antrenare pentru etichetarea erorilor

Această etapă este foarte semnificativă/ importantă pentru că în funcție de aceasta se vor eticheta valorile cu abatere sau cele care nu corespund limitelor/ criterilor stabilite pentru încadrarea lor ca fiind în plaja valorilor acceptate ca fiind normale. Pragurile trebuie să îndeplinească criteriile de exceptare/ depășire a valorilor de zgomot și să realizeze o separare evidentă a valorilor normale de cele anormale.

În această fază am calculat valorile maxime de eroare MAE acceptate, corespunzătoare modelului creat și am identificat limitele/pragurile pentru întrebuințarea modelului autoencoder ca rutină pentru identificarea anomaliilor.

Pentru vizualizare am folosit librăria seaborn distplot ce îmbină reprezentarea histogram cu densitatea kernel.

Stabilirea pragului de separare raportat la întreaga matrice

Am importat și instanțiat modelul autoencoder și scaler-ul creat:

Cu ajutorul scaleru-lui am transformat valorile de intrare, am realizat predicția lor și am transpus în structura panda dataFrame valorile manipulate:

Am calculat abaterile/erorile în sfera valorilor pozitive față de axa mean:

Vizualizarea repartiției abaterilor cu ajutorul librăriei seaborn:

Fig16. Repartiție abateri în grafica seaborn – întreaga matrice .

Fig17. Scalarea abaterilor în grafica seaborn – întreaga matrice.

Valoare prag aleasă: 0.0158; (3)

Verificarea pragului se realizează prin însumarea valorilor ce depășesc pragul ales, aceasta nu trebuie să depășească valoarea “0”.

Stabilirea pragurilor de separare raportate la fiecare parametru

Repartiția abaterilor pentru parametrul din setul cuaternar W:

Fig18. Vizualizare abateri în grafica seaborn pentru parametrul W.

Valoare prag aleasă: 0.0256; (4)

Verificarea pragului ales:

Repartiția abaterilor pentru parametrul din setul cuaternar X:

Fig19. Vizualizare abateri în grafica seaborn pentru parametrul X.

Valoare prag aleasă: 0.019; (5)

Verificarea pragului ales:

Repartiția abaterilor pentru parametrul din setul cuaternar Y:

Fig20. Vizualizare abateri în grafica seaborn pentru parametrul Y.

Valoare prag aleasă: = 0.025; (6)

Verificarea pragului ales:

Repartiția abaterilor pentru parametrul din setul cuaternar Z:

Fig21. Vizualizare abateri în grafica seaborn pentru parametrul Z.

Valoare prag aleasă: = 0.042; (7)

Verificarea pragului ales:

Repartiția abaterilor pentru parametrii din setul accelerațiilor:

Fig22. Vizualizare abateri în grafica seaborn pentru parametrul Acc_X.

Valoare prag aleasă = 0.0191; (8)

Verificarea pragului ales:

Repartiția abaterilor pentru parametrul din setul accelerațiilor AccY:

Fig23. Vizualizare abateri în grafica seaborn pentru parametrul Acc_Y .

Valoare prag aleasă: = 0.0209; (9)

Verificarea pragului ales:

Repartiția abaterilor pentru parametrul din setul accelerațiilor AccZ:

Fig24. Vizualizare abateri în grafica seaborn pentru parametrul Acc_Y .

Valoare prag aleasă = 0.0158; (10)

Verificarea pragului ales:

10.3.6. Identificarea anomaliilor

Am instanțiat, scalat și structurat în frame-ul de date panda setul destinat supus analizei modelului autoencoder creat:

Am realizat predicția datelor cu ajutorul modelului creat:

Secvență a datelor de predicție:

Tab.2. Secvență a datelor de predicție – model autoencoder

a. Identificare anomaliilor raportate la întreaga matrice

Pentru identificarea/ etichetarea anomaliilor în setul analizat am calculat erorile de predicție prin efectuarea diferenței valorilor de ieșire cu cele corespunzătoare de intrare, abaterea lor de la axa mean utlizând funcția MAE, încadarea lor în pragurile/ limitele stabilite în expresia nr. 3.

Am creat un tabel în format DataFrame:

Am calculat valorile de eroare a modelului folosind coeficientul MAE, am creat o mască a valorilor care îndeplinesc condiția de prag și am etichetat valorile ca fiind anomalii cu ,,1” iar cele normale cu ,,0’’:

Numărul total al valorilor etichetate ca anomalii:

Anomalii: 197; (11)

Graficul separării valorile normale de cele anormale funcție de valoare prag MAE este următorul:

Fig25. Separarea anomaliilor funcție de valoarea prag.

b. Identificare anomaliilor raportate la fiecare parametru

Am urmat aceeași pași ai punctului anterior dar individualizat și particularizat pentru fiecare parametru și prag asociat.

1. Identificarea anomaliilor în setul cuaternar:

Parametrul W:

Anomalii parametrul W: 149; (12)

Parametrul X:

Anomalii parametrul X: 186; (13)

Parametrul Y:

Anomalii parametrul Y: 92; (14)

Parametrul Z:

Anomalii parametrul Z: 85; (15)

2. Identificarea anomaliilor în setul accelerațiilor:

Parametrul ACC_X:

Anomalii parametrul ACC_X: 123; (16)

Parametrul ACC_Y:

Anomalii parametrul ACC_Y: 116; (17)

Parametrul ACC_Z:

Anomalii parametrul ACC_Z: 162; (18)

c. Crearea setului de date final și asocierea etichetelor

Am creat două librării, una asociată valorilor setului de antrenare iar cealaltă asociată setului valorilor de testare, am transformat în obiecte cele două librării și am realizat concatenarea lor cu valorile corespunzătoare de asociere, rezultând setul de asociere a valorilor de antrenare și setul de asociere a valorilor de testare.

Pentru abordarea și etichetarea valorilor de antrenare am parcurs aceeași pași prevăzuți la puntul anterior 10.6.2, valorile setului de antrenare identificându-se prin dublarea cifrelor folosite la inițierea variabilelor, obiectelor setului de testare.

În consecință, am creat librăria setului de antrenare cu valori rezultate din asocierea anomaliilor pentru fiecare parametru/ coloană, am creat o structură DataFrame, am asociat indexul corepunzător pentru operațiunea de concatenare:

Am realizat concatenarea pe axa 1 a valorilor de antrenare cu cea a valorilor de etichetare a anomaliilor:

Secvență a valorilor rezultate:

Tab.3. Etichetarea setului de antrenare

Am urmat aceeași pași pentru setul de testare și am realizat concatenarea coloanelor:

Forma finală a setului de date a rezultat din concatenarea celor două seturi intermediare – date_train și date_dist:

Tab.5. Forma finală a setului de date rezultat

d. Estimarea în procente și vizualizarea separării anomaliilor

Am calculat valoarea totală a anomaliilor prin însumarea matematică a valorile expresiilor

12 + 13 + 14 + 15 + 16 + 17 + 18 și anume o valoare totală de 913 anomalii, calcul ce poate fi realizat și cu ajutorul unor condiții booleene aplicate setului final de date exportat:

Pentru excluderea cazurilor de duplicare pe axa rândurilor (0) am redus numărul anomaliilor la o singură coloană anomaly, am apreciat un grad de severitate al anomaliilor (de la 1÷7) funcție de numărul aparițiilor pe axa ,,0 ” folosind următoarele condiții:

Reducerea etichetei la o singură coloană:

Tab.6. Reducerea la o singură etichetă a anomaliilor

Asocierea unui grad de severitate a anomaliilor:

Tab.7. Aprecierea gradului de severitate a anomaliilor

După reducerea duplicatelor pe axa rândurilor („0”) numărul anomalilor s-a redus la 249, ceea ce reprezintă un procent de 0.1 % (19) raportat la întreg setul de date.

Fig26. Detecție anomalie pe caracteristica accelerațiilor axa Z

Fig27. Predicție anomalii vizualizare scatterplot

Gradul de acoperire al anomaliilor realizat cu ajutorul PCA, vizualizare 2D:

Fig28. Predicție anomalii, vizualizare 2D cu ajutorul PCA

Cap. 11. Detecția anomaliilor cu ajutorul ISOLATION FOREST

Am importat librăriile:

Am instanțiat serverul h2o:

Am instanțiat și importat fișierul de analizat în serverul H2O:

Parse progress: |█████████████████████████████████████████████████████████| 100%

11.1. Crearea modelului ISOLATION FOREST

Am construit modelul h2o atribuind un număr de 200 arbori, am antrenat modelul cu fișierul subiect pentru analiză – CSV:

isolationforest Model Build progress: |███████████████████████████████████| 100%

11.2. Vizualizarea valorilor de predicție a modelului creat

Am folosit funcția predict pentru vizualizarea scoring-ului și lungimii medie a arborelui necesari pentru asocierea anomaliilor:

isolationforest prediction progress: |████████████████████████████████████| 100%

Secvență a valorilor de ieșire la predicția modelului h2o:

Tab8. Valori predicție model h2o.

Coloana „predict” reprezintă scoringul în gama 0÷1 și rezumă în probabilitatea valorii respective să fie asociată anomaliilor iar „mean_length” este lungimea medie a arborelui pentru izolarea respectivei observații.

Coloana „predict” și „mean_length” se află într-o strânsă inversă corelație:

Tab9. Corelația valorilor de ieșire model h2o.

11.3. Stabilirea pragului pentru etichetarea anomaliilor

Pentru etichetarea valorilor din setul de date ca fiind anomalii am recurs la o vizualizare de frecvență a lungimii de arbore „mean_length” cu autorul graficii histogram:

Fig31. Frecvența „mean_length” a predicției h2o.

Modelele structurate cu isolation forest presupun cunoașterea anterioară în procente a gradului de contaminare a setului de date, valoare pe care am apreciat-o la nivelul de referință a expresiei nr. (2) adică o valoare de referință: 1,31 %. (20)

Astfel, am ales o valoare de prag pentru etichetarea valorilor, o valoare ce îndeplinește cu aproximație condiția mai sus menționată, o lungime corespunzătoare a arborelui de pănă la 6.175 ce generează un grad de contaminare de 1.33 %.

11.4. Crearea setului de date final și asocierea etichetelor

Am creat un tabel în format panda df la care am anexat coloanele de predicție a modelului realizat pred2 efectuând etichetarea lor funcție de condiția de prag:

Tab10. Valoarea anomaliilor

Am alipit de asemenea pragul de referință și lungimea corespunzătoare a arborilor:

Tab11. Forma finală a setului de date – model h2o.

11.5. Vizualizarea separării anomaliilor

Fig32. Separarea anomaliilor funcție de valoarea „mean_length”.

Fig33. Distribuția anomaliilor în valorile parametrului ACCY.

Fig34. Detecția anomaliilor în valorile parametrului ACCZ

Distribuția anomaliilor în graficul 2D, realizat prin reducerea la două componente principale a setului multivariat utililizând PCA:

Fig35. Predicția anomaliilor în grafica 2D utilizând PCA

Fig35. Predicția anomaliilor în grafica 3D utilizând PCA

Cap. 12. Detecția anomaliilor senzorului de vibrații VS40

Senzorul de vibrații generează un singur parametru de ieșire,valoare strict dependentă de durata semnalului puls la îndeplinirea condiției de dezechilibru intern (mișcare/vibrații) monitorizată prin schema de principiu internă.

Interpretarea ieșirilor acestui tip de senzor este redusă la analiza univariată a datelor iar identificarea anomaliilor poate fi realizată printr-o simplă izolare de clustering sau un simplu calcul statistic de deviere de la o axă definită precum este coeficientul statistic Z ce măsoară numărul de deviații standard față de o axă de referință mean.

12.1. Inspectarea și vizualizarea setului de date

Am utilizat librăriile:

Am citit fișierul în format csv:

Descrierea parametrului vibrații:

count 231050.000000

mean 832.629855

std 3449.131462

min 0.000000

25% 0.000000

50% 0.000000

75% 189.000000

max 66678.000000

Name: VIBRATII, dtype: float64

Am instanțiat într-un fișier panda DataFrame datele de ieșire a senzorului vibrații:

Vizualizarea valorilor în grafica histogram:

Fig36. Vizualizarea histogram a datelor vibrații

Vizualizarea valorilor în grafica boxplot:

Fig37. Vizualizarea boxplot a datelor vibrații.

Se observă în grafica histogram o concentrare a valorilor în intervalul 0÷7000 iar boxplot-ul semnalizează prezența unui procent foarte mare de valori outliers. Pentru o vizualizare mai concludentă am recurs la o grafică scatterplot:

12.2. Preprocesarea datelor

În scopul favorizării, ușurării procesului de vizualizare a datelor și pentru a estima un algoritm optim de detecție și etichetare a anomaliilor am realizat o transformare a datelor cu ajutorul StandardScaler:

Vizulizarea datelor după transformare este următoarea:

Fig39. Vizualizarea scatterplot după transformarea datelor.

12.3. Estimarea în procente a anomaliilor raportate la setul de date

Așa cum reiese din fig. 39 distribuția datelor este liniară iar impărțirea datelor în valori normale și anomalii poate fi redusă doar la folosirea unei funcții statistice. Motiv pentru care am evidențiat modalitatea utilizată de despărțire a datelor – dreapta liniară de culoare roșie. În ceea ce privește procentul anomaliilor raportat la setul de date, valoarea asumată și aproximată este o cifră de până la 1%, o valoare aleasă în baza mai multor vizualizări repetitive, mijloace empirice de despărțire a datelor.

12.4. Identificare anomaliilor

Am definit coeficientul statistic Z, am stabilit un prag de separare a valorilor:

Am utilizat funcția definită mai sus cu folosirea datelor transformate ca argument de intrare:

Valoarea în procent a anomaliilor:

1.04751164411193

Am creat o listă de index a valorilor asociate ca anomalii, valori care depășesc pragul definit pentru separare:

[517, 671, 698, 701, 722, 756, 758, 949, 1193, 1282, 1287, 1350, 1390, 1397, 1470, 1483, 1508, 1571, 1572, 1631, 1636, 1662, 1668, 1672, 1696, 1708, 1713, 1770, 1807, 1913, 1918, 1938, 2041, 2048, 2061, 2134, 2253, 2254, 2256, 2270, 2294, 2331, 2335, 2339, 2343, 2349, 2356, 2357, 2359, 2431, 2532, 2549, 2551, 2716, 2717, 2762, 2782, 2824, 2841, 2898, 3067, 3139, 3269, 3276….]

12.5. Crearea setului de date final și asocierea etichetelor

Am creat o coloană și am inițiat o valoare „0” pentru semnalizarea anomaliilor:

Am asociat valoarea „1” pentru fiecare poziție index aflată în lista b cu ajutorul funcției for:

Secvență a setului de date final:

10.6. Vizualizarea separării anomaliilor

Fig40. Separare anomalii – senzor vibrații.

Cap. 13. Gravitatea erorilor

Pentru aprecierea gradului și nivelului de influență a evenimentelor care au diminuat și consumat autonomia de viață a senzorilor folosiți am construit algoritmi particularizați pentru interpretare și cuantificare, ținând cont de densitatea, frecvența și poziționarea lor pe scara gravității.

13.1. Senzorul giroscop MPU6050

Deși autoencoderul este un algoritm bun de luat în seamă pentru detecția anomaliilor, am decis totuși în acest capitol utilizarea pentru interpretare a setului de date final reieșit în urma etichetării anomaliilor cu ajutorul estimatorului isolation forest H2O.

13.1.1. Importarea și inspectarea datelor

Am utilizat librăriile:

Am importat și vizualizat setul de date:

Am creat un obiect DataFrame cu valorile etichetate anomalii:

Tab13. Secvență a valorilor etichetate ca anomalii.

13.1.2. Asocierea ponderilor de eroare

Am particularizat și individualizat mărimea ponderilor de eroare funcție de valoarea lungimii arborelui mean_length. Astfel am creat un histogram cu 15 coșuri bins:

Fig41. Direcție gravitate anomalii – senzor MPU6050

Intervalele bins revenite:

[3.75 3.91133333 4.07266667 4.234 4.39533333 4.55666667

4.718 4.87933333 5.04066667 5.202 5.36333333 5.52466667

5.686 5.84733333 6.00866667 6.17 ]

Lățimea coșurilor: 0.1613

Am calculat valoarea ponderilor asociată fiecărui coș în parte:

unde:

i reprezintă un număr de ordine asociat gravității anomaliei de la 1÷15;

ser reprezintă elementele aparținute lui n (15 poziții ce reflectă numarul elementelor aflate în fiecare coș);

a reprezintă procentul lui ser din totalitatea anomaliilor (n.sum);

b reprezintă ponderea rezultată din înmulțirea lui a cu gravitatea erorii i, valoare împărțită la numărul total de anomalii corespunzător respectivului coș ser;

c reduce numărul decimalelor la 3.

Valorile de instanță a variabilelor i, ser ,a, pentru calculul final al ponderilor c sunt următoarele:

Tab14. Asociere ponderi anomalii – senzor MPU6050.

13.1.3. Crearea setului de date

Am creat o coloană ce reflectă gravitatea anomaliilor cu valori între 0÷15, și o coloană pentru asocierea/ inserarea ponderilor calculați anterior utilizând funcția pd.cut:

Am anexat și valoarea maximă însumată a ponderilor pe care respectivul senzor o poate suporta:

1729.0

Secvență a setului de date după adăugarea ponderilor:

Tab15. Secvență a setului de date după adăugarea ponderilor-MPU6050.

13.2. Senzorul VS40

13.2.1. Importarea și inspectarea datelor

Am manipulat datele cu aceleași librării menționate în secțiunea anterioară, am importat și vizualizat setul de date:

Am creat un obiect DataFrame cu valorile etichetate anomalii:

Descrierea setului de date este următoarea:

Tab16. Descrierea setului de date anomalii – senzor VS40.

13.2.2. Asocierea ponderilor de eroare

Am particularizat și individualizat mărimea ponderilor de eroare funcție de repartiția anomaliilor în structura histogram creeată. Astfel am creat un histogram cu 50 coșuri bins:

Fig42. Direcție gravitate anomalii – senzor vibrații VS40.

Intervalele bins revenite:

[16288. 17292.98 18297.96 19302.94 20307.92 21312.9 22317.88 23322.86

24327.84 25332.82 26337.8 27342.78 28347.76 29352.74 30357.72 31362.7

32367.68 33372.66 34377.64 35382.62 36387.6 37392.58 38397.56 39402.54

40407.52 41412.5 42417.48 43422.46 44427.44 45432.42 46437.4 47442.38

48447.36 49452.34 50457.32 51462.3 52467.28 53472.26 54477.24 55482.22

56487.2 57492.18 58497.16 59502.14 60507.12 61512.1 62517.08 63522.06

64527.04 65532.02 66537. ]

Lățimea coșurilor: 1004,98

Am calculat valoarea ponderilor asociată fiecărui coș în parte:

Am păstrat o logică asemănătoare de asociere a ponderilor, aceeași semnificație a variabilelor ca și în cazul senzorului MPU6050, inversând doar sensul gravității anomaliilor.

Valorile de instanță a variabilelor i, ser ,a, pentru calculul final al ponderilor c sunt următoarele:

Tab17. Asociere ponderi anomalii – senzor VS40.

i reprezintă un număr de ordine asociat gravității anomaliei de la 1÷50;

ser reprezintă elementele aparținute lui n (50 poziții ce reflectă numarul elementelor aflate în fiecare coș);

a reprezintă procentul lui ser din totalitatea anomaliilor (n.sum);

b reprezintă ponderea rezultată din înmulțirea lui a cu gravitatea erorii i, valoare împărțită la numărul total de anomalii corespunzător respectivului coș ser;

c reduce numărul decimalelor la 3.

13.2.3. Crearea setului de date

Am creat o coloană ce asociază gravitatea anomaliilor cu valori între 0÷50, și o coloană pentru asocierea/ inserarea ponderilor calculați anterior utilizând funcția pd.cut:

Am anexat și valoarea maximă însumată a ponderilor pe care respectivul senzor o poate suporta:

Eroare însumată: 11663.235

Secvență a setului de date după adăugarea ponderilor:

Tab18. Secvență a setului de date după adăugarea ponderilor-VS40.

Cap. 14. Crearea modelelor pentru mentenanță predictivă a senzorilor utilizați

14.1. Senzorul MPU6050

14.1.1. Preprocesarea – transformarea datelor

Am utilizat librăriile:

Am importat fișierul, am instanțiat, definit datele de intrare și cele de ieșire pentru construirea modelului, am transformat datele de intrare (predictors) cu ajutorul StandardScaler:

Vizualizarea datelor de intrare transformate în grafica boxplot și histogram:

Fig43. Vizualizarea datelor de intrare transformate în grafica boxplot – model MPU6050

Fig44. Vizualizarea datelor de intrare transformate în grafica histogram – model MPU6050

Variația datelor:

MPU69W 1.000004

MPU69X 1.000004

MPU69Y 1.000004

MPU69Z 1.000004

MPU69ACC_X 1.000004

MPU69ACCY 1.000004

MPU69ACCZ 1.000004

dtype: float64

14.1.2. Impărțirea datelor pentru antrenare-evaluare

Am împărțit datele de intrare (transformed) și cele de ieșire (target) în două seturi – unul de antrenare și unul de testare cu ajutorul librăriei sklearn:

14.1.3. Creare model in keras

Am definit vectorul de intrare:

Am construit și compilat modelul:

14.1.4. Optimizare, antrenare, evaluare

Am adjustat parametrii (funcții activare, dimensiunea batchsize,procentul de antrenare train size, viteza de învățare learning rate) cu ajutorul unor funcții iterative de verificare a performanței modelului.

Am antrenat modelul începând cu 10 epoci și am continuat antrenarea în succesiune cu un număr de epocă variabil salvând și încărcând în mod repetat în model valorile weights până la obținerea valorilor optime ale raportului pierderi – acuratețe, evitarea fenomenului de supraînvățare (overfitting) sau deficiențe ale învățării (underfitting).

Secvență a procesului de antrenare:

Epoch 8/10

184840/184840 [==============================] – 52s 282us/step – loss: 0.0050 – accuracy: 0.9865 – val_loss: 0.0040 – val_accuracy: 0.9868

Epoch 9/10

184840/184840 [==============================] – 58s 314us/step – loss: 0.0046 – accuracy: 0.9865 – val_loss: 0.0039 – val_accuracy: 0.9871

Epoch 10/10

184840/184840 [==============================] – 37s 198us/step – loss: 0.0043 – accuracy: 0.9865 – val_loss: 0.0041 – val_accuracy: 0.9868

Performanța modelului:

46210/46210 [==============================] – 8s 174us/step

The accuracy of this model is: 0.9868210554122925

Fig45. Vizualizarea pierderilor modelului în secvența finală de antrenare – model MPU6050

Fig46. Vizualizarea performanței modelului în secvența finală de antrenare – model MPU6050

14.2. Senzorul VS40

14.1.1. Preprocesarea – transformarea datelor

Am utilizat aceleași librării de manipulare a datelor ca și în secțiunea anterioară, am importat în format panda df setul de date:

Am instanțiat, definit datele de intrare și cele de ieșire pentru construirea modelului, am transformat datele de intrare (predictors) cu ajutorul PowerTransformer:

Vizualizarea datelor de intrare transformate în grafica boxplot și histogram:

Fig47. Vizualizarea datelor de intrare transformate în grafica boxplot – model VS40

Fig48. Vizualizarea datelor de intrare transformate în grafica histogram – model VS40

14.1.2. Impărțirea datelor pentru antrenare-evaluare

Am împărțit datele de intrare (transformed) și cele de ieșire (target) în două seturi – unul de antrenare și unul de testare cu ajutorul librăriei sklearn:

14.1.3. Creare model in keras

Am definit vectorul de intrare:

Am construit și compilat modelul:

14.1.4. Antrenare, optimizare, evaluare

Am adjustat parametrii (funcții activare, dimensiunea batchsize,procentul de antrenare train size, viteza de învățare learning rate) cu ajutorul unor funcții iterative de verificare a performanței modelului.

Am antrenat modelul începând cu 10 epoci și am continuat antrenarea în succesiune salvând și încărcând în mod repetat valorile weights în model până la obținerea valorilor optime ale raportului pierderi – performanță, evitarea fenomenului de supraînvățare (overfitting) sau deficiențe ale învățării (underfitting).

Secvență a procesului de antrenare:

Epoch 8/10

184840/184840 [==============================] – 52s 282us/step – loss: 0.0050 – accuracy: 0.9865 – val_loss: 0.0040 – val_accuracy: 0.9868

Epoch 9/10

184840/184840 [==============================] – 58s 314us/step – loss: 0.0046 – accuracy: 0.9865 – val_loss: 0.0039 – val_accuracy: 0.9871

Epoch 10/10

184840/184840 [==============================] – 37s 198us/step – loss: 0.0043 – accuracy: 0.9865 – val_loss: 0.0041 – val_accuracy: 0.9868

Performanța modelului:

Train: 0.990, Test: 0.990

Fig49. Vizualizarea performanței modelului în secvența finală de antrenare – model VS40

Fig50. Vizualizarea pierderilor modelului în secvența finală de antrenare – model MPU6050

Fig50. Vizualizarea predicție – model Vs40

Verificarea modelului cu k-fold:

Rezultate: [ test loss, test accuracy ]

Model evaluation [0.8217937822032803, 0.9825570583343506]

Model evaluation [0.4870502952942847, 0.9886079430580139]

Model evaluation [0.3958512173698005, 0.9917253255844116]

Model evaluation [0.4888181254709114, 0.9903500080108643]

Model evaluation [0.3323004440441448, 0.9944071173667908]

[ test loss, test accuracy ]

Deaoarece setul de date este influențat de un număr mare al valorilor outliers pentru transformarea datelor

Particularități senzori utilizați

5.1.1.2. Descrierea principalilor regiștrii interni și posibilitățile de setare ale acestora

Pachetul de date vizat prin bus-ul serial de comunicare I2C însumează și întregește un număr de parametrii cu caracteristici de ieșire diferiți funcție de natura construcției a fecărui senzor. Giroscoapele MPU6050 au caracteristici superioare de clock intern față de ceilalți senzori utilizați care spre deosebire de acesta au timp de răspuns mult mai lung. Datele de ieșire ale regiștrilor, memoria buffer FIFO și secvența DMP (digital motion processor) sunt bazate pe valoarea Sample Rate structurat pe 8 biți. Pentru sincronizarea datelor de ieșire a fost modificată adresa de regiștrii nr. 25:

Sample Rate = Gyroscope Output Rate / (1 + SMPLRT_DIV)

unde

Gyroscope Output Rate = 8kHz sau 1 KHz, funcție de setările pe 8 biți ale DLPF (digital low pass filtering, DLPF_CFG = 0 sau 7, biți semnificativi DLPF_CFG[2:0] adresa de regiștrii nr. 26).

Valorile giroscopului și accelerometrelor sunt afectate de valoarea biților DLPF_CFG[2:0] după cum urmează:

5.1.1.3.Configurarea Master-Slave, controlul vitezei bus-ului de date serial I2C

Configurarea relației master-slave se realizează prin setările registrului 36:

Valoarea 1 logic pe bitul nr. 7 realizează capabilități de operare pe același bus de date.

Valoarea 1 logic pe bitul nr. 6 asigură sincronizarea actualizării regiștrilor în cazul utilizării unor senzori externi EXT_SENS_DATA și întârzie operațiunea Data Ready interrupt.

Valorile de activare ale SLV_3 _FIFO_EN permite încărcarea valorilor senzorului de extensie în memoria buffer FIFO.

2C_MST_P_NSR realizează managementul și tranziția de citire a datelor corespunzătoare senzorilor de extensie slave.

I2C_MST_CLK[3:0] configurează valoarea vitezei pe bus-ul serial I2C:

5.1.1.4. Scrierea memoriei buffer FIFO

Datele de ieșire ale senzorilor sunt stocate în memoria buffer în funcție de valorile de setare ale registrului cu adresa 35:

Datele provenite de la senzori captați în regiștrii 59 ÷ 96 sunt încărcați în memoria buffer numai dacă îndeplinesc condiția de 1 logic corespunzătoare poziției dedicată în prezentul registru, valorile inserate respectând particularitățile corespunzătoare registrului 25.

Particularitățile biților semnificativi:

STRUCTURA volatilă a datelor FIFO 42-biți

[QUAT W] [ ] [QUAT X] [ ] [QUAT Y] [ ] [QUAT Z] [ ] [GYRO X] [ ]

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

[GYRO Y] [ ] [GYRO Z] [ ] [ACC X ] [ ] [ACC Y ] [ ] [ACC Z ] [ ]

20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

[ ]

40 41

Particularități Arduino UNO

5.1.1. DHT11

-citirea setului de temperatură-umiditate

5.1.1. SW-420

-prelucarea iesirilor prin smnalul puls

6. Prelucrarea datelor- ingineria datelor

– mediul de dezvoltare – python, jupyter notebook

– spații virtuale- anaconda

6.1. Curațarea datelor- eliminarea datelor NaN

– manipularea datelor utilizând libraria Panda

6.2. Normalizarea datelor, Standardizarea datelor

-utilarea librariei scikit learn(),

-vizualizarea gradului de corelație a datelor – libraria seaborn

-vizualizare datelor prin grafica plot, pyplot

7. Rețele neuronale

– generalități

– structură

– tipuri de rețele

8. Implementare în KERAS, TENSOR FLOW BACKEND

9. Detecția anomaliilor

– generalități

9.1. Implementare-

UNSUPERVISED LEARNING

– autoencoder

– estimatorul H20

10. Clasificarea anomaliilor

11. Gravitatea anomaliilor

ParameterDHT11DHT22Temperature measurement range0 to 50 Deg.C-40 to 80 Deg.CTemperature Accuracy+- 1 to 2 Deg.C+- 0.5 Deg.CRelative Humidity Range30% to 90%0% to 100%Relative Humidity Accuracy+- 4% to 5%+-2 to 5%Operating Voltage3.3V to 5V3.3V to 5VResolution8 bits16 bitsSampling period>=1 sec>=2 sec

Cap.4 Tehnologii și unelte software (se prezinta limbajele, tehnologiile și uneltele software

folosite pentru dezvoltarea aplicației (C, Java, MySQL, PHP etc.), cu accent pe componentele/funcțiile

din ele care au fost folosite în aplicatie și pe justificarea alegerii acestora)

4.1. Arduino C

5. CAPTAREA/ PRELUAREA DATELOR, STRUCTURA DATELOR DE IEȘIRE

Tehnologii folosite:

– interfață port serial USB 3

– xampp – baza de date mysql

– mediu de dezvoltare software: arduino C, javascript/ serverul javascript

Pentru realizarea comunicației seriale cu placa de dezvoltare arduino uno am instalat suportul driver pentru windows OS pe 64biți: USB-SERIAL CH341SER.

Pentru stocarea valorilor de ieșire ale senzorilor utilizați am folosit serverul Apache/ XAMPP versiunea: 1.8.3 și baza de date MySQL.

Am creat și structurat baza de date “SENZORI” creând tabelul “DATE SENZORI INTEGRATE” prin următoarea comandă de consolă MySQL:

CREATE DATABASE IF NOT EXISTS `SENZORI`

DEFAULT CHARACTER SET = utf8mb4

DEFAULT COLLATE = utf8mb4_general_ci;

USE `SENZORI`;

CREATE TABLE IF NOT EXISTS `DATE SENZORI INTEGRATE` (

`id` int(11) AUTO_INCREMENT NOT NULL,

PRIMARY KEY (`id`),

`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

//DATE QUATERNARE

//HIGH

`MPU69W` varchar(255) NOT NULL,

`MPU69X` varchar(255) NOT NULL,

`MPU69Y` varchar(255) NOT NULL,

`MPU69Z` varchar(255) NOT NULL,

// LOW

`MPU68W` varchar(255) NOT NULL,

`MPU68X` varchar(255) NOT NULL,

`MPU68Y` varchar(255) NOT NULL,

`MPU68Z` varchar(255) NOT NULL,

// ACCELERATII

//HIGH

`MPU69ACCX` varchar(255) NOT NULL,

`MPU69ACCY` varchar(255) NOT NULL,

`MPU69ACCZ` varchar(255) NOT NULL,

// LOW

`MPU68ACCX` varchar(255) NOT NULL,

`MPU68ACCY` varchar(255) NOT NULL,

`MPU68ACCZ` varchar(255) NOT NULL,

//TEMPERATURA

//HIGH

`MPU69T` varchar(255) NOT NULL,

`MPU69U` varchar(255) NOT NULL,

// LOW

`MPU68T` varchar(255) NOT NULL,

`MPU68U` varchar(255) NOT NULL,

//VIBRATII

`VIBRATII` varchar(255) NOT NULL,

//DIFERENTE DATE QUATERNARE

`CazWW` varchar(255) NOT NULL,

`CazXX` varchar(255) NOT NULL,

`CazYY` varchar(255) NOT NULL,

`CazZZ` varchar(255) NOT NULL,

//DIFERENTE DATE QUATERNARE

`CazACCXX` varchar(255) NOT NULL,

`CazACCYY` varchar(255) NOT NULL,

`CazACCZZ` varchar(255) NOT NULL

) ENGINE = InnoDB

DEFAULT CHARSET = utf8mb4

DEFAULT COLLATE = utf8mb4_general_ci;

Am realizat interfațarea cu placa de dezvoltare arduino uno prin portul serial USB3, am citit fluxul de ieșire a datelor cu ajutorul unui fișier javascript. Respectivul script realizează și inițiază conexiunea cu baza de date prin funcția const con = MySQL.createConnection({ }). Realizează căutarea portului serial de comunicație disponibil USB3 – placa de dezvoltare arduino uno prin const SerialPort = require('serialport') și SerialPort.list, stabilește rata de transfer/sincronizare a datelor prin const baudRate = 38400, gestionează fluxul de date prin callback port.on('data', receiveSerial);

Citește pe linii datele întregului set de valori prin instanțierea următoarei clase:

class TextParser {

constructor() {this.string = ''; }

static isEndMarker(char) { return char == '\r' || char == '\n'; }

parse(char) {

if (this.clear) {

this.string = '';

this.clear = false;}

if (TextParser.isEndMarker(char)) {

if (this.string.length >0) {

this.clear = true;

return true;}

return false;} else {this.string += char;} }

get message() {

return this.string;}},

Realizează o impărțire (parsing) al setului de date. Pentru acuratețea și concludența datelor analizate, evitarea erorilor și eforturilor ulterioare de curățire prin operațiuni specifice de ingineria datelor (data engineering) verifică prin var adunare atributele setului de date, lungimea acestuia și realizează operațiunile INSERT numai dacă îndeplinește condiția logică (TRUE) spli.length=19:

function receiveSerial(dataBuf) {

let str = dataBuf.toString();

for (let i = 0; i < str.length; i++) {

if (parser.parse(str[i])) {var value = parser.message.trim();var spli=value.split(" ");

var adunare=spli[0]*1+spli[1]*1+spli[2]*1+spli[3]*1+spli[4]*1+spli[5]*1+spli[6]*1

+spli[7]*1+spli[8]*1+spli[9]*1+spli[10]*1+spli[11]*1+spli[12]*1+spli[13]*1+spli[14]*1+spli[15]*1+spli[16]*1+spli[17]*1+spli[18]*1;

if (isNaN(adunare)){ console.log("do nothing"); }

// Inserează valorile în baza de date

else if (spli.length=19) {

var Caz_WW=spli[0]-spli[4];

var Caz_XX=spli[1]-spli[5];

var Caz_YY=spli[2]-spli[6];

var Caz_ZZ=spli[3]-spli[7];

var Caz_ACC_XX=spli[8]-spli[11];

var Caz_ACC_YY=spli[9]-spli[12];

var Caz_ACC_ZZ=spli[10]-spli[13];

insertValueIntoDatabase([spli[0],spli[1],spli[2],spli[3],spli[4],spli[5],spli[6],spli[7],spli[8],spli[9],spli[10],spli[11],spli[12],spli[13],spli[14],spli[15],spli[16],spli[17],spli[18],Caz_WW,Caz_XX,Caz_YY,Caz_ZZ,Caz_ACC_XX,Caz_ACC_YY,Caz_ACC_ZZ]); } } }}

interfață port serial USB 3

interfață serială I2C bus – arduino uno – interfață serială I2C bus – arduino uno

algoritmi de transformare a datelor de ieșire (setarea regiștrilor)

folosirea optiunii de pin interrupt- eliminarea prin iterații a factorului zgomot pentru fiecare mărime a setului de ieșire- quaternar

5.1.1. DHT11

-citirea setului de temperatură-umiditate

5.1.1. SW-420

-prelucarea iesirilor prin smnalul puls

4.2. NODE js

4.3. MySQL xampp

crearea seturilor de date, structura setului de date

4.4. KERAS- Jupyter notebook, Anaconda, python

4.5. Ingineria Datelor

curățarea datelor

transformarea datelor

manipularea datelor

pandas, scikit learn

libraria seaborn

grafica plot, pyplot

Cap.5 Titlul celui de-al treilea capitol (1 cap, două despre aplicația realizată de student, atît la nivel conceptual (analiza, proiectare etc.), cît și la nivel practic, implementarea, structura pachetului software, funcțiile importante,screenshot-uri cu rezultate, testarea etc. (20-35 pagini))

5.1. Secțiunea 1

5.2. Secțiunea 2

Cap.6 Studiu de caz1 cap, două despre aplicația realizată de student, atît la nivel conceptual (analiza, proiectare etc.), cît și la nivel practic, implementarea, structura pachetului software, funcțiile importante,screenshot-uri cu rezultate, testarea etc. (20-35 pagini))

Cap.7 Concluzii generale aferente lucrării

Bibliografie

A guide to an efficient way to build neural network architectures- Part I: Hyper-parameter selection and tuning for Dense Networks using Hyperas on Fashion-MNIST

https://towardsdatascience.com/a-guide-to-an-efficient-way-to-build-neural-network-architectures-part-i-hyper-parameter-8129009f131b

Arduino interrupt tutorial

https://circuitdigest.com/microcontroller-projects/arduino-interrupt-tutorial-with-examples

arduino pins

https://forum.arduino.cc/index.php?action=dlattach;topic=146315.0;attach=90365

arduino lab

https://profs.info.uaic.ro/~arduino/index.php/Laboratorul_1#Receptionarea_de_informatii_din_interfata_seriala_.28sau_din_putty.29.

Ghid 2 MPU6050

https://github.com/jrowberg/i2cdevlib/issues/63

Multitasking the arduino

https://learn.adafruit.com/multi-tasking-the-arduino-part-1/now-for-two-at-once

Projects/Arduino/NodeJS/Database/Arduino-NodeJS-MySQL-Serial-Data-Logger

https://github.com/tttapa/Projects/tree/master/Arduino/NodeJS/Database/Arduino-NodeJS-MySQL-Serial-Data-Logger

Arduino and MPU6050 Accelerometer and Gyroscope Tutorial

Arduino and MPU6050 Accelerometer and Gyroscope Tutorial

MPU6050: Arduino 6 Axis Accelerometer + Gyro – GY 521 Test & 3D Simulation

https://www.instructables.com/id/MPU6050-Arduino-6-Axis-Accelerometer-Gyro-GY-521-B/

MPU-6050: DMP Data from i2cdevlib

MPU-6050: DMP Data from i2cdevlib

DHT11

https://gist.github.com/erijpkema/863fa08b5555d7089ba84f506d79444a

Train/Test Split and Cross Validation in Python

https://towardsdatascience.com/train-test-split-and-cross-validation-in-python-80b61beca4b6

Anomaly Detection with Isolation Forest & Visualization

https://towardsdatascience.com/anomaly-detection-with-isolation-forest-visualization-23cd75c281e2

Sklearn Cluster Optics

https://scikit-learn.org/dev/modules/generated/sklearn.cluster.OPTICS.html

In Depth: Principal Component Analysis

https://jakevdp.github.io/PythonDataScienceHandbook/05.09-principal-component-analysis.html

Get data from histogram bins

https://stackoverflow.com/questions/2275924/how-to-get-data-in-a-histogram-bin

Histogram

https://en.m.wikipedia.org/wiki/Histogram

Difference Between Classification and Regression in Machine Learning

https://machinelearningmastery.com/classification-versus-regression-in-machine-learning/

Anomaly Detection using One-Class Neural Networks

https://www.academia.edu/37873405/Anomaly_Detection_using_One-Class_Neural_Networks?email_work_card=view-paper

Identifying areas for feature selection

https://campus.datacamp.com/courses/preprocessing-for-machine-learning-in-python/selecting-features-for-modeling?ex=3

Feature Selection Techniques in Machine Learning with Python

https://towardsdatascience.com/feature-selection-techniques-in-machine-learning-with-python-f24e7da3f36e

Deep learning in Keras

https://www.datacamp.com/courses/deep-learning-with-keras-in-python?utm_medium=email&utm_source=customerio&utm_campaign=course_16470_

Decision Tree as base learner

https://campus.datacamp.com/courses/extreme-gradient-boosting-with-xgboost/regression-with-xgboost?ex=4

Detecting Learning vs Memorization in Deep Neural Networks using Shared Structure Validation Sets

https://arxiv.org/pdf/1802.07714.pdf

All about machine learning ML

https://ml-cheatsheet.readthedocs.io/en/latest/linear_regression.html#multivariable-regression

Keras tutorial step by step

https://machinelearningmastery.com/tutorial-first-neural-network-python-keras/

Modèle de regresie neliniară

http://staff.fmi.uvt.ro/~daniela.zaharie/dm2018/RO/Curs/Curs10/dm2018_curs10.pdf

Corelația si regresia neliniara

http://sorana.academicdirect.ro/pages/doc/MV2012/MVRom06.pdf

detectia anomaliilor

https://en.wikipedia.org/wiki/Anomaly_detection

I2C bus

https://profs.info.uaic.ro/~arduino/index.php/Comunicare_I2C

3. Descrierea elementelor de circuit utilizate

– accelerometre MPU 6050

– senzori temperatură-umiditate DHT11

– senzori vibrații SW-420

– interfață serială I2C bus – arduino uno

3. Caracteristici generale ale senzorilor utilizați

– parametrii caracteristici/plaje funcționare

– algoritmi de transformare a datelor de ieșire (setarea regiștrilor)

4. Schema electrică/ logică utilizată

4.1.

Similar Posts