Python 및 Scikit-Learn PlatoBlockchain 데이터 인텔리전스를 사용한 랜덤 포레스트 알고리즘에 대한 결정적인 안내서. 수직 검색. 일체 포함.

Python 및 Scikit-Learn을 사용한 Random Forest 알고리즘에 대한 결정적인 가이드

개요

Random Forest 알고리즘은 가장 유연하고 강력하며 널리 사용되는 알고리즘 중 하나입니다. 분류 및 회귀, 로 구축 결정 트리의 앙상블.

이러한 개념에 익숙하지 않더라도 걱정하지 마십시오. 이러한 개념을 모두 다룰 것입니다.

이 심층 실습 가이드에서는 직관 결정 트리가 작동하는 방식, 앙상블이 개별 분류자와 회귀자를 향상시키는 방법, 랜덤 포레스트가 무엇인지, Python과 Scikit-Learn을 사용하여 엔드 투 엔드 미니 프로젝트를 통해 랜덤 포레스트 분류자와 회귀자를 구축하고 연구 질문에 답합니다.

당신이 현재 여성에 관한 데이터를 분석하는 연구 그룹의 일원이라고 생각해 보십시오. 이 그룹은 100개의 데이터 기록을 수집했으며 여성을 범주(임신 여부, 농촌 또는 도시 지역 거주)로 나누어 초기 기록을 구성할 수 있기를 원합니다. 연구원들은 각 범주에 몇 명의 여성이 있는지 이해하기를 원합니다.

정확히 그것을 수행하는 계산 구조가 있습니다. 나무 구조. 트리 구조를 사용하면 각 범주에 대해 서로 다른 부서를 나타낼 수 있습니다.

의사 결정 트리

트리의 노드를 어떻게 채우나요? 여기가 어디야 결정 트리 초점을 맞춥니다.

첫째, 임신으로 기록을 구분할 수 있고, 그 다음에는 도시 또는 농촌에 거주하는 것으로 구분할 수 있다. 다른 순서로 이 작업을 수행할 수 있습니다. 처음에는 여성이 거주하는 지역에 따라 나누고 임신 상태에 따라 구분합니다. 이를 통해 트리에 고유한 계층 구조가 있음을 알 수 있습니다. 정보를 구성하는 것 외에도 트리는 정보를 계층적 방식으로 구성합니다. 정보가 나타나는 순서가 중요하고 결과적으로 다른 트리로 연결됩니다.

아래는 설명된 트리의 예입니다.

트리 이미지에는 총 7명의 여성을 나타내는 100개의 사각형이 있으며, 이 위쪽 사각형은 아래의 78개의 사각형과 연결되어 있으며, 임신하지 않은 22명과 임신한 45명으로 여성을 구분합니다. 이전 두 사각형에서 네 개의 사각형이 있습니다. 여성을 지역에 따라 구분하는 위의 각 사각형에 33개가 연결되어 있는데, 임신하지 않은 경우 14명이 도시 지역에 거주하고 8명이 농촌 지역에 거주하며 임산부의 경우 XNUMX명이 농촌 지역에 거주하고 XNUMX명이 도시 지역에 거주합니다. 트리를 보는 것만으로도 이러한 분할을 이해하고 각 "레이어"가 이전 레이어에서 파생되는 방법을 쉽게 알 수 있습니다. 이러한 레이어는 트리입니다. 레벨, 레벨은 다음을 설명합니다. 깊이 나무의:

Python 및 Scikit-Learn PlatoBlockchain 데이터 인텔리전스를 사용한 랜덤 포레스트 알고리즘에 대한 결정적인 안내서. 수직 검색. 일체 포함.

위의 이미지에서 첫 번째 트리 수준이 수준 0 정사각형이 하나만 있고 그 뒤에 수준 1 두 개의 사각형이 있고 수준 2 네 개의 사각형이 있는 곳. 이것은 깊이 2 나무.

레벨 0에는 트리를 생성하는 사각형이 있습니다. 첫 번째 사각형은 루트 노드, 이 루트는 두 자식 노드 즉, 레벨 1에서 상위 노드 레벨 2의 XNUMX개 노드로 이동합니다. 지금까지 언급한 "사각형"이 실제로 호출되는 것을 확인하십시오. 노드; 각 이전 노드는 자식 노드인 다음 노드의 부모입니다. 부모가 동일한 각 수준의 자식 노드를 호출합니다. 동기, 다음 이미지에서 볼 수 있듯이:

Python 및 Scikit-Learn PlatoBlockchain 데이터 인텔리전스를 사용한 랜덤 포레스트 알고리즘에 대한 결정적인 안내서. 수직 검색. 일체 포함.

이전 이미지에서 레벨 1도 내부 노드, 루트와 마지막 노드 사이에 있으면 리프 노드. 잎 마디는 나무의 마지막 부분입니다. 100명의 초기 여성 중 몇 명이 임신하고 농촌 지역에 살고 있는지 말한다면 잎을 보면 알 수 있습니다. 따라서 잎의 숫자는 첫 번째 연구 질문에 대한 답이 됩니다.

여성에 대한 새로운 기록이 있고 이전에 그들을 분류하는 데 사용되었던 트리가 이제 여성이 연구에 참여할 수 있는지 여부를 결정하는 데 사용된다면 여전히 작동할까요? 트리는 동일한 기준을 사용하며 여성은 임신 중이고 시골 지역에 거주하는 경우 참여할 자격이 있습니다.

Python 및 Scikit-Learn PlatoBlockchain 데이터 인텔리전스를 사용한 랜덤 포레스트 알고리즘에 대한 결정적인 안내서. 수직 검색. 일체 포함.

위의 이미지를 보면 각 트리 노드의 질문에 대한 대답인 "그녀는 참여자입니까?", "그녀는 임신했습니까?", "그녀는 시골 지역에 살고 있습니까?"-예, 예, 그리고 예, 그래서 나무는 관념적으로 결정으로 이어질 수 있는 것 같습니다. 이 경우에는 여성이 연구에 참여할 수 있습니다.

이것은 에센스 수동 방식으로 수행되는 의사 결정 트리. 기계 학습을 사용하여 최종 결정의 정확성을 최대화하는 방식으로 이 트리를 자동으로 구성하는 모델을 구성할 수 있습니다.

참고 : 컴퓨터 과학에는 이진 트리, 일반 트리, AVL 트리, 스플레이 트리, 레드 블랙 트리, b-트리 등과 같은 여러 유형의 트리가 있습니다. 여기에서는 의사 결정 트리가 무엇인지에 대한 일반적인 아이디어를 제공하는 데 중점을 둡니다. . 답에 따라 달라지는 경우 or 아니 각 노드에 대한 질문이므로 각 노드에는 기껏해야 두 자녀, "더 작은" 노드가 왼쪽에 있도록 정렬하면 의사결정 트리를 다음과 같이 분류합니다. 이진 트리.

