Você está na página 1de 8

Universidade Federal de Minas Gerais

Programa de Pós Graduação em Engenharia Elétrica


Introdução à Inteligência Computacional

Exercı́cio Computacional -
Classificação

Nome: Igor Pereira Gomes

24 de Abril de 2017
Questão 7
> #Calcula-se essa probabilidade através da Regra de Bayes.
>
> #Priori: Probabilidade que a empresa d^
e dividendo.
> p_k <- 0.8
> p_nk <- 0.2
> #Modelo para empresas que d~
ao dividendo:
> p_x_k <- dnorm(x = 4,mean = 10,sd = sqrt(36))
> #Modelo para empresas que n~
ao d~
ao dividendo:
> p_x_nk <- dnorm(x = 4,mean = 0,sd = sqrt(36))
> #Probabilidade a posteriori de que a empresa pertença ao grupo das que d~
ao dividendo
> p_k_x <- p_k*p_x_k
> #Probabilidade a posteriori de de que a empresa pertença ao grupo das que n~
ao d~
ao dividend
> p_nk_x <- p_nk*p_x_nk
> #Probabilidade da empresa dar dividendo:
> p_k_x/(p_k_x+p_nk_x)

[1] 0.7518525

> #0.7518525

Questão 11
Deseja-se construir um modelo baseado no dataset ”Auto”para dizer se um carro
é ou não é econômico.

a)
Primeiro, carrega-se os dados e criam-se as classes. Haverá duas classes: 1,
para carro econômico (variável ”mpg”maior que a mediana) e 0 para carro não-
econômico (variável ”mpg”menor que a mediana). Obtém-se um rótulo para
cada amostra do conjunto no vetor ”mpg01”e inclui-se no data frame.

> #Carregar dados


> data(Auto)
> mpg01 <- vector(length = dim(Auto)[1])
> mpg01[which(Auto$mpg > median(Auto$mpg))] <- 1
> mpg01[which(Auto$mpg <= median(Auto$mpg))] <- 0
> Auto <- data.frame(Auto,mpg01 = mpg01)

b)
Analisando-se graficamente os dados, procura-se procurar relações entre a nova
variável ”mpg01”e as demais variáveis. Essa análise foi feita utilizando boxplots
e buscando as variáveis aparentemente mais significativas.

1
8
7
6
5
4
3

0 1

cylinders:
400
300
200
100

0 1

displacement:

2
weight:
horsepower:
1500 2000 2500 3000 3500 4000 4500 5000

50 100 150 200

0
0

3
1
1
25
20
15
10

0 1

acceleration:
82
80
78
76
74
72
70

0 1

year:

4
3.0
2.5
2.0
1.5
1.0

0 1

origin:
Alguma correlação foi encontrada para todas as variáveis numéricas, as mais
significativas sendo ”cylinders”, ”displacement”, ”horsepower”e ”weight”. Com
”origin”, nota-se que os carros não econômicos com origem 2 e 3 são outliers,
estando portanto a maioria dos carros não-econômicos na origem 1.

c)
Divide-se os dados em conjuntos de treino e teste. Utilizou-se 275 amostras para
treinamento (por volta de 70%) e o restante para teste.
> #Carregar dados
> itrain <- sample(1:dim(Auto)[1],size = 275)
> xtrain <- Auto[itrain,]
> xtest <- Auto[-itrain,]

d)
Utiliza-se Linear Discriminant Analysis (LDA) para prever ”mpg01”em função
das variáveis mais significantes encontradas, no caso, ”cylinders”, ”displace-
ment”, ”horsepower”, ”weight”e ”origin”. Mostra-se a matriz confusão do teste
e, em seguida, a porcentagem de erro.
> #Carregar dados
> lda_auto <- lda(mpg01 ~ cylinders + displacement + weight + horsepower + origin, data = xt
> y_hat <- as.numeric(predict(lda_auto,xtest)[[1]])-1
> table(y_hat,xtest$mpg01)
y_hat 0 1
0 53 3
1 10 51

5
> mean(y_hat != xtest$mpg01)*100

[1] 11.11111

e)
Utiliza-se Quadratic Discriminant Analysis (QDA) para prever ”mpg01”em fun-
ção das variáveis mais significantes encontradas, no caso, ”cylinders”, ”displace-
ment”, ”horsepower”, ”weight”e ”origin”. Mostra-se a matriz confusão do teste
e, em seguida, a porcentagem de erro.

> #Carregar dados


> qda_auto <- qda(mpg01 ~ cylinders + displacement + weight + horsepower + origin, data = xt
> y_hat <- as.numeric(predict(qda_auto,xtest)[[1]])-1
> table(y_hat,xtest$mpg01)

y_hat 0 1
0 55 5
1 8 49

> mean(y_hat != xtest$mpg01)

[1] 0.1111111

f)
Utiliza-se Regressão Logı́stica para prever ”mpg01”em função das variáveis mais
significantes encontradas, no caso, ”cylinders”, ”displacement”, ”horsepower”,
”weight”e ”origin”. Mostra-se a matriz confusão do teste e, em seguida, a por-
centagem de erro.

> #Carregar dados


> lr_auto <- glm(mpg01 ~ cylinders + displacement + weight + horsepower + origin, data = xtr
> y_hat <- as.numeric(predict(lr_auto,xtest,type = "response") > 0.5)
> table(y_hat,xtest$mpg01)

y_hat 0 1
0 55 5
1 8 49

> mean(y_hat != xtest$mpg01)

[1] 0.1111111

6
g)
Utiliza-se K-Nearest Nodes (KNN), com todos os valores ı́mpares de K entre 1 e
99, para prever ”mpg01”em função das variáveis mais significantes encontradas,
no caso, ”cylinders”, ”displacement”, ”horsepower”, ”weight”e ”origin”. Mostra-se
a porcentagem de erro para cada K ı́mpar entre 1 e 29 e, em seguida, o valor do
melhor K encontrado seguido do erro obtido por ele.

> #Carregar dados


> errk <- vector()
> for(i in 1:50)
+ {
+ y_hat <- knn(train = cbind(xtrain$cylinders,xtrain$displacement,xtrain$weight,xtrain$hor
+ y_hat <- as.numeric(y_hat)-1
+ errk <- c(errk,mean(y_hat != xtest$mpg01))
+ }
> errk

[1] 0.1623932 0.1282051 0.1282051 0.1452991 0.1282051 0.1538462 0.1367521


[8] 0.1452991 0.1367521 0.1282051 0.1282051 0.1367521 0.1025641 0.1025641
[15] 0.1025641 0.1025641 0.1025641 0.1282051 0.1196581 0.1196581 0.1111111
[22] 0.1282051 0.1282051 0.1282051 0.1282051 0.1282051 0.1282051 0.1282051
[29] 0.1282051 0.1282051 0.1282051 0.1282051 0.1282051 0.1282051 0.1282051
[36] 0.1452991 0.1367521 0.1282051 0.1282051 0.1282051 0.1452991 0.1452991
[43] 0.1452991 0.1452991 0.1452991 0.1452991 0.1282051 0.1282051 0.1282051
[50] 0.1282051

> 2*(which.min(errk))-1

[1] 25

> min(errk)

[1] 0.1025641

Você também pode gostar