2013-06-14 26 views
8

Tôi đang đào tạo svm bằng cách sử dụng traindata của tôi. (gói e1071 trong R). Sau đây là thông tin về dữ liệu của tôi.Nhận một lỗi "(subscript) subscript logic quá dài" trong khi đào tạo SVM từ gói e1071 trong R

> str(train) 
'data.frame': 891 obs. of 10 variables: 
$ survived: int 0 1 1 1 0 0 0 0 1 1 ... 
$ pclass : int 3 1 3 1 3 3 1 3 3 2 ... 
$ name : Factor w/ 15 levels "capt","col","countess",..: 12 13 9 13 12 12 12 8 13 13 
$ sex  : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ... 
$ age  : num 22 38 26 35 35 ... 
$ ticket : Factor w/ 533 levels "110152","110413",..: 516 522 531 50 473 276 86 396 
$ fare : num 7.25 71.28 7.92 53.1 8.05 ... 
$ cabin : Factor w/ 9 levels "a","b","c","d",..: 9 3 9 3 9 9 5 9 9 9 ... 
$ embarked: Factor w/ 4 levels "","C","Q","S": 4 2 4 4 4 3 4 4 4 2 ... 
$ family : int 1 1 0 1 0 0 0 4 2 1 ... 

Tôi đào tạo như sau.

library(e1071) 
model1 <- svm(survived~.,data=train, type="C-classification") 

Không vấn đề gì ở đây. Nhưng khi tôi dự đoán như:

pred <- predict(model1,test) 

tôi nhận được lỗi sau:

Error in newdata[, object$scaled, drop = FALSE] : 
(subscript) logical subscript too long 

Tôi cũng đã cố gắng loại bỏ "tấm vé" dự đoán từ cả dữ liệu huấn luyện và thử nghiệm. Nhưng vẫn còn lỗi tương tự. Vấn đề là gì?

+1

Khó trả lời mà không có ví dụ tái sản xuất. Lỗi nói rằng newdata của bạn (kiểm tra ở đây) không chứa đủ cột. – agstudy

Trả lời

14

Có thể có sự khác biệt về số lượng các cấp trong một trong các yếu tố trong tập dữ liệu 'thử nghiệm'.

chạy str (kiểm tra) và kiểm tra xem các biến yếu tố có cùng cấp với các biến tương ứng trong tập dữ liệu 'đào tạo' hay không.

tức là ví dụ dưới đây cho thấy my.test $ foo chỉ có 4 cấp độ .....

str(my.train) 
'data.frame': 554 obs. of 7 variables: 
.... 
$ foo: Factor w/ 5 levels "C","Q","S","X","Z": 2 2 4 3 4 4 4 4 4 4 ... 

str(my.test) 
'data.frame': 200 obs. of 7 variables: 
... 
$ foo: Factor w/ 4 levels "C","Q","S","X": 3 3 3 3 1 3 3 3 3 3 ... 
+0

thay đổi các cấp với dữ liệu = yếu tố (dữ liệu, cấp = c (mức độ std)). Và nó hoạt động tốt –

2

Thats đúng dữ liệu tàu chứa 2 chỗ trống cho bắt tay vì điều này có một giá trị phân loại phụ cho khoảng trống và bạn nhận được lỗi này

$ Bắt đầu: Yếu tố w/4 cấp "", "C", "Q", "S": 4 2 4 4 4 3 4 4 4 2 ...

Đầu tiên là trống

0

Tôi cũng đang chơi với tập dữ liệu đó. Tôi biết điều này là một thời gian dài trước đây, nhưng một trong những điều bạn có thể làm là dứt khoát chỉ bao gồm các cột mà bạn cảm thấy sẽ thêm vào các mô hình, như ví dụ:

fit <- svm(Survived~Pclass + Sex + Age + SibSp + Parch + Fare + Embarked, data=train) 

này loại bỏ các vấn đề đối với tôi bằng cách loại bỏ các cột không đóng góp gì (như số vé) không có dữ liệu liên quan.

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