앙상블 학습(Ensemble Learning)
그동안 우리는 여러 기계학습 모델들을 살펴보았다. 이렇게 개별적으로 동작하는 모델들을 모아 종합적으로 의사결정을 한다면 어떨까? 앙상블은 프랑스어로 전체적인 어울림이나 통일을 의미하며 음악에서 2인 이상의 가창이나 합주를 의미하기도 한다. 예측력을 높이기 위해 여러 가지 학습알고리즘이 어울려 성능을 높이는 방식을 기계학습 분야에서 앙상블(Ensemble) 학습이라 한다.
앙상블 종류
앙상블 학습 방식에는 크게 Voting, Bagging, Boosting의 3가지로 나눌 수 있다. Voting(투표) 방식은 여러 모델로부터 나온 후보 결과들 중 다수가 나온 결과를 채택하는 방식이다. Bagging은 같은 모델을 사용하지만 훈련세트에서 중복을 허용한 여러 부분 집합을 샘플링하여 학습하는 방식이며, 여기서 모델이 의사결정나무를 이용한 것을 랜덤포레스트라고 한다. 마지막으로 Boosting은 약한 개별의 모델들을 연결하여 이전 모델이 생성한 가중치 또는 오차를 기준으로 성능을 보완해 나가면서 학습하는 방법이다.
앙상블의 장단점
일반적으로 앙상블 학습 방법을 사용하면, 개별 모델에서 나온 결과를 종합하는 과정에서 종합 결괏값인 분산이 줄어들게 된다. 즉, 특정 훈련 데이터 세트에서만 정확도를 보장하는 과대적합(Overfitting) 현상을 어느정도 줄여 줄 수 있다. 다만 투표방식인 Voting의 경우 앙상블에 포함된 모델 사이의 독립성이 전제되는 경우 개별 분류기보다 정확한 예측이 가능하지만 그렇지 못한 경우 성능이 떨어질 수 있다.
배깅은 Bootstrap Aggregating의 줄임말로 중복을 허용한 무작위 표본 추출에 의존하는 어떤 시험이나 계측으로 훈련세트를 구성하고, 페이스팅은 중복을 허용하지 않고 데이터 세트를 구성하는 것을 말한다.
예제
단일 모델과 앙상블 기법(Voting, Bagging, Boosting)을 이용한 유방암 분류 예측 비교 분석
DATASET
유방암 조직에서 미세 바늘을 이용하여 세포를 획득한 후 이미지를 디지털화한 정보이다. 특성은 이미지 속 수치 정보 10개(둘레, 반지름, 질감 등)를 각각 평균, 표준편차, 가장 큰 3개 값의 평균으로 하여 총 30개이며 결과는 악성(Malignant), 양성(benign)이다.
1) 데이터 확인하기
cancer = load_breast_cancer()
df = pd.DataFrame(cancer.data, columns=cancer.feature_names)
df.head()
2) 탐색적 데이터 분석 - 결측치 확인 및 공분산 매트릭스를 통한 변수 제거
# Generate and Visualize the correlation matrix
corr = df.corr().round(2)
# Mask for the upper triangle
mask = np.zeros_like(corr, dtype=np.bool)
mask[np.triu_indicies_from(mask)] = True
# Set figure size
f, ax = plt.subplots(figsize = (20, 20))
# Define custom colormap
cmap sns.divierging_palette(220, 10, as_cmap=True)
# Draw the heatmap
sns.heatmap(corr, mask=mask, cmap=cmap, vmin=-1, vmax=1, center=0,
square=True, linewidths=.5, cbar_kws = {"shrink":.5}, annot=True)
가장 큰 3개 값의 평균, 둘레 넓이, Concavity, Concave point 데이터 간의 강한 상관관계가 발견되어 특성값 제거(30개 -> 12개)
cols = ['worst radius', 'worst texture', 'worst perimeter', 'worst area',
'worst smoothness', 'worst compactness', 'worst concavity',
'worst concave points', 'worst symmetry', 'worst fractal dimenstion']
df = df.drop(cols, axis=1)
cols = ['mean perimeter', 'perimeter error', 'area error']
df = df.drop(cols, axis=1)
함께 보면 좋은 글
[빅데이터분석기사] 군집분석(Clustering Analysis)
[빅데이터분석기사] 인공신경망(Artificial Neural Network)
[빅데이터분석기사] 심층신경망(Deep Neural Network)
[빅데이터분석기사] 합성곱신경망(Convolutional Neural Network)
'빅데이터분석기사 > 개념' 카테고리의 다른 글
[빅데이터분석기사] 군집분석(Clustering Analysis) (0) | 2022.06.08 |
---|---|
[빅데이터분석기사] 서포트벡터머신(SVM) (0) | 2022.06.05 |
[빅데이터분석기사] 랜덤포레스트(Random Forest) (0) | 2022.06.02 |
[빅데이터분석기사] 의사결정나무(Decision Tree) (0) | 2022.05.30 |
[빅데이터분석기사] 최근접 이웃(K-Nearest Neighbors) (0) | 2022.05.29 |