Você está na página 1de 21

LISTA 4

CIENCIA DE DADOS

PROFESSOR:
PEDRO ALBERTO MORETTIN

ESTUDANTE:
JORGE EDUARDO ORTIZ AGUIRRE
11031541
jeortiza3@gmail.com

INSTITUTO DE MATEMÁTICAS E ESTADÍSTICA


DEPARTAMENTO DE ESTADÍSTICA
SÃO PAULO - SP
2020
Presentação do Trabalho

Para a solução da lista 4 use o Software RStudio - Version 1.2.5033, importando as seguentes li-
brerias: library(car), library(tidyverse), library(broom), library(caret), library(glmnet),
library(ggthemes), library(magrittr), library(gdata), library(ggplot2), library(ggpubr),
library(gridExtra), library(ISLR), library(leaps), library(psych), library(dplyr), library(sandwich);
library(lmtest); library(tseries); library(astsa); library(GGally); library(knitr); library(kableExtra);
library(corrplot); library(class); library(texreg); library(xtable); library(MASS); library(e1071);
library(kernlab); library(RColorBrewer)

Para o exercicios 1, 2, 3 e 4 fiz programa em R

1
1. Considere o conjunto de dados Weekly do pacote ISLR, contendo 1.089 retornos semanais de
açoes de 1990 a 2010.
a) Calcule algumas medidas numéricas dos dados, como média, variância, quantis etc.
b) Use o conjunto de dados e ajuste uma regressão logı́stica, com Direction (up and down)
como variável resposta e variável defasada Lag 1 como preditora. Comente os resultados.
c) Repita (b), agora tendo como preditores Lag1 e Lag2. Comente.
d) Ajuste uma regressão logı́stica usando como perı́odo de treinamento os dados de 1990 a 2008
como Lag2 como preditor. Obtenha a matriz de confusão e a taxa de erro de classificação
para o perı́odo de teste, 2009-2010.
e) Repita (d) usando KNN, com K=1.
d) Qual método fornece os melhores resultados.
Solução 1: a)
> set.seed(123)
> summary(Weekly)

> kable(Weekly %>%


gather(Variable, value, starts with(’Lag’), Today) %>%
group by(Variable, Direction) %>%
summarise(Min = min(value),
Q1 = quantile(value, 0.25),
Median = median(value),
Mean = mean(value),
Q3 = quantile(value, 0.75),
Max = max(value)),
digits = 5, format = ’latex’) %>%
kable styling(’striped’) %>%
row spec(2*1:6, background = ’gray50’) %>%
column spec(1:2, bold = T)

2
Variable Direction Min Q1 Median Mean Q3 Max
Lag1 Down -9.399 -0.937 0.382 0.282 1.589 12.026
Lag1 Up -18.195 -1.237 0.099 0.045 1.313 10.707
Lag2 Down -18.195 -1.307 0.154 -0.040 1.302 10.491
Lag2 Up -11.050 -1.001 0.299 0.304 1.463 12.026
Lag3 Down -10.538 -1.155 0.250 0.208 1.406 10.491
Lag3 Up -18.195 -1.173 0.224 0.099 1.417 12.026
Lag4 Down -18.195 -1.154 0.224 0.200 1.442 12.026
Lag4 Up -9.399 -1.158 0.241 0.102 1.352 10.707
Lag5 Down -18.195 -1.094 0.328 0.188 1.502 10.491
Lag5 Up -11.050 -1.201 0.128 0.102 1.338 12.026
Today Down -18.195 -2.293 -1.334 -1.747 -0.592 -0.002
Today Up 0.010 0.630 1.247 1.667 2.215 12.026

Das anteriores tabelas podemos decir que o conjunto de dados Weekly, têm nove (9) variáveis.
Logo vamos a mostrar a correlação com sua respectiva gráfica.

> cor(Weekly[, -9])


> cor test <- cor.mtest(Weekly[,1:8], conf.level = .90)
> corrplot(cor(Weekly[,1:8]), method = ‘color’,
order = ‘hclust’, addrect = 3,
p.mat = cor test$p, sig.level = 0.1, tl.col = ‘black’)

Matriz Correlação Gráfica Correlação

A correlação entre as variaveis ”lag” e today’s são perto de zero. A unica correlação substancial é
entre ”Year” e ”Volumen”. Quando plotamos ”Volumen”, vemos que ele aumenta com o tempo.

