초보자를 위한 랜덤 포레스트 알고리즘 소개

소스 노드 : 1174508

살펴보기

랜덤 포레스트는 회귀 및 분류 문제에 널리 사용되며 대부분의 경우 하이퍼 매개변수 조정 없이도 훌륭한 결과를 생성하는 지도형 기계 학습 알고리즘입니다. 단순성 때문에 아마도 가장 많이 사용되는 알고리즘일 것입니다. 다양한 샘플에 대해 여러 의사결정 트리를 구축한 다음 분류 문제인 경우 다수결을 가집니다.

나는 당신이 이미 결정 트리에 대해 읽었다고 가정합니다. 그렇지 않다면 걱정할 필요가 없습니다. 우리는 처음부터 모든 것을 읽을 것입니다. 이 기사에서는 Random Forest 알고리즘이 어떻게 작동하는지, 어떻게 사용하는지, 그리고 이 간단한 알고리즘 뒤에 숨은 수학적 직관을 알아 보겠습니다.

이 알고리즘을 배우기 전에 먼저 앙상블 기법이 무엇인지 알아보겠습니다.

내용

  1. 앙상블 기법
    • 증폭
    • 가방
  1. 랜덤 포레스트란 무엇인가요?
  2. 실제 비유
  3. 의사결정나무 이해
  4. 지니 인덱스
  5. 랜덤 포레스트에 의사결정 트리 적용
  6. Random Forest 알고리즘과 관련된 단계
  7. OOB(Out of the Bag) 평가
  8. 랜덤 포레스트와 의사결정 트리의 차이점
  9. 랜덤 포레스트를 사용한 기능 중요성
  10. 랜덤 포레스트의 장점과 단점
  11. 랜덤 포레스트 구현
  12. 최종 메모

앙상블 기법

당신이 집을 사고 싶다고 가정해 봅시다. 사회에 나가서 처음 보는 집을 사시겠습니까, 아니면 중개인의 조언에 따라 집을 사시겠습니까? 그럴 가능성은 거의 없습니다.

당신은 몇 개의 웹 포털을 검색하여 면적, 침실 수, 시설, 가격 등을 확인할 것입니다. 또한 친구와 동료에게 의견을 물어볼 수도 있습니다. 즉, 직접적으로 결론을 내리지 않고 다른 사람의 의견도 함께 고려하여 결정을 내리게 된다는 것입니다.

앙상블 기법은 비슷한 방식으로 작동하며 단순히 여러 모델을 결합합니다. 따라서 개별 모델이 아닌 모델 모음을 사용하여 예측을 수행하므로 전체 성능이 향상됩니다. 기계 학습의 두 가지 주요 앙상블 방법을 이해해 보겠습니다.

1. 배깅 – 데이터 세트가 있고 동일한 데이터 세트에 대해 서로 다른 모델을 만들어 결합한다고 가정해 보겠습니다. 유용할까요? 권리 없다? 동일한 입력을 제공하므로 동일한 결과를 얻을 가능성이 높습니다. 그래서 대신에 우리는 다음과 같은 기술을 사용합니다. 부트 스트랩. 여기에서는 교체를 통해 원본 데이터세트의 하위 집합을 만듭니다. 하위 집합의 크기는 원본 집합의 크기와 동일합니다. 교체를 통해 이 작업을 수행하므로 모델에 다른 데이터 포인트를 제공할 가능성이 높습니다.

랜덤 포레스트 알고리즘

2. 부스팅 – 관찰 내용의 데이터 포인트가 1에 의해 잘못 분류되었다고 가정해 보겠습니다.st 모델을 선택하고 다음 모델(아마도 모든 모델)이 예측을 결합하여 더 나은 결과를 제공할까요? 물론 그것은 큰 NO입니다.

부스팅 기술은 각 모델이 이전 모델의 오류를 수정하려고 시도하는 순차적 프로세스입니다. 후속 모델은 이전 모델에 종속됩니다.

최종 모델의 정확도가 가장 높도록 순차 모델을 생성하여 약한 학습자를 강한 학습자로 결합합니다. 예를 들어 ADA BOOST, XG BOOST.

Random Forest 알고리즘을 위한 배깅 및 부스팅

