Search
๐Ÿค–

Linear Regression

์ƒ์„ฑ์ผ
2025/04/02 09:52
ํƒœ๊ทธ
๋จธ์‹ ๋Ÿฌ๋‹
์ž‘์„ฑ์ž

Introduction

โ€ข
Supervised Learning
โ—ฆ
์ •๋‹ต ๊ฐ’ yy๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ input xx๋ฅผ yy๋กœ mapping ํ•˜๋Š” ํ•จ์ˆ˜ ff๋ฅผ ํ•™์Šต
โ—ฆ
๋Œ€ํ‘œ์ ์œผ๋กœ ์—ฐ์†ํ˜• ์ •๋‹ต๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์„ ํ˜• ํšŒ๊ท€๊ฐ€ ์žˆ๋‹ค.

Linear Regression

โ€ข
๋‹จ์ˆœ ์„ ํ˜• ํšŒ๊ท€๋ถ„์„์„ ํ†ตํ•ด, ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์‹ค ๋ฉด์  ๋ฐ์ดํ„ฐ(input)์„ ์ง‘ ๊ฐ’์œผ๋กœ mappingํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ฐพ๊ณ , ์ƒˆ๋กœ์šด ์ž…๋ ฅ (์œ„์˜ ์˜ˆ์—์„œ๋Š” x=750x=750)์— ๋Œ€ํ•ด ์—ฐ์†ํ˜• ์ถœ๋ ฅ ๊ฐ’์˜ ์˜ˆ์ธก์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
Input์œผ๋กœ ๋‹ค์–‘ํ•œ ์ž…๋ ฅ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด ๊ฒฝ์šฐ ๋‹ค์ค‘ํšŒ๊ท€๋ผ๊ณ  ํ•œ๋‹ค.

์ˆ˜์‹์œผ๋กœ ํ‘œํ˜„

