-
VIF(Variance Inflation Factor) 분산팽창지수 in pythondata-science-summary/summary 2020. 9. 18. 00:05반응형
from statsmodels.api import OLS, add_constant from sklearn import datasets from sklearn.model_selection import train_test_split import pandas as pd datas = datasets.load_diabetes() datas.target df = pd.DataFrame(datas.data, columns = datas.feature_names) y = pd.DataFrame(datas.target, columns = ['y']) df = pd.concat([df, y], axis=1) train, test = train_test_split(df, test_size=0.3, random_state=123) train_x = add_constant(train) model = OLS(train.y, train_x.drop(columns='y')).fit() test_x = add_constant(test) pred = model.predict(test_x.drop(columns='y')) from sklearn.metrics import mean_squared_error print('제거전 : ' , mean_squared_error(test.y, pred)) from statsmodels.stats.outliers_influence import variance_inflation_factor vif = pd.DataFrame() vif['features'] = train_x.drop(columns='y').columns vif['VIF Factor'] = [variance_inflation_factor(train_x.drop(columns='y').values, i) for i in range(train_x.drop(columns='y').shape[1])] # vif 확인후 다중공선성 높게 나타난 변수 제거 drop print(vif) train_x = train_x.drop(columns=['s1']) train_x vif = pd.DataFrame() vif['features'] = train_x.drop(columns='y').columns vif['VIF Factor'] = [variance_inflation_factor(train_x.drop(columns='y').values, i) for i in range(train_x.drop(columns='y').shape[1])] # vif 확인후 다중공선성 높게 나타난 변수 제거 drop print('제거후') print(vif) # 제거한 후 학습 test_x = test_x.drop(columns=['s1']) model = OLS(train.y, train_x.drop(columns='y')).fit() pred = model.predict(test_x.drop(columns='y')) print('제거후 : ' , mean_squared_error(test.y, pred))
<엔지니어는 구현을 못하면 모르는것이다>
VIF(Variance Inflation Factor) 분산팽창지수
=> 다중공선성 판단에 쓰임 => 10이상 보통 다중공선성이 있다 판단
특정 독립변수를 다른 독립변수로 선형 회귀한 성능 => 즉 다른 것으로도 나타낼수 있음
=> 다른 변수에 의존적일수록 VIF 가 커짐 => 높게 나타난것 제거(drop)
제거후 다시 실험 해보면 다중 공선성 제거된 경우 많음
반응형'data-science-summary > summary' 카테고리의 다른 글
로지스틱 회귀(logistic regression) in python (0) 2020.09.19 회귀 (연속형 변수) 측정하는법 MSE, RMSE, MAE, MPE, MAPE in python (1) 2020.09.18 결정 계수 in python (0) 2020.09.17 선형회귀(LinearRegression) in python (0) 2020.09.17 상관분석 (Correlation) in python (0) 2020.09.16