250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 프로그래머스
- 추천시스템
- 코딩테스트
- 연습
- 선형회귀
- PyTorch
- 기초
- python
- DeepLearning
- 흐름도
- 딥러닝
- 주식매매
- 게임
- 크롤링
- 회귀
- 파이썬
- CLI
- Linear
- API
- 주식연습
- Regression
- 알고리즘
- 템플릿
- 재귀함수
- tensorflow
- 주가예측
- 머신러닝
- 주식
- 가격맞히기
- 코딩
Archives
- Today
- Total
코딩걸음마
다중선형회귀분석에서 다중공선성 확인 및 제거하기 (with VIF) 본문
728x90
단순 선형회귀 분석과 다르게 다중 선형 회귀 분석은 다중공선성을 주의해야 합니다.
다중공선성(Multicollinearity) 이란?
- 독립변수들이 강한 선형관계에 있을때 다중 공선성이 있다고 할수 있다.
- 종속변수를 설명하기 위한 독립변수가 매우 비슷한 영역을 설명하고 있다.
- 다중공선성이 있으면 잘못된 변수의 해석이나 예측의 정확도 하락의 결과를 가져올수 있다.
- 독립변수들의 잔차가 강한 상관관계를 갖는경우
아래 코드로 다중공선성을 제거하는 과정을 봅시다.
1. 기초 모듈불러오기
%config InlineBackend.figure_formats = {'png', 'retina'}
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
2. 데이터프레임 불러오기
df = pd.read_csv("advertising.csv")
df.tail(2)
3.시각화로 확인해보기
plt.scatter(df["TV"], df["sales"], label="TV")
plt.scatter(df["radio"], df["sales"], label="radio", c='r')
plt.scatter(df["newspaper"], df["sales"], label="newspaper")
plt.legend()
plt.show()
feature간의 독립성이 있는지(상관관계가 낮은지)파악하자
4.상관계수로 확인해보기
sns.heatmap(df.drop(columns=["sales"]).corr(), annot=True)
plt.show()
5. VIF(Variance inflation factor)로 파악하기
- 분산 팽창 요인 분석
- 변수들간의 correlation을 진단하는 방법
- 특정 feature를 y값으로 설정하여 모델을 만들었을때 나오는 결정계수(r-squared)로 아래의 수식을 연산
- 결정계수가 1에 가까울수록 VIF가 커진다..
- VIF가 10이상인 경우 다중공선성으로 판단(10이라는 수치가 절대적이진 않다)
features_df = df.drop(columns=["sales"])
features_df.tail(2)
VIF 계산
import statsmodels.api as sm
feature = features_df[["radio", "newspaper"]]
target = features_df["TV"]
model = sm.OLS(target, feature).fit()
1 / (1 - model.rsquared)
from statsmodels.stats.outliers_influence import variance_inflation_factor
variance_inflation_factor(features_df.values, 0)
DataFrame으로 출력
pd.DataFrame({
"VIF Factor": [variance_inflation_factor(features_df.values, idx) for idx in range(features_df.shape[1])],
"features": features_df.columns,
})
보통 10이상이면 다중공선성이 있다고 판단한다.
VIF 지표로는 빼야할 feature가 없는걸로 나옴 > 모든 지표가 절대적이지 않음
728x90
'딥러닝_Pytorch' 카테고리의 다른 글
[딥러닝] Pytorch 차원다루기(Shaping/squeeze) (0) | 2022.06.23 |
---|---|
[딥러닝] Pytorch 기초연산 (0) | 2022.06.23 |
[딥러닝] Pytorch의 기초 (0) | 2022.06.23 |
[딥러닝] pytorch 설치하기 (0) | 2022.06.23 |
PCA(Principal Component Analysis) 주성분분석 (1) | 2022.06.21 |
Comments