Làm cách nào để thay đổi ngưỡng để phân loại trong R RandomForests?


10

Tất cả các tài liệu Mô hình hóa phân bố loài cho thấy rằng khi dự đoán sự hiện diện / vắng mặt của một loài bằng cách sử dụng một mô hình đưa ra xác suất (ví dụ RandomForests), việc lựa chọn ngưỡng xác định theo đó thực sự phân loại một loài là sự hiện diện hay vắng mặt là quan trọng và người ta nên quan trọng không phải lúc nào cũng dựa vào mặc định là 0,5. Tôi cần giúp đỡ với điều này! Đây là mã của tôi:

library(randomForest)
library(PresenceAbsence)

#build model
RFfit <- randomForest(Y ~ x1 + x2 + x3 + x4 + x5, data=mydata, mytry = 2, ntrees=500)

#eventually I will apply this to (predict for) new data but for first I predict back    to training data to compare observed vs. predicted
RFpred <- predict(RFfit, mydata, type = "prob")

#put the observed vs. predicted in the same dataframe
ObsPred <- data.frame(cbind(mydata), Predicted=RFpred)

#create auc.roc plot
auc.roc.plot(ObsPred, threshold = 10, xlab="1-Specificity (false positives)",
  ylab="Sensitivity (true positives)", main="ROC plot", color=TRUE,
  find.auc=TRUE, opt.thresholds=TRUE, opt.methods=9) 

Từ đó, tôi xác định rằng ngưỡng tôi muốn sử dụng để phân loại sự hiện diện từ các xác suất dự đoán là 0,7, không phải mặc định là 0,5. Tôi hoàn toàn không hiểu phải làm gì với thông tin này. Tôi có chỉ đơn giản sử dụng ngưỡng này khi tạo bản đồ đầu ra của mình không? Tôi có thể dễ dàng tạo ra một đầu ra được ánh xạ với xác suất liên tục sau đó chỉ cần phân loại lại những đầu ra có giá trị lớn hơn 0,7 như hiện tại và những đầu ra <0,7 không có.

Hoặc, tôi có muốn lấy thông tin này và chạy lại mô hình RandomForests của mình bằng cách sử dụng tham số giới hạn không? Chính xác thì tham số cut-off đang làm gì? Nó có thay đổi kết quả bỏ phiếu không? (hiện tại nói nó là "đa số"). Làm cách nào để sử dụng tham số giới hạn này? Tôi không hiểu tài liệu! Cảm ơn!


2
Tôi muốn nói điều này có thể thuộc về đây: Vấn đề (1) ước tính xác suất từ ​​RF, (2) liệu bạn có thể áp đặt hàm chi phí cho mô hình hay phải xây dựng mô hình đó và (3) cách triển khai các hàm chi phí trong RF đang lặp lại các vấn đề không liên quan đơn giản đến lập trình.
charles

Câu trả lời:


7

#set ngưỡng hoặc giá trị ngưỡng đến 0,7

cutoff=0.7

#all giá trị thấp hơn giá trị ngưỡng 0,7 sẽ được phân loại là 0 (hiện tại trong trường hợp này)

RFpred[RFpred<cutoff]=0

#all giá trị lớn hơn giá trị ngưỡng 0,7 sẽ được phân loại là 1 (vắng mặt trong trường hợp này)

 RFpred[RFpred>=cutoff]=1

1
Bạn có thể mở rộng câu trả lời của bạn một chút không? Ít nhất nó sẽ hữu ích để chú thích mã của bạn.
Patrick Coulombe

2
FWIW, tôi nghĩ rằng điều này là hoàn toàn đủ.
Sycorax nói Phục hồi lại

Câu trả lời này là hoàn hảo. Tôi đồng ý.
Seanosapien

7

Xin lỗi bạn đã không nhận được và cố gắng trả lời. Muốn giới thiệu cuốn sách của Max Kuhn cho vấn đề này. Đây là một vấn đề khá rộng. Chỉ cần thêm một số bit:

  1. Các đường cong ROC rất phổ biến, nhưng chỉ có ý nghĩa nếu bạn đang cố gắng hiểu sự đánh đổi giữa chi phí Kết quả âm tính giả và dương tính giả. Nếu CostFN = CostFP thì không chắc chúng có ý nghĩa. Thống kê c và các biện pháp dẫn xuất khác vẫn còn sử dụng. Nếu bạn muốn tối đa hóa độ chính xác - chỉ cần điều chỉnh mô hình của bạn cho điều này (gói caret làm cho điều này trở nên dễ dàng), đừng đi tạo đường cong ROC.
  2. Mọi người đều sử dụng xác suất có được từ các mô hình RF. Tôi nghĩ rằng một số suy nghĩ nên được đưa ra để làm điều này - đây không phải là mô hình xác suất, chúng không được xây dựng để làm điều này. Nó thường hoạt động. Tối thiểu tôi sẽ tạo ra một biểu đồ xác thực của các đầu dò RF trên dữ liệu mới nếu tôi thực sự quan tâm đến các đầu dò
  3. Cách đơn giản nhất là sử dụng "đơn giản là phân loại lại những thứ có giá trị lớn hơn 0,7 như hiện tại và những thứ <0 là không có".
  4. Nếu chi phí (FN) không bằng chi phí (FP), thì bạn cần làm cho RF nhạy cảm với chi phí. R không làm điều này dễ dàng. Hàm trọng số trong gói RandomForest không hoạt động. Tùy chọn tốt nhất là chơi xung quanh với lấy mẫu, gạch dưới phần lớn trường hợp để có được hàm chi phí bạn muốn. Nhưng mối quan hệ giữa tỷ lệ mẫu và chi phí không trực tiếp. Vì vậy, bạn có thể muốn gắn bó với (3)

Cập nhật về trọng số của lớp Andy Liaw:
Tùy chọn "classwt" hiện tại trong gói RandomForest đã có từ đầu và khác với cách mã Fortran chính thức (phiên bản 4 trở lên) thực hiện trọng số của lớp. Trọng số trong tính toán chỉ số Gini khi chia các nút, chính xác như cách một cây GIỎI được thực hiện khi có trọng số lớp. Giáo sư Breiman đã đưa ra sơ đồ trọng số lớp mới hơn được triển khai trong phiên bản mới hơn của mã Fortran của mình sau khi chúng tôi thấy rằng chỉ cần sử dụng trọng số trong chỉ số Gini dường như không giúp ích nhiều cho dữ liệu cực kỳ mất cân bằng (giả sử 1: 100 hoặc tệ hơn). Nếu sử dụng Gini có trọng số sẽ giúp bạn trong tình huống của mình, bằng mọi cách, tôi chỉ có thể nói điều đó đã không cho chúng tôi kết quả mà chúng tôi mong đợi. "


Bạn có thể giải thích về điểm phụ (4) tại sao đối số trọng số không hoạt động?
Sycorax nói phục hồi Monica

2
Sự hiểu biết của tôi là nó được triển khai một cách thích hợp trong mã Fortran ( stat.ber siêu.edu / ~breiman / RapForForests / cc_software.htmlm ) nhưng không phải gói R. Điều này được thảo luận: ( stat.ethz.ch/pipermail/r-help/2011-September/289769.html ) và các trung tâm xung quanh cần sử dụng trọng lượng ở tất cả các giai đoạn xây dựng cây - không chỉ tách Gini. Vì vậy, việc triển khai R hiện tại - chỉ sử dụng trọng số khi phân tách không hoạt động tốt
charles
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.