logo

랜덤 포레스트 알고리즘

Random Forest는 지도 학습 기술에 속하는 널리 사용되는 기계 학습 알고리즘입니다. ML의 분류 및 회귀 문제 모두에 사용할 수 있습니다. 의 개념을 기반으로 합니다. 앙상블 학습, 이는 다음과 같은 과정이다. 복잡한 문제를 해결하고 모델의 성능을 향상시키기 위해 여러 분류기를 결합합니다.

이름에서 알 수 있듯이, 'Random Forest는 주어진 데이터세트의 다양한 하위 집합에 대한 다수의 의사결정 트리를 포함하고 해당 데이터세트의 예측 정확도를 향상시키기 위해 평균을 취하는 분류자입니다.' 하나의 의사결정 트리에 의존하는 대신 랜덤 포레스트는 각 트리에서 예측의 과반수 투표를 기반으로 예측을 가져와 최종 출력을 예측합니다.

숲에 나무 수가 많을수록 정확도가 높아지고 과적합 문제가 방지됩니다.

Xor C++

아래 다이어그램은 Random Forest 알고리즘의 작동을 설명합니다.

랜덤 포레스트 알고리즘

참고: Random Forest 알고리즘을 더 잘 이해하려면 의사결정 트리 알고리즘에 대한 지식이 있어야 합니다.

랜덤 포레스트에 대한 가정

랜덤 포레스트는 여러 트리를 결합하여 데이터 세트의 클래스를 예측하기 때문에 일부 의사결정 트리는 올바른 출력을 예측할 수 있지만 다른 의사결정 트리는 그렇지 않을 수도 있습니다. 그러나 모든 트리가 함께 올바른 출력을 예측합니다. 따라서 더 나은 Random Forest 분류기를 위한 두 가지 가정은 다음과 같습니다.

  • 분류기가 추측된 결과가 아닌 정확한 결과를 예측할 수 있도록 데이터 세트의 특성 변수에 실제 값이 있어야 합니다.
  • 각 트리의 예측은 매우 낮은 상관 관계를 가져야 합니다.

랜덤 포레스트를 사용하는 이유는 무엇입니까?

다음은 Random Forest 알고리즘을 사용해야 하는 이유를 설명하는 몇 가지 사항입니다.

  • 다른 알고리즘에 비해 훈련 시간이 덜 걸립니다.
  • 효율적으로 실행되는 대규모 데이터 세트의 경우에도 높은 정확도로 출력을 예측합니다.
  • 또한 많은 양의 데이터가 누락된 경우에도 정확성을 유지할 수 있습니다.

Random Forest 알고리즘은 어떻게 작동하나요?

Random Forest는 2단계로 진행됩니다. 첫 번째는 N개의 의사결정 트리를 결합하여 Random Forest를 생성하는 것이고, 두 번째는 첫 번째 단계에서 생성된 각 트리에 대해 예측을 하는 것입니다.

작업 프로세스는 아래 단계와 다이어그램으로 설명할 수 있습니다.

1 단계: 훈련 세트에서 무작위로 K개의 데이터 포인트를 선택합니다.

2 단계: 선택한 데이터 포인트(하위 집합)와 관련된 의사결정 트리를 구축합니다.

3단계: 구축하려는 의사결정 트리에 대해 숫자 N을 선택합니다.

4단계: 1단계와 2단계를 반복합니다.

5단계: 새로운 데이터 포인트의 경우 각 의사결정 트리의 예측을 찾고 다수의 표를 얻은 범주에 새 데이터 포인트를 할당합니다.

알고리즘의 작동은 아래 예를 통해 더 잘 이해할 수 있습니다.

센토스 vs 레드햇

예: 여러 과일 이미지가 포함된 데이터 세트가 있다고 가정해 보겠습니다. 따라서 이 데이터 세트는 Random Forest 분류기에 제공됩니다. 데이터세트는 하위 집합으로 나누어져 각 의사결정 트리에 제공됩니다. 훈련 단계에서 각 결정 트리는 예측 결과를 생성하고, 새로운 데이터 포인트가 발생하면 대부분의 결과를 기반으로 Random Forest 분류기가 최종 결정을 예측합니다. 아래 이미지를 고려하십시오.

