오늘 공부한 이진 논리회귀를 캐글(Kaggle)의 dataset을 활용해 실습한 내용을 기록하기 위해 작성한 글이다
순서
Kaggle에서 타이타닉 탑승자(titanic)을 다운로드 받아 생존자/사망자를 분류하는 과정은 다음과 같다
1. 캐글(Kaggle) 환경 변수 설정 (os)
2. 데이터셋 다운로드
3. 데이터셋 로드 (pandas.read_csv)
4. 전처리
5. 모델 학습
1. 캐글(Kaggle) 환경 변수 설정 (os)
import os
os.environ['KAGGLE_USERNAME'] = 'username'
os.environ['KAGGLE_KEY'] = 'key'
2. 데이터셋 다운로드
!kaggle datasets download -d heptapod/titanic
!unzip titanic.zip
3. 데이터셋 로드 (pandas.read_csv)
df = pd.read_csv('train_and_test2.csv')
df.head(5)
4. 전처리
[사용하는 칼럼 추출]
# 사용하는 칼럼만 추출
df = pd.read_csv('train_and_test2.csv', usecols=[
'Age', # 나이
'Fare', # 승차 요금
'Sex', # 성별
'sibsp', # 타이타닉에 탑승한 형제자매, 배우자의 수
'Parch', # 타이타닉에 탑승한 부모, 자식의 수
'Pclass', # 티켓 등급 (1, 2, 3등석)
'Embarked', # 탑승국
'2urvived' # 생존 여부 (0:사망, 1:생존)
])
# 미리보기
sns.countplot(x='Sex', hue='2urvived', data=df) # countplot : 숫자를 센다
# 미리보기
sns.countplot(x=df['2urvived']) # 총 사망, 생존자 수
[비어있는 값을 포함한 행 제거]
print(df.isnull().sum()) # data frame에서 비어있는 값이 얼마나 있는지 출력
print(len(df)) # 비어있는 행 제거하기 전의 df 길이
df = df.dropna() # 비어있는 행 제거
print(len(df)) # 비어있는 행 제거 한 후의 df 길이
[X, Y 데이터 분할]
x_data = df.drop(columns=['2urvived'], axis=1) # 생존여부(2urvived)를 제외
x_data = x_data.astype(np.float32) # tensorflow에서 사용하기 위해 float32로 변경
x_data.head(5) # 확인
y_data = df[['2urvived']]
y_data = y_data.astype(np.float32)
y_data.head(5)
[표준화]
scaler = StandardScaler()
x_data_scaled = scaler.fit_transform(x_data) # 단위가 다른 x_data만 표준화한다.
print(x_data.values[0]) # 표준화 전
print(x_data_scaled[0]) # 표준화 후
[학습/검증 데이터 분할]
x_train, x_val, y_train, y_val = train_test_split(x_data, y_data, test_size=0.2, random_state=2021)
print(x_train.shape, x_val.shape)
print(y_train.shape, y_val.shape)
5. 모델 학습
model = Sequential([
Dense(1, activation='sigmoid') # 선형회귀와는 다르게 sigmoid function을 사용한다.
# Dense로 linear regression 한 번 실행하고 sigmoid를 실행한다.
])
# 0 또는 1을 구분하는 이진 논리회귀에는 loss='binary_crossentropy'을 사용
# loss 값만 보면 학습의 정도를 확인하기 어려워 감을 잘 잡기 위해 metrics를 사용
# 분류문제를 풀 때는 acc (정확도) 라는 metrics를 많이 사용한다
# acc meterics는 정확도를 0에서 1사이로 나타내주는 지표 / 1에 가까울수록 100%, 0에 가까울수록 0%를 의미
model.compile(loss='binary_crossentropy', optimizer=Adam(lr=0.01), metrics=['acc'])
model.fit(
x_train,
y_train,
validation_data=(x_val, y_val),
epochs=20
)
'AI > Machine Leaning' 카테고리의 다른 글
[Deep Leaning] 알파벳 수화(Sign Language MNIST) 예제 (2) | 2022.05.17 |
---|---|
[Deep Learning] 딥러닝의 주요 개념 (Batch, Epoch, Activation, Over/Under fitting) (0) | 2022.05.17 |
[Machine Learning] 다항 논리회귀(multinomial logistic regression) 예제 (0) | 2022.05.16 |
[Machine Leaning] Keras Dence & 활성화(activation) 함수 종류 (0) | 2022.05.16 |
[Machine Learning] 선형회귀(linear regression) 예제 (0) | 2022.05.12 |