Random Forest는 배깅 원리에 따라 작동합니다. 이제 이 주제에 대해 자세히 알아보고 Random Forest가 작동하는 방식에 대해 자세히 알아 보겠습니다.

랜덤 포레스트 알고리즘이란 무엇입니까?

Random Forest는 앙상블 학습을 사용하여 많은 약한 분류기를 결합하여 복잡한 문제에 대한 솔루션을 제공하는 기술입니다.

이름에서 알 수 있듯이 랜덤 포레스트는 많은 의사결정 트리로 구성됩니다. 하나의 트리에 의존하는 대신 각 트리에서 예측을 취하고 예측의 과반수 투표를 기반으로 최종 출력을 예측합니다. 의사결정 트리에 대해 읽지 않았더라도 걱정하지 마세요. 이 기사에서 해당 부분을 다뤘습니다.

실제 생활 비유

예제를 통해 랜덤 포레스트를 이해해 봅시다. 당신이 혼자 여행을 가야 한다고 가정해보자. 당신은 언덕 역으로 가고 싶은지, 아니면 모험을 하기 위해 어딘가로 가고 싶은지 확신할 수 없습니다. 그래서 친구에게 가서 그가 무엇을 제안하는지 물어보세요. 친구 1(F1)이 이미 2월이므로 언덕 역에 가라고 하고 지금은 그곳에서 즐거운 시간을 보낼 수 있을 것이기 때문에 친구 2(FXNUMX)라고 가정해 보겠습니다. 모험을 떠나고 싶나요? 마찬가지로, 모든 친구들이 당신에게 여행을 갈 수 있는 곳을 제안했습니다. 마침내 당신은 당신이 선택한 장소로 갈 수도 있고, 대부분의 친구들이 추천한 장소를 결정할 수도 있습니다.

마찬가지로 Random Forest에서는 다수의 의사결정 트리를 훈련하고 분류 문제인 경우 최대 표를 얻은 클래스가 최종 결과가 되고 회귀 문제인 경우 평균이 됩니다.

의사결정나무 이해

랜덤 포레스트 알고리즘이 어떻게 작동하는지 알려면 분류 및 회귀 문제에 사용되는 감독 기계 학습 알고리즘인 의사결정 트리를 알아야 합니다.

의사결정 트리는 트리 구조와 같은 순서도를 사용하여 일련의 기능 기반 분할로 인한 예측을 표시합니다. 이는 루트 노드에서 시작하여 나뭇잎에 의한 결정으로 끝납니다.

의사결정 트리 | 랜덤 포레스트 알고리즘

이미지 1 – https://wiki.pathmind.com/decision-tree

루트 노드, 결정 노드, 리프 노드의 3개 구성 요소로 구성됩니다. 인구가 나누기 시작하는 노드를 노드라고 합니다. 루트 노드. 루트 노드를 분할한 후 얻는 노드를 호출합니다. 결정 노드 더 이상의 분할이 불가능한 노드를 리프 노드. 문제는 어떤 기능이 루트 노드가 될지 어떻게 알 수 있습니까? 데이터 세트에는 100개의 기능이 있을 수 있으므로 어떤 기능이 루트 노드가 될지 어떻게 결정합니까? 이 질문에 대답하려면, 우리는 '지니지수'

지니지수란 무엇인가요?

추가로 분할할 기능을 선택하려면 해당 분할이 얼마나 순수하거나 순수한지 알아야 합니다. 순수 하위 분할은 "예" 또는 "아니요"를 얻어야 함을 의미합니다. 이것이 우리의 데이터 세트라고 가정합니다.

Random Forest 알고리즘의 gini 인덱스

각 기능을 루트 노드로 사용하여 분할 후 어떤 출력을 얻는지 살펴보겠습니다.

랜덤 포레스트 알고리즘을 위한 분할

우리가 취할 때 1 기능 루트 노드로서 우리는 순수한 분할을 얻는 반면, 2 기능, 분할이 순수하지 않습니다. 그렇다면 이 특정 노드에 얼마나 많은 불순물이 있는지 어떻게 알 수 있습니까? 이는 지니지수(Gini Index)를 통해 이해할 수 있다.

우리는 기본적으로 데이터 세트의 불순물을 알아야 하며 해당 기능을 가장 낮은 불순물을 제공하거나 가장 낮은 지니 지수를 갖는 루트 노드로 사용합니다. 수학적으로 지니 지수는 다음과 같이 쓸 수 있습니다.

