Skip to content

Commit

Permalink
Adicionando arquivos
Browse files Browse the repository at this point in the history
Estes scripts foram escritos por mim ao estudar o livro
  • Loading branch information
gomesfellipe authored Jan 4, 2018
1 parent f66eca9 commit 93db4da
Show file tree
Hide file tree
Showing 24 changed files with 555 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#Avaliacao de modelos preditivos em R

#PAcotes que serao utilizados:
library(cvTools) #PAra gerar metodologia de validacao cruzada sob variacao leave-one-out ou k-fold

#COnjutno de dados que sera utilizado:
satisfacao = read.csv(choose.files(), sep=";", header= T)

#COnstruindo os conjuntos (folds) para validacao cruzada

N= 12
K=4
tipo = "random"


folds = cvFolds(N, #numero de exemplares disponiveis no conjunto de dados
4, #Quantidade de subconjuntos (folds) que se deseja gerar
type="random" #Eh o metodo que pode ser usado para executar a distribuicao dos exemplares nos subconjuntos : consecutive, random (default) e interleaved
)
folds
13 changes: 13 additions & 0 deletions Analise Preditiva/Avaliacao de modelos preditivios/satisfacao.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
;tempo;preco;classe
1;0.7;0.4;sat
2;0.4;0.5;sat
3;0.61;0.4;sat
4;0.9;0.7;sat
5;0.8;0.3;sat
6;0.6;1;sat
7;0.2;0.6;ins
8;0.4;0.3;ins
9;0.61;0.2;ins
10;0.6;0.43;ins
11;0.5;0.1;ins
12;1;0.2;ins
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#Arvores de Decisao

#PAcotes que sera utilizados:
library(rpart)
library(rpart.plot)

#Importando os dados que serao utilizados no exemplo:
dados=read.csv(choose.files(), header=T,sep=";" ) #abrirconjunto de dados chamado "qualidade"
fix(dados)
str(dados)

#Construindo uma arvore de decisao:

modelo_ad=rpart(R ~EP + QR + LE, #Formula que define qual eh o argumento classe e quais sao os atributos
data=dados, #Eh o conjunto de dados armazenado em um data.frame
method="class", #Eh o parametro que define se a arvore sera usada como classificacao ("class") ou regressao ("anova")
control=rpart.control(minsplit=1), #Eh a variavel na qual sao armazenados os parametros que controlam o crescimento da arvore
parms=list(split="Information") #Eh a variavel na qual eh definido o criterio de selecao de atributos
)

#Usando uma arvore de decisao:

y_estimado=predict(modelo_ad, #Eh o resultado da construcao da arvore de decisao
dados[2,1:3], #Eh a variavel que contem os atributos descritivos dos exemplares de teste, considerando os mesmos atributos descritivos usados na geracao de modelo_ad
"class") #Especifica como sera apresentado o resultado da predicao: um vetor para valores numericos ("vector"), classe para valores categoricos ("class"), ou a probabilidade de cada classe ("prob")
y_estimado

#Visualizando uma arvore de decisao:

plot=rpart.plot(modelo_ad, #Eh o resultado da contrucao da arvore de decisao
2, #Eh a quantidade de casas decimais
2) #Especifica como sera apresentado o resultado da visualizacao, pode assumiar valores de 0 a 4
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
EP;QR;LE;R
muita;boa;ruim;lucro
muita;boa;boa;lucro
pouca;boa;boa;lucro
pouca;otima;ruim;prejuizo
pouca;otima;boa;prejuizo
muita;otima;boa;lucro
muita;otima;ruim;prejuizo
pouca;boa;ruim;prejuizo
31 changes: 31 additions & 0 deletions Analise Preditiva/Classificacao/Naive Bayes/Naive Bayes.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#Naive Bayes

#Pacotes utilizados:
library(e1071)

#Importando o bando de dados que sera utilizado no exemplo:
planejamento=read.csv(choose.files(), header=T, sep=";")
planejamento

#Contruindo o classificador:
modelo_NB = naiveBayes(planejamento[,1:4], #Eh um data.frame ou matriz contendo os exemplares de treinamento
planejamento[,5], #Eh o vetor com as classes para cada exemplar do conjunto de treinamento
0 #Eh um numero real positivo que controla a suavezacao de Laplace. O default eh zero, desabilitando-a
)

#Criando um objetivo para teste:
exemplar_teste=data.frame(previsao="sol", temperatura="frio", humidade="normal", vento="sim")

#Fazendo uma predicao com o Naive Bayes:
y_estimado = predict(modelo_NB, #Eh o modelo contruido pela funcao naiveBayes()
exemplar_teste, #Eh o exemplo de teste
type="class", #Eh o parametro com dois valores possiveis: "class" se o resultado eh apresentado apenas pela classe de maior probabilidade ou "raw" pela probabilidade de cada classe
0) #Eh um numero real positivo que controla a suavezacao de Laplace. O default eh zero, desabilitando-a
y_estimado

