Làm thế nào để kiểm soát chi phí phân loại sai trong Rừng ngẫu nhiên?


21

Có thể kiểm soát chi phí phân loại sai trong gói R RandomForest không?

Trong công việc của tôi, âm tính giả (ví dụ, thiếu lỗi do một người có thể mắc bệnh) tốn kém hơn nhiều so với dương tính giả. Gói rpart cho phép người dùng kiểm soát chi phí phân loại sai bằng cách chỉ định ma trận tổn thất để phân loại sai trọng lượng khác nhau. Có bất cứ điều gì tương tự tồn tại cho randomForest? Tôi có nên sử dụng classwttùy chọn để kiểm soát tiêu chí Gini không?

Câu trả lời:


8

Không thực sự, nếu không bằng cách tự tạo RF sao chép làm rpartmô hình.

Một số tùy chọn xuất phát từ thực tế là đầu ra của RF thực sự là một điểm số liên tục chứ không phải là một quyết định rõ ràng, tức là phần cây được bình chọn trên một số lớp. predict(rf_model,type="prob")Ví dụ, nó có thể được trích xuất và sử dụng để tạo đường cong ROC sẽ tiết lộ ngưỡng tốt hơn 0,5 (có thể được kết hợp sau này trong đào tạo RF với cutofftham số).

classwt Cách tiếp cận cũng có vẻ hợp lệ, nhưng nó không hoạt động tốt trong thực tế - quá trình chuyển đổi giữa dự đoán cân bằng và đúc tầm thường của cùng một lớp bất kể thuộc tính có xu hướng quá sắc nét để có thể sử dụng được.


MBQ. Cảm ơn nhiều. (i) Đường cong ROC: Trong trường hợp này, tôi không yêu cầu đường cong ROC vì tôi có các linh mục của riêng mình về trọng số chi phí nên là bao nhiêu. (ii) classwt: Có, tôi đã thấy rằng trong thực tế và phù hợp với những người dùng khác, kết quả không như mong đợi. (iii) cutoff: Tôi không rõ về cách sử dụng cutofftrong trường hợp này và tôi hoan nghênh mọi lời khuyên khác.
dùng5944

3

Có một số cách bao gồm chi phí.
(1) Lấy mẫu trên / dưới cho mỗi cây được đóng gói (lấy mẫu phân tầng) là phương pháp phổ biến nhất để đưa ra chi phí. bạn cố tình làm mất cân bằng dữ liệu.
(2) Trọng số. Không bao giờ làm việc. Tôi nghĩ rằng điều này được nhấn mạnh trong tài liệu. Một số tuyên bố bạn chỉ cần cân ở tất cả các giai đoạn, bao gồm chia tách Gini và bỏ phiếu cuối cùng. Nếu nó sẽ làm việc, nó sẽ là một thực hiện khó khăn.
(3) Chức năng Metacost trong Weka.
(4) Xử lý một khu rừng ngẫu nhiên như một phân loại xác suất và thay đổi ngưỡng. Tôi thích tùy chọn này ít nhất. Có thể do tôi thiếu kiến ​​thức, nhưng mặc dù thuật toán có thể tạo ra xác suất không có ý nghĩa với tôi để đối xử với chúng như thể đây là một mô hình xác suất.

Nhưng tôi chắc chắn có những cách tiếp cận bổ sung.


3

Chúng tôi khuyên bạn rằng nếu biến bạn đang cố dự đoán không phải là 50% cho class 1và 50% cho class 2(giống như hầu hết các trường hợp), bạn hãy điều chỉnh cutofftham số để thể hiện OOBtóm tắt thực.

Ví dụ,

randomForest(data=my_data, formula, ntree = 501, cutoff=c(.96,.04))

Trong trường hợp này, khả năng có giá trị là một class 1.96trong khi có một giá trị class 2.04.

Nếu không, rừng ngẫu nhiên sử dụng một ngưỡng 0.5.


1

Người ta có thể kết hợp costMatrixtrong randomForestmột cách rõ ràng thông qua parmstham số:

library(randomForest)
costMatrix <- matrix(c(0,10,1,0), nrow=2)
mod_rf <- randomForest(outcome ~ ., data = train, ntree = 1000, parms = list(loss=costMatrix))

0

Bạn có thể kết hợp độ nhạy chi phí bằng cách sử dụng sampsizechức năng trong randomForestgói.

model1=randomForest(DependentVariable~., data=my_data, sampsize=c(100,20))

Thay đổi số liệu (100,20)dựa trên dữ liệu bạn có và các giả định / quy tắc kinh doanh bạn đang làm việc.

Phải mất một chút phương pháp thử và sai để có được ma trận nhầm lẫn phản ánh chi phí của lỗi phân loại. Hãy xem Dự báo rủi ro hình sự của Richard Berk : Phương pháp tiếp cận máy học , trang. 82.

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.