지니 공식

어디 P+ 는 포지티브 클래스의 확률이고 P_ 네거티브 클래스의 확률입니다.

장난감 데이터 세트의 도움을 받아 이 공식을 이해해 보겠습니다.

장난감 데이터 세트 랜덤 포레스트 알고리즘

Loan Amount를 루트 노드로 사용하여 분할해 보겠습니다.

대출 금액 랜덤 포레스트 알고리즘

왼쪽 분할 값을 공식에 ​​넣으면 다음과 같습니다.

지니지수 공식 | 랜덤 포레스트 알고리즘

오른쪽 분할의 경우 지니 지수는 다음과 같습니다.

오른쪽 분할 - 랜덤 포레스트 알고리즘

이제 이 분할의 총 지니 지수인 가중 지니 지수를 계산해야 합니다. 이는 다음과 같이 계산할 수 있습니다.

가중 지니 지수 - 랜덤 포레스트 알고리즘

마찬가지로, 이 알고리즘은 가능한 모든 분할의 지니 지수를 찾으려고 시도하고 가장 낮은 지니 지수를 제공하는 루트 노드에 대한 해당 기능을 선택합니다. 지니 지수가 가장 낮다는 것은 불순물이 낮다는 것을 의미합니다.

분할의 불순물을 측정하는 데에도 사용되는 "엔트로피"라는 또 다른 측정항목에 대해 들어보셨을 것입니다. 엔트로피의 수학 공식은 다음과 같습니다.

es - 랜덤 포레스트 알고리즘

우리는 일반적으로 지니 지수를 사용하는데, 이는 계산상 효율적이기 때문입니다. 여기에는 엔트로피와 같은 로그 항이 없기 때문에 실행 시간이 더 짧습니다. 일반적으로 로그 계산을 수행하려면 약간의 시간이 걸립니다. 이것이 바로 많은 부스팅 알고리즘이 Gini 지수를 매개변수로 사용하는 이유입니다.

여기서 주목해야 할 또 하나의 중요한 점은 특정 노드에 두 클래스의 수가 동일한 경우 Gini Index가 최대값을 가지게 되며 이는 노드가 매우 불순하다는 것을 의미합니다. 예를 들어 이를 이해할 수 있습니다. 친구 그룹이 있고 모두가 볼 영화에 대해 투표를 한다고 가정해 보겠습니다. 'lucy'에 5표, 'titanic'에 5표를 얻었습니다. 이제 두 영화의 득표율이 같아 한 편의 영화를 선택하기가 더 어려워지지 않을까요? 매우 어려운 상황이라고 할 수 있겠네요.

랜덤 포레스트 알고리즘에 의사결정 트리 적용

이 둘의 주요 차이점은 Random Forest는 원래 데이터 세트의 하위 집합을 사용하여 예측을 수행하는 배깅 방법이며 Random Forest의 이러한 속성은 Overfitting을 극복하는 데 도움이 된다는 것입니다. 단일 의사결정 트리를 구축하는 대신 Random Forest는 다양한 관찰 세트를 사용하여 여러 DT를 구축합니다. 이 알고리즘의 가장 큰 장점 중 하나는 분류 및 회귀 문제에 사용할 수 있다는 것입니다.

Random Forest 알고리즘과 관련된 단계

Step-1 – 먼저 원본 데이터의 하위 집합을 만듭니다. 행 샘플링과 특성 샘플링을 수행합니다. 즉, 대체할 행과 열을 선택하고 훈련 데이터 세트의 하위 집합을 생성합니다.

2 단계 – 우리는 우리가 취하는 각 하위 집합에 대해 개별 의사 결정 트리를 만듭니다.

Step-3 – 각 의사결정 트리는 결과를 제공합니다.

4단계 – 분류 문제인 경우 과반수 투표를 기준으로, 회귀 문제인 경우 평균을 기준으로 최종 출력을 고려합니다.

랜덤 포레스트 알고리즘에 의사결정 트리 적용

이미지 출처: https://www.section.io/engineering-education/introduction-to-random-forest-in-machine-learning/

