[R-es] predict en objetos creados por kknn

"Raúl Vaquerizo" rvaquerizo en analisisydecision.es
Mar Oct 28 18:06:07 CET 2014


Compañeros, me siento superado por este problema. A ver si me podéis
ayudar. No me funciona (o no entiendo) predict en objetos creados por
kknn. Os pongo un ejemplo sencillo que trata de predecir un cuadrado en
una nube de puntos en el plano. Muy sencillo viendo el código:

#Datos
#Se trata de una nube de puntos en el plano
long = 10000
x <- runif(long,1,100)
y <- runif(long,1,100)
datos <- data.frame(x,y)

#Creamos un conjunto de datos de entrenamiento y otro de test
indices <- sample(1:long,long/2)
entrenamiento <- datos[indices,]
test <- datos[-indices,]


#Preparamos un gráfico de dispersión
library(ggplot2)
g <- ggplot(entrenamiento,aes(entrenamiento$x,entrenamiento$y)) +
geom_point()

#g

#Vamos a crear las clases que nos un cuadrado
C <- ifelse(entrenamiento$x>20 & entrenamiento$x<80 & entrenamiento$y>20
&entrenamiento$y<80,1,0)

#Pintamos en nuestra nube de puntos ese cuadrado
g + geom_point(aes(colour = C))+ opts(title="PINTAMOS UN CUADRADO")

#Comenzamos a trabajar con knn
#La librería será kknn
library(kknn)

#Voy a buscar el mejor modelo k maximo 10 y unas funciones kernel
entreno.Cuadrado<-cbind(C,entrenamiento)
aprox.Cuadrado <- train.kknn(C ~ x + y, data = entreno.Cuadrado,
	kmax = 10, kernel = c("rectangular", "triangular", "epanechnikov",
	"gaussian", "rank"))
plot(aprox.Cuadrado)

#Triangular con k=4 es el que mejor pinta tiene si pintáis los
fitted.values queda de lujo
test.Cuadrado<-cbind(C,test)
knn.Cuadrado <-
kknn(C~x+y,entreno.Cuadrado,test.Cuadrado,k=4,kernel="triangular")

g + geom_point(aes(colour = predict(knn.Cuadrado,test.Cuadrado)))+
opts(title="PINTAMOS UN MOJÓN")

Mi problema es que PREDICT NO FUNCIONA CON KKNN. Tengo la impresión de que
me está realizando la predicción para el modelo de k=1, pero esto es una
impresión mía dentro del gran número de pajas mentales que me estoy
haciendo. Pensé que había alguna función predict.kknn pero por lo visto
no. Me estoy comenzando a crispar y no me gusta la librería class. A ver
si alguien puede arrojar un poco de luz, muchas gracias.


Raúl Vaquerizo Romero
www.analisisydecision.es



Más información sobre la lista de distribución R-help-es