0% au considerat acest document util (0 voturi)
5 vizualizări20 pagini

AFAF0CD4

Documentul discută despre utilizarea rețelelor neuronale artificiale pentru analiza creditului, generarea de date și clasificarea universităților. Se prezintă implementarea practică a rețelelor neuronale în R, incluzând antrenarea și testarea acestora pe seturi de date specifice. De asemenea, se abordează probleme precum overfitting-ul și se oferă exemple de predicție a valorilor variabilelor numerice.

Încărcat de

Camiʚïɞ
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
5 vizualizări20 pagini

AFAF0CD4

Documentul discută despre utilizarea rețelelor neuronale artificiale pentru analiza creditului, generarea de date și clasificarea universităților. Se prezintă implementarea practică a rețelelor neuronale în R, incluzând antrenarea și testarea acestora pe seturi de date specifice. De asemenea, se abordează probleme precum overfitting-ul și se oferă exemple de predicție a valorilor variabilelor numerice.

Încărcat de

Camiʚïɞ
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

Inteligenta Computationala- Seminar

Retele neuronale artificiale

Problema 1 Creditscoring

CREDIT SCORING = analiza background-ului unei persoane pentru a


evalua increderea in ea la acordarea unui credit. Setul de date
“[Link]” consta in 2000 de clienti care au luat un credit de la o
banca. Atributele numerice sunt: venit (anual), varsta, imprumut (euro),
LTI (the loan to yearly income ratio=raportul dintre imprumut si venitul
anual al clientului). Scopul studiului este de a concepe un model care sa
faca predictii, pe baza variabilelor de intrare varsta si LTI, asupra riscului
incapacitatii de plata in 10 ani. Riscul incapacitatii de plata ia valorile 0 si
1.
0- Nu exista risc
1- Exista risc
Se instaleaza intai biblioteca „neuralnet”.

>[Link]("neuralnet")
>library(neuralnet)
>[Link](1234567890)
Deoarece ordonarea clientilor in lista este aleatoare, se construieste un
set de antrenare format din primele 800 de observatii pentru a antrena
RNA (=retea neuronala artificiala) si setul de testare va fi format din
observatiile 801:2000.

File->Import dataset ->From text (readr)

>View(creditset)

1
>dataset<-creditset
Setul de antrenare:
>trainset <- dataset[1:800, ]
>View(trainset)
Setul de testare:
>testset <- dataset[801:2000, ]
Se va construi o retea neuronala cu 4 noduri ascunse.
>creditnet <- neuralnet(default10yr ~ LTI + age, trainset, hidden = 4,
lifesign = "minimal", [Link] = FALSE, threshold = 0.1)

Explicatia parametrilor:
# hidden = 4 strat ascuns cu 4 neuroni
#lifesign = "minimal" Afișează mesaje minimale în timpul antrenării
#[Link] = FALSE Rețeaua folosește o funcție de activare
sigmoidă (pentru clasificare)
#threshold = 0.1 Antrenarea se oprește când erorile de învățare sunt
sub 0.1

VIZUALIZAREA RETELEI
>plot(creditnet, rep = "best")

2
S-a obtinut o eroare egala cu 0.67 in 8705 iteratii.
Odata antrenata reteaua, ea trebuie testata cu setul de testare testset.
Din setul de testare se extrag numai coloanele independente LTI si age.
>temp_test <- subset(testset, select = c("LTI", "age"))
>View(temp_test)

Functia compute() calculeaza outputul, fiind data o retea antrenata.


>[Link] <- compute(creditnet, temp_test)
Se compara rezultatele reale(=actuale) cu cele previzionate.
>results <- [Link](actual = testset$default10yr, prediction =
[Link]$[Link])
Afisam primele 15 observatii din setul de date de testare, clasa actuala si
cea previzionata.

3
>results[100:115, ]

Rotunjim superior rezultatele predictiei:


>results$prediction <- round(results$prediction)
>results[100:115, ]

Se observa ca etichetele reale si cele previzionate coincid.


Matricea de confuzie:
>tab=table(testset$default10yr, results$prediction)
>tab
>library(e1071)
>classAgreement(tab)

Problema 2 cu un set de date generat aleator

>library(neuralnet)
Sunt generate 50 de numere uniform distribuite intre 0 si 100.
>traininginput <- [Link](runif(50, min=0, max=100))
>traininginput
Se creeaza setul de tinte(=iesiri dorite, date), ca fiind radical din datele
de intrare din setul de antrenare.
>trainingoutput <- sqrt(traininginput)

