R caret và NA


26

Tôi rất thích sự chăm sóc cho khả năng điều chỉnh tham số và giao diện thống nhất của nó, nhưng tôi đã quan sát thấy rằng nó luôn yêu cầu bộ dữ liệu hoàn chỉnh (tức là không có NA) ngay cả khi mô hình "trần trụi" được áp dụng cho phép NA. Điều đó rất phiền phức, liên quan đến việc người ta nên áp dụng các phương pháp cắt cụt lao động, không cần thiết ngay từ đầu. Làm thế nào người ta có thể trốn tránh việc buộc tội và vẫn sử dụng lợi thế của caret?


3
Bạn luôn phải làm một cái gì đó với các giá trị bị thiếu. Tôi phải nói rằng tôi không thực sự hiểu câu hỏi của bạn - bạn đang tìm kiếm một cách tiếp cận một kích cỡ phù hợp với tất cả ..? Nếu bạn không muốn tranh luận về NA, thì bạn muốn làm gì với chúng? Xóa bỏ?
Tim

1
Tôi muốn để NA ở đó và để nó cho người mẫu đối phó với NA. Ví dụ, nếu tôi làm điều đó với chức năng C5.0 trong C50, nó có thể tự đối phó với NA, nhưng trong trường hợp này tôi không thể sử dụng dấu mũ, vì chức năng đào tạo của caret cho phép không có NA trong bộ dữ liệu ngay cả khi tôi muốn sử dụng C5. Hàm 0 của C50 đã đề cập ở trên.
Fredrik

3
Nhưng những gì "mô hình" làm là nó bỏ qua (xóa) dữ liệu này để lại cho bạn mẫu nhỏ hơn; nó ước tính (nhập) những giá trị đó; hoặc nó dự đoán loại "NA" (ví dụ: trong một số mô hình dựa trên cây). Bạn muốn "mô hình" của bạn làm gì khác? Một số phần mềm thực hiện những điều đó cho bạn một cách tự động, nhưng hãy tưởng tượng rằng máy pha cà phê của bạn đã cho bạn cà phê "mặc định" ... Một số phần mềm tạo ra "cà phê mặc định" ngoài NA, nhưng nó không phải là thứ tốt nhất bạn có thể có.
Tim

3
Bạn có chắc chắn rằng caret không cho phép NA? Tôi đã thử giới thiệu NA với ví dụ mặc định trong trang trợ giúp về tàu hỏa và với phương pháp tàu C5.0 hoạt động tốt. Nó thất bại với rừng ngẫu nhiên.
mpiktas

Câu trả lời:


32

Đối với chức năng đào tạo trong dấu mũ, bạn có thể truyền tham số na.action = na.pass và không xử lý trước (không chỉ định tiền xử lý, hãy để nó làm giá trị mặc định NULL). Điều này sẽ chuyển các giá trị NA không được sửa đổi trực tiếp sang chức năng dự đoán (điều này sẽ khiến các chức năng dự đoán không hỗ trợ các giá trị bị thiếu, đối với những người bạn sẽ cần chỉ định preProcess để áp đặt các giá trị bị thiếu trước khi gọi hàm dự đoán). Ví dụ:

train(formula,
      dataset,
      method = "C5.0",
      na.action = na.pass)

Trong trường hợp này, C5.0 sẽ tự xử lý các giá trị bị thiếu.


1
Đây là một cuộc thảo luận thú vị. Điều gì sẽ là cạm bẫy của việc thêm NA như một cấp độ khác vào một công cụ dự đoán phân loại? Nếu các NA không thể được mô hình hóa hoặc bị bác bỏ, tức là sự hiện diện của sự vắng mặt thực sự là thông tin, có vẻ như chỉ đơn giản là làm cho NA trở thành một cấp độ bổ sung có ý nghĩa?
Seanosapien

Nếu một người sử dụng đặc tả x, y trainkhi có bộ na.action = na.passtùy chọn sẽ gây ra lỗi sau:Something is wrong; all the RMSE metric values are missing
user29609

3

Bạn đã thử mã hóa lại NA chưa? Một cái gì đó> 3 độ lệch chuẩn bên ngoài dữ liệu của bạn (ví dụ -12345) nên khuyến khích C5.0 dự đoán chúng một cách riêng biệt, giống như với NA.


2

Tôi nghĩ rằng giải pháp của bạn sẽ là áp đặt các giá trị trong khi sử dụng hàm dự đoán () .

Xem ?predict.trainđể biết thêm chi tiết.

Bạn có thể sử dụng na.omitđể cho phép dấu mũ để đánh giá các giá trị. Ví dụ:

    ## S3 method for class 'train':
    predict((object, newdata = NULL, type = "raw", na.action = na.omit, ...)

từ http://www.inside-r.org/packages/cran/caret/docs/predict.train

Một giải pháp khác là xử lý trong khi tiền xử lý dữ liệu:

    ## S3 method for class 'default':
    preProcess(x, 
       method = "knnImpute",   # or *bagImpute* / *medianImpute*
       pcaComp = 10,
       na.remove = TRUE,
       k = 5,
       knnSummary = mean,
       outcome = NULL,
       fudge = .2,
       numUnique = 3,
       verbose = TRUE,
       )

từ http://www.inside-r.org/node/86978

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.