2015-09-25 2 views
1

Я использую модель RandomForest в R.Индикатор прогресса в случайной модели леса в R

Для большого количества деревьев моя программа занимает много времени.

В функции «randomforest» я могу использовать «do.trace = TRUE», чтобы увидеть ход в реальном времени. Пример из положить в режиме реального времени на R консоли выглядит следующим образом

ntree OOB  1  2  3  4  5  6  7  8  9 
100: 2.31% 7.14% 2.08% 0.00% 2.25% 10.81% 0.90% 0.00% 0.00% 1.72% 
200: 1.95% 7.14% 2.08% 0.00% 2.25% 8.11% 0.00% 0.00% 0.00% 1.72% 
300: 1.78% 7.14% 2.08% 0.00% 1.69% 8.11% 0.00% 0.00% 0.00% 1.72% 
400: 1.95% 7.14% 2.08% 0.00% 1.69% 8.11% 0.00% 0.00% 0.00% 3.45% 
500: 1.78% 7.14% 2.08% 0.00% 1.69% 8.11% 0.00% 0.00% 0.00% 1.72% 
600: 1.78% 7.14% 2.08% 0.00% 1.69% 8.11% 0.00% 0.00% 0.00% 1.72% 
700: 1.78% 7.14% 2.08% 0.00% 1.69% 8.11% 0.00% 0.00% 0.00% 1.72% 
800: 1.78% 7.14% 2.08% 0.00% 1.69% 8.11% 0.00% 0.00% 0.00% 1.72% 
900: 1.78% 7.14% 2.08% 0.00% 1.69% 8.11% 0.00% 0.00% 0.00% 1.72% 
1000: 1.78% 7.14% 2.08% 0.00% 1.69% 8.11% 0.00% 0.00% 0.00% 1.72% 

Первая строка (100: 2,31% ....) приходит первым. Через 1 секунду происходит 2-й ряд и так далее. Я хотел бы изменить этот вывод.

Когда придет 1-я строка, мне нужно захватить только «100» из всей строки и показать только «100» на консоли R, а не показывать всю строку. Аналогично для остальных строк.

[Я попробовал раковину(). но он не будет работать, так как sink записывает полный вывод в выходной файл]

[Я искал опцию do.trace в функции randomForest. но я потерял себя, поскольку я подозреваю, что он называет программу C; хотя я не уверен.]

Я хотел бы захватить вывод в реальном времени на консоли R.

Примечание: Я видел следующие проблемы.

  1. https://github.com/jni/ray/issues/33
  2. Problematic Random Forest training runtime when using formula interface
+0

Я видел ваше сообщение на Rhelp. Благодарим вас за то, что вы ожидаете достойного интервала перед повторной отправкой. В то время я попытался проверить код R и решил, что ваша догадка о том, что эти сообщения поступают из базового кода C, верна. Мое редактирование предназначалось только для исправления капитализации и более полного сообщения в соответствии с рекомендациями SO-публикации. Поскольку по крайней мере один из связанных ответов относится к синтаксису вызова «randomForest», вы должны опубликовать его. –

ответ

2

Скачано: https://cran.r-project.org/src/contrib/randomForest_4.6-10.tar.gz

При взгляде на код C для refRF.C (и я подозреваю, classRF.C который также называют с do.trace когда это это проблема классификации), а затем после флага «jprint», который является тем, что получено do.trace -flag в окружении нг R-код, мы видим:

/* print header for running output */ 
    if (*jprint <= *nTree) { 
    Rprintf("  |  Out-of-bag "); 
    if (*testdat) Rprintf("|  Test set "); 
    Rprintf("|\n"); 
    Rprintf("Tree |  MSE %%Var(y) "); 
    if (*testdat) Rprintf("|  MSE %%Var(y) "); 
    Rprintf("|\n"); 
    } 

И:

/* Print running output. */ 
    if ((j + 1) % *jprint == 0) { 
     Rprintf("%4d |", j + 1); 
     Rprintf(" %8.4g %8.2f ", errb, 100 * errb/varY); 
     if(*labelts == 1) Rprintf("| %8.4g %8.2f ", 
            errts, 100.0 * errts/varYts); 
     Rprintf("|\n"); 
    } 
    mse[j] = errb; 
    if (*labelts) msets[j] = errts; 

Это не должно быть особенно трудно обрезать этот код до точки, где он только излучающая сотая уведомления дерева в форме вы желаете ,

+0

Спасибо. Я попробую это. – Mashranga