3
> Weekly %>%
ggpairs(aes(col = Direction, fill = Direction),
lower = list(continuous = wrap(‘smooth loess’, alpha = 0.5),
combo = wrap(‘facetdensity’, alpha = 0.5)),
diag = list(continuous = wrap(‘densityDiag’,alpha = 0.5)),
upper = list(combo = wrap(‘dot’, alpha = 0.5)))

b) Para fazer a regressão logı́stica precisamos de las siguientes linea de comando


> model.lag1 <- glm(Direction ∼ Lag1, data = Weekly, family = “binomial”)
> summary(model.lag1)
Call:
glm(formula = Direction ∼ Lag1, family = binomial, data = Weekly))
Prior probabilities of groups:
Min 1Q Median 3Q Max
-1.456 -1.263 1.041 1.087 1.277

Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.2302 0.0612 3.76 0.0002
Lag1 -0.0431 0.0262 -1.64 0.1000
- - -
Signif. codes: 0‘∗∗∗ ’ 0.001‘∗∗ ’ 0.01‘∗ ’ 0.5‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 1496.2 on 1088 degrees of freedom
Residual deviance: 1493.5 on 1087 degrees of freedom
AIC: 1497.5
Number of Fisher Scoring iterations: 4

4
Podemos ver que “Lag1” não é predictor estatı́stico significante pois seu p-value é maior que 0.05

c) Para fazer a regressão logı́stica precisamos de las siguientes linea de comando


> model.lag1 <- glm(Direction ∼ Lag1 + Lag2, data = Weekly, family = “binomial”)
> summary(model.lag1)
Call:
glm(formula = Direction ∼ Lag1 + Lag2, family = binomial, data = Weekly)
Prior probabilities of groups:
Min 1Q Median 3Q Max
-1.623 -1.261 1.001 1.083 1.506

Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.2212 0.0615 3.60 0.0003
Lag1 -0.0387 0.0262 -1.48 0.1397
Lag2 0.0602 0.0265 2.27 0.0232
- - -
Signif. codes: 0‘∗∗∗ ’ 0.001‘∗∗ ’ 0.01‘∗ ’ 0.5‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 1496.2 on 1088 degrees of freedom
Residual deviance: 1488.2 on 1086 degrees of freedom
AIC: 1494.2

Number of Fisher Scoring iterations: 4

Vemos que “Lag2” é a unico predictor estatı́stico significante pois seu p-value é menor que 0.05.

d) Vamos ajustar os dados usando regressão logı́stica usando como perı́odo de treinamento < 2009
y teste 2009 - 2012.
> train.data <- Weekly[Weekly$Year <= 2008,]
> test.data <- Weekly[Weekly$Year > 2008,]
> model.logreg.lag2 <- glm(Direction ∼ Lag2, data = train.data, family = ’binomial’)
> summary(model.logreg.lag2)
Call:
glm(formula = Direction ∼ Lag2, family = ‘‘binomial’’, data = train.data)
Prior probabilities of groups:
Min 1Q Median 3Q Max
-1.536 -1.264 1.021 1.091 1.368

Coefficients:
Estimate Std. Error z value Pr(>|z|)

(Intercept) 0.2033 0.0643 3.16 0.0016 ∗

Lag2 0.0581 0.0287 2.02 0.0430
- - -
Signif. codes: 0‘∗∗∗ ’ 0.001‘∗∗ ’ 0.01‘∗ ’ 0.5‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 1354.7 on 984 degrees of freedom
Residual deviance: 1350.5 on 983 degrees of freedom
AIC: 1354.5

Number of Fisher Scoring iterations: 4

5
> pred <- predict(model.logreg.lag2, newdata = test.data, type = ‘response’)
> pred values <- ifelse(pred >= 0.5, ‘Up’, ‘Down’)
> mat.conf <- table(pred values, test.data$Direction)

Real Value
Pred Value
Down Up
Down 9 5
Up 34 56
Accuracy: 0.625

