A A
[ML] Linear Regression (μ„ ν˜•νšŒκ·€)
μ΄λ²ˆμ—λŠ” Linear Regression (μ„ ν˜•νšŒκ·€)에 λ°ν•˜μ—¬ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

Linear Regression (μ„ ν˜•νšŒκ·€)

μ„ ν˜• νšŒκ·€(Linear Regression)λŠ” λ¨Έμ‹ λŸ¬λ‹μ—μ„œ 널리 μ‚¬μš©λ˜λŠ” νšŒκ·€ 뢄석 기법 쀑 ν•˜λ‚˜λ‘œ,
독립 λ³€μˆ˜μ™€ 쒅속 λ³€μˆ˜ κ°„μ˜ 관계λ₯Ό μ„ ν˜• λ°©μ •μ‹μœΌλ‘œ ν‘œν˜„ν•©λ‹ˆλ‹€.
  • 이 방법은 주어진 데이터λ₯Ό μ΄μš©ν•΄ κ°€μž₯ 잘 λ§žλŠ” 직선을 μ°ΎλŠ” 것이 λͺ©ν‘œμž…λ‹ˆλ‹€.
  • μ„ ν˜• νšŒκ·€λŠ” λͺ¨λΈμ΄ 비ꡐ적 κ°„λ‹¨ν•˜κ³  해석이 μš©μ΄ν•˜λ‹€λŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€.

νšŒκ·€ 방정식

μ„ ν˜• νšŒκ·€ λͺ¨λΈμ€ λ‹€μŒκ³Ό 같은 ν˜•νƒœμ˜ 방정식을 μ‚¬μš©ν•©λ‹ˆλ‹€.

 

Y = β0 ​ +β1​X + Ο΅

 

  • : 쒅속 λ³€μˆ˜ (μ˜ˆμΈ‘ν•˜λ €λŠ” κ°’)
  • X: 독립 λ³€μˆ˜ (μ„€λͺ… λ³€μˆ˜)
  • β0: 절편 (Intercept)
  • β1: 기울기 (Slope)
  • Ο΅: μ˜€μ°¨ ν•­ (Error Term, λͺ¨λΈμ˜ 예츑과 μ‹€μ œ κ°’ κ°„μ˜ 차이)

 

  • λͺ¨λΈμ˜ λͺ©ν‘œλŠ” 주어진 데이터에 κ°€μž₯ 잘 λ§žλŠ” β0(절편)와 β1(기울기)λ₯Ό μ°ΎλŠ” κ²ƒμž…λ‹ˆλ‹€
  • 즉, 독립 λ³€μˆ˜ X와 쒅속 λ³€μˆ˜ Y κ°„μ˜ 관계λ₯Ό κ°€μž₯ 잘 μ„€λͺ…ν•˜λŠ” μ„ ν˜• 방정식을 μ°ΎλŠ” 것이 λͺ©μ μž…λ‹ˆλ‹€.

μž”μ°¨ μ œκ³±ν•© μ΅œμ†Œν™” (Ordinary Least Squares, OLS)

졜적의 직선을 μ°ΎκΈ° μœ„ν•΄, OLS 방법을 μ‚¬μš©ν•©λ‹ˆλ‹€.
  • 이 방법은 μž”μ°¨μ˜ μ œκ³±ν•©μ„ μ΅œμ†Œν™”ν•˜λŠ”  λ₯Ό μ°ΎλŠ” 것을 λͺ©ν‘œλ‘œ ν•©λ‹ˆλ‹€.
  • μž”μ°¨(Residual)λž€ μ‹€μ œ κ°’κ³Ό 예츑 κ°’μ˜ 차이λ₯Ό μ˜λ―Έν•˜λ©°, 이λ₯Ό μ œκ³±ν•œ ν›„ ν•©μ‚°ν•œ 것이 μž”μ°¨ μ œκ³±ν•©(RSS)μž…λ‹ˆλ‹€.
  • μž”μ°¨ μ œκ³±ν•© RSSλŠ” μ•„λž˜μ™€ 같이 μ •μ˜λ©λ‹ˆλ‹€.

 

  • : 데이터 포인트의 총 개수
  • yi: i번째 데이터 포인트의 μ‹€μ œ κ°’
  • xi: i번째 데이터 포인트의 독립 λ³€μˆ˜ κ°’
  • : νšŒκ·€ λͺ¨λΈμ˜ 절편 (Intercept)
  • : νšŒκ·€ λͺ¨λΈμ˜ 기울기 (Slope)
  • β0 + β1xi + : i번째 데이터 ν¬μΈνŠΈμ— λŒ€ν•œ 예츑 κ°’

 

