RandomForest và lỗi quan trọng thay đổi?


10

Tôi không nhận được sự khác biệt giữa rfobject$importanceimportance(rfobject)trong cột MeanDecreasAccuracy.

Thí dụ:

> data("iris")
> fit <- randomForest(Species~., data=iris, importance=TRUE)
> fit$importance
                  setosa  versicolor   virginica MeanDecreaseAccuracy MeanDecreaseGini
Sepal.Length 0.027078501 0.019418330 0.040497602           0.02898837         9.173648
Sepal.Width  0.008553449 0.001962036 0.006951771           0.00575489         2.472105
Petal.Length 0.313303381 0.291818815 0.280981959           0.29216790        41.284869
Petal.Width  0.349686983 0.318527008 0.270975757           0.31054451        46.323415
> importance(fit)
               setosa versicolor virginica MeanDecreaseAccuracy MeanDecreaseGini
Sepal.Length 1.277324   1.632586  1.758101            1.2233029         9.173648
Sepal.Width  1.007943   0.252736  1.014141            0.6293145         2.472105
Petal.Length 3.685513   4.434083  4.133621            2.5139980        41.284869
Petal.Width  3.896375   4.421567  4.385642            2.5371353        46.323415
> 

Tôi nhận được các giá trị MeanDecreasAccuracy khác nhau nhưng có cùng thứ tự cho các biến quan trọng ( fit$importancecũng như cho importance(fit)):

  1. Cánh hoa.Width

  2. Cánh hoa.

  3. Sepal. Chiều dài

  4. Tháng chín

Nhưng trong các bộ dữ liệu khác, đôi khi tôi nhận được các đơn đặt hàng khác nhau. Ai đó có thể giải thích những gì đang xảy ra ở đây? Đây có thể là một lỗi?


Chỉnh sửa (để đáp lại Martin O'Leary )

Được rồi, cảm ơn! Tôi nhận thấy một cái gì đó khác.

Nhìn vào rfcv()chức năng tôi nhận thấy dòng:

impvar <- (1:p)[order(all.rf$importance[, 1], decreasing = TRUE)]

với dòng này, chúng tôi chọn cột đầu tiên all.rf$importancecung cấp cho chúng tôi thứ tự các biện pháp cụ thể của lớp (đối với yếu tố đầu tiên ) được tính là độ giảm trung bình chỉ trong độ chính xác. Điều này không phải lúc nào cũng giống với thứ tự giảm trung bình về độ chính xác trên tất cả các lớp ( MeanDecreaseAccuracy). Sẽ không tốt hơn nếu chọn một trong hai MeanDecreaseAccuracyhoặc MeanDecreaseGinicột, hoặc tốt hơn là sử dụng importance()chức năng cho các giá trị tỷ lệ? Vì vậy, chúng ta sẽ có số lượng dự đoán giảm liên tục được xếp hạng theo mức độ quan trọng khác nhau (trên tất cả các lớp) và không chỉ được xếp hạng theo mức độ quan trọng khác nhau cho lớp đầu tiên.

Câu trả lời:


13

Không, đây không phải là một lỗi. Các giá trị được đưa ra fit$importancelà không được tính toán, trong khi các giá trị được cung cấp importance(fit)được thể hiện dưới dạng độ lệch chuẩn (như được đưa ra bởi fit$importanceSD). Đây thường là một biện pháp có ý nghĩa hơn. Nếu bạn muốn các giá trị "thô", bạn có thể sử dụng importance(fit, scale=FALSE).

Nói chung, việc dựa vào các chi tiết bên trong của một đối tượng phù hợp là một ý tưởng rất tồi, khi có chức năng trích xuất được cung cấp. Không có gì đảm bảo về nội dung của fit$importance- họ có thể thay đổi mạnh mẽ từ phiên bản này sang phiên bản khác mà không cần thông báo trước. Bạn nên luôn luôn sử dụng chức năng trích xuất khi được cung cấp.


Chỉnh sửa: Có, dòng rfcv()đó trông giống như một lỗi, hoặc ít nhất là hành vi ngoài ý muốn. Đây thực sự là một ví dụ điển hình về lý do tại sao bạn không nên dựa vào nội dung của những thứ như thế fit$importance. Nếu sự phù hợp cho một rừng hồi quy, thì cột đầu tiên fit$importance%IncMSE, tương đương với importance(fit, type=1). Tuy nhiên, điều này không giữ trong trường hợp phân loại, nơi bạn có thêm các cột cho từng cấp độ yếu tố.

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.