728x90
반응형

분류 앙상블 모델

🍇 앙상블 모델

  • tree구조(결정트리)를 기반으로 만들어진 모델
  • 여러개의 트리 모델을 이용해서 훈련하는 모델을 앙상블 모델이라고 칭한다.

🍇 앙상블 모델 분류

  • 회귀와 분류에서 모두 사용한 모델들 이다
  • sklearn 패키지 모델은 모두 가능
  • xgb도 가능

🍇 배깅(Bagging)과 부스팅(Boosting) 방식

  • 앙상블 모델은 여러개의 트리를 사용하기 때문에 훈련 데이터를 여러 모델(여러 트리)에 적용하는 방식에 따라서 배깅과 부스팅 방식으로 구분한다.

🍇 배깅(Bagging)

  • 사용되는 여러개의 모델(여러 트리)들은 서로 독립적을 사용 된다.(연관성 없음)
  • 훈련데이터는 여러 모델에 랜덤하게 적용되며, 중복되는 데이터가 있을 수 도 있다.
  • 훈련데이터를 사용 후에는 반환하는 방식을 사용한다
    → 반환 후에 다시 랜덤하게 추출하여 여러 모델(여러 트리)에 적용한다
  • 대표적인 배깅 앙상블 모델은 랜덤포레스트 모델이 있다.
  • 배깅 앙상블 모델 : 랜덤 포레스트, 엑스트라트리
  • 예측 : 회귀에서는 평균값을 이용하며, 분류에서는 과반수(확률)에 따라 결정 된다.
  • 과적합을 해소하는 모델로 주로 사용된다.

🍇 부스팅(Boosting)

  • 사용되는 여러개의 모델(여러 트리)들은 서로 연관성을 가진다.
  • 이전 모델(이전 트리)의 오차를 보완하여 다음 모델(다음 트리)에서 이어서 훈련이 진행되는 방식
  • 훈련 데이터는 랜덤하게 추출되어 사용되지만, 이전 모델 훈련에서 오차가 크게 발생했던 훈련데이터에 가중치를 부여하여 사용하게 된다.
  • 대표적인 부스팅 앙상블 모델로 그레디언트 부스팅 모델이 있다.
  • 모델 : 그래디언트 부스팅, 히스트그레디언트 부스팅, 엑스지부스팅
  • 정확도를 높이는 모델로 주로 사용된다.

 🍇실제 모델 적용 순서

  • 분류시 최초에는 주로 랜덤포레스트 모델을 이용해서 수행한다.
     정확도가 높은 모델로 유명했다. 지금은 부스트 모델이 우수한 편이다.
  • 최종 모델 선정시에는 분류모델 전체 사용하여 선정한다.

Randomforest(랜덤포레스트)

 🍇 데이터 불러들이기

import pandas as pd
wine = pd.read_csv("./data/08_wine.csv")
wine


🍇 와인종류 분류하기

  • 와인종류 : 레드와인(0), 화이트와인(1)
  • 훈련에 사용할 데이터
    - 독립변수 : Alcohol(알콜), Sugar(설탕, 당도), pH(수소이온농도; 산성 또는 염기성)
    - 종속변수 : class(와인종류; 0또는 1, 0은 레드와인, 1은 화이트와인)

🍇 독립변수와 종속변수로 데이터 분리하기

'''독립변수'''
data = wine[["alcohol", "sugar", "pH"]].to_numpy()

'''종속변수'''
target = wine["class"].to_numpy()

data.shape, target.shape

 

🍇 훈련 테스트데이터로 분리하기(8:2)

'''
사용변수 : train_input, test_input, train_target, test_target
'''
from sklearn.model_selection import train_test_split
train_input, test_input, train_target, test_target = train_test_split(data, target, test_size=0.2, random_state=42)

print(f"train_input={train_input.shape} / train_target={train_target.shape}")
print(f"test_input={test_input.shape} / test_target={test_target.shape}")

 

🍇 데이터 스케일링(정규화 또는 표준화)

  • 서로 다른 변수(특성)의 값의 범위(단위)를 일정한 수준으로 맞추는 작업을 의미함
  • 수치형 변수(특성, 퓨터, 항목, 컬럼 같은 용어)에만 적용된다
  • 스케일링 방법 3가지 (아래 3가지는 구분만 될 뿐 의미는 모두 스케일링이다)
    1. 정규화 : StandardScaler → 분류 또는 회귀에서 사용가능하며, 주로 분류에서 사용됨
    2. 정규화 : RobustScaler → 분류 및 회귀 모두 사용가능
    3. 표준화 : MinMaxScaler → 분류 또는 회귀에서 사용가능 하며, 주로 회귀에서 사용됨(최대 및 최소 범위 내에서 처리되는 방식)

1. 정규화 : StandardScaler  

'''
훈련데이터 정규화 변수 : train_std_scaler
테스트데이터 정규화 변수 : test_std_scaler
'''

from sklearn.preprocessing import StandardScaler

''' 정규화 클래스 생성하기 '''
ss = StandardScaler()

''' 정규화 패턴 찾기 : 훈련데이터만 사용 '''
ss.fit(train_input)

''' 훈련 및 테스트 독립변수 변환하기 '''
train_std_scaler = ss.transform(train_input)
test_std_scaler = ss. transform(test_input)
train_std_scaler.shape, test_std_scaler.shape

 

2. 정규화 : RobustScaler 

''' 
훈련데이터 정규화 변수 : train_rbs_scaler
테스트데이터 정규화 변수 : test_rbs_scaler
'''
from sklearn.preprocessing import RobustScaler

''' 정규화 클래스 생성하기 '''
rbs = RobustScaler()

''' 정규화 패턴 찾기 : 훈련데이터만 사용 '''
rbs.fit(train_input)

''' 훈련 및 테스트 독립변수 변환하기 '''
train_rbs_scaler = rbs.transform(train_input)
test_rbs_scaler = rbs. transform(test_input)
train_rbs_scaler.shape, test_rbs_scaler.shape

 

3. 표준화 : MinMaxScaler  

'''
훈련데이터 표준화 변수 : train_mm_scaler
테스트데이터 표준화 변수 : test_mm_scaler
'''
from sklearn.preprocessing import MinMaxScaler

''' 표준화 클래스 생성하기 '''
mm = MinMaxScaler()

''' 표준화 패턴 찾기 : 훈련데이터만 사용 '''
mm.fit(train_input)

''' 훈련 및 테스트 독립변수 변환하기 '''
train_mm_scaler = mm.transform(train_input)
test_mm_scaler = mm. transform(test_input)
train_mm_scaler.shape, test_mm_scaler.shape

 

 🍇 훈련하기

''' 훈련모델 생성하기 '''
from sklearn.ensemble import RandomForestClassifier

''' 모델(클래스) 생성하기
 - cpu의 코어는 모두 사용, 랜덤값은 42번을 사용하여 생성하기
 - 모델 변수의 이름은 rf 사용
'''
rf = RandomForestClassifier(random_state=42, n_jobs=-1)

''' 모델 훈련 시키기 '''
rf.fit(train_std_scaler, train_target)

''' 훈련 및 검증(테스트) 정확도(score) 확인하기 '''
train_score = rf.score(train_std_scaler, train_target)
test_score = rf.score(test_std_scaler, test_target)
print(f"훈련 = {train_score} / 검증 = {test_score}")

 

728x90
반응형

+ Recent posts