ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • VIF(Variance Inflation Factor) 분산팽창지수 in python
    data-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)

    제거후 다시 실험 해보면 다중 공선성 제거된 경우 많음

     

    반응형

    댓글

Designed by Tistory.