Tôi đã tạo một số mẫu ctree (khoảng 40 đến 80) mà tôi muốn đánh giá khá thường xuyên.Làm cách nào để xóa dữ liệu đào tạo khỏi bên ::: mô hình ctree?
Một vấn đề là các đối tượng mô hình rất lớn (40 mô hình yêu cầu nhiều hơn 2.8G bộ nhớ) và có vẻ như tôi lưu trữ dữ liệu đào tạo, có thể là modelname @ data và modelname @ response, chứ không phải chỉ các thông tin có liên quan để dự đoán dữ liệu mới.
Hầu hết các gói học tập R khác có các tùy chọn có thể định cấu hình có bao gồm dữ liệu trong đối tượng mô hình hay không, nhưng tôi không thể tìm thấy bất kỳ gợi ý nào trong tài liệu. Tôi cũng đã cố gắng chỉ định các đối tượng ModelEnv rỗng theo
[email protected] <- new("ModelEnv")
nhưng không ảnh hưởng đến kích thước của tệp RData tương ứng.
Bất cứ ai cũng biết liệu ctree có thực sự lưu trữ dữ liệu đào tạo và cách xóa tất cả dữ liệu khỏi các mô hình ctree không liên quan đến các dự đoán mới sao cho tôi có thể phù hợp với nhiều người trong bộ nhớ?
Thanks a lot,
Stefan
Cảm ơn bạn đã phản hồi của bạn, đó là đã rất hữu ích.
Tôi đã sử dụng dput
và str
để xem kỹ đối tượng và thấy rằng không có dữ liệu đào tạo nào được bao gồm trong mô hình, nhưng có khe responses
, có vẻ như có nhãn đào tạo và tên gọi. Dù sao, tôi nhận thấy rằng mỗi nút có một vector trọng lượng cho mỗi mẫu đào tạo. Sau một thời gian kiểm tra mã, tôi đã kết thúc googling một chút và tìm thấy những nhận xét sau đây trong nhật ký 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).
Hóa ra, có một hàm C trong gói bên để loại bỏ những khối lượng gọi R_remove_weights
với định nghĩa sau đây:
SEXP R_remove_weights(SEXP subtree, SEXP removestats) {
C_remove_weights(subtree, LOGICAL(removestats)[0]);
return(R_NilValue);
}
nó cũng hoạt động tốt:
# 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", [email protected], 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")
Như bạn thấy, nó làm giảm subst kích thước đối tượng ngược lại, từ 2,5MB đến 1,5MB.
gì là lạ, tuy nhiên, là rằng các tập tin rdata tương ứng là điên rồ rất lớn, và không có tác động đối với họ:
$ 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
việc giải nén file cho thấy đối tượng 2.5MB để chiếm gần 100MB không gian:
$ 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
Bất kỳ ý tưởng nào, điều gì có thể gây ra điều này?
Nếu bạn có thể đăng kết quả của 'dput' lên một đối tượng mẫu nhỏ có thể hữu ích. Nếu bạn sử dụng 'str', bạn có thể xem liệu có dữ liệu huấn luyện được lưu trữ trong đối tượng hay không. –
Lưu ý: Tôi đã gắn thẻ lại câu hỏi và xóa nhãn "bên" vì nó không được xác định rõ trên SO, chắc chắn không bị giới hạn đối với gói R. Tôi đã thêm bộ nhớ quản lý vì điều đó dường như là động lực chính. – Iterator