Cấp độ yếu tố mới không có trong dữ liệu đào tạo


7

Tôi nhận được lỗi "Cấp độ yếu tố mới không có trong dữ liệu đào tạo". Nhưng tôi đã kiểm tra các nlevels và class cho mỗi cột trong quá trình phát triển cũng như dữ liệu thử nghiệm và chúng giống nhau. Bất kỳ lời giải thích hợp lý?


Câu trả lời:


7

RF xử lý các yếu tố bằng cách mã hóa một nóng chúng. Nó tạo một cột giả mới cho mọi cấp độ của biến nhân tố. Khi có các mức yếu tố mới hoặc khác nhau trong khung dữ liệu tính điểm, điều tồi tệ sẽ xảy ra.

Nếu tàu và kiểm tra tồn tại cùng nhau trong cùng một cấu trúc dữ liệu tại điểm mà yếu tố được xác định, thì không có vấn đề gì. Khi kiểm tra có yếu tố được xác định riêng biệt thì bạn sẽ gặp vấn đề.

library("randomForest")

# Fit an RF on a few numerics and a factor. Give test set a new level.
N <- 100
df <- data.frame(num1 = rnorm(N), 
                 num2 = rnorm(N), 
                 fac = sample(letters[1:4], N, TRUE),
                 y = rnorm(N),
                 stringsAsFactors = FALSE)
df[100, "fac"] <- "a suffusion of yellow"
df$fac <- as.factor(df$fac)

train <- df[1:50, ]
test <- df[51:100, ]

rf <- randomForest(y ~ ., data=train)

# This is fine, even though the "yellow" level doesn't exist in train, RF
# is aware that it is a valid factor level
predict(rf, test)

# This is not fine. The factor level is introduced and RF can't know of it
test$fac <- as.character(test$fac)
test[50, "fac"] <- "toyota corolla"
test$fac <- as.factor(test$fac)
predict(rf, test)

Bạn có thể khắc phục vấn đề này bằng cách liên quan đến các yếu tố cho điểm của mình để phù hợp với dữ liệu đào tạo.

# Can get around by relevelling the new factor. "toyota corolla" becomes NA
test$fac <- factor(test$fac, levels = levels(train$fac))
predict(rf, test)

1
Mặc dù đây chắc chắn là một cách giải quyết, tôi có bảo lưu về sự đúng đắn của phương pháp này vì chúng tôi hy vọng dữ liệu đào tạo và kiểm tra sẽ cùng tồn tại hoàn toàn riêng biệt.
Tommyixi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.