Sunteți pe pagina 1din 26

Academia de Studii Economice

Proiect la INTELIGENȚĂ
COMPUTAȚIONALĂ

Realizat de
Grupa 1061
Seria Cibernetică
An universitar 2016-2017
Cuprins

Descrierea experimentului și a datelor – pagina 3


Statistici descriptive – pagina 4
Analiza Componentelor Principale – pagina 9
Clasificatorul naiv Bayesian – pagina 11
Arborele decizional – pagina 13
Algoritmul K-means – pagina 14
Algoritmul K-mendoids – pagina 19
Analiza coeficienților siluetă – pagina 21
Algoritmul Fuzzy – pagina 21
Clusterizare ierarhică – pagina 22
Rețele neuronale – pagina 23
SVM – pagina 25

2
Experiment asupra farmacocineticii
Teofilinei
Tabela Theoph conține 132 de rânduri și 5 coloane de date corespunzătoare unui experiment asupra
farmacocineticii teofilinei.1 Aceasta conține următoarele coloane:

- Subject: tip factor ce poate avea nivelele 1, 2, 3, ... , 12 ce corespund subiecților pe care s-a
facut experimentul. Ordonarea se face prin creșterea concentrației maxime de teofilină
observate;
- Wt: tip numeric (kg) ce exprimă greutatea subiectului pe care s-a facut experimentul;
- Dose: tip numeric - doza de teofilină administrată oral subiecților (mg/kg);
- Time: tip numeric - timpul de la administrarea medicamentului pana la extragerea
eșantionului (ore)
- Conc: tip numeric - concentrația teofilinei din eșantion (mg/L)

Descrierea tabelei și a datelor:


> dim(Theoph)
[1] 132 5

> names(Theoph)
[1] "Subject" "Wt" "Dose" "Time" "conc"

> str(Theoph)
132 obs. of 5 variables:
$ Subject: Ord.factor w/ 12 levels "6"<"7"<"8"<"11"<..: 11 11 11 11 11 ...
$ Wt : num 79.6 79.6 79.6 79.6 79.6 79.6 79.6 79.6 79.6 79.6 ...
$ Dose : num 4.02 4.02 4.02 4.02 4.02 4.02 4.02 4.02 4.02 4.02 ...
$ Time : num 0 0.25 0.57 1.12 2.02 ...
$ conc : num 0.74 2.84 6.57 10.5 9.66 8.58 8.36 7.47 6.89 5.94 ...

> attributes(Theoph)
$names
[1] "Subject" "Wt" "Dose" "Time" "conc"

$row.names
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13
[14] 14 15 16 17 18 19 20 21 22 23 24 25 26
[27] 27 28 29 30 31 32 33 34 35 36 37 38 39
[40] 40 41 42 43 44 45 46 47 48 49 50 51 52
[53] 53 54 55 56 57 58 59 60 61 62 63 64 65
[66] 66 67 68 69 70 71 72 73 74 75 76 77 78
[79] 79 80 81 82 83 84 85 86 87 88 89 90 91
[92] 92 93 94 95 96 97 98 99 100 101 102 103 104
[105] 105 106 107 108 109 110 111 112 113 114 115 116 117
[118] 118 119 120 121 122 123 124 125 126 127 128 129 130
[131] 131 132

> head(Theoph)
Subject Wt Dose Time conc
1 1 79.6 4.02 0.00 0.74
2 1 79.6 4.02 0.25 2.84
3 1 79.6 4.02 0.57 6.57
4 1 79.6 4.02 1.12 10.50
5 1 79.6 4.02 2.02 9.66
6 1 79.6 4.02 3.82 8.58

1
Farmacoconetic = ramură a farmacologiei care studiază fenomenele ce intervin în procesele de absorbție,
distribuție, transformare și eliminare a medicamentelor din organism.
3
Statistici descriptive:

Subject
> pie(table(Theoph$Subject))

- Din graficul anterior se observă că numărul de observații din fiecare categorie (nivel) sunt
aproximativ egale.

Wt
> quantile(Theoph$Wt,na.rm = TRUE)
0% 25% 50% 75% 100%
54.600 63.575 70.500 74.425 86.400
> summary(Theoph$Wt)
Min. 1st Qu. Median Mean 3rd Qu. Max.
54.60 63.58 70.50 69.58 74.43 86.40

 Greutatea minimă întregistrată este de 54,6 kg, iar cea maximă de 86,4 kg.
 Primele 25% de observații au greutăți mai mici decât 63,58, pe când 50% dintre acestea au
greutatea sub 70,5 kg, iar 25% au greutatea mai mare de 74,43 kg.
 Valoarea medie calculată este de 69,58.

> hist(Theoph$Wt)

Frecvența cea mai mare (peste 40 de observații) se află în intervalul 70-75 (kg), iar
histograma este asimetrică spre stânga.

4
> pie(table(Theoph$Wt))

Diagrama de mai sus confirmă faptul ca frecvența maximă o are greutatea de 70,5 kg.

> plot(Theoph$Wt)

Dose
> quantile(Theoph$Dose,na.rm = TRUE)
0% 25% 50% 75% 100%
3.1000 4.3050 4.5300 5.0375 5.8600

> summary(Theoph$Dose)
Min. 1st Qu. Median Mean 3rd Qu.
3.100 4.305 4.530 4.626 5.038
Max.
5.860

 Doza minimă administrată este de 3,1 mg/kg, iar cea maximă de 5,860 mg/kg, în timp ce me
