Professional Documents
Culture Documents
PROIECT INTELIGEN
COMPUTAIONAL
Am afiat forma tabelului. n partea stng sunt variabilele analizate, iar n partea deapt
informaii despre tipul lor (cantitative sau calitative), precum i exemple de valori.
> exem[1:9,]
> cor(exem[,2:9])
Putem observa c exist n matricea de corelaie un numr mare de valori negative, ceea
ce indic faptul c ntre variabile exist i corelaii negative.
Exist corelaii puternic pozitive ntre variabilele SuprAgricola i SuprAgricol (0,8299),
ntre CaiDeComunicatii i SuprAgricola (08738).
Variabilele SuprAgricola i Livezi sunt slab corelate.
Am realizat histograme pentru toate atributele analizate.
> hist(exem$SuprArabila)
> hist(exem$SuprAgricola)
> hist(exem$Vii)
> hist(exem$Livezi)
> hist(exem$Paduri)
> hist(exem$Ape)
> hist(exem$Constructii)
> hist(exem$CaiDeComunicatii)
> plot(density(exem$SuprArabila))
6
Se realizeaz o structur radial (Pie), pentru a evidenia cele 3 tipuri de judee: mici,
mijlocii i mari.
> exem1<-exem[,-1]
> exem1<-exem[,-8]
Se construiete exem1 doar cu variabilele numerice.
> summary(exem1)
> exemm<-exem[,1:9]
> exemm
> exemmm<-exemm[,2:9]
> exemmm
> names(exemmm)
exemmm va fi contruit pe baza coloanele 2-9 din fiierul csv.
Se afieaz numele capului de tabel i un sumar al datelor. Pentru fiecare variabil, programul a
determinat valoarea minim, maxim, media, mediana i cuartilele.
10
S-a calculat abaterea standard pentru fiecare component. Au fost supuse analizei 41 de
observaii (judeele) i 8 variabile.
K-means
> set.seed(5)
> km<-kmeans(exem[,2:5],4)
> km
11
Am mprit datele din coloanele 2-5 n 4 clase. Numrul de clase a fost inficat n funcia
kmeans() de mai sus. Primul cluster cuprinde 14 observaii, al doilea 11, al treilea 4, iar ultimul
12.
>plot(exem[,2],exem[,3], col=km$cluster)
S-a realizat plot-ul i s-au colorat n culori diferite observaiile n funcie de clusterul din care fac
parte.
> set.seed(5)
> km<-kmeans(exem[,2:5],4)
> table(km$cluster, exem$Marimi)
12
> km$cluster
>o<-order(km$cluster)
>data.frame(exem$Judete[o], km$cluster[o])
Afieaz judeele grupate alfabetic n cele 4 clustere.
1 Bistrita-Nasaud
2
Maramures
3
Salaj
4
Brasov
5
Covasna
6
Sibiu
7
Neamt
8
Vrancea
9
Dambovita
10
Prahova
11
Ilfov
12
Gorj
13
Valcea
14
Hunedoara
15
Cluj
16
Satu Mare
17
Alba
18
Harghita
19
Mures
20
Bacau
21
Suceava
22
Arges
23
Giurgiu
24
Mehedinti
25 Caras-Severin
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
2
2
2
2
13
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Constanta
Teleorman
Dolj
Timis
Bihor
Botosani
Iasi
Vaslui
Braila
Buzau
Galati
Tulcea
Calarasi
Ialomita
Olt
Arad
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
14
Sunt reprezentate observaiile grupate n cele 4 clustere n raport cu cele 8 atribute numerice.
>plot(exem$SuprArabila, exem$SuprAgricola, xlab="Arabil", ylab="Agricol", col=km$cluster)
15
16
Clusterizare ierarhic
>d <- dist(exem[,-10], method = "euclidean")
>d
Sau
>d<-dist(exem[,-10], method="manhattan")
>d
17
n clusterizarea ierarhic pot fi folosite mai multe tipuri de distane (euclidian, manhattans au
ward).
fit <- hclust(d, method="ward.D")
Calculeaz distana dintre clustere conform metodei Ward.
> plot(fit)
Afieaz dendograma:
> groups
Afieaz cele 4 clustere.
>hcd = as.dendrogram(fit)
>hcd
19
>plot(hcd, type="triangle")
Dendograma n form triunghiular:
20
21
par(op)
Revin la vechile setri.
22
Algoritmul k-medoids
> library(fpc)
> scurt <- subset(exem, select = -c(1) )
Din setul de date eliminm prima coloan.
>scurt
>scurt <- subset(exem, select = -c(1 ) )
Se terge coloana 1 din setul de date pentru c algoritmul bazat pe k-medoizi opereaz numai cu
valori numerice.
>pamk.result<-pamk(scurt)
>pamk.result
Dac nu s-a precizat numrul de clustere, s-au mprit datele n dou clustere.
> pamk.result$nc
Afieaz numrul de clustere create.
[1] 2
>table(pamk.result$pamobject$clustering, scurt$Marimi)
23
3
24
26
>tab<-table(scurt$Marimi, result$cluster)
>tab
Se afieaz matricea de confuzie:
Valori previzionate
Valori reale
27
Intepretare:
Din primul cluster fac parte 5 judee cu clasa de risc mare, un jude cu clasa de risc mic
i 4 judee cu clasa de risc mijlocie.
Din al doilea cluster fac parte 3 judee cu clasa de risc mare, 4 judee cu clasa de risc
mic i 5 judee cu clasa de risc mijlocie.
Din al treilea cluster fac parte 6 judee cu clasa de risc mare, 3 judee cu clasa de risc
mic i 10 judee cu clasa de risc mijlocie.
> classAgreement(tab)
Interpretare:
Rata de acuratee a modelului este de 46,34%.
Coeficientul lui Cohen este 0.1678, ceea ce conduce la concluzia c datele sunt de
ncredere.
SOM(Self-Organizing Maps)
> library(kohonen)
>set.seed(101)
>exemplu<-exem[-1]
Am eliminat prima coloan din setul de date, care este denumirea judeelor.
> train.obs<-sample(nrow(exemplu),12)
Aleg un eantion de 12 observaii pentru setul de antrenament.
>train.obs
[1] 16 2 28 25 10 11 21 12 35 18 39 22
28
SOM
> train.set <- scale(exemplu[train.obs,][,-9])
Elimin variabila clas, adic coloana a 9-a.
> train.set
Funcia scale() opereaz numai cu vectori numerici. Construiesc setul de antrenament.
Functia scale() standardizeaz datele.
>test.set<-scale(exemplu[-train.obs, ][-9], center = attr(train.set, "scaled:center"),scale =
attr(train.set,"scaled:scale"))
center = attr(train.set, "scaled:center")
Se scade media unei coloane din elementele ei.
scale = attr(train.set, "scaled:scale")
Se mpart coloanele (centrate) cu abaterea lor standard.
Construim setul de date de testare eliminnd setul de antrenare.
>test.set
Construim harta Kohonen:
> somexemplu <- som(train.set, grid = somgrid(3, 2, "hexagonal"))
> somexemplu
> plot(somexemplu)
29
30
Funcia classvec2classmat() aplicat unui vector (=variabil de clas) reprezint acel vector sub
forma unei matrici cu elementele 0 i 1, unde 1 reprezint apartenena la clasa i 0 nonapartenena.
Facem o predicie a setului de testare:
> somprediction
>tab<- table(exemplu[,9][-train.obs], somprediction$prediction)
>tab
Se afieaz matricea de confuzie:
Date previzionate
Date reale
> classAgreement(tab)
Interpretare:
Prin metoda SOM, rata de acuratee a modelului este de 51.72%. Coeficientul lui Cohen este
0.24 , ceea ce conduce la concluzia c datele sunt de ncredere.
Alte tipuri de dendograme:
>set.seed(101)
> samplexemplu <- exem[sample(1:41, 15),]
> samplexemplu
31
32
33
|--leaf "39"
`--[dendrogram w/ 2 branches and 12 members at h = 293]
|--[dendrogram w/ 2 branches and 6 members at h = 168]
| |--leaf "26"
| `--[dendrogram w/ 2 branches and 5 members at h = 111]
| |--[dendrogram w/ 2 branches and 3 members at h = 74.9]
| | |--leaf "29"
| | `--[dendrogram w/ 2 branches and 2 members at h = 46]
| | |--leaf "14"
| | `--leaf "22"
| `--[dendrogram w/ 2 branches and 2 members at h = 83.4]
|
|--leaf "5"
|
`--leaf "15"
`--[dendrogram w/ 2 branches and 6 members at h = 230]
|--[dendrogram w/ 2 branches and 2 members at h = 151]
| |--leaf "3"
| `--leaf "10"
`--[dendrogram w/ 2 branches and 4 members at h = 172]
|--leaf "34"
`--[dendrogram w/ 2 branches and 3 members at h = 141]
|--leaf "35"
`--[dendrogram w/ 2 branches and 2 members at h = 99.5]
|--leaf "9"
`--leaf "6"
>group.3 <- cutree(cluster, k = 3)
mparte dendograma n 3 clustere.
>table(group.3, samplexemplu$Marimi)
Compar cele 3 clustere cu clasele de risc cunoscute.
Interpretare:
Din clusterul 1 fac parte doua judee cu clasa de risc mare, 5 judee cu clasa de risc mic
i 5 judee cu clasa de risc mijlocie.
Din clusterul 2 face parte un jude cu clasa de risc mare.
35
>par(mfrow=c(1,1))
> z <- as.dendrogram(cluster)
> attr(z[[2]][[2]],"edgePar") <- list(col="blue", lwd=4, pch=NA)
> attr(z[[2]][[1]],"edgePar") <- list(col="red", lwd=3, lty=3, pch=NA)
> plot(z, horiz=T)
ty =tipul liniei
36
> z[[2]]
'dendrogram' with 2 branches and 13 members total, at height 380.9401
37
Arbori de decizie
> library(party)
> set.seed(111)
> indice<-sample(2,nrow(exem),replace=TRUE,prob=c(0.7,0.3))
> indice
[1] 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 2 1 1 1 1 1 1 2 1 2
[39] 1 2 1
> setantrenare<-exem[indice==1,]
> settestare<-exem[indice==2,]
> settestare
> setantrenare
Judete.din.Romania SuprArabila SuprAgricola Vii Livezi Paduri Ape
1
Bihor
308.82
487.07 2.22 3.82 198.37 13.64
2 Bistrita-Nasaud
98.59
297.60 0.41 8.39 194.70 7.10
4
Maramures
81.07
305.53 0.24 6.31 290.04 5.39
5
Satu Mare 229.78
317.52 3.82 8.27 73.44 6.52
38
6
Salaj
120.56
238.95 2.53 4.86 106.34 5.80
8
Brasov
120.53
281.25 0.06 1.28 206.47 5.87
11
Mures
220.80
411.13 2.84 5.15 209.45 6.39
12
Sibiu
118.50
303.62 115.04 5.05 200.18 5.88
13
Bacau
186.33
320.76 1.68 2.67 280.92 14.96
15
Iasi
256.10
381.26 0.55 6.78 97.89 13.11
16
Neamt
168.91
281.65 11.40 1.77 260.95 10.62
17
Suceava 179.95
347.63 83.80 2.99 453.66 12.23
18
Vaslui 291.76
400.72 4.57 2.36 80.15 8.25
20
Buzau
257.72
402.35 19.40 10.34 163.43 10.71
21
Constanta 484.10
558.15 7.73 3.79 38.26 43.20
22
Galati 292.93
358.31 26.18 1.72 43.81 13.23
23
Tulcea 294.57
363.94 29.00 0.77 98.07 346.31
25
Arges
173.91
342.35 0.33 20.57 284.50 9.41
26
Calarasi 410.51
425.80 3.66 0.21 22.16 27.27
27
Dambovita 175.34
247.92 3.93 9.75 121.08 10.98
28
Giurgiu
258.97
275.61 8.24 0.58 37.94 14.10
29
Ialomita 352.15
374.50 6.64 0.28 26.15 13.09
31
Teleorman
454.84
497.92 0.81 0.21 29.69 15.01
32
Ilfov
98.08
101.45 46.66 0.63 25.22 5.11
33
Dolj
488.56
585.14 5.85 7.37 85.31 20.89
34
Gorj
98.24
238.80 7.47 7.47 274.06 4.49
35
Mehedinti 187.91
293.33 3.62 6.81 149.88 18.50
36
Olt
390.34
436.52 8.66 5.12 57.40 17.97
38
Arad
350.63
494.65 0.00 5.17 219.15 13.98
40
Hunedoara
78.96
281.24 0.00 1.06 365.59 5.80
Constructii CaiDeComunicatii Marimi
1
32.21
14.28 mari
2
8.87
8.14 mijlocii
4
12.83
6.39 mijlocii
5
23.03
8.77 mici
6
9.29
7.02 mici
8
30.52
5.27 mijlocii
11
19.92
10.81 mari
12
15.28
7.98 mijlocii
13
21.72
10.24 mari
15
19.02
10.29 mijlocii
16
15.22
7.91 mijlocii
17
19.41
8.29 mari
18
15.44
10.68 mijlocii
20
16.35
8.78 mijlocii
39
21
22
23
25
26
27
28
29
31
32
33
34
35
36
38
40
31.33
17.40
10.56
24.84
18.57
16.52
16.22
17.20
22.85
20.90
30.51
14.50
11.28
20.03
22.49
16.55
13.05 mari
10.33 mici
7.15 mari
10.54 mari
12.57 mijlocii
6.97 mici
7.41 mici
8.72 mici
10.65 mijlocii
4.49 mici
13.54 mari
8.90 mijlocii
6.61 mijlocii
11.21 mijlocii
14.97 mari
9.46 mari
> dependenta<Marimi~SuprArabila+SuprAgricola+Vii+Livezi+Paduri+Ape+Constructii+CaiDeComunicatii
> dependenta
Marimi ~ SuprArabila + SuprAgricola + Vii + Livezi + Paduri +
Ape + Constructii + CaiDeComunicatii
> print(arbore)
> plot(arbore)
40
> plot(arbore,type="simple")
> matriceconfuzie<-table(setantrenare$Marimi,predict(arbore))
> matriceconfuzie
41
> classAgreement(matriceconfuzie)
$diag
[1] 0.4333333
$kappa
[1] 0
$rand
[1] 0.3310345
$crand
[1] 0
42
> names(exem)
[1] "Judete.din.Romania" "SuprArabila"
"SuprAgricola"
[4] "Vii"
"Livezi"
"Paduri"
[7] "Ape"
"Constructii"
"CaiDeComunicatii"
[10] "Marimi"
43
44
factor(exem[, 10])
[,1] [,2]
mari 9.962857 22.53803
mici 12.255000 16.07791
mijlocii 12.449474 25.90069
Livezi
factor(exem[, 10]) [,1] [,2]
mari 5.560714 5.205814
mici 3.335000 3.821283
mijlocii 4.857368 3.788510
Paduri
factor(exem[, 10]) [,1]
[,2]
mari 225.3271 124.77751
mici
74.8925 51.33553
mijlocii 156.8258 92.19667
Ape
factor(exem[, 10]) [,1]
[,2]
mari 37.47357 89.401075
mici
8.97500 4.349545
mijlocii 12.32684 7.043026
Constructii
factor(exem[, 10]) [,1] [,2]
mari 21.74286 7.244804
mici 16.47000 4.526850
mijlocii 16.12263 5.562203
CaiDeComunicatii
factor(exem[, 10])
[,1] [,2]
mari 11.536429 3.257558
mici
7.313750 1.989335
mijlocii 8.763158 1.808738
47
Predicie cu CNB
Vrem s stabilim clasa de risc a primelor 9 judee din setul de date, pe baza CNB:
> predict(model, exem[1:9,-10])
[1] mari mijlocii mari mijlocii mici mici mijlocii mijlocii
[9] mici
Levels: mari mici mijlocii
Deci primele 9 judee din setul de date au clasele de risc: mari mijlocii mari mijlocii mici mici
mijlocii mijlocii mici.
> table(predict(model, exem[,-10]), exem[,10], dnn=list('predicted','actual'))
actual
predicted mari mici mijlocii
mari
12 0
0
mici
0 8
0
mijlocii 2 0
19
> tab<-table(predict(model, exem[,-10]), exem[,10], dnn=list('predicted','actual'))
>classAgreement(tab)
48
Reele neuronale
> library(neuralnet)
> set.seed(123)
>head(exem)
49
> nn<neuralnet(Clasa3+Clasa5~SuprArabila+SuprAgricola+Vii+Livezi+Paduri+Ape+Constructii+Cai
DeComunicatii, data=nnet_train, hidden=c(3,3))
> nn
Call: neuralnet(formula = Clasa3 + Clasa5 ~ SuprArabila + SuprAgricola + Vii + Livezi +
Paduri + Ape + Constructii + CaiDeComunicatii, data = nnet_train, hidden = c(3, 3))
50
23
>plot(nn)
51
52
53
> exem<-read.csv("C:/vectori.csv")
> exem
SuprArabila Ape Marimi
1
308.82 13.64 mari
2
98.59 7.10 mijlocii
3
182.57 8.63 mari
4
81.07 5.39 mijlocii
5
229.78 6.52 mici
6
120.56 5.80 mici
7
129.50 6.28 mijlocii
8
120.53 5.87 mijlocii
9
83.15 2.97 mici
10
78.45 5.07 mari
11 220.80 6.39 mari
12
118.50 5.88 mijlocii
13
186.33 14.96 mari
14
298.74 13.80 mijlocii
15
256.10 13.11 mijlocii
16
168.91 10.62 mijlocii
17
179.95 12.23 mari
18
291.76 8.25 mijlocii
19
350.96 29.39 mijlocii
20
257.72 10.71 mijlocii
21
484.10 43.20 mari
22
292.93 13.23 mici
23
294.57 346.31 mari
24
148.73 13.89 mijlocii
25
173.91 9.41 mari
26
410.51 27.27 mijlocii
27
175.34 10.98 mici
28
258.97 14.10 mici
29
352.15 13.09 mici
30
143.25 8.18 mijlocii
31
454.84 15.01 mijlocii
32
98.08 5.11 mici
33
488.56 20.89 mari
54
34
35
36
37
38
39
40
41
> names(exem)
[1] "SuprArabila" "Ape"
"Marimi"
55
X Vectorii suport
O restul
> index<-1:nrow(exem)
> index
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
[26] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
[51] 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
[76] 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
> testindex<-sample(index, trunc(length(index)/3))
> testindex
[1] 12 37 8 33 60 64 66 49 43 70 52 47 59 31 77 78 74 62 83 10 67 13 57 1 73
[26] 18 38 75 82 71
> testset<-exem[testindex,]
56
> testset
> trainset<-exem[-testindex,]
> model1<-svm(Marimi~.,data=trainset)
> plot(model1, exem)
57