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

+ Recent posts