2011-12-03 83 views
61

Tôi muốn để phù hợp với một mô hình rừng ngẫu nhiên, nhưng khi tôi gọiLàm thế nào để xây dựng rừng ngẫu nhiên trong R với giá trị thiếu (NA)?

library(randomForest) 
cars$speed[1] <- NA # to simulate missing value 
model <- randomForest(speed ~., data=cars) 

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

Error in na.fail.default(list(speed = c(NA, 4, 7, 7, 8, 9, 10, 10, 10, : 
    missing values in object 
+0

Trong trạng thái hiện tại, câu hỏi này sẽ rất khó trả lời. Bạn có thể cập nhật câu hỏi của mình với một số dữ liệu mẫu không? – Chase

+1

@ MattO'Brien Cũng vui rằng chất lượng của một câu hỏi được thảo luận dựa trên số lượt xem chứ không phải dựa trên giá trị của câu hỏi. Và câu trả lời, vì @ Joran không có vấn đề gì để tìm ra những gì đang được hỏi và cung cấp những gì dường như là một giải pháp tốt cho vấn đề của người hỏi. – user7610

Trả lời

101

phản ứng ban đầu của tôi cho câu hỏi này là nó không xuất hiện nhiều nghiên cứu nỗ lực, vì "mọi người" đều biết rằng các khu rừng ngẫu nhiên không xử lý các giá trị thiếu trong các dự đoán. Nhưng khi kiểm tra ?randomForest tôi phải thú nhận rằng nó có thể rõ ràng hơn về điều này.

(Mặc dù, Breiman của PDF liên kết đến trong tài liệu không rõ ràng nói rằng giá trị thiếu chỉ đơn giản là không được xử lý ở tất cả.)

Các đầu mối rõ ràng chỉ trong tài liệu chính thức mà tôi có thể nhìn thấy là giá trị mặc định cho thông số na.actionna.fail, có thể quá khó hiểu đối với người dùng mới.

Trong mọi trường hợp, nếu dự đoán của bạn có giá trị bị mất, bạn có (cơ bản) hai lựa chọn:

  1. Sử dụng một công cụ khác nhau (rpart xử lý thiếu giá trị độc đáo.)
  2. quy cho các giá trị bị mất

Không có gì ngạc nhiên khi gói randomForest có chức năng chỉ thực hiện việc này, rfImpute. Tài liệu tại số ?rfImpute chạy qua một ví dụ cơ bản về việc sử dụng nó.

Nếu chỉ một số ít trường hợp có giá trị bị thiếu, bạn cũng có thể thử đặt na.action = na.omit để chỉ cần xóa những trường hợp đó.

Và tất nhiên, câu trả lời này là một chút đoán rằng vấn đề của bạn thực sự đơn giản là thiếu giá trị.

+0

bạn có biết điều gì 'WIN ~ .' trong cuộc tranh luận đầu tiên về OP nghĩa là gì?Điều này chắc chắn không phải là nơi tốt nhất để đặt câu hỏi, nhưng đã tự hỏi nếu bạn sẽ biết. Cảm ơn. –

+4

@ user273158 Đó là công thức mô hình, như được ghi trong '? RandomForest' với đối số' công thức'. Nó báo cho R sử dụng 'WIN' làm biến trả lời và' .' là viết tắt có nghĩa là "tất cả các biến khác trong khung dữ liệu". Vì vậy, nó cho R sử dụng 'WIN' làm biến trả lời và tất cả các biến có sẵn khác là những yếu tố dự báo. Xem '? Formula' để biết thêm chi tiết. – joran

3

Nếu có khả năng rằng các giá trị thiếu là thông tin sau đó bạn có thể inpute giá trị còn thiếu và thêm các biến nhị phân bổ sung (với new.vars<-is.na(your_dataset)) và kiểm tra xem nó làm giảm lỗi, nếu new.var là bộ quá lớn để thêm nó vào your_dataset sau đó bạn có thể sử dụng nó một mình, chọn biến significiant với varImpPlot và thêm chúng vào your_dataset, bạn cũng có thể cố gắng thêm biến duy nhất để your_dataset mà đếm số NA 's new.var <- rowSums(new.vars)

Đây không phải là off-topick trả lời, nếu biến mất là kế toán thông tin cho họ có thể chính xác cho sự gia tăng của lỗi mô hình do thủ tục imputation inperfect một mình.

Giá trị thiếu là thông tin sau đó chúng phát sinh do nguyên nhân không ngẫu nhiên, giá trị cực kỳ phổ biến trong cài đặt thử nghiệm xã hội.

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