4
>trainingoutput
Sunt create datele de antrenare (intrari + tinte) intr-o singura
variabila(=matrice cu 2 coloane):
>trainingdata <- cbind(traininginput,trainingoutput)
>trainingdata
Sunt denumite cele 2 coloane cu "Input","Output".
>colnames(trainingdata) <- c("Input","Output")
>colnames(trainingdata)
Se antreneaza reteaua. Aceasta retea este recurenta, de tip
„back-propagation”. Reteaua a fost antrenata sa extraga radicalul.
>retea<- neuralnet(Output ~ Input, trainingdata, hidden=10,
threshold=0.01)
Este desenata reteaua si ponderile. Cu albastru este reprezentat biasul.

>plot(retea)

5
1 0.1495 1

-3
.60
70

-2.5
2

233
1.7

3
05

0.2
07

90
31
-0.5
242

2.
16
39
-1.49

7
-3.

225
26

-0.60
14
5
04 42518

515
71 1
5

0.176
9
0-[Link]

64 6.5647
45 8
-0..02327

94
Input 0 Output
-0
-0. .02571
02 23
95 3.1019 -1.352
-000..00760

4
.044796
03 2

5
5

49
01
-1.
-1.2338

5
6

26
37
0.
-0.52124

61
47
2.1
0.61631

8
969
2.2

Error: 0.000368 Steps: 16161

Acum testam reteaua cu un set de testare:


Sunt generate numerele de la 1 la 10 si sunt calculate patratele lor.

>testdata <- [Link]((1:10)^2)


>testdata

6
Testam reteaua cu setul de testare.
>[Link] <- compute(retea, testdata)
Sunt afisate atributele variabilei [Link]:
>ls([Link])

Sunt afisate rezultatele previzionate pentru setul de testare:


>print([Link]$[Link])

>output1<-
cbind(testdata,sqrt(testdata),[Link]([Link]$[Link]))
>output1

Pe coloana a 2-a a tabelului anterior sunt afisate patratele primelor 10


