Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porMaría Ángeles Arroyo Aguilar Modificado hace 6 años
1
Clase 11: knn,pca,lda,qda y pca+lda
Rodrigo Assar, PhD L A B O R A T O R I O D E B I O I N F O R M Á T I C A Y M A T E M Á T I C A D E L G E N O M A - U N I V E R S I D A D D E C H I L E
2
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
3
Paquete de R class en repositorio CRAN. Funcion knn(): References:
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. L A B O R A T O R I O D E B I O I N F O R M Á T I C A Y M A T E M Á T I C A D E L G E N O M A - U N I V E R S I D A D D E C H I L E
4
Ejemplo data(iris) cS <- 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], cS[train], k = 3, prob=TRUE) table(Resknn,iris[test,5]) Resknn setosa versicolor virginica setosa versicolor virginica L A B O R A T O R I O D E B I O I N F O R M Á T I C A Y M A T E M Á T I C A D E L G E N O M A - U N I V E R S I D A D D E C H I L E
5
Ejecutando print(Resknn)
[1] setosa setosa setosa setosa [5] setosa setosa setosa setosa [9] setosa setosa setosa setosa [13] setosa setosa setosa setosa [17] setosa setosa setosa setosa [21] setosa setosa setosa setosa [25] setosa setosa setosa setosa [29] versicolor versicolor versicolor versicolor [33] versicolor versicolor versicolor versicolor [37] virginica versicolor versicolor versicolor [41] versicolor versicolor versicolor versicolor …
6
Continuacion print(Resknn)
attr(,"prob") [1] [5] [9] [13] [17] [21] [25] [29] [33] [37] [41] …
7
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], cS, k = 3, prob=TRUE) table(Resknncv,iris[,5]) Resknncv setosa versicolor virginica setosa versicolor virginica prediccionRFvalid L A B O R A T O R I O D E B I O I N F O R M Á T I C A Y M A T E M Á T I C A D E L G E N O M A - U N I V E R S I D A D D E C H I L E
8
Comparemos ambos clasificadores
table(Resknncv[test],Resknn) Resknn setosa versicolor virginica setosa versicolor virginica
9
Otros clasificadores: LDA (An.Disc.Lineal), QDA, PCA+LDA
Package MASS: Funciones lda(), tambien qda() para cuadratico. Iris <- data.frame(rbind(iris3[,,1], iris3[,,2], iris3[,,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
10
Revisando resultados table(Prediccioneslda,Prediccionesqda) Prediccionesqda Prediccioneslda c s v c s v table(Prediccioneslda,Iris$Sp[valid]) Prediccioneslda c s v c s v table(Prediccionesqda,Iris$Sp[valid]) Prediccionesqda c s v c v
11
Comparemos con knn table(resknn,Prediccioneslda) Prediccioneslda
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 s v table(resknn,Prediccioneslda) Prediccioneslda resknn c s v c
12
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
13
Mirando resultados Respecto a realidad: Respecto a lda:
table(Prediccioneslda_pca,Iris$Sp[test]) Prediccioneslda_pca c s v c s v Respecto a lda: table(Prediccioneslda_pca,Iris$Sp[valid]) Prediccioneslda_pca c s v
14
Pero la gracia es reducir variables con el pca
Trabajando con las 3 primeras componentes: Iris_pca3 <- data.frame(respca$scores[,1:3],Sp = rep(c("s","c","v"), rep(50,3))) Reslda_pca3=lda(Sp~ ., Iris_pca3, prior = c(1,1,1)/3, subset = train) Prediccioneslda_pca3=predict(Reslda_pca3,Iris_pca3[t est,])$class
15
Mirando resultados: perdemos
table(Prediccioneslda_pca3,Iris$Sp[valid]) Prediccioneslda_pca c s v c s v table(Prediccioneslda_pca3,Prediccioneslda_pca) Prediccioneslda_pca Prediccioneslda_pca c s v c v
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.