dia vaorilor înregistrate este de 4,53.
 25% dintre observații au doza mai mică decât 4,305 mg/kg, 50% au doza mai mică de 4,53, ia
r 25% dintre observații au valori de peste 5,038.

5
> hist(Theoph$Dose)

Din histogramă se observă că cele mai multe doze au valori cuprinse între 4,5 – 5 mg/mg.
> plot(Theoph$Dose)

> pie(table(Theoph$Dose))

Din piechart-ul anterior se observă că cele mai multe doze au valori de aproximativ 4,4 și 4,53 mg/kg.

Time
> quantile(Theoph$Time,na.rm = TRUE)
0% 25% 50% 75% 100%
0.000 0.595 3.530 9.000 24.650
> summary(Theoph$Time)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.000 0.595 3.530 5.895 9.000 24.650

 Timpul minim de la administrarea dozei pana la extragerea eșationului a fost de 0 h, iar timp
ul maxim de 24,65 ore.

6
 25% dintre probe au fost exstrase la mai puțin de 0,595 ore de la adrministrarea teofilinei, 50
% la mai puțin de 3,530 ore, iar 25% dintre acestea s-au extras dupa aproximativ 9 ore.

> hist(Theoph$Time)

Din histogramă se observa că cele mai multe probe s-au extras la un timp mai scurt de 1 oră de la
administrarea teofilinei.
> plot(Theoph$Time)

Plotul de mai sus scoate foarte bine în evidență faptul că probele s-au extras respectându-se o rutină,
acestea fiind extrase la intervale de timp din ce în ce mai mari.

Conc
> quantile(Theoph$conc,na.rm = TRUE)
0% 25% 50% 75% 100%
0.0000 2.8775 5.2750 7.1400 11.4000
> summary(Theoph$conc)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.000 2.878 5.275 4.960 7.140 11.400

 Concentrația minimă de teofilină din probele extrase este de 0 mg/L, iar cea maximă este de
11,4, în timp ce media este de 4,96.
 25% dintre probe au o concentrație mai mică decât 2,878, 50% dintre aceste o concentrație
mai mică de 5,275 mg/L, în timp ce 25% dintre observații au o valoare a concentrației de
teofilină mai mare decât 7,140.

7
> hist(Theoph$conc)

Din histogramă reiese că frecvența maximă se află în intervalul 5-8, iar după această perioadă,
concentrația de teofilină din probele exstrase scade considerabil.
> plot(Theoph$conc)

Varianța
> var(Theoph$Wt, na.rm = TRUE)
[1] 83.41499
> var(Theoph$Dose, na.rm = TRUE)
[1] 0.5156306
> var(Theoph$Time, na.rm = TRUE)
[1] 47.96882
> var(Theoph$conc, na.rm = TRUE)
[1] 8.22152

Corelație
> cor(Theoph[2:5])
Wt Dose Time conc
Wt 1.0000000000 -0.9896217523 0.0004157549 -0.07177823
Dose -0.9896217523 1.0000000000 -0.0000997045 0.07697420
Time 0.0004157549 -0.0000997045 1.0000000000 -0.30360075
conc -0.0717782261 0.0769741957 -0.3036007533 1.00000000

Din matricea de corelație reies următoarele:


8
- Legătura dintre greutate și doză este inversă și foarte puternică
- Legătura dintre doza administrată si concentrația obținută este una directă și slabă
- Legătura dintre Time și concentrația obținută este una inversă și de intensitate medie.

Covarianța
> cov(Theoph[2:5])
Wt Dose Time conc
Wt 83.41498728 -6.4902379135 0.0262989822 -1.8797099
Dose -6.49023791 0.5156305980 -0.0004958651 0.1584859
Time 0.02629898 -0.0004958651 47.9688158860 -6.0291823
conc -1.87970992 0.1584858779 -6.0291822693 8.2215204

Recursivitate
> summary(lm(Theoph$conc~Theoph$Wt+Theoph$Dose+Theoph$Time))

Call:
lm(formula = Theoph$conc ~ Theoph$Wt + Theoph$Dose + Theoph$Time)

Residuals:
Min 1Q Median 3Q Max
-6.1183 -1.4233 0.3836 1.9134 5.4074

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -4.45137 23.47941 -0.190 0.849934
Theoph$Wt 0.06832 0.18329 0.373 0.709971
Theoph$Dose 1.16716 2.33131 0.501 0.617481
Theoph$Time -0.12572 0.03473 -3.620 0.000424 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.753 on 128 degrees of freedom


Multiple R-squared: 0.09907, Adjusted R-squared: 0.07796
F-statistic: 4.692 on 3 and 128 DF, p-value: 0.003837

Deoarece variabilele Wt(greutatea subiectului), Dose(doza administrată) au valori cu mult mai mari
decât 5%, modelul nu este valid, deși p-value are valoarea de 0,0038. Acest lucru este confirmat și de
Multiple R-squared care exprimă faptul ca variabilele modifică modelul în proporție de 9,9%.

Analiza Componentelor Principale

Se calculează abaterile standard:


> s<-cov(Theoph[,-1])
> R<-cor(Theoph[,-1])
> abatere<-apply(Theoph,2,sd)
> abatere
Subject Wt Dose Time conc
3.4652032535 9.1331805674 0.7180742287 6.9259523451 2.8673193757

După stabilirea componentelor principale inițiale se calculează valorile și vectorii proprii:

> eigen(s)
$values
[1] 83.9678871509 48.8606338273 7.2818708168 0.0105623688

