DeseoDeSeo
[ Machine Learning ] ex05_titanic 분류실습 본문
< 목표 >
* 타이타닉 데이터를 활용하여 생존자/사망자 예측해보자,
* kaggle 경진대회에 참가하여 우리 점수를 확인해보자.
* machine learning의 전체 과정을 ㅊㅔ험해보자.
< 머신러닝 과정 >
- 1. 문제 정의 : 목표설정, 어떤 모델
- 2. 데이터 수집: 분류를 할거라면 class로 담긴 레이블이 있는 데이터 수집 같은
- 3. 데이터 전처리 :이상치/결측치 처리. 특성 처리(특성 공학)
- 4. 데이터 탐색(탐색적 데이터 분석) : 기술통계, 특성 간의 관계
- 5. 모델 선택 및 하이퍼 파라미터 설정 :
- 6. 모델 예측 및 평가
- 7. 모델 서비스화
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt # 시각화 라이브러리
import seaborn as sns # 시각화 라이브러리
# train, test 분리하는 도구
from sklearn.model_selection import train_test_split
# 평가 도구
from sklearn.metrics import accuracy_score
#트리 모델 - 사망/생존 이진 분류
from sklearn.tree import DecisionTreeClassifier
train.info()
- 0 Survived - 생존/ 사망 여부 (답 데이터, Class Label)
- 1 Pclass - 승객의 등급(1- 귀족층,2- 중간층,3- 하위계층)
- 2 Name - 이름
- 3 Sex - 성별(male, female)
- 4 Age - 나이(0~
- 5 SibSp - 형제자매+배우자 수
- 6 Parch - 부모 + 자식 수
- 7 Ticket - 티겟 번호
- 8 Fare - 요금
- 9 Cabin - 객실번호
- 10 Embarked - 승선항
각각 train. test 변수에 데이터 불러와서 담기
단, index를 승객의 번호로 설정해서 담아줄 것.
train = pd.read_csv("./data/titanic/train.csv", index_col= "PassengerId" )
test=pd.read_csv("./data/titanic/test.csv" , index_col= "PassengerId")
train.head(3)
크기 확인
print('트레인 크기: ', train.shape)
print('테스트 크기: ', test.shape) # test 정답 데이터 x (1개가 없음.) => kaggle이 알고 있다.
컬럼명만 뽑아서 확인하기
print(train.columns)
print(test.columns)
데이터 전처리 및 데이터 탐색
- 결측치 확인
pandas함수 통해서 train결측치 확인
데이터 자리에 결측치가 있는지?
train.isnull().sum()
info 함수 통해서 train 결측치 확인
train.info()
# 결측치 존재 컬럼 : age, cabin, embarked
info 함수 통해서 test 결측치 확인
test.info()
# 결측치 존재 컬럼 : age, cabin, fare
결측치(행)에 데이터를 채워넣기.
( 삭제도 가능하지만 여기서는 데이터를 채워넣음. )
: train 의 embarked 결측치 처리: 승객이 탑승한 항구 이름
train데이터 기준으로 embarked 컬럼 확인
train['Embarked']
train데이터 기준으로 embarked 컬럼 확인
train['Embarked'].unique()
빈도수가 높은 승선항 알파벳으로 결측치를 처리해보자.
train['Embarked'].value_counts()
# S가 가장 많으니까 S로 채우자.
- 탐색용 데이터는 train.
- 모델 학습 : 모델이 학습을 잘할 수 있도록 데이터를 셋팅해야함.
- test 데이터는 모델을 일반화시키는데 도움이 되지 않는다.
- train 데이터가 학습할 때 사용되고 모델의 일반화에 도움을 줌.
train의 Embarked 결측치를 'S로 채우기
# fillna('채울값')
train['Embarked']=train['Embarked'].fillna('S')
train['Embarked'].value_counts()
+ )
Embarked 컬럼에 결측치가 있던 행의 정보를 확인하고 비슷한 사람의 데이터가 있다면
그 사람의 승선항 정보를 대체값으로 활용.
- test데이터의 Fare결측치 처리
-요금평균, 중앙값 계산 가능.
- 데이터 분석을 진행하면서 관련이 있을법 한 컬럼을 연관지어서 대체값을 확인해보자
train 기준으로 데이터 탐색한다.
Fare 컬럼 정보 확인 -> 기술 통계량.
train['Fare'].describe()
[ 변수(특성)간의 상관관계 확인 ]
# 상관계수(숫자): -1 ~ 1
# 각 컬럼의 상관 정도를 수치로 표현한 값 : 상관계수
# -1과 1에 가까울 수록 변수간의 관계성이 있음.
# 0에 가까울 수록 변수간의 관계성이 적음.
# 생존 사망과 연관이 있는 컬럼 확인해보기.
train.corr()
절대값으로 출력 !
train.corr()['Survived'].abs()
#pclass가 생존/사망과 연관성이 있을 수 있겠음.
# 따라서 등급에 따른 요금의 중앙값으로 채워주는 것도 의미가 있을거라 생각됨.(강사님)
< 등급에 따른 요금의 중앙값 >
# 1. Pclass, Fare 2개 컬럼만 인덱싱 해보기
# 2. Pclass 1,2,3 등급끼리 묶기(그룹화하기)
# 3. median() 집계함수 연결
train[['Pclass','Fare']].groupby('Pclass').median()
'Python' 카테고리의 다른 글
[ Machine Learning ] Ex05_titanic 실습_part.03 (0) | 2023.09.04 |
---|---|
[Machine Learning] ex05_titanic 실습. part 02 (0) | 2023.09.01 |
[ Machine Learning ] ex04_mushroom_part.02 (1) | 2023.08.31 |
< Dataframe 인덱싱 > (0) | 2023.08.31 |
[Machine Learning] Decision tree : 의사 결정 나무 (0) | 2023.08.30 |