더 진행하기 전에, 의사결정 트리를 깊이까지 성장시키면 얻을 수 있는 또 하나의 중요한 사실을 알아야 합니다. 낮은 바이어스높은 분산, 우리 모델은 훈련 데이터 세트에서 완벽하게 작동할 것이라고 말할 수 있지만, 새로운 데이터 포인트가 등장하면 형편없을 것입니다. 이러한 높은 변동 상황을 해결하기 위해, 우리는 단일 DT에만 의존하지 않고 많은 의사결정 트리를 결합하는 랜덤 포레스트를 사용합니다. 이를 통해 분산을 낮추고 과적합 문제를 극복할 수 있습니다.

OOB(Out of the bag) 평가

이제 우리는 랜덤 포레스트에서 부트스트래핑이 어떻게 작동하는지 알고 있습니다. 기본적으로 모델을 훈련하기 전에 대체품으로 행 샘플링과 특징 샘플링을 수행합니다. 샘플링은 대체를 통해 수행되므로 데이터의 약 XNUMX/XNUMX은 모델 학습에 사용되지 않으며 이 데이터를 호출합니다. 가방 샘플 중. 이러한 기본 데이터 포인트를 기준으로 모델을 평가하여 테스트 데이터 세트에서 모델이 어떻게 작동하는지 확인할 수 있습니다. Python에서 이 OOB 평가를 어떻게 사용할 수 있는지 살펴보겠습니다. 필요한 라이브러리를 가져오겠습니다.

OOB(Out of the bag) 평가

이를 설명하기 위해 심장마비를 겪는 사람들의 데이터가 포함된 작은 샘플을 사용하겠습니다.

심장 CSV

다음으로 X와 Y를 분리하고 모델을 학습하겠습니다.

기차 X와 Y

OOB 평가를 얻으려면 다음과 같은 매개변수를 설정해야 합니다. oob_score TRUE로. oob 샘플에서 얻은 점수와 테스트 데이터 세트가 다소 동일하다는 것을 알 수 있습니다. 이러한 방식으로 모델을 평가할 때 이러한 제외 샘플을 사용할 수 있습니다.

의사결정 트리와 랜덤 포레스트의 차이점

의사 결정 트리

랜덤 포레스트

1. 의사결정 트리는 일반적으로 최대 깊이까지 성장할 경우 과적합 문제가 발생합니다. 1. 랜덤 포레스트는 배깅 방식을 사용합니다. 원본 데이터 세트의 하위 집합을 생성하고 최종 출력은 다수 순위를 기반으로 하므로 과적합 문제가 처리됩니다.
2. 단일 의사결정 트리가 계산 속도가 더 빠릅니다. 2. 비교적 느립니다.
3. 의사결정 트리에서 특징이 포함된 데이터 세트를 입력으로 사용하면 예측을 수행하기 위한 몇 가지 규칙 세트가 공식화됩니다. 3. 랜덤 포레스트는 관측치를 무작위로 선택하고 의사결정 트리를 구축한 후 평균 결과를 취합니다. 어떤 수식도 사용하지 않습니다.

따라서 우리는 트리가 다양하고 수용 가능한 경우에만 랜덤 포레스트가 의사결정 트리보다 훨씬 더 성공적이라는 결론에 도달할 수 있습니다.

랜덤 포레스트를 사용한 기능 중요성

이 멋진 알고리즘의 또 다른 장점은 기능 선택에도 사용할 수 있다는 것입니다. 이를 사용하여 기능의 중요성을 알 수 있습니다. Random Forest에서 기능 중요도를 계산하는 방법을 이해하려면 먼저 의사결정 트리를 사용하여 기능 중요도를 계산하는 방법을 이해해야 합니다. 여기에 몇 가지 수학을 이해해야 하지만 걱정하지 마십시오. 가능한 가장 쉬운 방법으로 설명하려고 노력할 것입니다. 예를 들어 이해해 봅시다. 단순화를 위해 5개의 행과 2개의 열을 사용하고 DecisionTreeClassifier를 이 작은 데이터 세트에 맞추겠습니다.

랜덤 포레스트를 사용한 기능 중요성

특성 중요도를 계산하는 공식은 다음과 같습니다.

노드 - 분할

이 공식을 이해하기 위해 먼저 위 데이터세트에 대한 의사결정 트리를 그려보겠습니다.

