2010-02-23 20 views
7

Estoy usando la máquina de vectores de soporte del paquete e1071 para clasificar mis datos y quiero visualizar cómo la máquina realmente hace la clasificación. Sin embargo, al usar la función plot.svm, recibo un error que no puedo resolver.Error al trazar el gráfico de clasificación SVM

Guión:

library("e1071") 

data <-read.table("2010223_11042_complete") 
names(data) <- c("Class","V1", "V2") 

model <- svm(Class~.,data, type = "C-classification", kernel = "linear") 
plot(model,data,fill=TRUE, grid=200, svSymbol=4, dataSymbol=1, color.palette=terrain.colors) 

Salida:

plot(model,data,fill=TRUE, grid=200, svSymbol=4, dataSymbol=1, color.palette=terrain.colors) 
Error in rect(0, levels[-length(levels)], 1, levels[-1L], col = col) : 
    cannot mix zero-length and non-zero-length coordinates 

Rastreo:

traceback() 
4: rect(0, levels[-length(levels)], 1, levels[-1L], col = col) 
3: filled.contour(xr, yr, matrix(as.numeric(preds), nr = length(xr), 
     byrow = TRUE), plot.axes = { 
     axis(1) 
     axis(2) 
     colind <- as.numeric(model.response(model.frame(x, data))) 
     dat1 <- data[-x$index, ] 
     dat2 <- data[x$index, ] 
     coltmp1 <- symbolPalette[colind[-x$index]] 
     coltmp2 <- symbolPalette[colind[x$index]] 
     points(formula, data = dat1, pch = dataSymbol, col = coltmp1) 
     points(formula, data = dat2, pch = svSymbol, col = coltmp2) 
    }, levels = 1:(length(levels(preds)) + 1), key.axes = axis(4, 
     1:(length(levels(preds))) + 0.5, labels = levels(preds), 
     las = 3), plot.title = title(main = "SVM classification plot", 
     xlab = names(lis)[2], ylab = names(lis)[1]), ...) 
2: plot.svm(model, data, fill = TRUE, grid = 200, svSymbol = 4, 
     dataSymbol = 1, color.palette = terrain.colors) 
1: plot(model, data, fill = TRUE, grid = 200, svSymbol = 4, 
     dataSymbol = 1, color.palette = terrain.colors) 

Parte de mi (4488 líneas de largo) archivo de datos:

-1 0 23.532 
+1 1 61.1157 
+1 1 61.1157 
+1 1 61.1157 
-1 1 179.03 
-1 0 17.0865 
-1 0 27.6201 
-1 0 17.0865 
-1 0 27.6201 
-1 1 89.6398 
-1 0 42.7418 
-1 1 89.6398 

Como recién estoy comenzando con R, no tengo idea de qué significa esto y cómo debo tratarlo, ni encontré nada útil en otros lugares.

Respuesta

4

sin estar seguros de qué causa exactamente el problema, me gustaría tratar de transformar la columna de la Class a un factor (por lo que la definición del tipo que C-classification ya no será necesario) usando algo como esto:

data$Class <- as.factor(data$Class) 

o en un solo paso:

model <- svm(as.factor(Class)~.,data, kernel = "linear") 
+0

Gracias amigo. Funciona de maravilla. Al igual que propusiste, transformé mi columna de Clase en un factor y eliminé el argumento 'tipo' en la llamada de svm. El error se fue. – user655423

Cuestiones relacionadas