Как удалить обучающие данные из моделей party ::: ctree?

Я создал несколько моделей ctree (от 40 до 80), которые я хочу оценивать довольно часто. .

Проблема в том, что объекты модели очень большие (40 моделей требуют более 2,8 ГБ памяти), и мне кажется, что они хранят обучающие данные, возможно, как имя модели @ данные и имя модели @ ответы, а не только информация, имеющая отношение к прогнозированию новых данных.

Большинство других пакетов обучения R имеют настраиваемые параметры включения данных в объект модели, но я не смог найти никаких подсказок в документации. Я также попытался назначить пустые объекты ModelEnv

modelname@data <- new("ModelEnv")

, но это не повлияло на размер соответствующего файла RData.

Кто-нибудь знает, действительно ли ctree хранит данные обучения и как удалить все данные из моделей ctree, которые не имеют отношения к новым предсказаниям, чтобы я мог уместить многие из них в памяти?

Большое спасибо,

Стефан


Спасибо за ваш отзыв, он уже оказался очень полезным.

Я использовал dput и str , чтобы глубже изучить объект, и обнаружил, что данные для обучения не включены в модели, но есть слот ответов , который, кажется, имеет обучающие метки и названия. В любом случае, я заметил, что каждый узел имеет вектор веса для каждой обучающей выборки. После некоторого времени проверки кода я немного погуглил и нашел следующий комментарий в журнале party NEWS:

         CHANGES IN party VERSION 0.9-13 (2007-07-23)

o   update `mvt.f'

o   improve the memory footprint of RandomForest objects
    substancially (by removing the weights slots from each node).

Оказывается, в пакете party есть функция C для удаления этих веса называются R_remove_weights со следующим определением:

SEXP R_remove_weights(SEXP subtree, SEXP removestats) {
    C_remove_weights(subtree, LOGICAL(removestats)[0]);
    return(R_NilValue);
}

Он также отлично работает:

# cc is my model object

sum(unlist(lapply(slotNames(cc), function (x)  object.size(slot(cc, x)))))
# returns: [1] 2521256
save(cc, file="cc_before.RData")

.Call("R_remove_weights", cc@tree, TRUE, PACKAGE="party")
# returns NULL and removes weights and node statistics

sum(unlist(lapply(slotNames(cc), function (x)  object.size(slot(cc, x)))))
# returns: [1] 1521392
save(cc, file="cc_after.RData")

Как видите, он существенно уменьшает размер объекта, примерно с 2,5 МБ до 1,5 МБ.

Что такое странно, однако, что соответствующие файлы RData безумно огромны, и это никак не повлияет на них:

$ ls -lh cc*
-rw-r--r-- 1 user user 9.6M Aug 24 15:44 cc_after.RData
-rw-r--r-- 1 user user 9.6M Aug 24 15:43 cc_before.RData

Распаковка файла показывает, что объект размером 2,5 МБ занимает почти 100 МБ пространства:

$ cp cc_before.RData cc_before.gz
$ gunzip cc_before.gz 
$ ls -lh cc_before*
-rw-r--r-- 1 user user  98M Aug 24 15:45 cc_before

Есть идеи, что могло вызвать это ?

7
задан Reinstate Monica - G. Simpson 24 August 2011 в 21:25
поделиться