이번에는 기계학습 공부를 위해 BBB (Blood Brain Basrrier) 데이터 세트 Random Forest, adaboost, xgboost, light GBM 방법으로 앙상블 학습 분석을 해보았다.
지난 회귀분석은 10년전에도 실험데이터 분석을 위해 쓰기도 했었고, 자동차 연비에 어떠한 요소가 영향은 주는지 비교 분석했던 지난 브런치 글에도 사용했었지만, 이번 앙상블 분석은 사용한바가 없는 분석이다.
바이오 전공자로 앙상블 하면 Protein, RNA, DNA 등 염기 서열을 분석하기 위해 사용한 것이었다.
앙상블 Genome 브라우저
기계학습에서 앙상블은 어떤 데이터의 값을 예측한다고 할 때, 하나의 모델이 아닌 여러 개의 모델을 조화롭게 학습시켜 그 모델들의 예측 결과들을 이용하여 더 정확한 예측값을 구할때 사용한다. 앙상블 학습은 여러 개의 결정 트리(Decision Tree)를 결합하여 하나의 결정 트리보다 더 좋은 성능을 내는 머신러닝 기법이다.
앙상블 학습의 핵심은 여러 개의 약 분류기 (Weak Classifier)를 결합하여 강 분류기(Strong Classifier)를 만드는 것이다. 그리하여 모델의 정확성이 향상된다. 앙상블 학습법에는 두 가지가 있는데 1) 배깅(Bagging)과 부스팅(Boosting)이다.
기계학습에서 앙상블 분류
글을 적어 놓고도 어렵다. 그래서 일단 무작정 예제를 보면서 중간중간 구글링을 통해 수많은 정보와 예제코드들을 통해서 코드를 작성해보았다. 중간중간 왜 저런 결과가 나오는건지 이해하면서 갔지만, 어느 순간부터는 이게 의미가 없어졌다. 그냥 손이 가는대로, 눈이 가는대로만 갔다.
누군가 얼마전에 내가 기타연주 하는 영상을 보고 이런 말을 했었다.
'처음엔 운지를 하나하나 보면서 따라가려 했지만, 어느 지점 이후에는 그냥 마음을 놔버리고 연주를 감상했다'라고..
그 사람은 감상을 했다고 하지만, 나는 어느 지점에서 관망을 해버렸다.
여튼 작성한 코드는 아래에 남겨 두고, 나중에 다시금 보게된다면 더 많은 이해를 할 수 있으리라!!!
앙상블 학습을 위한 분석 소스 코드
1. Random Forest
## Setup
# Importing Required Libraries
import pandas as pd
from sklearn.ensemble import RandomForestClassifier # Import Random Forest Classifier
from sklearn.model_selection import train_test_split # Import train_test_split function
from sklearn import metrics #Import scikit-learn metrics module for accuracy calculation
# data loading
X_train = pd.read_csv("X_train.csv")
y_train = pd.read_csv("y_train.csv")
X_external = pd.read_csv("X_external.csv")
y_external = pd.read_csv("y_external.csv")
X_train.head()
# Feature Selection
X = X_train # Features
y = y_train['BBclass'] # Target variable
# Splitting Data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1) # 70% training and 30% test