Model de clasificare folosind rețele neuronale artificiale (ANN)

Publicat: 2020-12-01

În terminologia învățării automate, clasificarea se referă la o problemă de modelare predictivă în care datele de intrare sunt clasificate ca una dintre clasele etichetate predefinite. De exemplu, predicția Da sau Nu, Adevărat sau Fals se încadrează în categoria Clasificarea binară, deoarece numărul de ieșiri este limitat la două etichete.

În mod similar, rezultatele care au mai multe clase, cum ar fi clasificarea diferitelor grupuri de vârstă, sunt numite probleme de clasificare multiclasă. Problemele de clasificare sunt unul dintre cele mai frecvent utilizate sau definite tipuri de probleme ML care pot fi utilizate în diferite cazuri de utilizare. Există diverse modele de învățare automată care pot fi utilizate pentru probleme de clasificare.

De la tehnici de bagging la Boosting, deși ML este mai mult decât capabil să gestioneze cazuri de utilizare de clasificare, rețelele neuronale intră în imagine atunci când avem o cantitate mare de clase de ieșire și o cantitate mare de date pentru a susține performanța modelului. În continuare, vom analiza cum putem implementa un model de clasificare folosind rețele neuronale pe Keras (Python).

Învață curs de inteligență artificială de la cele mai bune universități din lume. Câștigă programe de master, Executive PGP sau Advanced Certificate pentru a-ți accelera cariera.

Cuprins

Rețele neuronale

Rețelele neuronale sunt vag reprezentative pentru învățarea creierului uman. O rețea neuronală artificială este formată din neuroni care, la rândul lor, sunt responsabili pentru crearea straturilor. Acești neuroni sunt cunoscuți și ca parametri reglați.

Ieșirea de la fiecare strat este transmisă la stratul următor. Există diferite funcții de activare neliniară pentru fiecare strat, ceea ce ajută la procesul de învățare și la ieșirea fiecărui strat. Stratul de ieșire este cunoscut și sub denumirea de neuroni terminali.

Sursa: Wikipedia

Greutățile asociate neuronilor și care sunt responsabile pentru predicțiile generale sunt actualizate pe fiecare epocă. Rata de învățare este optimizată folosind diferiți optimizatori. Fiecare rețea neuronală este prevăzută cu o funcție de cost care este redusă la minimum pe măsură ce învățarea continuă. Se folosesc apoi cele mai bune ponderi pentru care funcția de cost dă cele mai bune rezultate.

Citiți: Tutorial de detectare a obiectelor TensorFlow pentru începători

Problema de clasificare

Pentru acest articol, vom folosi Keras pentru a construi rețeaua neuronală. Keras poate fi importat direct în python folosind următoarele comenzi.

import tensorflow ca tf

din tensorflow import keras

din keras.models import Sequential

din keras.straturi import Dense

Setul de date și variabila țintă

Vom folosi setul de date despre diabet care va avea următoarele caracteristici:

Variabile de intrare (X):

  • Sarcini: Numărul de ori gravidă
  • Glucoză: Concentrația plasmatică a glucozei la 2 ore într-un test oral de toleranță la glucoză
  • Tensiune arterială: tensiune arterială diastolică (mm Hg)
  • Grosimea pielii: grosimea pliului pielii triceps (mm)
  • Insulină: insulină serică de 2 ore (mu U/ml)
  • IMC: indicele de masă corporală (greutate în kg/(înălțime în m)^2)
  • DiabetesPedigreeFunction: Funcția de pedigree pentru diabet
  • Varsta: varsta (ani)

Variabile de ieșire (y):

Rezultat: variabilă de clasă (0 sau 1) [Pacientul are sau nu diabet zaharat]

# încărcați setul de date

df= loadtxt('pima-indians-diabetes.csv', delimiter=',')

# Împărțiți datele în X (intrare) și Y (ieșire)

X = set de date[:,0:8]

y = set de date[:,8]

Definiți modelul Keras

Putem începe construirea rețelei neuronale folosind modele secvențiale. Această abordare de sus în jos ajută la construirea unei arhitecturi de rețea neuronală și se joacă cu forma și straturile. Primul strat va avea numărul de caracteristici care pot fi fixate folosind input_dim. Îl vom seta la 8 în această stare.

Crearea rețelelor neuronale nu este un proces foarte ușor. Există multe încercări și erori care au loc înainte ca un model bun să fie construit. Vom construi o structură de rețea complet conectată folosind clasa Dense din Keras. Neuronul contează ca primul argument care trebuie furnizat stratului dens.

Funcția de activare poate fi setată folosind argumentul de activare. Vom folosi unitatea liniară rectificată ca funcție de activare în acest caz. Există și alte opțiuni precum Sigmoid sau TanH, dar RELU este o opțiune foarte generalizată și mai bună.

# definiți modelul Keras

model = Sequential()

model.add(Dense(12, input_dim=8, activation='relu'))

model.add(Dense(8, activation='relu'))

model.add(Dense(1, activation='sigmoid'))

Compilați modelul Keras

Compilarea modelului este următorul pas după definirea modelului. Tensorflow este folosit pentru compilarea modelului. Compilarea este procesul în care parametrii sunt stabiliți pentru antrenamentul modelului și predicții. CPU/GPU sau memoriile distribuite pot fi folosite în fundal.

