Baixe o app para aproveitar ainda mais
Prévia do material em texto
Lista teórica - Aprendizado de máquina Rebeca Barros Questão 3 Letra B Suponha o caso binário em que Y assume apenas duas classes possívies {c,d}. LDA No caso do LDA a equação do discriminante é um polinômio de grau um e a sua fronteira de decisão é o ponto de encontro entre as duas retas (δc = δd) como mostrado nas contas da letra A e pelo gráfico abaixo. Então, a sua fronteira de decisão é apenas um ponto mas seu discrimante é linear em x. delta.LDA = function(x, mu.c, P.c, sigma2) { (x*mu.c)/sigma2 - (mu.cˆ2)/(2*sigma2) + log(P.c) } fd.LDA = function(mu.c, mu.d, P.c, sigma2) { P.d = 1-P.c (mu.c + mu.d)/2 - (sigma2/(mu.c - mu.d))*log(P.c/P.d)} x.seq = seq(-1,3,0.001) delta.c = delta.LDA(x.seq, 1, 0.4, 0.8) delta.d = delta.LDA(x.seq, 3, 0.6, 0.8) fd.x = fd.LDA(1, 3, 0.4, 0.8) fd.y = delta.LDA(fd.x, 1, 0.4, 0.8) ggplot() + geom_line(mapping = aes(x = x.seq, y = delta.c, colour = "Delta.C")) + geom_line(mapping = aes(x = x.seq, y = delta.d, colour = "Delta.D")) + geom_point(mapping = aes(x = fd.x, y = fd.y, colour = "Fronteira de decisão")) + theme_minimal() + theme(legend.position = "bottom") + scale_color_manual(values = c("red", "blue", "black")) + labs(x = "x", y = "y", colour = "") 1 −10 −5 0 5 −1 0 1 2 3 x y Delta.C Delta.D Fronteira de decisão ggplot() + geom_line(mapping = aes(x = seq(-5,fd.x,0.01), y = 0, color = "C")) + geom_line(mapping = aes(x = seq(fd.x,10,0.01), y = 0, color = "D")) + geom_point(mapping = aes(x = fd.x, y = 0, color = "Fronteira de decisão")) + theme_minimal() + theme(legend.position = "bottom") + scale_color_manual(values = c("red", "blue", "black")) + scale_y_continuous(limits = c(-0.1,0.1), breaks = NULL,labels = NULL) + labs(x = "x", y = "", colour = "", title = "Regra de decisão") 2 −5 0 5 10 x C D Fronteira de decisão Regra de decisão QDA Já no caso do QDA a equação do discriminante é um polinômio de grau dois e a sua fronteira de decisão é o ponto de encontro entre essas duas parábolas (δc = δd). Podemos achar esses pontos, encontrando as raízes da equação de grau dois descrita na letra A. Então, a sua fronteira de decisão é dada por dois pontos, mas seu discrimante é quadrático em x. Abaixo temos o código implementando as equações e um gráfico com um exemplo. rm(list=ls()) delta.QDA = function(x, mu.c, sigma2.c, P.c) { -0.5*log(sigma2.c) - 0.5*((x-mu.c)ˆ2/sigma2.c) + log(P.c) } fd.QDA = function(mu.c, mu.d, sigma2.c, sigma2.d, P.c) { P.d = 1-P.c a = (sigma2.d - sigma2.c) b = -2*(mu.c*sigma2.d - mu.d*sigma2.c) c = ((mu.cˆ2)*sigma2.d - (mu.dˆ2)*sigma2.c) - 2*log(P.c/P.d)*(sigma2.d*sigma2.c) + log(sigma2.c/sigma2.d)*(sigma2.d*sigma2.c) return(list(a=a,b=b,c=c)) } 3 x.seq = seq(-5,10,0.001) delta.c = delta.QDA(x.seq, 1, 0.8, 0.4) delta.d = delta.QDA(x.seq, 3, 0.1, 0.6) fd.coef = fd.QDA(1, 3, 0.8, 0.1, 0.4) ## coeficientes do polinomio ## de grau 2 da fronteira de decisão raizes = polyroot(c(fd.coef$c, fd.coef$b, fd.coef$a)) fd.x = Re(raizes) fd.y = delta.QDA(fd.x, 3, 0.1, 0.6) ggplot() + geom_line(mapping = aes(x = x.seq, y = delta.c, color = "Delta.c")) + geom_line(mapping = aes(x = x.seq, y = delta.d, color = "Delta.d")) + geom_point(mapping = aes(x = fd.x, y = fd.y, color = "Fronteira de decisão")) + theme_minimal() + theme(legend.position = "bottom") + scale_color_manual(values = c("red", "blue", "black")) + labs(x = "x", y = "y", colour = "") −300 −200 −100 0 −5 0 5 10 x y Delta.c Delta.d Fronteira de decisão ggplot() + geom_line(mapping = aes(x = x.seq, y = delta.c, color = "Delta.c")) + geom_line(mapping = aes(x = x.seq, y = delta.d, color = "Delta.d")) + 4 geom_point(mapping = aes(x = fd.x, y = fd.y, color = "Fronteira de decisão")) + theme_minimal() + theme(legend.position = "bottom") + scale_color_manual(values = c("red", "blue", "black")) + scale_x_continuous(limits = c(1,5)) + scale_y_continuous(limits = c(-25,10)) + labs(x = "x", y = "y", colour = "", title = "Gráfico ampliado") −20 −10 0 10 1 2 3 4 5 x y Delta.c Delta.d Fronteira de decisão Gráfico ampliado Podemos perceber que a variabilidade parece influenciar na abertura da parábola. A variabilidade menor da classe D deixou a curva mais fechada se comparada com a classe C. Como falado na parte A da questão, escolhemos a classe C se δc > δd, então a regra de decisão seria como no gráfico abaixo ggplot() + geom_line(mapping = aes(x = seq(-5,fd.x[1],0.01), y = 0, color = "C")) + geom_line(mapping = aes(x = seq(fd.x[2],10,0.01), y = 0, color = "C")) + geom_line(mapping = aes(x = seq(fd.x[1],fd.x[2],0.01), y = 0, color = "D")) + geom_point(mapping = aes(x = fd.x, y = 0, color = "Fronteira de decisão")) + theme_minimal() + theme(legend.position = "bottom") + scale_color_manual(values = c("red", "blue", "black")) + scale_y_continuous(limits = c(-0.1,0.1), breaks = NULL,labels = NULL) + labs(x = "x", y = "", colour = "", title = "Regra de decisão") 5 −5 0 5 10 x C D Fronteira de decisão Regra de decisão Um caso interessante de se ver é quando as variâncias são iguais, pois caímos no caso LDA em que só temos um ponto de encontro (de forma equivalente, temos 2 raízes iguais), como mostra o gráfico abaixo. rm(list=ls()) delta.QDA = function(x, mu.c, sigma2.c, P.c) { -0.5*log(sigma2.c) - 0.5*((x-mu.c)ˆ2/sigma2.c) + log(P.c) } fd.QDA = function(mu.c, mu.d, sigma2.c, sigma2.d, P.c) { P.d = 1-P.c a = (sigma2.d - sigma2.c) b = -2*(mu.c*sigma2.d - mu.d*sigma2.c) c = ((mu.cˆ2)*sigma2.d - (mu.dˆ2)*sigma2.c) -2*log(P.c/P.d)*(sigma2.d*sigma2.c) +log(sigma2.c/sigma2.d)*(sigma2.d*sigma2.c) return(list(a=a,b=b,c=c)) } x.seq = seq(-20,20,0.001) delta.c = delta.QDA(x.seq, -3, 1, 0.1) delta.d = delta.QDA(x.seq, 2, 1, 0.9) fd.coef = fd.QDA(-3, 2, 1, 1, 0.1) ## coeficientes do polinomio ## de grau 2 da fronteira de decisão 6 raizes = polyroot(c(fd.coef$c, fd.coef$b, fd.coef$a)) fd.x = Re(raizes) fd.y = delta.QDA(fd.x, -3, 1, 0.1) ggplot() + geom_line(mapping = aes(x = x.seq, y = delta.c, color = "Delta.c")) + geom_line(mapping = aes(x = x.seq, y = delta.d, color = "Delta.d")) + geom_point(mapping = aes(x = fd.x, y = fd.y, color = "Fronteira de decisão")) + theme_minimal() + theme(legend.position = "bottom") + scale_color_manual(values = c("red", "blue", "black")) + labs(x = "x", y = "y", colour = "") −200 −100 0 −20 −10 0 10 20 x y Delta.c Delta.d Fronteira de decisão ggplot() + geom_line(mapping = aes(x = x.seq, y = delta.c, color = "Delta.c")) + geom_line(mapping = aes(x = x.seq, y = delta.d, color = "Delta.d")) + geom_point(mapping = aes(x = fd.x, y = fd.y, color = "Fronteira de decisão")) + theme_minimal() + theme(legend.position = "bottom") + scale_color_manual(values = c("red", "blue", "black")) + scale_x_continuous(limits = c(-5,5)) + scale_y_continuous(limits = c(-25,5)) + labs(x = "x", y = "y", colour = "", title = "Gráfico ampliado") 7 −20 −10 0 −5.0 −2.5 0.0 2.5 5.0 x y Delta.c Delta.d Fronteira de decisão Gráfico ampliado 8 Questão 3 Letra B LDA QDA
Compartilhar