이전 예에서 트리가 어떻게 분류 참가자 또는 비참가자로서 새로운 데이터, 또는 "참가자는 몇 명입니까?", "임신자는 몇 명입니까?", "농촌 지역에 거주하는 사람은 몇 명입니까?"로 질문을 변경할 수도 있습니다. 농촌 지역에 거주하는 임신 참가자.

데이터가 분류되면 트리가 다음을 수행하고 있음을 의미합니다. 분류 작업을 수행하고 데이터의 양이 발견되면 트리는 다음을 수행합니다. 되돌아옴 직무. 이는 의사결정 트리가 분류 및 회귀 작업 모두에 사용될 수 있음을 의미합니다.

의사 결정 트리가 무엇인지, 어떻게 사용할 수 있는지, 의사 결정 트리를 설명하는 데 사용되는 명명법을 이해했으므로 이제 그 한계에 대해 궁금해할 수 있습니다.

랜덤 포레스트 이해

일부 참가자가 도시와 농촌 지역의 분단에 거주하는 경우 결정은 어떻게 됩니까? 나무가 시골이나 도시에 이 기록을 추가할까요? 이 데이터는 상당히 명확하기 때문에 현재 가지고 있는 구조에 맞추는 것이 어려워 보입니다.

또한 보트에 거주하는 여성이 연구에 참여하면 농촌 또는 도시로 간주됩니까? 이전 사례와 마찬가지로 트리에서 사용 가능한 옵션을 고려하여 분류하는 것은 어려운 데이터 포인트입니다.

의사 결정 트리 예에 대해 조금 더 생각하면 트리가 이미 가지고 있는 패턴을 이미 따르고 있다는 점을 고려하여 새 데이터를 올바르게 분류할 수 있음을 알 수 있습니다. 하지만 트리를 정의한 초기 데이터와 다른 레코드가 있는 경우 트리 구조가 너무 엄격하여 레코드를 분류할 수 없습니다.

이는 의사 결정 트리가 엄격하고 가능성이 제한적일 수 있음을 의미합니다. 이상적인 의사 결정 트리는 더 유연하고 보이지 않는 더 미묘한 데이터를 수용할 수 있습니다.

해결 방법 : "두 쌍의 눈이 하나보다 더 잘 보는 것"처럼 일반적으로 두 모델이 하나보다 더 정확한 답을 내놓습니다. (트리 구조로 인코딩된) 지식 표현의 다양성을 고려하면 한 트리의 단점이 다른 트리에 의해 "보충"될 수 있기 때문에 여러 유사한 트리 간에 약간 다른 구조의 강성은 더 이상 제한적이지 않습니다. 다수를 조합하여 나무 함께, 우리는 .

초기 질문에 대한 답과 관련하여 우리는 이미 그것이 나뭇잎에 인코딩된다는 것을 알고 있습니다. 하지만 나무가 하나가 아닌 여러 개 있을 때 무엇이 ​​바뀌나요?

분류를 위해 트리를 결합하면 결과는 대부분의 답변으로 정의됩니다. 이를 호출합니다. 다수결; 회귀의 경우 숲의 각 나무가 부여한 숫자는 평균.

앙상블 학습 및 모델 앙상블

이 방법은 다음과 같이 알려져 있습니다. 앙상블 학습. 앙상블 학습을 적용할 때 출력을 구문 분석하고 다른 출력과 결합할 수 있는 한(수동으로 또는 기존 라이브러리 사용) 모든 알고리즘을 함께 혼합할 수 있습니다. 일반적으로 여러 의사 결정 트리와 같이 동일한 유형의 여러 모델을 함께 앙상블하지만 동일한 모델 유형 앙상블을 조인하는 것만으로 제한되지는 않습니다.

앙상블은 문제를 더 잘 일반화하고 약간의 성능 향상을 짜내는 실질적으로 보장된 방법입니다. 경우에 따라 앙상블 모델은 상당한 예측력이 증가하고 때로는 미미합니다. 이는 훈련 및 평가 중인 데이터 세트와 모델 자체에 따라 다릅니다.

의사 결정 트리를 결합하면 다음과 같은 결과가 나타납니다. 상당한 개별 트리에 비해 성능이 향상됩니다. 이 접근 방식은 연구 및 응용 기계 학습 커뮤니티에서 대중화되었으며 매우 일반적이어서 결정 트리의 앙상블은 구어체로 , 생성되고 있던 일반적인 유형의 포리스트(기능의 임의 하위 집합에 대한 의사 결정 트리 포리스트)는 이름을 대중화했습니다. 무작위 숲.

광범위한 사용을 감안할 때 Scikit-Learn과 같은 라이브러리는 다음을 위한 래퍼를 구현했습니다. RandomForestRegressors와 RandomForestClassifier자체 결정 트리 구현 위에 구축되어 연구원이 자체 앙상블을 구축하지 않도록 합니다.

랜덤 포레스트로 뛰어들자!

랜덤 포레스트 알고리즘은 어떻게 작동합니까?

다음은 랜덤 포레스트 알고리즘을 실행할 때 관련된 기본 단계입니다.

  1. 임의의 레코드 수를 선택합니다. 데이터 세트에서 4, 20, 76, 150 또는 심지어 2.000과 같은 임의의 숫자일 수 있습니다( N 기록). 숫자는 데이터 세트의 너비에 따라 달라지며 넓을수록 커집니다. N 할 수 있습니다. 이곳은 닥치는대로의 알고리즘 이름의 일부가 온다!
  2. 그것들을 기반으로 의사 결정 트리를 구축하십시오. N 무작위 기록;
  3. 알고리즘에 대해 정의된 트리 수 또는 포리스트의 트리 수에 따라 1단계와 2단계를 반복합니다. 이렇게 하면 임의 데이터 레코드 집합에서 더 많은 트리가 생성됩니다.
  4. 3단계 이후에 결과를 예측하는 마지막 단계가 옵니다.
    • 분류의 경우: 포리스트의 각 트리는 새 레코드가 속하는 범주를 예측합니다. 그런 다음 새 레코드가 다수결 득표 범주에 할당됩니다.
    • 회귀의 경우: 포리스트의 각 트리는 새로운 레코드에 대한 값을 예측하고 최종 예측값은 포리스트의 모든 트리에서 예측한 모든 값의 평균을 취하여 계산됩니다.

