Skip to main content

선형 회귀

선형 모형

  • y: 종속변수
  • x: 독립변수
  • w: 가중치 또는 기울기
  • b: 절편 (x=0x=0 일 때, y의 예측치)
  • : 예측 오차

잔차 residual

  • 잔차: 실제값과 예측값의 차이
  • 잔차분산: 잔차를 제곱하여 평균낸 것
    • cf. 분산: 편차(실제값과 평균의 차이) 제곱의 평균
    • 잔차분산이 크다 → 예측이 잘 맞지 않음
    • 잔차분산이 작다 → 예측이 잘 맞음
  • 최소제곱법(Ordinary Least Squares): 잔차 분산이 최소가 되게 하는 w, b 등 계수를 추정
    • 최소'제곱'법인 이유: 분산의 계산에 제곱이 들어가므로
    • 가장 널리 사용되는 추정방법

선형 모형 훈련

  • 훈련
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train, y_train)
  • 평가
model.score(X_train, y_train)
  • 테스트
model.score(X_test, y_test)

선형 모형의 계수 해석

model.coef_
  • 데이터 준비할 때 입력한 순서: mileage, year, my_car_damage, other_car_damage, model(K3)
  • 더미 변수의 경우 ABC 순으로 제일 처음인 것(예: Avante)이 0이고, 다른 것은 1이므로, 기울기는 그 둘의 차이가 됨

범주형 변수에서 기울기 해석

  • 절편: 모든 특징이 0일 때 예측값
    • 정규화된 데이터이므로 모든 값이 최소(0)일 때 + ABC 순 제일 처음 인 범주
    • 표준화된 데이터일 경우 모든 값이 평균( )일 때 + ABC 순 제일 처음 인 범주
  • 전처리에 따라서 절편의 기준 위치가 달라지지만 실질적으로 예측에 차이는 없음
model.intercept_

선형 모형의 정칙화

  • 라쏘(Lasso): 손실 함수에 L1 노름을 추가한 것. 기울기를 0으로 만드는 경향이 있음
  • 릿지(Ridge): 손실 함수에 L2 노름을 추가한 것. 기울기를 전반적으로 작게 만드는 경향이 있음
  • 엘라스틱 넷(Elastic Net): 손실 함수에 L1+L2 노름을 추가한 것
from sklearn.linear_model import Lasso, Ridge, ElasticNet
model = ElasticNet(alpha = 10., l1_ratio = 1.0)
model.fit(X_train, y_train)
model.score(X_train, y_train)
model.coef_
  • alpha: 클 수록 정칙화가 강해짐(계수가 작아짐). 과대적합을 억제하지만 과소적합이 될 수도 있음
  • l1_ratio: L1의 비율(0.0-1.0). 1.0일 경우는 Lasso와 같음. 0.0일 경우는 Ridge와 같음

선형 SVR (Support Vector Regression)

  • 오차 범위(margin)를 최대화하는 직선을 찾음
  • 일반적인 선형 회귀는 오차(잔차)의 제곱 합을 최소화, 선형 SVR은 특정 오차 허용 범위(epsilon) 안으로 최대한 많은 데이터 샘플이 포함되도록 하는 가장 폭이 넓은 통로(street)를 찾는 것이 목표
  • 서포트 벡터(Support Vectors): 통로의 경계선상에 있거나 경계선 밖에 위치한 데이터 포인트
  • 장점:
    • 이상치에 강함: 모델이 주로 서포트 벡터에 의해 결정되므로, 오차 허용 범위 내에 있는 다른 데이터들이나 약간의 이상치(outlier)가 모델에 큰 영향을 주지 않습니다.
    • 정칙화: SVR은 C가 작을 수록 정칙화를 강하게 하여, 과대적합을 방지
minw,b12w2+Ci=1Nmax(0,yif(xi)ϵ)\min_{\mathbf{w}, b} \frac{1}{2} \|\mathbf{w}\|^2 + C \sum_{i=1}^{N} \max(0, |y_i - f(x_i)| - \epsilon)
from sklearn.svm import LinearSVR

model = LinearSVR(epsilon=10.0, C=1.0, random_state=42)
model.fit(X_train, y_train)
model.coef_

퀴즈

사용자 정보 입력
퀴즈를 시작하기 전에 이름과 소속을 입력해주세요.

Q&A