โ€ข
์„ ํ˜• ํšŒ๊ท€ ํ‘œํ˜„
โ—ฆ
f(x)=ฮธ0+ฮธ1x1+ฮธ2x2+ฮธ3x3f(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_3
โ—ฆ
f(x)=โˆ‘j=0dฮธjxjย (x0=1)=yf(x) = \sum^d_{j=0} \theta_j x_j \ (x_0 = 1)= y
โ–ช
์—ฌ๊ธฐ์„œ ฮธ\theta ์™€ x,yx, y๋Š” ๊ฐ๊ฐ ์—ด ๋ฒกํ„ฐ์ด๋‹ค.
โ‡’ ์ •๋ฆฌํ•˜์ž๋ฉด ์ž…๋ ฅ์„ ์ถœ๋ ฅ์œผ๋กœ mapping ํ•˜๋Š” ๊ฐ€์„ค ํ•จ์ˆ˜ ff๋ฅผ NN๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์Œ (x(i),y(i))(x^{(i)},y^{(i)}) ์œผ๋กœ๋ถ€ํ„ฐ ํ•™์Šตํ•˜๋Š” ๊ณผ์ •์ด๋ฉฐ ์—ฌ๊ธฐ์„œ ๊ฐ€์„ค ํ•จ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค๋Š” ๊ฒƒ์€ ๊ทธ๊ฒƒ์„ ๊ตฌ์„ฑํ•˜๋Š” parameter๋ฅผ ์ฐพ๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋•Œ ๊ฐ€์„ค ํ•จ์ˆ˜ ff๋Š” parameterization ๋˜์–ด์žˆ๋‹ค๊ณ  ํ‘œํ˜„ํ•˜๋ฉฐ ์ด๋Š” parameter๋ฅผ ์•Œ๋ฉด ๊ทธ ํ•จ์ˆ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

ํ•™์Šต

โ€ข
๋ชฉ์ 
โ—ฆ
h(x)=โˆ‘j=0dฮธjxjย (x0=1)ย โ‰ˆyh(x)=\sum^d_{j=0} \theta_j x_j \ (x_0 = 1) \ \approx y
โ—ฆ
๊ฐ€์„ค ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๊ฐ€ ์‹ค์ œ ๊ฐ’๊ณผ ๊ฐ€๊นŒ์›Œ์ง€๋„๋ก ฮธ\theta๋ฅผ ํ•™์Šตํ•œ๋‹ค.
โ€ข
๋ชฉ์  ํ•จ์ˆ˜๋กœ ํ‘œํ˜„
โ—ฆ
SSE : J(ฮธ)=12โˆ‘iN(h(x)โˆ’y)2J(\theta) = \frac{1}{2} \sum^N_i (h(x) - y)^2
โ–ช
๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜ ์ฆ๊ฐ€ ์‹œ, Error๋„ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋‹ค.
โ—ฆ
MSE : J(ฮธ)=1Nโˆ‘iN(h(x)โˆ’y)2J(\theta) = \frac{1}{N} \sum^N_i (h(x) - y)^2
โ—ฆ
RMSE : J(ฮธ)=1Nโˆ‘iN(h(x)โˆ’y)2J(\theta) = \sqrt{\frac{1}{N} \sum^N_i (h(x) - y)^2}
โ–ช
์˜ค์ฐจ์˜ ํฌ๊ธฐ๊ฐ€ ์ผ์ •, ์› ๋ฐ์ดํ„ฐ์™€ ๋™์ผ ๋‹จ์œ„์ด๋‹ค.
โ—ฆ
ฮธ=argโกminโกฮธJ(ฮธ)\theta = \displaystyle \arg\min_\theta J(\theta)
โ‡’ ๋ชฉ์  ํ•จ์ˆ˜๋ฅผ ์ตœ์†Œ๋กœ ๋งŒ๋“œ๋Š” parameter๋ฅผ ์ตœ์†Œ์ œ๊ณฑ๋ฒ•์„ ํ†ตํ•ด ์ฐพ๋Š”๋‹ค.
โ€ข
Convex
โ—ฆ
๋ชฉ์ ํ•จ์ˆ˜๊ฐ€ convex ํ•จ์ˆ˜์ธ ๊ฒฝ์šฐ ํŽธ๋ฏธ๋ถ„=0๋ฅผ ํ’€์ดํ•œ๋‹ค.
โ–ช
convex, concave ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ ์ตœ์†Œ/์ตœ๋Œ€๊ฐ’ = ๊ทน์†Œ/๊ทน๋Œ€๊ฐ’ ์ด๋ฏ€๋กœ ํŽธ๋ฏธ๋ถ„์„ ํ†ตํ•ด ํ’€์ดํ•  ์ˆ˜ ์žˆ๋‹ค.
โ–ช
ํŽธ๋ฏธ๋ถ„์€ ๋ชจ๋“  parameter์— ๋Œ€ํ•œ ๋ฏธ๋ถ„ ๊ฐ’์ด 0์ด ๋˜๋„๋ก ์ง„ํ–‰ํ•˜์—ฌ์•ผ ํ•œ๋‹ค.
โ–ช
๋ชฉ์ ํ•จ์ˆ˜๊ฐ€ convex์ผ ๋•Œ, ๋ชจ๋“  ๋ณ€์ˆ˜์— ๋Œ€ํ•œ gradient = 0์ธ ์ง€์ ์€ global minimum์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
โ—ฆ
ํŽธ๋ฏธ๋ถ„์„ ํ†ตํ•œ ํ’€์ด๋Š” parameter ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด, ๊ณ„์‚ฐ์ด ์–ด๋ ค์›Œ์ง€๋Š” ๋‹จ์ ์ด ์žˆ์œผ๋ฉฐ, ๋ชฉ์ ํ•จ์ˆ˜๊ฐ€ Convex/Concave๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ํŽธ๋ฏธ๋ถ„์„ ํ™œ์šฉํ•˜๊ธฐ ์–ด๋ ต๋‹ค.
โ—ฆ
์˜ˆ) ๊ฐ€์„คํ•จ์ˆ˜ : f(x)=ฮธ0+ฮธ1xf(x) = \theta_0 + \theta_1x
โ–ช
โˆ‚J(ฮธ)โˆ‚ฮธ0=0,โˆ‚J(ฮธ)โˆ‚ฮธ1=0\frac{\partial \mathcal{J}(\theta)}{\partial \theta_0} = 0 \quad , \quad \frac{\partial \mathcal{J}(\theta)}{\partial \theta_1} = 0 ๋ฅผ ํ†ตํ•ด ํ’€์ด
โ€ข
Gradient Descent
โ—ฆ
ํŽธ๋ฏธ๋ถ„์„ ํ†ตํ•œ ํ’€์ด์˜ ๋‹จ์ ์„ ํ•ด๊ฒฐํ•˜๊ณ ์ž ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์„ ์ด์šฉํ•œ๋‹ค. (์ ์ง„์ ์œผ๋กœ ์ตœ์†Œ๊ฐ’์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•)
โ—ฆ
ฮธnew=ฮธoldโˆ’ฮฑdJ(ฮธ)dฮธ\theta_{\text{new}} = \theta_{\text{old}} - \alpha \frac{d \mathcal{J}(\theta)}{d \theta}
โ–ช
์ž„์˜์˜ ์ดˆ๊ธฐ๊ฐ’์—์„œ ์‹œ์ž‘ํ•˜์—ฌ gradient vector์˜ ๋ฐ˜๋Œ€ ๋ฐ˜ํ–ฅ์œผ๋กœ ฮธ\theta์˜ ๊ฐ’์„ ์ผ์ •๋Ÿ‰(ฮฑ\alpha)๋งŒํผ ์ด๋™ํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜์—ฌ ์ตœ์ ํ•ด๋ฅผ ์ฐพ์•„๋‚˜๊ฐ€๋Š” ๋ฐฉ๋ฒ•
โ–ช
์ด๋•Œ gradient vector๊ฐ€ ์–‘์ˆ˜๋ผ๋ฉด, ฮธ\theta๊ฐ€ ์ปค์งˆ ๋•Œ ํ•จ์ˆ˜๋„ ์ฆ๊ฐ€ํ•˜๋ฏ€๋กœ ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™์‹œ์ผœ์•ผ ํ•œ๋‹ค. (๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€)
โ–ช
Gradient vector = 0 ์—์„œ update๋Š” ๋” ์ด์ƒ ์ง„ํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋งŒ์•ฝ ๋ชฉ์ ํ•จ์ˆ˜๊ฐ€ Convex๋ผ๋ฉด ๊ทธ ์ง€์ ์ด ์ตœ์ ์ ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชฉ์ ํ•จ์ˆ˜๊ฐ€ Convex๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์ตœ์ ์ ์ด ์•„๋‹Œ ์ง€์ ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
โ–ช
์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์ดˆ๊นƒ๊ฐ’์„ ํ™œ์šฉํ•œ๋‹ค.
โ–ช
ฮฑ\alpha (ํ•™์Šต๋ฅ ) : 0~1 ์‚ฌ์ด์˜ ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ, ํฐ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์ตœ์ ์ ์„ ์ง€๋‚˜์น  ์ˆ˜ ์žˆ๋‹ค.
โ—ฆ
์œ„ ํ•จ์ˆ˜์—์„œ ฮธ0=โˆ’1\theta_0 = -1 ์‹œ์ž‘ํ•œ๋‹ค๋ฉด ๊ทน์†Œ์ ์— ๋ฉˆ์ถ”๊ฒ ์ง€๋งŒ, ฮธ0=3\theta_0 = 3์—์„œ ์‹œ์ž‘ํ•œ๋‹ค๋ฉด ์ตœ์ ์ ์—์„œ ์ค‘์ง€ํ•  ๊ฒƒ์ด๋‹ค.
โ—ฆ
์˜ˆ) ๊ฐ€์„คํ•จ์ˆ˜ : f(x)=ฮธ0+ฮธ1xf(x) = \theta_0 + \theta_1x, ๋ชฉ์ ํ•จ์ˆ˜ : SSE ์ธ ๊ฒฝ์šฐ
โ–ช
โˆ‚J(ฮธ)โˆ‚ฮธ0=โˆ‘(h(x)โˆ’y)\frac{\partial \mathcal{J}(\theta)}{\partial \theta_0} = \sum(h(x)-y)
โ–ช
โˆ‚J(ฮธ)โˆ‚ฮธ1=โˆ‘(h(x)โˆ’y)x\frac{\partial \mathcal{J}(\theta)}{\partial \theta_1} = \sum(h(x)-y)x