기능의 임의 하위 집합에 맞는 각 트리는 계산 비용을 낮게 유지하면서 앙상블링으로 수정되는 다른 기능에 대한 정보가 반드시 필요하지 않습니다.

조언: Random Forest는 Decision Trees를 기반으로 하기 때문에 Decision Trees의 작동 방식을 이해하고 개별적으로 연습하여 구조에 대한 직관을 구축하는 데 매우 유용합니다. 랜덤 포레스트를 구성할 때 트리의 최대 깊이, 리프 노드에 있어야 하는 최소 샘플 수, 내부 분할을 결정하기 위한 기준 등과 같은 값을 설정하여 앙상블이 데이터 세트를 만들고 새로운 포인트로 일반화합니다. 실제로는 일반적으로 Random Forests, Gradient Boosting 또는 Extreme Gradient Boosting 또는 기타 트리 기반 방법론을 사용하므로 단일 결정 트리의 하이퍼파라미터를 잘 파악하면 앙상블 튜닝을 위한 강력한 직관을 구축하는 데 도움이 됩니다.

트리가 작동하는 방식에 대한 직관과 Random Forest에 대한 이해가 있다면 남은 것은 데이터를 기반으로 구축, 교육 및 튜닝을 연습하는 것입니다!

Scikit-Learn으로 랜덤 포레스트 모델 구축 및 훈련

지금까지 사용된 예에는 임신, 거주 지역 및 여성이 포함된 데에는 이유가 있었습니다.

2020년에 방글라데시의 연구원들은 임산부의 사망률이 특히 시골 지역에 거주하는 여성을 고려할 때 여전히 매우 높다는 사실을 발견했습니다. 그 때문에 그들은 IOT 모니터링 시스템을 사용하여 산모 건강의 위험 분석. IOT 시스템은 방글라데시 농촌 지역의 다양한 병원, 지역사회 진료소 및 산모 건강 관리에서 데이터를 수집했습니다.

수집된 데이터는 쉼표로 구분된 값(csv) 파일로 구성되어 UCI의 기계 학습 저장소.

이것은 우리가 연습하고 임산부에게 다음이 있는지 이해하기 위해 사용할 데이터입니다. 낮은, 매질 or 높은 사망 위험.

주의 사항: 데이터 세트를 다운로드할 수 있습니다. 여기에서 지금 확인해 보세요..

분류를 위해 랜덤 포레스트 사용

우리는 여자가 있는지 알고 싶기 때문에 낮은, 매질 or 높은 사망 위험, 이는 세 가지 등급으로 분류를 수행함을 의미합니다. 문제가 두 개 이상의 클래스로 구성된 경우 문제라고 합니다. 다중 클래스 문제, 반대로 문제(두 클래스 중에서 선택하는 경우, 일반적으로 01).

이 첫 번째 예에서는 Random Forest 분류자와 Python의 Scikit-Learn을 사용하여 다중 클래스 분류 모델을 구현합니다.

이 문제를 해결하기 위해 라이브러리를 로드하고, 데이터를 읽고, 요약 통계를 보고, 더 잘 이해할 수 있도록 데이터 시각화를 만드는 일반적인 머신 러닝 단계를 따를 것입니다. 그런 다음 데이터를 전처리 및 분할한 다음 모델을 생성, 교육 및 평가합니다.

라이브러리 가져 오기

Pandas를 사용하여 데이터를 읽고, Seaborn 및 Matplotlib를 사용하여 시각화하고, NumPy를 사용하여 훌륭한 유틸리티 방법을 사용할 것입니다.

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
데이터세트 가져오기

다음 코드는 데이터 세트를 가져와 Python으로 로드합니다. DataFrame:

dataset = pd.read_csv("../../datasets/random-forest/maternal_health_risk.csv")

데이터의 처음 다섯 줄을 보기 위해 다음을 실행합니다. head() 명령:

dataset.head()

이 결과는 다음과 같습니다.

    Age SystolicBP  DiastolicBP BS      BodyTemp    HeartRate   RiskLevel
0   25  130         80          15.0    98.0        86          high risk
1   35  140         90          13.0    98.0        70          high risk
2   29  90          70          8.0     100.0       80          high risk
3   30  140         85          7.0     98.0        70          high risk
4   35  120         60          6.1     98.0        76          low risk

여기에서 조사 중에 수집된 모든 속성을 볼 수 있습니다.

  • 나이: 나이.
  • SystolicBP: 임신 중 중요한 속성인 mmHg 단위의 혈압 상한값.
  • 이완기혈압: 임신 중 또 다른 중요한 속성인 혈압(mmHg)의 낮은 값.
  • BS: 몰 농도로 환산한 혈당 수치, mmol/L.
  • 심박수: 휴식 심박수(분당 비트 수).
  • RiskLevel: 임신 중 위험 수준.
  • BodyTemp: 체온.

이제 측정 대상에 대해 더 많이 이해했으므로 다음을 사용하여 데이터 유형을 살펴볼 수 있습니다. info():

dataset.info()

결과 :


