SK AI Data Academy 1기 중급/[SK하이닉스] DRAM 내부 회로의 파형 예측

03. 회귀 분석을 통한 파형 예측

Donghun Kang 2024. 7. 14. 18:25
  • 회귀 분석(regression analysis)
입력 변수와 출력 변수 사이의 관계를 모델링하여, 입력값에 대한 출력값을 예측하는 일.

회귀의 기본 원칙은 잔차(residual error)를 최소화 하는 것.

 

Q) 잔차를 무조건 최소화 하면 좋은가?

A) NO!

 

- 학습용 데이터로 훈련하여 테스트용 데이터에 적용

=> 학습 데이터에 과도하게 적합된 회귀 모델(과적합)은 일반화가 어려움.

 

  • 회귀 모델
설명 변수 X로부터 반응 변수 y를 예측하는 task
- 목적: 잔차를 최소화하는 베타를 찾는 것. 
- 종류: 선형 회귀 모델, 비선형 회귀 모델

 

  • 선형 회귀 모델
모델의 변수 베타와 Y가 선형 관계

- 목적: 잔차를 최소화하는 베타를 찾는 것.  
- 장/단점: 빠르고 효율적이며, 최적화가 쉽다./ 복잡한 관계를 모델링하기 어렵다.
- E.g: 최소 제곱 선형 회귀 모델, Ridge 회귀 모델... 

 

1. 최소 제곱 선형 회귀 모델(Linear least square regression) 

from sklearn.linear_model import LinearRegression

fitter = LinearRegression() # 최소 제곱 선형 회귀 모델 생성
fitter.fit(X_train, y_train) # 모델 학습
pred = fitter.predict(X_test) #테스트 데이터에 대해 예측

 

2. Ridge 회귀 모델(Ridge regression) 

- 최소 제곱 선형 모델은 overfitting이 발생할 수 있다.
- Ridge 회귀 모델은 잔차제곱합(RSS)을 최소화 하는 대신, 아래의 식을 최소화하는 것이 목표
- 목적 함수에 학습 계수의 제곱합을 더하여 특정 계수가 너무 커지는 것을 방지하여 overfitting을 예방
- 학습 계수의 제곱합을 목적함수에 더하는 것을 Ridge regularization(Ridge 정규화)라고 한다.
- 학습 계수의 절대값의 합을 목적함수에 더하는 것을 Lasso regularization(Lasso 정규화)라고 한다.
from sklearn.linear_model import Ridge

fitter = Ridge(alpha = 1.0) # Ridge 선형 회귀 모델 생성, alpha는 lamda의 값
fitter.fit(X_train, y_train) # 모델 학습
pred = fitter.predict(X_test) # 테스트 데이터에 대해 예측

 

  • 비선형 회귀 모델
- 모델 변수 베타와 Y가 비선형 관계
- 복잡한 관계를 모델링하기 적합
- 선형 회귀 모델보다 복잡하며, 최적화가 어려울 수 있다.
- E.g: MLP, CNN

 

1. 다중 퍼셉트론(Multi layer perception, MLP): 가장 단순한 형태의 신경망 모델

 

- MLP 모델의 학습 방법: 경사하강법(gradient descent)
- 손실함수를 각 학습 계수로 편미분하여, 손실값이 작아지는 방향으로 학습 계수를점차적으로 이동시킴.
- 역전파(back propagation)을 이용하여 각 학습 계수의 편미분 값 계산

 

* 역전파(back propagation) 알고리즘

순서 행동
0 MLP 모델 초기화
1 첫번째 데이터를 이용해 forward pass, 오차 계산, 오차 역전파 계산, 학습 계수 갱신
2 두번째 데이터를 이용해 forward pass, 오차 계산, 오차 역전파 계산, 학습 계수 갱신
3 세번째 데이터를 이용해 forward pass, 오차 계산, 오차 역전파 계산, 학습 계수 갱신
...  
N 마지막 데이터를 이용해 forward pass, 오차 계산, 오차 역전파 계산, 학습 계수 갱신, 1 에폭 끝

=> 위의 테이블을 반복한다.

 

1) Forward pass

 

2) 에러 계산

 

3) 역전파 계산

 

4) 학습 계수 갱신

 

from sklearn.neural_network import MLPRegressor

fitter = MLPRegressor(hidden_layer_sizes = (32,32)) # MLP 회귀 모델 생성
fitter.fit(X_train, y_train) # 모델 학습
pred = fitter.predict(X_test) # 테스트 데이터에 대해 예측