Concluimos, que têm uma acurácia del 62.5%, isto quer dizer que 37.5% é o taxa de erro de
classifcação. Também podemos dizer que, durante semanas en que as ações ou mercado esten alto,
o modelo está certo em um 91.8% pois (56/(56+5). Logo para semanas en que as ações esten ou
mercado este baixo, o modelo está certo en um 20.9% pois (9/(9+34).
e)
> set.seed(1)
> model.knn <- knn(train = data.frame(train.data$Lag2),
test = data.frame(test.data$Lag2),
cl = train.data$Direction, k = 1)
> mat.conf <- table(model.knn, test.data$Direction)

Real Value
Pred Value
Down Up
Down 21 30
Up 22 31
Accuracy: 0.5

Concluimos, que têm uma acurácia del 50%, isto quer dizer que 50% é o taxa de erro de classifcação.
Também podemos dizer que, durante semanas en que as ações ou mercado esten alto, o modelo
está certo em um 51% pois (31/(31+30). Logo para semanas en que as ações esten ou mercado
este baixo, o modelo está certo en um 49% pois (21/(21+22).

f) Se comparamos a taxa de error de classificação, observamos que a regressão logı́stica têm taxa
de erro mı́nima, seguida do KNN.

6
2. Considere o conjunto de dados Auto do pacote ISLR.
a) Crie uma variável binária, mpg1, que é igual a 1 se mpg1 for maior que sua mediana, e
mpg1 iguak a zero, se mpg1 for menor que sua mediana. (Use a função (data.frame)()
para criar um conjunto de dados contendo mpg1 e as outras variáveis do conjunto Auto).
b) Faça gráficos para investigar a associação entre mpg1 e as outras variáveis (e.g., draftsman
display, boxplots. Divida os dados en conjunto de treinamento e de teste.
c) Use análise discriminante linear de Fisher para prever mpg1 usando os preditores que você
acha que sejam mais associados com ela, usando o item (b). Qual a taxa de erros do conjunto
teste?
d) Use KNN, com vários valores de K, e determine a taxa de erros do conjunto teste. Qual
valor de K é melhor nesse caso?.
e) Qual classificador você julga que é melhor.

Solução 2: a) Criando uma variável binária mpg1: 1 se for > mediana ou 0 caco contrario.
> data(‘Auto’)
> df = data.frame(Auto)
> mpg1 <- rep(0,length(df$mpg))

Apresento duas maneras de executarlo


> for (i in 1:length(df$mpg)) {
if(df$mpg[i] > median(df$mpg)){
mpg1[i] = 1
}
}
A outra manera
> mpg1[df$mpg > median(df$mpg)] <- 1

> Auto <- data.frame(Auto, mpg1)

7
b) > pairs(Auto)

> boxplot(cylinders ∼ mpg1, data = Auto, main = “cylinders vs mpg1”)


> boxplot(displacement ∼ mpg1, data = Auto, main = “displacement vs mpg1”)

> boxplot(horsepower ∼ mpg1, data = Auto, main = “horsepower vs mpg1”)


> boxplot(weight ∼ mpg1, data = Auto, main = “weight vs mpg1”)

8
> boxplot(acceleration ∼ mpg1, data = Auto, main = “acceleration vs mpg1”)
> boxplot(year ∼ mpg1, data = Auto, main = “year vs mpg1”)

> boxplot(origin ∼ mpg1, data = Auto, main = “origin vs mpg1”)

Dividir os dados en conjunto de treinamento e de teste


> training.samples <- createDataPartition(df$mpg, p = 0.80, list = FALSE)
> train.data = df[training.samples, ]
> test.data = df[-training.samples, ]

c) Os preditores que estan mais associados com“mpg1” são ”cylinder”; “displacement”; “horse-
power” and “weight”, fazemos um análise discriminante linear de fisher.
Call:
lda (Desc Disco ∼ cylinders + displacement + horsepower + weight, data = train.data)

Prior probabilities of groups:


0 1
0.5015873 0.4984127

Group means:
cylinders displacement horsepower weight
0 6.791139 273.9494 129.34177 3624.348
1 4.203822 116.5510 78.51592 2340.102

Coefficients of linear discriminants:


LD1
cylinders -0.4498211970
displacement -0.0019477614
horsepower 0.0040054655
weight -0.0009217113

9
> pred.lda <- predict(model.lda, test.data)
> table(pred.lda$class, test.data$mpg1)

R V
P V
0 1
0 32 1
1 6 38
Accuracy: 0.9

P V = Predict Value, and R V = Real Value


Concluimos que têm uma taxa de error do conjunto teste de 10%.
d) Usamos KNN com vários valores de K.
> set.seed(1)
> model.knn <- knn(train = data.frame(train.data$cylinders, train.data$displacement,
train.data$horsepower, train.data$weight),
test = data.frame(test.data$cylinders, test.data$cylinders,
test.data$horsepower, test.data$weight),
cl = train.data$mpg1, k = 1)
> mat.conf <- table(model.knn, test.data$mpg1)

R V
P V
0 1
0 34 16
1 4 23
Accuracy: 0.74

