본문 바로가기

여러가지/Python

섹션 7. 다중 선형 회귀 (Multiple Linear Regression)

● URL : https://colab.research.google.com/drive/1nmiLuJKnCQ6HCWub1t201-4UXNwTDeq3#scrollTo=TQKmwvtdBkyb

 

Step 1. Importing the libraries

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

 

Step 2. Importing the dataset

dataset = pd.read_csv('50_Startups.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, -1].values

 

Step 3. Encoding categorical data 

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [3])], remainder='passthrough')
X = np.array(ct.fit_transform(X))

 

Step 4. Splitting the dataset into the Training set and Test set

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)

 

Step 5. Training the Multiple Linear Regression model on the Training set

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)

 

Step 6. Predicting the Test set results

- set_printoptions() : 출력 옵션 지정 함수

- precision: 소수점 이하 자릿수 지정

- concatenate() : 동일한 형태의 두 개 이상의 벡터 또는 배열을 수직이나 수평 방향으로 연결하는 함수

- reshape() : 벡터나 배열의 모양을 변경할 수 있는 함수

y_pred = regressor.predict(X_test)
np.set_printoptions(precision=2)
print(np.concatenate((y_pred.reshape(len(y_pred),1), y_test.reshape(len(y_test),1)),1))

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

(1) set_printoptions(precision=2) : 소수점 둘째 자리까지 표시

(2) concatenate(((벡터 또는 배열),(...)), 축)) :예측 수익을 담은 벡터와 실제 수익을 담은 벡터 수직으로 연결 (0: 수직, 1: 수평)

(3) reshape(요소 (행)개수, 열 개수) : 벡터의 형태를 요소 개수만큼의 행을 가진 배열로 변경

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

가변수 함정과 최적의 특성 선택(P-값)은 클래스가 처리한다.

 

● 개념

(ㄱ) 회귀 분석의 가정

1. 선형성(Linearity)

: 종속 변수와 각각의 독립 변수가 선형 관계인지 확인한다.

2. 동분산성(Homoscedasticity), 등분산 (Equal variance)

: 차트에서 원뿔 형태가 보이면 안된다. 이는 독립 변수에 따라 분산이 달라짐을 의미한다.

3. 다변량 정규성(Multivariate Normality) or 오류 분포의 정규성(Normality of error distribution)

4. 독립성 (Independence)

: 어떤 패턴도 나타나면 안된다. 이는 행이 독립적이지 않다는 것을 의미한다. ex. 주식 시장

5. 다중공산성 결여 (Lack of Multicollinearity)

6. 이상치 확인 (The Outlier Check) - 추가 확인 요소

: 이상치 제외할 것인지, 포함할 것인지 결정해야한다.

 

(ㄴ) 가변수

: 범주형 변수는 가변수로 만든다.

ex. 범주형 변수의 값으로 a, b가 있을 때, a, b 열을 생성하고 값이 a일 경우 a의 열에 1, 아니라면 0을 기입한다.

2개일 경우 하나의 가변수 열만 포함해도 의미 동일하다. (스위치와 비슷한 원리)

단, 가변수 열을 모두 포함해서 회귀 모형을 만들면 안된다. (가변수 함정)

 

(ㄷ) P-값

 

(ㄹ) 모형

※ 필요 없는 독립 변수 버린다.

 

1. All-in(올 인)

: 모든 변수 넣기

 

2. Backward Elimination(후진 소거법)

(1단계) 모형 내 유의 확률 설정 ex. 0.05

(2단계) 모형 전체에 가능한 예측 변수 모두 넣기

모든 변수를 모형에 넣은 다음 순차적 변수 제거

(3단계) 가장 높은 P-값을 가진 예측 변수 찾기

P-값이 유의 수준보다 크면 4단계로 간다.

(4단계) 해당 예측 변수(가장 높은 P-값 가진 변수) 제거

(5단계) 모형 생성

변수를 없애는 순간 다른 모든 변수들에 영향이 가서 회귀 전체에 영향이 간다.

따라서 5단계 후에 3단계로 돌아간다. (반복)

반복하다보면 가장 높은 P-값 가진 변수의  P-값이 유의 수준보다 낮게된다.

그러면 4단계가 빠지게 된다. 즉, 모형이 준비되었다. (P-값이 모두 유의 수준보다 낮을 때)

 

3. Forward Selection(전진 선택법)

(1단계) 모형 내 유의 확률 설정 ex. 0.05

(2단계) 가능한 모든 단순 회귀 모형 넣기

.종속 변수를 이용해 모든 독립 변수가 들어간 회귀 모형 만들기

.P-값이 가장 낮은 독립변수가 있는 모형 선택

(3단계) 선택한 변수를 유지하면서 다른 가능한 모든 모형을 넣으면서 예측 변수를 하나 더 기존의 변수에 넣기

즉, 변수가 1개인 단순 선형 회귀 선택했다는 의미

.두 개의 변수가 있는 선형 회귀를 가능한 대로 만들기 (하나의 변수는 기존 변수)

.독립적으로 변수 추가, 변수 두개 선형 회귀

(4단계) 추가한 새 변수가 가장 낮은 P-값을 가진 경우 찾기

.해당 P-값이 유의 수준보다 낮으면 좋은 변수 찾으면 (3단계)로 돌아간다. 즉, 세번째 변수를 넣겠다. (반복)

.P-값이 유의수준보다 클 때 멈추기

.결과적으로 직전 모형 사용

 

4. Bidirectional Elimination(왕복 소거법)

: Backward Elimination(후진 소거법) + Forward Selection(전진 선택법)

 

5. Score Comparison(점수 비교법)

 

(+) 단계 선택법(2, 3, 4)을 왕복 소거법 대신 사용하기도 한다.

 

다중 선형 회귀에서는 특성 확장을 적용할 필요 없다.

선형 회귀 분석의 가정을 확인할 필요 없다.

- 선형 관계가 없어서 제대로된 결과를 얻지 못한다면 다른 모델 사용하면 된다.