$vectors
[,1] [,2] [,3] [,4]
[1,] 0.996654522934 0.0085898648698 0.0243480347094 -0.0775444991132
[2,] -0.077559743187 -0.0006632409287 -0.0002023818832 -0.9969874650113
[3,] 0.004964828374 -0.9891944534510 0.1465251689603 0.0002420786651
9
[4,] -0.025290287292 0.1463560985907 0.9889072287675 0.0016693308431

Se calculează abaterile standard pentru fiecare componentă indentificată


> pca<-princomp(Theoph[,-1],cor = F)
> pca
Call:
princomp(x = Theoph[, -1], cor = F)

Standard deviations:
Comp.1 Comp.2 Comp.3 Comp.4
9.1286234884 6.9635104301 2.6882531742 0.1023833524

4 variables and 132 observations.

> loadings(pca)
Loadings:
Comp.1 Comp.2 Comp.3 Comp.4
Wt 0.997
Dose -0.997
Time -0.989 0.147
conc 0.146 0.989

Comp.1 Comp.2 Comp.3 Comp.4


SS loadings 1.00 1.00 1.00 1.00
Proportion Var 0.25 0.25 0.25 0.25
Cumulative Var 0.25 0.50 0.75 1.00

Se observă din matricea de mai sus, că valoarea cea mai mare este înregistrată de prima
componentă. Pentru a decide câte componente principale se vor lua în considerare, se analizează
graficul următor. Numărul de componente principale este determinat de punctul în care panta
graficului se aplatizează brusc.
Importance of components:
Comp.1 Comp.2 Comp.3 Com
p.4
Standard deviation 9.128623488 6.9635104301 2.68825317423 0.10238335242
Proportion of Variance 0.599252893 0.3487032623 0.05196846439 0.00007538036
Cumulative Proportion 0.599252893 0.9479561552 0.99992461963 1.00000000000

Varianța surprinsă de prima componentă este de 60%, de a doua componentă de 34%, de a


treia componentă de 5%, iar de ultima componentă de 0,0075%, de aceea ne așteptăm ca analiza să
conțină 3 componente principale, deși ar fi suficiente doar primele două.

Așadar, numărul de componente principale este 3.

10
Clasificatorul naiv Bayesian: punerea problemei, predicții, matricea de confuzie

Teorema lui Bayes este una dintre teoremele fundamentale ale teoriei probabilităţiilor, care
determină probabilitatea apartenenţei evenimentelor şi a obiectelor la o anumită grupă.
>data(Theoph)
>View(Theoph)
#e1071 – pachetul pentru naiveBayes
>library(e1071)
>library(class)
>model<-naiveBayes(x = Theoph[, 2:5], y = Theoph[, 1])

Naive Bayes Classifier for Discrete Predictors

Call:
naiveBayes.default(x = Theoph[, 2:5], y = Theoph[, 1])

A-priori probabilities:
Theoph[, 1]
6 7 8 11 3
0.08333333 0.08333333 0.08333333 0.08333333 0.08333333
2 4 9 12 10
0.08333333 0.08333333 0.08333333 0.08333333 0.08333333
1 5
0.08333333 0.08333333

Conditional probabilities:
Wt
Theoph[, 1] [,1] [,2]
6 80.0 0
7 64.6 0
8 70.5 0
11 65.0 0
3 70.5 0
2 72.4 0
4 72.7 0
9 86.4 0
12 60.5 0
10 58.2 0
1 79.6 0
5 54.6 0

Dose
Theoph[, 1] [,1] [,2]
6 4.00 0
7 4.95 0
8 4.53 0
11 4.92 0
3 4.53 0
2 4.40 0
4 4.40 0
9 3.10 0
12 5.30 0
10 5.50 0
1 4.02 0
5 5.86 0

Time
Theoph[, 1] [,1] [,2]
6 5.888182 7.151650
7 5.865455 7.250075
8 5.890000 7.233919
11 5.871818 7.223542
3 5.907273 7.234519
2 5.869091 7.269680

11
4 5.940000 7.329930
9 5.868182 7.244127
12 5.876364 7.235402
10 5.915455 7.108937
1 5.950000 7.273320
5 5.893636 7.278871

conc
Theoph[, 1] [,1] [,2]
6 3.525455 2.180382
7 3.910909 2.485130
8 4.271818 2.455296
11 4.510909 2.552839
3 5.086364 2.684222
2 4.823636 3.027389
4 4.940000 2.921623
9 4.893636 2.716175
12 5.410000 3.499246
10 5.930909 3.050539
1 6.439091 3.034533
5 5.782727 3.537344

Y – vector clasă
X – matrice numerică ce conține datele analizate
[,1] – media
[,1] – deviația standard

Predicție
Se dorește stabilirea subiecților pentru primele 50 de experimente folosind Clasificatorul Naiv
Bayesian.

> predict(model,Theoph[1:50,])

Se obține următorul output:


[1] 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 8 8 3 3
[27] 3 3 3 8 8 8 8 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5
Levels: 6 7 8 11 3 2 4 9 12 10 1 5

Se afișează matricea de confuzie (valori reale pe linie și valori previzionate pe coloană):

> table(Theoph[,1],predict(model,Theoph[,-1]))
6 7 8 11 3 2 4 9 12 10 1 5
6 11 0 0 0 0 0 0 0 0 0 0 0
7 0 11 0 0 0 0 0 0 0 0 0 0
8 0 0 7 0 4 0 0 0 0 0 0 0
11 0 0 0 11 0 0 0 0 0 0 0 0
3 0 0 6 0 5 0 0 0 0 0 0 0
2 0 0 0 0 0 11 0 0 0 0 0 0
4 0 0 0 0 0 0 11 0 0 0 0 0
9 0 0 0 0 0 0 0 11 0 0 0 0
12 0 0 0 0 0 0 0 0 11 0 0 0
10 0 0 0 0 0 0 0 0 0 11 0 0
1 0 0 0 0 0 0 0 0 0 0 11 0
5 0 0 0 0 0 0 0 0 0 0 0 11

