Skip to content

Instantly share code, notes, and snippets.

@joffilyfe
Last active December 19, 2017 03:25
Show Gist options
  • Save joffilyfe/e751ee06d5de8e259d6b2a4a5a76ee06 to your computer and use it in GitHub Desktop.
Save joffilyfe/e751ee06d5de8e259d6b2a4a5a76ee06 to your computer and use it in GitHub Desktop.
# Load librarys
library(class)
library(tidyverse)
set.seed(1)
# Primeiramente nós devemos carregar os dadatases referentes as duas doenças separadamente
# Vale salientar que cada dataset tem o seu conjunto de colunas, algumas delas são identicas porém há divergência entre
# elas
data.dengue <- read.csv("/Users/joffily/Desktop/TCC/datasets/dengue-2016.csv")
data.chik <- read.csv("/Users/joffily/Desktop/TCC/datasets/chikungunya-2016.csv")
# Podemos verificar quais colunas nosso dataset possui
labels(data.chik)
# Antes de iniciarmos quaisquer processamento nos dados de nosso dataset, nós precisamos selecionar apenas as
# instâncias que possuem informações completas em algumas colunas.
# Para tanto nós devemos limpar o nosso dataset selecionando as linhas em que os sintomas foram preenchidos e
# devemos ignorar as linhas com sintomas em NA.
# Esta limpeza remove 2534 linhas com dados faltantes, a quantidade final de linhas limpas é de 11270
data.chik <- data.chik[!is.na(data.chik$VOMITO), ]
data.chik <- data.chik[!is.na(data.chik$FEBRE), ]
# Em posso dos dados limpos, nós devemos selecionar apenas as colunas interessantes para o experimento.
# Selecionamos as colunas dos sinais e sintomas dos pacientes com Chikungunya
data.chik.sintomas <- data.chik[, 42:62]
# Interamos as colunas de nosso dataset para substituir os valores padrão de nosso dataset,
# Atribuimos 1 para True e 0 para False
for (ncolumn in 1:ncol(data.chik.sintomas)) {
data.chik.sintomas[, ncolumn] <- ifelse(data.chik.sintomas[, ncolumn] == 1, 1, 0)
}
# Atribuímos a classe chikungunya ao nosso dataset
data.chik.sintomas$class <- "chikungunya"
# Limpeza dos dados para dengue
# Também é necessário realizar o mesmo procedimento de limpeza para o dataset de dengue,
# o Dataset inicialmente possuia 44.853 linhas de informações sobre os pacientes,
# após a limpeza nos restaram 19672 linhas
data.dengue <- data.dengue[!is.na(data.dengue$VOMITO), ]
data.dengue <- data.dengue[!is.na(data.dengue$FEBRE), ]
# Também devemos selecionar apenas as colunas interessante para este experimento, por isso selecionamos as colunas dos
# sinais e sintomas
data.dengue.sintomas <- data.dengue[, 42:62]
# Trocamos então os valores padrão para
for (ncolumn in 1:ncol(data.dengue.sintomas)) {
data.dengue.sintomas[, ncolumn] <- ifelse(data.dengue.sintomas[, ncolumn] == 1, 1, 0)
}
# Atribuímos a classe dengue ao nosso dataset de dengue
data.dengue.sintomas$class <- "dengue"
# Como teste nós iremos selecionar 100 linhas de cada dataset
dd <- data.dengue.sintomas[1:200, ]
dc <- data.chik.sintomas[1:200, ]
# Após a seleção nós temos que fazer um merge/append dos datasets para que o trabalho de treinamento e análise comece.
# A função rbind nos ajuda a realizar esta atividade
data.merged <- rbind(dd ,dc)
# Precisamos embaralhar o nosso dataset para que o algoritmo não sofra com algum tipo de overfiting
# Este comando seleciona linhas randômicas apartir de uma lista de indices criada sem reposição na quantidade de linhas
# o dataset informado (neste caso são 200 linhas).
data.merged <- data.merged[sample(1:nrow(data.merged), nrow(data.merged), replace=FALSE), ]
# Carremos a library caret
# O pacote Caret é uma biblioteca da linguagem R que nós fornece acessos facilitados a interfaces de algortimos de treinamento,
# como também fornece algoritmos optimizados para seleção de dados em dataframes.
library(caret)
# O processo de classificação é iniciado com a seleção dos algoritmos de treinamento, estamos utilizando o algoritmo X
# para gerar um modelo estatístico para predição. A função train do pacote caret nos fornece a opção de selecionar o método
# de treinamento, podemos por exemplo utilizar o método CV (cross-validation) particionando em 10.
modelo <- train(class ~ ., data=data.merged, method='avNNet',
trControl = trainControl(
method = "cv", number = 10,
verboseIter = TRUE)
)
modelo <- train(class ~ ., data=data.merged, method='nb',
trControl = trainControl(
method = "cv", number = 10,
verboseIter = TRUE)
)
# Geramos então as predições para o modelo criado anteriormente.
predictions <- predict(object=modelo, data.merged[, 1:21])
# O pacote caret também nos fornece uma função muito útil para gerar uma matriz de confusão com dados de precisão e recall
confusionMatrix(predictions, data.merged[, 22])
# Sem o pacote caret também podemos gerar uma matriz de confusão mais simples com o pacote base do R
table(predictions, data.merged[, 22])
# Podemos observar
# Utilizando o RPart e Árvores de decisão
library(rpart)
library(rpart.plot)
for (ncolumn in 1:21) {
data.merged[, ncolumn] = ifelse(data.merged[, ncolumn] == 1, "SIM", "NAO")
}
fit <- rpart(class ~ ., data=data.merged, method = "class", minsplit = 2, minbucket = 1, cp = -1)
prp(fit)
pred <- predict(fit, data.merged[, 1:21], type="class")
table(pred, data.merged[, 22])
```
pred chikungunya dengue
chikungunya 163 20
dengue 37 180
```
library(RColorBrewer)
library(rattle)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment