Làm thế nào để làm cho cây ngẫu nhiên bỏ phiếu thập phân nhưng không phải là nhị phân


9

Câu hỏi của tôi là về phân loại nhị phân, nói rằng tách khách hàng tốt khỏi khách hàng xấu, nhưng không phân loại hồi quy hoặc phân loại không nhị phân. Trong bối cảnh này, một khu rừng ngẫu nhiên là một tập hợp các cây phân loại. Đối với mỗi quan sát, mỗi cây biểu quyết "có" hoặc "không" và phiếu bầu trung bình của tất cả các cây là xác suất rừng cuối cùng.

Câu hỏi của tôi là về việc sửa đổi hành vi của các cây bên dưới: Làm thế nào chúng ta có thể sửa đổi hàm RandomForest (của gói RandomForest của R) để mỗi cây biểu quyết một số thập phân thay vì nhị phân có / không. Để hiểu rõ hơn ý của tôi về số thập phân, hãy nghĩ về cách cây quyết định hoạt động.

Cây quyết định được phát triển đầy đủ có 1 trường hợp tốt hoặc 1 trường hợp xấu trong các nút thiết bị đầu cuối. Giả sử rằng tôi giới hạn kích thước nút đầu cuối là 100. Sau đó, các nút đầu cuối sẽ trông như sau:

Node1 = 80 xấu, 20
Node2 tốt = 51 xấu, 49
Node3 tốt = 10 xấu, 90 tốt

Lưu ý, mặc dù Node1 và Node2 bỏ phiếu "xấu", "sức mạnh xấu" của họ rất khác nhau. Đó là những gì tôi đang theo đuổi. Thay vì để chúng tạo ra 1 hoặc 0 (đó là hành vi mặc định), người ta có thể sửa đổi gói R để họ bỏ phiếu 80/100, 51/100, 10/100, v.v.?


Chỉ muốn bao gồm liên kết sau đến một cuộc thảo luận có liên quan: stackoverflow.com/questions/22409019/ trên
FatihAkici

Bạn có nghĩa là bạn muốn xác suất dự đoán thực tế , không chỉ là lớp dự đoán có khả năng nhất.
smci

Có @smci chính xác.
FatihAkici

Câu trả lời:


10

Đây là một điểm tinh tế thay đổi từ phần mềm sang phần mềm. Có hai phương pháp chính mà tôi biết:

  1. Lá nhị phân - Mỗi lá phiếu chiếm đa số. Đây là cách randomForesthoạt động trong R, ngay cả khi sử dụngpredict(..., type="prob")
  2. Lá tỷ lệ - Mỗi lá trả về tỷ lệ của các mẫu đào tạo thuộc từng lớp. Đây là cách làm sklearn.ensemble.RandomForestClassifier.predict_probaviệc. Trong một câu trả lời khác, @ usεr11852 chỉ ra rằng rangergói của R cũng cung cấp chức năng này. Hạnh phúc, tôi có thể chứng thực rằng từ việc sử dụng hạn chế của tôi, rangercũng nhanh hơn nhiều randomForest.

Tôi không nghĩ rằng có một cách dễ dàngrandomForest để sử dụng phương pháp lá tỷ lệ, vì phần mềm R thực sự chỉ là một cái móc vào chương trình C & FORTRAN. Trừ khi bạn thích sửa đổi mã của người khác, bạn sẽ phải tự viết hoặc tìm một phần mềm khác.


Cảm ơn rất nhiều, Sycorax. Bạn có nghĩ rằng mã nguồn của R randomForest có thể được sửa đổi để đi kèm với điều này không?
FatihAkici

Được cung cấp đủ tài nguyên, bất kỳ phần mềm nào cũng có thể được sửa đổi để làm bất cứ điều gì. Mặt khác, randomForestchỉ là một giao diện R thành mã FORTRAN, do đó có thể cần nhiều nguồn lực đáng kể để thực hiện.
Sycorax nói Phục hồi lại

@FatihAkici Thật ra, có vẻ như tôi đã nhầm. Mã được biên dịch là một cổng C của mã FORTRAN gốc của Breiman.
Sycorax nói phục hồi Monica

5
Tôi đã làm việc với gói RandomForest cho một mùa hè năm 2015 như là một phần của REU. Chắc chắn có thể sửa đổi mã để làm điều này, nhưng nó hơi khó vì nó thực sự đã trộn lẫn C-Fortran. Hầu hết các mã "bên ngoài" là C, trong khi một số chức năng cốt lõi vẫn còn trong Fortran và được liên kết sau khi biên dịch. Thật không may, đã quá lâu kể từ khi tôi nhìn thấy mã để biết nơi để tìm. nhưng tôi khuyên bạn nên chuẩn bị để làm việc trong cả C và Fortran nếu bạn muốn sửa đổi gói.
chipbuster

5

Hoàn toàn có thể phát triển một "rừng xác suất". Phương pháp luận trong Malley et al. (2012) " Máy xác suất: ước tính xác suất phù hợp bằng cách sử dụng máy học không theo tỷ lệ. " Chỉ ra cách thức thực hiện và cách so sánh với việc thực hiện rừng ngẫu nhiên tiêu chuẩn. Ngoài ra, kiểm lâm gói R xuất sắc đã thực hiện chức năng này rồi; chỉ thiết lập khi thực hiện chức năng gọi đến .probability = TRUEranger


2

Đơn giản chỉ cần sử dụng predict.randomForest(..., type="prob"). Bạn đang làm một điều tốt .


2
Stephan, cảm ơn câu trả lời của bạn, nhưng đó không phải là điều tôi đang tìm kiếm. Mã bạn đã đề cập lấy trung bình của phiếu bầu cây nhị phân cơ bản, nhưng tôi đang cố gắng để cây thập phân bỏ phiếu thập phân. Vì vậy, trong một khu rừng gồm 3 cây, tôi không muốn (1 + 1 + 0) / 3, thay vào đó (.80 + .51 + .10) / 3. Điều đó có ý nghĩa?
FatihAkici

2
Điều này thật có ý nghĩa, và đó là hành vi của trình phân loại rừng ngẫu nhiên trong sklearn: scikit-learn.org/urdy/modules/generated/ trộm
psarka

1
Ah, tôi thấy quan điểm của bạn. Xin lỗi, sau đó tôi hiểu lầm. Đánh giá từ trang trợ giúp và xem xét predict.allcác norm.votestham số và điều này dường như là không thể. Nếu bạn thực sự muốn điều này, có lẽ bạn sẽ cần mã hóa khu rừng ngẫu nhiên của riêng bạn. Tôi đồng ý với @psarka rằng điều này có ý nghĩa hoàn hảo. (Tôi sẽ xóa câu trả lời này, nhưng sau đó chúng tôi sẽ mất cuộc thảo luận này trong các bình luận.)
Stephan Kolassa

Đó thực sự là một cuộc thảo luận rất hiệu quả, Stephan và @psarka thân mến. Cảm ơn bạn!
FatihAkici
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.