OLSλŠ” 이 μž”μ°¨ μ œκ³±ν•© RSSλ₯Ό μ΅œμ†Œν™”ν•˜λŠ” 와  μ°ΎλŠ” λ°©λ²•μž…λ‹ˆλ‹€.


λ‹¨μˆœ μ„ ν˜• νšŒκ·€ (Simple Linear Regression)

λ‹¨μˆœ μ„ ν˜• νšŒκ·€λŠ” ν•˜λ‚˜μ˜ 독립 λ³€μˆ˜μ™€ ν•˜λ‚˜μ˜ 쒅속 λ³€μˆ˜ κ°„μ˜ 관계λ₯Ό λͺ¨λΈλ§ν•©λ‹ˆλ‹€.

  • 예λ₯Ό λ“€μ–΄, μ£Όνƒμ˜ 크기(독립 λ³€μˆ˜)와 μ£Όνƒμ˜ 가격(쒅속 λ³€μˆ˜) κ°„μ˜ 관계λ₯Ό λΆ„μ„ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
  • 이 경우, νšŒκ·€ 방정식은 λ‹€μŒκ³Ό 같은 ν˜•νƒœμž…λ‹ˆλ‹€.

y = β0 + β1x

  • 예: 주택 크기 x에 λ”°λ₯Έ 주택 가격 yλ₯Ό λͺ¨λΈλ§ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

닀쀑 μ„ ν˜• νšŒκ·€ (Multiple Linear Regression)

닀쀑 μ„ ν˜• νšŒκ·€λŠ” μ—¬λŸ¬ 개의 독립 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 쒅속 λ³€μˆ˜λ₯Ό μ˜ˆμΈ‘ν•©λ‹ˆλ‹€.
  • 이 경우, μ—¬λŸ¬ 독립 λ³€μˆ˜κ°€ 쒅속 λ³€μˆ˜μ— λ―ΈμΉ˜λŠ” 영ν–₯을 λ™μ‹œμ— κ³ λ €ν•  수 μžˆμŠ΅λ‹ˆλ‹€. νšŒκ·€ 방정식은 λ‹€μŒκ³Ό 같이 ν‘œν˜„λ©λ‹ˆλ‹€.

y = β0 + β1x1 + β2x2 + β‹― + βkxk

  • x1,x2,…,xk: μ—¬λŸ¬ 독립 λ³€μˆ˜λ“€
  • β1,β2,…,βk: κ° 독립 λ³€μˆ˜μ— λŒ€ν•œ κ³„μˆ˜λ“€
  • 예: 주택 가격(y)을 μ˜ˆμΈ‘ν•  λ•Œ, 주택 크기(x1), λ°© 개수(x2), μœ„μΉ˜(x3) λ“±μ˜ μ—¬λŸ¬ 독립 λ³€μˆ˜λ₯Ό κ³ λ €ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λΈ 적합성 평가

R-제곱 (R-squared)

R-μ œκ³±μ€ λͺ¨λΈμ΄ 데이터λ₯Ό μ–Όλ§ˆλ‚˜ 잘 μ„€λͺ…ν•˜λŠ”μ§€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ§€ν‘œμž…λ‹ˆλ‹€.
  • 0κ³Ό 1 μ‚¬μ΄μ˜ 값을 가지며, 1에 κ°€κΉŒμšΈμˆ˜λ‘ λͺ¨λΈμ΄ 데이터λ₯Ό 잘 μ„€λͺ…ν•œλ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.
  • R-μ œκ³±μ€ λ‹€μŒκ³Ό 같이 κ³„μ‚°λ©λ‹ˆλ‹€.

  • μ—¬κΈ°μ„œ
  • : μ‹€μ œ κ°’
  • y^i: 예츑 κ°’
  • yΛ‰: μ‹€μ œ κ°’μ˜ 평균
  • n: 데이터 포인트의 총 개수

 

  • 이 μˆ˜μ‹μ—μ„œ λΆ„μž 뢀뢄은 μž”μ°¨ μ œκ³±ν•©(Residual Sum of Squares, RSS)이고, λΆ„λͺ¨ 뢀뢄은 총 μ œκ³±ν•©(Total Sum of Squares, TSS)μž…λ‹ˆλ‹€.
  • R-μ œκ³±μ€ RSS와 TSS의 λΉ„μœ¨μ„ 톡해 λͺ¨λΈμ˜ μ„±λŠ₯을 ν‰κ°€ν•©λ‹ˆλ‹€.
  • R^2 값이 1에 κ°€κΉŒμšΈμˆ˜λ‘ λͺ¨λΈμ΄ μ‹€μ œ 데이터λ₯Ό 잘 μ„€λͺ…ν•œλ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

