Você está na página 1de 7

Big Data e Data Science 2016

Parte 4 e 5: Computao na Nuvem e Data Mining com o R


Talitha Faustino Speranza
Fundao Getulio Vargas

Lista de Exerccios

Esta lista possui trs objetivos:

(I) Criar e configurar um banco de dados na nuvem, utilizando o Microsoft Azure;


(II) Acessar o banco de dados atravs do pacote RMySQL, utilizando o R;
(III) Resolver problemas de classificao com os dados do banco criado, aplicando
algoritmos de minerao de dados implementados no R.

Ateno: Todos os scripts utilizados a partir do exerccio 3 devem ser enviados juntamente
com os grficos gerados e as respostas s perguntas discursivas.

Exerccio 1

Instale o MySQL em sua mquina virtual Windows Server R2 2012 e configure a porta 3306
para acesso externo. No esquea de modificar as regras do firewall. Rode o script dump.sql,
que se encontra na pasta Nuvem do Dropbox do curso. Este script cria uma base chamada
data_mining que possui trs tabelas: wine, cells e votes.

As trs tabelas so interessantes para problemas de classificao:

a) Votes: a coluna class possui dois valores republican ou democrat, indicando se um


determinado congressista americano pertence ao Partido Democrata ou ao Partido
Republicano. As demais colunas representam projetos de lei votados por eles em 1983 e
os valores podem ser y (yes), n (no) ou (absteno), isto , o voto do congressista.
b) Wine: a coluna class pode ter trs valores (inteiros de 1 a 3), que representam um
determinado tipo de vinho. As demais colunas apresentam caractersticas qumicas dos
vinhos que servem de exemplo.
c) Cells: a coluna class tem dois valores possveis malign e benign, indicando se uma clula
cancergena ou no. As demais colunas representam caractersticas fsicas e qumicas das
clulas que servem de exemplo.

Exerccio 2

Crie um usurio para a sua base, com o nome e a senha que desejar. Este usurio deve ter a
permisso para rodar consultas do tipo SELECT na base data_mining.

Voc pode criar novos usurios selecionando Users and Privileges no Navigator. Clique no
boto Add Accounts e defina o nome de usurio e a senha na tab Login. Mantenha a opo
Limits to Host Matching com o valor padro. Para restringir as permisses do usurio, acesse a
tab Schema Privileges e, ento, clique em Add Entry. No painel que aparece, selecione a base
data_mining e clique em OK. Finalmente, selecione SELECT na lista de comandos a serem
permitidos e clique em Apply.
Exerccio 3

Conecte-se base criada a partir do R, no seu computador.

Lembre-se de que, antes, voc precisa instalar o pacote RMySQL (consulte o material de
Gerenciamento de Dados com o SQL). O parmetro hostname da funo dbConnect deve
ser o nome DNS fornecido pelo Azure para os servidores de sua mquina virtual. Voc pode
encontr-lo na seo Viso Geral do painel de sua mquina no portal Azure.

Ateno: Durante os exerccios talvez seja necessrio reconectar-se base, pois a mquina
virtual corta as conexes de tempos em tempos, por razes de segurana.

Exerccio 4

Carregue as tabelas wine, cells e votes para o R, no seu computador. Por exemplo, para obter
a tabela wine, voc deve fazer:

votes <- dbGetQuery(conn, "select * from votes")

A funo dbGetQuery retorna um data.frame. No entanto, campos vazios so importados


simplesmente como uma string vazia, no sendo corretamente interpretados por diversos
algoritmos implementados para o R. Por padro, o valor que indica que um campo est vazio
NA (not available). Portanto, substitua cada string vazia por um NA, fazendo, para cada tabela:

votes[votes == ""] = NA

A tabela votes precisar de um processamento adicional: cada coluna deve ser convertida
para o tipo factor,para que voc possa montar uma rvore de deciso com ela. Podemos
fazer isso usando o comando lapply, que aplica uma determinada funo (no caso, a de
converso) a cada coluna de um data.frame ou de uma matriz e devolve uma lista na qual
cada elemento o resultado da aplicao desta funo. Como queremos um data.frame,
convertemos a lista no final. Para isso, rode os seguintes comandos aninhados:

votes <- as.data.frame(lapply(votes, function(x){factor(x)}))

Exerccio 5

Antes de comear este exerccio:

Instale o pacote party no R. Voc pode fazer isso rodando comando


install.packages("party");

Execute o comando set.seed(1234). Isso necessrio para que o nmero pseudo-


aleatrio gerado pelo R seja o mesmo para todos os alunos e bata com o do gabarito.

a) Embaralhe as linhas da tabela votes e divida-a em duas amostras. A amostra de


treinamento deve conter cerca de 75% das linhas da tabela original. A amostra de
teste, naturalmente, deve conter cerca de 25% das linhas da tabela original.
b) Crie uma rvore de deciso a partir da amostra de treinamento e exiba-a, para
examin-la. Conhecendo ou no um pouco de poltica norte-americana, o que
possvel dizer de cada um dos partidos? Isto , voc consegue identificar
caractersticas que diferem republicanos de democratas?
c) Gere as previses para a amostra de teste. Qual a matriz de confuso das previses?
Qual a porcentagem de acerto?