> classAgreement(table(Theoph[,1],predict(model,Theoph[,-1])))
$diag
[1] 0.9242424

$kappa
[1] 0.9173554

12
$rand
[1] 0.9861207

$crand
[1] 0.9018506

Deoarece coeficientul kappa a lui Cohen are valoarea 0,917 > 0 și este foarte apropiată de valoarea 1,
înseamnă că predicția făcută prezintă un grad foarte ridicat de încredere.

Arbore decizional:

Pentru construirea arborelui decizional se extrag două eșantioane din setul de date Theoph ce
conțin 60% și respectiv 40% din numărul total de observații. Se alege tipul de extragere cu
revenire pentru ca observațiile să aibă șanse egale de a fi extrase.

> ind<-sample(2,nrow(Theoph), replace = TRUE, prob =c(0.6,0.4))


> ind
[1] 2 2 1 2 2 2 2 2 1 2 1 2 2 1 2 1 2 1 1 2 1 2 1 1 1 2 1 1 1 2
[31] 1 1 1 1 1 2 2 2 1 2 2 1 2 1 2 2 1 1 1 1 1 1 1 2 1 1 1 1 2 2
[61] 1 2 2 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 2 2 2 2 2 1 1 2 2 1 1 1
[91] 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 2 1 1 1 1 1 2 2 1 2
[121] 1 2 2 2 1 2 2 2 2 1 2 2

 Se extrage primul set - cel de antrenare

> setantrenare<-Theoph[ind==1,]
> setantrenare
Subject Wt Dose Time conc
1 1 79.6 4.02 0.00 0.74
3 1 79.6 4.02 0.57 6.57
4 1 79.6 4.02 1.12 10.50
6 1 79.6 4.02 3.82 8.58
8 1 79.6 4.02 7.03 7.47
12 2 72.4 4.40 0.00 0.00
13 2 72.4 4.40 0.27 1.72
14 2 72.4 4.40 0.52 7.91
18 2 72.4 4.40 5.02 6.08
19 2 72.4 4.40 7.03 5.40
21 2 72.4 4.40 12.00 3.01
22 2 72.4 4.40 24.30 0.90
26 3 70.5 4.53 1.02 8.20
27 3 70.5 4.53 2.02 7.80
28 3 70.5 4.53 3.62 7.50
29 3 70.5 4.53 5.08 6.20
30 3 70.5 4.53 7.07 5.30
31 3 70.5 4.53 9.00 4.90
32 3 70.5 4.53 12.15 3.70
33 3 70.5 4.53 24.17 1.05
34 4 72.7 4.40 0.00 0.00
35 4 72.7 4.40 0.35 1.89
36 4 72.7 4.40 0.60 4.60
38 4 72.7 4.40 2.13 8.38
39 4 72.7 4.40 3.50 7.54
40 4 72.7 4.40 5.02 6.88
42 4 72.7 4.40 9.02 5.33
43 4 72.7 4.40 11.98 4.19
44 4 72.7 4.40 24.65 1.15
48 5 54.6 5.86 1.00 11.40
49 5 54.6 5.86 2.02 9.33
50 5 54.6 5.86 3.50 8.74
53 5 54.6 5.86 9.10 5.90

13
55 5 54.6 5.86 24.35 1.57
57 6 80.0 4.00 0.27 1.29
60 6 80.0 4.00 2.03 6.32
61 6 80.0 4.00 3.57 5.53
62 6 80.0 4.00 5.00 4.94
66 6 80.0 4.00 23.85 0.92
67 7 64.6 4.95 0.00 0.15
69 7 64.6 4.95 0.50 2.35
70 7 64.6 4.95 1.02 5.02
71 7 64.6 4.95 2.02 6.58
72 7 64.6 4.95 3.48 7.09
75 7 64.6 4.95 9.00 4.39
76 7 64.6 4.95 12.05 3.53
77 7 64.6 4.95 24.22 1.15
79 8 70.5 4.53 0.25 3.05
80 8 70.5 4.53 0.52 3.05
81 8 70.5 4.53 0.98 7.31
84 8 70.5 4.53 5.05 5.88
85 8 70.5 4.53 7.15 4.73
86 8 70.5 4.53 9.07 4.57
87 8 70.5 4.53 12.10 3.00
88 8 70.5 4.53 24.12 1.25
92 9 86.4 3.10 1.05 7.14
93 9 86.4 3.10 2.02 6.33
94 9 86.4 3.10 3.53 5.66
97 9 86.4 3.10 8.80 4.11
100 10 58.2 5.50 0.00 0.24
104 10 58.2 5.50 2.05 7.83
105 10 58.2 5.50 3.55 10.21
106 10 58.2 5.50 5.05 9.18
107 10 58.2 5.50 7.08 8.02
108 10 58.2 5.50 9.38 7.14
109 10 58.2 5.50 12.10 5.68
110 10 58.2 5.50 23.70 2.42
111 11 65.0 4.92 0.00 0.00
113 11 65.0 4.92 0.50 7.24
114 11 65.0 4.92 0.98 8.00
115 11 65.0 4.92 1.98 6.81
116 11 65.0 4.92 3.60 5.87
120 11 65.0 4.92 12.12 2.69
121 11 65.0 4.92 24.08 0.86
122 12 60.5 5.30 0.00 0.00
123 12 60.5 5.30 0.25 1.25
125 12 60.5 5.30 1.00 7.82
127 12 60.5 5.30 3.52 9.75
129 12 60.5 5.30 7.07 6.59
130 12 60.5 5.30 9.03 6.11
132 12 60.5 5.30 24.15 1.17

 Se extrage cel de-al doilea set - setul de testare