#Se a opcao de classificacao fosse por apresentar a probabilidade (raw), o resultado seria:
y_estimado = predict(modelo_NB, #Eh o modelo contruido pela funcao naiveBayes()
exemplar_teste, #Eh o exemplo de teste
type="raw", #Eh o parametro com dois valores possiveis: "class" se o resultado eh apresentado apenas pela classe de maior probabilidade ou "raw" pela probabilidade de cada classe
0) #Eh um numero real positivo que controla a suavezacao de Laplace. O default eh zero, desabilitando-a
y_estimado
15 changes: 15 additions & 0 deletions Analise Preditiva/Classificacao/Naive Bayes/planejamento.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
previsao;temperatura;humidade;vento;vender
chuva;frio;normal;sim;parmegiana
chuva;moderado;alta;sim;parmegiana
sol;quente;alta;n�o;parmegiana
sol;quente;alta;sim;parmegiana
sol;moderado;alta;n�o;parmegiana
nublado;frio;normal;sim;feijoada
nublado;quente;alta;n�o;feijoada
nublado;quente;normal;n�o;feijoada
nublado;moderado;alta;sim;feijoada
chuva;frio;normal;n�o;feijoada
chuva;moderado;alta;n�o;feijoada
chuva;moderado;normal;n�o;feijoada
sol;frio;normal;n�o;feijoada
sol;moderado;normal;sim;feijoada
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#Redes Neurais:

#Pacotes que serao utilizados:
library("RSNNS")

#Conjunto de dados que sera utilizado:
d=read.csv(choose.files(), sep=";", header=T)
d

#Criando a variavel com exemplares do conjunto treinamento:
X=d[,2:3]
#Criando a variavel de rotulos dos exemplares do conjunto de dados:
Y=decodeClassLabels(d[,4])

#Entao, conjuntos de treinamento e teste devem ser criados,
#Para tanto, a funcao slitForTraininAndTest() recebe como parametros:
d_separado=splitForTrainingAndTest(X, #A variavel com os exemplares,
Y, #A variavel com os rotulos e
ratio=0.1 #A proporcao do conjunto de dados que deve compor o conjunto de teste
);d_separado

#Comando para normalizar os dados:
d_normalizado=normTrainingAndTestSet(d_separado, dontNormTargets = TRUE, type="0_1");d_normalizado

str(d_normalizado)
str(d_separado)
#Como foi preciso normalizar os dados:
d_separado=d_normalizado

#Para criar o modelo:
modelo_mlp = mlp(d_separado$inputsTrain, #Exemplares do conjunto Treinamento
d_separado$targetsTrain, #Rotulos dos exemplares do conjunto de treinamento
size=c(3), #Numero de neuronios na camada escondida. Pode ser vetor para o caso de mais de uma camada escondida.O valor numérico e escalar define o numero de neuronios na camada escondida
maxit=5000, #Numero maximo de iteracoes (epocas)
initFunc = "Randomize_Weights", #Define como os pesos devem ser inicializados(Opcoes: "Randomize_Weights" ou a definicao de um vetor de valores desejados para a inicializacao)
learnFunc = "Std_Backpropagation", #Estabelece o algoritmo de aprendizado (Opcoes: "Std_Backpropagation"; "BackpropBatch"; "Quickprop")
learnFuncParams = c(0.1), #Valor para a taxa de aprendizado
hiddenActFunc = "Act_Logistic", #Define o tipo de funcao de ativacao do neuronios da camada escondida (Act_Logistic)
shufflePatterns = TRUE, #PArametro para definir se os exemplares do conjunto de treinamento devem ou nao ser embaralhados para cada epoca
linOut=TRUE, #Define qual deve ser a funcao de ativacao para os neuronios da camada de saida, linear ou logistica (Opcoes: TRUE para linear ou FALSE para logistica)
inputsTest = d_separado$inputsTest, #Refere-se aos padroes separados para teste da rede
targetsTest = d_separado$targetsTest #Refere-se as saidas desejadas dos padroes de teste, usados apenas para aferir o desempenho da predicao
);modelo_mlp

