Pregunta

Estoy usando la máquina de vectores de soporte del paquete e1071 para clasificar mis datos y quiere visualizar cómo la máquina realmente hace la clasificación. Sin embargo, cuando se utiliza la función plot.svm, me sale un error que no puede resolver.

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

Desde que yo estoy empezando con R, no tengo idea de lo que esto significa y cómo debo tratar con él, ni me encontrar nada útil en otros lugares.

¿Fue útil?

Solución

Sin estar seguro de qué es exactamente lo que causa 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")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top