> settestare<-Theoph[ind==2,]
> settestare
Subject Wt Dose Time conc
2 1 79.6 4.02 0.25 2.84
5 1 79.6 4.02 2.02 9.66
7 1 79.6 4.02 5.10 8.36
9 1 79.6 4.02 9.05 6.89
10 1 79.6 4.02 12.12 5.94
11 1 79.6 4.02 24.37 3.28
15 2 72.4 4.40 1.00 8.31
16 2 72.4 4.40 1.92 8.33
17 2 72.4 4.40 3.50 6.85
20 2 72.4 4.40 9.00 4.55
23 3 70.5 4.53 0.00 0.00
14
24 3 70.5 4.53 0.27 4.40
25 3 70.5 4.53 0.58 6.90
37 4 72.7 4.40 1.07 8.60
41 4 72.7 4.40 7.02 5.78
45 5 54.6 5.86 0.00 0.00
46 5 54.6 5.86 0.30 2.02
47 5 54.6 5.86 0.52 5.63
51 5 54.6 5.86 5.02 7.56
52 5 54.6 5.86 7.02 7.09
54 5 54.6 5.86 12.00 4.37
56 6 80.0 4.00 0.00 0.00
58 6 80.0 4.00 0.58 3.08
59 6 80.0 4.00 1.15 6.44
63 6 80.0 4.00 7.00 4.02
64 6 80.0 4.00 9.22 3.46
65 6 80.0 4.00 12.10 2.78
68 7 64.6 4.95 0.25 0.85
73 7 64.6 4.95 5.00 6.66
74 7 64.6 4.95 6.98 5.25
78 8 70.5 4.53 0.00 0.00
82 8 70.5 4.53 2.02 7.56
83 8 70.5 4.53 3.53 6.59
89 9 86.4 3.10 0.00 0.00
90 9 86.4 3.10 0.30 7.37
91 9 86.4 3.10 0.63 9.03
95 9 86.4 3.10 5.02 5.67
96 9 86.4 3.10 7.17 4.24
98 9 86.4 3.10 11.60 3.16
99 9 86.4 3.10 24.43 1.12
101 10 58.2 5.50 0.37 2.89
102 10 58.2 5.50 0.77 5.22
103 10 58.2 5.50 1.02 6.41
112 11 65.0 4.92 0.25 4.86
117 11 65.0 4.92 5.02 5.22
118 11 65.0 4.92 7.03 4.45
119 11 65.0 4.92 9.03 3.62
124 12 60.5 5.30 0.50 3.96
126 12 60.5 5.30 2.00 9.72
128 12 60.5 5.30 5.07 8.57
131 12 60.5 5.30 12.05 4.57

 Se formulează dependența dintre variabile:

> dependenta<-conc~Wt+Dose+Time

 Se construiește arborele decizional:

> arboredec<-ctree(dependenta, data = setantrenare)


> arboredec

Conditional inference tree with 4 terminal nodes

Response: conc
Inputs: Wt, Dose, Time
Number of observations: 81

1) Time <= 0.35; criterion = 0.999, statistic = 12.347


2)* weights = 12
1) Time > 0.35
3) Time <= 9.38; criterion = 1, statistic = 42.959
4) Dose <= 4.95; criterion = 0.964, statistic = 6.274
5)* weights = 39
4) Dose > 4.95
6)* weights = 13
15
3) Time > 9.38
7)* weights = 17

> plot(arboredec,type = "simple")

Pentru construirea arborelui au fost luate în considerare 66 de observații, iar acesta conține 3 noduri
terminale.
o Pentru Time <= 0,35 se obține nodul 2 ce conține 12 observații cu media
concentrației (variabila conc) de 0,861.
o Pentru Time > 0,35 dar <= 9,38
 Dose <= 4,95 se obține nodul 5 cu 39 de observații și concentrația de 6,258
 Dose > 4,95 se obține nodul 6 cu 13 observații si concentrația de 8,309
o Pentru Time <= 9,38 se obține nodul 7 cu 17 observații și o concentrație de 2,249
o Pentru Time > 9,38 se obține nodul 5 cu 9 observații și o concentrație medie de
1,866.

 Matricea de confuzie obținută este următoarea:

