티스토리 뷰
2024.06.28 - [머신러닝] - [7] 앙상블 모델에서 언급된 Bagging의 특징을 이용한 RandomForest 모델은 여러 개의 Tree 분류기를 생성하여 예측값을 도출하는 방법입니다.
[7] 앙상블 모델
SVM(Support Vector Machine), KNN 알고리즘과 같이 단일 분류 알고리즘을 조합해 하나의 예측 모형으로 만드는 지도학습 방법론을 앙상블 모델이라고 합니다. 이번 시간에는 앙상블 모델의 종류인 Bagging
up-one-coding.tistory.com
Bagging 기반으로 데이터셋을 복원 추출하고 여러 개의 분류기를 구현해 학습시키는 RandomForest 모델은 '집단 지성의 힘'으로 비유해 여러 개의 Tree 모델이 예측한 값들 가장 많은 값을 최종 예측값으로 사용하거나 평균값을 최종 예측값으로 사용합니다.
RandomForest의 가장 중요한 원리는 복원 추출된 Dataset의 개수만큼 개별 분류기를 생성하는 것입니다. 이 때, 개별 분류기 간의 상관성이 낮을수록 예측력은 향상된다는 것이 RandomForest의 가장 큰 특징입니다. 개별 분류기에서는 데이터셋에 존재하는 변수들 중 일정 개수를 랜덤 하게 골라 데이터셋을 분류시키는 기준으로 설정하는데, Randomforest는 매번 새로운 변수가 데이터셋을 분류시키는 기준으로 랜덤 하게 골라지기 때문에 상관성이 낮아지는 것입니다.
하지만 RandomForest의 Bagging 기법에서는 복원 추출되지 않은 데이터셋이 존재하여 결과가 편향되어 나타날 수도 있습니다. 이를 방지하기 위해 RandomForest 기반 모델에는 oob_score라는 파라미터를 사용하여 학습 데이터로 나온 예측값과 test한 결괏값의 차이를 기반으로 한 정확도를 확인할 수 있습니다. 위 언급된 복원 추출되지 않은 데이터셋을 Test dataset의 역할을 부여하여 성능을 측정하기 위해서는 oob_score 파라미터의 값을 True로 설정합니다.
Customer Cleaned.csv을 이용한 RandomForestClassifier 예시
https://raw.githubusercontent.com/rickiepark/handson-gb/main/Chapter02/census_cleaned.csv에서 예시를 위한 데이터셋을 다운받을 수 있습니다. 이번 예시에서는 oob_score가 n_estimators에 값에 따라 어떻게 변하는지 시각화를 통해 알아보겠습니다. n_estimators 파라미터는 생성할 tree의 개수를 설정합니다. 위 데이터는 종속변수(' income_ >50K')를 분류하는 것을 목적으로 합니다.
#dataset 확인
df_census = pd.read_csv('census_cleaned.csv')
df_census.head()
종속변수를 income_>50K로 설정하고 oob_score를 저장하기 위한 리스트를 선언합니다.
X = df_census.iloc[:,:-1] #독립변수
y = df_census.iloc[:,-1] #종속변수
oob_score = [] #oob score : 학습 데이터로 나온 예측값과 test한 결과값의 차이를 기반으로 한 정확도
RandomForestClassifier을 활용하고, 초기 n_estimators값을 50으로 설정하여 10번씩 값을 50씩 늘려 oob_score값이 바뀌는 추세를 확인합니다.
model = RandomForestClassifier(oob_score=True, n_estimators=50, random_state=42, n_jobs=-1)
model.fit(X, y)
oob_score.append(model.oob_score_)
est = 50 #초기 tree 개수 설정
estimators = [est]
for i in range(9):
est += 50 #10번씩 tree 개수를 50개씩 늘리기
estimators.append(est)
model.set_params(n_estimators = est) #늘린 estimator을 파라미터로 설정
model.fit(X, y)
oob_score.append(model.oob_score_) #oob_score 산출
#n_estimators에 따른 oob_score 추세 확인
model = RandomForestClassifier(oob_score=True, n_estimators=50, random_state=42, n_jobs=-1)
model.fit(X, y)
oob_score.append(model.oob_score_)
est = 50 #초기 tree 개수 설정
estimators = [est]
for i in range(9):
est += 50 #10번씩 tree 개수를 50개씩 늘리기
estimators.append(est)
model.set_params(n_estimators = est) #늘린 estimator을 파라미터로 설정
model.fit(X, y)
oob_score.append(model.oob_score_) #oob_score 산출
아래 시각화한 결과에 따라, 생성할 tree의 개수(n_estimators 값)를 약 250으로 설정하면 oob_score가 가장 높은 것을 확인할 수 있습니다. 이처럼 oob_score를 기준으로 RandomForestClassifier 모델의 하이퍼파라미터를 튜닝하여 최적화를 시킬 수 있습니다.
'머신러닝' 카테고리의 다른 글
[13] Lightgbm (0) | 2025.03.04 |
---|---|
[12] Xgboost (0) | 2025.02.24 |
[10] 로지스틱 회귀 모델 (1) | 2025.02.11 |
[9] 정규화 모델 (Regularization) (0) | 2024.07.07 |
[8] 의사결정나무 (2) | 2024.06.30 |
- # 할인행사 #counter #딕셔너리 #프로그래머스
- #opencv #이미지 읽기 #이미지 제작 #관심영역 지정 #스레시홀딩
- #seq2seq #encoder #decoder #teacher forcing
- # 프로그래머스 # 카펫 # 완전탐색
- #tf idf
- pca #주성분분석 #특이값분해 #고유값분해 #공분산행렬 #차원의 저주
- #opencv #이미지 연산 #합성
- 로지스틱 회귀 #오즈비 #최대우도추정법 #머신러닝
- #docker #docker compose
- python #프로그래머스 #겹치는선분의길이
- #docker #image #build #dockerfile
- #polars #대용량 데이터셋 처리
- 잘라서 배열로 저장하기 #2차원으로 만들기
- #django #mvt 패턴
- #docker #container #docker command
- 머신러닝 #project #classification #dacon
- 자연어 처리 #정제 #정규표현식 #어간 추출 #표제어 추출
- #물고기 종류별 대어 찾기 #즐겨찾기가 가장 많은 식당 정보 출력하기 #mysql #programmers
- #attention #deeplearning
- #python #프로그래머스 #외계어사전 #itertools #순열과조합
- 프로젝트 #머신러닝 #regression #eda #preprocessing #modeling
- #프로그래머스 #안전지대 #시뮬레이션
- #with recursive #입양시각 구하기(2) #mysql
- 머신러닝 #xgboost #
- 머신러닝 #lightgbm #goss #ebf
- randomforest #bagging #머신러닝 #하이퍼파라미터 튜닝
- #자연어 처리 #정수 인코딩 #빈도 수 기반
- # 프로그래머스 #연속된 부분수열의 합 #이중 포인터 #누적합
- nlp #토큰화 #nltk #konply
- #웹 프로그래밍 #서버 #클라이언트 #http #was