Lấy mẫu với sự thay thế trong R RandomForest


11

Việc triển khai RandomForest không cho phép lấy mẫu vượt quá số lượng quan sát, ngay cả khi lấy mẫu bằng thay thế. Tại sao lại thế này?

Hoạt động tốt:

rf <- randomForest(Species ~ ., iris, sampsize=c(1, 1, 1), replace=TRUE)
rf <- randomForest(Species ~ ., iris, sampsize=3, replace=TRUE)

Những gì tôi muốn làm:

rf <- randomForest(Species ~ ., iris, sampsize=c(51, 1, 1), replace=TRUE)
Error in randomForest.default(m, y, ...) : 
  sampsize can not be larger than class frequency

Lỗi tương tự không có mẫu phân tầng:

rf <- randomForest(Species ~ ., iris, sampsize=151, replace=TRUE)
Error in randomForest.default(m, y, ...) : sampsize too large

Vì tôi đã mong đợi phương thức lấy mẫu bootstrap khi được thay thế = TRUE trong cả hai trường hợp, tôi không mong đợi giới hạn này.

Mục tiêu của tôi là sử dụng điều này với tùy chọn lấy mẫu phân tầng, để vẽ một mẫu đủ lớn từ một lớp tương đối hiếm.


Tôi không chắc lý do thực sự là gì, nhưng một mẫu bootstrap thường có cùng kích thước với mẫu ban đầu của bạn, vì vậy hành vi này có vẻ hoàn toàn phù hợp với những gì tôi mong đợi từ một thứ gì đó tuyên bố lấy mẫu bootstrap.
Joran

1
Vâng, đó là lựa chọn từ ngữ của tôi không phải là tài liệu, nhưng quan điểm của bạn được thực hiện tốt. Tuy nhiên, điều này là bất tiện khi cố gắng cân bằng lại phân phối và tôi không biết lý do tại sao đây là một hạn chế hữu ích để áp đặt.
cohoz

Câu trả lời:


5

Điều này không trả lời tại sao , nhưng để giải quyết vấn đề này, người ta có thể sao chép dữ liệu cho lớp hiếm trong dữ liệu đào tạo và lấy mẫu phân tầng kết quả.

Hai nhược điểm của phương pháp này, so với sự quá khổ "tự nhiên":

  • ước tính ra khỏi túi không còn ý nghĩa
  • cần nhiều tài nguyên hơn để lưu trữ đối tượng và lấy mẫu ngẫu nhiên

nhưng nó sẽ cho phép một người xây dựng khu rừng với tỷ lệ lớp mong muốn.


4

Tôi có cùng một câu hỏi và tìm thấy câu hỏi này trong danh sách thay đổi cho RandomForest :

Thay đổi trong 4.1-0:

  • Trong RandomForest (), nếu đưa ra kích thước, việc lấy mẫu bây giờ được thực hiện mà không cần thay thế, ngoài việc phân tầng theo lớp. Do đó, kích thước không thể lớn hơn tần số lớp.

Cài đặt thay thế = TRUE bằng tay cũng dường như không ghi đè lên điều này.


2
Có thể là trường hợp tham số thay thế đơn giản bị bỏ qua, nhưng sau đó trong thay đổi đó: Thay đổi trong 4.5-12: * Đã thêm đối số 'strata' vào RandomForest, kết hợp với 'sampize', cho phép lấy mẫu (với hoặc không thay thế) theo một biến tầng (có thể là một thứ khác với biến lớp). Hiện tại chỉ hoạt động trong phân loại.
cohoz

Ví dụ: lỗi tương tự được tạo quarf <- randomForest(Species ~ ., iris, sampsize=c(51, 1, 1), strata=iris$Species, replace=TRUE)
cohoz

Hơn nữa, một số trường hợp thử nghiệm với phiên bản hiện tại (4.6-7) chỉ ra rằng các mẫu được lấy thay thế, vì vậy đây không phải là lời giải thích.
cohoz

1
Tôi đã kết thúc việc quá khổ trước khi chạy RandomForest. Có lẽ có điều gì đó không ổn với phương pháp này, nhưng có vẻ như nó hoạt động khi tôi kiểm tra kết quả.
hgcrpd

1
Không, đó là cách giải quyết mà tôi sử dụng và nó thực hiện chính xác những gì người ta muốn. Đặc biệt đối với trường hợp sử dụng của một lớp tương đối hiếm, việc sao chép dữ liệu cho lớp đó trên tập huấn luyện và trước khi lấy mẫu phân tầng hoạt động tốt và "chi phí" về bộ nhớ / CPU bổ sung không quá cao. Tôi đoán rằng đáng để viết một "câu trả lời" mặc dù nó thực sự không phải là một ...
cohoz
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.