랜덤 포레스트 분류를 수행하기 전에 PCA를 수행하는 것이 합리적입니까?
높은 차원의 텍스트 데이터를 처리하고 있는데 차원의 저주를 피하기 위해 기능 축소를 원하지만 임의 포리스트가 이미 일종의 차원 축소에 있지 않습니까?
랜덤 포레스트 분류를 수행하기 전에 PCA를 수행하는 것이 합리적입니까?
높은 차원의 텍스트 데이터를 처리하고 있는데 차원의 저주를 피하기 위해 기능 축소를 원하지만 임의 포리스트가 이미 일종의 차원 축소에 있지 않습니까?
답변:
레오 브 리먼은 "차원은 축복이 될 수있다"고 썼습니다. 일반적으로 임의 포리스트는 큰 데이터 세트에서 문제없이 실행될 수 있습니다. 데이터가 얼마나 큽니까? 각 분야는 주제 지식에 따라 다양한 방식으로 사물을 처리합니다. 예를 들어, 유전자 발현 연구에서 유전자는 종종 비특이적 필터링이라 불리는 프로세스에서 낮은 분산 (결과에서 엿보기 없음)에 기초하여 폐기됩니다. 이것은 임의의 숲에서 실행 시간을 도울 수 있습니다. 그러나 필수는 아닙니다.
유전자 발현 예를 고수하는 분석가는 때때로 PCA 점수를 사용하여 유전자 발현 측정을 나타냅니다. 아이디어는 유사한 프로파일을 잠재적으로 덜 난잡한 하나의 점수로 바꾸는 것입니다. 임의 포리스트는 원래 변수 또는 PCA 점수 (변수에 대한 대리) 모두에서 실행될 수 있습니다. 일부는이 접근법으로 더 나은 결과를보고했지만 내 지식에 대한 좋은 비교는 없습니다.
요약하면 RF를 실행하기 전에 PCA를 수행 할 필요가 없습니다. 하지만 당신은 할 수 있습니다. 목표에 따라 해석이 바뀔 수 있습니다. 당신이하고 싶은 모든 것이 예측이라면, 해석이 덜 중요 할 수 있습니다.
기존 답변이 불완전하다고 생각했기 때문에 여기에 2 센트를 추가하고 싶습니다.
PCA를 수행하면 아래 그림에 나와있는 특정 이유 중 하나로 임의 포리스트 (또는 LightGBM 또는 기타 의사 결정 트리 기반 방법)를 교육하기 전에 특히 유용 할 수 있습니다.
기본적으로, 훈련 세트를 가장 다양한 방향으로 정렬하여 완벽한 의사 결정 경계를 찾는 프로세스를 훨씬 쉽게 만들 수 있습니다.
의사 결정 트리는 데이터의 의사 결정 경계가 항상 수직 / 가로 (즉, 축 중 하나에 수직)이므로 데이터 회전에 민감합니다. 따라서 데이터가 왼쪽 그림처럼 보이는 경우이 두 클러스터를 분리하는 데 훨씬 더 큰 트리가 필요합니다 (이 경우 8 레이어 트리). 그러나 데이터를 주요 구성 요소를 따라 정렬하면 (오른쪽 그림과 같이) 단 하나의 레이어로 완벽한 분리를 달성 할 수 있습니다!
물론 모든 데이터 세트가 이와 같이 배포되는 것은 아니므로 PCA가 항상 도움이되는 것은 아니지만 여전히 시도해 보아도 유용합니다. PCA를 수행하기 전에 데이터 세트를 단위 분산으로 정규화하는 것을 잊지 마십시오!
추신 : 차원 축소에 관해서는 다른 알고리즘과 마찬가지로 임의 포리스트에 큰 문제가되지 않는다는 점에서 나머지 사람들과 동의 할 것입니다. 그러나 여전히 훈련 속도를 높이는 데 도움이 될 수 있습니다. 의사 결정 트리 훈련 시간은 O (n m log (m))이며, 여기서 n은 훈련 인스턴스 수, m-차원 수입니다. 임의의 포리스트는 학습 할 각 트리에 대해 차원의 하위 집합을 임의로 선택하지만 선택한 총 차원 수의 비율이 적을수록 좋은 성능을 달성하기 위해 더 많은 트리를 훈련해야합니다.
임의 포리스트 이전의 PCA는 차원 축소에 유용하지 않지만 임의 포리스트가 더 나은 성능을 발휘할 수있는 모양을 제공하는 데 유용합니다.
나는 일반적으로 원본 데이터와 동일한 차원을 유지하면서 PCA로 데이터를 변환하면 임의의 포리스트로 더 나은 분류를 할 것이라고 확신합니다.
mtry
각 트리를 빌드 하는 데 임의의 하위 집합 ( 모수 라고 함 ) 만 취하므로 많은 예측 변수로 인해 어려움을 겪지 않습니다 . RF 알고리즘 위에 구축 된 재귀 적 특징 제거 기술도있다 ( varSelRF R 패키지 및 그 참조 참조). 그러나 교차 검증 프로세스의 일부 여야하지만 초기 데이터 축소 체계를 추가 할 수 있습니다. 문제는 RF에 기능의 선형 조합을 입력 하시겠습니까?