랜덤 포레스트를 사용한 기능 중요성

여기에는 두 개의 열 [0과 1]이 있습니다. [0]의 특성 중요도를 계산하려면 이 열 [0]으로 인해 분할이 발생한 노드를 찾아야 합니다. 이 데이터 세트에는 열 [1]과 열 [0]에 대한 노드가 1개만 있습니다. 모든 노드 중에서 열 [0]으로 인해 분할이 발생한 노드의 기능 중요도를 찾은 다음 이를 모든 노드의 기능 중요도로 나눕니다. 노드의 중요성을 계산하기 위해 다음 공식을 사용합니다.

노드

1의 특징 중요도를 계산해 보겠습니다.st 의사결정 트리의 노드입니다.

우리의 Nt 5, N은 5, 해당 노드의 불순물은 0.48, Nt(오른쪽) 4, 오른쪽 불순물은 0.375, Nt(왼쪽) 는 1이고 왼쪽 불순물은 0입니다. 위 공식에 이 모든 정보를 넣으면 다음과 같습니다.

Nt는 5이다

마찬가지로, 우리는 이것을 2에 대해 계산할 것입니다nd 마디:

Nt는 5이다

이제 특성 [0]과 [1]의 중요성을 계산해 보겠습니다. 이는 다음과 같이 계산할 수 있습니다.

기능 [0] 및 [1]
기능 [0] 및 [1] 2

따라서 특성 [0]의 경우 특성 중요도는 0.625이고 [1]의 경우 0.375입니다.

랜덤 포레스트를 사용하여 이 전체를 어떻게 구현할 수 있는지 코드를 살펴보겠습니다.

sklearn.datasets에서 make_classification 가져오기 sklearn.tree에서 가져오기 DecisionTreeClassifier X,y = make_classification(n_samples=5, n_classes=2, n_features=2, n_informative=2, n_redundant=0, random_state=0) clf = DecisionTreeClassifier() clf.fit (X,y) sklearn.tree 가져오기 플롯_트리 플롯_트리(clf)

Random Forest를 사용하여 기능 중요도를 계산하려면 각 트리에서 모든 기능 중요도의 평균을 취합니다. DT1이 [0.324,0.676]을 제공한다고 가정하고, DT2의 경우 기능의 중요도는 [1,0]이므로 Random Forest가 수행할 작업은 이 숫자의 평균을 계산하는 것입니다. 따라서 열 [1]과 열 [0]의 최종 출력 특성 중요도는 각각 [0.662,0.338]입니다.

랜덤 포레스트의 장점과 단점

랜덤 포레스트 알고리즘의 가장 큰 장점 중 하나는 유연성입니다. 이 알고리즘을 회귀 문제와 분류 문제에 사용할 수 있습니다. 하이퍼파라미터 튜닝 없이도 더 나은 결과를 얻을 수 있기 때문에 편리한 알고리즘이라고 볼 수 있습니다. 또한 매개변수는 매우 간단하고 이해하기 쉬우며 그 수가 많지 않습니다.

머신러닝의 가장 큰 문제 중 하나는 Overfitting입니다. 테스트 데이터에서도 좋은 결과를 얻을 수 있는 일반화된 모델을 만들어야 합니다. 랜덤 포레스트는 결국 낮은 편향과 낮은 분산을 제공하는 많은 의사결정 트리를 결합하여 이러한 상황을 극복하는 데 도움이 됩니다.

랜덤 포레스트의 주요 한계는 트리 수가 많기 때문에 알고리즘을 훈련하는 데 오랜 시간이 걸리기 때문에 속도가 느리고 실시간 예측에 비효율적이라는 것입니다. 일반적으로 이러한 알고리즘은 학습 속도는 빠르지만 학습 후 예측을 생성하는 속도는 상당히 느립니다. 대부분의 실제 응용 프로그램에서 Random Forest 알고리즘은 충분히 빠르지만 런타임 성능이 중요하고 다른 접근 방식이 선호되는 상황이 확실히 있을 수 있습니다.

Random Forest 알고리즘 구현

1. 라이브러리를 가져오겠습니다.