> matriceconfuzie<-table(setantrenare$conc,predict(arboredec))
> matriceconfuzie
1.155 1.86555555555556 6.43489361702128
0 5 0 0
0.15 1 0 0
0.85 1 0 0
0.86 0 1 0
0.92 0 1 0
1.05 0 1 0
1.15 0 1 0
1.25 0 1 0
1.29 1 0 0
1.57 0 1 0
1.89 0 0 1
2.35 0 0 1
2.89 0 0 1
3.01 0 1 0
3.08 0 0 1
3.28 0 1 0
3.62 0 0 1
3.7 0 1 0
4.11 0 0 1
4.4 1 0 0
16
4.73 0 0 1
4.86 1 0 0
4.9 0 0 1
5.22 0 0 1
5.25 0 0 1
5.33 0 0 1
5.4 0 0 1
5.53 0 0 1
5.63 0 0 1
5.66 0 0 1
5.67 0 0 1
5.87 0 0 1
5.88 0 0 1
5.9 0 0 1
6.08 0 0 1
6.11 0 0 1
6.2 0 0 1
6.41 0 0 1
6.57 0 0 1
6.58 0 0 1
6.81 0 0 1
6.89 0 0 1
6.9 0 0 1
7.09 0 0 1
7.14 0 0 2
7.24 0 0 1
7.37 0 0 1
7.5 0 0 1
7.54 0 0 1
7.56 0 0 1
7.8 0 0 1
7.82 0 0 1
7.83 0 0 1
7.91 0 0 1
8 0 0 1
8.33 0 0 1
8.74 0 0 1
9.03 0 0 1
9.33 0 0 1
10.21 0 0 1
11.4 0 0 1

 Predicția se face cu ajutorul setului de testare extras anterior.

> predictie<-predict(arboredec, newdata = testdata)


> predictie
conc
[1,] 0.8608333
[2,] 6.2579487
[3,] 6.2579487
[4,] 6.2579487
[5,] 2.2494118
[6,] 2.2494118
[7,] 6.2579487
[8,] 6.2579487
[9,] 6.2579487
[10,] 6.2579487
[11,] 0.8608333
[12,] 0.8608333
[13,] 6.2579487
[14,] 6.2579487
[15,] 6.2579487
[16,] 0.8608333
[17,] 0.8608333
[18,] 8.3092308
17
[19,] 8.3092308
[20,] 8.3092308
[21,] 2.2494118
[22,] 0.8608333
[23,] 6.2579487
[24,] 6.2579487
[25,] 6.2579487
[26,] 6.2579487
[27,] 2.2494118
[28,] 0.8608333
[29,] 6.2579487
[30,] 6.2579487
[31,] 0.8608333
[32,] 6.2579487
[33,] 6.2579487
[34,] 0.8608333
[35,] 0.8608333
[36,] 6.2579487
[37,] 6.2579487
[38,] 6.2579487
[39,] 2.2494118
[40,] 2.2494118
[41,] 8.3092308
[42,] 8.3092308
[43,] 8.3092308
[44,] 0.8608333
[45,] 6.2579487
[46,] 6.2579487
[47,] 6.2579487
[48,] 8.3092308
[49,] 8.3092308
[50,] 8.3092308
[51,] 2.2494118

 Pentru a verifica fidelitatea datelor obținute se apelează la coeficientul lui Cohen – kappa.
> library(e1071)
> library(class)
> classAgreement(predictie)
$diag
[1] 0.04204734
$kappa
[1] -0.003191612
$rand
[1] 0.03341356
$crand
[1] 0

Deoarece acesta are o valoare negativă, datele din predicție nu sunt de încredere.

Algoritmul K-means

K-means este un algoritm de clusterizare non-ierarică care împarte un set de date în clustere folosind
diferite criterii pentru gruparea instantelor. Pentru împărțirea pe clustere se folosesc variabilele
numerice Wt, Time, Doze, conc și se exclude variabila factor Subject.

> km<-kmeans(Theoph[,-1],3)
K-means clustering with 3 clusters of sizes 41, 39, 52

Cluster means:
Wt Dose Time conc
1 59.13902 5.432683 7.293902 5.226829
2 80.44103 3.820000 8.102308 4.486923
3 69.67500 4.594038 3.135577 5.105577
18
Within cluster sum of squares by cluster:
[1] 3159.922 3978.248 1416.104
(between_SS / total_SS = 53.4 %)

Available components:

[1] "cluster" "centers" "totss" "withinss"


[5] "tot.withinss" "betweenss" "size" "iter"
[9] "ifault"

Centroizii clusterelor sunt:


> centre<-km$centers[km$cluster,]
> km$centers
Wt Dose Time conc
1 59.13902 5.432683 7.293902 5.226829
2 80.44103 3.820000 8.102308 4.486923
3 69.67500 4.594038 3.135577 5.105577

Valorile oulier sunt:


> distante<-sqrt(rowSums((Theoph[,-1]-centre)^2))
> outliers<-order(distante,decreasing=T)[1:5]
> outliers
[1] 33 88 44 22 121

Algoritmul K-mendoids

Este similară clusterizării K-means cu deosebirea că: în algoritmul K-means cluster-ul este reprezentat
prin centrul său, iar la algoritmul K-mendoids clusterul este reprezentat prin cel mai apropiat obiect d
e centrul său. Clusterizarea K-mendoids este mai robustă în prezența observațiilor atipice (outliers).

Un mendoid este un obiect reprezenativ al unui set de date sau al unui cluster, cel mai apropiat de ce
ntrul clusterului. Mendoizii sunt un concept sunt întotdeauna elemente ale setului de date.

> pamk.result<-pamk(Theoph[,-1])
$pamobject
Medoids:
ID Wt Dose Time conc
61 61 80.0 4.00 3.57 5.53
88 88 70.5 4.53 24.12 1.25
83 83 70.5 4.53 3.53 6.59
104 104 58.2 5.50 2.05 7.83
Clustering vector:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 1 1 1 1 1 1 1 1 1 2 3 3 3 3 3
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
3 3 3 3 3 2 3 3 3 3 3 3 3 3 3 3
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
2 3 3 3 3 3 3 3 3 3 3 2 4 4 4 4
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
4 4 4 4 4 4 2 1 1 1 1 1 1 1 1 1
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
1 2 3 3 3 3 3 3 3 3 3 3 2 3 3 3
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
3 3 3 3 3 3 3 2 1 1 1 1 1 1 1 1
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
1 1 2 4 4 4 4 4 4 4 4 4 4 2 3 3
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
3 3 3 3 3 3 3 3 2 4 4 4 4 4 4 4
129 130 131 132
4 4 4 2