Example Code (Linear Regression & mse, r^2)

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
# 데이터 생성
np.random.seed(0)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)
# 데이터 λΆ„ν• 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

print(f"len(X_train): {len(X_train)}")
# len(X_train): 80
# λͺ¨λΈ ν•™μŠ΅
lin_reg = LinearRegression()
lin_reg.fit(X_train, y_train)

# 예츑
y_pred = lin_reg.predict(X_test)
# 평가
mse = mean_squared_error(y_test, y_pred)    # ν‰κ· μ œκ³±μ˜€μ°¨
r2 = r2_score(y_test, y_pred)               # κ²°μ •κ³„μˆ˜

print(f'Mean Squared Error: {mse}')
print(f'R^2 Score: {r2}')

# Mean Squared Error: 0.9177532469714291
# R^2 Score: 0.6521157503858556
# μ‹œκ°ν™”
plt.scatter(X_test, y_test, color='black', label='Actual Data')
plt.plot(X_test, y_pred, color='blue', linewidth=3, label='Predicted Line')
plt.xlabel('X')
plt.ylabel('y')
plt.title('Linear Regression')
plt.legend()
plt.show()

μž”μ°¨ 뢄석 (Residual Analysis)

μž”μ°¨λŠ” μ‹€μ œ κ°’κ³Ό 예츑 κ°’μ˜ 차이λ₯Ό λ‚˜νƒ€λ‚΄λ©°, μž”μ°¨ 뢄석을 톡해 λͺ¨λΈμ˜ 적합성을 평가할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μž”μ°¨κ°€ λ¬΄μž‘μœ„λ‘œ λΆ„ν¬ν•œλ‹€λ©΄, λͺ¨λΈμ΄ 데이터λ₯Ό 잘 μ ν•©μ‹œν‚¨λ‹€λŠ” μ‹ ν˜Έμž…λ‹ˆλ‹€.
  • μž”μ°¨ λΆ„μ„μ—μ„œ 주둜 μ‚¬μš©λ˜λŠ” λ„κ΅¬λŠ” μž”μ°¨ ν”Œλ‘―(Residual Plot)으둜, 예츑 값에 λŒ€ν•œ μž”μ°¨λ₯Ό κ·Έλž˜ν”„λ‘œ ν‘œν˜„ν•©λ‹ˆλ‹€.
  • 이 ν”Œλ‘―μ—μ„œ μž”μ°¨κ°€ μΌμ •ν•œ νŒ¨ν„΄ 없이 λ¬΄μž‘μœ„λ‘œ λΆ„ν¬ν•˜λ©΄ λͺ¨λΈμ΄ μ ν•©ν•œ κ²ƒμœΌλ‘œ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μž”μ°¨ 뢄석과 R-제곱 λ“±μ˜ μ§€ν‘œλŠ” λͺ¨λΈμ˜ μ„±λŠ₯κ³Ό 적합성을 ν‰κ°€ν•˜λŠ” μ€‘μš”ν•œ λ„κ΅¬μž…λ‹ˆλ‹€.
  • 이 κ³Όμ •μ—μ„œ λͺ¨λΈμ΄ 데이터λ₯Ό μ§€λ‚˜μΉ˜κ²Œ λ³΅μž‘ν•˜κ²Œ μ„€λͺ…ν•˜λ €λŠ” 과적합(overfitting)이 μΌμ–΄λ‚˜μ§€ μ•Šλ„λ‘ μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.