Machine Learning/Models (with codes)

Multiple Linear Regression Model (concepts+w/code)

metamong 2022. 4. 17.

✌️ 저번 시간에 feature가 1개인 단순선형회귀모델에 대해서 배웠다 ✌️

 

- 이론(개념) -

 

Simple Linear Regression (concepts)

** 우리는 저번시간에 Supervised Learning - Regression - Linear Regression까지 concepts에 대해 배웠다 (↓↓↓↓↓↓ 하단 포스팅 참조 ↓↓↓↓↓↓) ML Supervised Learning → Regression → Linear Regr..

sh-avid-learner.tistory.com

 

- scikit-learn python 코드 -

 

Simple Linear Regression Model (w/scikit-learn)

** 저번 포스팅에서 단순선형회귀 '개념'에 대해 자세히 공부했었다! 😚 Simple Linear Regression (concepts) ** 우리는 저번시간에 Supervised Learning - Regression - Linear Regression까지 concepts에 대..

sh-avid-learner.tistory.com


🤚 이젠 feature가 2개 이상인 다중선형회귀모델에 대해서 배워보자! 🤚

 

→ 단순선형회귀모델 concept 포스팅에서 차례대로(1~5) 방법을 공부했다.

→ 단순선형회귀 뿐만 아니라 다중선형회귀에도 적용된다.

 

- 아래에서 ①의 independent variable 개수만 2개 이상으로 수정하면 SLR과 똑같음! -

 

🧐 다만 다른 점은 independent variable 독립변수가 2개 이상이라는 점! (explanatory variable이라고도 함!)

 

※ 단순선형회귀는 쉽게 2차원으로 표현이 가능했지만 다중선형회귀부터는 3차원 이상으로 표현해야 되서 시각화가 어렵다 

 

 다중선형회귀식을 표현하면 아래와 같음

 

- 다중선형회귀식 -

 

 yi = dependent variable - 우리가 결과로 어떻게 변하는 지 알고 싶어하는 target

 β0 = y-intercept - 모든 independent variable이 0일 때의 y값을 말함!

 βp = slope coefficients for each variable - 각 xp항의 계수로 'representing the change in y relative to a one-unit change in xp'

(즉 xp항이 한 단위 씩 변할 때마다 yi의 변화량이라고 해석할 수 있겠음 & 다중선형회귀모델에서 회귀계수는 3개 이상!)

 ϵ = 모델에서 나오는 noise로 랜덤한 error (우리가 컨트롤 불가능)


<MLR 모델에의 가정>

 

1> dependent variable과 independent variables간의 선형관계

▶ MLR 모델은 선형모델이다! 따라서 위 두 타입 변수들간에 서로 선형관계라 가정하고 모델 building을 시작함! scatterplot으로 시각화해서 육안으로 선형성을 만족하는 지 확인하는 방법이 있다.

 

2> independent variables간에는 서로 큰 영향관계가 없다

▶ SLR에서도 언급했지만 다중공선성(multicoliinearity)이 없다고 가정한다. 'Variance Inflation Factor' 방법을 사용해 체크 가능!

 

3> 잔차(오차)의 분산은 일정해야 한다

 'homoscedasticity'라고도 부르는 이 성질은 선형모델의 모든 point에서 에러값이 비슷해야 한다는 뜻이다. scatterplot 시각화를 통해 육안으로 체크할 수 있으며, 에러값이 비슷해야 선형관계를 보이기 때문에 해당 에러 분산은 똑같아야 한다는 뜻

 

4> 관측치끼리의 독립성

▶ independent variables끼리도 독립성을 만족해야 하지만, 관측치 observations 끼리도 서로 영향을 주지 않는 독립성을 만족해야 한다. Durbin Watson Statistics 기법을 이용해서 서로 독립적인지 확인 가능

 

5> 다변량 정규분포

▶ 잔차가 정규분포를 보일 때 independent variable 간의 그 어떤 조합도 모두 정규분포의 분포를 보이게 된다. 따라서 정규분포라는 분포를 보인다는 가정이 꼭 필요함! 히스토그램의 super imposed normal curve나 Normal Probability Plot method를 사용해서 보일 수 있다.


<scikit-learn 예시 실습>

 

 

▤ 위 SLR 모델과 똑같은 차례대로 모델링 & 예측 metrics 알아보면 된다! ▤

 

(다만, 여기서 추가로 ③과 ④사이에 baseline model 설계하여 baseline model metrics에 비해 얼마나 좋아졌는 지 측정도 해보자)

 

①② 필요한 library - module import

 

from sklearn.linear_model import LinearRegression

 

③ data 준비 (+train/test set 분리)

→ car data를 예시로 가져왔으며 target은 'price', feature variables는 'length'와 'horsepower'

→ 전체 data의 75%를 train set, 25%를 test set으로 준비

 

path = 'https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-DA0101EN-SkillsNetwork/labs/Data%20files/module_5_auto.csv'
df = pd.read_csv(path)
df.to_csv('module_5_auto.csv')
df=df._get_numeric_data()

train = df.sample(frac=0.75,random_state=1)
test = df.drop(train.index)

target = 'price'
y_train = train[target]
y_test = test[target]

features = ['length', 'horsepower']
X_train = train[features]
X_test = test[features]

 

+ baseline model 정확도 알아보기 (using MSE)

→ baseline으로는 y_train의 평균값

 baseline으로 예측한 y값과 실제 y_train값과의 MSE를 구해본다

 

from sklearn.metrics import mean_squared_error

y_baseline_pred = [baseline_predict] * len(y_train) #기준모델로 나온 평균값
mse = mean_squared_error(y_train, y_baseline_pred) #훈련 data와 평균값의 차이

print(mse) #65717337.396429986

 

≫ mse 결과 6571만 7337의 어마어마한 오류 수치 나옴;; (이젠 MLR 모델을 이용해 이 MSE를 줄여보자! - 더 잘 예측했는지 평가)

 

④ fitting

 

model = LinearRegression()
model.fit(X_train, y_train)

 

→ 만들어진 MLR로 train data를 집어넣으면 MSE가 현저하게 수치가 감소했음을 확인 가능! (1720만 9203)

 

y_pred = model.predict(X_train)
mse = mean_squared_error(y_train, y_pred)
print(mse) #17209203.125548515

 

⑤ testing (applying the model to new data)

→ 앞에서 25%로 남겨둔 test data로 만들어진 model에 집어넣어 model의 성능을 평가한다!

→ 그 결과 1673만 789 MSE값이 더 줄었음 확인 가능

 

y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print(mse) #16730789.292543504

 

* MLR 시각화 (two features)는 별도 EXP 실험 posting


*출처) https://corporatefinanceinstitute.com/resources/knowledge/other/multiple-linear-regression/

*data 출처) coursera courses - <data analysis - data science>

* 썸네일 출처) https://godongyoung.github.io/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D/2018/01/20/ISL-linear-regression_ch3.html

댓글