Trebuie să specificăm o funcție de pierdere care este utilizată pentru a evalua greutățile pentru diferitele straturi. Optimizatorul ajustează rata de învățare și trece prin diferite seturi de greutăți. În acest caz, vom folosi Binary Cross Entropy ca funcție de pierdere. În cazul optimizatorului, vom folosi ADAM care este un algoritm eficient de coborâre a gradientului stocastic.

Este foarte popular folosit pentru tuning. În cele din urmă, deoarece este o problemă de clasificare, vom colecta și vom raporta acuratețea clasificării, definită prin argumentul metrics. Vom folosi acuratețea în acest caz.

# compilați modelul keras

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

Potrivirea modelului și evaluarea

Potrivirea modelului este cunoscută în esență ca antrenament de model. După compilarea modelului, modelul este gata să parcurgă în mod eficient datele și să se antreneze singur. Funcția fit() de la Keras poate fi utilizată pentru procesul de formare a modelului. Cei doi parametri principali utilizați înainte de antrenamentul modelului sunt:

  1. Epoci: O trecere prin întregul set de date.
  2. Dimensiunea lotului: Greutățile sunt actualizate la fiecare dimensiune de lot. Epocile constau în loturi de date distribuite în mod egal.

# potriviți modelul Keras pe setul de date

model.fit(X, y, epochs=150, batch_size=10)

Un GPU sau un CPU este folosit în acest proces. Antrenamentul poate fi un proces foarte lung în funcție de epoci, dimensiunea lotului și, cel mai important, dimensiunea Datelor.

De asemenea, putem evalua modelul pe setul de date de antrenament folosind funcția evaluate(). Datele pot fi împărțite în seturi de antrenament și testare, iar testarea X și Y pot fi utilizate pentru evaluarea modelului.

Pentru fiecare pereche de intrare și ieșire, aceasta va produce o prognoză și va aduna scoruri, inclusiv pierderea medie și orice măsurători pe care le-am instalat, cum ar fi precizia.

O listă de două valori va fi returnată de funcția evaluate(). Prima va fi pierderea modelului pe setul de date, iar a doua va fi acuratețea modelului pe setul de date. Ne interesează doar acuratețea raportului, așa că vom ignora importanța pierderii.

# evalua modelul keras

_, acuratețe = model.evaluate(Xtest, ytest)

print('Precizie: %.2f' % (precizie*100))

Citiți și: Introducere model de rețea neuronală

Concluzie

Am creat și evaluat o rețea neuronală bazată pe clasificare. Deși datele utilizate au fost mici în acest caz, rețelele neuronale sunt potrivite în mare parte pentru seturi de date numerice mari.

Verificați programul de certificat avansat de la upGrad în învățare automată și NLP. Acest curs a fost creat ținând cont de diferitele tipuri de studenți interesați de Machine Learning, oferind mentorat 1-1 și multe altele.

Cum pot fi utilizate rețelele neuronale pentru clasificare?

Clasificarea se referă la clasificarea obiectelor în grupuri. Un tip de clasificare este cazul în care sunt prezise mai multe clase. În rețelele neuronale, unitățile neuronale sunt organizate în straturi. În primul strat, intrarea este procesată și este produsă o ieșire. Această ieșire este apoi trimisă prin straturile rămase pentru a produce rezultatul final. Aceeași intrare este procesată prin strat pentru a produce rezultate diferite. Aceasta poate fi reprezentată cu un perceptron multistrat. Tipul de rețea neuronală folosită pentru clasificare depinde de setul de date, dar rețelele neuronale au fost folosite pentru probleme de clasificare.

De ce sunt rețelele neuronale artificiale bune pentru clasificare?

Pentru a răspunde la această întrebare, trebuie să înțelegem principiul de bază al rețelelor neuronale și problema pe care rețelele neuronale sunt proiectate să o rezolve. După cum sugerează și numele, rețelele neuronale sunt un model inspirat din punct de vedere biologic al creierului uman. Ideea de bază este că vrem să modelăm un neuron ca funcție matematică. Fiecare neuron preia intrări de la alți neuroni și calculează o ieșire. Apoi conectăm acești neuroni într-un mod care imită rețeaua neuronală din creier. Obiectivul este de a învăța o rețea care poate prelua unele date și poate produce o ieșire adecvată.

Când ar trebui să folosim rețelele neuronale artificiale?

Rețelele neuronale artificiale sunt folosite în situațiile în care încercați să duplicați performanța organismelor vii sau să detectați modele în date. Diagnosticele medicale, recunoașterea vorbirii, vizualizarea datelor și prezicerea cifrelor scrise de mână sunt toate cazuri bune de utilizare pentru un ANN. Rețelele neuronale artificiale sunt folosite atunci când este nevoie să înțelegem relațiile complexe dintre intrări și ieșiri. De exemplu, poate exista mult zgomot în variabile și poate fi dificil de înțeles relațiile dintre aceste variabile. Prin urmare, utilizarea rețelelor neuronale artificiale este o practică obișnuită de a păstra cunoștințele și datele.