모듈 가져오기
import numpy as np
import pandas as pd
import tensorflow as tf
from tensorflow import keras
x, y 분리
target = '컬럼명'
x = data.drop(target, axis=1)
y = data.loc[:, target]
학습, 평가 데이터 분리
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=1)
x_train.shape, x_test.shape, y_train.shape, y_test.shape
회귀 문제 - Linear Regression
keras.backend.clear_session() # 이전에 만든 모델 지우기
model = keras.models.Sequential() # 연결주의 방식 사용
model.add( keras.layers.Input(shape=(30,)) ) # x 30개
model.add( keras.layers.Dense(1, activation='linear') ) # y 1개, linear 는 default 값
# 단일 클래스 회귀 방식
model.compile(
loss=keras.losses.mean_squared_error,
optimizer='adam'
)
model.summary()
이진 분류 문제 - Logistic Regression (sigmoid 사용)
keras.backend.clear_session() # 이전에 만든 모델 지우기
model = keras.models.Sequential() # 연결주의 방식 사용
model.add( keras.layers.Input(shape=(30, )) ) # x 가 30개
# 시그모이드 함수를 활용하여 로지스틱 회귀 설정
model.add( keras.layers.Dense(1, activation='sigmoid') )
model.compile(
loss=keras.losses.binary_crossentropy,
metrics=['accuracy'], # metrics=keras.metrics.Accuracy
optimizer='adam'
)
model.summary()
멀티클래스 분류 문제 - softmax
- 원핫인코딩
import numpy as np
from tensorflow.keras.utils import to_categorical
class_len = len(np.unique(y_train))
y_train = to_categorical(y_train, class_len)
y_test = to_categorical(y_test, class_len)
- categorical_crosentropy, softmax 사용
keras.backend.clear_session() # 이전에 만든 모델 지우기
model = keras.models.Sequential() # 연결주의 방식 사용
model.add( keras.layers.Input(shape=(4,)) ) # x 4 개
# softmax 활성함수를 통해 전체 범주형 데이터의 확률의 합을 1 로 치환
model.add( keras.layers.Dense(3, activation='softmax') )
# 3개 이상 분류 방식
model.compile(
loss=keras.losses.categorical_crossentropy,
metrics=keras.metrics.CategoricalAccuracy(),
optimizer='adam'
)
model.summary()
모델 학습 및 예측
# 학습
"""
epochs : 학습용 데이터를 모델에 학습할 횟수 (학습 반복 주기)
verbose: 학습의 진행 상황을 볼지 말지 설정
"""
model.fit(x_train, y_train, epochs=5, verbose=1)
# 예측
y_pred = model.predict(x_test)
히든 레이어 추가하기
model.add( keras.layers.Dense(32, activation='relu') )
model.add( keras.layers.Dense(512, activation='swish') )
이미지 데이터 shape 평탄화
model.add( keras.layers.Flatten() )
EarlyStopping 기법 사용
from tensorflow.keras.callbacks import EarlyStopping
es = EarlyStopping(monitor='val_loss', # 멈추기 위한 조건으로 관측 대상 설정
patience=3, # 관측 대상의 성능이 개선되지 않는 경우를 참는 횟수
min_delta=0, # 개선된 것으로 간주하기 위한 최소 변화량 (0은 같아도 향상으로봄)
verbose=1, # 학습 과정 출력 설정
restore_best_weights=True) # 최적 epoch의 가중치를 모델에 적용 여부 (기본값 false)
model.fit(x_train, y_train, epochs=100, verbose=1,
validation_split=0.2, callbacks=[es])
'Experience > - KT AIVLE School' 카테고리의 다른 글
KT AIVLE School 6주차 정리 - 전처리 고급 (0) | 2023.03.07 |
---|---|
KT AIVLE School 4주차 정리 - 회귀, 분류 모델 선택 방법 (2) | 2023.03.06 |
KT AIVLE School 5주차 정리 - Keras (Functional) (0) | 2023.03.03 |
KT AIVLE School 4주차 정리 - Regularization (0) | 2023.02.27 |
KT AIVLE School 4주차 정리 - 앙상블(Ensenble) (0) | 2023.02.27 |
KT AIVLE School 4주차 정리 - 지도 학습 (0) | 2023.02.21 |
댓글