2010-02-23 60 views
7

Tôi đang sử dụng máy vectơ hỗ trợ từ gói e1071 để phân loại dữ liệu của mình và muốn hình dung cách máy thực sự phân loại. Tuy nhiên, khi sử dụng hàm plot.svm, tôi nhận được một lỗi mà tôi không thể giải quyết được.Lỗi vẽ biểu đồ phân loại SVM

Script:

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) 

Output:

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 

Traceback:

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) 

Một phần của (4488 đường dài) tập tin dữ liệu của tôi:

-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 

Vì tôi chỉ mới bắt đầu với R, tôi không biết ý nghĩa của nó là gì và tôi nên giải quyết nó như thế nào, cũng như tôi không tìm thấy gì hữu ích ở những nơi khác.

Trả lời

4

Nếu không được chắc chắn chính xác những gì gây ra vấn đề, tôi sẽ cố gắng để chuyển đổi cột Class đến một yếu tố (để xác định kiểu như C-classification sẽ không còn cần thiết) sử dụng một cái gì đó như thế này:

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

hoặc trong một bước:

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

Cảm ơn bạn. Làm việc như một say mê. Như bạn đã đề xuất, tôi đã biến cột Lớp thành một yếu tố và loại bỏ đối số 'loại' trong lời gọi của svm. Lỗi đã biến mất. – user655423

Các vấn đề liên quan