2012-09-17 1 views
5

큰 (약 10GB) xdf (revolution R 포맷) 파일에서 임의의 포리스트를 실행할 수 있습니까? 분명히 rxReadXdf를 시도해보고 데이터 프레임으로 변환 할 수는 있지만 ... 내 컴퓨터에는 8GB RAM 만 있으며 앞으로 더 큰 데이터 세트를 처리 할 수도 있습니다.큰 xdf 파일의 무작위 포리스트에서 데이터 프레임을 읽지 않고

#'train.xdf" is a 10gb training data set 
rf<- foreach(ntree=rep(250, 4), .combine=combine, 
      .packages='randomForest') %do% 
    randomForest(amount2~.,data="train", ntree=ntree, importance=TRUE, 
       na.action=na.omit, replace=FALSE) 

을하지만 랜덤 포레스트는 "기차"(AN XDF) 파일에 걸릴 수 없습니다 예를 들어, foreach 루프를 사용하여 내 쿼드 코어 시스템에 1000 그루의 나무를 실행하고자합니다. 데이터 프레임을 읽지 않고 xdf에서 임의의 포리스트를 직접 실행할 수 있습니까?

건배

agsub
+0

그것이 가능하다고 생각하지 않지만 xdf 파일을 사용한 적이 없습니다. 대신 데이터를 작은 덩어리로 분할하고 임의의 포리스트를 훈련시키고 모든 덩어리의 최상의 기능을 결합한 최종 모델을 작성하려고합니다. 그것은 꽤 성가시다. – Backlin

+0

예. 아마 내가 지금 갈 방법입니다. – thiakx

+0

데이터 분석이 쉽다면 좋은면이 있습니다. – Backlin

답변

3

아니, 랜덤 포레스트 패키지의 기초와 RF 방법 언더 포트란 루틴 아마 모든 데이터를 필요로하더라도 다음 불가능할 수도 R 코드를 변경하지 않고 기억에 남기십시오. 일반적으로 스택을 더 많이 RAM에 쌓아 두거나 머신에서 더 큰 워크 스테이션/클러스터를 찾아서이 문제를 해결하는 것이 가장 좋습니다. (1000 개 무작위 숲을 원하는 이유는 무엇입니까?)

+2

Revolution 파일 형식에 익숙하지 않지만, 데이터의 여러 부분 집합에'randomForest'를 실행 한 다음 결과를 단일 앙상블로 결합하십시오. – joran

+0

+1 좋은 지적; 내 대답에 같은 지점을 만들려고했는데 그것이 하위 집합을 생성하기 위해 RAM에 모든 데이터를로드한다는 것을 의미하는지 확실하지 않았습니다. OP가 말한 것을 감안할 때, 그것도 자신의 컴퓨터에서 가능하지 않을 수도 있지만 처음부터 파일을 만들 수 있어야합니다. –

+0

그래, 나에게 가장 좋은 방법은 데이터를 분할하고 임의의 숲을 몇 번하는 것이다. xdf 파일은 기본적으로 hdd에 가상 메모리 덤프를 만듭니다. R이 빠르게 액세스 할 수있는 가상 메모리라고 생각할 수 있습니다. 또한, 나는 qn을 수정했고 1000 개의 임의의 포리스트가 아닌 1000 개의 트리를 실행하려고합니다. 도와 줘서 고마워. =) – thiakx

2

임의의 숲은 보통 즉 현재 노드에 대한 교육이다, 깊이 우선 훈련하고 반복적으로 자식 노드에서 훈련을하고 있습니다. 이를 위해서는 전체 데이터 세트를 메모리에 보관해야합니다.

이 제한을 극복하기 위해 데이터를 점진적으로 (온라인이라고도 함) 처리하기 위해 임의의 포리스트 트레이닝 프레임 워크를 작성했으며 한 번에 두 개 이상의 항목을 보유하지 않았습니다. 이것은 나무의 너비 우선 건설이 필요하며 온라인 알고리즘을 사용하여 순도 통계를 계산해야합니다. 트리의 각 레벨은 데이터를 정확히 한 번 보게되므로 xdf 파일을 메모리에 저장할 필요는 없지만 D 번 읽습니다. 여기서 D는 트리의 최대 깊이입니다.

내가

1

메모리 제한을 극복하기 위해 (Amir Safar's group 시도) 당신이 주어진 코드를 변경할 수 없습니다,하지만 어쩌면 당신이 알고리즘의 그 온라인 버전의 구현을 찾을 수 있기 때문에이 아마 도움이되지 않습니다 알고 사용 :

max_size_of_pagefiles <- 60000 # in MBs 
memory.limit(size = max_size_of_pagefiles) 

내가 페이지 파일 및 여유 공간을 저장하는 드라이브로서 SSD를 사용는 (다음 예는 Windows에서 작동) 메모리로 사용할 수 있습니다 :

freespace <- as.numeric(gsub("Total # of free bytes  : ", "", 
    system2('fsutil', 'volume diskfree c:', stdout = TRUE)[1]))/(1024*1024) 
memory.limit(size = freespace*0.9) 
관련 문제