이번 글에서는 Kaggle의 유명한 competition중 하나인 타이타닉 생존자 예측 문제에 대한 [파이썬 머신러닝 완벽가이드]의 코드를 리뷰한다(import문은 생략한다).
타이타닉 생존자 예측 문제의 데이터셋 설명은 Kaggle 홈페이지에서 확인할 수 있다. 여기서는 전체 코드를 리뷰하는 것이 아닌 중요 코드만 발췌하여 리뷰한다.
전처리
타이타닉 데이터셋의 변수 정보이다. label은 'Survived'이며, feature는 'Survived'를 제외한 나머지이다. 전처리가 필요한 부분은 다음과 같다.
- null값을 적절한 값으로 채우기
- 학습에 필요하지 않은 feature 제거하기
- object자료형을 가지는 변수 인코딩하여 int로 바꾸기
fillna()함수를 이용하면 null값을 원하는 값으로 메꿀 수 있다. 'Age'의 경우 평균값으로 채우고 'Cabin', 'Embarked'는 'N', 'Fare'는 0으로 채워 넣는 함수를 작성하였다.
※inplace 파라미터는 바꾼 값을 실제로 적용시키는 것에 대한 여부이다. 즉 df['Age']의 값을 fillna()문을 실행한 결과로 바꿀 것인지의 여부를 결정한다.
df['Age'].fillna(df['Age'].mean(), inplace= True)
df['Age'] = df['Age'].fillna(df['Age'].mean())
위의 두 코드는 의미상 동일하다.
승객 번호, 이름 ticket은 생존의 여부와 아무런 관련이 없다. 따라서 해당 feature들은 데이터프레임에서 제거한다.
object형식의 변수들을 LabelEncding하는 함수이다. 'Cabin'의 경우 선실 등급을 나타내는 가장 앞 글자만 나타내도록 변경하였다.
label값인 y에 'Survived'를 할당하고 feature인 X에 전 체데이터 프레임에서 'Survived'만 제거한 데이터를 할당하였다. 그후 위에서 작성한 전처리 코드를 모두 적용시켰다.
train_test_split()을 통해 먼저 학습 데이터와 테스트 데이터를 나누었다.
모델 설계
결정 트리, 랜덤 포레스트, 로지스틱 회귀 총 3개의 알고리즘을 이용하여 학습을 진행하였다.
다음과 같이 정확도가 계산되었지만 교차검증을 사용하지 않았기 때문에 정확한 결과가 아닐 수 있다.
교차 검증
cross_val_score()를 통해 Stratified K-Fold 교차검증을 실행하였다.
마지막으로 GridSearchCV를 이용하여 최적의 하이퍼 파라미터까지 세팅하였다. max_depth = 3, min_samples_leaf = 5, min_samples_split = 2 일 때 가장 높은 정확도를 나타냈다. 따라서 해당 파라미터들로 설정한 후 테스트셋을 이용하여 검증한 결과 0.8715의 매우 높은 정확도를 나타냈다.
※여기서는 train데이터셋 만을 이용하여 GridSearchCV를 이용하였다. 최적의 하이퍼 파라미터를 이용하여 마지막 테스트 결과를 확인하기 위함인 것으로 추측된다.
#이 글은 권철민 작가님의 [파이썬 머신러닝 완벽가이드]를 통해 공부한 내용을 바탕으로 정리하였습니다.
'Machine Learning > Preprocessing' 카테고리의 다른 글
SMOTE 오버샘플링 (0) | 2022.08.09 |
---|---|
하이퍼 파라미터 튜닝 기법 (Grid Search, 베이지안 최적화) (0) | 2022.08.05 |
피처 스케일링(feature scaling) (0) | 2022.05.08 |
데이터 인코딩 (Data Encoding) (0) | 2022.05.08 |
교차 검증 (Cross Validation) (0) | 2022.05.08 |