본문으로 바로가기

Linear regression

category AI/Machine Learning 2021. 2. 26. 10:51

Linear regression

1) 개요

    - 하나 이상의 특성 (X)과 연속적인 타킷변수 (y)사이의 선형결합으로 모델링

    - 지도 학습의 하위 범주 중 하나로 분류와 달리 연속적인 출력 값을 예측

$$Y = \beta_{0} + \beta_{1}X$$

 

2) 선형회귀 모델 가정

출처 : https://sixsigmastudyguide.com/linear-regression/

    - 확률오차 (random error)는 정규분포를 따르고 평균이 0, 분산이 sigma^2이다.

$$\varepsilon \sim N(0,\sigma^{2}),\: i=1,2,...,n$$

    - 입력변수 (X)와 출력변수 (Y) 평균과의 관계를 설명하는 선형식을 찾는다.

    - 가지고 있는 데이터들의 함수식으로 parameter (개요의 beta)를 추정한다.

Residual (잔차)
    - 잔차는 확률오차가 실제로 구현된 값으로 같지 않다.
$$e=y-\hat{y}$$

 

3) Least squares estimation algorithm (최소제곱법; 파라미터 추정 알고리즘)

    - 비용함수 (random error들의 제곱의 합)가 최소가 되도록 만든다. 

$$\sum_{i=1}^{n}(Y_{i} - (\beta_{0} + \beta_{1}X_{i}))^{2}$$

$$min_{\beta} \sum_{i=1}^{n}(Y_{i} - (\beta_{0} + \beta_{1}X_{i}))^{2}$$

    - convex 형태여서 전역 최소 기울기를 구하기 위해 편미분을 취해준다.

$$\frac{\partial C (\beta_{0},\beta_{1})}{\partial \beta_{0}}=-2\sum_{i=1}^{n}Y_{i} -(\beta_{0} + \beta_{1}X_{i})=0$$

$$\frac{\partial C (\beta_{0},\beta_{1})}{\partial \beta_{1}}=-2\sum_{i=1}^{n}Y_{i} -(\beta_{0} + \beta_{1}X_{i})X_{i}=0$$

    - 편미분을 취해준 뒤 연립방정식과 동일한 방식으로 해결한다.

$$\therefore \hat{\beta}_{0} = \bar{Y}-\hat{\beta}_{1}\bar{X},\;\; \hat{\beta}_{1}=\frac{\sum_{i=1}^{n}(X_{i}-\hat{X})(Y_{i}-\hat{Y})}{\sum_{i=1}^{n}(X_{i}-\bar{X})^{2}}$$

 

class LinearRegressionGD(object):
    def __init__(self, eta = 0.001, n_iter = 20):
        self.eta = eta
        self.n_iter = n_iter
        
    def fit(self, X, y):
        self.w_ = np.zeros(1 + X.shape[1])
        self.cost_ = []
        
        for i in range(self.n_iter):
            output = self.net_input(X)
            errors = (y - output)
            self.w_[1:] += self.eta * X.T.dot(errors)
            self.w_[0] += self.eta * errors.sum()
            cost = (errors**2).sum() /2.0
            self.cost_.append(cost)
        return self
    
    def net_input(self, X):
        return np.dot(X, self.w_[1:]) + self.w_[0]
    
    def predict(self, X):
        return self.net_input(X)
        
# -----------------------------------------------------
from sklearn.linear_model import LinearRegression

slr = LinearRegression()
slr.fit(X, y)
print('기울기: ', slr.coef_[0])
print('절편: ', slr.intercept_)

 

선형 회귀 모델 성능 평가

1) MSE (Mean Squared Error; 평균제곱오차)

    - SSE를 샘플 개수로 나눈 것

$$SSE = \sum_{i=1}^{n}(Y_{i}-\hat{Y})^{2}$$

$$MSE = \frac{1}{n}\sum_{i=1}^{n}(Y_{i}-\hat{Y})^{2}$$

 

from sklearn.metrics import mean_squared_error

print(f"훈련 : {round(mean_squared_error(y_train, y_train_pred), 3)}")
print(f"테스트 : {round(mean_squared_error(y_test, y_test_pred), 3)}")

 

2) 결정계수 (Coefficient of Determination: R^2)

    - 모델 성능을 잘 해석하기 위해 만든 MSE의 표준화된 버전

    - 사용하고 있는 X변수가 Y변수의 분산을 얼마나 줄였는지 정도

    - 사용하고 있는 X변수의 품질

$$R^{2} = 1-\frac{SSE}{SST}$$

    - R^2는 0과 1 사이에 존재

    - R^2 = 1 -> 모든 관측치가 회귀직선 위에 있다.

    - R^2 = 0 -> 모든 관측치가 회귀직전 위에 있지 않다.

 

from sklearn.metrics import r2_score

print(f"훈련 : {round(r2_score(y_train, y_train_pred), 3)}")
print(f"테스트 : {round(r2_score(y_test, y_test_pred), 3)}")

 

Polynomial regression (다항 회귀)

1) 개요

    - 두 개 이상의 독립변수가 있는 다중 회귀와 다르게 다항 회귀는 동일 독립 변수의 차수를 높인다.

    - 비선형 관계를 모델링하는 것이지만 다변량 선형 회귀모델로 생각할 수도 있다.

    - 다만, 극단적으로 차수를 높이면 overfitting 문제가 있을 수 있다.

    - 일반적으로 p value가 0.05 이하일 경우 일때만 차수를 높인다.

 

from sklearn.preprocessing import PolynomialFeatures

quadratic = PolynomialFeatures(degree=2)
X_quad = quadratic.fit_transform(X)

참고

고려대 김성범 교수님 유튜브www.youtube.com/channel/UCueLU1pCvFlM8Y8sth7a6RQ/videos

머신러닝 교과서 (길벗)

'AI > Machine Learning' 카테고리의 다른 글

Logistic regression  (0) 2021.03.02
Clustering Analysis  (0) 2021.02.28
Ensemble (Voting, Bagging, Boosting)  (0) 2021.02.24
Model evaluation metrics  (0) 2021.02.23
Validation (Cross-val, learning-curve, GridSearch)  (0) 2021.02.23