Tabela de conteúdos

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: saulo_1_f.r

Exercício 2: saulo_2_f.r

Exercício 3: saulo_3_f.r

Exercício 4: saulo_4_f.r

Exercício 5: saulo_5_f.r

Exercício 6: saulo_6_f.r

Exercício 7: saulo_7_f.r

Exercício 8: saulo_8_f.r

Exercício 9: 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

bayes.r