Sequential
- 순차적으로 쌓아가며 모델 생성
- Input → Output Layer로 순차적 연결
- Sequential 함수 안에 리스트로 레이어 입력
model = Sequential([Input(shape = (n, )),
Dense(128, activation = 'relu'),
Dense(64, activation = 'relu'),
Dense(32, activation = 'relu'),
Dense(16, activation = 'relu'),
Dense(10, activation = 'softmax')])
Function
- 모델을 좀더 복잡하게 구성
- 모델을 분리해서 사용 가능
- 다중 입력, 다중 출력 가능
- 레이어 : 앞 레이어 연결 지정
- Model 함수로 시작과 끝 연결해서 선언
il = Input(shape = (nfeatures, ))
hl1 = Dense(10, activation = 'relu')(il)
hl2 = Dense(10, activation = 'relu')(hl1)
hl3 = Dense(2, activation = 'relu')(hl2)
ol = Dense(1)(hl3)
model = Model(inputs = il, outputs = ol)
다중 입력
모델 선언
- concatenate
- 옆으로 붙이기, 하나의 레이어처럼 묶기
- cbl = concatenate([hl1_1, hl1_2])
모델 사용
- 모델 예측 시, 전처리 된 두 가지 입력을 리스트로 묶어서 사용
- pred = model.predict([x_val1, x_val2])
# 모델 구성
input_1 = Input(shape=(nfeatures1,), name='input_1')
input_2 = Input(shape=(nfeatures2,), name='input_2')
# 첫 번째 입력을 위한 레이어
hl1_1 = Dense(10, activation='relu')(input_1)
# 두 번째 입력을 위한 레이어
hl1_2 = Dense(20, activation='relu')(input_2)
# 두 히든레이어 결합
cbl = concatenate([hl1_1, hl1_2])
# 추가 히든레이어
hl2 = Dense(8, activation='relu')(cbl)
# 출력 레이어
output = Dense(1)(hl2)
# 모델 선언
model = Model(inputs = [input_1, input_2], outputs = output)
model.summary()
시계열 데이터
ML 기반 시계열 모델링
- 특정 시점 데이터들(1차원)과 예측대상시점(𝑦𝑡+1) 과의 관계로 부터 패턴을 추출하여 예측
- 모델 구조 예 : 𝑦𝑡+1 = 𝑤1𝑥1𝑡 + 𝑤2𝑥2𝑡+ 𝑤3𝑥3𝑡 + 𝑤4𝑦𝑡 + 𝑤0
- 시간의 흐름을 x변수로 도출하는 것이 중요.
DL 기반 시계열 모델링
- 시간흐름 구간(timesteps) 데이터들(2차원)과 예측대상시점(𝑦𝑡+1) 과의 관계로 부터 패턴 추출
- 어느정도 구간(timesteps)을 하나의 단위로 정할 것인가?
- 분석 단위를 2차원으로 만드는 전처리 필요. ➔ 데이터셋은 3차원
잔차 분석
잔차(Residuals) = 실제 데이터 – 예측값
- 시계열 모델 𝑦 = 𝑓(𝑥) + 𝜀
- 모델이 잘 만들어 졌다면, 잔차𝜀는 White Noise에 가까워야 함.
- 잔차𝜀가 White Noise에 가깝지 않다면 𝑓(𝑥)는 아직 𝑦 의 패턴을 제대로 반영하지 않음. ➔ 더 해야 할 일이 남아 있음.
잔차 분석
- 시각화 : ACF, PACF
- 검정
- 정상성 검정(ADF Test, KPSS Test)
- 정규성 검정(Shapiro-wilk Test)
- 자기상관 검정(Ljung-Box Test)
- 등분산성 검정(G-Q Test)
RNN(Recurrent Neural Networks)
RNN으로 시계열 데이터 모델링 하기
✓과거의 정보를 현재에 반영해 학습하도록 설계
RNN을 위한 데이터 전처리
- 데이터 분할 1 : x, y
- 스케일링
- X 스케일링은 필수
- Y 값이 크다면 최적화를 위해 스케일링 필요 ➔ 단, 모델 평가 시 원래 값으로 복원
- 3차원 데이터셋 만들기
- 데이터 분할2 : train, val
SimpleRNN
- 노드 수 1개 ➔ 레이어의 출력 형태 : timesteps * 노드 수
- return_sequences : 출력 데이터를 다음 레이어에 전달할 크기 결정 ★ ★
- True : 출력 크기 그대로 전달 ➔ timesteps * node수
- False : 가장 마지막(최근) hidden state 값만 전달 ➔ 1 * node 수
- 마지막 RNN Layer 를 제외한 모든 RNN Layer : True
- 마지막 RNN Layer : False와 True 모두 사용 가능
- 단, True를 사용하려면 Flatten으로 펼친 후 Dense Layer 로 연결
'<프로그래밍> > [python]' 카테고리의 다른 글
[python] 딥러닝 성능관리 (0) | 2024.10.14 |
---|---|
[python] 딥러닝 기초 (0) | 2024.10.10 |
[python] 머신러닝의 기초3 (0) | 2024.09.30 |
[python] 머신러닝의 기초2 (1) | 2024.09.27 |
[python] 머신러닝의 기초 (0) | 2024.09.26 |