Last active
December 19, 2017 03:25
-
-
Save joffilyfe/e751ee06d5de8e259d6b2a4a5a76ee06 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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