RangeIndex: 1014 entries, 0 to 1013
Data columns (total 7 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   Age          1014 non-null   int64  
 1   SystolicBP   1014 non-null   int64  
 2   DiastolicBP  1014 non-null   int64  
 3   BS           1014 non-null   float64
 4   BodyTemp     1014 non-null   float64
 5   HeartRate    1014 non-null   int64  
 6   RiskLevel    1014 non-null   object 
dtypes: float64(2), int64(4), object(1)
memory usage: 55.6+ KB

부터 보면 RangeIndex 줄에 1014개의 레코드가 있고 열이 있음을 알 수 있습니다. Non-Null Count 데이터에 누락된 값이 없음을 알립니다. 즉, 누락된 데이터를 처리할 필요가 없습니다!

. Dtype 열에서 각 변수의 유형을 볼 수 있습니다. 현재, float64BSBodyTemp 15.0, 15.51, 15.76, 17.28과 같이 범위 내에서 변할 수 있는 숫자 값을 가지므로 수치적으로 연속 (항상 부동 소수점 숫자에 0을 추가할 수 있습니다. 무한). 한편, 다음과 같은 변수 Age, SystolicBP, DiastolicBPHeartRate 유형의 int64, 이것은 11, 12, 13, 14와 같이 숫자가 단위에 의해서만 변경됨을 의미합니다. 심박수는 77.78이 아니라 77 또는 78입니다. 수치적으로 이산 가치. 그리고 우리는 또한 가지고 있습니다 RiskLevelobject type, 이것은 일반적으로 변수가 텍스트임을 나타내며 아마도 변수를 숫자로 변환해야 할 것입니다. 위험 수준이 낮음에서 높음으로 증가하기 때문에 범주에 내포된 순서가 있습니다. 절대적으로 서수 변하기 쉬운.

주의 사항: 각 데이터의 유형을 살펴보고 해당 컨텍스트에 따라 의미가 있는지 확인하는 것이 중요합니다. 예를 들어, 심박수 단위의 절반을 갖는 것은 의미가 없으므로 이는 불연속 값에 대해 정수 유형이 적합함을 의미합니다. 그렇지 않은 경우 Pandas의 데이터 유형을 변경할 수 있습니다. astype() 재산 – df['column_name'].astype('type').

데이터 유형을 살펴본 후 다음을 사용할 수 있습니다. describe() 각 열의 평균값, 표준 편차, 분위수, 최소 및 최대 데이터 값과 같은 일부 기술 통계에서 정점을 찍으려면:

dataset.describe().T 

위의 코드는 다음을 표시합니다.

            count   mean        std         min     25%     50%     75%     max
Age         1014.0  29.871795   13.474386   10.0    19.0    26.0    39.0    70.0
SystolicBP  1014.0  113.198225  18.403913   70.0    100.0   120.0   120.0   160.0
DiastolicBP 1014.0  76.460552   13.885796   49.0    65.0    80.0    90.0    100.0
BS          1014.0  8.725986    3.293532    6.0     6.9     7.5     8.0     19.0
BodyTemp    1014.0  98.665089   1.371384    98.0    98.0    98.0    98.0    103.0
HeartRate   1014.0  74.301775   8.088702    7.0     70.0    76.0    80.0    90.0
RiskLevel   1014.0  0.867850    0.807353    0.0     0.0     1.0     2.0     2.0

대부분의 열에서 평균 값은 에서 멀리 떨어져 있습니다. 표준편차(std) – 이것은 데이터가 반드시 올바른 통계 분포를 따르지 않는다는 것을 나타냅니다. 그렇다면 위험을 예측할 때 모델에 도움이 되었을 것입니다. 여기에서 할 수 있는 것은 전 세계 인구의 데이터인 것처럼 데이터를 더 대표성 있게 만들기 위해 데이터를 사전 처리하는 것입니다. 정규화. 그러나 다음을 위해 Random Forest 모델을 사용할 때 이점이 있습니다. 분류, 고유한 트리 구조는 정규화되지 않은 데이터도 변수별로 트리 수준별 값으로 나누면 잘 다룰 수 있다는 점이다.

또한 우리는 트리를 사용하고 결과 클래스는 투표로 얻을 것이기 때문에 본질적으로 다른 값 사이를 비교하는 것이 아니라 동일한 유형의 값 사이에서만 비교하므로 이 경우 기능을 동일한 스케일로 조정할 필요가 없습니다. . 이는 Random Forest 분류 모델이 척도 불변, 기능 확장을 수행할 필요가 없습니다.

이 경우 우리가 취할 수 있는 데이터 전처리 단계는 범주형을 변환하는 것입니다. RiskLevel 열을 숫자로 변환합니다.

데이터 시각화

변신하기 전 RiskLevel, Scatterplot으로 피처 쌍별 포인트 조합을 살펴보고 히스토그램 곡선을 시각화하여 포인트가 어떻게 분포되어 있는지 빠르게 데이터를 시각화해 보겠습니다. 이를 위해 Seaborn의 pairplot() 두 플롯을 결합합니다. 각 기능 조합에 대해 두 플롯을 모두 생성하고 위험 수준에 따라 색상으로 구분된 포인트를 표시합니다. hue 재산:

g = sns.pairplot(dataset, hue='RiskLevel')
g.fig.suptitle("Scatterplot and histogram of pairs of variables color coded by risk level", 
               fontsize = 14, 
               y=1.05); 

위의 코드는 다음을 생성합니다.

Python 및 Scikit-Learn PlatoBlockchain 데이터 인텔리전스를 사용한 랜덤 포레스트 알고리즘에 대한 결정적인 안내서. 수직 검색. 일체 포함.

플롯을 볼 때 이상적인 상황은 곡선과 점 사이에 명확한 구분이 있는 것입니다. 보시다시피 세 가지 유형의 위험 등급은 대부분 혼합되어 있습니다. 나무는 점 사이의 공간을 구분할 때 내부적으로 선을 그리기 때문에 숲에 더 많은 나무가 더 많은 공간을 제한하고 점을 더 잘 분류할 수 있다는 가설을 세울 수 있습니다.

기본적인 탐색적 데이터 분석이 완료되면 다음을 전처리할 수 있습니다. RiskLevel 열입니다.

분류를 위한 데이터 전처리

확실히 클래스가 XNUMX개밖에 없다. RiskLevel 데이터에 잘못 추가된 다른 값이 없는지 확인하고 사용할 수 있습니다. unique() 열의 고유 값을 표시하려면 다음을 수행하십시오.

dataset['RiskLevel'].unique()

이 결과는 다음과 같습니다.

array(['high risk', 'low risk', 'mid risk'], dtype=object)

클래스를 확인하고 이제 다음 단계는 각 값을 숫자로 변환하는 것입니다. 분류 사이에는 순서가 있으므로 0, 1, 2 값을 사용하여 다음을 나타낼 수 있습니다. 낮은, 매질높은 위험. 열 값을 변경하는 방법에는 여러 가지가 있습니다. 단순한 것이 복잡한 것보다 낫다 좌우명, 우리는 .replace() 메소드를 사용하고 간단히 정수 표현으로 바꾸십시오.

dataset['RiskLevel'] = dataset['RiskLevel'].replace('low risk', 0).replace('mid risk', 1).replace('high risk', 2)

값을 바꾼 후 데이터를 모델 학습에 사용할 데이터로 나눌 수 있습니다. 풍모 or X, 그리고 우리가 예측하고자 하는 것은 라벨 or y:

y = dataset['RiskLevel']
X = dataset.drop(['RiskLevel'], axis=1)

한 번 Xy 세트가 준비되었습니다. Scikit-Learn의 train_test_split() 기차 세트와 테스트 세트로 더 나누는 방법:

from sklearn.model_selection import train_test_split

SEED = 42
X_train, X_test, y_train, y_test = train_test_split(X, y, 
                                                    test_size=0.2, 
                                                    random_state=SEED)

조언: 결과를 재현 가능하게 하려면 임의 상태 시드를 사용해야 합니다. 가이드에서와 동일한 결과를 재현할 수 있도록 임의 상태 시드를 사용했습니다.

여기서는 데이터의 20%를 테스트에 사용하고 80%를 교육에 사용합니다.

RandomForestClassifier 훈련

모범 사례, 업계에서 인정하는 표준 및 포함된 치트 시트가 포함된 Git 학습에 대한 실습 가이드를 확인하십시오. 인터넷 검색 Git 명령을 중지하고 실제로 배움 이것!

Scikit-Learn은 아래에서 앙상블을 구현했습니다. sklearn.ensemble 기준 치수. 분류에 사용되는 결정 트리의 앙상블은 다수결로 구현됩니다. RandomForestClassifier.

기차와 테스트 세트가 있으면 다음을 가져올 수 있습니다. RandomForestClassifier 클래스를 만들고 모델을 만듭니다. 시작하려면 다음을 설정하여 세 그루의 나무가 있는 숲을 만들어 봅시다. n_estimators 매개변수를 3으로 설정하고 각 트리가 XNUMX단계로 설정하여 max_depth2에

from sklearn.ensemble import RandomForestClassifier

rfc = RandomForestClassifier(n_estimators=3, 
                             max_depth=2,
                             random_state=SEED)

참고 : 의 기본값 n_estimators is 100. 이렇게 하면 앙상블의 예측력과 일반화가 향상되지만 더 쉽게 시각화하고 검사할 수 있도록 더 작은 앙상블을 만들고 있습니다. 단 3그루의 나무로 시각화하고 검사할 수 있습니다. 수동으로 개별 나무와 그 상호 의존성에 대한 우리의 직관을 더욱 구축합니다. 에도 동일하게 적용됩니다. max_depth어느입니다 None, 필요에 따라 트리가 데이터에 맞게 점점 더 깊어질 수 있음을 의미합니다.

데이터 주위에 모델을 맞추기 위해 – 우리는 fit() 학습 기능 및 레이블을 전달하는 방법:


rfc.fit(X_train, y_train)

y_pred = rfc.predict(X_test)

이제 예측된 레이블을 실제 레이블과 비교하여 모델이 얼마나 잘 수행했는지 평가할 수 있습니다! 모델을 평가하기 전에 앙상블을 살펴보겠습니다.

모델을 좀 더 자세히 살펴보기 위해 각 트리와 트리가 데이터를 나누는 방법을 시각화할 수 있습니다. 이것은 다음을 사용하여 수행할 수 있습니다. tree 모듈을 Scikit-Learn에 내장한 다음 앙상블의 각 추정기를 반복합니다.


from sklearn import tree

features = X.columns.values 
classes = ['0', '1', '2'] 



for estimator in rfc.estimators_:
    print(estimator)
    plt.figure(figsize=(12,6))
    tree.plot_tree(estimator,
                   feature_names=features,
                   class_names=classes,
                   fontsize=8, 
                   filled=True, 
                   rounded=True)
    plt.show()

위의 코드는 트리 플롯을 표시합니다.

Python 및 Scikit-Learn PlatoBlockchain 데이터 인텔리전스를 사용한 랜덤 포레스트 알고리즘에 대한 결정적인 안내서. 수직 검색. 일체 포함.
Python 및 Scikit-Learn PlatoBlockchain 데이터 인텔리전스를 사용한 랜덤 포레스트 알고리즘에 대한 결정적인 안내서. 수직 검색. 일체 포함.
Python 및 Scikit-Learn PlatoBlockchain 데이터 인텔리전스를 사용한 랜덤 포레스트 알고리즘에 대한 결정적인 안내서. 수직 검색. 일체 포함.

세 나무가 어떻게 다른지 확인하십시오. 첫 번째는 ~로 시작합니다. BS 기능, 두 번째 DiastolicBP, 세 번째는 BS 다시. 세 번째는 다른 수의 샘플을 살펴보지만. 오른쪽 가지에서 처음 두 트리도 다음을 사용하여 결정합니다. Age 리프 수준에서 세 번째 트리는 BS 특징. 단 XNUMX개의 추정기로, 확장이 고도로 정확한 모델로 성공적으로 앙상블될 수 있는 지식의 풍부하고 다양한 표현을 제공하는 방법이 분명합니다.

숲에 나무가 많을수록 모델이 더 다양해집니다. 하지만 수익이 감소하는 지점이 있습니다. 많은 트리가 임의의 기능 하위 집합에 적합하기 때문에 앙상블에서 많은 다양성을 제공하지 않는 유사한 트리가 상당 부분 있을 것입니다. 과도한 투표권 앙상블이 훈련 데이터 세트에 과적합되도록 왜곡하여 검증 세트에 대한 일반화를 손상시킵니다.

이전에 더 많은 트리를 보유하고 모델 결과를 개선할 수 있는 방법에 대한 가설이 있었습니다. 결과를 살펴보고 새 모델을 생성하고 가설이 성립하는지 확인합시다!

RandomForestClassifier 평가

Scikit-Learn은 다음을 제공하여 기준선을 쉽게 만들 수 있습니다. DummyClassifier, 예측 출력 입력 기능을 사용하지 않고 (완전히 무작위 출력). 귀하의 모델이 DummyClassifier, 일부 학습이 일어나고 있습니다! 학습을 극대화하려면 다음을 사용하여 다양한 하이퍼파라미터를 자동으로 테스트할 수 있습니다. RandomizedSearchCV or GridSearchCV. 기준선을 갖는 것 외에도 여러 메트릭의 렌즈에서 모델의 성능을 평가할 수 있습니다.

알고리즘을 평가하는 데 사용할 수 있는 일부 기존 분류 메트릭은 정밀도, 재현율, f1-점수, 정확도 및 혼동 행렬입니다. 각각에 대한 간략한 설명은 다음과 같습니다.

  1. Precision: 우리의 목표가 분류기에 의해 올바른 것으로 간주된 올바른 예측 값을 이해하는 것일 때. 정밀도는 이러한 참양성 값을 양성으로 예측된 ​​샘플로 나눕니다.

$$
정밀도 = frac{text{참 긍정}}{text{참 긍정} + text{거짓 긍정}}
$$

  1. 소환: 일반적으로 정확도와 함께 계산되어 분류기에 의해 얼마나 많은 진양성이 식별되었는지 이해합니다. 재현율은 참 양성을 양성으로 예측되어야 하는 항목으로 나누어 계산합니다.

$$
회상 = frac{text{참 긍정}}{text{참 긍정} + text{거짓 부정}}
$$

  1. F1 점수: 균형 또는 고조파 평균 정확도와 재현율. 가장 낮은 값은 0이고 가장 높은 값은 1입니다. f1-score 1과 같으면 모든 클래스가 올바르게 예측되었음을 의미합니다. 이는 실제 데이터로 얻기가 매우 어려운 점수입니다(예외는 거의 항상 존재함).

$$
텍스트{f1-점수} = 2* frac{텍스트{정밀도} * 텍스트{리콜}}{텍스트{정밀도} + 텍스트{리콜}}
$$

  1. 혼란 매트릭스: 우리가 얼마나 많은 샘플을 옳고 그른지 알아야 할 때 각 수업. 정확하고 정확하게 예측된 값을 호출합니다. 진정한 긍정, 양성으로 예측되었지만 양성이 아닌 것을 호출합니다. 가양 성. 의 동일한 명칭 진정한 부정거짓 부정 음수 값에 사용됩니다.

  2. 정확성: 분류기가 얼마나 많은 예측이 맞았는지 설명합니다. 가장 낮은 정확도 값은 0이고 가장 높은 값은 1입니다. 이 값에 일반적으로 100을 곱하여 백분율을 얻습니다.

$$
정확도 = frac{text{정확한 예측 수}}{text{총 예측 수}}
$$

참고 : 기계 학습을 적용하려는 실제 데이터에서 100% 정확도를 얻는 것은 사실상 불가능합니다. 100% 정확도 분류기 또는 100%에 가까운 결과가 표시되면 의심하고 평가를 수행하십시오. 이러한 문제의 일반적인 원인은 데이터 유출(교육 테스트의 일부가 직접 또는 간접적으로 테스트 세트로 유출)입니다. 주로 데이터에 따라 다르기 때문에 "좋은 정확도"에 대한 합의가 없습니다. 때로는 70% 정확도가 높을 수도 있습니다! 때로는 정확도가 매우 낮을 수 있습니다. 일반적으로, 70% 이상이면 많은 모델에 충분하지만 이는 도메인 연구원이 결정해야 합니다.

다음 스크립트를 실행하여 필요한 라이브러리를 가져오고 결과를 볼 수 있습니다.

from sklearn.metrics import classification_report, confusion_matrix

cm = confusion_matrix(y_test, y_pred)
sns.heatmap(cm, annot=True, fmt='d').set_title('Maternal risks confusion matrix (0 = low risk, 1 = medium risk, 2 = high risk)')

print(classification_report(y_test,y_pred))

출력은 다음과 같습니다.

                precision    recall  f1-score   support

           0       0.53      0.89      0.66        80
           1       0.57      0.17      0.26        76
           2       0.74      0.72      0.73        47

    accuracy                           0.58       203
   macro avg       0.61      0.59      0.55       203
weighted avg       0.59      0.58      0.53       203

Python 및 Scikit-Learn PlatoBlockchain 데이터 인텔리전스를 사용한 랜덤 포레스트 알고리즘에 대한 결정적인 안내서. 수직 검색. 일체 포함.

분류 보고서에서 재현율이 높고(클래스 0.89의 경우 0), 정밀도와 재현율이 클래스 2(0.74, 0.72)에서 높으며 클래스 1의 경우 특히 재현율이 0.17이고 정밀도가 0.57로 낮습니다. . 세 클래스 모두에 대한 재현율과 정밀도 사이의 관계는 개별적으로 다음과 같이 캡처됩니다. F1 점수는 재현율과 정밀도 사이의 조화 평균입니다. 모델은 다음을 수행합니다. 괜찮아 0등급은 1등급, 2등급은 괜찮습니다.

모델이 식별할 때 매우 어려움을 겪고 있습니다. 중간 위험 사례.

트리가 3개뿐인 랜덤 포레스트 분류기로 얻은 정확도는 다음과 같습니다. 0.58 (58%) – 이것은 결과의 절반 이상을 올바르게 얻고 있음을 의미합니다. 이는 정확도가 낮으며 더 많은 트리를 추가하여 개선할 수 있습니다.

혼동 행렬을 보면 대부분의 실수가 중간 위험의 52개 기록을 낮은 위험으로 분류할 때 발생하며, 클래스 1의 낮은 회상률에 대한 추가 통찰력을 제공한다는 것을 알 수 있습니다. 위험 환자.

더 많은 인사이트를 생성하기 위해 확인할 수 있는 또 다른 사항은 예측 시 분류자가 어떤 기능을 가장 많이 고려하는지입니다. 위해 취해야 할 중요한 단계입니다. 설명 가능한 기계 학습 시스템, 모델의 편향을 식별하고 완화하는 데 도움이 됩니다.

이를 확인하기 위해 feature_importances_ 분류기의 속성입니다. 이렇게 하면 백분율 목록이 표시되므로 다음 항목에도 액세스할 수 있습니다. feature_names_in_ 속성을 사용하여 각 기능의 이름을 가져오고, 데이터 프레임에 구성하고, 높은 항목에서 낮은 항목으로 정렬하고, 결과를 플로팅합니다.


features_df = pd.DataFrame({'features': rfc.feature_names_in_, 'importances': rfc.feature_importances_ })


features_df_sorted = features_df.sort_values(by='importances', ascending=False)


g = sns.barplot(data=features_df_sorted, x='importances', y ='features', palette="rocket")
sns.despine(bottom = True, left = True)
g.set_title('Feature importances')
g.set(xlabel=None)
g.set(ylabel=None)
g.set(xticks=[])
for value in g.containers:
    g.bar_label(value, padding=2)

Python 및 Scikit-Learn PlatoBlockchain 데이터 인텔리전스를 사용한 랜덤 포레스트 알고리즘에 대한 결정적인 안내서. 수직 검색. 일체 포함.

분류자가 주로 고려하는 방법에 주목하십시오. 혈당, 그런 다음 약간의 확장기 혈압, 체온 및 결정을 내리기 위한 약간의 나이, 이것은 또한 클래스 1의 낮은 회상과 관련이 있을 수 있습니다. 중간 위험 데이터는 그렇지 않은 기능과 관련이 있을 수 있습니다. 모델에 의해 많은 고려. 이를 조사하기 위해 기능 중요도를 더 많이 가지고 놀고, 모델의 변경 사항이 사용 중인 기능에 영향을 미치는지, 일부 기능과 예측 클래스 사이에 중요한 관계가 있는지 확인할 수 있습니다.

마침내 결과에 어떤 영향을 미치는지 확인하기 위해 더 많은 트리가 있는 새 모델을 생성할 때입니다. 생성하자 rfc_ 900 그루의 나무, 8 레벨 및 동일한 씨앗이 있는 숲. 결과가 개선될까요?

rfc_ = RandomForestClassifier(n_estimators=900, 
                             max_depth=7,
                             random_state=SEED)
rfc_.fit(X_train, y_train)
y_pred = rfc_.predict(X_test)

메트릭 계산 및 표시:

cm_ = confusion_matrix(y_test, y_pred)
sns.heatmap(cm_, annot=True, fmt='d').set_title('Maternal risks confusion matrix (0 = low risk, 1 = medium risk, 2 = high risk) for 900 trees with 8 levels')

print(classification_report(y_test,y_pred))

이 결과는 다음과 같습니다.

                precision    recall  f1-score   support

           0       0.68      0.86      0.76        80
           1       0.75      0.58      0.65        76
           2       0.90      0.81      0.85        47

    accuracy                           0.74       203
   macro avg       0.78      0.75      0.75       203
weighted avg       0.76      0.74      0.74       203

Python 및 Scikit-Learn PlatoBlockchain 데이터 인텔리전스를 사용한 랜덤 포레스트 알고리즘에 대한 결정적인 안내서. 수직 검색. 일체 포함.

이것은 더 많은 나무와 더 많은 특화된 나무(높은 수준)를 추가하여 메트릭을 개선한 방법을 보여줍니다. 클래스 1에 대한 재현율은 여전히 ​​낮지만 이제 정확도는 74%입니다. 고위험 사례를 분류할 때 F1 점수는 0.85입니다. 즉, 이전 모델의 0.73에 비해 이제 고위험 사례를 더 쉽게 식별할 수 있습니다!

일상적인 프로젝트에서는 예를 들어 정확도라고도 하는 정밀도와 유사한 메트릭을 사용하여 고위험 사례를 식별하는 것이 더 중요할 수 있습니다. 감광도 통계에서. 일부 모델 매개변수를 조정하고 결과를 관찰하십시오.

지금까지 데이터 분류에 Random Forest를 사용하는 방법에 대해 전반적으로 이해했습니다. 다음 섹션에서는 동일한 데이터 세트를 다른 방식으로 사용하여 동일한 모델이 회귀를 통해 값을 예측하는 방법을 확인할 수 있습니다.

회귀에 랜덤 포레스트 사용

이 섹션에서는 Scikit-Learn을 사용하여 회귀 문제를 해결하기 위해 Random Forest 알고리즘을 사용하는 방법을 연구합니다. 이 알고리즘을 구현하기 위해 따르는 단계는 분류를 위해 수행되는 단계와 거의 동일하며, 모델 유형 및 예측 데이터 유형(이제 연속 값이 됨) 외에 데이터 준비에는 한 가지 차이점만 있습니다.

회귀가 수행되기 때문에 수치 – 데이터 세트에서 숫자 값을 선택해 보겠습니다. 분류에서 혈당이 중요하다는 것을 알았으므로 다른 기능을 기반으로 예측할 수 있어야 합니다(일부 기능과 관련이 있으면 해당 기능도 관련되기 때문).

분류를 위해 수행한 작업에 따라 먼저 라이브러리와 동일한 데이터 세트를 가져오겠습니다. 분류 모델에 대해 이미 이 작업을 수행한 경우 이 부분을 건너뛰고 교육용 데이터 준비로 바로 이동할 수 있습니다.

라이브러리 및 데이터 가져오기
import pandas as pd
import numpy as np
import maplotlib.pyplot as plt
import seaborn as sns

dataset = pd.read_csv("../../datasets/random-forest/maternal_health_risk.csv")
회귀를 위한 데이터 전처리

이것은 회귀 작업이므로 클래스를 예측하는 대신 데이터 세트의 숫자 열 중 하나를 예측할 수 있습니다. 이 예에서 BS 열이 예측됩니다. 이는 다음을 의미합니다. y 데이터에는 혈당 데이터X 데이터에는 혈당 이외의 모든 기능이 포함됩니다. 를 분리한 후 Xy 데이터를 사용하여 학습 세트와 테스트 세트를 분할할 수 있습니다.

from sklearn.model_selection import train_test_split

SEED = 42

y = dataset['BS']
X = dataset.drop(['BS'], axis=1) 

X_train, X_test, y_train, y_test = train_test_split(X, y, 
                                                    test_size=0.2, 
                                                    random_state=SEED)
RandomForestRegressor 훈련

이제 데이터 세트의 크기를 조정했으므로 알고리즘을 훈련하여 이 회귀 문제를 해결하고 약간 변경해야 합니다. 숲에 20개의 나무와 각각 4개 수준의 나무가 있는 모델을 만듭니다. 이를 위해 다음 코드를 실행할 수 있습니다.

from sklearn.ensemble import RandomForestRegressor

rfr = RandomForestRegressor(n_estimators=20, 
                            max_depth=3, 
                            random_state=SEED)

rfr.fit(X_train, y_train)
y_pred = rfr.predict(X_test)

의 모든 매개변수에 대한 세부 정보를 찾을 수 있습니다. RandomForestRegressor 공식 문서에서.

20개의 트리를 플로팅하고 살펴보는 데 약간의 시간과 노력이 필요하므로 분류 트리와 어떻게 다른지 살펴보기 위해 첫 번째 트리만 플로팅할 수 있습니다.

from sklearn import tree

features = X.columns

first_tree = rfr.estimators_[0]

plt.figure(figsize=(15,6))
tree.plot_tree(first_tree,
               feature_names=features,
               fontsize=8, 
               filled=True, 
               rounded=True);

Python 및 Scikit-Learn PlatoBlockchain 데이터 인텔리전스를 사용한 랜덤 포레스트 알고리즘에 대한 결정적인 안내서. 수직 검색. 일체 포함.

회귀 트리에는 이미 각 노드에 해당하는 데이터에 할당된 값이 있습니다. 그것들은 20개의 나무를 합칠 때 평균화될 값입니다. 분류에 대해 수행한 작업에 따라 기능 중요도를 플롯하여 값을 계산할 때 회귀 모델이 더 많이 고려하는 변수를 확인할 수도 있습니다.

기계 학습 문제를 풀 때 마지막이자 마지막 단계를 진행하고 알고리즘의 성능을 평가할 때입니다!

RandomForestRegressor 평가

회귀 문제의 경우 알고리즘을 평가하는 데 사용되는 메트릭은 평균 절대 오차(MAE), 평균 제곱 오차(MSE) 및 평균 제곱근 오차(RMSE)입니다.

  1. 평균 절대 오차 (MAE): 실제값에서 예측값을 빼서 오차를 구할 때 그 오차의 절대값을 합산하여 평균값을 구한다. 이 메트릭은 모델의 각 예측에 대한 전체 오류에 대한 개념을 제공하며 작을수록(0에 가까울수록) 더 좋습니다.

$$
매 = (frac{1}{n})sum_{i=1}^{n}왼쪽 | 실제 – 예측된 권리 |
$$

참고 : 당신은 또한 yŷ 방정식의 표기법. 그만큼 y 실제 값을 참조하고 ŷ 예측 값에.

  1. 평균 제곱 오차(MSE): MAE 메트릭과 유사하지만 오류의 절대값을 제곱합니다. 또한 MAE와 마찬가지로 작거나 0에 가까울수록 좋습니다. MSE 값은 큰 오차를 더욱 크게 만들기 위해 제곱됩니다. 주의를 기울여야 할 한 가지는 일반적으로 값의 크기와 데이터의 동일한 척도에 있지 않기 때문에 해석하기 어려운 메트릭이라는 것입니다.

$$
mse = sum_{i=1}^{D}(실제 – 예측)^2
$$

  1. RMSE(평균 제곱근 오차): MSE에서 제기된 해석 문제를 최종 값의 제곱근을 가져와 동일한 데이터 단위로 다시 축소하여 해결하려고 시도합니다. 오류가 있는 데이터의 실제 값을 표시하거나 표시해야 할 때 해석하기 쉽고 좋습니다. 데이터가 얼마나 다를 수 있는지 보여주므로 RMSE가 4.35인 경우 실제 값에 4.35를 추가했거나 실제 값에 도달하는 데 4.35가 필요했기 때문에 모델에서 오류가 발생할 수 있습니다. 0에 가까울수록 좋습니다.

$$
rmse = sqrt{ sum_{i=1}^{D}(실제 – 예측)^2}
$$

이 세 가지 측정항목 중 하나를 사용하여 비교 모델(하나를 선택해야 하는 경우). 또한 동일한 회귀 모델을 다른 인수 값 또는 다른 데이터와 비교한 다음 평가 메트릭을 고려할 수 있습니다. 이것은 다음과 같이 알려져 있습니다. 하이퍼 파라미터 튜닝 – 학습 알고리즘에 영향을 미치는 하이퍼파라미터를 조정하고 결과를 관찰합니다.

모델 중에서 선택할 때 오류가 가장 작은 모델이 일반적으로 더 나은 성능을 보입니다. 모델을 모니터링할 때 메트릭이 더 나빠지면 모델의 이전 버전이 더 나았거나 모델이 수행하던 것보다 더 나쁜 성능을 나타내도록 데이터에 상당한 변경이 있었습니다.

다음 코드를 사용하여 이러한 값을 찾을 수 있습니다.

from sklearn.metrics import mean_absolute_error, mean_squared_error

print('Mean Absolute Error:', mean_absolute_error(y_test, y_pred))
print('Mean Squared Error:', mean_squared_error(y_test, y_pred))
print('Root Mean Squared Error:', np.sqrt(mean_squared_error(y_test, y_pred)))

출력은 다음과 같아야합니다.

Mean Absolute Error: 1.127893702896059
Mean Squared Error: 3.0802988503933326
Root Mean Squared Error: 1.755078018320933

트리가 20개인 경우 평균 제곱근 평균 오차는 1.75로 낮지만 그렇더라도 트리 수를 늘리고 다른 매개변수를 실험하면 이 오차가 더 작아질 수 있습니다.

랜덤 포레스트 사용의 장점

모든 알고리즘과 마찬가지로 이를 사용하는 데에는 장점과 단점이 있습니다. 다음 두 섹션에서는 분류 및 회귀에 랜덤 포레스트를 사용하는 장단점을 살펴보겠습니다.

  1. 랜덤 포레스트 알고리즘은 편향되지 않습니다. 여러 트리가 있고 각 트리는 임의의 데이터 하위 집합에 대해 훈련되기 때문입니다. 기본적으로 랜덤 포레스트 알고리즘은 "군중"의 힘에 의존합니다. 따라서 알고리즘의 전반적인 바이어스 정도가 감소합니다.
  2. 이 알고리즘은 매우 안정적입니다. 데이터셋에 새로운 데이터 포인트가 도입되더라도 새로운 데이터가 하나의 나무에 영향을 미칠 수 있기 때문에 전체 알고리즘에는 큰 영향을 미치지 않지만 모든 나무에 영향을 주기는 매우 어렵습니다.
  3. 랜덤 포레스트 알고리즘은 범주형 및 숫자형 기능이 모두 있을 때 잘 작동합니다.
  4. 랜덤 포레스트 알고리즘은 데이터에 누락된 값이 있거나 크기가 조정되지 않은 경우에도 잘 작동합니다.

랜덤 포레스트 사용의 단점

  1. 랜덤 포레스트의 주요 단점은 복잡성에 있습니다. 대규모 앙상블을 훈련할 때 함께 결합된 많은 수의 결정 트리로 인해 훨씬 ​​더 많은 계산 리소스가 필요합니다. 그러나 최신 하드웨어를 사용하면 대규모 랜덤 포레스트를 교육하는 데 많은 시간이 걸리지 않습니다.

더 나아가기 – 핸드헬드 엔드투엔드 프로젝트

당신의 호기심 많은 성격이 당신을 더 멀리 가고 싶게 만드나요? 다음을 확인하는 것이 좋습니다. 가이드 프로젝트: “실습 주택 가격 예측 – Python의 기계 학습”.

Python 및 Scikit-Learn PlatoBlockchain 데이터 인텔리전스를 사용한 랜덤 포레스트 알고리즘에 대한 결정적인 안내서. 수직 검색. 일체 포함.

이 가이드 프로젝트에서는 강력한 기존 기계 학습 모델과 딥 러닝 모델을 구축하고 Ensemble Learning을 활용하고 메타 학습자를 교육하여 Scikit-Learn 및 Keras 모델에서 주택 가격을 예측하는 방법을 배우게 됩니다.

Tensorflow를 기반으로 구축된 딥 러닝 API인 Keras를 사용하여 아키텍처를 실험하고 스택 모델의 앙상블을 구축하고 메타 학습자 신경망(레벨 1 모델)을 사용하여 주택 가격을 파악합니다.

딥 러닝은 놀랍습니다. 그러나 딥 러닝에 의존하기 전에 얕은 학습 알고리즘. 기본 성능은 다음을 기반으로 합니다. 랜덤 포레스트 회귀 연산. 또한 – 다음과 같은 기술을 통해 Scikit-Learn을 통해 모델의 앙상블을 만드는 방법을 살펴보겠습니다. 포장투표.

이것은 종단 간 프로젝트이며 모든 기계 학습 프로젝트와 마찬가지로 다음으로 시작합니다. 탐색 적 데이터 분석, 다음 데이터 전처리 그리고 마지막으로 건물 얕은딥 러닝 모델 이전에 탐색하고 정리한 데이터에 맞도록 합니다.

타임 스탬프 :

더보기 스택카부스