2016-05-17 15 views
5

Tôi đã đào tạo một khu rừng ngẫu nhiên bằng cách sử dụng caret + ranger.Tầm quan trọng thay đổi với kiểm lâm

fit <- train(
    y ~ x1 + x2 
    ,data = total_set 
    ,method = "ranger" 
    ,trControl = trainControl(method="cv", number = 5, allowParallel = TRUE, verbose = TRUE) 
    ,tuneGrid = expand.grid(mtry = c(4,5,6)) 
    ,importance = 'impurity' 
) 

Bây giờ tôi muốn thấy tầm quan trọng của các biến. Tuy nhiên, không công trình nào trong số này hoạt động:

> importance(fit) 
Error in UseMethod("importance") : no applicable method for 'importance' applied to an object of class "c('train', 'train.formula')" 
> fit$variable.importance 
NULL 
> fit$importance 
NULL 

> fit 
Random Forest 

217380 samples 
    32 predictors 

No pre-processing 
Resampling: Cross-Validated (5 fold) 
Summary of sample sizes: 173904, 173904, 173904, 173904, 173904 
Resampling results across tuning parameters: 

    mtry RMSE  Rsquared 
    4  0.03640464 0.5378731 
    5  0.03645528 0.5366478 
    6  0.03651451 0.5352838 

RMSE was used to select the optimal model using the smallest value. 
The final value used for the model was mtry = 4. 

Bất kỳ ý tưởng nào nếu & làm cách nào để nhận được?

Cảm ơn.

Trả lời

4

varImp(fit) sẽ nhận được nó cho bạn.

Để tìm hiểu điều đó, tôi đã xem names(fit), dẫn tôi đến names(fit$modelInfo) - khi đó bạn sẽ thấy varImp là một trong các tùy chọn.

+2

Vâng, tôi cũng tìm thấy nó trong thời gian chờ đợi bằng cách đọc tài liệu của 'caret'. Cảm ơn bạn vì phương pháp hữu ích đó để tìm kiếm thông tin! Nó chỉ ra 'varImp()' là cách để có được tầm quan trọng biến đối với hầu hết các mô hình được đào tạo với 'train()' của caret. Lưu ý cho người dùng trong tương lai mặc dù: Tôi không chắc chắn 100% và không có thời gian để kiểm tra, nhưng có vẻ như cần có 'critical = 'impurity'' (tôi đoán' important =' hoán vị'' cũng sẽ hoạt động) được chuyển thành tham số trong 'train()' để có thể sử dụng 'varImp()'. –

+2

Một lưu ý khác: có vẻ như nếu bạn đào tạo mô hình của mình với 'ranger' nhưng không có 'caret', thì' tầm quan trọng (phù hợp) 'sẽ là cách đúng đắn để có được tầm quan trọng thay đổi. Như trên, tôi nghĩ rằng tham số 'critical = 'impurity'' (hoặc' hoán vị ') cần phải có trong' train() ' –

+0

Lạ nó không hoạt động đối với tôi. Không có giá trị tầm quan trọng ... hmmm –

0

theo @fmalaussena

set.seed(123) 
ctrl <- trainControl(method = 'cv', 
        number = 10, 
        classProbs = TRUE, 
        savePredictions = TRUE, 
        verboseIter = TRUE) 

rfFit <- train(Species ~ ., 
       data = iris, 
       method = "ranger", 
       importance = "permutation", #*** 
       trControl = ctrl, 
       verbose = T) 

Bạn có thể vượt qua một trong hai "permutation" hoặc "impurity" lập luận importance. Các mô tả cho cả hai giá trị có thể được tìm thấy ở đây: http://alexperrier.github.io/jekyll/update/2015/08/27/feature-importance-random-forests-gini-accuracy.html

0

Đối với gói 'Kiểm' bạn có thể gọi một tầm quan trọng với

fit$variable.importance 

Là một mặt lưu ý, bạn có thể xem tất cả các kết quả đầu ra có sẵn cho các mô hình sử dụng str()

str(fit) 
Các vấn đề liên quan