#Para plotar a curva de aprendizado, precisamos do erro medio quadrado de cada iteracao para o conjunto treinamento e para o conjunto teste, IterativeFitError e IterativeTestError respectivamente:
plot(modelo_mlp$IterativeFitError,
type="n",
main="Curva de Aprendizagem",
xlab="Iteracao",
ylab="Erro medio quadrado",
cex.lab=1.5,
ylim=c(0,10)
)
lines(modelo_mlp$IterativeFitError, col="1", lwd=3, cex=2)
lines(modelo_mlp$IterativeTestError, col="2", lwd=3)
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
;tempo;preco;classe
1;0.7;0.4;sat
2;0.4;0.5;sat
3;0.61;0.4;sat
4;0.9;0.7;sat
5;0.8;0.3;sat
6;0.6;1;sat
7;0.2;0.6;ins
8;0.4;0.3;ins
9;0.61;0.2;ins
10;0.6;0.43;ins
11;0.5;0.1;ins
12;1;0.2;ins
44 changes: 44 additions & 0 deletions Analise Preditiva/Classificacao/k-NN/k-vizinhos ou k-NN.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#k-vizinhos mais proximos ou k-NN
#

#Exemplo pratico para k-NN :

#Pacotes que serao utilizados:
library(class)

#Conjunto de dados que sera utilizado:
head(iris)
str(iris)

#Contem dados numericos com atributos descritivos usados como conjunto de treinamento
treinamento=iris[2:150, 1:4]
#Contem dados numericos com atributos descritivos para a realizacao do teste
rotulos=iris[2:150,5]
#Utilizado para testar nosso modelo:
teste=iris[1,1:4]
#O numero de vizinhos mais proximos a serem consultados
k=3

#Finalmente, o uso da funcao knn():
y_estimado =knn(treinamento, teste, rotulos, k);y_estimado


#Outra maneira, dessa vez selecionando uma amostra:


#Contem dados numericos com atributos descritivos usados como conjunto de treinamento
treinamento=iris[seq(1,150,2), 1:4]
#Contem dados numericos com atributos descritivos para a realizacao do teste
rotulos=iris[seq(1,150,2),5]
#Utilizado para testar nosso modelo:
teste=iris[seq(2,150,2),1:4]
#O numero de vizinhos mais proximos a serem consultados
k=3

#Finalmente, o uso da funcao knn():
y_estimado =knn(treinamento, teste, rotulos, k);y_estimado

#Taxa de acerto:

tx=sum(y_estimado==iris[seq(2,150,2),5])/length(seq(2,150,2));tx

13 changes: 13 additions & 0 deletions Analise Preditiva/Classificacao/k-NN/satisfacao.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
;tempo;preco;classe
1;0.7;0.4;sat
2;0.4;0.5;sat
3;0.61;0.4;sat
4;0.9;0.7;sat
5;0.8;0.3;sat
6;0.6;1;sat
7;0.2;0.6;ins
8;0.4;0.3;ins
9;0.61;0.2;ins
10;0.6;0.43;ins
11;0.5;0.1;ins
12;1;0.2;ins
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
#Avaliacao de modelos para analise de agrupamento

#Pacotes que serao utilizados nos exemplos:
library(stats)
library(fpc)
library(clv)

#Primeiramente, o conjunto de dados que sera utilizado para a analise:

#Alta compacidade e alta separabilidade
x1 = rbind(matrix(rnorm(300,2,0.2),ncol=2),matrix(rnorm(300, 0.5, 0.2), ncol=2));x1

#Vejamos:
plot(x1, type="n", xlab="x_i1", ylab="x_i2", cex.lab=1.5, cex.axis=2.5)
points(x1[1:150,1],x1[1:150,2],col="4", lwd=3.5,cex=3.5,pch=22)
points(x1[151:300,1],x1[151:300,2],col="2", lwd=3.5,cex=3.5,pch=21)
label=as.integer(c(rep(1,150), rep(2,150)))

#Baixa compacidade:
#Conjunto de dados disponivel em http://cs.joensuu.fi/sipu/datasets/
x2=read.csv(choose.files(), sep="\t", header=F)
x2=as.matrix(x2)
x2=cbind(x1[,1], x2[,2])

#Vejamos:
plot(x2, type="n", xlab="x_i1", ylab="x_i2", cex.lab=1.5, cex.axis=2.5)
points(x2[1:97,1],x2[1:97,2],col="2", lwd=3.5,cex=3.5,pch=21)
points(x2[98:373,1],x2[98:373,2],col="2", lwd=3.5,cex=3.5,pch=22)

#Alta compacidade e baixa separabilidade
x3 = rbind(matrix(rnorm(300,0,sd=0.4),ncol=2),matrix(rnorm(300, 1, 0.4), ncol=2));x3

#Vejamos:
plot(x3, type="n", xlab="x_i1", ylab="x_i2", cex.lab=1.5, cex.axis=2.5)
points(x1[1:150,1],x1[1:150,2],col="2", lwd=3.5,cex=3.5,pch=21)
points(x1[151:300,1],x1[151:300,2],col="4", lwd=3.5,cex=3.5,pch=22)
label=as.integer(c(rep(1,150), rep(2,150)))

