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


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.