Code

%matplotlib inline import matplotlib.pyplot as plt import seaborn as sns import numpy as np from sklearn.linear_model import LinearRegression # Data ์ƒ์„ฑ rng = np.random.RandomState(1) x = 10*rng.rand(50) # ํ‘œ์ค€ ์ •๊ทœ ๋ถ„ํฌ๋กœ๋ถ€ํ„ฐ 50๊ฐœ ์ˆซ์ž sampling y = 2*x -5 + rng.rand(50) # y = 2x -5 ์ฃผ๋ณ€์— ํฉ์–ด์ ธ์žˆ๋Š” ๋ฐ์ดํ„ฐ plt.scatter(x,y)
Python
๋ณต์‚ฌ
# ๋‹จ์ˆœ์„ ํ˜•ํšŒ๊ท€ model = LinearRegression(fit_intercept=True) model.fit(x[: , np.newaxis],y) # input์„ 2D๋กœ ํ•˜๊ธฐ ์œ„ํ•จ # newdata xfit = np.linspace(0,100,1000) yfit = model.predict(xfit[:,np.newaxis]) plt.scatter(x,y) plt.plot(xfit,yfit) plt.ylim(-5,10) plt.xlim(0,10) plt.show()
Python
๋ณต์‚ฌ
# model a = model.coef_[0] b = model.intercept_ x_new = np.linspace(0,100,1000) y = b + a*x_new plt.scatter(xfit,yfit) plt.plot(x_new,y) plt.ylim(-5,10) plt.xlim(0,10) plt.show()
Python
๋ณต์‚ฌ
# ๋‹ค์ค‘ํšŒ๊ท€ x = 10*rng.rand(100,3) y = 10*rng.rand(100,1) model.fit(x,y) model.intercept_ model.coef_ # ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ํ–‰๋ ฌ์˜ x_feature ์ˆœ์„œ์™€ ๋™์ผ
Python
๋ณต์‚ฌ