Clase 11 knn pca lda qda y pcalda

  • Slides: 15
Download presentation
Clase 11: knn, pca, lda, qda y pca+lda Rodrigo Assar, Ph. D LABORATORIO DE

Clase 11: knn, pca, lda, qda y pca+lda Rodrigo Assar, Ph. D LABORATORIO DE BIOINFORMÁTICA Y MATEMÁTICA DEL GENOMA - UNIVERSIDAD DE CHILE

knn: k-nearest neighbour • Se decide la clase de un dato segun la clase

knn: k-nearest neighbour • Se decide la clase de un dato segun la clase “mayoritaria cercana”: – de los k datos de entrenamiento mas cercanos – Cercanos: • Respecto a las variables consideradas • Con distancia euclideana 2

Paquete de R • class en repositorio CRAN. • Funcion knn(): knn(train, test, cl,

Paquete de R • class en repositorio CRAN. • Funcion knn(): knn(train, test, cl, k = 1, l = 0, prob = FALSE, use. all = TRUE) • References: • Ripley, B. D. (1996) Pattern Recognition and Neural Networks. Cambridge. • Venables, W. N. and Ripley, B. D. (2002) Modern Applied Statistics with S. Fourth edition. Springer. LABORATORIO DE BIOINFORMÁTICA Y MATEMÁTICA DEL GENOMA - UNIVERSIDAD DE CHILE

Ejemplo data(iris) c. S <- as. character(Sp <- iris$Species) train=sample(1: 150, 75) test=setdiff(1: 150,

Ejemplo data(iris) c. S <- as. character(Sp <- iris$Species) train=sample(1: 150, 75) test=setdiff(1: 150, train) Resknn=knn(iris[train, 1: 4], iris[test, 1: 4], c. S[train], k = 3, prob=TRUE) table(Resknn, iris[test, 5]) Resknn setosa versicolor virginica setosa 28 0 0 0 23 1 versicolor virginica 0 1 22 LABORATORIO DE BIOINFORMÁTICA Y MATEMÁTICA DEL GENOMA - UNIVERSIDAD DE CHILE

Ejecutando print(Resknn) [1] setosa [5] setosa [9] setosa [13] setosa [17] setosa [21] setosa

Ejecutando print(Resknn) [1] setosa [5] setosa [9] setosa [13] setosa [17] setosa [21] setosa [25] setosa [29] versicolor [33] versicolor [37] virginica versicolor [41] versicolor … 5

Continuacion print(Resknn) attr(, "prob") [1] 1. 0000000 [5] 1. 0000000 [9] 1. 0000000 [13]

Continuacion print(Resknn) attr(, "prob") [1] 1. 0000000 [5] 1. 0000000 [9] 1. 0000000 [13] 1. 0000000 [17] 1. 0000000 [21] 1. 0000000 [25] 1. 0000000 [29] 1. 0000000 [33] 1. 0000000 [37] 1. 0000000 [41] 1. 0000000 … 6

Validando con leave-one-out Se construye tantos predictores knn como datos de entrenamiento, en cada

Validando con leave-one-out Se construye tantos predictores knn como datos de entrenamiento, en cada uno una de las filas no se considera (se usa como validacion). Finalmente se constroye el predictor por mayoria. Resknncv=knn. cv(iris[, 1: 4], c. S, k = 3, prob=TRUE) table(Resknncv, iris[, 5]) Resknncv setosa versicolor virginica 50 0 47 3 0 3 47 prediccion. RFvalid LABORATORIO DE BIOINFORMÁTICA Y MATEMÁTICA DEL GENOMA - UNIVERSIDAD DE CHILE

Comparemos ambos clasificadores table(Resknncv[test], Resknn) Resknn setosa versicolor virginica 28 0 0 0 24

Comparemos ambos clasificadores table(Resknncv[test], Resknn) Resknn setosa versicolor virginica 28 0 0 0 24 0 0 0 23 8

Otros clasificadores: LDA (An. Disc. Lineal), QDA, PCA+LDA Package MASS: Funciones lda(), tambien qda()

Otros clasificadores: LDA (An. Disc. Lineal), QDA, PCA+LDA Package MASS: Funciones lda(), tambien qda() para cuadratico. Iris <- data. frame(rbind(iris 3[, , 1], iris 3[, , 2], iris 3[, , 3]), Sp = rep(c("s", "c", "v"), rep(50, 3))) Reslda=lda(Sp~. , Iris, prior = c(1, 1, 1)/3, subset = train) Prediccioneslda=predict(Reslda, Iris[test, ])$class Resqda=qda(Sp~. , Iris, prior = c(1, 1, 1)/3, subset = train) Prediccionesqda=predict(Resqda, Iris[test, ])$class 9

Revisando resultados table(Prediccioneslda, Prediccionesqda) Prediccionesqda Prediccioneslda c s v c 22 0 2 s

Revisando resultados table(Prediccioneslda, Prediccionesqda) Prediccionesqda Prediccioneslda c s v c 22 0 2 s 0 28 0 v 0 0 23 table(Prediccioneslda, Iris$Sp[valid]) Prediccioneslda c s v c 23 0 1 s 0 28 0 v 1 0 22 table(Prediccionesqda, Iris$Sp[valid]) Prediccionesqda c s v c 22 0 0 s 0 28 0 v 2 0 23 10

Comparemos con knn Para poder comparar, uniformamos los nombres de las clases: resknn=as. character(Resknn)

Comparemos con knn Para poder comparar, uniformamos los nombres de las clases: resknn=as. character(Resknn) resknn[resknn=="virginica"]=“v” resknn[resknn=="versicolor"]=“c” resknn[resknn=="setosa"]="s" table(resknn, Prediccionesqda) Prediccionesqda resknn c s v c 22 0 2 s 0 28 0 v 0 0 23 table(resknn, Prediccioneslda) Prediccioneslda resknn c s v c 24 0 0 s 0 28 0 v 0 0 23 11

PCA+LDA • Transformando la matriz de datos con PCA: • respca=princomp(~. , data =

PCA+LDA • Transformando la matriz de datos con PCA: • respca=princomp(~. , data = iris[, 1: 4], cor = TRUE) • Iris_pca <- data. frame(respca$scores, Sp = rep(c("s", "c", "v"), rep(50, 3))) • Aplicando lda a los nuevos datos: • Reslda_pca=lda(Sp~. , Iris_pca, prior = c(1, 1, 1)/3, subset = train) • Prediccioneslda_pca=predict(Reslda_pca, Iris_pca[te st, ])$class 12

Mirando resultados • Respecto a realidad: table(Prediccioneslda_pca, Iris$Sp[test]) Prediccioneslda_pca c s v c 23

Mirando resultados • Respecto a realidad: table(Prediccioneslda_pca, Iris$Sp[test]) Prediccioneslda_pca c s v c 23 0 1 s 0 28 0 v 1 0 22 • Respecto a lda: table(Prediccioneslda_pca, Iris$Sp[valid]) Prediccioneslda_pca c s v c 23 0 1 s 0 28 0 v 1 0 22 13

Pero la gracia es reducir variables con el pca • Trabajando con las 3

Pero la gracia es reducir variables con el pca • Trabajando con las 3 primeras componentes: Iris_pca 3 <- data. frame(respca$scores[, 1: 3], Sp = rep(c("s", "c", "v"), rep(50, 3))) Reslda_pca 3=lda(Sp~. , Iris_pca 3, prior = c(1, 1, 1)/3, subset = train) Prediccioneslda_pca 3=predict(Reslda_pca 3, Iris_pca 3[t est, ])$class 14

Mirando resultados: perdemos • table(Prediccioneslda_pca 3, Iris$Sp[valid]) Prediccioneslda_pca 3 c s v c 23

Mirando resultados: perdemos • table(Prediccioneslda_pca 3, Iris$Sp[valid]) Prediccioneslda_pca 3 c s v c 23 0 3 s 0 28 0 v 1 0 20 table(Prediccioneslda_pca 3, Prediccioneslda_pca) Prediccioneslda_pca 3 c s v c 24 0 2 s 0 28 0 15 v 0 0 21