랜덤 포레스트 알고리즘

랜덤 포레스트의 응용

랜덤 포레스트가 주로 사용되는 네 가지 부문은 다음과 같습니다.

선주문 순회
    은행업:은행 부문에서는 주로 대출 위험을 식별하기 위해 이 알고리즘을 사용합니다.약:이 알고리즘의 도움으로 질병 동향과 질병 위험을 식별할 수 있습니다.토지 이용:이 알고리즘을 통해 유사한 토지 이용 지역을 식별할 수 있습니다.마케팅:이 알고리즘을 사용하여 마케팅 동향을 식별할 수 있습니다.

랜덤 포레스트의 장점

  • Random Forest는 분류 및 회귀 작업을 모두 수행할 수 있습니다.
  • 높은 차원의 대규모 데이터 세트를 처리할 수 있습니다.
  • 이는 모델의 정확도를 높이고 과적합 문제를 방지합니다.

랜덤 포레스트의 단점

  • Random Forest는 분류 및 회귀 작업 모두에 사용할 수 있지만 회귀 작업에는 더 적합하지 않습니다.

Random Forest 알고리즘의 Python 구현

이제 Python을 사용하여 Random Forest 알고리즘 트리를 구현하겠습니다. 이를 위해 이전 분류 모델에서 사용한 것과 동일한 데이터 세트 'user_data.csv'를 사용합니다. 동일한 데이터 세트를 사용하여 Random Forest 분류기를 다음과 같은 다른 분류 모델과 비교할 수 있습니다. 의사결정 트리 분류기, KNN, SVM, 로지스틱 회귀 등

구현 단계는 다음과 같습니다.

  • 데이터 전처리 단계
  • Random Forest 알고리즘을 Training set에 맞추기
  • 테스트 결과 예측
  • 결과의 정확성 테스트(혼란행렬 생성)
  • 테스트 세트 결과 시각화.

1.데이터 전처리 단계:

다음은 전처리 단계의 코드입니다.

 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd #importing datasets data_set= pd.read_csv('user_data.csv') #Extracting Independent and dependent Variable x= data_set.iloc[:, [2,3]].values y= data_set.iloc[:, 4].values # Splitting the dataset into training and test set. from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test= train_test_split(x, y, test_size= 0.25, random_state=0) #feature Scaling from sklearn.preprocessing import StandardScaler st_x= StandardScaler() x_train= st_x.fit_transform(x_train) x_test= st_x.transform(x_test) 

위의 코드에서는 데이터를 전처리했습니다. 데이터 세트를 로드한 위치는 다음과 같습니다.

랜덤 포레스트 알고리즘

2. Random Forest 알고리즘을 훈련 세트에 맞추는 방법:

이제 Random Forest 알고리즘을 훈련 세트에 맞추겠습니다. 이에 맞게 RandomForest분류기 의 수업 sklearn.앙상블 도서관. 코드는 아래와 같습니다:

 #Fitting Decision Tree classifier to the training set from sklearn.ensemble import RandomForestClassifier classifier= RandomForestClassifier(n_estimators= 10, criterion='entropy') classifier.fit(x_train, y_train) 

위 코드에서 분류자 개체는 아래 매개변수를 사용합니다.

CSS로 이미지 정렬
    n_추정자=Random Forest에 필요한 나무 수입니다. 기본값은 10입니다. 임의의 숫자를 선택할 수 있지만 과적합 문제를 처리해야 합니다.기준=분할의 정확도를 분석하는 기능입니다. 여기서는 정보 획득을 위해 '엔트로피'를 사용했습니다.

산출:

 RandomForestClassifier(bootstrap=True, class_weight=None, criterion='entropy', max_depth=None, max_features='auto', max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=None, oob_score=False, random_state=None, verbose=0, warm_start=False) 

