2012-11-05 2 views
1

입니다. 현재 작동중인 데이터 세트에서 누락 된 값을 채우려합니다. 이 데이터에는 13300 개의 관측치와 9 개의 관측점이 있습니다. 랜덤 포리스트를 실행하여 rfimpute를 사용하여 누락 된 값을 채우려고했습니다. 다음과 같은 오류가 발생합니다 : 크기 678.4 Mb의 벡터를 할당 할 수 없습니다. 저는 8GB RAM이 장착 된 Windows 컴퓨터에서이 프로그램을 실행하고 있습니다. 이것은 내가하는 전화입니다.randomForest 패키지의 rfimpute를 사용하는 메모리 오류가

datos.imputados <- rfImpute(vo~P4.Plan.Esp+P11.Comprador+SegmentoDisipado+PersMcKinsey+Kids+IndefDulceSal+lugarcons+Compania,data=datos,ntrees=300,iter=6) 

¿ 여기에 무슨 일이 일어나고 있습니까? 670 mbs does not는 많은 것 같이 소리가 난다. ...

+0

RAM이 가득 차서 ** 추가 ** 678.4 MB 벡터를위한 충분한 RAM이 없습니다. – Roland

+0

어떻게하면 메모리를 덜 필요로하는 호출을 만들 수 있습니까? 데이터 집합은 그렇게 크지 않습니다 ... 생각하지 않습니까? – JEquihua

+0

[yaImpute] (http://cran.r-project.org/web/packages/yaImpute/) 라이브러리를 사용해 보셨습니까? – perrygeo

답변

0

나는 같은 문제를 가지고 있었다. Roland의 설명에서 설명했듯이이 단계에서는 추가로 700MB의 메모리가 필요합니다.

메모리를 해제하거나 덜 복잡한 방법으로 보복하려고 시도 할 수 있습니다. impute처럼 여기에 설명 된 https://stackoverflow.com/a/13114887/55070.

1

하이퍼 스레드 쿼드 코어가있는 16GB RAM의 MacMini에서 rfImpute를 사용하여 동일한 문제가 발생했습니다. 일상적인 데이터 분석 문제에 대해서는 처리 할 수있는 부분이 많지 않습니다. 문제는 rfImpute가 근접 행렬을 생성하여 작동한다는 것입니다. 근접 행렬은 N x N이며, 이는 응용 프로그램에서 rfImpute가 13300^2 항목이있는 배경 개체를 만드는 것을 의미합니다. 제 경우에는 93000^2였습니다. 당신은 K 다른 세그먼트들로 데이터를 분할하고 각 슬라이스에 rfImpute을 적용한다 할 수

한 가지, 수동으로 나중에 재결합 다음과 같이

slices <- 8 
idx <- rep(1:slices, each = ceiling(nrow(X)/slices)) 
idx <- idx[1:nrow(X)] 

imputedData <- do.call('rbind', lapply(1:slices, function(SLICE){ 
    print(SLICE) 
    require(randomForest) 
    rfImpute(X[idx == slice, ], Y[idx == slice]) 
    })) 

당신이 사용 parLapply을 병렬화 할 수 있습니다

slices <- 8 
idx <- rep(1:slices, each = ceiling(nrow(X)/slices)) 
idx <- idx[1:nrow(X)] 

cl <- makeCluster(8) 
clusterExport(cl, c('idx', 'slices', 'X', 'Y')) 
    imputedData <- do.call('rbind', parLapply(cl, 1:slices, function(SLICE){ 
    require(randomForest) 
    rfImpute(X[idx == SLICE, ], Y[idx == SLICE]) 
    })) 
stopCluster(cl) 
+0

고마워, 나는이 문제를 겪었다. 오류 : 크기 151.1 Gb의 벡터를 할당 할 수 없다. 나는 당신이 제안한 것을 할 것이다. 전승하기 전에 데이터를 임의로 나누는 통계적 함의를 알고 있습니까? – Alex

+1

안녕하세요 알렉스, 대체에 사용 된 포리스트가 데이터의 하위 집합을 기준으로 개발 중이므로 귀속 추정치가 전체 데이터 개체에 대해 최적화했을 것보다 덜 정확합니다. 이것을 바이어스 및 분산으로 생각할 수 있습니다. 데이터 포인트가 적 으면 전제와 관련된 편향에는 영향을 미치지 않지만 분산을 증가시킵니다. 기본적으로 더 적은 데이터를 사용하면 더 많은 임의 오류가 발생하게됩니다. – Aaron

관련 문제