19
Objective function:
build swap
5.835254 5.699591

Available components:
[1] "medoids" "id.med" "clustering" "objective"
[5] "isolation" "clusinfo" "silinfo" "diss"
[9] "call" "data"

Datele au fost împărțite în 4 clustere.


$nc
[1] 4

$crit
[1] 0.0000000 0.3849222 0.3062811 0.4034491 0.3567382 0.3120731
[7] 0.3105931 0.3413794 0.3565132 0.3859574

 Matrice de confuzie

> table(Theoph$Subject, pamk.result$pamobject$clustering)

1 2 3 4
6 10 1 0 0
7 0 1 10 0
8 0 1 10 0
11 0 1 10 0
3 0 1 10 0
2 0 1 10 0
4 0 1 10 0
9 10 1 0 0
12 0 1 0 10
10 0 1 0 10
1 10 1 0 0
5 0 1 0 10

20
Analiza coeficienților siluetă

Silueta se calculeaza ca silueta unui obiect, silueta medie a unui cluster, silueta medie globală.
Acest indice vrea să reprezinte cât de bine este separat un cluster de vecinii săi (deci cât de apropiate
sunt elementele unui cluster (distanța intracluster) și cât de mare este distanța dintre clustere
(distanța interclustere)). Prin calculul siluetei se poate decide asupra validității de clustere.

 Dacă S (i) este apropiat de 1, atunci obiectul este bine clasificat (este asociat cu clusterul
adecvat).
 Dacă S (i) este aproape nul, atunci obiectul poate fi clasificat şi în următorul cluster apropiat
(obiectul este situat similar în raport cu ambele clustere)
 Dacă S (i) este apropiat de –1, atunci obiectul este clasificat eronat (el este separat faţă de
celelalte clustere).

Este propusă următoarea interpretare a coeficientului siluetă după valoarea sa:

 0.71 - 1.00 s-a determinat o structură puternică (bine definită) de clustere;


 0.51 - 0.70 s-a determinat o structură acceptabilă
 0.26 - 0.50 structura determinată este slabă, poate fi artificială
 ≤ 0.25 structura determinată este artificială

Toate cele 4 clustere au structuri slabe deoarece siluetele medii sunt de 0.46 ,0.46, 0.34 și
respectiv 0.44. De asemenea, silueta medie globală este slabă, având valoarea de 0.4, ceea ce
înseamnă că poate fi artificială.

Fuzzy C-means

Pentru acest timp de clusterizare se alege numărul de clustere, care în exemplul următor este
de 3, numărul de iterații dorite (80) și gradul de fuzificare 2 (neapărat mai mare decât 1).

> result<-cmeans(Theoph[,-1],3,80,m=2,method = "cmeans")


Fuzzy c-means clustering with 3 clusters

Cluster centers:

21
Wt Dose Time conc
1 80.85504 3.790201 5.352993 5.087626
2 59.75066 5.384141 5.123846 5.838824
3 70.54453 4.537232 5.416048 5.086112

Clusterele se pot reprezenta grafic astfel:


- se aleg două atribute numerice (Wt = greutatea subiectului și conc = concentrația de
teofilină)
- se reprezintă centroizii clusterelor (marcați în grafic cu *)

> plot(Theoph[,2], Theoph[,5], col = result$cluster+1)


> points(result$centers[,c(1,2)],col = 2:4, pch=8,cex=2)

Se afișează gradul de apartenență la clustere a primelor 5 observații.

> result$membership[1:5,]
1 2 3
1 0.6726414 0.07382893 0.2535296
2 0.7334840 0.05599523 0.2105208
3 0.7625661 0.04881539 0.1886185
4 0.6719416 0.07568379 0.2523746
5 0.7281496 0.05831433 0.2135360

Matricea de confuzie:
> table(Theoph$Subject, result$cluster)
1 2 3
6 11 0 0
7 0 10 1
8 0 0 11
11 0 7 4
3 0 0 11
2 0 0 11
4 0 0 11
9 11 0 0
12 0 11 0
10 0 11 0
1 11 0 0
5 0 11 0

Clusterizare ierarhică

Algoritmii de clusterizare ierarhică produc o secvență de partiții de același fel. Semilaritatea


dintre fiecare pereche de documente este stocată într-o matrice de similaritate nXn. La fiecare pas,
algoritmul fie unește două clustere, fie împarte un cluster în două. Rezultatul unei clusterizări poate
22
fi văzut sub forma unei structuri arborescente numită dendogramă, cu un cluster rădăcină care
conține toate documentele colecției și multe clustere la bază, fiecare conținând un singur document.
În dendogramă cu cât urcăm în ierarhie cu atat clusterele sunt mai generale.

Se crează o dendogramă pentru primele 50 de înregistrări


> dendograma=hclust(dist(Theoph[1:50,]))
> plot(dendograma)

Dendograma se poate secționa după nivelul trei pentru a putea obține 3 clustere:

> rect.hclust(dendograma,k=3,border = "red")

Rețele neuronale

Se extrage un eșantion de 20 de observații:

> size.sample<-20
> trainset<-Theoph[sample(1:nrow(Theoph),size.sample),]

Se obține setul de date de antrenare:


