====== Saulo Henrique Pires de Oliveira ======
Mestrando em Bioinformática pelo Instituto de Bioinformática da USP. Atualmente, está sob a orientação do Dr. Paulo Sergio Lopes de Oliveira, dentro do Laboratório de Genética e Cardiologia Molecular - INCOR/HCFM-USP. Atua na área de Biologia Computacional, com ênfase em proteômica. O título do projeto com o qual trabalha é: "Desenvolvimento de um algoritmo para identificação e caracterização de cavidades em regiões específicas de estruturas tridimensionais de proteínas".
===== Meus Exercícios =====
Exercício 1: {{:bie5782:01_curso_atual:alunos:trabalho_final:saulo.oliveira:saulo_1_f.r|}}
Exercício 2: {{:bie5782:01_curso_atual:alunos:trabalho_final:saulo.oliveira:saulo_2_f.r|}}
Exercício 3: {{:bie5782:01_curso_atual:alunos:trabalho_final:saulo.oliveira:saulo_3_f.r|}}
Exercício 4: {{:bie5782:01_curso_atual:alunos:trabalho_final:saulo.oliveira:saulo_4_f.r|}}
Exercício 5: {{:bie5782:01_curso_atual:alunos:trabalho_final:saulo.oliveira:saulo_5_f.r|}}
Exercício 6: {{:bie5782:01_curso_atual:alunos:trabalho_final:saulo.oliveira:saulo_6_f.r|}}
Exercício 7: {{:bie5782:01_curso_atual:alunos:trabalho_final:saulo.oliveira:saulo_7_f.r|}}
Exercício 8: {{:bie5782:01_curso_atual:alunos:trabalho_final:saulo.oliveira:saulo_8_f.r|}}
Exercício 9: {{:bie5782:01_curso_atual:alunos:trabalho_final:saulo.oliveira:saulo_9_f.r|}}
===== Proposta de Trabalho Final =====
==== Plano A: Um Classificador Bayesiano para Dados em duas Dimensões ====
A idéia é implementar uma função que recebe:
-Duas matrizes de dimensões n1 x 2 e n2 x 2 com tuplas de dados que seguem uma distribuição aproximadamente normal.
-A proporção de cada uma das classes de interesse na população.
ou
-Um parâmetro indicando que um estimador das proporções na população deve ser calculado pela função.
A função gera um gráfico com os dados plottados em duas dimensões, assim como a superfície de decisão encontrada para o classificador bayesiano nesse conjunto de dados. Ela retornará a equação da superfície de decisão, que poderá então ser usada para a classificação de novos dados entre classe 1 ou classe 2.
==== Plano B: Perceptron ====
A idéia é implementar uma função que recebe:
-Uma matriz D de n por m dimensões com tuplas de dados que seguem uma distribuição qualquer.
-Um vetor B com a classe de cada uma das amostras.
Obs: Os dados precisam ser linearmente separáveis.
A função encontra a superfície para um classificador linear utilizando o algoritmo Perceptron. Além disso, ela gera uma estimativa para o erro do classificador, utilizando o erro de Bolstering. Caso os dados possuam dimensão m < = 3, a função permite que o usuário especifique como parâmetro que a função gere um gráfico com os dados e a superfície de decisão encontrada.
===== Página de Ajuda =====
class.bayes package:nenhum R Documentation
Cálculo de um Classificador de Bayes para duas classes de amostras com duas características
cada, que seguem uma distribuição aproximadamente normal.
Description:
Calcula a superfície de decisão de um classificador de Bayes para os dado de entrada e
imprime a equação dessa superfície. Produz um gráfico com os dados das duas classes, e
adiciona uma curva representando a superfície de decisão do classificador.
Usage:
class.bayes(x, y,prop=T, prop1=0.5, prop2=0.5, precision=10000)
Arguments:
x: Matriz numérica com 2 colunas representando os valores das duas características de uma
amostra da classe 1.
y: Matriz numérica com 2 colunas representando os valores das duas características de uma
amostra da classe 2.
prop: Lógico. Indica se as proporções serão passadas como parâmetros ou se devem ser estimadas pela função.
prop1: A proporção da amostra de classe 1 na população.
prop2: A proporção da amostra de classe 2 na população.
precision: um inteiro indicando a precisão (ver detalhes)
Details:
A função inicialmente estima as proporções para cada uma das classes das duas amostras
passadas como parâmetro. Em seguida, o vetor médio e a matriz de covariância de cada uma
das amostras são calculados. Estes dados são utilizados para obter os parâmetros da
equação da superfície de decisão do classificador.
Uma vez obtida a equação da superfície de decisão, a função gera um gráfico com os dados da
entrada. Para adicionar a curva ao gráfico, um número "n" de pontos da curva ("n" é fornecido
com o parâmetro "precision") são computados, e então a curva é aproximada através desses pontos.
Value:
Um gráfico é gerado, contendo os dados e a curva de decisão do classificador. Uma string
contendo a equação da superfície de decisão do classificador é impressa e retornada pela função.
Warning:
Cada uma das características de ambas as amostras necessariamente precisa seguir uma distribuição
normal, sendo que as matrizes de covariância devem apresentar determinante não nulo para que o
classificador de Bayes possa ser encontrado.
A função assume que a soma das proporções fornecidas como parâmetro somem 1.
Author(s):
Saulo Henrique Pires de Oliveira
sauloho@gmail.com
References:
Richard O. Duda, Peter E. Hart, David G. (2000). Pattern Classification (2nd Edition) Stork. ISBN: 978-0-471-05669-0.
See Also:
O pacote ROCR para manipulação e avaliação de desempenho de classificadores.
Examples:
# Primeiro Exemplo (Classificador linear):
d1=rnorm(10000,10,2)
d2=rnorm(10000,5,2)
d3=rnorm(10000,30,2)
d4=rnorm(10000,15,2)
D1=matrix(nrow=10000,ncol=2)
D2=matrix(nrow=10000,ncol=2)
D1[,1]=d1
D1[,2]=d2
D2[,1]=d3
D2[,2]=d4
class.bayes(D1,D2)
# Segundo Exemplo (classificador não linear):
d1=rnorm(10000,10,2)
d2=rnorm(10000,5,2)
d3=rnorm(10000,30,4)
d4=rnorm(10000,15,2)
D1=matrix(nrow=10000,ncol=2)
D2=matrix(nrow=10000,ncol=2)
D1[,1]=d1
D1[,2]=d2
D2[,1]=d3
D2[,2]=d4
class.bayes(D1,D2)
===== Código da Função =====
class.bayes <- function (class1,class2,prop=F,prop1,prop2,precision=10000)
{
if(!prop)
{
prop1 <- length(class1)/(length(class1)+length(class2))
prop2 <- length(class2)/(length(class1)+length(class2))
}
mu1 <- apply(class1,2,mean)
mu2 <- apply(class2,2,mean)
cov1 <- cov(class1)
cov2 <- cov(class2)
W1=-0.5*solve(cov1,ncol=2)
w1=solve(cov1)%*%mu1
w10= -0.5*(mu1%*%solve(cov1))%*%mu1 -0.5*log(det(cov1)) + log(prop1)
W2=-0.5*solve(cov2,ncol=2)
w2=solve(cov2)%*%mu2
w20= -0.5*(mu2%*%solve(cov2))%*%mu2 -0.5*log(det(cov2)) + log(prop2)
coefx2 <- W1[1,1]-W2[1,1]
coefx <- w1[1,1]-w2[1,1]
coefy2 <-W1[2,2]-W2[2,2]
coefy <- w1[2,1]-w2[2,1]
coefxy <- W1[1,2]*W1[2,1]- W2[1,2]*W2[2,1]
coef0 <- w10 - w20
xmin=min(c(min(class1[,1],class2[,1])))-1
xmax=max(c(max(class1[,1],class2[,1])))+1
ymin=min(c(min(class1[,2],class2[,2])))-1
ymax=max(c(max(class1[,2],class2[,2])))+1
plot(class1,col="green",xlim=c(xmin,xmax),ylim=c(ymin,ymax),pch=3,main="Dados das Classes 1 e 2 e Superfície de Decisão",
xlab="Característica 1",ylab="Característica 2",cex.lab=1.4)
points(class2,col="red",pch=4)
if(coefy2>0.001)
{
surface1<-matrix(ncol=2,nrow=2*precision)
for(i in 1:precision)
{
surface1[i,1]<-xmin+1 + i*((xmax-xmin)/precision )
surface1[i+precision,1]<-xmin+1 + i*((xmax-xmin)/precision )
a<-coefy2
b<-coefy + coefxy*surface1[i,1]
c<-coefx2*surface1[i,1]^2 + coefx*surface1[i,1] +coef0
delt = b*b - 4*(a*c)
if( delt >=0 )
{
y1 = ( (-b + sqrt(delt)) / (2*a) )
y2 = ( (-b - sqrt(delt)) / (2*a) )
surface1[i,2] <- y1
surface1[i+precision,2] <- y2
}
}
}
else
{
surface1<-matrix(ncol=2,nrow=precision)
for(i in 1:precision)
{
surface1[i,1]<-xmin+1 + i*((xmax-xmin)/precision )
b<-coefy + coefxy*surface1[i,1]
c<-coefx2*surface1[i,1]^2 + coefx*surface1[i,1] +coef0
surface1[i,2] <- (-c/b)
}
}
lines(surface1)
s=paste(coefx2,"*x^2 +(",coefx,")*x +(",coefy2,")*y^2 +(",coefy,")*y +(",coefxy,")*x*y +(",coef0,")\n")
cat(s)
return(s)
}
===== Arquivo da Função =====
{{:bie5782:01_curso_atual:alunos:trabalho_final:saulo.oliveira:bayes1.r|bayes.r}}