Exerccio 6

a) Crie e exiba uma rvore de deciso da tabela wine (completa). Voc no precisar
dividir esta tabela em amostras, porque usaremos a rvore apenas para fazer extrao
de caractersticas.
b) Baseando-se na rvore de deciso, quais so os dois componentes qumicos que voc
acredita que podem definir, sozinhos, a classe dos vinhos?
c) Crie um grfico de disperso de um destes componentes contra o outro, colorindo os
pontos de acordo com suas classes. O grfico confirma sua resposta do item b? Se
achar que no, visualize todas as possveis combinaes de grficos de disperso entre
os componentes e escolha uma nova combinao que parea definir melhor as classes.

Exerccio 7

Antes de comear este exerccio, execute o comando set.seed(1234).

a) Aplique o algoritmo K-Means a um subconjunto da tabela wine, definido como as duas


colunas que voc escolheu no exerccio anterior.
b) Exiba o vetor cluster do objeto retornado pela funo kmeans, que voc utilizou
no item anterior. Agora, exiba o vetor das classes verdadeiras dos vinhos. Voc
acredita que o algoritmo teve bom desempenho?

Perceba que o algoritmo no conhece previamente os nomes verdadeiros das classes


de vinho (que, por simplicidade, so rotuladas como 1, 2 e 3). Isso significa que os
rtulos dados pelo algoritmo aos clusters, que tambm so 1, 2 e 3, podem no
corresponder aos rtulos verdadeiros, a menos que voc tenha tido sorte. Vamos ver
um exemplo:

Imagine que o nome do objeto retornado pela funo kmeans tenha o nome de
wine.kmeans. Ento, suponha que o vetor wine.kmeans$cluster seja

[1] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 2 2 2 2 3 2 3
[30] 3 3 3 2 3 2 3 3 2 2 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 3 3
[59] 3 2 2 3 2 3 2 3 3 3 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 3 2 2 2
[88] 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[117] 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 3 3 3 3 1 2 3 3 3 2 3 2 2 1
[146] 2 3 1 1 1 1 1 3 1 1 1 1 1 1 1 1 3 3 3 1 3 1 1 1 1 3 1 1 1
[175] 1 1 1 1

O vetor de classes verdadeiras, wine$class, no entanto,


[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[30] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[59] 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[88] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[117] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
[146] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
[175] 3 3 3 3

Claramente, o algoritmo chamou a classe 3 de 1, a classe 2 de 2 (sorte!) e a classe 3 de


1. Para resolver isso e evitar que a avaliao do algoritmo seja prejudicada, voc pode
proceder da seguinte forma:

Suponha que o subconjunto da tabela wine com o qual voc est trabalhando esteja
armazenado na varivel subwine. Ento, faa

wine.kmeans$cluster = factor(wine.kmeans$cluster)
levels(wine.kmeans$cluster) = c(3,2,1)
wine.kmeans$cluster = as.vector(wine.kmeans$cluster)

O primeiro comando transforma o vetor cluster num factor, um tipo especial de


vetor que torna mais fcil trabalhar com rtulos/classes (propriedades que o R chama
genericamente de levels). O segundo comando efetua a substituio que
desejvamos, transformando o rtulo 1 em 3 e o rtulo 3 em 1, em paralelo. O terceiro
e ltimo comando apenas transforma cluster novamente em um vetor.

Agora, wine.kmeans$cluster est muito mais parecido com o vetor


wine$classes!

[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 1 1 2 2 2 2 1 2 1
[30] 1 1 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1
[59] 1 2 2 1 2 1 2 1 1 1 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 1 2 2 2
[88] 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[117] 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 1 1 1 1 3 2 1 1 1 2 1 2 2 3
[146] 2 1 3 3 3 3 3 1 3 3 3 3 3 3 3 3 1 1 1 3 1 3 3 3 3 1 3 3 3
[175] 3 3 3 3

Faa a matriz de confuso que resume os resultados do algoritmo contra as respostas


verdadeiras. Qual a porcentagem de acerto?

c) Faa dois grficos da disperso entre os componentes de sua sub-tabela. Em um deles,


os pontos devem ser coloridos de acordo com as classes verdadeiras. No outro, as
cores devem ser definidas de acordo com o resultado do algoritmo. Os centros
calculados para cada cluster tambm devem ser desenhados neste segundo grfico.
Exiba os grficos lado a lado.
Ateno: Quando estiver tentando colocar dois grficos em um s painel, talvez voc se
depare com a seguinte mensagem de erro no R: Error in plot.new(): figure
margins too large. Execute o comando par(mar = c(2,2,2,2)) para contornar
isso. Os valores passados para mar no precisam ser necessariamente 2. Se a mensagem de
erro persistir, incremente um pouco os valores, at que consiga visualizar os grficos.

Exerccio 8

Antes de comear este exerccio, instale o pacote fpc no R. Voc pode fazer isso rodando
comando install.packages("fpc").

a) Defina um novo subconjunto da tabela wine, formado apenas pelas colunas alcohol
e od280. Normalize cada uma dessas colunas, isto , faa com que o valor mximo
da coluna seja 1, o valor mnimo seja 0 e os outros valores variem de acordo com esta
nova escala.

