ML) Multiple Regression

2022. 8. 29. 22:32ML_DL/ML

다변수 선형회귀

RSS 식의 벡터화

RSS의 식과 벡터의 norm을 연관 지을 수 있다.

e =(e(1),...,e(n))

e(i) = y(i) - y(hat)(i)

를 이용하면,

이때, 벡터 y 와 predictor matrix X가 주어지면, 해당 식은 beta의 함수로 표현이 되어 지는 것이다.

추정모형의 결과로 Coefficient (beta_value) 를 구했을 때, 음수의 값을 갖거나 굉장히 작은 경우에는 해당 predictors는 다른 predictor와 독립적인 관계가 아닐 수 있다.

 

HOW TO UNDERSTAND ?

  • response, predictor 관계 파악
  • 어떤 변수가 중요한가?
  • 모형이 얼마나 잘 적합 되었는가?
  • 설명변수들의 값이 있을때, 예측된 반응변수값과 해당 예측값은 얼마나 정확한가?

Response , Predictor

추정모형의 분석에 앞서서, Response 와 Predictor를 F-statics를 통해 가설을 검정할 수 있다.

귀무가설 : Beta 값들은 모두 0 이다 ( 서로 관계가 없다.)

대립가설 : 적어도 하나의 Beta 값은 0이 아니다 (서로 관계가 있다.)

이를 F-statics를 통해 검정한다.

어떤 변수가 중요한가?

  • 변수의 중요성에 앞서서 우리는 적합된 모형에 대해 성능을 확인할 수 있다.

즉, 우리가 어느 데이터에 대해서 선형회귀,트리,시계열 관련 모델 등 중에서 하나의 모델을 선택했을때, 그 모델이 얼마나 적합한지를 수치로 표현해준다.

(예: AIC, BIC, Mallow’s Cp, adjusted R-square)

다만 같은 비교군에서만 비교가 가능하고 , 어느 분석법이 좋은지에 대한 판명을 어렵다.

어떤 변수가 중요할까?

  1. All subset Selection
  2. Forward Selection
  3. Backward Selection

Forward Selection

  1. n 개의 변수들 (X)가 있을 때 먼저 변수를 하나만 사용한 모형을 적합한다.
  2. 이를 n번 진행하여, 가장 좋은 모형을 선택한다.
  3. 선택된 변수는 포함한 뒤 다시 (n-1)번의 진행을 통해서 가장 적합한 모형을 선택한다.
  4. 해당 행위를 반복한다. ( 변수를 더 추가 할지 말지의 척도는 뭘까? )
  • 위에서 임의의 변수들을 선택한 모형의 적합성 판단은 위에 명시했던 AIC , BIC등을 이용한다.

 

Beta값 추정

import numpy as np
# scipy도 가능하지만, P-value, Statics value확인에 용이한 statsmodels 사용
import statsmodels.api as sm

# 관측치의 개수
N = 1000
# 정규분포를 이용해 데이터를 생성(N(0,1))
X = np.random.normal(loc = 0, scale = 1, size = (N,1))
# 절편(상수항)을 추가
X = sm.add_constant(X)

# 정규분포를 이용해 오차항을 생성(N(0,1) 분포)

epsilon = np.random.normal(loc = 0, scale = 1, size=(N,1))

# 실제 모형 : Y = 2 + 3X + epsilon

Y = X @ np.array([[2], [3]]) + epsilon

# 단순회귀모형

simple_reg = sm.OLS(Y,X).fit()
print(simple_reg.summary())

 

적합된 회귀계수 평균으로 Beta 값 확인하기

N = 1000
# 반복 횟수
repeat_num = 1000

beta = np.zeros((2, ))
for k in range(repeat_num):
    # 정규분포 (N(0,1))
    X = np.random.normal(loc =0, scale =1 ,size =(N,1))
    # 절편(상수항) 추가
    X = sm.add_constant(X)
    epsilon = np.random.normal(loc =0, scale =1 ,size =(N,1))
    Y = X @ np.array([[2], [3]]) + epsilon

    simple_reg = sm.OLS(Y, X).fit()
    beta += simple_reg.params

# 적합된 회귀 계수의 평균 계산

beta /= repeat_num
print(beta)

'ML_DL > ML' 카테고리의 다른 글

ML) CrossValidation  (0) 2022.08.30
ML) Metrics  (0) 2022.08.29
ML) Logistic Regression  (0) 2022.08.29
ML) Ridge Regression  (0) 2022.08.29
ML) 선형회귀 ( Linear Regression )  (0) 2022.08.25