R에서 랜덤 포레스트로 분류하는 경우, 불균형 클래스 크기를 어떻게 조정해야합니까?


17

현재 작업중 인 프로젝트에 대해 다른 분류 방법을 탐색 중이며 랜덤 포레스트 시도에 관심이 있습니다. 나는 갈수록 나 자신을 교육하려고 노력하고 있으며 CV 커뮤니티가 제공하는 도움에 감사하겠습니다.

데이터를 훈련 / 테스트 세트로 나누었습니다. R에서 random forest를 사용한 실험 (randomForest 패키지 사용)에서 나는 작은 클래스에 대해 높은 분류 오류로 어려움을 겪고 있습니다. 불균형 데이터에 대한 임의 포리스트의 성능에 관한 이 백서를 읽었 으며 저자는 임의 포리스트를 사용할 때 클래스 불균형을 처리하는 두 가지 방법을 제시했습니다.

1. 가중 무작위 숲

2. 균형 잡힌 무작위 숲

R 패키지는 클래스의 가중치를 허용하지 않습니다 (R 도움말 포럼에서 classwt 매개 변수가 올바르게 수행되지 않고 향후 버그 수정으로 예정되어 있음을 읽었습니다). 옵션 2가 남아 있습니다. 임의 포리스트의 각 반복에 대해 각 클래스에서 샘플링 된 개체 수

더 큰 클래스에 대한 정보를 너무 많이 잃어 미래 데이터의 성능이 저하되는 것처럼 느끼므로 임의 포리스트에 대해 동일한 샘플 크기를 설정하는 것이 불안합니다. 더 큰 클래스를 다운 샘플링 할 때 오 분류 율이 향상되는 것으로 나타 났지만 임의의 포리스트에서 불균형 한 클래스 크기를 처리하는 다른 방법이 있는지 궁금했습니다.


1
비슷한 문제에 직면하고 있습니다. 가중 임의 포리스트 및 메트릭 기반 임의 포리스트에 대한 스크립트를 제공 할 수 있습니까? 답장을 기대

답변:


5

이러한 옵션이 마음에 들지 않으면 대신 부스팅 방법을 사용해 보셨습니까? 적절한 손실 기능이 주어지면 부스팅은 무게가 가면서 자동으로 재 보정됩니다. 랜덤 포레스트의 확률 론적 특성이 당신에게 호소력이 있다면, 확률 론적 그라디언트 부스팅은 그것도 만들어냅니다.


안녕 데이비드, 제안 주셔서 감사합니다. 랜덤 포레스트 내에서 / 임의의 포리스트와 함께 부스트가 가능합니까? 또한 잡음이 많은 데이터에는 부스팅이 적용되지 않을 수 있음을 읽었습니다. 내가 작업하고있는 데이터에는 많은 "잡음"변수가 포함되어 있습니다. 현재 기능 선택없이 임의의 포리스트를 실행하여 더 큰 클래스를 다운 샘플링하여 불균형을 처리합니다. 나는 수용 가능한 결과를 얻었으며 (훈련 세트에서 작은 클래스의 85 %와 큰 클래스의 93 %를 올바르게 분류 함) 항상 개선을 환영합니다.
ialm

@Jonathan 나는 임의의 숲이 다양한 부스팅 방법을 능가하기 전에 얼마나 많은 소음이 필요한지 잘 알지 못하지만 내 인상은 그것이 많이 필요하다는 것입니다. gbm에서 패키지는 R작동하는 "무게"라는 용어를 가지고, 당신은 "bag.fraction"용어와 감소에 의해 임의 숲 매우 유사한 방식으로 임의성을 높일 수 있습니다. 시도해 볼 가치가있는 것 같습니다.
David J. Harris

@ DavidJ.Harris Boosting은 소수 클래스에 관한 정보가 희박 할 때 특히 절대적인 희귀 성인 경우 클래스 불균형으로 고통받습니다.
Antoine

2

가중치 객체는 어떻게 든 복제하는 것과 같습니다. 다른 클래스를 적절히 샘플링하여 부트 스트랩 단계를 수정해야 할 수도 있습니다.

0.5


0

큰 클래스를 샘플링하는 대신 작은 클래스를 확장 할 수 있습니다! 큰 클래스가 작은 것보다 몇 배나 더 많은 관찰을하면 바이어스는 작습니다. 초대형 데이터 세트를 처리 할 수 ​​있기를 바랍니다.

또한 큰 클래스에 대한 대부분의 정보를 처리하는 관측치의 하위 집합을 식별 할 수 있으며 가능한 절차가 많으며 가장 가까운 이웃 방법을 기반으로 생각하는 가장 간단한 방법-주변 그래프 구조에 따라 관찰 된 샘플링 샘플링은 표본이 확률 밀도와 더 유사하다는 것을 보장합니다. 원래 하나.

randomForest는 Fortran과 c로 작성되었으며 소스 코드는 사용 가능하지만 (http://cran.r-project.org/src/contrib/randomForest_4.6-2.tar.gz), 엔트로피가 계산되는 곳을 찾을 수 없습니다. 추신. 랜덤 포리스트가 엔트로피 대신 지니를 사용하는 업업


더 큰 클래스에서 관측의 하위 집합을 식별하는 것은 흥미로운 아이디어처럼 보입니다. 프로젝트의 두 번째 부분은 실제로 큰 클래스를 미래의 연구에 유용 할 수있는 더 작고 유용한 하위 그룹으로 구분하는 것입니다. 코드의 엔트로피 계산에 관해서는 실제로 코드를 탐구하지 않았으며 rf의 이론 중 일부만 살펴 보았으므로 언급 할 수 없습니다.
ialm

오래 전에 코드를 수정하고 싶었지만 시간이 없었기 때문에 가중치를 추가하는 것은 개념적으로 어렵습니다.
Qbik

R의 랜덤 포레스트는 회귀 도구로 사용될 수 있으며, 감독되지 않은 분류에도 유용 할 수 있습니다. 오래 전에 randomForest의 코드를 수정하고 싶었지만 시간이 부족하여 가중치를 추가하는 것은 개념적으로 어렵습니다. 얼마 전 나는 감독되지 않은 클러스터링을 위해 임의의 숲을 사용하는 방법을 스스로 궁금해하고 있었고 아이디어를 얻었지만 아직 테스트하지는 않았지만 불행히도 다소 계산적으로 까다로운 것으로 보입니다-numerofobservations ^ 2.
Qbik

0

(1) 가중치 기능이 작동하지 않으며 고정되었는지 확실하지 않습니다.

(2) 대부분 옵션 2를 균형 데이터와 함께 사용하십시오. 너무 많은 데이터를 잃어 버리지 않는 열쇠는 계층화 된 샘플링입니다. 각 트리에 대해 고유 한 밸런스 세트를 무작위로 샘플링합니다.


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