Voc pode usar esta funo

function(x){ (x - min(x))/(max(x) - min(x))}

dentro da funo lapply (veja o exerccio 4).

b) Utilizando a sub-tabela normalizada, calcule as distncias de todas as linhas em relao


s demais. Ento, usando o vetor de distncias, examine os quantis de 1%, 5% e 10%.
Tendo em vista os valores dos quantis, qual valor voc usaria como parmetro N no
algoritmo DBSCAN? Por qu?

Para calcular as distncias entre todas as linhas de uma matriz ou data.frame, voc pode
empregar a funo dists, disponvel no pacote stats, padro do R.

dists = c(dist(subwine))

A funo de concatenao, c(), serve apenas para extrair o campo de interesse do objeto
retornado por dist, que contm mais informao do que as que precisamos.

Os quantis podem ser calculados atravs da funo quantile, tambm padro do R.

quantile(dists, probs = c(0.01, 0.05, 0.10))

O parmetro probs recebe o vetor de quantis que se quer examinar.

c) Rode o algoritmo dbscan na sub-tabela normalizada. O parmetro ebs (equivalente


ao parmetro N) deve receber o valor de 0.075 e o parmetro MinPts, de 4. Crie a
matriz de confuso entre os valores verdadeiros das classes e os valores dos clusters
atribudos pelo algoritmo (disponveis no campo cluster do objeto retornado por
dbscan). Levando em considerao o que foi discutido no exerccio 7, como voc
interpreta estes resultados?
Lembre-se que a funo dbscan nomeia como 0 o cluster dos outliers, isto , dos pontos
considerados noise (rudo).

d) Faa dois grficos de disperso de uma coluna contra a outra, exibindo-os no mesmo
painel. Em um dos grficos, os pontos devem ser coloridos de acordo com as classes
verdadeiras. No outro, as cores devem ser definidas de acordo com o resultado do
algoritmo. Voc consegue identificar os pontos noise facilmente? Voc acredita que o
algoritmo descobriu novas classes de vinho ou deixou de identificar alguma classe j
estabelecida?

Exerccio 9

Antes de comear este exerccio, instale o pacote e1071 no R. Voc pode fazer isso rodando
comando install.packages("e1071").

a) Embaralhe as linhas da tabela wine original e separe-as em duas amostras, de modo


que a amostra de treinamento contenha 75% dos valores originais e a amostra de
teste, 25%. Voc dever trabalhar apenas com as colunas proline, hue e class
destas amostras. A ideia encontrar os vetores suporte (support vectors) que melhor
separam as classes de vinho para estas duas caractersticas. Como vimos em aula, este
um problema de otimizao e h um parmetro que devemos calibrar o custo
(cost) de violar alguma restrio deste problema. Qual, dentre os valores 0.001, 0.01,
0.1, 1, 10, 100, 1000, a funo tune do pacote e1071 escolhe como o melhor valor
para o custo? (Use um kernel linear e faa scale = F)

b) A partir do custo encontrado no item anterior, use a funo svm do mesmo pacote
para encontrar os vetores suporte da amostra de treinamento (mais uma vez, use um
kernel linear e faa scale = F). Quantos vetores suporte foram encontrados? Voc
considera esse nmero alto ou baixo? Por qu?

c) Utilizando o objeto retornado pela funo svm, crie um grfico que mostre como o
espao de dados ficou dividido pelos vetores suporte. Qual elemento grfico
representa os vetores suporte? Voc percebe algo de especial na localizao destes
vetores?

d) Classifique os pontos da amostra de teste atravs da funo predict e do objeto


retornado pela funo svm. Qual a porcentagem de acerto do algoritmo?
Exerccio 10

Antes de comear este exerccio:

Instale o pacote class no R. Voc pode fazer isso rodando comando


install.packages("class");

Execute o comando set.seed(7612).

Embaralhe as linhas da tabela cell e separe-as em duas amostras, de modo que a amostra de
treinamento contenha 75% dos valores originais e a amostra de teste, 25%. Armazene a coluna
class de cada uma em vetores separados e remova-as das tabelas de teste e treinamento.

Utilizando um loop (for ou while), busque o melhor valor de k para classificar os valores
do conjunto de teste atravs do algoritmo K-Nearest Neighbors (implementado pela funo
knn, padro do R) aplicado ao conjunto de treinamento. O critrio para a escolha de k dever
ser a porcentagem de acerto e k dever ser variado de 1 a 20.

Responda:

a) Qual o melhor valor de k?


b) Qual a porcentagem de acerto para o melhor valor de k?
c) Qual a matriz de confuso entre os valores preditos e os valores efetivos?

Você também pode gostar