1. 다중 선형 회귀의 개요
2. 다중 선형 회귀의 수학적 모델
- 다중 선형 회귀는 여러 입력값을 각각의 가중치와 곱해 더한 후 편향값을 더하는 모델
- 모델은 다음과 같이 정의됨:
일반 수식:
f(x)=w⋅x+b
- w=[w1,w2,...,wn] : 가중치 벡터
- x=[x1,x2,...,xn] : 입력 특징 벡터
- b : 편향 (bias)
- f(x) : 예측 값
3. 다중 선형 회귀 모델의 예시
입력 특징 예시:
- x1: 집 크기 (평방피트)
- x2: 침실 수
- x3: 층 수
- x4: 주택의 연수 (나이)
모델 예시:
y^=0.1x1+4x2+10x3−2x4+80
- 특징마다 예측에 영향을 주는 비율이 다름
- ex) 침실이 추가되면 4,000달러 상승, 연식 1년 증가 시 2,000달러 하락 등
4. 벡터화 (Vectorization)
벡터화를 사용하면 연산을 효율적으로 처리할 수 있으며, 코드가 짧고 실행 속도가 빨라짐
4-1. 벡터화 전 (비효율적인 구현):
f = 0
for j in range(n):
f += w[j] * x[j]
f += b
4-2. 벡터화 후 (효율적인 구현):
f = np.dot(w, x) + b
5. 다중 선형 회귀의 비용 함수
비용 함수는 예측값과 실제값 사이의 오차를 수치화
J(w,b)=2m1∑i=1m(fw(x(i))−y(i))2
- m: 훈련 샘플 개수
- x(i): i번째 샘플의 입력 특징 벡터
- y(i): i번째 샘플의 실제 출력 값
- fw(x(i)): 예측 값
비용 함수는 기울기 하강법을 통해 최소화
6. 경사 하강법 (Gradient Descent)
모델의 가중치와 편향을 반복적으로 업데이트하여 비용 함수의 최소값을 찾는 최적화 알고리즘
6-1. 다중 특징일 때의 업데이트 식
wj:=wj−α⋅m1∑i=1m(fw(x(i))−y(i))⋅xj(i)
b:=b−α⋅m1∑i=1m(fw(x(i))−y(i))
- α: 학습률 (Learning Rate)
6-2. 벡터화된 형태
dw = (1/m) * np.dot(X.T, (y_pred - y_true))
db = (1/m) * np.sum(y_pred - y_true)
w = w - alpha * dw
b = b - alpha * db
7. 특징 스케일링 (Feature Scaling)
여러 특징의 값 범위가 크게 다를 경우, 경사 하강법의 수렴 속도가 느려질 수 있음
7-1. 스케일링 방법
(1) Min-Max Scaling:
xi:=max(x)−min(x)xi−min(x)
(2) 평균 정규화 (Mean Normalization):
xi:=max(x)−min(x)xi−μ
(3) Z-점수 정규화 (Z-score Normalization):
xi:=σxi−μ
- μ: 평균, σ: 표준편차
일반적으로 모든 특징이 -1 ~ 1 정도의 범위를 가지면 학습이 빠름
8. 학습률 선택 및 수렴 확인
수렴 확인 방법:
- 반복 횟수에 따른 비용 함수 J(w,b)의 값 플로팅
- 반복마다 J가 꾸준히 감소하면 수렴 중
- 그래프가 평평해지면 수렴 완료
9. 특징 엔지니어링 (Feature Engineering)
원래의 특징을 조합하거나 변형하여 모델 성능을 높이기 위한 새로운 특징을 생성
예시:
- x1: 토지 너비
- x2: 토지 깊이
→ x3=x1⋅x2: 대지 면적
10. 다항 회귀 (Polynomial Regression)
단순 선형이 아닌 비선형 관계를 모델링
예시:
모델:
y^=w1x+w2x2+w3x3+b
또는
y^=w1x+b
주의: 다항 특징을 사용할 경우에도 스케일링이 매우 중요
11. 실습에서 사용하는 라이브러리
NumPy: 수치 계산 및 벡터화에 사용
Scikit-Learn: 선형 회귀 모델 구현에 자주 사용되는 오픈소스 라이브러리
실무에서도 Scikit-Learn의 LinearRegression 모델을 사용하여 간단하게 회귀 모델 학습 가능