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?