2013-03-10 18 views
8

Chạy ví dụ rừng ngẫu nhiên từ http://www.kaggle.com/c/icdar2013-gender-prediction-from-handwriting/data, dòng sau:Problematic runtime đào tạo rừng ngẫu nhiên khi sử dụng giao diện công thức

forest_model <- randomForest(as.factor(male) ~ ., data=train, ntree=10000) 

mất giờ (không chắc liệu nó sẽ không bao giờ kết thúc, nhưng quá trình này không có vẻ làm việc) .

Tập dữ liệu có 1128 hàng và ~ 7000 biến.

Có thể ước tính khi nào việc đào tạo Rừng Ngẫu nhiên sẽ kết thúc không? Tôi có thể lập hồ sơ R bằng cách nào đó để có thêm thông tin không?

+0

Bạn có thể chạy một vài mẫu với 'ntree = 100 'sau đó' ntree = 500' vv ... Và tìm ra số lượng thời gian mà mỗi máy tính của bạn sử dụng với số biến, bộ xử lý (nếu bạn đang sử dụng song song), vv, sau đó vẽ kết quả của bạn và bạn có thể ngoại suy thời gian cho 'ntree = 10000' –

+0

là thời gian chạy rừng ngẫu nhiên có phải là tuyến tính về số lượng cây không? – itamarb

Trả lời

6

Một ý tưởng, để kiểm soát sự hội tụ là sử dụng do.trace cho một chế độ verbose

iris.rf <- randomForest(Species ~ ., data=iris, importance=TRUE, 
+       proximity=TRUE,do.trace=TRUE) 
ntree  OOB  1  2  3 
    1: 8.62% 0.00% 9.52% 15.00% 
    2: 5.49% 0.00% 3.45% 13.79% 
    3: 5.45% 0.00% 5.41% 11.76% 
    4: 4.72% 0.00% 4.88% 9.30% 
    5: 5.11% 0.00% 6.52% 8.89% 
    6: 5.56% 2.08% 6.25% 8.33% 
    7: 4.76% 0.00% 6.12% 8.16% 
    8: 5.41% 0.00% 8.16% 8.16% 
....... 
+0

cảm ơn! bây giờ tôi có thể thấy (rất chậm) tiến độ của việc tạo ra rừng khi tôi cắt giảm số lượng biến từ 7000 đến 3500. Tuy nhiên đối với 7000 biến, tôi vẫn thấy không có đầu ra. Bất kỳ đề xuất hồ sơ nào khác? – itamarb

11

Tìm thấy vấn đề, sử dụng công thức trong randomForest đã tạo ra một sự xuống cấp hiệu suất khủng khiếp.

Thông tin thêm về điều này và làm thế nào để ước tính rừng ngẫu nhiên thời gian chạy có thể được tìm thấy trong: https://stats.stackexchange.com/questions/37370/random-forest-computing-time-in-r và trong http://www.gregorypark.org/?p=286

Đây là mã cuối cùng:

forest_model <- randomForest(y=train$male, x=train[,-2], ntree=10000,do.trace=T)