2013-06-27 28 views
5

Khi cố gắng sử dụng đầu ra của randomForest để phân loại dữ liệu mới (hoặc thậm chí dữ liệu huấn luyện ban đầu), tôi nhận được lỗi sau:mức yếu tố mới không có mặt trong các dữ liệu huấn luyện

> res.rf5 <- predict(model.rf5, train.rf5) 
Error in predict.randomForest(model.rf5, train.rf5) : 
    New factor levels not present in the training data 

gì lỗi này nghĩa là? Tại sao lỗi này xảy ra ngay cả khi tôi cố gắng dự đoán cùng một dữ liệu tôi đã sử dụng để đào tạo?

Ví dụ nhỏ có thể được sử dụng để tạo lại lỗi dưới đây.

train.rf5 <- structure(
    list(A = structure(c(2L, 1L, 1L, 1L, 1L, 1L, 3L, 1L, 1L, 3L), 
        .Label = c("(-0.1,19.9]", "(19.9,40]", "(80.1,100]"), 
        class = c("ordered", "factor")), 
     B = structure(c(3L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 4L), 
        .Label = c("1", "2", "4", "5"), 
        class = c("ordered", "factor")), 
     C = structure(c(1L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L), 
        .Label = c("FALSE", "TRUE"), 
        class = "factor")), 
    .Names = c("A", "B", "C"), 
    row.names = c(7L, 8L, 10L, 11L, 13L, 15L, 16L, 17L, 18L, 19L), 
    class = "data.frame") 

#    A B  C 
# 7 (19.9,40] 4 FALSE 
# 8 (-0.1,19.9] 1 FALSE 
# 10 (-0.1,19.9] 1 TRUE 
# 11 (-0.1,19.9] 1 FALSE 
# 13 (-0.1,19.9] 1 FALSE 
# 15 (-0.1,19.9] 1 TRUE 
# 16 (80.1,100] 2 TRUE 
# 17 (-0.1,19.9] 1 FALSE 
# 18 (-0.1,19.9] 1 FALSE 
# 19 (80.1,100] 5 TRUE 

require(randomForest) 
model.rf5 <- randomForest(C ~ ., data = train.rf5) 
res.rf5 <- predict(model.rf5, train.rf5) # Causes error 

tôi thấy một số câu hỏi có thể có liên quan trên SO, nhưng tôi không nghĩ rằng họ giải quyết vấn đề của tôi trực tiếp

  1. dropping factor levels in a subsetted data frame in R
  2. Random forest package in R shows error during prediction() if there are new factor levels present in test data. Is there any way to avoid this error?

Không giống như 1), tôi làm không có các mức yếu tố không được biểu diễn trong dữ liệu và không giống như 2), các mức hệ số trong dữ liệu thử nghiệm và tàu của tôi giống hệt nhau.

Edit: Thông tin thêm:

sessionInfo() 
R version 3.0.1 (2013-05-16) 
Platform: x86_64-pc-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_US.UTF-8  LC_NUMERIC=C    
[3] LC_TIME=en_US.UTF-8  LC_COLLATE=en_US.UTF-8  
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 
[7] LC_PAPER=C     LC_NAME=C     
[9] LC_ADDRESS=C    LC_TELEPHONE=C    
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] randomForest_4.6-7 

loaded via a namespace (and not attached): 
[1] tools_3.0.1 
+0

Tôi đặt cược nó có liên quan đến các yếu tố được sắp xếp. –

Trả lời

5

Tôi đã thử nghiệm suy đoán của tôi rằng các yếu tố ra lệnh là nguồn gốc của vấn đề, và không nhận được thông báo lỗi khi điều duy nhất tôi làm là loại bỏ các "lệnh" từ các lớp của cấu trúc đó. Tôi không thấy trong tài liệu mà các yếu tố đã ra lệnh không được phép, nhưng tôi cũng không thấy rằng chúng được xem xét cụ thể. Có thể điều này chưa từng xảy ra trước đây. Dường như việc đặt hàng sẽ áp đặt thêm những phức tạp và nếu bạn muốn được tính toán, bạn có thể cung cấp số điểm "as.numeric(.)" cho thuật toán RF.

+0

Cảm ơn DWin, tôi thấy một chuỗi cũ từ năm 2008 có liên quan, nó có thể là cùng một vấn đề. https://stat.ethz.ch/pipermail/r-help/2008-April/160833.html – cyang

+0

Ahah. Có vẻ như nó rơi khỏi radar của Andy. Tôi hy vọng đề nghị của tôi để sử dụng một biến số có nguồn gốc từ yếu tố đã ra lệnh vẫn có giá trị. –

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