SK AI Data Academy 1기 중급/[SK하이닉스] DRAM 내부 회로의 파형 예측
03. 회귀 분석을 통한 파형 예측
Donghun Kang2024. 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) # 테스트 데이터에 대해 예측