9 Wed

현업 실무자에게 배우는 Kaggle 머신러닝 입문

XGBoost 소개

  • eTreme Gradient Boosting

  • Gradient Boosting 알고리즘에 추가적인 테크닉들을 결합한 알고리즘

    • 기본 원리는 Gradient Boosting 기반

  • 캐글에 상위권 사람들이 많이 사용함

  • 병렬적이고 효율적이고 최적화되어있음

앙상블 러닝

  • 앙상블 러닝은 크게 Bagging 방식과 Boosting 방식으로 나눌 수 있다.

  • Bagging

    • 매번 랜덤하게 샘플을 뽑아서 독립적으로 학습시킨 분류기들의 결과를 종합하는 것

    • 대표적인 방식으로는 랜덤 포레스트가 있다

  • Boosting

    • 매번 샘플을 뽑아서 학습시키되, 독립적이지 않고 순차적으로 학습 시킨다

    • 이전 단계에서 오차가 큰 샘플들이 다시 뽑히도록 한다

      • 오차가 큰 샘플들에 가중치를 부여해서 뽑힉 확률이 높도록 한다

    • 대표적인 방식으로는 AdaBoost, XGBoost, GradientBoost 등이 있다.

GBM

  • Gradient Boosting Machine

  • 학습과정에서 파라미터를 최적화하는데 GD 알고리즘을 사용한다.

XGBoost의 장점과 단점

장점

  • 대부분의 상황에서 안정적이고 좋은 성능

  • Feature Enginerring을 많이 적용하지 않아도 안정적인 성능

단점

  • 하이퍼 파라미터가 방대해서 튜닝하는 것이 상대적으로 어렵다

Stroke Preidction 데이터셋 소개

  • 나이, 성벼르 고혈압 유무 등을 토대로 뇌졸중을 가진 사람인지 아닌지 예측해보는 데이터셋

  • Feature : 12 Dimentsion

    • id

    • gender

    • age

    • hypertension : 고혈압 유무

    • hear_disease : 심장병 유무

    • ever_married

    • work_type

    • Residence_type

    • avg_glucose_level

    • bim : body mass index

    • smoking status

    • stroke

  • Target Value : Binary Classification

    • stroke : 뇌졸증

    • not stroke

  • 데이터 개수 : 5,110

XGBoost를 이용해서 뇌졸중(Stroke) 발생유무 예측해보기 - Stroke Prediction 데이터셋

  • Input data : 11 Dimension

  • Target : stroke

    • Yes : 1

    • No : 0

  • Estimator

    • DecisionTreeClassifier

    • RandomforestClassifier

    • XGBoostClassifier

  • 추가적인 적용기법

    • Data Cleansing : 결측치 처리

불필요한 Feature 제거

df = df.drop('id', axis=1)

상관관계

corr = df.corr()
plt.figure(figsize=(10, 10));
sns.heatmap(corr,
            vmax=0.8,
            linewidths=0.01,
            square=True,
            annot=True,
            cmap='YlGnBu');
plt.title('Feature Correlation');
  • 그나마 나이가 stroke와 제일 연관이 있다

String(object) 레이블 encoding하기

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5110 entries, 0 to 5109
Data columns (total 11 columns):
 #   Column             Non-Null Count  Dtype  
---  ------             --------------  -----  
 0   gender             5110 non-null   object 
 1   age                5110 non-null   float64
 2   hypertension       5110 non-null   int64  
 3   heart_disease      5110 non-null   int64  
 4   ever_married       5110 non-null   object 
 5   work_type          5110 non-null   object 
 6   Residence_type     5110 non-null   object 
 7   avg_glucose_level  5110 non-null   float64
 8   bmi                5110 non-null   float64
 9   smoking_status     5110 non-null   object 
 10  stroke             5110 non-null   int64  
dtypes: float64(3), int64(3), object(5)
memory usage: 439.3+ KB
from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()

df['gender'] = le.fit_transform(df['gender'])
df['ever_married'] = le.fit_transform(df['ever_married'])
df['work_type'] = le.fit_transform(df['work_type'])
df['Residence_type'] = le.fit_transform(df['Residence_type'])
df['smoking_status'] = le.fit_transform(df['smoking_status'])

Last updated

Was this helpful?