랜덤 포레스트 알고리즘의 최적화 된 구현


44

ALGLIB, Waffles 및와 같은 R 패키지와 같은 임의의 포리스트가 구현되어 있음을 알았습니다 randomForest. 이 라이브러리가 고도로 최적화되어 있는지 아는 사람이 있습니까? 통계 학습의 요소에 자세히 설명 된대로 기본적으로 임의의 포리스트와 동등 합니까? 아니면 많은 추가 트릭이 추가 되었습니까?

이 질문이 충분히 구체적이기를 바랍니다. 내가 찾고있는 답변 유형의 삽화로 누군가 선형 대수 패키지 BLAS가 고도로 최적화되었는지 여부를 물었다면 매우 고도로 최적화되어 있으며 매우 특수한 응용 프로그램을 제외하고는 개선 할 가치가 없다고 말할 것입니다.


랜덤 정글은 여러 서버에서 병렬로 실행될 수 있습니다. Schwarz 등 (2010)을 참조하십시오. 랜덤 정글로의 사파리 : 고차원 데이터를위한 랜덤 포레스트의 빠른 구현. 생물 정보학, 26 , 14, pp 1752–8, doi.org/10.1093/bioinformatics/btq257 . 코드 : 1 ; 2 ; 3 ; 4 .
User128525

답변:


31

(댓글의 제안으로 6 IX 2015 업데이트, CW도 작성 됨)

R에 사용할 수있는 두 가지 새롭고 멋진 패키지가 있으며 특정 조건에 맞게 최적화되어 있습니다.

  • 레인저 -C ++, R 패키지, 문제에 최적화 , 병렬, GWAS 데이터의 특수 처리.p>>n
  • 수목 재배 - 대형 -에 최적화 된 C ++, R 및 Python 바인딩, 문제, GPGPU를위한 분명히 계획.n

다른 RF 구현 :

  • 오리지널 원 -독립형 포트란 코드, 병렬이 아닌 사용하기 매우 어렵습니다.
  • randomForest -C, R 패키지는 단일 코어 속도 기반, 특히 작은 데이터에 대해 비교할 때 아마도 가장 인기 있고 평행하지는 않지만 실제로 매우 빠릅니다.
  • randomForestSRC- 병렬 처리 및 생존 문제를 지원하는 randomForest의 C, R 패키지, 클론.
  • party -C, R 패키지, 매우 느리지 만 RF 실험을위한 평면으로 설계되었습니다.
  • bigrf - bigmemory 프레임 워크 내 에서 빅 데이터 를 처리하도록 구축 된 C + / R, R 패키지 . 완전히 끝나지 않았습니다.
  • scikit learn Ensemble forest -scikit-learn 프레임 워크의 일부인 Python은 병렬로 다양한 RF 변형을 구현합니다.
  • 우유 의 RF- 우유 , 우유 프레임 워크의 일부.
  • 와플 -C ++, 더 큰 ML 툴킷의 일부이며 병렬 및 상당히 빠릅니다.
  • 소위 WEKA rf -Java / WEKA, 병렬.
  • ALGLIB
  • 랜덤 정글 -포기?
  • RT- 순위 -포기?
  • PARF- 포기?

레인저 용지 에는 속도 / 메모리 비교가 있지만 전체 벤치 마크는 없습니다.


6
파이썬 scikit-learn 툴박스에서 sklearn.ensemble 을 추가 할 수 있습니다 .
chl

1
Python의 우유에는 Random Forest 구현도 있습니다.
JEquihua

3
랜덤 정글은 레인저에 의해 대체되었습니다. 나는 R ver (다른 C ++ ver이 있음)을 시도했으며 randomForest보다 눈에 띄게 빠릅니다 (시간이 흐르지 않았습니다). 저자는 별도의 논문 ( arxiv.org/abs/1508.04409 ) 에서 일부 테스트를 수행했습니다 .
초보자 프로그램

11

내가 아는 한 randomForest의 R 버전은 원래 버전과 동일한 Fortran 코드를 호출합니다. 또한 randomForest 함수를 병렬화하는 것은 쉽지 않습니다. 실제로 foreach documentation에 제공된 예제 중 하나입니다 .

library(foreach)
library(randomForest)
rf <- foreach(ntree = rep(250, 4), .combine = combine, .packages = "randomForest") %dopar% 
randomForest(x, y, ntree = ntree)

임의의 포리스트가 난해하게 병렬 처리되는 경우 가장 큰 최적화는 포리스트를 병렬로 실행하는 것입니다. 그 후, 알고리즘에 다른 낮은 결실이 있다고 생각하지 않지만 잘못 될 수 있습니다.

유일한 문제는 결합 된 포리스트에서 가방 부족 오류 추정치를 잃는다는 것입니다. 그러나 그것을 계산하는 간단한 방법이있을 것입니다 (실제로이 작업을 수행하는 방법을 찾고 싶습니다).


7

ELSII는 사용 랜덤 포레스트를 (참조 예, p.591 각주 3)는 상기 R Breiman의 구현 및 커틀러의 인, 포트란 코드 샐에서. Andy Liaw의 코드는 C입니다.

파티 패키지 (C)에서 제안 된 RF의 또 다른 구현이 있으며, R / Lapack에 의존하며 BLAS에 약간의 의존성 /include/R_ext/Lapack.h이 있습니다 (기본 R 디렉토리 참조).

배깅에 관한 한, 병렬화하기가 너무 어렵지 않지만 더 전문화 된 사용자가이 측면에 대해 답변하도록하겠습니다.


5

randomJungle의 배후 팀은 R randomForest 구현보다 10 배 더 빠르며 더 적은 메모리를 사용한다고 주장합니다. randomJungle 용 패키지가 R 용으로 개발 중이지만 아직 빌드 할 수 없습니다.

https://r-forge.r-project.org/projects/rjungler/


이것이 4 년 후에도 여전히 관심이 있는지 확실하지 않지만 randomJungle의 저자는 Ranger로이 문서를 대체했습니다. 나는 R ver을 시도했지만 실제로 샘플 데이터가있는 randomForest보다 눈에 띄게 빠릅니다 (시간이 흐르지 않았습니다).
초보자 프로그램

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.