numere intregi(=setul de testare), iar pe ultima sunt afisate rezultatele
previzionate de retea (numerele de la 1 la 10):
Denumim coloanele:
>colnames(output1) <- c("Input","Expected Output","Neural Net
Output")
Sunt afisate rezutatele dorinte(=tintele) si rezultatele previzionate de
retea.

>print(output1)

7
Pe ultima coloana sunt rezultatele furnizate de reteaua neuronala.

Problema 3 RNA pentru clasificare atunci cand variabila dependenta


are mai mult de 2 clase

Setul de date “[Link]” contine 100 universitati din lume


clasificate in functie de:
•Article= este o măsură de productivitate științifică curentă, care include
articole publicate în reviste care sunt listate în prima, a doua și a treia
cuartila în ceea ce privește factorul de impact al jurnalului. Ponderea
acestui indicator in clasamentul general este de 21%.
•Citation= este o măsură de impact al cercetare și un scor în funcție de
numărul total de citari primite în 2012-2016 pentru articolele publicate
în 2012-2016 în jurnalele care sunt listate în prima, a doua și a treia
cuartila în ceea ce privește factorul de impact al jurnalului. Efectul citarii
asupra clasamentului general este 21%.
•[Link]= este măsura de durabilitate și continuitate a
productivității științifice reprezentate de numărul total de documente
care acoperă toate rezultatele academice ale instituțiilor, inclusiv lucrări
de conferințe, recenzii, note, discuții, în plus față de articole de jurnal
publicate în perioada 2012-2016. Ponderea acestui indicator este de
10%.
•Article Impact Total=AIT
•Citation Impact Total=CIT
•Collaboration= este o măsură de acceptare globală a unei universități.
Date internaționale de colaborare, care se bazează pe numărul total de
articole publicate în colaborare cu universitățile străine, se obțin pentru
anii 2012-2016. Ponderea acestui indicator este de 15% în clasamentul
general.

>date<-universitati
>head(date)

Variabila calitativă este categoria universităţii în funcţie de indicatorii de


performanţă ştiintifică: A, A+, A++, B++
>table(date$Category)

8
Se elimină primele două coloane din setul de date:
>date<-date[,-c(1,2)]
>View(date)
Se extrag aleator 700 obiecte pentru setul de antrenare:
>itrain <- date[sample(1:1000, 700),]
>head(itrain)

Se adaugă la setul de antrenament itrain patru atribute, conţinând


valoarea de adevăr a apartenenţei fiecărei universitati la cele 4 categorii:
A, A+,A++, B++:

>itrain$A <- c(itrain$Category == "A")


>itrain$A1 <- c(itrain$Category == "A+")
>itrain$A2 <- c(itrain$Category == "A++")
>itrain$B2 <- c(itrain$Category == "B++")
Din setul de antrenament se elimină clasa, “Category”:
>itrain$Category <- NULL
>head(itrain)

Se antrenează reţeaua neuronală care conţine 3 noduri în stratul ascuns.

>library(neuralnet)

>retea <- neuralnet(A + A1 + A2+B2 ~


Article+Citation+AIT+CIT+Collaboration, itrain,
hidden=3, lifesign="full", stepmax=1e6)

9
Parametrul stepmax din functia neuralnet determina convergenta
algoritmului. Cu cat stepmax este mai mare, cu atat algoritmul are mai
mult timp pentru a converge.
Rep=”best”: se alege iteratia care conduce la cea mai mica eroare.
Daca algoritmul nu converge dupa 1000000 pasi, se alege hidden=1 (o
retea neuronala mai simpla, cu un singur neuron in stratul ascuns).

>plot(retea, rep="best", intercept=FALSE)

Se realizează o predicţie a categoriei universitatilor pentru fiecare


observaţie pe baza reţelei antrenate, dupa ce am eliminat coloanele 1 si
4, care nu s-au folosit in antrenarea retelei
>predictie <- compute(retea, date[,-c(1,4)])

Rezultatele (gradul de apartenenţă al primelor 10 observaţii) la fiecare


categorie (= tipul previzionat de universitate) sunt afişate prin comanda:
>predictie$[Link][1:10,]

10
Variabila rezultat conţine clasa “A”, “A+”, “A++” , “B++” pe baza
predicţiei.
>rezultat<-0
>for (i in 1:1000) { rezultat[i] <- [Link](predictie$[Link][i,]) }
>for (i in 1:1000) { if (rezultat[i]==1) {rezultat[i] = " A " } }
>for (i in 1:1000) { if (rezultat[i]==2) { rezultat[i] = " A+" } }
>for (i in 1:1000) { if (rezultat[i]==3) { rezultat[i] = " A++ " } }
>for (i in 1:1000) { if (rezultat[i]==4) { rezultat[i] = " B++ " } }

>comparatie <- date


>comparatie$Predicted <- rezultat
>comparatie
>head(comparatie)

Variabila numită comparatie cuprinde în coloanal 1 si coloana 8 clasa


reală şi clasa previzionată. Pentru primele 6 observaţii din setul de date
sunt afişate cele 2 clase (clasa reala – coloana 1; clasa previzionata-
coloana 8)
Pentru primele 10 observatii sunt afisate clasa reala si clasa previzionata:

>comparatie[1:10, c(1,8)]

11
Matricea de confuzie:
>tab=table(comparatie$Category, comparatie$Predicted)
>tab

>library(e1071)
>classAgreement(tab)

La retelele neuronale din R apare frecvent fenomenul de overfitting.

Problema 4 RNA utilizate in regresie =previzionarea valorilor unor


variabile numerice (setul de date [Link])

Să se realizeze o predicţie a scorului conţinutului nutriţional al cerealelor


din setul de date [Link] pe baza unei reţele neuronale.

Rezolvare:

Setul de date “[Link]” conţine 80 de tipuri de cereale şi conţinutul lor


nutriţional. Variabila dependenta este “rating”, un scor acordat fiecărui
tip de cereale.

>View(cereal)

12
>date<-cereal

> [Link](123)

75% din date vor fi în setul de antrenare, iar 25% în setul de testare. .
> [Link]("caTools")
> library(caTools)
Biblioteca “caTools” va fi utilizată pentru a diviza setul de date cu funcţia
[Link]:
> split = [Link](date$rating, SplitRatio = 0.75)
> setantrenare<-subset(date, split==TRUE)
>View(setantrenare)
> settestare<-subset(date, split==FALSE)
>View(settestare)

Se elimină primele trei coloane care nu sunt numerice:

> date1<-date[,-c(1:3)]

Standardizăm datele:

Se determina maximul pe fiecare coloana:

> maxim<-apply(date1, 2, max)

>maxim

Se determina minimul pe fiecare coloana:

> minim<-apply(date1, 2, min)

>minim

13
Standardizare max-min:
> datestand<-[Link](scale(date1, center=minim,
scale=maxim-minim))

>View(datestand)

Se creează setul de testare şi setul de antrenare pentru antrenarea


reţelei:

> library(neuralnet)

> antrenareretea<-subset(datestand, split==TRUE)


>antrenareretea
> testareretea<-subset(datestand, split==FALSE)
>testareretea

Se construieşte reţeaua neuronală cu intrările “calories”, “protein”, “fat”,


“sodium”, “fiber” şi ieşirea “rating”:

> retea=neuralnet(rating ~ calories + protein + fat + sodium + fiber,


antrenareretea, hidden=5, [Link]=T)
#hidden = 5 Rețeaua are 1 strat ascuns cu 5 neuroni
#[Link] = TRUE Rețeaua va avea o ieșire numerică continuă, deci
este un model de regresie

> plot(retea)

14
Reteaua de mai sus are 5 neuroni în stratul ascuns. Ponderile sunt
calculate conform algoritmului de “back-propagation”. Cu albastru este
reprezentat biasul.
Dorim o predicţie a scorului tipurilor de cereale:

>predictie<-compute(retea, testareretea[,c(1:5)])

In componenta [Link] a outputului functiei compute() sunt continute


predictiile:
>predictie$[Link]
>head(predictie$[Link])

Acestea sunt valori prevzionate standardizate.


Valorile previzionate ale variabilei rating vor fi aduse la dimensiunile
initiale pentru a fi comparate cu cele reale:
>predictie=(predictie$[Link]*
(max(date$rating)-min(date$rating)))+min(date$rating)
Primele şase valori previzonare din setul de testare sunt:
> head(predictie)

15
Se reprezintă valorile reale şi cele previzionate:

>plot(settestare$rating, predictie, col= "red", pch=12, ylab= "Valori


previzionate de retea ", xlab= "Valori reale ")
>abline(0,1)

Se determină eroarea de predicţie RMSE (Root Mean Square Error)


pentru setul de testare conform formulei:

16
n
( Pi Oi ) 2
i 1
RMSE
n
Pi este valoarea previzionată, Oi este valoarea observată, n=numărul
de observaţii.
>eroare=(sum(settestare$rating-predictie)^2/nrow(settestare))^0.5

> eroare

>[Link](settestare$rating, predictie)

Problema 5 (cu setul de date [Link]) libraria deepnet

Se extrage ultima coloana, eticheta “admitted”:


>y = [Link](Marks[,3])
>y
>y[which(y=="0")] = 0

>y[which(y=="1")] = 1

Observatie:
Daca variabila dependenta admitted avea valorile de tip caracter “admis” si “respins”,
ele se transformau prin ultimele 2 comenzi in 0 si 1.

>y = [Link](y)
>y

>x = [Link]([Link](Marks[,1:2]))
>x

17
>x = matrix([Link](x),ncol=2)
>x

Apoi folosim functia [Link] din libraria “deepnet” pentru a modela reteaua
neuronala. Vom avea 5 neuroni in stratul ascuns.

>[Link]("deepnet")
>library(deepnet)
>nn <- [Link](x, y, hidden = c(5))

Predictia iesirii pe baza intrarilor x:

>yy = [Link](nn, x)

>print(head(yy))

Acestea sunt rezultatele de iesire nerotunjite.


Outputul produs de retea este convertit in clase. Se construieste un vector coloana
cu elemente 0 de dimensiune egala cu vectorul yy:
>yhat = matrix(0,length(yy),1)
#
>yhat

18
Elementele vectorului de iesire yy se rotunjesc la 1 daca sunt mai mare decat media,
si la 0 daca sunt mai mici decat media.
>yhat[which(yy > mean(yy))] = 1
>yhat[which(yy <= mean(yy))] = 0
Matricea de confuzie:
>tab=table(y, yhat)
>tab

Pe liniile matricei de confuzie sunt etichetele reale y iar pe coloana sunt etichetele
previzionate de retea si rotunjite yhat.
Din 27+13=40 studenti picati, 24 au fost corect previzionati si 13 eronat etichetati ca
fiind admisi.
Din 11+49=60 studenti admisi, 49 au fost corect previzionati si 11 eronat etichetati
ca fiind picati.
Rata de acuratete a retelei:
>print(sum(diag(tab))/sum(tab))

76% din elementele setului de date au fost corect etichetate.


Curba ROC
Intai detasam libraria deepnet pentru a putea lucra cu libraria pROC
>detach(package:deepnet,unload = T)
# [Link]("pROC")
> library(pROC)

# yy = probabilități (predicții continue)


# y = valori reale binare (0/1)

> roc_obj <- roc(y, yy)


> plot(roc_obj, col = "blue", main = "Curba ROC - cu pROC")

19
> cat(" AUC =", round(auc(roc_obj), 3), "\n")

Clasificatorul are capacitatea de 74.1% de a distinge intre clasa studentilor admisi si a


celor picati.

20

S-ar putea să vă placă și