
다중선형회귀
다중 선형 회귀는 x의 값이 여러개인 그래프이다.
이전과 동일하게 식을 작성하면 되는데 기본 선형 회귀와 다른 점은 행렬의 곱을 사용하면 된다는 것이다.
X[x1,x2,x3,x4] , W[w1,
w2,
w3,
w4]
를 내적하게 되면 위와같은 식이 나오게 되는 것이다.
여기서 문제는 b이다.
b는 마지막에 붙여줘도 되고,
X[x1,x2,x3,x4,1] , W[w1,
w2,
w3,
w4,
b]
이렇게 하게되면, X와W의 내적으로만 가능하다.
```
###########################################################
# 다중 선형 회귀 예제 - 공부시간, 과외, 성적
###########################################################
import numpy as np
import matplotlib.pyplot as plt
data = np.array([[2, 0, 81],
[4, 4, 93],
[6, 2, 91],
[8, 3, 97]])
X = data[:, :-1]
Y = data[:, [-1]]
# 학습할 변수 : a1, a2, b -> 초기화 (임의의 값)
W = np.array([[1], [1]])
b = 1
# 하이퍼파라미터 초기값 : 학습률 (learning rate)
lr = 0.01
# 학습 횟수
epochs = 2000
# 학습을 기록할 리스트 준비
MSE_list, W_list, b_list = [], [], []
# 학습 #####################
for i in range(epochs + 1): # + 1은 마지막 데이터를 print하기 위함
Y_hat = np.matmul(X, W) + b
MSE = np.mean((Y_hat - Y)**2)
# 미분값(접선의 기울기) 구하기
dMSE_dW = 2 * np.mean((Y_hat - Y) * X, axis=0).reshape(-1, 1)
dMSE_db = 2 * np.mean(Y_hat - Y)
# 학습을 하며 a1, a2, b를 수정(업데이트)
W = W - lr * dMSE_dW
b = b - lr * dMSE_db
# 그래프를 그리기 위해 누적데이터 만들기
MSE_list.append(MSE)
W_list.append(W)
b_list.append(b)
if i % 100 == 0: # 100번마다 print 할 때 사용
print(f"{i}\t MSE={MSE:.3f}\t W={W.flatten().round(4)}\t b={b:.3f}")
```
코드는 간단하다. 선형회귀랑 크게 다른 부분은 없고,
Y_hat = np.matmul(X, W) + b
MSE = np.mean((Y_hat - Y)**2)
X와W의 내적에 + b를 더해주면되고,
그것을 오차를 통해 MSE를 구해주면 된다.
또 다른점은
dMSE_dW = 2 * np.mean((Y_hat - Y) * X, axis=0).reshape(-1, 1)
dMSE_db = 2 * np.mean(Y_hat - Y)
이유
reshape해주는 이유는 (Y_hat - Y) 는 (4,1) X는 (4,2) 이기 때문에 *를 하면 브로드케스팅 되어 (4,2)로 변경된다.
(4,2)를 mean axis =0 을 하면 (2,) 이나오게 된다. 이것을 W와 내적하기 위해서 reshape(1)로 맞춰주는 것이다.
로지스틱 회귀
분류(classification) 문제를 해결하기 위해 사용하는 지도학습 알고리즘입니다. 이름에 '회귀'가 들어가 있지만, 실제로는 연속적인 값을 예측하는 회귀(regression) 문제가 아니라, 데이터가 특정 범주에 속할 확률을 예측하고, 이 확률에 따라 분류를 수행하는 모델이다.
즉 0과 1로 이루어진 바이너리 형태라는 것이다.
그래서 함수는 시그모이드 함수를 사용한다.
활용
이진 분류: 스팸 메일 분류, 질병 진단, 고객 이탈 예측
다중분류: OvR 방식 등을 통해 여러 클래스로도 확장 가능.
하지만 로지스틱 회귀와 선형회귀가 다른점은 오차함수를 최소제곱법이 아닌, 크로스엔트로피 방식을 쓴다는 것이다.
이유
로지스틱회귀는 0과 1로만 이루어져있는데 최소 제곱법을 사용하게 되면 0과1이상의 값이 나오게 된다. 그렇기에 제대로 결과가 나오지 않아서 로그함수인 크로스 엔트로피 방식을 쓴다.

'부트캠프 > 구름ICT AI' 카테고리의 다른 글
태태개발일지 - 구름톤 선형회귀 (0) | 2025.06.04 |
---|---|
태태개발일지 - 구름톤 Numpy (0) | 2025.05.29 |
태태코딩 - 구름톤 ICT AI과정 Python 기초 및 아나콘다 설치 (0) | 2025.05.27 |