3. 테스트 세트 결과 예측

우리 모델이 훈련 세트에 맞춰졌으므로 이제 테스트 결과를 예측할 수 있습니다. 예측을 위해 새로운 예측 벡터 y_pred를 생성합니다. 아래는 그에 대한 코드입니다:

 #Predicting the test set result y_pred= classifier.predict(x_test) 

산출:

예측 벡터는 다음과 같이 주어진다.

랜덤 포레스트 알고리즘

위의 예측 벡터와 테스트 세트 실제 벡터를 확인함으로써 분류자가 수행한 잘못된 예측을 확인할 수 있습니다.

4. 혼동 행렬 만들기

이제 올바른 예측과 잘못된 예측을 결정하기 위해 혼동 행렬을 만들어 보겠습니다. 아래는 그에 대한 코드입니다:

 #Creating the Confusion matrix from sklearn.metrics import confusion_matrix cm= confusion_matrix(y_test, y_pred) 

산출:

랜덤 포레스트 알고리즘

위의 매트릭스에서 볼 수 있듯이 4+4= 8개의 잘못된 예측 그리고 64+28= 92개의 정확한 예측.

pyspark 튜토리얼

5. 훈련 세트 결과 시각화

여기서는 훈련 세트 결과를 시각화하겠습니다. 훈련 세트 결과를 시각화하기 위해 Random Forest 분류기에 대한 그래프를 그려보겠습니다. 분류자는 로지스틱 회귀 분석에서 했던 것처럼 SUV 차량을 구매했거나 구매하지 않은 사용자에 대해 예 또는 아니요를 예측합니다. 아래는 그에 대한 코드입니다:

 from matplotlib.colors import ListedColormap x_set, y_set = x_train, y_train x1, x2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step =0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(x1, x2, classifier.predict(nm.array([x1.ravel(), x2.ravel()]).T).reshape(x1.shape), alpha = 0.75, cmap = ListedColormap(('purple','green' ))) mtp.xlim(x1.min(), x1.max()) mtp.ylim(x2.min(), x2.max()) for i, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap(('purple', 'green'))(i), label = j) mtp.title('Random Forest Algorithm (Training set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show() 

산출:

랜덤 포레스트 알고리즘

위 이미지는 훈련 세트 결과를 가지고 작업하는 Random Forest 분류기에 대한 시각화 결과입니다. 이는 의사결정나무 분류기와 매우 유사합니다. 각 데이터 포인트는 user_data의 각 사용자에 해당하며 보라색과 녹색 영역은 예측 영역입니다. 보라색 지역은 SUV 차량을 구매하지 않은 사용자로 분류되며, 녹색 지역은 SUV 차량을 구매한 사용자로 분류됩니다.

따라서 Random Forest 분류기에서는 구매 변수에 대해 예 또는 아니요를 예측한 10개의 트리를 사용했습니다. 분류기는 예측의 대부분을 가져와 결과를 제공했습니다.

6. 테스트 세트 결과 시각화

이제 테스트 세트 결과를 시각화하겠습니다. 아래는 그에 대한 코드입니다:

 #Visulaizing the test set result from matplotlib.colors import ListedColormap x_set, y_set = x_test, y_test x1, x2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step =0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(x1, x2, classifier.predict(nm.array([x1.ravel(), x2.ravel()]).T).reshape(x1.shape), alpha = 0.75, cmap = ListedColormap(('purple','green' ))) mtp.xlim(x1.min(), x1.max()) mtp.ylim(x2.min(), x2.max()) for i, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap(('purple', 'green'))(i), label = j) mtp.title('Random Forest Algorithm(Test set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show() 

산출:

랜덤 포레스트 알고리즘

위 이미지는 테스트 세트에 대한 시각화 결과입니다. 과적합 문제 없이 최소 잘못된 예측 수(8)가 있는지 확인할 수 있습니다. 분류기의 트리 수를 변경하면 다른 결과를 얻을 수 있습니다.