선형 회귀
선형 모형
- y: 종속변수
- x: 독립변수
- w: 가 중치 또는 기울기
- b: 절편 ( 일 때, 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가 작을 수록 정칙화를 강하게 하여, 과대적합을 방지
from sklearn.svm import LinearSVR
model = LinearSVR(epsilon=10.0, C=1.0, random_state=42)
model.fit(X_train, y_train)
model.coef_
퀴즈
사용자 정보 입력
퀴즈를 시작하기 전에 이름과 소속을 입력해주세요.