# 필요한 라이브러리를 가져오려면 팬더를 pd로 가져옵니다.
numpy를 np로 가져 오기
matplotlib.pyplot을 plt로 가져 오기
sns로 seaborn 가져 오기
%matplotlib 인라인

2. 데이터 세트 가져오기

# csv 파일을 읽고 'df' 객체에 넣기 df = pd.read_csv('heart_v2.csv') df.head()
데이터세트 가져오기

3. Feature 변수를 X에, Target 변수를 y에 넣습니다.

# X에 특성 변수 넣기 X = df.drop('income',axis=1) # y에 응답 변수 넣기 y = df['income']

4. Train-Test-Split이 수행됩니다.

# 이제 데이터를 기차와 테스트로 분할할 수 있습니다 from sklearn.model_selection import train_test_split
# 데이터를 기차와 테스트로 분할 X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.20, random_state=42)

print("X_train 모양:",X_train.shape)

print("X_test 모양:",X_test.shape)

print("y_train 모양:",y_train.shape)

print("y_test 모양:",y_test.shape)

5. RandomForestClassifier를 가져와 데이터를 맞춰보겠습니다.

sklearn.ensemble에서 RandomForestClassifier 가져오기
classifier_rf = RandomForestClassifier(random_state=42, n_jobs=-1, max_length=5, n_estimators=100, oob_score=True)
%%time classifier_rf.fit(X_train, y_train)
classifier_rf.fit(X_train, y_train)
# oob 점수 확인 classifier_rf.oob_score_
0.831197

6. GridSearchCV를 사용하여 Random Forest에 대한 하이퍼파라미터 튜닝을 하고 데이터를 피팅해 보겠습니다.

rf = RandomForestClassifier(random_state=42, n_jobs=-1)
params = { 'max_length': [2,3,5,10,20], 'min_samples_leaf': [5,10,20,50,100,200], 'n_estimators': [10,25,30,50,100,200] }
sklearn.model_selection에서 GridSearchCV 가져오기
# 그리드 검색 모델을 인스턴스화합니다. Grid_search = GridSearchCV(estimator=rf, param_grid=params, cv = 4, n_jobs=-1, verbose=1, Score="accuracy")
%%time Grid_search.fit(X_train, y_train)
Grid_search.fit(X_train, y_train)
Grid_search.best_score_
Grid_search.best_score_
rf_best=grid_search.best_estimator_rf_best
그리드 검색

하이퍼파라미터 튜닝을 통해 그림과 같이 최상의 추정기를 가져올 수 있습니다. 식별된 최상의 매개변수 세트는 max_length=20, min_samples_leaf=5,n_estimators=200입니다.

최종 메모

이 기사에서 우리는 매우 강력한 기계 학습 알고리즘을 살펴보았습니다. 요약하면, 의사결정 트리와 랜덤 포레스트에 대해 배웠습니다. 트리는 어떤 기준으로 노드를 분할하며 Random Forest는 과적합을 극복하는 데 어떻게 도움이 됩니까? 또한 Random Forest가 기능 선택에 어떻게 도움이 되는지 알고 있습니다.

즉, 이제 이 알고리즘을 마스터했습니다. 이제 필요한 것은 연습뿐입니다. 아래 댓글로 문의사항이 있으면 알려주시기 바랍니다.

저자에 관하여

저는 현재 통계학(통계학 학사)을 전공하는 마지막 해에 재학 중인 학부생이며 데이터 과학, 기계 학습 및 인공 지능 분야에 큰 관심을 가지고 있습니다. 나는 데이터에 대한 추세와 기타 귀중한 통찰력을 발견하기 위해 데이터를 탐구하는 것을 즐깁니다. 나는 끊임없이 배우고 새로운 것을 시도하도록 동기를 부여합니다.

나는 협업과 작업에 열려 있습니다.

어떠한 것도 의심과 의문, 저에게 연락 주시기 바랍니다 이메일

나와 함께 연결 링크드인트위터

이미지 소스

  1. 이미지 1 – https://wiki.pathmind.com/decision-tree

이 기사에 표시된 미디어는 Analytics Vidhya의 소유가 아니며 작성자의 재량에 따라 사용됩니다.

출처: https://www.analyticsvidhya.com/blog/2021/10/an-introduction-to-random-forest-algorithm-for-beginners/

타임 스탬프 :

더보기 분석 Vidhya