Concluimos que temos uma taxa de error de teste de 26% para K=1.
> model.knn <- knn(train = data.frame(train.data$cylinders, train.data$displacement,
train.data$horsepower, train.data$weight),
test = data.frame(test.data$cylinders, test.data$cylinders,
test.data$horsepower, test.data$weight),
cl = train.data$mpg1, k = 10)
> mat.conf <- table(model.knn, test.data$mpg1)

R V
P V
0 1
0 30 5
1 8 34
Accuracy: 0.83

Concluimos que temos uma taxa de error de teste de 17% para K=10.

10
> set.seed(1)
> model.knn <- knn(train = data.frame(train.data$cylinders, train.data$displacement,
train.data$horsepower, train.data$weight),
test = data.frame(test.data$cylinders, test.data$cylinders,
test.data$horsepower, test.data$weight),
cl = train.data$mpg1, k = 100)
> mat.conf <- table(model.knn, test.data$mpg1)

R V
P V
0 1
0 28 2
1 10 37
Accuracy: 0.84

Concluimos que temos uma taxa de error de teste de 16% para K=100.

e) Se comparamos a taxa de error dos classificadores, observamos que análise discriminante de


Fisher (LDA) têm taxa de erro menor que KNN = 1, 10 e 100. Portanto é melhor LDA

3. Dadas as observações abaixo (n = 7, p = 2), faça um gráfico no plano (X1 , X2 ).


a) Use o classificador de margem máxima e dê a regra de classificação. Obtenga a equação do
hiperplano separador.
b) No Gráfico, indique a margem e os vetores suporte para CMM.
c) Cacule o valor da margem. O que acontece com o classificador se modificarmos um pouco a
sétima observação?

Obs, X1 X1 Y
1 3 4 Azul
2 2 2 Azul
3 4 4 Azul
4 1 4 Azul
5 2 1 Vermelho
6 4 3 Vermelho
7 4 1 Vermelho

11
Solução 3: a)
> X1 <- c(3,2,4,1,2,4,4)
> X2 <- c(4,2,4,4,1,3,1)
> Y <- c(“Azul”,“Azul”,“Azul”,“Azul”,“Vermelho”,“Vermelho”,“Vermelho”)
> df <- data.frame(X1,X2,Y)
> p <- ggplot() +
geom point(data = df, aes(x = X1, y = X2, color = Y),size=3) +
scale color manual(values = c(“Azul” = “Blue”, “Vermelho” = “red”)) +
coord cartesian(xlim = c(0, 5), ylim = c(0, 5))
>p

Como vemos na gráfica, o separador ótimo no hiperplano deve estar entre as observações (2,1) e
(2,2), e entre as observações (4,3 ) e (4,4). Então é uma linha que passa pelos pontos (2,1.5) e
(4,3.5). Con essos dois pontos vamos a obter a equação

y2 − y1 3.5 − 1.5 2
m= = = =1
x2 − x1 4−2 2
Uma vez calculado a pendiente, temos:

y − y1 = m(x − x1 ) ⇒ y − 1.5 = (1)(x − 2) ⇒ y = x − 2 + 1.5

Logo a equação do hiperplano separador é y = x − 0.5 que é o mesmo -0.5 + X1 - X2 = 0


A regra de classificação é “Classificar para Azul” se -0.5 + X1 - X2 < 0, e “Classificar para Ver-
melho Caso Contrario”.

b) Com respeto ao gráfico anterior, indicamos a margem e os vetores suporte para CMM.
> plot <- p + geom abline(intercept = -0.5, slope = 1) +
geom abline(intercept = 0, slope = 1, linetype=’dashed’) +
geom abline(intercept = -1, slope = 1, linetype=’dashed’)

12
> plot

Os vectores suporte para o classificador de margem máxima são os pontos (2,1), (2,2), (4,3) e (4,4).

c) Calculamos o valor da margem.


> beta = c(-intercept,solve(matrix(c(2,1.5,4,3.5),nrow = 2, yrow = T), c(intercept, intercept)))
> beta
0.5 - 1 + 1
> abs(c(1, 2, 1) %*% beta) / (norm(beta[2:3], type=“2”))
0.3535534
> abs(c(1, 2, 2) %*% beta) / (norm(beta[2:3], type=“2”))
0.3535534
> abs(c(1, 4, 3) %*% beta) / (norm(beta[2:3], type=“2”))
0.3535534
> abs(c(1, 4, 4) %*% beta) / (norm(beta[2:3], type=“2”))
0.3535534

