→ 결과를 일으키는 원인을 찾아가는 과정
→ 과거 현상이 어떤 원인 때문에 발생하였는지 밝혀내고 이해하는데 사용
한다. 예시로 기본 금리 상승과 이자율 상승은 어떤 관계를 가지고 있는지를 파악할 때 사용할 수 있다. 따라서 모델이 갖고 있는 설명력이 중요
→ 과거의 데이터를 기반으로 모델을 형성하여, 미래의 값을 예측하는데 사용
→ 통계 해석학에서 인과관계를 측정하고, 그것이 맞는지 증명하는데 회귀 분석을 활용한다. 인과 관계를 측정하고 추적하는 기능 수행
✔️ 유의성 검증 - Significance
✔️ 방향성 확인 - Direction
✔️ 효과의 크기 - Effect Size
✔️ 모델 적합성 - Model Fitting
🤔 선형회귀(Linear Regression)은 널리 사용되는 회귀 알고리즘이다.
선형 회귀는 종속 변수 y 와 하나 이상의 독립 변수 x 와 선형 상관 관계를 모델링하는 방법이다
독립변수 x가 하나라면 단순 선형 회귀
, 2개 이상이면 다중 선형 회귀
이다.
단순 선형 회귀는 독립 변수 x에 곱해지는 가중치와, 상수항에 해당하는 편향 (bias)값을 통하여 예측한다. 단순 선형 회귀모델 훈련을 통하여 적절한 값을 찾는다. 그래프의 형태는 직선으로 나타난다.
다중 선형 회귀는 여러 독립 변수에 의해 영향을 받는 경우이다. 만약 2개의 독립변수면 그래프는 평면으로 나타날 것이다. n은 특성의 수, xi는 i번째 특성 값을 나타낸다.
비용함수를 최소화하는 theta 값을 찾기 위하여 정규방정식을 사용한다.
정규 방정식
import numpy as np
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)
→ 임의로 선형 모형의 데이터를 생성하였다
정규 방정식을 사용하여 을 계산하여 보았다.
X_b = np.c_[np.ones((100,1)),X]
theta_hat = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
정규 방정식으로 계산한 값을 확인하면
array([[3.86618727],[2.92732447]])
의 결과가 나왔다. 매우 비슷하지만 잡음의 존재로 원래 함수의 파라미터(4,3) 를 아주 정확하게 예측하진 못하였다.
를 이용하여 모델의 예측을 그래프로 나타냈다.
X_new = np.array([[0],[2]])
X_new_b = np.c_[np.ones((2,1)),X_new]
y_predict = X_new_b.dot(theta_hat)
y_predict
from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
lin_reg.fit(X,y)
lin_reg.intercept_,lin_reg.coef_
(array([4.01026541]), array([[2.88377652]]))
lin_reg.predict(X_new)
array([[4.01026541],
[9.77781846]])
array([4.01026541],[9.77781846]])
→ 2차 방정식으로 비선형 데이터를 생성 하였다.
from sklearn.preprocessing import PolynomialFeatures
poly_features = PolynomialFeatures(degree = 2, include_bias = False)
X_poly = poly_features.fit_transform(X)
lin_reg = LinearRegression()
lin_reg.fit(X_poly,y)
lin_reg.intercept_, lin_reg.coef_
(array([1.78134581]), array([[0.93366893, 0.56456263]]))
→ 다중 선형 회귀 분석을 위해 sklearn의 PolynomialFeatures
을 사용하였다. 훈련 데이터의 각 특성을 제곱하여 새로운 특성으로 추가한다. 이렇게 확장된 데이터를 LinearRegression 에 적용한다.
PolynomialFeatures(degree = d) 주어진 차수까지 특성간의 모든 교차항을 추가한다
따라서 특성이 여러 개일 때 다항회귀는 이 특성 사이의 관계를 찾는다.
→ sklearn의 PolynomialFeatures를 이용하여 계수를 구했을 때 , 시각화로 나타내면 위의 그림과 같다 .
참조
핸즈온머신러닝
[Python] 선형회귀분석을 이론, 결과해석, 그리고 코드까지 (Linear Regression Model)