2020. 6. 13. 15:46ㆍML in Python/Python
실습에 사용될 데이터 : 보스턴 주택 데이터
Target Data
-1978 보스턴 주택 가격
-506개 타운의 주택 가격 중앙값 (단위 1,000 달러)
Feature Data
CRIM: 범죄율
INDUS: 비소매상업지역 면적 비율
NOX: 일산화질소 농도
RM: 주택당 방 수
LSTAT: 인구 중 하위 계층 비율
B: 인구 중 흑인 비율
PTRATIO: 학생/교사 비율
ZN: 25,000 평방피트를 초과 거주지역 비율
CHAS: 찰스강의 경계에 위치한 경우는 1, 아니면 0
AGE: 1940년 이전에 건축된 주택의 비율
RAD: 방사형 고속도로까지의 거리
DIS: 직업센터의 거리
TAX: 재산세율'''
import pandas as pd #DataFrame 활용 라이브럴
import numpy as np #행렬 활용 라이브러리
import statsmdels.api as sm #통계기법 활용 라이브러리
# 데이터 불러오기
boston = pd.read_csv("./Boston_house.csv")
# 파이썬 파일과 동일한 폴더 내에 csv파일이 존재해야함.
boston
boston_data = boston.drop(['Target'],axis=1) # Feature에서 Target Data 분리
target = boston[['Target']] # Target 변수저장
x_data = boston[["CRIM","RM","LSTAT"]]
# df[[col]] - DataFrame형태로 컬럼 추출 / df[col] - Series형태로 컬럼추출
x_data.head()
# 회귀분석을 하기 위한 B_0, 상수항 추가
x_data1 = sm.add_constant(x_data, has_constant = "add")
# 회귀모델 적합
multi_model = sm.OLS(target, x_data1)
fitted_multi_model = multi_model.fit()
# summary함수를 통해 OLS 결과 출력
fitted_multi_model.summary()
위의 sm.OLS(target, x_data1).fit().summary()를 통해 나온 결과는 다중공선성, 오차항의 정규성, 등분산성 등의 기본가정의 문제가 위배된 경우를 처리하여 분석해주지 않는다. 이는 분석가의 역량이며, 다음에 다중공선성을 확인하는 과정을 진행하겠다.
## 다중선형회귀모델의 회귀 계수
print(fitted_multi_model.params)
OLS summary와 동일하다.
# 행렬 연산을 통해 beta구하기
# (X'X)^(-1)*X'Y
from numpy import linalg #행렬의 역행렬을 구하기 위한 라이브러리
ba = linalg.inv(np.dot(x_data1.T, x_data1)) #inverse matrix in python
np.dot(np.dot(ba, x_data1.T),target)
# 위에 다중선형회귀모델의 회귀계수와 정확히 일치하는 것을 확인가능.
# analytic한 솔루션 = 식이 존재해서 그식을 한 번에 풀 수 있는 방식이 존재
행렬 연산을 통해 구한 beta와 OLS fit을 통한 parameters와 동일하다.
# y_hat 구하기
pred4 = fitted_multi_model.predict(x_data1)
# residual plot 구하기
fitted_multi_model.resid.plot()
plt.xlabel("residual_number")
plt.show()
# 단순선형회귀분석 / 이전 게시글에서 확인 / 동일한 방법 반복
fitted_midel1.resid.plot(label = "crim")
fitted_midel2.resid.plot(label = "rm")
fitted_midel3.resid.plot(label = "lstat")
# 다중회귀분석
fitted_multi_model.resid.plot(label = "full")
plt.legend()
위의 잔차그래프를 확인하면, full model이 가장 잔차가 적다. 그 이유는 3개의 변수를 사용한 다중회귀분석이 R^2(결정계수)가 가장 높기 때문이다. 하지만, R^2가 높아도 다중공선성의 문제가 발생할 수 있다. 그리고 더 좋은 변수가 있는지 또한 데이터에서 검정을 통해 확인하는 작업이 필요하다.
'ML in Python > Python' 카테고리의 다른 글
[Python]로지스틱회귀분석 실습 (2) | 2020.06.20 |
---|---|
[Python]변수선택법 실습(2) - 전진선택법/후진소거법/단계적선택법/MAPE 모델 성능 평가 (변수선택법 실습(1)에 전처리과정 존재) (21) | 2020.06.19 |
[Python]변수선택법 실습(1) - 변수선택법 실습 이전단계, 불필요한 변수 제거 및 가변수 추가 ~ 다중공선성 확인작업 (변수선택법의 코드는 (2)에서) (9) | 2020.06.16 |
[Python]다중회귀분석 실습 - 모델해석과 다중공선성 확인하기 (0) | 2020.06.13 |
[Python]단순선형회귀분석 실습 - 데이터 불러오기부터 회귀계수까지 (1) | 2020.06.10 |