O valor da margem é ⇒ 0.3535534.

O hiperplano de margen maximal depende directamente de um pequeno conjunto de observações.


A observação sétima esta longe de hiperplano de margen máxima e dos vetores suporte. Se tém
um leve movimento, não afectará o hiperplano separador de margem máxima. pois não é um vetor
suporte.

13
4. Simule um conjunto de dados con n = 500 e p = 2, tal que as observações pertena̧m a duas
clases com uma fronteira de decisão não linear. Por ejemplo, você pode usar:

> x1 <- runif(500) - 0.5


> x2 <- runif(500) - 0.5
> y <- 1 ∗ (x1∧2 - x2∧2 > 0)

a) Faça um gráfico das observações, com sı́mbolos (ou cores) de acordo com cada classe.
b) Separe os dados em conjunto de treinamente e de teste. Obtenha o classificador de margem
máxima, tendo X1 e X2 com preditores. Obtenha as previsões para o conjunto de teste e a
acurácia do do classificador.
c) Obtenha o classificador de margem flexı́vel, tendo tendo X1 e X2 com preditores. Obtenha
as previsões para o conjunto de teste e a taxa de erros de classificacção.
d) Obtenha o classificador de margem não linear, usando um kernel apropiado. Calcule
a taxa de erros de classificação.
e) Compare os dois classificadores

Solução 4: a)
> set.seed(1)
> x1 <- runif(500) - 0.5
> x2 <- runif(500) - 0.5
> y <- 1 * (x1∧2 - x2∧2 ¿ 0)
> df <- data.frame(x1,x2,y=as.factor(y))
> ggplot(data = df, aes(x = x1, y = x2, color = y, shape = y)) +
geom point(size = 2) +
scale color manual(values=c(“#000000”, “#FF0000”)) +
theme(legend.position = ”none”)

14
b) Separamos os dados en conjunto de treinamento e teste para obter o Classificador de margem
máxima tendo como preditores X1 e X2 com preditores.

> training.samples <- createDataPartition(df$y, p = 0.80, list = FALSE)


> train.data <- df[training.samples, ]
> test.data <- df[-training.samples, ]
> svm.model.1 <- svm(y ∼ x1 + x2, data = train.data, type = “C-classification”,kernel = “linear”)
> plot(svm.model.1,train.data)

> summary(svm.model.1)
Call:
svm(formula = y ∼ x1 + x2, data = train.data, type = ‘‘C-classification’’, kernel = ‘‘linear’’)

Parameters:
SVM-Type C-classification
SVM-Kernel linear
cost 1

Number of Support Vectors: 389


( 192 197 )

Number of Classes: 2
Levels:
0 1

> svm.pred.1 <- predict(svm.model.1, test.data)


> table(pred = svm.pred.1, true = test.data$y)

R V
P V
0 1
0 52 47
1 0 0
Accuracy: 0.53

Concluimos, que têm uma acurácia del 53%, isto quer dizer que 47% é o taxa de erro de classifcação.

15
c) Classificador de margem flexı́vel, tendo como preditores X1 e X2 com preditores.
> escolhaparam <- tune.svm(y ∼ x1 + x2, data = train.data,
gamma = 2∧(-2:2), cost = 2∧2:5,
na.action(na.omit(c(1, NA))))
> summary(escolhaparam)

Parameter tuning of ‘svm’:

- sampling method: 10-fold cross validation

- best parameters:
gamma cost
4 4

- best performance: 0.02493902

- Detailed performance results:


gamma cost error dispersion
1 0.25 4 0.04737805 0.02485009
2 0.50 4 0.03487805 0.03156079
3 1.00 4 0.03981707 0.03354096
4 2.00 4 0.03237805 0.02046991
5 4.00 4 0.02493902 0.01666778
6 0.25 5 0.03487805 0.03156079
7 0.50 5 0.03481707 0.03351065
8 1.00 5 0.03981707 0.02661445
9 2.00 5 0.03243902 0.02373928
10 4.00 5 0.02493902 0.01666778

> svm.model.2 <- svm(y ∼ x1 + x2, data = train.data, kernel = “linear”, gamma = 4, cost = 4)
> plot(svm.model.2,train.data)

16
> summary(svm.model.2)
Call:
svm(formula = y ∼ x1 + x2, data = train.data, kernel = ‘‘linear’’, gamma = 4, cost = 4)

Parameters:
SVM-Type C-classification
SVM-Kernel linear
cost 4

Number of Support Vectors: 390


