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가지는 구분만 될 뿐 의미는 모두 스케일링이다)
- 정규화 : StandardScaler → 분류 또는 회귀에서 사용가능하며, 주로 분류에서 사용됨
- 정규화 : RobustScaler → 분류 및 회귀 모두 사용가능
- 표준화 : 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
반응형
'Digital Boot > 인공지능' 카테고리의 다른 글
[인공지능][ML] Machine Learning - 분류모델 선정하기 / GridSearchCV / 특성중요도 (0) | 2023.12.27 |
---|---|
[인공지능][ML] Machine Learning - 랜덤포레스트 (2) (1) | 2023.12.27 |
[인공지능][ML] Machine Learning - 선형회귀모델 / 다항회귀모델 / 다중회귀모델 (0) | 2023.12.21 |
[인공지능][ML] Machine Learning - KNN 회귀모델 / 평균절대오차(MAE) (0) | 2023.12.21 |
[인공지능][ML] Machine Learning - 훈련 및 테스트 데이터 분류하기 / 정규화 (3) | 2023.12.20 |