Subject Wt Dose Time conc
46 5 54.6 5.86 0.30 2.02
110 10 58.2 5.50 23.70 2.42
3 1 79.6 4.02 0.57 6.57
12 2 72.4 4.40 0.00 0.00
65 6 80.0 4.00 12.10 2.78
23
79 8 70.5 4.53 0.25 3.05
123 12 60.5 5.30 0.25 1.25
97 9 86.4 3.10 8.80 4.11
52 5 54.6 5.86 7.02 7.09
43 4 72.7 4.40 11.98 4.19
87 8 70.5 4.53 12.10 3.00
78 8 70.5 4.53 0.00 0.00
61 6 80.0 4.00 3.57 5.53
64 6 80.0 4.00 9.22 3.46
131 12 60.5 5.30 12.05 4.57
103 10 58.2 5.50 1.02 6.41
130 12 60.5 5.30 9.03 6.11
132 12 60.5 5.30 24.15 1.17
55 5 54.6 5.86 24.35 1.57
63 6 80.0 4.00 7.00 4.02

Se adaugă în rețeaua neuronală 3 dintre subiecții analizați


> trainset$cmp6<-c(trainset$Subject=='6')
> trainset$cmp12<-c(trainset$Subject=='12')
> trainset$cmp8<-c(trainset$Subject=='8')

Se antrenează rețeaua neuronală ce conține 2 noduri în stratul ascuns


> retea<-neuralnet(cmp12+cmp10+cmp5~Wt+Time+Dose+conc,data=trainset,hidden=
+c(2,2))

> predictie <- compute(retea, Theoph[,-1])$net.result


> maxid<-function(argument){return(which(argument==max(argument)))}
> idx<- apply( predictie, c(1), maxid)
> idx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 1 2 2 2 2 2 3 2 2 2 1 1 2 2 2
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
2 3 3 2 2 2 1 2 2 2 2 2 3 2 2 2
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
2 1 1 2 2 2 2 3 3 2 2 2 1 3 2 2
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
2 2 2 2 2 2 2 1 1 1 2 2 3 1 3 2
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
2 2 1 1 3 2 2 2 2 2 2 2 2 1 3 3
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
2 2 2 3 2 2 2 2 1 2 2 2 3 1 1 3
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
2 2 2 1 2 2 2 2 2 2 2 2 2 2 1 2
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
2 2 2 2 3 2 2 2 2 1 1 2 2 2 2 2
129 130 131 132
2 2 2 2
24
 Matricea de confuzie:

> prediction <- c('6','12','8')[idx]


> table(prediction,Theoph$Subject)

prediction 6 7 8 11 3 2 4 9 12 10 1 5
12 5 8 7 9 9 7 7 6 9 10 8 9
6 4 2 1 1 1 2 2 3 2 1 2 1
8 2 1 3 1 1 2 2 2 0 0 1 1

> classAgreement(table)
$diag
[1] 0.07575757576

$kappa
[1] -0.00826446281

$rand
[1] 0.4594031922

$crand
[1] -0.002771035797

Deoarece coeficientul kappa are valoare negativă, înseamnă că datele nu sunt fidele (nu sunt de
încredere).

SVM: punerea problemei, grafice, interpretări, predicții, matricea de confuzie.

> model<-svm(Subject~.,data=Theoph, method = "C-classification", kernel = "


radial",cost = 10, gamma = 0.1)
> summary(model)

Call:
svm(formula = Subject ~ ., data = Theoph, method = "C-classification",
kernel = "radial", cost = 10, gamma = 0.1)

Parameters:
SVM-Type: C-classification
SVM-Kernel: radial
cost: 10
gamma: 0.1

Number of Support Vectors: 117

( 10 11 11 11 8 8 11 11 4 10 11 11 )

Number of Classes: 12

Levels: 6 7 8 11 3 2 4 9 12 10 1 5

> predictie<-predict(model,Theoph[,-1])
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
6 6 6 1 1 1 1 1 1 1 1 2 2 4 4 4
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
4 4 4 4 2 2 8 8 3 3 3 3 3 8 8 8
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
2 2 2 4 4 4 4 4 4 4 4 2 5 5 5 5
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
25
6 6 7 7 7 11 11 11 11 7 7 7 11 8 8 8
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
3 3 3 3 8 8 8 2 9 9 9 9 9 9 9 9
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
9 9 9 10 10 10 10 10 10 10 10 10 10 10 7 11
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
11 11 11 11 11 7 7 7 11 12 12 12 12 12 12 12
129 130 131 132
12 12 12 12
Levels: 6 7 8 11 3 2 4 9 12 10 1 5

 Matricea de confuzie:

> confuzie<-table(pred=predictie,true = Theoph[,1])

pred 6 7 8 11 3 2 4 9 12 10 1 5
6 11 0 0 0 0 0 0 0 0 0 3 0
7 0 6 0 4 0 0 0 0 0 0 0 0
8 0 0 6 0 5 0 0 0 0 0 0 0
11 0 5 0 7 0 0 0 0 0 0 0 0
3 0 0 4 0 5 0 0 0 0 0 0 0
2 0 0 1 0 1 4 3 0 0 0 0 0
4 0 0 0 0 0 7 8 0 0 0 0 0
9 0 0 0 0 0 0 0 11 0 0 0 0
12 0 0 0 0 0 0 0 0 11 0 0 0
10 0 0 0 0 0 0 0 0 0 11 0 0
1 0 0 0 0 0 0 0 0 0 0 8 0
5 0 0 0 0 0 0 0 0 0 0 0 11

26

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