( 192 198 )

Number of Classes: 2
Levels:
0 1

> svm.pred.2 <- predict(svm.model.2, test.data)


> table(pred = svm.pred.2, true = test.data$y)

R V
P V
0 1
0 52 47
1 0 0
Accuracy: 0.53

Concluimos, que têm uma acurácia del 53%, isto quer dizer que 47% é o taxa de erro de classifcação.

d) Classificador de margem não Linear


> escolhaparam <- tune.svm(y ∼ x1 + x2, data = train.data,
kernel = “polynomial”, degree=3,
gamma = 2∧(-1:2), cost = 2∧2:6)
> summary(escolhaparam)

Parameter tuning of ‘svm’:

- sampling method: 10-fold cross validation

- best parameters:
degree gamma cost
3 0.5 4

- best performance: 0.4191463

- Detailed performance results:

17
degree gamma cost error dispersion
1 3 0.5 4 0.4191463 0.1129212
2 3 1.0 4 0.4191463 0.1129212
3 3 2.0 4 0.4191463 0.1129212
4 3 4.0 4 0.4191463 0.1129212
5 3 0.5 5 0.4191463 0.1129212
6 3 1.0 5 0.4191463 0.1129212
7 3 2.0 5 0.4191463 0.1129212
8 3 4.0 5 0.4191463 0.1129212
9 3 0.5 6 0.4191463 0.1129212
10 3 1.0 6 0.4191463 0.1129212
11 3 2.0 6 0.4191463 0.1129212
12 3 4.0 6 0.4341463 0.1330275

Polinomiais:
> svm.model.3 <- svm(y ∼ x1 + x2, data = train.data, kernel = “polynomial”, gamma = 0.5,
cost = 4)
> plot(svm.model.3,train.data)

> summary(svm.model.3)
Call:
svm(formula = y ∼ x1 + x2, data = train.data, kernel = ‘‘polynomial’’, gamma = 0.5, cost = 4)

Parameters:
SVM-Type C-classification
SVM-Kernel linear
cost 4
degree 3
coef.0 0

Number of Support Vectors: 377


( 188 189 )

Number of Classes: 2
Levels:
0 1

> svm.pred.3 <- predict(svm.model.3, test.data)


> table(pred = svm.pred.3, true = test.data$y)

18
R V
P V
0 1
0 52 40
1 0 7
Accuracy: 0.60

Concluimos, que têm uma acurácia del 60%, isto quer dizer que 40% é o taxa de erro de classifcação.

radiais:
> svm.model.4 <- svm(y ∼ x1 + x2, data = train.data, type = ”C-classification”, kernel = ”ra-
dial”, gamma = 4, cost = 4)
> plot(svm.model.4,train.data)

> summary(svm.model.4)
Call:
svm(formula = y ∼ x1 + x2, data = train.data, type = "C-classification", kernel = "radial", gamma = 4, cost = 4)

Parameters:
SVM-Type C-classification
SVM-Kernel radial
cost 4

Number of Support Vectors: 76


( 40 36 )

Number of Classes: 2
Levels:
0 1

> svm.pred.4 <- predict(svm.model.4, test.data)


> table(pred = svm.pred.4, true = test.data$y)

R V
P V
0 1
0 50 1
1 2 46
Accuracy: 0.97

19
Concluimos, que têm uma acurácia del 97%, isto quer dizer que 3% é o taxa de erro de classifcação.

tangentes hiperbólicas:
> svm.model.5 <- svm(y ∼ x1 + x2, data = train.data, kernel = ”sigmoid”, gamma = 4, cost=4)
> plot(svm.model.5,train.data)

> summary(svm.model.5)
Call:
svm(formula = y ∼ x1 + x2, data = train.data, kernel = "radial", gamma = 4, cost = 4)

Parameters:
SVM-Type C-classification
SVM-Kernel sigmoid
cost 4
coef.0 0

Number of Support Vectors: 210


( 105 105 )

Number of Classes: 2
Levels:
0 1

> svm.pred.5 <- predict(svm.model.5, test.data)


> table(pred = svm.pred.5, true = test.data$y)

R V
P V
0 1
0 30 26
1 22 21
Accuracy: 0.52

Concluimos, que têm uma acurácia del 52%, isto quer dizer que 48% é o taxa de erro de classifcação.

e) Observamos que no classificador não linear com kernel = radiais, têm a menor taxa de erro de
classificação com 3%. Por tanto é o melhor classificador não linear.

20

Você também pode gostar