Có cần tiền xử lý trước khi dự đoán bằng FinalModel của RandomForest với gói caret không?


12

Tôi sử dụng gói caret để huấn luyện một đối tượng RandomForest với 10x10CV.

library(caret)
tc <- trainControl("repeatedcv", number=10, repeats=10, classProbs=TRUE, savePred=T) 
RFFit <- train(Defect ~., data=trainingSet, method="rf", trControl=tc, preProc=c("center", "scale"))

Sau đó, tôi kiểm tra RandomForest trên testset (dữ liệu mới)

RF.testSet$Prediction <- predict(RFFit, newdata=testSet)

Ma trận nhầm lẫn cho tôi thấy rằng mô hình không tệ đến thế.

confusionMatrix(data=RF.testSet$Prediction, RF.testSet$Defect)
              Reference
    Prediction   0   1
             0 886 179
             1  53 126  

      Accuracy : 0.8135          
             95% CI : (0.7907, 0.8348)
No Information Rate : 0.7548          
P-Value [Acc > NIR] : 4.369e-07       

              Kappa : 0.4145 

Bây giờ tôi muốn kiểm tra $ FinalModel và tôi nghĩ rằng nó sẽ cho tôi kết quả tương tự, nhưng bằng cách nào đó tôi nhận được

> RF.testSet$Prediction <- predict(RFFit$finalModel, newdata=RF.testSet)
>  confusionMatrix(data=RF.testSet$Prediction, RF.testSet$Defect)
Confusion Matrix and Statistics

          Reference
Prediction   0   1
         0 323  66
         1 616 239

               Accuracy : 0.4518          
                 95% CI : (0.4239, 0.4799)
    No Information Rate : 0.7548          
    P-Value [Acc > NIR] : 1               

                  Kappa : 0.0793 

Tôi đang thiếu gì?

chỉnh sửa @topepo:

Tôi cũng đã học được một RandomForest khác mà không có tùy chọn tiền xử lý và nhận được một kết quả khác:

RFFit2 <- train(Defect ~., data=trainingSet, method="rf", trControl=tc)
testSet$Prediction2 <- predict(RFFit2, newdata=testSet)
confusionMatrix(data=testSet$Prediction2, testSet$Defect)

Confusion Matrix and Statistics

          Reference
Prediction   0   1
         0 878 174
         1  61 131

               Accuracy : 0.8111          
                 95% CI : (0.7882, 0.8325)
    No Information Rate : 0.7548          
    P-Value [Acc > NIR] : 1.252e-06       

                  Kappa : 0.4167     

trong trường hợp đầu tiên, bạn dự đoán với một đối tượng xe lửa mà bạn đã gọi RFFit, trong lần thứ hai bạn dự đoán sử dụng đối tượng mô hình, tôi đoán vậy. Vì vậy, sự khác biệt có thể là trong việc chuyển những thứ khác cùng với đối tượng xe lửa đã xử lý dữ liệu thử nghiệm mới của bạn bằng cách nào đó khác với việc không sử dụng đối tượng xe lửa.
tiến sĩ

4
Đối với trainmô hình thứ 2, bạn sẽ nhận được một kết quả hơi khác trừ khi bạn đặt hạt giống số ngẫu nhiên trước khi chạy nó (xem ?set.seed). Các giá trị chính xác là 0,8135 và 0,811, khá gần nhau và chỉ do tính ngẫu nhiên của việc lấy mẫu lại và tính toán mô hình.
topepo

Câu trả lời:


17

Sự khác biệt là tiền xử lý. predict.traintự động căn giữa và chia tỷ lệ dữ liệu mới (vì bạn đã yêu cầu điều đó) trong khi predict.randomForestlấy bất cứ thứ gì nó được đưa ra. Vì các phần tách cây dựa trên các giá trị được xử lý, các dự đoán sẽ bị tắt.

Tối đa


nhưng RFFitđối tượng được tạo bằng trainphương thức tiền xử lý ... vì vậy nó sẽ trả về một đối tượng được căn giữa và được chia tỷ lệ (nên có nên không?). Nếu vậy -> $finalModelcũng nên được thu nhỏ và tập trung
Frank

2
Có, nhưng theo đoạn mã trên, bạn chưa áp dụng định tâm và chia tỷ lệ testSet. predict.trainlàm điều đó nhưng predict.randomForestkhông.
topepo

Vì vậy, không có sự khác biệt trong việc sử dụng predict(RFFit$finalModel, testSet)predict(RFFit, testSet)trên cùng một testset?
Frank

6
predict(RFFit$finalModel, testSet)predict(RFFit, testSet)sẽ khác nếu bạn sử dụng preProctùy chọn trong train. Nếu bạn không, họ đang đào tạo trên cùng một bộ dữ liệu. Nói cách khác, bất kỳ quá trình tiền xử lý nào mà bạn yêu cầu đều được thực hiện cho tập huấn luyện trước khi chạy randomForest. Nó cũng áp dụng quy trình tiền xử lý tương tự cho bất kỳ dữ liệu nào mà bạn dự đoán (sử dụng predict(RFFit, testSet)). Nếu bạn sử dụng finalModelđối tượng, bạn đang sử dụng predict.randomForestthay vì predict.trainvà không có quá trình xử lý trước nào được thực hiện trước khi dự đoán.
topepo
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.