#Agora os conjuntos de dados sera submetidos a um processo de agrupamento de dados pelo k-medias,
#como ja se sabe previamente o numero de grupos, o parametro k foi definido como 2:
grupos=kmeans(x1,2)
plot(x1, type="n", xlab="x_i1", ylab="x_i2", cex.lab=1.5, cex.axis=2.5)
#Vejamos a distribuicao dos dados de forma grafica:
G1=x1[(grupos$cluster==1), 1:2]
points(G1[,1], G1[,2], col="4", lwd=3.5, cex=3.5, pch=22)
G2=x1[(grupos$cluster==2), 1:2]
points(G2[,1], G2[,2], col="2", lwd=3.5, cex=3.5, pch=21)
#Vejamos o comportamento de seus centroides
C1=grupos$centers[1,]
points(C1[1], C1[2], col="1", lwd=4, cex=4, pch=15)
C2=grupos$centers[2,]
points(C2[1], C2[2], col="1", lwd=4, cex=4, pch=16)




# calculo dos indices -----------------------------------------------------

#Aplicando a funcao que calcula os indices externos:

#dados de exemplo:
G = as.integer(c(1,1,1,1,2,2,2))
P = as.integer(c(1,1,1,2,1,2,2))

std=std.ext(P, #Eh o conjundo de rotulos dos dados, representando o particionamento conhecido
G) #Eh o conjunto de rotulos associado aos dados por um algoritmo de agrupamento de dados
std #funcao retorna um objeto com as variaveis Soma A, Soma B, Soma C, Soma D

#Portanto, os indices de validacao externos podem ser obtidos da seguinte maneira:
rand = clv.Rand(std);rand
jaccard = clv.Jaccard(std);jaccard
folk.mal = clv.Folkes.Mallows(std);folk.mal

#Aplicacao da funcao que calcula os indices internos:

#dados de exemplo:
x= c(3,7,10,17,18,20)
G=kmeans(x,3)
grupos = as.integer(G$cluster)

scatt = cls.scatt.data(as.matrix(x), #Eh o conjunto de dados submetido ao agrupamento
grupos, #Eh o conjunto de rotulos associado aos dados por um algoritmo de agrupamento
dist="euclidean") #Eh a metrica de distancia para o calculo de similaridade inter e intragrupos, por exemplo: euclidean, manhattan, correlation
scatt #Funcao retorna um objeto com medidas inter e intragrupos

#Apos calculadas as medidas inter e intragupos, eh possivel calcular os indices a partir dos seguintes comados:
devier = clv.Davies.Bouldin(scatt, "complete", "single");devier
dunn = clv.Dunn(scatt, "complete", "single"); dunn

#Note que ha dois tipos de parametros que devem ser previamente definidos: intercluster e intracluster.
#Para intercluster: principais discutidas no agrupamento hierarquico: single, complete, average e centroid
#PAra intracluster: opcoes sao : complete, average, controid
#Nos exemplos acima foi utilizado a opcao centroide para os dois casos


#O indice Silhouette:
indices = cluster.stats(dist(x), #Eh a matriz de distancia entre os dados
grupos) #Eh o conjunto de rotulos associado aos dados por um algoritmo de agrupamento de dados.
indices #Retorna um objeto com varios valores de indices, entre eles o valor do Indice de Silhouette
#e finalmente;
silhouette = indices$avg.silwidth ; silhouette
25 changes: 25 additions & 0 deletions Analise de Agrupamento/Densidade/DBSCAN/DBSCAN.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#Analise de Agrupamento

#Agrupamento por densidade

#DBSCAN:

#PAcotes necessarios para o exemplo:
library(fpc)

#Carregando dados que serao utilizados no exemplo:
vendas = read.csv(choose.files(), header=T, sep=";");vendas

vendasnorm = read.csv(choose.files(), header=T, sep=";");vendasnorm

#Implementando o algoritmo DBSCAN:
dbs = dbscan(vendasnorm, #o conjundo de dados agrupados, disponivel como um data.frame
eps=1, #eh o parametro que determina a vizinhanca acessivel de um exemplar - nomeado como eps
MinPts=2) #eh o parametro exigido na verificacao da densidade de vizinhanca de um exemplar
dbs #retorna um objeto com os grupos descobertos e tambem indicacao de exemplares classificados como ruido

#Para ver os indicadores de grupos para cada exemplar do conjunto de dados, sendo 0 significa que o exemplar foi considerado ruído
dbs$cluster

#Para visualizar os resultados, eh possivel gerar uma plotagem:
plot(dbs, vendasnorm)
13 changes: 13 additions & 0 deletions Analise de Agrupamento/Densidade/DBSCAN/vendas.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
valor gasto;n de pessoas
432;7
287;3
146;3
201;3
227;3
40.5;1
118;2
97;2
126;2
43;1
161;3
83;2
Binary file not shown.
Loading

0 comments on commit 93db4da

Please sign in to comment.