답변:
RF의 전체적인 복잡성은 와 같습니다. 계산 속도를 높이려면 다음을 시도하십시오.
randomForest
대신에 party
더 좋은, 또는 ranger
나 Rborist
(모두 아직 전투 테스트 아니지만).randomForest(predictors,decision)
대신에 전화 ) randomForest(decision~.,data=input)
.do.trace
실시간으로 OOB 오류를 보려면 인수를 사용하십시오 . 이런 식으로 당신은 당신이 낮출 수 있음을 감지 할 수 있습니다 ntree
.randomForest는 기능 및 레코드의 임의 서브 세트에 대해 학습 된 독립 카트의 콜렉션이므로 병렬화에 적합합니다. combine()
randomForest 패키지 의 기능은 독립적으로 훈련 된 포리스트를 함께 연결합니다. 다음은 장난감 예입니다. @mpq의 답변에 따르면 수식 표기법을 사용하지 말고 변수의 데이터 프레임 / 행렬과 결과 벡터를 전달해야합니다. 나는 문서에서 이것을 부끄러워하지 않았다.
library("doMC")
library("randomForest")
data(iris)
registerDoMC(4) #number of cores on the machine
darkAndScaryForest <- foreach(y=seq(10), .combine=combine ) %dopar% {
set.seed(y) # not really needed
rf <- randomForest(Species ~ ., iris, ntree=50, norm.votes=FALSE)
}
randomForest 결합 함수를 비슷한 이름의 .combine 매개 변수 (루프 출력의 함수를 제어하는 매개 변수)에 전달했습니다. 단점은 OOB 오류율이 없거나 비극적으로 변수의 중요성이 없다는 것입니다.
편집하다:
게시물을 다시 읽은 후 34 + 요인 문제에 대해 아무 것도 이야기하지 않는다는 것을 알게되었습니다. 완전히 생각하지 않은 대답은 그것들을 이진 변수로 표현하는 것일 수 있습니다. 이는 존재 / 비 존재에 대해 0/1 수준 요소로 인코딩 된 열인 각 요소입니다. 중요하지 않은 요소에 대해 일부 변수를 선택하고 제거하면 피쳐 공간이 너무 커지지 않도록 할 수 있습니다.
몇 가지 링크를 제안합니다.
1) 팩터 변수의 레벨 축소stackoverflow
는 randomForest
패키지 를 사용하는 동안 비슷한 문제를 처리
하기위한 질문에 대한 링크 입니다. 특히 가장 자주 발생하는 수준 만 사용하고 덜 자주 발생하는 다른 모든 수준에 새 수준을 할당합니다.
: 그것에 대한 아이디어는 여기에서 온 2009 KDD 컵 느린 도전 . 이 경쟁의 데이터에는 많은 수준의 요소가 많았으며 2 코어 / 2GB RAM 랩톱에서 실행하기 위해 50,000 행에서 15,000 열로 데이터를 분석하는 데 사용한 몇 가지 방법에 대해 설명합니다.
마지막 제안은 위에서 제안한 바와 같이 hi-CPU Amazon EC2 인스턴스에서 병렬로 문제를 실행하는 것입니다.
R에서 특정 알고리즘의 속도를 말할 수는 없지만 컴퓨팅 시간이 오래 걸리는 원인이 분명해야합니다. 각 지점의 각 나무에 대해 CART는 최상의 이진 분할 형태를 찾고 있습니다. 따라서 34 개 피처 각각에 대해 각 변수 레벨에서 제공되는 분할을 가장 잘 살펴 봅니다. 트리의 각 분할에 대한 실행 시간에 트리의 분기 수를 곱한 다음 포리스트의 트리 수를 곱하면 실행 시간이 길어집니다. 누가 알아? 빠른 컴퓨터를 사용하더라도 완료하는 데 몇 년이 걸릴 수 있습니까?
속도를 높이는 가장 좋은 방법은 일부 변수를 한꺼번에 모아서 각 변수가 300 개가 아닌 3 ~ 5 개 수준으로 내려가는 것입니다. 물론 이것은 중요한 것을 잃지 않고 이것을 할 수있는 것에 달려 있습니다 데이터의 정보.
그 후 개별 트리의 각 노드에서 분할하는 데 걸리는 검색 시간을 단축 할 수있는 영리한 알고리즘이 있는지 확인할 수 있습니다. 특정 트리에서 분할 검색은 이전 트리에 대해 이미 수행 된 검색의 반복 일 수 있습니다. 따라서 이전 분할 결정의 솔루션을 저장하고 반복시기를 식별 할 수 있으면 해당 전략이 컴퓨팅 시간을 약간 절약 할 수 있습니다.